forked from itsderek23/highgroove-scout-plugins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
disk_inode_usage.rb
63 lines (54 loc) · 1.69 KB
/
disk_inode_usage.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class DiskInodeUsage < Scout::Plugin
OPTIONS=<<-EOS
command:
name: df Command
notes: The command used to display free inodes
default: df -i
filesystem:
notes: The filesystem to check usage, if none specified, uses the first listed
EOS
DF_RE = /\A\s*(\S.*?)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*\z/
def parse_file_systems(io, &line_handler)
line_handler ||= lambda { |row| pp row }
headers = nil
row = ""
io.each_line do |line|
if headers.nil? and line =~ /\AFilesystem/
headers = line.split(" ", 6)
else
row << line
if row =~ DF_RE
fields = $~.captures
line_handler[headers ? Hash[*headers.zip(fields).flatten] : fields]
row = ""
end
end
end
end
def build_report
ENV['lang'] = 'C' # forcing English for parsing
df_command = option('command') || 'df -i'
df_output = `#{df_command}`
df_lines = []
parse_file_systems(df_output) { |row| df_lines << row }
# if the user specified a filesystem use that
df_line = nil
if option("filesystem")
df_lines.each do |line|
if line.has_value?(option("filesystem"))
df_line = line
end
end
end
# else just use the first line
df_line ||= df_lines.first
# remove 'filesystem' and 'mounted on' if present - these don't change.
df_line.reject! { |name,value| ['filesystem','mounted on'].include?(name.downcase.gsub(/\n/,'')) }
# will be passed at the end to report to Scout
report_data = Hash.new
df_line.each do |name, value|
report_data[name.downcase.strip.to_sym] = value
end
report(report_data)
end
end