sensu-plugins-eventstore 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd3b498614fc48433c6b31fcf2a47b36585bb396
4
- data.tar.gz: d1fb25dcbc5df159d4157dab945458f086cfef66
3
+ metadata.gz: 8f59afdbc50e0e95fbc595615582987d47d6dca6
4
+ data.tar.gz: 615a56334db39ed7c1b80ab9ba11ae81b2f5a8a5
5
5
  SHA512:
6
- metadata.gz: 8e16c28a11cda7968afac126bc4e45ae0656515d15906edff43c8cec887e33ca9b7ee93373239962592833bd7fd24872ed3817fa70d40609188287eb469b2795
7
- data.tar.gz: 8544d890f496e9a9a13b81df81b65c69d96893ef8e3d53abef0ecae8ee6ee1c8d67673cf3de3ea6e9f245f04aac71b28872f9e68357cee5b93b9f43c713ee408
6
+ metadata.gz: 080dea02b3ceb5b850d636c8d5bd781b637cb2234b8280b429bb8b14c0d21425cca849b5e255e296a68a017de447ebba77fcb110c379054b44aa3f0fa5937901
7
+ data.tar.gz: a76409d78377d11ca11fb15f61fc89e5d11f455d0691babf5e012325ac1cde70d43f55e95c294c9b444fef01085c414cf4fa6476f4a3aff0304c836716037202
@@ -69,12 +69,18 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
69
69
  long: '--auth_password auth_password',
70
70
  default: 'changeit'
71
71
 
72
- option :scheme,
73
- description: 'What to prepend to output metrics (Default "<hostname>.eventstore")',
72
+ option :proc_scheme,
73
+ description: 'What to prepend to output proc metrics (Default "<hostname>.eventstore")',
74
74
  short: '-s',
75
- long: '--scheme scheme',
75
+ long: '--proc_scheme proc_scheme',
76
76
  default: "#{Socket.gethostname}.eventstore"
77
77
 
78
+ option :queue_scheme,
79
+ description: 'What to prepend to output queue metrics (Default "<cluster_dns>.eventstore")',
80
+ short: '-q',
81
+ long: '--queue_scheme queue_scheme',
82
+ default: "#{config[:cluster_dns]}.eventstore"
83
+
78
84
  option :verbose,
79
85
  description: 'output extra messaging (Default false)',
80
86
  short: '-v',
@@ -95,11 +101,10 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
95
101
  critical address unless helper.is_valid_v4_ip address
96
102
  end
97
103
 
98
- force_downloaded_files_to_be_temp_files
99
104
  collect_metrics address, port
100
105
  end
101
106
 
102
- def force_downloaded_files_to_be_temp_files
107
+ def force_web_requests_to_use_temp_files
103
108
  # Don't allow downloaded files to be created as StringIO. Force a tempfile to be created.
104
109
  OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
105
110
  OpenURI::Buffer.const_set 'StringMax', -1
@@ -108,6 +113,7 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
108
113
  def collect_metrics(address, port)
109
114
  stream_url = "http://#{address}:#{port}/streams/$stats-#{address}:#{port}"
110
115
 
116
+ force_web_requests_to_use_temp_files
111
117
  stream_temp_file = get_stream stream_url, "application/atom+xml"
112
118
 
113
119
  namespace_regex = / xmlns="[A-Za-z:\/.0-9]+"/
@@ -131,9 +137,15 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
131
137
 
132
138
  puts "json stats #{json_stats}" if config_is_true config[:verbose]
133
139
 
134
- stats_dict = parse_json_stats json_stats
140
+ stats_dict = add_standard_metrics json_stats
141
+
142
+ add_metrics_for_queues json_stats, stats_dict if are_we_master? address, port
143
+
144
+ stat_time = latest_entry.at_xpath('.//updated').content
145
+
146
+ parsed_date_time = DateTime.parse(stat_time)
135
147
 
136
- stats_dict.each { |stat| output stat[0], stat[1]}
148
+ stats_dict.each { |stat| output stat[0], stat[1], parsed_date_time}
137
149
 
