sensu-plugins-vsphere 0.1.1 → 1.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
- SHA1:
3
- metadata.gz: c618fc17950229282d819c2b173f1c79e4e9edd9
4
- data.tar.gz: d0fec8c6153f07024be6d09f3ffc0001fbf426fd
2
+ SHA256:
3
+ metadata.gz: 6921eacbded2bf97ddd89deef66667ada03d4b314a7c3fadd950afc4cd5c5e2c
4
+ data.tar.gz: bf04b9603c2baf30fe9ac9264819c56719d1a74831aaaaf67f57cda318cd1951
5
5
  SHA512:
6
- metadata.gz: 706a2574669a7bbb5146738c91c866f5338b2a5fe182d20bf6e9ab3a50ce698d8775abc086777d5ec46f6208779d91e1ab44ed16f8543fa0c420961f7534bb6c
7
- data.tar.gz: de3bf7b5a1e22edbdbb4aa16a00ba3f37d7a9b4132bf5a0fb20243e07c2c1a97fc1a6bbced970be34e6d8ec62ffe079f5fbbfca71ceb4466fd21b9115af5f90b
6
+ metadata.gz: 663ce3df3f45b13d3f26bfaffaa925423c8c6d276bfe5162c2e8d0ea7797e05eba6c1bed8b69cf4cb84d174bbacc79b8885d4c850291f4f214b98d9bb00c3b41
7
+ data.tar.gz: 0961ffdf6715502ebde1067c48ce73e6033b3efa85632936191c4c851768091a2b621f3fdccfb42510dfe56eb8818e6b6053027482be789bd642f66c8818957f
@@ -5,6 +5,13 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## [1.0.0] - 2018-05-03
9
+ ### Breaking Changes
10
+ - bumped dependency of `sensu-plugin` to 2.4 you can read about it [here](https://github.com/sensu-plugins/sensu-plugin/blob/master/CHANGELOG.md#240---2018-02-08)
11
+
12
+ ### Added
13
+ - Added ability to find machines (@yuri-zubov)
14
+
8
15
  ## [0.1.1] - 2018-02-27
9
16
  ### Security
10
17
  - updated rubocop dependency to `~> 0.51.0` per: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8418 (@majormoses)
@@ -21,6 +28,7 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
21
28
  ### Breaking Changes
22
29
  - removed ruby 2.0 support (@majormoses)
23
30
 
24
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-vsphere/compare/0.1.1...HEAD
31
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-vsphere/compare/1.0.0...HEAD
32
+ [1.0.0]: https://github.com/sensu-plugins/sensu-plugins-vsphere/compare/0.1.1...1.0.0
25
33
  [0.1.1]: https://github.com/sensu-plugins/sensu-plugins-vsphere/compare/0.1.0...0.1.1
26
34
  [0.1.0]: https://github.com/sensu-plugins/sensu-plugins-vsphere/compare/ec87eef66e3c4f28f13072176c517dc02cd57aa4...0.1.0
@@ -30,7 +30,7 @@ require 'rbvmomi'
30
30
  #
31
31
  # VSphere Graphite
32
32
  #
33
- class VsphereGraphite < Sensu::Plugin::Metric::CLI::Graphite
33
+ class VsphereGraphite < Sensu::Plugin::Metric::CLI::Generic
34
34
  option :host,
35
35
  description: 'ESX or ESXi hostname',
36
36
  short: '-H HOST',
@@ -79,8 +79,8 @@ class VsphereGraphite < Sensu::Plugin::Metric::CLI::Graphite
79
79
 
80
80
  option :period,
81
81
  description: ' Sampling Period in seconds. Basic historic intervals: 300, 1800, 7200 or 86400. See config for any changes.',
82
- short: '-p',
83
- long: '--period',
82
+ short: '-r PERIOD',
83
+ long: '--period PERIOD',
84
84
  proc: proc(&:to_i),
85
85
  default: 300
86
86
 
@@ -90,6 +90,10 @@ class VsphereGraphite < Sensu::Plugin::Metric::CLI::Graphite
90
90
  long: '--scheme SCHEME',
91
91
  default: "#{Socket.gethostname}.vsphere"
92
92
 
93
+ option :find_resource,
94
+ description: 'Help to find resource and path to it',
95
+ long: '--find_resource NAME'
96
+
93
97
  def vim
94
98
  @vim ||= RbVmomi::VIM.connect(
95
99
  host: config[:host],
@@ -99,6 +103,37 @@ class VsphereGraphite < Sensu::Plugin::Metric::CLI::Graphite
99
103
  )
100
104
  end
101
105
 
106
+ def build_tree_resources(datacenters)
107
+ result = {}
108
+ datacenters.grep(RbVmomi::VIM::Datacenter) do |datacenter|
109
+ result[datacenter] ||= {}
110
+ datacenter.hostFolder.children.grep(RbVmomi::VIM::ComputeResource) do |compute_resource|
111
+ result[datacenter][compute_resource] ||= {}
112
+ compute_resource.host.grep(RbVmomi::VIM::HostSystem) do |host_system|
113
+ result[datacenter][compute_resource][host_system] ||= {}
114
+ host_system.vm.grep(RbVmomi::VIM::VirtualMachine) do |virtual_machine|
115
+ result[datacenter][compute_resource][host_system][virtual_machine] = nil
116
+ end
117
+ end
118
+ end
119
+ end
120
+ result
121
+ end
122
+
123
+ def find_resource_by_name(resources, name, path = '')
124
+ result = []
125
+ resources.each do |key, value|
126
+ new_path = "#{path}=> #{key.name}"
127
+ if key.name == name
128
+ result << new_path
129
+ end
130
+
131
+ result += find_resource_by_name(value, name, new_path) if value
132
+ end
133
+
134
+ result
135
+ end
136
+
102
137
  def find_or_take_first(resources, resource_name)
103
138
  result = nil
104
139
  if resource_name
@@ -124,46 +159,59 @@ class VsphereGraphite < Sensu::Plugin::Metric::CLI::Graphite
124
159
 
125
160
  def run
126
161
  data_centers = vim.serviceInstance.content.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
127
- dc = find_or_take_first(data_centers, config[:data_center])
128
-
129
- pm = vim.serviceInstance.content.perfManager
130
162
 
131
- compute_resources = dc.hostFolder.children.grep(RbVmomi::VIM::ComputeResource)
132
- if config[:vm_name] || config[:host_name] || config[:compute_resource]
133
- compute_resource = find_or_take_first(compute_resources, config[:compute_resource])
134
- end
135
- host = find_or_take_first(compute_resource.host, config[:host_name]) if config[:vm_name] || config[:host_name]
136
-
137
- if config[:vm_name]
138
- vms = host.vm.grep(RbVmomi::VIM::VirtualMachine)
139
- resource = find_or_take_first(vms, config[:vm_name])
140
- elsif config[:host_name]
141
- resource = host
142
- elsif config[:compute_resource] && compute_resource.is_a?(RbVmomi::VIM::ClusterComputeResource)
143
- resource = compute_resource
163
+ if config[:find_resource]
164
+ result = find_resource_by_name(build_tree_resources(data_centers), config[:find_resource])
165
+ if result.empty?
166
+ puts 'Not found'
167
+ else
168
+ result.each do |line|
169
+ puts line
170
+ end
171
+ end
172
+ ok
144
173
  else
145
- resource = dc
146
- end
174
+ dc = find_or_take_first(data_centers, config[:data_center])
175
+ pm = vim.serviceInstance.content.perfManager
147
176
 
148
- regexp = Regexp.new("^#{config[:command_type]}")
149
- stats_hash = {
150
- multi_instance: true,
151
- interval: config[:period],
152
- start_time: (Time.now - config[:period])
153
- }
154
- metrics = pm.retrieve_stats([resource],
155
- [],
156
- stats_hash)
157
-
158
- if metrics
159
- filtered_metrics = metrics[resource][:metrics].select { |(metric, _), _| metric.to_s.match(regexp) && metric }
160
- filtered_metrics.each do |(metric, instance), value|
161
- output "#{config[:scheme]}.#{[instance, metric].flatten.reject { |e| e == '' }.join('.')}", value.first
177
+ compute_resources = dc.hostFolder.children.grep(RbVmomi::VIM::ComputeResource)
178
+ if config[:vm_name] || config[:host_name] || config[:compute_resource]
179
+ compute_resource = find_or_take_first(compute_resources, config[:compute_resource])
180
+ end
181
+ host = find_or_take_first(compute_resource.host, config[:host_name]) if config[:vm_name] || config[:host_name]
182
+
183
+ if config[:vm_name]
184
+ vms = host.vm.grep(RbVmomi::VIM::VirtualMachine)
185
+ resource = find_or_take_first(vms, config[:vm_name])
186
+ elsif config[:host_name]
187
+ resource = host
188
+ elsif config[:compute_resource] && compute_resource.is_a?(RbVmomi::VIM::ClusterComputeResource)
189
+ resource = compute_resource
190
+ else
191
+ resource = dc
162
192
  end
163
193
 
164
- ok
165
- else
166
- warning
194
+ regexp = Regexp.new("^#{config[:command_type]}")
195
+ metrics = pm.retrieve_stats([resource],
196
+ [],
197
+ multi_instance: true, interval: config[:period],
198
+ start_time: (Time.now - config[:period] * 10))
199
+
200
+ if metrics
201
+ timestamp = metrics[resource][:sampleInfo].first[:timestamp].to_i
202
+ filtered_metrics = metrics[resource][:metrics].select { |(metric, _), _| metric.to_s.match(regexp) && metric }
203
+ filtered_metrics.each do |(metric, instance), value|
204
+ output(
205
+ metric_name: "#{config[:scheme]}.#{[instance, metric].flatten.reject { |e| e == '' }.join('.')}",
206
+ value: value.first,
207
+ timestamp: timestamp
208
+ )
209
+ end
210
+
211
+ ok
212
+ else
213
+ warning
214
+ end
167
215
  end
168
216
  end
169
217
  end
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsVsphere
2
2
  module Version
3
- MAJOR = 0
4
- MINOR = 1
5
- PATCH = 1
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-27 00:00:00.000000000 Z
11
+ date: 2018-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sensu-plugin
14
+ name: rbvmomi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.0
19
+ version: 1.11.6
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.0
26
+ version: 1.11.6
27
27
  - !ruby/object:Gem::Dependency
28
- name: rbvmomi
28
+ name: sensu-plugin
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.11.6
33
+ version: 2.4.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.11.6
40
+ version: 2.4.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  version: '0'
204
204
  requirements: []
205
205
  rubyforge_project:
206
- rubygems_version: 2.5.2.1
206
+ rubygems_version: 2.7.6
207
207
  signing_key:
208
208
  specification_version: 4
209
209
  summary: Sensu plugins for vSphere