sensu-extensions-statsd 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f29a535c461792227243d4fb537d64d1caa4b6ce
4
- data.tar.gz: 591c81f2cc090ff22f206395928a120fa72b376e
3
+ metadata.gz: 3690d2d8fba2db12035bf6a0fd96865e682ce7cc
4
+ data.tar.gz: a0cfe9cccde8e9be923555449dfc2528b3c300b8
5
5
  SHA512:
6
- metadata.gz: a8308e1dfd68422cd8bf1ca99735a053dc7ae0b080852361cf86490d46f3cdb85cae364746605cb74917896b73f588199c5e5ee0bdd9caf4c61f203f98e81fc0
7
- data.tar.gz: 41505c23361ae902a5874f12b8e8adabcd02339a92fdd09cb6800e6b0cfe9dd965fdc7ad13cc9c398e30af875743aef0924d548e848fad98bd6f83b25f8d672b
6
+ metadata.gz: f92582be13f461bb0876a859cff9d857fa8f829f40ba33a474aee660de5953c23d45fb01963aabd1bbad36298ba8d79be345e7e2d26ce50330042108f54e121b
7
+ data.tar.gz: 315b55ff68d05e47c32b50de854bf11e15acad58412bfa9d4290d946775208b0190ccfa2b7c04c578bd622f740caaef3f8ce1e9a22eec10de87ee7681958e609
@@ -1,8 +1,20 @@
1
1
  # Change Log
2
2
 
3
- ## [Unreleased](https://github.com/sensu-extensions/sensu-extensions-statsd/tree/HEAD)
3
+ ## [2.0.0] - 2017-02-01
4
+ ### Changed
5
+ - The definition of statsd.rb to include truncate_output as a configurable option.
6
+ (@TQaztec)
4
7
 
