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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
require 'erb'
HOST_NAME = 0
SERVICE_DESCRIPTION = 1
TIME_OK_SCHEDULED = 2
PERCENT_TIME_OK_SCHEDULED = 3
PERCENT_KNOWN_TIME_OK_SCHEDULED = 4
TIME_OK_UNSCHEDULED = 5
PERCENT_TIME_OK_UNSCHEDULED = 6
PERCENT_KNOWN_TIME_OK_UNSCHEDULED = 7
TOTAL_TIME_OK = 8
PERCENT_TOTAL_TIME_OK = 9
PERCENT_KNOWN_TIME_OK = 10
TIME_WARNING_SCHEDULED = 11
PERCENT_TIME_WARNING_SCHEDULED = 12
PERCENT_KNOWN_TIME_WARNING_SCHEDULED = 13
TIME_WARNING_UNSCHEDULED = 14
PERCENT_TIME_WARNING_UNSCHEDULED = 15
PERCENT_KNOWN_TIME_WARNING_UNSCHEDULED = 16
TOTAL_TIME_WARNING = 17
PERCENT_TOTAL_TIME_WARNING = 18
PERCENT_KNOWN_TIME_WARNING = 19
TIME_UNKNOWN_SCHEDULED = 20
PERCENT_TIME_UNKNOWN_SCHEDULED = 21
PERCENT_KNOWN_TIME_UNKNOWN_SCHEDULED = 22
TIME_UNKNOWN_UNSCHEDULED = 23
PERCENT_TIME_UNKNOWN_UNSCHEDULED = 24
PERCENT_KNOWN_TIME_UNKNOWN_UNSCHEDULED = 25
TOTAL_TIME_UNKNOWN = 26
PERCENT_TOTAL_TIME_UNKNOWN = 27
PERCENT_KNOWN_TIME_UNKNOWN = 28
TIME_CRITICAL_SCHEDULED = 29
PERCENT_TIME_CRITICAL_SCHEDULED = 30
PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED = 31
TIME_CRITICAL_UNSCHEDULED = 32
PERCENT_TIME_CRITICAL_UNSCHEDULED = 33
PERCENT_KNOWN_TIME_CRITICAL_UNSCHEDULED = 34
TOTAL_TIME_CRITICAL = 35
PERCENT_TOTAL_TIME_CRITICAL = 36
PERCENT_KNOWN_TIME_CRITICAL = 37
TIME_UNDETERMINED_NOT_RUNNING = 38
PERCENT_TIME_UNDETERMINED_NOT_RUNNING = 39
TIME_UNDETERMINED_NO_DATA = 40
PERCENT_TIME_UNDETERMINED_NO_DATA = 41
TOTAL_TIME_UNDETERMINED = 42
PERCENT_TOTAL_TIME_UNDETERMINED = 43
template = %{
<style type="text/css">
TABLE.data { font-family: arial,serif; font-size: 10pt; background-color: white; padding: 2; }
TH.data { font-family: arial,serif; font-size: 10pt; background-color: white; text-align: left; background-color: #999797; color: #DCE5C1; }
.serviceOK { font-family: arial,serif; font-size: 10pt; text-align: left; background-color: #33FF00; font-weight: bold; }
.serviceCRITICAL { font-family: arial,serif; font-size: 10pt; text-align: left; background-color: #F83838; font-weight: bold; }
</style>
<TABLE BORDER=0 CLASS='data'>
<TR><TH CLASS='data'>Host</TH><TH CLASS='data'>Service</TH><TH CLASS='data'>% Uptime</TH>
<% newarray.each do |line| -%>
<tr><td CLASS='data'><%= line[0] %></td><td CLASS='serviceOK'><%= line[1] %></td><td CLASS='serviceCRITICAL'><%= line[2] %></td></tr>
<% end -%>
</TABLE>
}
`rm -rf *.csv \
&& wget --http-user=BLOCKED --http-password=BLOCKEDOUT --no-check-certificate -O nagios1.csv 'https://10.1.1.1/nagios/cgi-bin/avail.cgi?host=all&service=all&timeperiod=last7days&rpttimeperiod=&assumeinitialstates=yes&assumestateretention=yes&assumestatesduringnotrunning=yes&includesoftstates=no&initialassumedhoststate=0&initialassumedservicestate=1&backtrack=4&csvoutput=' \
&& wget --http-user=BLOCKED --http-password=BLOCKEDOUT --no-check-certificate -O nagios2.csv 'https://10.1.1.2/nagios/cgi-bin/avail.cgi?host=all&service=all&timeperiod=last7days&rpttimeperiod=&assumeinitialstates=yes&assumestateretention=yes&assumestatesduringnotrunning=yes&includesoftstates=no&initialassumedhoststate=0&initialassumedservicestate=1&backtrack=4&csvoutput=' \
&& sed -i '1d' nagios1.csv \
&& sed -i '1d' nagios2.csv \
&& cat nagios2.csv >> nagios1.csv \
&& sort -u nagios1.csv >> sorted.csv \
&& sed -i -e '/^.*Engine Check.*$/d' -e 's/Engine (Passive)/Engine/g' sorted.csv \
&& grep -v '^".*", ".*(Passive)", .*' sorted.csv >> ready.csv \
&& sed -i -e '/^"hostedengine-01",.*$/d' \
-e '/^"mail-001",.*$/d' \
-e '/^"www-02",.*$/d' \
-e '/^".*", "CPU Load",.*$/d' \
-e '/^".*", "Drive Space -.*",.*$/d' \
-e '/^".*", "Memory Usage",.*$/d' \
-e '/^".*", "NSClient++ Version",.*$/d' \
-e '/^".*", "Uptime",.*$/d' \
ready.csv`
html = ERB.new(template)
csvarray = []
newarray = []
csvfile = File.open("./ready.csv")
csvfile.each_line do |line|
csvarray.push line
end
csvfile.close
csvarray.each_with_index do |line,index|
if ((index) < (csvarray.size - 1))
if line.split(',')[1].strip == "\"SSH\"" and ( (csvarray[index - 1].split(',')[0] == line.split(',')[0]) or (csvarray[index + 1].split(',')[0] == line.split(',')[0]) )
next
end
if (line.split(',')[0].strip == csvarray[index + 1].split(',')[0].strip) and (line.split(',')[1].strip == csvarray[index + 1].split(',')[1].strip)
if (line.split(',')[PERCENT_KNOWN_TIME_OK].to_f + line.split(',')[PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED].to_f + line.split(',')[PERCENT_KNOWN_TIME_WARNING_SCHEDULED].to_f) > (csvarray[index + 1].split(',')[PERCENT_KNOWN_TIME_OK].to_f + csvarray[index + 1].split(',')[PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED].to_f + csvarray[index + 1].split(',')[PERCENT_KNOWN_TIME_WARNING_SCHEDULED].to_f)
next
end
end
if (line.split(',')[0].strip == csvarray[index - 1].split(',')[0].strip) and (line.split(',')[1].strip == csvarray[index - 1].split(',')[1].strip)
if (line.split(',')[PERCENT_KNOWN_TIME_OK].to_f + line.split(',')[PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED].to_f + line.split(',')[PERCENT_KNOWN_TIME_WARNING_SCHEDULED].to_f) > (csvarray[index - 1].split(',')[PERCENT_KNOWN_TIME_OK].to_f + csvarray[index - 1].split(',')[PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED].to_f + csvarray[index - 1].split(',')[PERCENT_KNOWN_TIME_WARNING_SCHEDULED].to_f)
next
end
end
end
if line.split(',')[0].strip.include?("nagios") and line.split(',')[1].strip != "\"HTTPS\""
next
end
if line.split(',')[0].strip.include?("www") and line.split(',')[1].strip != "\"HTTP\""
next
end
newarray.push(line.split(',')[0] + "," + line.split(',')[1].strip + "," + String( line.split(',')[PERCENT_KNOWN_TIME_OK].to_f + line.split(',')[PERCENT_KNOWN_TIME_CRITICAL_SCHEDULED].to_f + line.split(',')[PERCENT_KNOWN_TIME_WARNING_SCHEDULED].to_f ) )
end
newarray.uniq!
html.result(binding)
newfile = File.open("./availomate.csv", "w+")
newfile.puts newarray
newfile.close
|