138
150
  ok
139
151
  end
@@ -144,14 +156,14 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
144
156
  if config_is_true config[:use_authentication]
145
157
  username = config[:auth_user]
146
158
  password = config[:auth_password]
147
- return open stream_url, http_basic_authentication:[username, password], "Accept" => accept_type
159
+ open stream_url, http_basic_authentication:[username, password], "Accept" => accept_type
148
160
  else
149
- return open stream_url, "Accept" => accept_type
161
+ open stream_url, "Accept" => accept_type
150
162
  end
151
163
  end
152
164
 
153
165
  def config_is_true(config)
154
- return "true".casecmp(config) == 0
166
+ "true".casecmp(config) == 0
155
167
  end
156
168
 
157
169
  def add_metric(json_stats, stats_dict, stat_name_mapping)
@@ -159,44 +171,65 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
159
171
  stats_dict[stat_name_mapping[:target_name]] = stat_value
160
172
  end
161
173
 
162
- def add_standard_metrics(json_stats, stats_dict, stat_name_mappings)
163
- stat_name_mappings.each {|stat_mapping| add_metric json_stats, stats_dict, stat_mapping}
174
+ def create_proc_mapping(source_name, target_name)
175
+ {
176
+ source_name: source_name,
177
+ target_name:"#{config[:proc_scheme]}.#{target_name}"
178
+ }
164
179
  end
165
-
166
- def create_metric_mapping(source_name, target_name)
180
+ def create_queue_mapping(source_name, target_name)
167
181
  {
168
- source_name: source_name,
169
- target_name:"#{config[:scheme]}.#{target_name}"
182
+ source_name: source_name,
183
+ target_name:"#{config[:queue_scheme]}.#{target_name}"
170
184
  }
171
185
  end
172
186
 
173
- def parse_json_stats(json_stats)
187
+ def add_standard_metrics(json_stats)
174
188
  name_mappings = [
175
- create_metric_mapping("proc-mem", "memory"),
176
- create_metric_mapping("proc-cpu", "cpu"),
177
- create_metric_mapping("proc-threadsCount", "threadsCount"),
178
- create_metric_mapping("proc-contentionsRate", "contentionsRate"),
179
- create_metric_mapping("proc-thrownExceptionsRate", "thrownExceptionsRate"),
180
- create_metric_mapping("proc-diskIo-readBytes", "diskIo.readBytes"),
181
- create_metric_mapping("proc-diskIo-writtenBytes", "diskIo.writtenBytes"),
182
- create_metric_mapping("proc-diskIo-readOps", "diskIo.readOps"),
183
- create_metric_mapping("proc-diskIo-writeOps", "diskIo.writeOps"),
184
- create_metric_mapping("proc-tcp-receivingSpeed", "tcp.receivingSpeed"),
185
- create_metric_mapping("proc-tcp-sendingSpeed", "tcp.sendingSpeed"),
186
- create_metric_mapping("proc-tcp-inSend", "tcp.inSend"),
187
- create_metric_mapping("proc-tcp-measureTime", "tcp.measureTime"),
188
- create_metric_mapping("proc-tcp-receivedBytesSinceLastRun", "tcp.receivedBytesSinceLastRun"),
189
- create_metric_mapping("proc-tcp-sentBytesSinceLastRun", "tcp.sentBytesSinceLastRun"),
190
- create_metric_mapping("proc-gc-gen0Size", "gc.gen0Size"),
191
- create_metric_mapping("proc-gc-gen1Size", "gc.gen1Size"),
192
- create_metric_mapping("proc-gc-gen2Size", "gc.gen2Size"),
193
- create_metric_mapping("proc-gc-largeHeapSize", "gc.largeHeapSize"),
194
- create_metric_mapping("proc-gc-totalBytesInHeaps", "gc.totalBytesInHeaps")
189
+ create_proc_mapping("proc-mem", "memory"),
190
+ create_proc_mapping("proc-cpu", "cpu"),
191
+ create_proc_mapping("proc-threadsCount", "threadsCount"),
192
+ create_proc_mapping("proc-contentionsRate", "contentionsRate"),
193
+ create_proc_mapping("proc-thrownExceptionsRate", "thrownExceptionsRate"),
194
+ create_proc_mapping("proc-diskIo-readBytes", "diskIo.readBytes"),
195
+ create_proc_mapping("proc-diskIo-writtenBytes", "diskIo.writtenBytes"),
196
+ create_proc_mapping("proc-diskIo-readOps", "diskIo.readOps"),
197
+ create_proc_mapping("proc-diskIo-writeOps", "diskIo.writeOps"),
198
+ create_proc_mapping("proc-tcp-receivingSpeed", "tcp.receivingSpeed"),
199
+ create_proc_mapping("proc-tcp-sendingSpeed", "tcp.sendingSpeed"),
200
+ create_proc_mapping("proc-tcp-inSend", "tcp.inSend"),
201
+ create_proc_mapping("proc-tcp-measureTime", "tcp.measureTime"),
202
+ create_proc_mapping("proc-tcp-receivedBytesSinceLastRun", "tcp.receivedBytesSinceLastRun"),
203
+ create_proc_mapping("proc-tcp-sentBytesSinceLastRun", "tcp.sentBytesSinceLastRun"),
204
+ create_proc_mapping("proc-gc-gen0Size", "gc.gen0Size"),
205
+ create_proc_mapping("proc-gc-gen1Size", "gc.gen1Size"),
206
+ create_proc_mapping("proc-gc-gen2Size", "gc.gen2Size"),
207
+ create_proc_mapping("proc-gc-largeHeapSize", "gc.largeHeapSize"),
208
+ create_proc_mapping("proc-gc-totalBytesInHeaps", "gc.totalBytesInHeaps")
195
209
  ]
