onering-report-plugins 0.0.13 → 0.0.14
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/lib/facter/onering_properties_zfs.rb +174 -0
- metadata +4 -3
@@ -0,0 +1,174 @@
|
|
1
|
+
if Facter::Util::Resolution.which("zpool")
|
2
|
+
def sz_to_bytes(sz)
|
3
|
+
case sz[-1].chr
|
4
|
+
when 'K'
|
5
|
+
rv = sz[0..-2].to_f * (1024)
|
6
|
+
when 'M'
|
7
|
+
rv = sz[0..-2].to_f * (1024 ** 2)
|
8
|
+
when 'G'
|
9
|
+
rv = sz[0..-2].to_f * (1024 ** 3)
|
10
|
+
when 'T'
|
11
|
+
rv = sz[0..-2].to_f * (1024 ** 4)
|
12
|
+
when 'P'
|
13
|
+
rv = sz[0..-2].to_f * (1024 ** 5)
|
14
|
+
when 'E'
|
15
|
+
rv = sz[0..-2].to_f * (1024 ** 6)
|
16
|
+
when 'Z'
|
17
|
+
rv = sz[0..-2].to_f * (1024 ** 7)
|
18
|
+
when 'Y'
|
19
|
+
rv = sz[0..-2].to_f * (1024 ** 8)
|
20
|
+
else
|
21
|
+
rv = sz[0..-2].to_f
|
22
|
+
end
|
23
|
+
|
24
|
+
rv.to_i
|
25
|
+
end
|
26
|
+
|
27
|
+
zfs = {
|
28
|
+
:filesystems => [],
|
29
|
+
:pools => [],
|
30
|
+
:snapshots => []
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
# =============================================================================
|
35
|
+
# POOLS
|
36
|
+
Facter::Util::Resolution.exec("zpool list -H").to_s.lines.each do |line|
|
37
|
+
pool, size, allocated, free, used_perc, dedup, health, altroot = line.strip.split(/\s+/)
|
38
|
+
zfs_pool = {
|
39
|
+
:name => pool,
|
40
|
+
:status => health.downcase,
|
41
|
+
:size => {
|
42
|
+
:total => sz_to_bytes(size),
|
43
|
+
:allocated => sz_to_bytes(allocated),
|
44
|
+
:free => sz_to_bytes(free),
|
45
|
+
:used => (sz_to_bytes(size) - sz_to_bytes(free)),
|
46
|
+
:percent_used => used_perc.delete('%').to_f
|
47
|
+
},
|
48
|
+
:deduplication_factor => dedup.delete('x').to_f,
|
49
|
+
:virtual_devices => {}
|
50
|
+
}
|
51
|
+
|
52
|
+
zfs_pool[:mountpoint] = altroot if altroot != '-'
|
53
|
+
vdevs = {}
|
54
|
+
current_vdev = nil
|
55
|
+
|
56
|
+
# get vdevs/devices
|
57
|
+
Facter::Util::Resolution.exec("zpool status -v #{pool}").to_s.lines.each do |line|
|
58
|
+
if line =~ /^\s*([a-z]+):\s+(.*)$/
|
59
|
+
case $1
|
60
|
+
when 'scan'
|
61
|
+
# scrub output
|
62
|
+
if $2 =~ /scrub repaired ([0-9]+) in ((?:[0-9]+d)?(?:[0-9]+h)?(?:[0-9]+m)) with ([0-9]+) errors on (.*)$/
|
63
|
+
zfs_pool[:scrub] ||= {}
|
64
|
+
zfs_pool[:scrub][:repaired] = $1.to_i
|
65
|
+
zfs_pool[:scrub][:errors] = $3.to_i
|
66
|
+
zfs_pool[:scrub][:completed_at] = DateTime.parse($4).strftime("%Y-%m-%d %H:%M:%S %z")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# vdev line
|
71
|
+
elsif line =~ /^\t ([a-z0-9]+)(?:-([0-9]+))\s+([A-Z]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s*$/
|
72
|
+
current_vdev = "#{$1}-#{$2}"
|
73
|
+
vdevs[current_vdev] = {
|
74
|
+
:name => "#{$1}-#{$2}",
|
75
|
+
:type => $1.to_sym,
|
76
|
+
:number => $2.to_i,
|
77
|
+
:status => $3.downcase,
|
78
|
+
:errors => {
|
79
|
+
:read => $4.to_i,
|
80
|
+
:write => $5.to_i,
|
81
|
+
:checksum => $6.to_i
|
82
|
+
},
|
83
|
+
:devices => []
|
84
|
+
}
|
85
|
+
|
86
|
+
# device line
|
87
|
+
elsif line =~ /^\t ([a-zA-Z0-9\-\_]+)\s+([A-Z]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s*$/
|
88
|
+
if File.symlink?("/dev/disk/by-id/#{$1}")
|
89
|
+
dev = File.expand_path(File.readlink("/dev/disk/by-id/#{$1}"), "/dev/disk/by-id")
|
90
|
+
elsif File.exists?("/dev/#{$1}")
|
91
|
+
dev = "/dev/#{$1}"
|
92
|
+
end
|
93
|
+
|
94
|
+
vdevs[current_vdev][:devices] << {
|
95
|
+
:name => $1,
|
96
|
+
:device => dev,
|
97
|
+
:errors => {
|
98
|
+
:read => $2.to_i,
|
99
|
+
:write => $3.to_i,
|
100
|
+
:checksum => $4.to_i
|
101
|
+
}
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
vdevs.each do |name, devs|
|
107
|
+
zfs_pool[:virtual_devices][name.split('-').first.to_sym] ||= []
|
108
|
+
zfs_pool[:virtual_devices][name.split('-').first.to_sym] << devs
|
109
|
+
end
|
110
|
+
|
111
|
+
zfs[:pools] << zfs_pool
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
# =============================================================================
|
118
|
+
# FILESYSTEMS
|
119
|
+
Facter::Util::Resolution.exec("zfs list -H").to_s.lines.each do |line|
|
120
|
+
filesystem, used, available, referenced, mountpoint = line.strip.split(/\s+/)
|
121
|
+
|
122
|
+
zfs_filesystem = {
|
123
|
+
:name => filesystem,
|
124
|
+
:mountpoint => mountpoint,
|
125
|
+
:properties => {},
|
126
|
+
:snapshots => [],
|
127
|
+
:size => {
|
128
|
+
:used => sz_to_bytes(used),
|
129
|
+
:free => sz_to_bytes(available)
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
# get properties
|
134
|
+
Facter::Util::Resolution.exec("zfs get all -H #{filesystem}").to_s.lines.each do |line|
|
135
|
+
fs, property, value, source = line.strip.split(/\t/)
|
136
|
+
|
137
|
+
value = case value
|
138
|
+
when 'off' then false
|
139
|
+
when 'on' then true
|
140
|
+
when 'none' then nil
|
141
|
+
when /^[0-9]+(?:\.[0-9]+)?[KMGTPEZY]$/ then sz_to_bytes(value)
|
142
|
+
when /^[0-9]+$/ then value.to_i
|
143
|
+
when /^[0-9]+\.[0-9]+$/ then value.to_f
|
144
|
+
when /^[0-9]+\.[0-9]+x$/ then value.delete('x').to_f
|
145
|
+
else value
|
146
|
+
end
|
147
|
+
|
148
|
+
zfs_filesystem[:properties][property.to_sym] = value
|
149
|
+
end
|
150
|
+
|
151
|
+
zfs[:filesystems] << zfs_filesystem
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
# =============================================================================
|
156
|
+
# SNAPSHOTS
|
157
|
+
Facter::Util::Resolution.exec("zfs list -H -t snapshot").to_s.lines.each do |line|
|
158
|
+
name, used, available, referenced, mountpoint = line.strip.split(/\s+/)
|
159
|
+
mountpoint = nil if mountpoint == '-'
|
160
|
+
|
161
|
+
zfs[:snapshots] << {
|
162
|
+
:name => name,
|
163
|
+
:used => sz_to_bytes(used),
|
164
|
+
:available => sz_to_bytes(available),
|
165
|
+
:referenced => sz_to_bytes(referenced),
|
166
|
+
:mountpoint => mountpoint
|
167
|
+
}
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
Facter.add("zfs") do
|
172
|
+
setcode{ zfs }
|
173
|
+
end
|
174
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onering-report-plugins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2013-04-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: onering-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &22262760 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22262760
|
25
25
|
description: Base plugins for providing system information via the Onering client
|
26
26
|
utility
|
27
27
|
email: ghetzel@outbrain.com
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/facter/onering_properties_physical.rb
|
38
38
|
- lib/facter/onering_properties_system.rb
|
39
39
|
- lib/facter/onering_properties_id.rb
|
40
|
+
- lib/facter/onering_properties_zfs.rb
|
40
41
|
- lib/facter/onering_properties_xen.rb
|
41
42
|
- lib/reporter/default/properties_physical.rb
|
42
43
|
- lib/reporter/default/properties_facter.rb
|