sensu-plugins-dcos 0.4.0 → 0.4.1

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
- SHA1:
3
- metadata.gz: f5bef184b73bafd43bf11d77eeb36805130a8fe3
4
- data.tar.gz: 9b20f2a650dbd83d4171dd4366affecf4fdede07
2
+ SHA256:
3
+ metadata.gz: dfa5914cbbb7627eafcd35db775a0a83b38313548bfc97026e14e9417e8c57e8
4
+ data.tar.gz: f3d0711e149dc6253f9444496a9c1f63dd4756ddc8fe97dc0e169cfd5be2002a
5
5
  SHA512:
6
- metadata.gz: 589059efd1c7f0adba27cdef8fe214a36a63a7654195f2531945c10e34164df1fe71174efbe3680a1dc1f739c854b07919baf75cbea1a5ccc86f7ed65b855e6f
7
- data.tar.gz: 2635d39d94065930f64017e5435573b4015b949bb72279a639f7840b9bdfa2c263f42cc503e67f8a4506dd0e6ebfb8279be5b9df66087e37a3b1b8b2cf1ffca5
6
+ metadata.gz: a88a6c284fa0eb7c5ec7ed682af8668bf4d3e6e7d400cb69841a764667298dc699ec5b03fa4b03991b1254ceea4b378fa81ad30aaf4db90f6f0c0885a3429b5e
7
+ data.tar.gz: b894dfdb90803710a43a19ad0d674c264f41129452b9b17f3fce81f50f4da4a763401adcf55f2c9e41a48733f3194aee709467ba78d8bc533778024ea83d4085
@@ -6,6 +6,10 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.1] - 2018-01-15
10
+ ### Fixed
11
+ - fixed the handling of empty container metrics issue from dcos-metrics
12
+
9
13
  ## [0.4.0] - 2017-10-20
10
14
  ### Added
11
15
  - todo item is added: metrics-dcos-containers.rb Add dimentions to the metric name framework_name, framework_role, executor_id (@1fox1)
@@ -65,7 +69,8 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
65
69
  ### Added
66
70
  - Initial release
67
71
 
68
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.4.0...HEAD
72
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.4.1...HEAD
73
+ [0.4.1]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.4.0...0.4.1
69
74
  [0.4.0]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.3.0...0.4.0
70
75
  [0.3.0]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.2.1...0.3.0
71
76
  [0.2.1]: https://github.com/sensu-plugins/sensu-plugins-dcos/compare/0.1.1...0.2.1
@@ -69,6 +69,18 @@ class DCOSMetrics < Sensu::Plugin::Metric::CLI::Graphite
69
69
  required: false,
70
70
  default: '61001'
71
71
 
72
+ option :agent_ip_discovery_command,
73
+ description: 'DCOS agent ip discovery command',
74
+ long: '--agent-ip-discovery-command COMMAND',
75
+ required: false,
76
+ default: '/opt/mesosphere/bin/detect_ip'
77
+
78
+ option :agent_port,
79
+ description: 'DCOS agent port',
80
+ long: '--agent-port PORT',
81
+ required: false,
82
+ default: '5051'
83
+
72
84
  option :uri,
73
85
  description: 'Endpoint URI',
74
86
  short: '-u URI',
@@ -81,19 +93,47 @@ class DCOSMetrics < Sensu::Plugin::Metric::CLI::Graphite
81
93
  long: '--dimensions DIMENSIONS',
82
94
  required: false
83
95
 
96
+ def mesos_frameworks
97
+ # Return the memoized result if exists. This will ensure that the mesos
98
+ # state endpoint will be called only once and when needed and return the
99
+ # cached result immediately for subsequent calls.
100
+ return @mesos_frameworks if @mesos_frameworks
101
+ agent_ip = `#{config[:agent_ip_discovery_command]}`
102
+ state = get_data("http://#{agent_ip}:#{config[:agent_port]}/state")
103
+ @mesos_frameworks = {}
104
+ %w[frameworks completed_frameworks].each do |fw_key|
105
+ state[fw_key].each do |framework|
106
+ @mesos_frameworks[framework['id']] = framework['name']
107
+ end
108
+ end
109
+ @mesos_frameworks
110
+ end
111
+
112
+ def get_extra_tags(dimensions)
113
+ extra_tags = []
114
+ return extra_tags unless config[:dimensions]
115
+ config[:dimensions].tr(' ', '').split(',').each do |d|
116
+ # Special case for app metrics, framework_name dimension does not exist
117
+ # in app metrics and in some cases app metrics/dimensions are not
118
+ # available, see https://jira.mesosphere.com/browse/DCOS_OSS-2043 for
119
+ # upstream issue.
120
+ if d == 'framework_name' && !dimensions.key?('framework_name')
121
+ extra_tags.push(mesos_frameworks[dimensions['framework_id']])
122
+ else
123
+ extra_tags.push(dimensions[d])
124
+ end
125
+ end
126
+ extra_tags
127
+ end
128
+
84
129
  def run
