sensu-plugins-vsphere 0.1.1 → 1.0.0

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: 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