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
|