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 +5 -5
- data/CHANGELOG.md +9 -1
- data/bin/metrics-vsphere.rb +86 -38
- data/lib/sensu-plugins-vsphere/version.rb +3 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6921eacbded2bf97ddd89deef66667ada03d4b314a7c3fadd950afc4cd5c5e2c
|
4
|
+
data.tar.gz: bf04b9603c2baf30fe9ac9264819c56719d1a74831aaaaf67f57cda318cd1951
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 663ce3df3f45b13d3f26bfaffaa925423c8c6d276bfe5162c2e8d0ea7797e05eba6c1bed8b69cf4cb84d174bbacc79b8885d4c850291f4f214b98d9bb00c3b41
|
7
|
+
data.tar.gz: 0961ffdf6715502ebde1067c48ce73e6033b3efa85632936191c4c851768091a2b621f3fdccfb42510dfe56eb8818e6b6053027482be789bd642f66c8818957f
|
data/CHANGELOG.md
CHANGED
@@ -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.
|
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
|
data/bin/metrics-vsphere.rb
CHANGED
@@ -30,7 +30,7 @@ require 'rbvmomi'
|
|
30
30
|
#
|
31
31
|
# VSphere Graphite
|
32
32
|
#
|
33
|
-
class VsphereGraphite < Sensu::Plugin::Metric::CLI::
|
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: '-
|
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
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
-
|
146
|
-
|
174
|
+
dc = find_or_take_first(data_centers, config[:data_center])
|
175
|
+
pm = vim.serviceInstance.content.perfManager
|
147
176
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
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
|
-
|
165
|
-
|
166
|
-
|
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
|
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.
|
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-
|
11
|
+
date: 2018-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rbvmomi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
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.
|
26
|
+
version: 1.11.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: sensu-plugin
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
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:
|
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.
|
206
|
+
rubygems_version: 2.7.6
|
207
207
|
signing_key:
|
208
208
|
specification_version: 4
|
209
209
|
summary: Sensu plugins for vSphere
|