Class: Cloudscale::Plugins::MongoServerStatus

Inherits:
Plugin
  • Object
show all
Defined in:
lib/cloudscale/plugins/mongo/mongo_server_status.rb

Instance Attribute Summary collapse

Attributes inherited from Plugin

#log, #plugins

Instance Method Summary collapse

Methods inherited from Plugin

inherited, plugins

Constructor Details

#initializeMongoServerStatus

Returns a new instance of MongoServerStatus.



18
19
20
21
22
23
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 18

def initialize
  super
  if is_enabled
    @client = Preops::MongodbPreop.instance.client
  end
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



12
13
14
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 12

def client
  @client
end

Instance Method Details

#collect(agentInstanceId) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 25

def collect(agentInstanceId)
  registry = Monitor::Registry.instance
  metrics = Metrics::Agent.new
  log.info("Calling Collect on MongoServerStatus")
  stats = @client.command(:serverStatus => 1).first
  report_index_counters(registry, metrics, stats)
  report_global_lock_times(registry, metrics, stats)
  report_op_counters(registry, metrics, stats)
  report_general_information(registry, metrics, stats)
  report_memory(registry, metrics, stats)
  report_network(registry, metrics, stats)
end

#is_enabledObject



14
15
16
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 14

def is_enabled
  Preops::MongodbPreop.instance.is_enabled
end

#report_general_information(registry, metrics, stats) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 76

def report_general_information(registry, metrics, stats)

  registry.metrics["mongo.general.uptime"] = metrics.gauge :general_uptime do
    { :value => stats['uptime'] }
  end

  registry.metrics["mongo.general.connections.currently"] = metrics.gauge :general_connections_current do
    { :value => stats['connections']['current'] }
  end

  registry.metrics["mongo.general.connections.available"] = metrics.gauge :general_connections_available do
    { :value => stats['connections']['available'] }
  end

  registry.metrics["mongo.general.connections.total"] = metrics.gauge :general_connections_total do
    { :value => stats['connections']['totalCreated'] }
  end
end

#report_global_lock_times(registry, metrics, stats) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 144

def report_global_lock_times(registry, metrics, stats)

  if stats['globalLock']
    registry.metrics["mongo.global.lock.time"] = metrics.gauge :global_lock_time do
      { :value => stats['globalLock']['lockTime'] }
    end

    registry.metrics["mongo.global.lock.total.time"] = metrics.gauge :global_lock_total_time do
      { :value => stats['globalLock']['totalTime'] }
    end
  end
end

#report_index_counters(registry, metrics, stats) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 118

def report_index_counters(registry, metrics, stats)
  {"accesses"=>6896, "hits"=>6896, "misses"=>0, "resets"=>0, "missRatio"=>0.0}

  if (stats["indexCounters"])
    registry.metrics["mongo.index.counters.accesses"] = metrics.gauge :counters_accesses do
      { :value => stats['indexCounters']['accesses'] }
    end

    registry.metrics["mongo.index.counters.misses"] = metrics.gauge :counters_misses do
      { :value => stats['indexCounters']['misses'] }
    end

    registry.metrics["mongo.index.counters.hits"] = metrics.gauge :counters_hits do
      { :value => stats['indexCounters']['hits'] }
    end

    registry.metrics["mongo.index.counters.resets"] = metrics.gauge :counters_resets do
      { :value => stats['indexCounters']['resets'] }
    end

    registry.metrics["mongo.index.counters.missRatio"] = metrics.gauge :counters_missRatio do
      { :value => stats['indexCounters']['missRatio'] }
    end
  end
end

#report_memory(registry, metrics, stats) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 38

def report_memory(registry, metrics, stats)

  registry.metrics["mongo.mem.bits"] = metrics.gauge :mem_bits do
    { :value => stats['mem']['bits'] }
  end

  registry.metrics["mongo.mem.resident"] = metrics.gauge :mem_resident do
    { :value => stats['mem']['resident'] }
  end

  registry.metrics["mongo.mem.virtual"] = metrics.gauge :mem_virtual do
    { :value => stats['mem']['virtual'] }
  end

  registry.metrics["mongo.mem.mapped"] = metrics.gauge :mem_mapped do
    { :value => stats['mem']['mapped'] }
  end

  registry.metrics["mongo.mem.mappedWithJournal"] = metrics.gauge :mem_mappedWithJournal do
    { :value => stats['mem']['mappedWithJournal'] }
  end
end

#report_network(registry, metrics, stats) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 61

def report_network(registry, metrics, stats)

  registry.metrics["mongo.network.bytes.in"] = metrics.gauge :network_bytesIn do
    { :value => stats['network']['bytesIn'] }
  end

  registry.metrics["mongo.network.bytes.out"] = metrics.gauge :network_bytesOut do
    { :value => stats['network']['bytesOut'] }
  end

  registry.metrics["mongo.network.num.requests"] = metrics.gauge :network_numRequests do
    { :value => stats['network']['numRequests'] }
  end
end

#report_op_counters(registry, metrics, stats) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/cloudscale/plugins/mongo/mongo_server_status.rb', line 95

def report_op_counters(registry, metrics, stats)

  registry.metrics["mongo.opcounts.insert"] = metrics.gauge :opcounters_inserts do
    { :value => stats['opcounters']['insert'] }
  end

  registry.metrics["mongo.opcounts.query"] = metrics.gauge :opcounters_query do
    { :value => stats['opcounters']['query'] }
  end

  registry.metrics["mongo.opcounts.update"] = metrics.gauge :opcounters_update do
    { :value => stats['opcounters']['update'] }
  end

  registry.metrics["mongo.opcounts.delete"] = metrics.gauge :opcounters_delete do
    { :value => stats['opcounters']['delete'] }
  end

  registry.metrics["mongo.opcounts.getmore"] = metrics.gauge :opcounters_getmore do
    { :value => stats['opcounters']['getmore'] }
  end
end