vspheremonitor 0.0.3

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.
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # VSpereMonitoring
2
+
3
+ VSphereMonitor is a tool to get some basic statistics out of a vSphere installation. It uses the VMware Ruby client 'rbvmomi'.
4
+
5
+ ## Usage
6
+
7
+ ### Install
8
+
9
+ gem install vspheremonitor
10
+
11
+ ### Basic Execution
12
+
13
+ vspheremonitor -c /opt/etc/monitoring/vsphere.yaml
14
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake'
2
+
3
+ task :default => 'gembuild'
4
+
5
+ desc "build the gem"
6
+ task :gembuild do
7
+ %x(gem build ./vspheremonitor.gemspec)
8
+ end
@@ -0,0 +1,47 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ begin
4
+ require "vspheremonitoring"
5
+ require "rbvmomi"
6
+ require "json"
7
+ require "yaml"
8
+ rescue LoadError
9
+ puts 'Some of the required gems have not been found'
10
+ exit
11
+ end
12
+
13
+ require 'optparse'
14
+
15
+ options = {}
16
+ OptionParser.new do |opts|
17
+ opts.banner = "Usage: vspheremonitor [options]"
18
+
19
+ opts.on("-v", "--verbose", "Be less quiet") do |v|
20
+ options[:verbose] = v
21
+ end
22
+
23
+ opts.on("-c", "--config FILE", "Specify the configuration file") do |c|
24
+ options[:configfile] = c
25
+ end
26
+
27
+ end.parse!
28
+
29
+ def run (options)
30
+
31
+ configfile = 'etc/vsphere.yaml' if options[:configfile].nil?
32
+
33
+ config = YAML::load(File.read(configfile))
34
+ vim = RbVmomi::VIM.connect :host => config[:host],
35
+ :user => config[:user],
36
+ :password => config[:password],
37
+ :insecure => true
38
+
39
+ data = Hash.new
40
+ data[:vsphere] = VSphereMonitoring.process_all_datacenters(config[:datacenters],vim)
41
+ data
42
+
43
+ end
44
+
45
+ output = run(options)
46
+ puts output.to_json
47
+
@@ -0,0 +1,7 @@
1
+ ---
2
+ :datacenters:
3
+ - dc1
4
+ - dc2
5
+ :host: server.example.net
6
+ :user: monitor
7
+ :password: secret
@@ -0,0 +1,121 @@
1
+ require 'rubygems'
2
+ require 'rbvmomi'
3
+ require 'pp'
4
+ require 'alchemist'
5
+ require 'yaml'
6
+
7
+ module VSphereMonitoring
8
+ module_function
9
+
10
+ def host_memory (host)
11
+ data = Hash.new
12
+ data['total'] = host.hardware.memorySize.bytes.to.megabytes.to_f
13
+ data['usage'] = host.summary.quickStats.overallMemoryUsage.megabytes.to_f
14
+ data['percent'] = (data['usage'] / data['total']) * 100
15
+ data
16
+ end
17
+
18
+ def host_cpu (host)
19
+ data = Hash.new
20
+ data['Mhz'] = host.hardware.cpuInfo.hz / 1000 / 1000
21
+ data['cores'] = host.hardware.cpuInfo.numCpuCores
22
+ data['totalMhz'] = data['Mhz'] * data['cores']
23
+ data['usageMhz'] = host.summary.quickStats.overallCpuUsage.to_f
24
+ data['percent'] = (data['usageMhz'] / data['totalMhz']) * 100
25
+ data
26
+ end
27
+
28
+ def host_stats (host)
29
+ data = Hash.new
30
+ data['memory'] = host_memory(host)
31
+ data['cpu'] = host_cpu(host)
32
+ data
33
+ end
34
+
35
+ def cluster_memory (cluster)
36
+ data = Hash.new
37
+ data['totalMemory'] = cluster.summary.totalMemory
38
+ data['effectiveMemory'] = cluster.summary.effectiveMemory
39
+ data
40
+ end
41
+
42
+ def cluster_cpu (cluster)
43
+ data = Hash.new
44
+ data['totalCpu'] = cluster.summary.totalCpu
45
+ data['numCpuCores'] = cluster.summary.numCpuCores
46
+ data['numCpuThreads'] = cluster.summary.numCpuThreads
47
+ data['effectiveCpu'] = cluster.summary.effectiveCpu
48
+ data
49
+ end
50
+
51
+ def cluster_stats (cluster)
52
+ data = Hash.new
53
+ data['cpu'] = cluster_cpu(cluster)
54
+ data['memory'] = cluster_memory(cluster)
55
+ data['numVmotions'] = cluster.summary.numVmotions
56
+ data['numHosts'] = cluster.summary.numHosts
57
+ data['numEffectiveHosts'] = cluster.summary.numEffectiveHosts
58
+ data['targetBalance'] = cluster.summary.targetBalance
59
+ data['currentBalance'] = cluster.summary.currentBalance
60
+ data
61
+ end
62
+
63
+ def datastore_stats (datastore)
64
+ data = Hash.new
65
+ datastore.RefreshDatastore
66
+ capacity = datastore.summary.capacity
67
+ freeSpace = datastore.summary.freeSpace
68
+ uncommitted = datastore.summary.uncommitted
69
+ data['capacityM'] = ((capacity / 1024) / 1024) if capacity.class != NilClass
70
+ data['freeSpaceM'] = ((freeSpace / 1024) / 1024) if freeSpace.class != NilClass
71
+ data['uncommittedM'] = ((uncommitted / 1024) / 1024) if uncommitted.class != NilClass
72
+ data
73
+ end
74
+
75
+ def network_stats (network)
76
+ data = Hash.new
77
+ data
78
+ end
79
+
80
+ def process_datacenter (dc)
81
+ data = Hash.new
82
+ data['hypers'] = Hash.new
83
+ data['clusters'] = Hash.new
84
+ data['datastores'] = Hash.new
85
+ # Get the information for host
86
+ host_list = dc.hostFolder.children.select {|h| h.class == RbVmomi::VIM::ComputeResource }
87
+ host_list.map {|h|
88
+ data['hypers'][h.name] = host_stats(h.host.first)
89
+ }
90
+
91
+ # Get the information for each host in a cluster
92
+ cluster_list = dc.hostFolder.children.select {|h| h.class == RbVmomi::VIM::ClusterComputeResource }
93
+ cluster_list.map {|c|
94
+ data['clusters'][c.name] = cluster_stats(c)
95
+ c.host.map {|h|
96
+ data['hypers'][h.name] = host_stats(h)
97
+ }
98
+ }
99
+
100
+ # Get informaton about datastore usage
101
+ datastore_list = dc.datastore
102
+ datastore_list.map {|d|
103
+ data['datastores'][d.name] = datastore_stats(d)
104
+ }
105
+
106
+ data['vm_count'] = dc.vmFolder.children.select {|v| v.class == RbVmomi::VIM::VirtualMachine }.size
107
+ data
108
+ end
109
+
110
+ def process_all_datacenters (datacenterlist,vim)
111
+
112
+ data = Hash.new
113
+ datacenterlist.each do |datacenter|
114
+ dc = vim.serviceInstance.find_datacenter datacenter
115
+ data[dc.name] = VSphereMonitoring.process_datacenter(dc)
116
+ end
117
+ data
118
+
119
+ end
120
+
121
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vspheremonitor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Zach Leslie
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yaml
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rbvmomi
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: alchemist
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Parses json from the various node states on puppet dashboard and returns
79
+ those values in a json blob
80
+ email: xaque208@gmail.com
81
+ executables:
82
+ - vspheremonitor
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - Rakefile
87
+ - bin/vspheremonitor
88
+ - lib/vspheremonitoring.rb
89
+ - etc/vsphere.yaml.sample
90
+ - README.md
91
+ homepage: https://github.com/xaque208/vspheremonitor
92
+ licenses: []
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 1.8.24
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: A tool to get the highlights from the Puppet Dashboard
115
+ test_files: []