5
- [Full Changelog](https://github.com/sensu-extensions/sensu-extensions-statsd/compare/v0.0.1...HEAD)
8
+ ### Security
9
+ - update 'rubocop' dependency to '~> 0.51.0' per:
10
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8418.
11
+ (@TQaztec)
12
+
13
+ ### Breaking Change
14
+ - Dropping ruby 2.0 support after updating rubocop dependency.
15
+
16
+ ## [v1.0.0](https://github.com/sensu-extensions/sensu-extensions-statsd/tree/v1.0.0) (2017-03-21)
17
+ [Full Changelog](https://github.com/sensu-extensions/sensu-extensions-statsd/compare/v0.0.1...v1.0.0)
6
18
 
7
19
  **Merged pull requests:**
8
20
 
@@ -12,4 +24,4 @@
12
24
  ## [v0.0.1](https://github.com/sensu-extensions/sensu-extensions-statsd/tree/v0.0.1) (2016-12-09)
13
25
 
14
26
 
15
- \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
27
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
data/README.md CHANGED
@@ -8,7 +8,7 @@ send to Graphite or another TSDB.
8
8
  This StatsD implementation attempts to adhere to [Etsy's metric type
9
9
  specifications](https://github.com/etsy/statsd/blob/master/docs/metric_types.md).
10
10
 
11
- [![Build Status](https://travis-ci.org/sensu-extensions/sensu-extensions-statsd.svg?branch=master)](https://travis-ci.org/sensu/sensu-extensions-statsd)
11
+ [![Build Status](https://travis-ci.org/sensu-extensions/sensu-extensions-statsd.svg?branch=master)](https://travis-ci.org/sensu-extensions/sensu-extensions-statsd)
12
12
 
13
13
  ## Installation
14
14
 
@@ -70,6 +70,7 @@ implementation.
70
70
  |reset_counters|boolean|true|If counters should be reset to 0 after flushing|
71
71
  |reset_timers|boolean|true|If timers should be reset/cleared after flushing|
72
72
  |handler|string|"graphite"|Handler to use for the Graphite metrics|
73
+ |truncate_output|boolean|true|If output should be truncated|
73
74
 
74
75
  ## Example
75
76
 
@@ -1,4 +1,4 @@
1
- require "sensu/extension"
1
+ require 'sensu/extension'
2
2
 
3
3
  module Sensu
4
4
  module Extension
@@ -10,33 +10,34 @@ module Sensu
10
10
  end
11
11
  end
12
12
 
13
- class StatsD < Check
13
+ class StatsD < Check # rubocop:disable Metrics/ClassLength
14
14
  def name
15
- "statsd"
15
+ 'statsd'
16
16
  end
17
17
 
18
18
  def description
19
- "a statsd implementation"
19
+ 'a statsd implementation'
20
20
  end
21
21
 
22
- def options
22
+ def options # rubocop:disable Metrics/MethodLength
23
23
  return @options if @options
24
24
  @options = {
25
- :bind => "127.0.0.1",
26
- :port => 8125,
27
- :flush_interval => 10,
28
- :send_interval => 30,
29
- :percentile => 90,
30
- :delete_gauges => false,
31
- :delete_counters => false,
32
- :delete_timers => false,
33
- :reset_gauges => false,
34
- :reset_counters => true,
35
- :reset_timers => true,
36
- :add_client_prefix => true,
37
- :path_prefix => "statsd",
38
- :add_path_prefix => true,
39
- :handler => "graphite"
25
+ bind: '127.0.0.1',
26
+ port: 8125,
27
+ flush_interval: 10,
28
+ send_interval: 30,
29
+ percentile: 90,
30
+ delete_gauges: false,
31
+ delete_counters: false,
32
+ delete_timers: false,
33
+ reset_gauges: false,
34
+ reset_counters: true,
35
+ reset_timers: true,
36
+ add_client_prefix: true,
37
+ path_prefix: 'statsd',
38
+ add_path_prefix: true,
39
+ handler: 'graphite',
40
+ truncate_output: true
40
41
  }
41
42
  @options.merge!(@settings[:statsd]) if @settings[:statsd].is_a?(Hash)
42
43
  @options
@@ -44,12 +45,13 @@ module Sensu
44
45
 
45
46
  def definition
46
47
  {
47
- :type => "metric",
48
- :name => name,
49
- :interval => options[:send_interval],
50
- :standalone => true,
51
- :output_format => "graphite_plaintext",
52
- :handler => options[:handler]
48
+ type: 'metric',
49
+ name: name,
50
+ interval: options[:send_interval],
51
+ standalone: true,
52
+ output_format: 'graphite_plaintext',
53
+ handler: options[:handler],
54
+ truncate_output: options[:truncate_output]
53
55
  }
54
56
  end
55
57
 
@@ -66,10 +68,10 @@ module Sensu
66
68
  end
67
69
 
68
70
  def run
69
- output = ""
71
+ output = ''
70
72
  if @metrics
71
73
  output << @metrics.join("\n") + "\n" unless @metrics.empty?
72
- @logger.info("statsd collected metrics", :count => @metrics.count)
74
+ @logger.info('statsd collected metrics', count: @metrics.count)
73
75
  @metrics = []
74
76
  end
75
77
  yield output, 0
@@ -77,9 +79,9 @@ module Sensu
77
79
 
78
80
  private
79
81
 
80
- def clean(hash, delete=false, reset=false)
82
+ def clean(hash, delete = false, reset = false)
81
83
  if delete
82
- hash.delete_if do |key, value|
84
+ hash.delete_if do |_key, value|
83
85
  value == 0 || value == []
84
86
  end
85
87
  end
@@ -90,66 +92,61 @@ module Sensu
90
92
  end
91
93
  end
92
94
 
93
- def add_metric(*args)
95
+ def add_metric(*args) # rubocop:disable Metrics/MethodLength
94
96
  value = args.pop
95
97
  path = []
96
98
  path << @settings[:client][:name] if options[:add_client_prefix]
97
99
  path << options[:path_prefix] if options[:add_path_prefix]
98
- path = (path + args).join(".")
100
+ path = (path + args).join('.')
99
101
  if path !~ /^[A-Za-z0-9\._-]*$/
100
- @logger.info("invalid statsd metric", {
101
- :reason => "metric path must only consist of alpha-numeric characters, periods, underscores, and dashes",
102
- :path => path,
103
- :value => value
104
- })
102
+ @logger.info('invalid statsd metric', reason: 'metric path must only consist of alpha-numeric characters, periods, underscores, and dashes',
103
+ path: path,
104
+ value: value)
105
105
  else
106
- @logger.debug("adding statsd metric", {
107
- :path => path,
108
- :value => value
109
- })
110
- @metrics << [path, value, Time.now.to_i].join(" ")
106
+ @logger.debug('adding statsd metric', path: path,
107
+ value: value)
108
+ @metrics << [path, value, Time.now.to_i].join(' ')
111
109
  end
112
110
  end
113
111
 
114
112
  def flush!
115
113
  @gauges.each do |name, value|
116
114
  unless value == 0 && options[:delete_gauges]
117
- add_metric("gauges", name, value)
115
+ add_metric('gauges', name, value)
118
116
  end
119
117
  end
120
118
  clean(@gauges, options[:delete_gauges], options[:reset_gauges])
121
119
  @counters.each do |name, value|
122
120
  unless value == 0 && options[:delete_counters]
123
- add_metric("counters", name, value.to_i)
121
+ add_metric('counters', name, value.to_i)
124
122
  end
125
123
  end
126
124
  clean(@counters, options[:delete_counters], options[:reset_counters])
127
125
  @timers.each do |name, values|
128
- unless values.empty? && options[:delete_timers]
129
- values.sort!
130
- length = values.length
131
- min = values.first || 0
132
- max = values.last || 0
133
- mean = min
134
- max_at_threshold = min
135
- percentile = options[:percentile]
136
- if length > 1
137
- threshold_index = ((100 - percentile) / 100.0) * length
138
- threshold_count = length - threshold_index.round
139
- valid_values = values.slice(0, threshold_count)
140
- max_at_threshold = valid_values[-1]
141
- sum = 0
142
- valid_values.each { |v| sum += v }
143
- mean = sum / valid_values.length
144
- end
145
- add_metric("timers", name, "lower", min)
146
- add_metric("timers", name, "mean", mean)
147
- add_metric("timers", name, "upper", max)
148
- add_metric("timers", name, "upper_#{percentile}", max_at_threshold)
126
+ next if values.empty? && options[:delete_timers]
127
+ values.sort!
128
+ length = values.length
129
+ min = values.first || 0
130
+ max = values.last || 0
131
+ mean = min
132
+ max_at_threshold = min
133
+ percentile = options[:percentile]
134
+ if length > 1
135
+ threshold_index = ((100 - percentile) / 100.0) * length
136
+ threshold_count = length - threshold_index.round
137
+ valid_values = values.slice(0, threshold_count)
138
+ max_at_threshold = valid_values[-1]
139
+ sum = 0
140
+ valid_values.each { |v| sum += v }
141
+ mean = sum / valid_values.length
149
142
  end
143
+ add_metric('timers', name, 'lower', min)
144
+ add_metric('timers', name, 'mean', mean)
145
+ add_metric('timers', name, 'upper', max)
146
+ add_metric('timers', name, "upper_#{percentile}", max_at_threshold)
150
147
  end
151
148
  clean(@timers, options[:delete_timers], options[:reset_timers])
152
- @logger.debug("flushed statsd metrics")
149
+ @logger.debug('flushed statsd metrics')
153
150
  end
154
151
 
155
152
  def setup_flush_timers
@@ -158,29 +155,30 @@ module Sensu
158
155
  end
159
156
  end
160
157
 
161
- def setup_parser
158
+ # TODO: come back and refactor me
159
+ def setup_parser # rubocop:disable Metrics/MethodLength
162
160
  parser = proc do |data|
163
161
  begin
164
- nv, type, raw_sample = data.strip.split("|")
165
- name, raw_value = nv.split(":")
162
+ nv, type, raw_sample = data.strip.split('|')
163
+ name, raw_value = nv.split(':')
166
164
  value = Float(raw_value)
167
- sample = Float(raw_sample ? raw_sample.split("@").last : 1)
165
+ sample = Float(raw_sample ? raw_sample.split('@').last : 1)
168
166
  case type
169
- when "g"
170
- if raw_value.start_with?("+")
167
+ when 'g'
168
+ if raw_value.start_with?('+')
171
169
  @gauges[name] += value
172
- elsif raw_value.start_with?("-")
170
+ elsif raw_value.start_with?('-')
173
171
  @gauges[name] -= value.abs
174
172
  else
175
173
  @gauges[name] = value
176
174
  end
177
- when /^c/, "m"
175
+ when /^c/, 'm'
178
176
  @counters[name] += value * (1 / sample)
179
- when "ms", "h", "t"
177
+ when 'ms', 'h', 't'
180
178
  @timers[name] << value * (1 / sample)
181
179
  end
182
180
  rescue => error
183
- @logger.error("statsd parser error", :error => error.to_s)
181
+ @logger.error('statsd parser error', error: error.to_s)
184
182
  end
185
183
  EM.next_tick do
186
184
  @data.pop(&parser)
@@ -190,7 +188,7 @@ module Sensu
190
188
  end
191
189
 
192
190
  def setup_statsd_socket
193
- @logger.debug("binding statsd tcp and udp sockets", :options => options)
191
+ @logger.debug('binding statsd tcp and udp sockets', options: options)
194
192
  bind = options[:bind]
195
193
  port = options[:port]
196
194
  EM.start_server(bind, port, StatsDSimpleSocket) do |socket|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-extensions-statsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Extensions and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-21 00:00:00.000000000 Z
11
+ date: 2018-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-extension
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: github_changelog_generator
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: sensu-logger
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,21 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: sensu-settings
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.51.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.51.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: sensu-logger
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: github_changelog_generator
112
+ name: sensu-settings
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -130,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
144
  requirements:
131
145
  - - ">="
132
146
  - !ruby/object:Gem::Version
133
- version: '0'
147
+ version: 2.1.0
134
148
  required_rubygems_version: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ">="
@@ -138,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
152
  version: '0'
139
153
  requirements: []
140
154
  rubyforge_project:
141
- rubygems_version: 2.6.3
155
+ rubygems_version: 2.5.2.1
142
156
  signing_key:
143
157
  specification_version: 4
144
158
  summary: Check extension to run a StatsD implementation