85
130
  containers = get_data("http://#{config[:server]}:#{config[:port]}#{config[:uri]}")
86
131
  unless containers.nil? || containers.empty?
87
- containers.each do |container| # rubocop:disable Metrics/BlockLength
88
- all_metrics = get_data("http://#{config[:server]}:#{config[:port]}#{config[:uri]}/#{container}")
89
- if config[:dimensions]
90
- extra_tags = []
91
- config[:dimensions].tr(' ', '').split(',').each do |d|
92
- extra_tags.push(all_metrics['dimensions'][d]) if all_metrics['dimensions'][d]
93
- end
94
- end
95
- if all_metrics.key?('datapoints')
96
- all_metrics['datapoints'].each do |metric|
132
+ containers.each do |container|
133
+ container_metrics = get_data("http://#{config[:server]}:#{config[:port]}#{config[:uri]}/#{container}")
134
+ if container_metrics.key?('datapoints')
135
+ extra_tags = get_extra_tags(container_metrics['dimensions'])
136
+ container_metrics['datapoints'].each do |metric|
97
137
  metric['name'].tr!('/', '.')
98
138
  metric['name'].squeeze!('.')
99
139
  output([config[:scheme], extra_tags, container, metric['unit'], metric['name']].compact.join('.'), metric['value'])
@@ -101,6 +141,10 @@ class DCOSMetrics < Sensu::Plugin::Metric::CLI::Graphite
101
141
  end
102
142
  app_metrics = get_data("http://#{config[:server]}:#{config[:port]}#{config[:uri]}/#{container}/app")
103
143
  next if app_metrics['datapoints'].nil?
144
+ app_dimensions = app_metrics['dimensions']
145
+ # merge container dimensions into app dimensions since app dimensions does have less
146
+ app_dimensions = container_metrics['dimensions'].merge(app_dimensions) if container_metrics.key?('dimensions')
147
+ extra_tags = get_extra_tags(app_dimensions)
104
148
  app_metrics['datapoints'].each do |metric|
105
149
  unless metric['tags'].nil?
106
150
  metric['tags'].each do |k, v|
@@ -4,7 +4,7 @@ module SensuPluginsDcos
4
4
  module Version
5
5
  MAJOR = 0
6
6
  MINOR = 4
7
- PATCH = 0
7
+ PATCH = 1
8
8
 
9
9
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-dcos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - PTC and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2018-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin
@@ -274,15 +274,15 @@ description: |-
274
274
  email: "<sensu-users@googlegroups.com>"
275
275
  executables:
276
276
  - check-dcos-metrics.rb
277
- - check-dcos-node-health.rb
278
- - metrics-dcos-host.rb
277
+ - metrics-dcos-containers.rb
279
278
  - check-dcos-container-count.rb
280
- - check-dcos-container-metrics.rb
279
+ - check-dcos-node-health.rb
281
280
  - check-dcos-component-health.rb
282
- - check-dcos-jobs-health.rb
283
281
  - metrics-dcos-system-health.rb
282
+ - metrics-dcos-host.rb
284
283
  - check-dcos-ping.rb
285
- - metrics-dcos-containers.rb
284
+ - check-dcos-container-metrics.rb
285
+ - check-dcos-jobs-health.rb
286
286
  extensions: []
287
287
  extra_rdoc_files: []
288
288
  files:
@@ -328,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
328
328
  version: '0'
329
329
  requirements: []
330
330
  rubyforge_project:
331
- rubygems_version: 2.6.14
331
+ rubygems_version: 2.7.4
332
332
  signing_key:
333
333
  specification_version: 4
334
334
  summary: Sensu plugins for dcos-metrics checks and metrics