196
210
  stats_dict = Hash.new
197
- add_standard_metrics json_stats, stats_dict, name_mappings
198
- add_metrics_for_queues json_stats, stats_dict
199
- return stats_dict
211
+ name_mappings.each {|stat_mapping| add_metric json_stats, stats_dict, stat_mapping}
212
+
213
+ stats_dict
214
+ end
215
+
216
+ def are_we_master?(address, port)
217
+ begin
218
+ connection_url = "#{address}:#{port}/gossip?format=xml"
219
+ gossip = open(connection_url)
220
+ rescue StandardError
221
+ critical "Could not connect to #{connection_url} to check gossip, has event store fallen over on this node? "
222
+ end
223
+
224
+ xml_doc = Nokogiri::XML(gossip.readline)
225
+
226
+ members = xml_doc.xpath '//MemberInfoDto'
227
+
228
+
229
+ us = members.find { |member| member.xpath('.//ExternalHttpIp').content == address and
230
+ member.xpath('.//ExternalHttpPort').content == port}
231
+
232
+ us.xpath('.//state').content == 'Master'
200
233
  end
201
234
 
202
235
  def add_metrics_for_queues(json_stats, stats_dict)
@@ -216,7 +249,7 @@ class Stats < Sensu::Plugin::Metric::CLI::Graphite
216
249
  def add_metrics_for_queue(queue, json_stats, stats_dict)
217
250
  queue_name = queue[0]
218
251
 
219
- metric_mappings = queue[1].map { |metric_name| create_metric_mapping "es-queue-#{queue_name}-#{metric_name}", "#{cleaned_name queue_name}.#{metric_name}" }
252
+ metric_mappings = queue[1].map { |metric_name| create_queue_mapping "es-queue-#{queue_name}-#{metric_name}", "#{cleaned_name queue_name}.#{metric_name}" }
220
253
 
221
254
  metric_mappings.each {|mapping| add_metric json_stats, stats_dict, mapping}
222
255
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-eventstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Wroe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-25 00:00:00.000000000 Z
11
+ date: 2016-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard