gnms 2.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of gnms might be problematic. Click here for more details.
- data/LICENSE +459 -0
- data/README +29 -0
- data/bin/gnms +11 -0
- data/gnms.gemspec +70 -0
- data/lib/cmd_parse.rb +747 -0
- data/lib/config_global.rb +414 -0
- data/lib/contact.rb +171 -0
- data/lib/external/crypt/blowfish-tables.rb +190 -0
- data/lib/external/crypt/blowfish.rb +110 -0
- data/lib/external/crypt/cbc.rb +123 -0
- data/lib/external/crypt/stringxor.rb +27 -0
- data/lib/external/fog.rb +41 -0
- data/lib/external/jjmx.rb +45 -0
- data/lib/external/sms.rb +282 -0
- data/lib/external/xmpp4r-simple.rb +497 -0
- data/lib/format.rb +85 -0
- data/lib/gnms.rb +329 -0
- data/lib/gui/about_window.rb +177 -0
- data/lib/gui/adddelnode.rb +799 -0
- data/lib/gui/base_window.rb +789 -0
- data/lib/gui/canvas_map.rb +498 -0
- data/lib/gui/charts/gruff.rb +51 -0
- data/lib/gui/color_macro.rb +145 -0
- data/lib/gui/config_window.rb +2151 -0
- data/lib/gui/custom_plugin_window.rb +90 -0
- data/lib/gui/debug_window.rb +46 -0
- data/lib/gui/event_window.rb +469 -0
- data/lib/gui/find_node_window.rb +438 -0
- data/lib/gui/help_window.rb +47 -0
- data/lib/gui/ipcalculator.rb +147 -0
- data/lib/gui/jmx_ref_window.rb +309 -0
- data/lib/gui/link_view.rb +46 -0
- data/lib/gui/mib_browser.rb +585 -0
- data/lib/gui/node_host_property.rb +3712 -0
- data/lib/gui/node_host_view.rb +270 -0
- data/lib/gui/node_network_property.rb +1059 -0
- data/lib/gui/node_network_view.rb +186 -0
- data/lib/gui/node_view.rb +672 -0
- data/lib/gui/oid_ref_window.rb +288 -0
- data/lib/gui/snmptrap_ref_window.rb +288 -0
- data/lib/gui/sub/account_frame.rb +196 -0
- data/lib/gui/sub/contact_frame.rb +519 -0
- data/lib/gui/syslog_ref_window.rb +288 -0
- data/lib/gui/treenode_window.rb +320 -0
- data/lib/gui/update_window.rb +124 -0
- data/lib/gui/widgets.rb +169 -0
- data/lib/gui/wmi_ref_window.rb +286 -0
- data/lib/interface.rb +16 -0
- data/lib/ipcalc.rb +266 -0
- data/lib/link.rb +45 -0
- data/lib/main.rb +1091 -0
- data/lib/monitor/client/custom/custom_monitoring.rb +40 -0
- data/lib/monitor/client/jmx/jmx_attr_monitoring.rb +36 -0
- data/lib/monitor/client/jmx/jmx_monitoring.rb +83 -0
- data/lib/monitor/client/jmx/jmx_ref.rb +114 -0
- data/lib/monitor/client/snmp/mibs/SNMPv2-MIB.txt +854 -0
- data/lib/monitor/client/snmp/mibs/SNMPv2-SMI.txt +344 -0
- data/lib/monitor/client/snmp/oid_ref.rb +141 -0
- data/lib/monitor/client/snmp/snmp.rb +178 -0
- data/lib/monitor/client/snmp/snmp_monitoring.rb +58 -0
- data/lib/monitor/client/wmi/wmi.rb +139 -0
- data/lib/monitor/client/wmi/wmi_monitoring.rb +60 -0
- data/lib/monitor/client/wmi/wmi_ref.rb +141 -0
- data/lib/monitor/custom_plugin.rb +50 -0
- data/lib/monitor/server/msg_buffer.rb +39 -0
- data/lib/monitor/server/snmp/snmptrap_analyzer.rb +81 -0
- data/lib/monitor/server/snmp/snmptrap_capture.rb +26 -0
- data/lib/monitor/server/snmp/snmptrap_monitoring.rb +32 -0
- data/lib/monitor/server/snmp/snmptrap_ref.rb +135 -0
- data/lib/monitor/server/snmp/snmptrap_server.rb +50 -0
- data/lib/monitor/server/syslog/syslog_analyzer.rb +141 -0
- data/lib/monitor/server/syslog/syslog_capture.rb +28 -0
- data/lib/monitor/server/syslog/syslog_monitoring.rb +32 -0
- data/lib/monitor/server/syslog/syslog_ref.rb +136 -0
- data/lib/monitor/server/syslog/syslog_server.rb +43 -0
- data/lib/node.rb +1020 -0
- data/lib/node_db.rb +2668 -0
- data/lib/node_host.rb +215 -0
- data/lib/node_listener.rb +639 -0
- data/lib/node_network.rb +269 -0
- data/lib/node_property.rb +39 -0
- data/lib/notify/alarm.rb +247 -0
- data/lib/notify/irc_bot.rb +167 -0
- data/lib/notify/xmpp_bot.rb +107 -0
- data/lib/service.rb +36 -0
- data/lib/version.rb +8 -0
- data/pixmap/bg/map_bg.jpg +0 -0
- data/pixmap/bg/map_bg2.jpg +0 -0
- data/pixmap/logo.jpg +0 -0
- data/pixmap/logo_icon.png +0 -0
- data/pixmap/os/3com.png +0 -0
- data/pixmap/os/aix.gif +0 -0
- data/pixmap/os/amiga.png +0 -0
- data/pixmap/os/beos.png +0 -0
- data/pixmap/os/cisco.png +0 -0
- data/pixmap/os/freebsd.png +0 -0
- data/pixmap/os/hp.png +0 -0
- data/pixmap/os/hurd.gif +0 -0
- data/pixmap/os/irix.gif +0 -0
- data/pixmap/os/linux.png +0 -0
- data/pixmap/os/mac.png +0 -0
- data/pixmap/os/netbsd.gif +0 -0
- data/pixmap/os/netware.png +0 -0
- data/pixmap/os/openbsd.png +0 -0
- data/pixmap/os/os2warp.gif +0 -0
- data/pixmap/os/qnx.gif +0 -0
- data/pixmap/os/sco.gif +0 -0
- data/pixmap/os/sgi.xpm +111 -0
- data/pixmap/os/solaris.gif +0 -0
- data/pixmap/os/unix.gif +0 -0
- data/pixmap/os/unknown.png +0 -0
- data/pixmap/os/vms.xpm +345 -0
- data/pixmap/os/windows.png +0 -0
- data/pixmap/type/cloud.png +0 -0
- data/pixmap/type/device.png +0 -0
- data/pixmap/type/firewall.png +0 -0
- data/pixmap/type/gateway.png +0 -0
- data/pixmap/type/home.png +0 -0
- data/pixmap/type/host.png +0 -0
- data/pixmap/type/network.png +0 -0
- data/pixmap/type/printer.png +0 -0
- data/pixmap/type/router.png +0 -0
- data/pixmap/type/server.png +0 -0
- data/pixmap/type/switch.png +0 -0
- data/pixmap/type/vm.png +0 -0
- data/plugins/Defaultme.rb +7 -0
- data/plugins/DnsCheck.rb +46 -0
- data/plugins/FooMonitor.rb +26 -0
- data/plugins/HttpVirtualHostMonitor.rb +43 -0
- data/plugins/MysqlShowStatusMonitor.rb +64 -0
- data/plugins/PgsqlPercentConnectionMonitor.rb +72 -0
- data/plugins/SshCpuLoadMonitor.rb +85 -0
- data/plugins/SshDiskMonitor.rb +69 -0
- data/plugins/SshFgtAvExpiredMonitor.rb +75 -0
- data/plugins/SshPercentUsedRamMonitor.rb +74 -0
- data/plugins/TelnetCpuLoadMonitor.rb +69 -0
- data/plugins/example1.rb +15 -0
- data/plugins/example2.rb +7 -0
- data/sound/beep.wav +0 -0
- metadata +378 -0
data/lib/node_db.rb
ADDED
@@ -0,0 +1,2668 @@
|
|
1
|
+
#
|
2
|
+
# here we can find open & save function for the host database on a file named 'gnms_host.db'
|
3
|
+
#
|
4
|
+
# David Maciejak
|
5
|
+
# 26012003
|
6
|
+
#
|
7
|
+
|
8
|
+
require "#{GNMSLIB}"+'/node'
|
9
|
+
require "#{GNMSLIB}"+'/format'
|
10
|
+
|
11
|
+
require 'rexml/document'
|
12
|
+
require 'rexml/streamlistener'
|
13
|
+
include REXML
|
14
|
+
|
15
|
+
DEFAULTHOSTDBFILE="nodedb.xml"
|
16
|
+
DEFAULTHOSTDB="#{CONF_DIR}/#{DEFAULTHOSTDBFILE}"
|
17
|
+
|
18
|
+
DB_SCHEMA_VERSION = 2.1
|
19
|
+
|
20
|
+
#
|
21
|
+
# open sqlite database, assign $db global variable
|
22
|
+
#
|
23
|
+
def open_db(fic=SQLITE_DB)
|
24
|
+
if FileTest.exist?(fic) and (!File.readable?(fic) or !File.writable?(fic))
|
25
|
+
$log.fatal("Wrong permission on #{fic} need read-write access")
|
26
|
+
exit()
|
27
|
+
end
|
28
|
+
begin
|
29
|
+
$db = SQLite3::Database.new(fic)
|
30
|
+
rescue
|
31
|
+
$log.fatal("#{fic} database corrupted")
|
32
|
+
exit()
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# close sqlite database
|
38
|
+
#
|
39
|
+
def close_db()
|
40
|
+
$db.close
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# set mac addr for a specific nodeid
|
45
|
+
#
|
46
|
+
def db_set_mac(nodeid, mac)
|
47
|
+
$db.transaction
|
48
|
+
stmt=$db.prepare("UPDATE node SET mac=? WHERE id=?")
|
49
|
+
stmt.execute(mac, nodeid)
|
50
|
+
$db.commit
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# set mask as integer value for a specific nodeid
|
55
|
+
#
|
56
|
+
def db_set_mask(nodeid, mask)
|
57
|
+
if isInteger(mask)
|
58
|
+
$db.transaction
|
59
|
+
stmt=$db.prepare("UPDATE node SET netmask=? WHERE id=?")
|
60
|
+
stmt.execute(mask, nodeid)
|
61
|
+
$db.commit
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# set description for a specific nodeid
|
67
|
+
#
|
68
|
+
def db_set_description(nodeid, desc)
|
69
|
+
$db.transaction
|
70
|
+
stmt=$db.prepare("UPDATE node SET description=? WHERE id=?")
|
71
|
+
stmt.execute(desc, nodeid)
|
72
|
+
$db.commit
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# set severities for a specific nodeid
|
77
|
+
#
|
78
|
+
def db_set_severity(nodeid, st, avail, snmp, cstom, trap, serv, wmi, syslog, jmx)
|
79
|
+
$db.transaction
|
80
|
+
stmt=$db.prepare("UPDATE node SET status=?, avail_sev=?, snmp_sev=?, custom_sev=?, trap_sev=?, service_sev=?, wmi_sev=?, syslog_sev=?, jmx_sev=? WHERE id=?")
|
81
|
+
stmt.execute(st, avail, snmp, cstom, trap, serv, wmi, syslog, jmx, nodeid)
|
82
|
+
$db.commit
|
83
|
+
end
|
84
|
+
|
85
|
+
#
|
86
|
+
# set property type and os for a specific nodeid
|
87
|
+
#
|
88
|
+
def db_set_node_type_and_os(nodeid, type, os)
|
89
|
+
$db.transaction
|
90
|
+
stmt=$db.prepare("UPDATE node SET type=?, os=? WHERE id=?")
|
91
|
+
stmt.execute(type, os, nodeid)
|
92
|
+
$db.commit
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# set property x and y for a specific nodeid
|
97
|
+
#
|
98
|
+
def db_set_node_position(nodeid, x, y)
|
99
|
+
$db.transaction
|
100
|
+
stmt=$db.prepare("UPDATE node SET x=?, y=? WHERE id=?")
|
101
|
+
stmt.execute(x, y, nodeid)
|
102
|
+
$db.commit
|
103
|
+
end
|
104
|
+
|
105
|
+
#
|
106
|
+
# set snmp properties for a specific nodeid
|
107
|
+
#
|
108
|
+
def db_set_snmp_parameter(nodeid, snmp_version, snmp_port, snmp_timeout, snmp_retry)
|
109
|
+
$db.transaction
|
110
|
+
stmt=$db.prepare("UPDATE node SET snmp_version=?, snmp_port=?, snmp_timeout=?, snmp_retry=? WHERE id=?")
|
111
|
+
stmt.execute(snmp_version, snmp_port, snmp_timeout, snmp_retry, nodeid)
|
112
|
+
$db.commit
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# set node size for a specific nodeid
|
117
|
+
#
|
118
|
+
def db_set_node_size(nodeid, node_size)
|
119
|
+
if isInteger(node_size)
|
120
|
+
$db.transaction
|
121
|
+
stmt=$db.prepare("UPDATE node SET node_size=? WHERE id=?")
|
122
|
+
stmt.execute(node_size, nodeid)
|
123
|
+
$db.commit
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
#
|
128
|
+
# set background conf for a specific nodeid
|
129
|
+
#
|
130
|
+
def db_set_background(nodeid, bg_type, bg_data)
|
131
|
+
$db.transaction
|
132
|
+
stmt=$db.prepare("UPDATE node SET map_bg_type=?, map_bg_data=? WHERE id=?")
|
133
|
+
stmt.execute(bg_type, "#{bg_data}", nodeid)
|
134
|
+
$db.commit
|
135
|
+
end
|
136
|
+
|
137
|
+
#
|
138
|
+
# set map for a specific nodeid
|
139
|
+
#
|
140
|
+
def db_set_map(nodeid, map_ip)
|
141
|
+
#test if we are trying to set map for the root network
|
142
|
+
if map_ip
|
143
|
+
mapnodeid=db_get_node_id(map_ip,NETWORKNODE)
|
144
|
+
if mapnodeid != 0
|
145
|
+
$db.transaction
|
146
|
+
stmt=$db.prepare("UPDATE node SET map=? WHERE id=?")
|
147
|
+
stmt.execute(mapnodeid, nodeid)
|
148
|
+
$db.commit
|
149
|
+
else
|
150
|
+
$log.error("db_set_map: can't find network map #{map_ip}")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
#
|
156
|
+
# set names for a specific nodeid depending of its type
|
157
|
+
#
|
158
|
+
def db_set_name(nodeid, name, dnsn, dnsd, netbiosn, netbiosd)
|
159
|
+
$db.transaction
|
160
|
+
stmt=$db.prepare("UPDATE node SET name=?, dns_name=?, dns_domain=?, netbios_name=?, netbios_domain=? WHERE id=?")
|
161
|
+
stmt.execute(name, dnsn, dnsd, netbiosn, netbiosd, nodeid)
|
162
|
+
$db.commit
|
163
|
+
end
|
164
|
+
|
165
|
+
#
|
166
|
+
# return the service id associated to the protocol/number
|
167
|
+
#
|
168
|
+
def db_get_service_id(protocol, number)
|
169
|
+
|
170
|
+
stmt=$db.prepare("SELECT id FROM service WHERE protocol=? and port=?")
|
171
|
+
stmt.execute(protocol,number) do |rs|
|
172
|
+
rs.each do |field,type|
|
173
|
+
if !field
|
174
|
+
return 0
|
175
|
+
end
|
176
|
+
return field
|
177
|
+
end
|
178
|
+
end
|
179
|
+
return 0
|
180
|
+
end
|
181
|
+
|
182
|
+
def db_get_node_id(ip, ntype)
|
183
|
+
|
184
|
+
stmt=$db.prepare("SELECT id FROM node WHERE ip=? and nodetype=?")
|
185
|
+
stmt.execute(ip, ntype) do |rs|
|
186
|
+
rs.each do |field,type|
|
187
|
+
if !field
|
188
|
+
return 0
|
189
|
+
end
|
190
|
+
return field
|
191
|
+
end
|
192
|
+
end
|
193
|
+
return 0
|
194
|
+
end
|
195
|
+
|
196
|
+
def db_get_node_template_monitor_id(templ, nid)
|
197
|
+
|
198
|
+
stmt=$db.prepare("SELECT node_and_#{templ}_monitor_id FROM node WHERE id=?")
|
199
|
+
stmt.execute(nid) do |rs|
|
200
|
+
rs.each do |field,type|
|
201
|
+
if !field
|
202
|
+
return 0
|
203
|
+
end
|
204
|
+
return field
|
205
|
+
end
|
206
|
+
end
|
207
|
+
return 0
|
208
|
+
end
|
209
|
+
|
210
|
+
def db_get_node_account_id(nid)
|
211
|
+
|
212
|
+
stmt=$db.prepare("SELECT node_and_account_id FROM node WHERE id=?")
|
213
|
+
stmt.execute(nid) do |rs|
|
214
|
+
rs.each do |field,type|
|
215
|
+
if !field
|
216
|
+
return 0
|
217
|
+
end
|
218
|
+
return field
|
219
|
+
end
|
220
|
+
end
|
221
|
+
return 0
|
222
|
+
end
|
223
|
+
|
224
|
+
def db_get_node_interface_id(nid)
|
225
|
+
|
226
|
+
stmt=$db.prepare("SELECT node_and_interface_id FROM node WHERE id=?")
|
227
|
+
stmt.execute(nid) do |rs|
|
228
|
+
rs.each do |field,type|
|
229
|
+
if !field
|
230
|
+
return 0
|
231
|
+
end
|
232
|
+
return field
|
233
|
+
end
|
234
|
+
end
|
235
|
+
return 0
|
236
|
+
end
|
237
|
+
|
238
|
+
def db_get_node_snmp_monitor_id(nid)
|
239
|
+
return db_get_node_template_monitor_id("snmp", nid)
|
240
|
+
end
|
241
|
+
|
242
|
+
def db_get_node_wmi_monitor_id(nid)
|
243
|
+
return db_get_node_template_monitor_id("wmi", nid)
|
244
|
+
end
|
245
|
+
|
246
|
+
def db_get_node_jmx_monitor_id(nid)
|
247
|
+
return db_get_node_template_monitor_id("jmx", nid)
|
248
|
+
end
|
249
|
+
|
250
|
+
def db_get_node_snmptrap_monitor_id(nid)
|
251
|
+
return db_get_node_template_monitor_id("snmptrap", nid)
|
252
|
+
end
|
253
|
+
|
254
|
+
def db_get_node_syslog_monitor_id(nid)
|
255
|
+
return db_get_node_template_monitor_id("syslog", nid)
|
256
|
+
end
|
257
|
+
|
258
|
+
def db_get_node_custom_monitor_id(nid)
|
259
|
+
return db_get_node_template_monitor_id("custom", nid)
|
260
|
+
end
|
261
|
+
|
262
|
+
def db_get_accounts(ip, ntype)
|
263
|
+
haccount=Hash.new
|
264
|
+
stmt=$db.prepare("SELECT id, node_and_account_id FROM node WHERE ip=? and nodetype=?")
|
265
|
+
stmt.execute(ip, ntype) do |rs|
|
266
|
+
rs.each do |nodeid, naccountid|
|
267
|
+
if naccountid
|
268
|
+
stmt2=$db.prepare("SELECT account_id FROM node_and_account WHERE node_id=? and id=?")
|
269
|
+
stmt2.execute(nodeid, naccountid) do |rs|
|
270
|
+
rs.each do |accountid|
|
271
|
+
stmt3=$db.prepare("SELECT idname, login, password FROM account WHERE id=?")
|
272
|
+
stmt3.execute(accountid) do |rs|
|
273
|
+
rs.each do |idn, lg, pass|
|
274
|
+
#fill the hash
|
275
|
+
haccount[idn]=[lg, Fog.decrypt(Base64.decode64(pass),GNMSKEY)]
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
return haccount
|
285
|
+
end
|
286
|
+
|
287
|
+
def db_get_interfaces(nodeid, nodeandinterface_id)
|
288
|
+
haccount=Hash.new
|
289
|
+
stmt2=$db.prepare("SELECT interface_id FROM node_and_interface WHERE node_id=? and id=?")
|
290
|
+
stmt2.execute(nodeid, nodeandinterface_id) do |rs|
|
291
|
+
rs.each do |interfaceid|
|
292
|
+
stmt3=$db.prepare("SELECT name, link_status, speed FROM interface WHERE id=?")
|
293
|
+
stmt3.execute(interfaceid) do |rs|
|
294
|
+
rs.each do |n, lstatus, sp|
|
295
|
+
#fill the hash
|
296
|
+
haccount[n]=Interface.new(n, lstatus, sp)
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
return haccount
|
302
|
+
end
|
303
|
+
|
304
|
+
#
|
305
|
+
# at db creation, populate the custom_monitor table
|
306
|
+
# with plugins found
|
307
|
+
#
|
308
|
+
def db_set_custom_monitor()
|
309
|
+
local_custom_monitor = []
|
310
|
+
begin
|
311
|
+
stmt1=$db.prepare("SELECT custom_name FROM custom_monitor")
|
312
|
+
stmt1.execute() do |rs|
|
313
|
+
rs.each do |cm_name|
|
314
|
+
local_custom_monitor.push cm_name.to_s
|
315
|
+
end
|
316
|
+
end
|
317
|
+
rescue Exception => msg
|
318
|
+
$log.error("db_set_custom_monitor: #{msg}")
|
319
|
+
return
|
320
|
+
end
|
321
|
+
if $custom_monitor
|
322
|
+
stmt2=$db.prepare("INSERT INTO custom_monitor VALUES (NULL, ?)")
|
323
|
+
$custom_monitor.each do |cm_name|
|
324
|
+
#check if cm_name is not in the db
|
325
|
+
if local_custom_monitor.index(cm_name).nil?
|
326
|
+
$db.transaction
|
327
|
+
stmt2.execute(cm_name)
|
328
|
+
$db.commit
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
#
|
335
|
+
# add a custom monitoring for specific node
|
336
|
+
#
|
337
|
+
def db_add_custom_monitoring(ip, nodetype, custom_mon_array)
|
338
|
+
#here custom_monitor table is up to date
|
339
|
+
nodeid=db_get_node_id(ip, nodetype)
|
340
|
+
nodecustommonitoringid=db_get_node_custom_monitor_id(nodeid)
|
341
|
+
if nodecustommonitoringid == 0
|
342
|
+
stmt=$db.prepare("UPDATE node SET node_and_custom_monitor_id=(SELECT IFNULL(MAX(id),0) FROM node_and_custom_monitor)+1 WHERE id=?")
|
343
|
+
$db.transaction
|
344
|
+
stmt.execute(nodeid)
|
345
|
+
$db.commit
|
346
|
+
nodecustommonitoringid=db_get_node_custom_monitor_id(nodeid)
|
347
|
+
end
|
348
|
+
|
349
|
+
if nodecustommonitoringid != 0
|
350
|
+
stmt2=$db.prepare("SELECT id FROM custom_monitor WHERE custom_name = ?")
|
351
|
+
stmt4=$db.prepare("INSERT INTO node_and_custom_monitor VALUES (?, ?, ?, ?, ?, ?)")
|
352
|
+
$db.transaction
|
353
|
+
custom_mon_array.each {|state, name, param, sev|
|
354
|
+
stmt2.execute(name) do |rs|
|
355
|
+
rs.each do |customnonid|
|
356
|
+
stmt4.execute(nodecustommonitoringid, nodeid, customnonid, state, param, sev)
|
357
|
+
end
|
358
|
+
end
|
359
|
+
}
|
360
|
+
$db.commit
|
361
|
+
else
|
362
|
+
$log.error("db_add_custom_monitoring: something goes wrong trying to add the custom monitoring id")
|
363
|
+
return
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def db_add_service(ip, nodetype, proto, number, name, monitor_flag, sev)
|
368
|
+
serv_id=db_get_service_id(proto, number)
|
369
|
+
if serv_id == 0
|
370
|
+
stmt=$db.prepare("INSERT INTO service VALUES (NULL, ?, ?, ?)")
|
371
|
+
$db.transaction
|
372
|
+
stmt.execute(proto, number, name)
|
373
|
+
$db.commit
|
374
|
+
serv_id=db_get_service_id(proto, number)
|
375
|
+
end
|
376
|
+
|
377
|
+
#add the monitoring in service_monitor table
|
378
|
+
if serv_id != 0
|
379
|
+
#request service monitor id
|
380
|
+
stmt=$db.prepare("SELECT id, service_monitor_id FROM node WHERE ip=? and nodetype=?")
|
381
|
+
stmt.execute(ip, nodetype) do |rs|
|
382
|
+
rs.each do |hid,smid|
|
383
|
+
if !smid
|
384
|
+
stmt2=$db.prepare("INSERT INTO service_monitor VALUES ((SELECT IFNULL(MAX(id),0) FROM service_monitor)+1, ?, ?, ?, ?)")
|
385
|
+
$db.transaction
|
386
|
+
begin
|
387
|
+
stmt2.execute(hid, serv_id, monitor_flag, sev)
|
388
|
+
rescue
|
389
|
+
$log.error("error inserting in db_add_service #{hid} #{serv_id} #{monitor_flag} #{sev}")
|
390
|
+
end
|
391
|
+
|
392
|
+
|
393
|
+
stmt3=$db.prepare("SELECT distinct(id) FROM service_monitor WHERE node_id=? and service_id=?")
|
394
|
+
stmt3.execute(hid, serv_id) do |rs|
|
395
|
+
rs.each do |field,type|
|
396
|
+
stmt4=$db.prepare("UPDATE node SET service_monitor_id=? WHERE id=?")
|
397
|
+
begin
|
398
|
+
stmt4.execute(field, hid)
|
399
|
+
rescue
|
400
|
+
$log.error("error updating in db_add_service #{field} #{hid}")
|
401
|
+
end
|
402
|
+
end
|
403
|
+
end
|
404
|
+
$db.commit
|
405
|
+
else
|
406
|
+
stmt2=$db.prepare("INSERT INTO service_monitor VALUES (?, ?, ?, ?, ?)")
|
407
|
+
begin
|
408
|
+
$db.transaction
|
409
|
+
stmt2.execute(smid, hid, serv_id, monitor_flag, sev)
|
410
|
+
$db.commit
|
411
|
+
rescue
|
412
|
+
$log.error("error inserting in db_add_service #{smid} #{hid} #{serv_id} #{monitor_flag} #{sev}")
|
413
|
+
end
|
414
|
+
end
|
415
|
+
end
|
416
|
+
end
|
417
|
+
else
|
418
|
+
$log.error("db_add_service: something goes wrong trying to find the service id")
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
def db_add_snmp_monitoring(ip, nodetype, state, ref_name, op, val, sev)
|
423
|
+
db_add_template_monitoring("snmp", ip, nodetype, state, ref_name, op, val, sev)
|
424
|
+
end
|
425
|
+
|
426
|
+
def db_add_wmi_monitoring(ip, nodetype, state, ref_name, op, val, sev)
|
427
|
+
db_add_template_monitoring("wmi", ip, nodetype, state, ref_name, op, val, sev)
|
428
|
+
end
|
429
|
+
|
430
|
+
def db_add_snmptrap_monitoring(ip, nodetype, state, ref_name, sev)
|
431
|
+
db_add_template_monitoring("snmptrap", ip, nodetype, state, ref_name, sev)
|
432
|
+
end
|
433
|
+
|
434
|
+
def db_add_syslog_monitoring(ip, nodetype, state, ref_name, sev)
|
435
|
+
db_add_template_monitoring("syslog", ip, nodetype, state, ref_name, sev)
|
436
|
+
end
|
437
|
+
|
438
|
+
def db_add_jmx_monitoring(ip, nodetype, state, ref_name, proto, port, auth, attr_h)
|
439
|
+
nodeid=db_get_node_id(ip, nodetype)
|
440
|
+
nodejmxmonitoringid=db_get_node_jmx_monitor_id(nodeid)
|
441
|
+
if nodejmxmonitoringid == 0
|
442
|
+
stmt=$db.prepare("UPDATE node SET node_and_jmx_monitor_id=(SELECT IFNULL(MAX(id),0) FROM node_and_jmx_monitor)+1 WHERE id=?")
|
443
|
+
$db.transaction
|
444
|
+
stmt.execute(nodeid)
|
445
|
+
$db.commit
|
446
|
+
nodejmxmonitoringid=db_get_node_jmx_monitor_id(nodeid)
|
447
|
+
end
|
448
|
+
|
449
|
+
if nodejmxmonitoringid != 0
|
450
|
+
stmt2=$db.prepare("SELECT IFNULL(MAX(id),0)+1 FROM jmx_monitor")
|
451
|
+
stmt2.execute do |rs|
|
452
|
+
rs.each do |jmxmonid|
|
453
|
+
$db.transaction
|
454
|
+
stmt3=$db.prepare("INSERT INTO jmx_monitor VALUES (?, ?, ?, ?, ?, ?)")
|
455
|
+
stmt3.execute(jmxmonid, state, ref_name, proto, port, auth)
|
456
|
+
|
457
|
+
stmt4=$db.prepare("SELECT IFNULL(MAX(id),0)+1 FROM jmx_attr_monitor")
|
458
|
+
stmt4.execute do |rs|
|
459
|
+
rs.each do |jmxattrmonid|
|
460
|
+
stmt5=$db.prepare("INSERT INTO jmx_attr_monitor VALUES (?, ?, ?, ?, ?)")
|
461
|
+
attr_h.each_value {|attr|
|
462
|
+
stmt5.execute(jmxattrmonid, attr.attributeName, attr.operator, attr.value, attr.severity)
|
463
|
+
}
|
464
|
+
stmt6=$db.prepare("INSERT INTO node_and_jmx_monitor VALUES (?, ?, ?, ?)")
|
465
|
+
stmt6.execute(nodejmxmonitoringid, nodeid, jmxmonid, jmxattrmonid)
|
466
|
+
$db.commit
|
467
|
+
end
|
468
|
+
end
|
469
|
+
end
|
470
|
+
end
|
471
|
+
else
|
472
|
+
$log.error("db_add_jmx_monitoring: something goes wrong trying to find the jmx monitoring id")
|
473
|
+
return
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
#
|
478
|
+
# template to add a monitoring to a specific node
|
479
|
+
#
|
480
|
+
def db_add_template_monitoring(templ, ip, nodetype, state, oidref_name, op, val=nil, sev=nil)
|
481
|
+
nodeid=db_get_node_id(ip, nodetype)
|
482
|
+
nodesnmpmonitoringid=eval "db_get_node_#{templ}_monitor_id(nodeid)"
|
483
|
+
if nodesnmpmonitoringid == 0
|
484
|
+
stmt=$db.prepare("UPDATE node SET node_and_#{templ}_monitor_id=(SELECT IFNULL(MAX(id),0) FROM node_and_#{templ}_monitor)+1 WHERE id=?")
|
485
|
+
$db.transaction
|
486
|
+
stmt.execute(nodeid)
|
487
|
+
$db.commit
|
488
|
+
nodesnmpmonitoringid=eval "db_get_node_#{templ}_monitor_id(nodeid)"
|
489
|
+
end
|
490
|
+
|
491
|
+
if nodesnmpmonitoringid != 0
|
492
|
+
stmt2=$db.prepare("SELECT IFNULL(MAX(id),0)+1 FROM #{templ}_monitor")
|
493
|
+
stmt2.execute do |rs|
|
494
|
+
rs.each do |snmpmonid|
|
495
|
+
$db.transaction
|
496
|
+
if !sev
|
497
|
+
#we are in snmptrap or syslog monitoring
|
498
|
+
stmt3=$db.prepare("INSERT INTO #{templ}_monitor VALUES (?, ?, ?, ?)")
|
499
|
+
stmt3.execute(snmpmonid, state, oidref_name, op)
|
500
|
+
else
|
501
|
+
stmt3=$db.prepare("INSERT INTO #{templ}_monitor VALUES (?, ?, ?, ?, ?, ?)")
|
502
|
+
stmt3.execute(snmpmonid, state, oidref_name, op, val, sev)
|
503
|
+
end
|
504
|
+
stmt4=$db.prepare("INSERT INTO node_and_#{templ}_monitor VALUES (?, ?, ?)")
|
505
|
+
stmt4.execute(nodesnmpmonitoringid, nodeid, snmpmonid)
|
506
|
+
$db.commit
|
507
|
+
end
|
508
|
+
end
|
509
|
+
else
|
510
|
+
$log.error("db_add_#{templ}_monitoring: something goes wrong trying to find the #{templ} monitoring id")
|
511
|
+
return
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
#
|
516
|
+
# add an account to a specific node
|
517
|
+
#
|
518
|
+
def db_add_account(ip, nodetype, accounts)
|
519
|
+
nodeid=db_get_node_id(ip, nodetype)
|
520
|
+
nodeaccountid=db_get_node_account_id(nodeid)
|
521
|
+
if nodeaccountid == 0
|
522
|
+
stmt=$db.prepare("UPDATE node SET node_and_account_id=(SELECT IFNULL(MAX(id),0) FROM node_and_account)+1 WHERE id=?")
|
523
|
+
begin
|
524
|
+
$db.transaction
|
525
|
+
stmt.execute(nodeid)
|
526
|
+
$db.commit
|
527
|
+
rescue
|
528
|
+
$log.error("error updating node_and_account_id table")
|
529
|
+
end
|
530
|
+
nodeaccountid=db_get_node_account_id(nodeid)
|
531
|
+
end
|
532
|
+
if nodeaccountid != 0
|
533
|
+
stmt2=$db.prepare("SELECT IFNULL(MAX(id),0)+1 AS cid FROM account")
|
534
|
+
account_id = 1
|
535
|
+
rs = stmt2.execute
|
536
|
+
account_id = rs.first.to_s.to_i
|
537
|
+
stmt3=$db.prepare("INSERT INTO account VALUES (?, ?, ?, ?)")
|
538
|
+
stmt4=$db.prepare("INSERT INTO node_and_account VALUES (?, ?, ?)")
|
539
|
+
$db.transaction
|
540
|
+
accounts.each { |idname, login, passwd|
|
541
|
+
password=Base64.encode64(Fog.new(passwd,GNMSKEY))
|
542
|
+
stmt3.execute(account_id, idname, login, password)
|
543
|
+
stmt4.execute(nodeaccountid, nodeid, account_id)
|
544
|
+
account_id +=1
|
545
|
+
}
|
546
|
+
$db.commit
|
547
|
+
else
|
548
|
+
$log.error("db_add_account: something goes wrong trying to find the account id")
|
549
|
+
return
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
553
|
+
|
554
|
+
#
|
555
|
+
# add an interface to a specific node
|
556
|
+
#
|
557
|
+
def db_add_interface(ip, nodetype, name, lstatus, sp, tp)
|
558
|
+
nodeid=db_get_node_id(ip, nodetype)
|
559
|
+
nodeinterfaceid=db_get_node_interface_id(nodeid)
|
560
|
+
if nodeinterfaceid == 0
|
561
|
+
stmt=$db.prepare("UPDATE node SET node_and_interface_id=(SELECT IFNULL(MAX(id),0) FROM node_and_interface)+1 WHERE id=?")
|
562
|
+
begin
|
563
|
+
$db.transaction
|
564
|
+
stmt.execute(nodeid)
|
565
|
+
$db.commit
|
566
|
+
rescue
|
567
|
+
$log.error("error updating node_and_interface_id table")
|
568
|
+
end
|
569
|
+
nodeinterfaceid=db_get_node_interface_id(nodeid)
|
570
|
+
end
|
571
|
+
|
572
|
+
if nodeinterfaceid != 0
|
573
|
+
stmt2=$db.prepare("SELECT IFNULL(MAX(id),0)+1 FROM interface")
|
574
|
+
stmt2.execute do |rs|
|
575
|
+
rs.each do |interfaceid|
|
576
|
+
$db.transaction
|
577
|
+
stmt3=$db.prepare("INSERT INTO interface VALUES (?, ?, ?, ?, ?)")
|
578
|
+
stmt3.execute(interfaceid, name, lstatus, sp, tp)
|
579
|
+
stmt4=$db.prepare("INSERT INTO node_and_interface VALUES (?, ?, ?)")
|
580
|
+
stmt4.execute(nodeinterfaceid, nodeid, interfaceid)
|
581
|
+
$db.commit
|
582
|
+
end
|
583
|
+
end
|
584
|
+
else
|
585
|
+
$log.error("db_add_interface: something goes wrong trying to find the interface id")
|
586
|
+
return
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
#
|
591
|
+
# set an account to a specific node
|
592
|
+
#
|
593
|
+
def db_set_account(nodeid, idname, login, passwd)
|
594
|
+
nodeaccountid=db_get_node_account_id(nodeid)
|
595
|
+
password=Base64.encode64(Fog.new(passwd,GNMSKEY))
|
596
|
+
if nodeaccountid == 0
|
597
|
+
stmt=$db.prepare("UPDATE node SET node_and_account_id=(SELECT IFNULL(MAX(id),0) FROM node_and_account)+1 WHERE id=?")
|
598
|
+
$db.transaction
|
599
|
+
stmt.execute(nodeid)
|
600
|
+
$db.commit
|
601
|
+
nodeaccountid=db_get_node_account_id(nodeid)
|
602
|
+
end
|
603
|
+
|
604
|
+
if nodeaccountid != 0
|
605
|
+
stmt2=$db.prepare("SELECT account_id FROM node_and_account WHERE node_id=? and id=?")
|
606
|
+
stmt2.execute(nodeid, nodeaccountid) do |rs|
|
607
|
+
rs.each do |accountid|
|
608
|
+
$db.transaction
|
609
|
+
stmt3=$db.prepare("UPDATE account SET login=?,password=? WHERE id=? and idname=?")
|
610
|
+
stmt3.execute(login, password, accountid, idname)
|
611
|
+
$db.commit
|
612
|
+
return
|
613
|
+
end
|
614
|
+
end
|
615
|
+
else
|
616
|
+
$log.error("db_set_account: something goes wrong trying to find the account id")
|
617
|
+
return
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
621
|
+
#
|
622
|
+
# set interfaces to a specific node
|
623
|
+
#
|
624
|
+
def db_set_interfaces(ip, interfaces)
|
625
|
+
#removing entries from the db
|
626
|
+
db_del_interfaces(ip, HOSTNODE)
|
627
|
+
#saving interfaces in db
|
628
|
+
interfaces.each_value {|intf|
|
629
|
+
db_add_interface(ip, HOSTNODE, intf.name, intf.link_status, intf.speed, intf.type)
|
630
|
+
}
|
631
|
+
end
|
632
|
+
|
633
|
+
#
|
634
|
+
# remove all service monitoring for a specific node
|
635
|
+
#
|
636
|
+
def db_del_services(node_ip, node_type)
|
637
|
+
stmt=$db.prepare("SELECT id, service_monitor_id FROM node WHERE ip=? and nodetype=?")
|
638
|
+
stmt.execute(node_ip,node_type) do |rs|
|
639
|
+
rs.each do |nodeid,servicemid|
|
640
|
+
#check if we already monitor service
|
641
|
+
if servicemid
|
642
|
+
stmt=$db.prepare("DELETE from service_monitor WHERE node_id=? and id=?")
|
643
|
+
$db.transaction
|
644
|
+
stmt.execute(nodeid, servicemid)
|
645
|
+
$db.commit
|
646
|
+
end
|
647
|
+
end
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
#
|
652
|
+
# remove all custom monitoring for a specific node
|
653
|
+
#
|
654
|
+
def db_del_custom_monitoring(node_ip, node_type)
|
655
|
+
stmt=$db.prepare("SELECT id, node_and_custom_monitor_id FROM node WHERE ip=? and nodetype=?")
|
656
|
+
stmt.execute(node_ip,node_type) do |rs|
|
657
|
+
rs.each do |nodeid,nodesnmpmonid|
|
658
|
+
$db.transaction
|
659
|
+
stmt2=$db.prepare("DELETE from node_and_custom_monitor WHERE node_id=? and id=?")
|
660
|
+
stmt2.execute(nodeid,nodesnmpmonid)
|
661
|
+
$db.commit
|
662
|
+
end
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
#
|
667
|
+
# remove all monitoring stuff based on a given monitoring template for a specific node
|
668
|
+
#
|
669
|
+
def db_del_template_monitoring(templ, node_ip, node_type)
|
670
|
+
stmt=$db.prepare("SELECT id, node_and_#{templ}_monitor_id FROM node WHERE ip=? and nodetype=?")
|
671
|
+
stmt.execute(node_ip,node_type) do |rs|
|
672
|
+
rs.each do |nodeid,nodesnmpmonid|
|
673
|
+
if nodesnmpmonid
|
674
|
+
stmt=$db.prepare("SELECT distinct #{templ}_monitor_id FROM node_and_#{templ}_monitor WHERE node_id=? and id=?")
|
675
|
+
stmt.execute(nodeid, nodesnmpmonid) do |rs|
|
676
|
+
rs.each do |snmpmonid|
|
677
|
+
if snmpmonid
|
678
|
+
stmt=$db.prepare("DELETE from #{templ}_monitor WHERE id=?")
|
679
|
+
$db.transaction
|
680
|
+
stmt.execute(snmpmonid)
|
681
|
+
$db.commit
|
682
|
+
end
|
683
|
+
end
|
684
|
+
$db.transaction
|
685
|
+
stmt2=$db.prepare("DELETE from node_and_#{templ}_monitor WHERE node_id=? and id=?")
|
686
|
+
stmt2.execute(nodeid,nodesnmpmonid)
|
687
|
+
$db.commit
|
688
|
+
end
|
689
|
+
end
|
690
|
+
end
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
#
|
695
|
+
# remove all accounts stuff for a specific node
|
696
|
+
#
|
697
|
+
def db_del_accounts(node_ip, node_type)
|
698
|
+
stmt=$db.prepare("SELECT id, node_and_account_id FROM node WHERE ip=? and nodetype=?")
|
699
|
+
stmt.execute(node_ip,node_type) do |rs|
|
700
|
+
rs.each do |nodeid,nodeaccountid|
|
701
|
+
if nodeaccountid
|
702
|
+
stmt=$db.prepare("SELECT distinct account_id FROM node_and_account WHERE node_id=? and id=?")
|
703
|
+
stmt.execute(nodeid, nodeaccountid) do |rs|
|
704
|
+
rs.each do |accountid|
|
705
|
+
if accountid
|
706
|
+
stmt2=$db.prepare("DELETE from account WHERE id=?")
|
707
|
+
$db.transaction
|
708
|
+
stmt2.execute(accountid)
|
709
|
+
$db.commit
|
710
|
+
end
|
711
|
+
end
|
712
|
+
stmt3=$db.prepare("DELETE from node_and_account WHERE node_id=? and id=?")
|
713
|
+
$db.transaction
|
714
|
+
stmt3.execute(nodeid,nodeaccountid)
|
715
|
+
$db.commit
|
716
|
+
end
|
717
|
+
end
|
718
|
+
end
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
#
|
723
|
+
# remove all interfaces stuff for a specific node
|
724
|
+
#
|
725
|
+
def db_del_interfaces(node_ip, node_type)
|
726
|
+
stmt=$db.prepare("SELECT id, node_and_interface_id FROM node WHERE ip=? and nodetype=?")
|
727
|
+
stmt.execute(node_ip,node_type) do |rs|
|
728
|
+
rs.each do |nodeid,nodeinterfaceid|
|
729
|
+
if nodeinterfaceid
|
730
|
+
stmt=$db.prepare("SELECT distinct interface_id FROM node_and_interface WHERE node_id=? and id=?")
|
731
|
+
stmt.execute(nodeid, nodeinterfaceid) do |rs|
|
732
|
+
rs.each do |interfaceid|
|
733
|
+
if interfaceid
|
734
|
+
stmt2=$db.prepare("DELETE from interface WHERE id=?")
|
735
|
+
$db.transaction
|
736
|
+
stmt2.execute(interfaceid)
|
737
|
+
$db.commit
|
738
|
+
end
|
739
|
+
end
|
740
|
+
stmt3=$db.prepare("DELETE from node_and_interface WHERE node_id=? and id=?")
|
741
|
+
$db.transaction
|
742
|
+
stmt3.execute(nodeid,nodeinterfaceid)
|
743
|
+
$db.commit
|
744
|
+
end
|
745
|
+
end
|
746
|
+
end
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
#
|
751
|
+
# remove all groups stuff for a specific node
|
752
|
+
#
|
753
|
+
def db_del_groups(node_ip, node_type)
|
754
|
+
|
755
|
+
end
|
756
|
+
|
757
|
+
|
758
|
+
#
|
759
|
+
# return an array of Contact_selected_info for a given id
|
760
|
+
#
|
761
|
+
def db_get_alert_override_contact_array(id)
|
762
|
+
contactt=Array.new
|
763
|
+
stmt=$db.prepare("SELECT contact_id FROM alert_override_contact WHERE id=?")
|
764
|
+
stmt.execute(id) do |rs|
|
765
|
+
rs.each do |cid|
|
766
|
+
if cid
|
767
|
+
(firstname, lastname)=db_get_contact_names(cid)
|
768
|
+
contactt.push(Contact_selected_info.new(firstname,lastname))
|
769
|
+
end
|
770
|
+
end
|
771
|
+
end
|
772
|
+
return contactt
|
773
|
+
end
|
774
|
+
|
775
|
+
#
|
776
|
+
# get alert override
|
777
|
+
#
|
778
|
+
def db_get_alert_override(node, node_type)
|
779
|
+
nid=db_get_node_id(node.ip, node_type)
|
780
|
+
stmt=$db.prepare("SELECT alert_override_detail_id, alert_type_by_level FROM alert_override WHERE node_id=?")
|
781
|
+
stmt.execute(nid) do |rs|
|
782
|
+
cpt=0
|
783
|
+
rs.each do |aodid, atbl|
|
784
|
+
cpt+=1
|
785
|
+
stmt2=$db.prepare("SELECT mail_state, mail_by_level_id, popup_state, beep_state, sound_file_path_by_level, syslog_state,sms_state, sms_num_by_level_id, im_state,im_dest_by_level_id, script_state, script_name_by_level, irc_state FROM alert_override_detail WHERE id=?")
|
786
|
+
stmt2.execute(aodid) do |rs|
|
787
|
+
rs.each do |mail_state, mail_by_level_id, popup_state, beep_state, sound_file_path_by_level, syslog_state,sms_state, sms_num_by_level_id, im_state,im_dest_by_level_id, script_state, script_name_by_level, irc_state|
|
788
|
+
node.alert_type_by_level[atbl][0]=mail_state.to_b
|
789
|
+
node.mail_by_level[atbl]=db_get_alert_override_contact_array(mail_by_level_id)
|
790
|
+
node.alert_type_by_level[atbl][1]=popup_state.to_b
|
791
|
+
node.alert_type_by_level[atbl][2]=beep_state.to_b
|
792
|
+
node.sound_file_path_by_level[atbl]=sound_file_path_by_level
|
793
|
+
node.alert_type_by_level[atbl][3]=syslog_state.to_b
|
794
|
+
node.alert_type_by_level[atbl][4]=sms_state.to_b
|
795
|
+
node.sms_num_by_level[atbl]=db_get_alert_override_contact_array(sms_num_by_level_id)
|
796
|
+
node.alert_type_by_level[atbl][5]=im_state.to_b
|
797
|
+
node.im_dest_by_level[atbl]=db_get_alert_override_contact_array(im_dest_by_level_id)
|
798
|
+
node.alert_type_by_level[atbl][6]=script_state.to_b
|
799
|
+
node.script_name_by_level[atbl]=script_name_by_level
|
800
|
+
node.alert_type_by_level[atbl][7]=irc_state.to_b
|
801
|
+
end
|
802
|
+
end
|
803
|
+
end
|
804
|
+
|
805
|
+
if cpt > 0
|
806
|
+
node.set_inherit_conf(false)
|
807
|
+
end
|
808
|
+
end
|
809
|
+
end
|
810
|
+
|
811
|
+
#
|
812
|
+
# set alert override for a specific node
|
813
|
+
#
|
814
|
+
def db_set_alert_override(node, node_type)
|
815
|
+
nid=db_get_node_id(node.ip, node_type)
|
816
|
+
$LEVEL.each {|lvl|
|
817
|
+
mail_id=nil
|
818
|
+
sms_id=nil
|
819
|
+
im_id=nil
|
820
|
+
stmt=$db.prepare("SELECT IFNULL(MAX(id),0)+1 FROM alert_override_contact")
|
821
|
+
stmt2=$db.prepare("INSERT INTO alert_override_contact VALUES (?,?)")
|
822
|
+
stmt.execute() do |rs|
|
823
|
+
rs.each do |maxid,type|
|
824
|
+
id=maxid.to_i
|
825
|
+
|
826
|
+
if node.mail_by_level[lvl]
|
827
|
+
node.mail_by_level[lvl].each {|contact|
|
828
|
+
cid=db_get_contact_id(contact.firstname, contact.lastname)
|
829
|
+
if cid
|
830
|
+
stmt2.execute(id, cid)
|
831
|
+
end
|
832
|
+
}
|
833
|
+
mail_id=id
|
834
|
+
id+=1
|
835
|
+
else
|
836
|
+
maid_id=nil
|
837
|
+
end
|
838
|
+
if node.sms_num_by_level[lvl]
|
839
|
+
node.sms_num_by_level[lvl].each {|contact|
|
840
|
+
cid=db_get_contact_id(contact.firstname, contact.lastname)
|
841
|
+
if cid
|
842
|
+
stmt2.execute(id, cid)
|
843
|
+
end
|
844
|
+
}
|
845
|
+
sms_id=id
|
846
|
+
id+=1
|
847
|
+
else
|
848
|
+
sms_id=nil
|
849
|
+
end
|
850
|
+
if node.im_dest_by_level[lvl]
|
851
|
+
node.im_dest_by_level[lvl].each {|contact|
|
852
|
+
cid=db_get_contact_id(contact.firstname, contact.lastname)
|
853
|
+
if cid
|
854
|
+
stmt2.execute(id, cid)
|
855
|
+
end
|
856
|
+
}
|
857
|
+
im_id=id
|
858
|
+
id+=1
|
859
|
+
else
|
860
|
+
im_id=nil
|
861
|
+
end
|
862
|
+
end
|
863
|
+
end
|
864
|
+
|
865
|
+
stmt=$db.prepare("INSERT INTO alert_override_detail VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
866
|
+
$db.transaction
|
867
|
+
stmt.execute(node.alert_type_by_level[lvl][0], mail_id, node.alert_type_by_level[lvl][1], node.alert_type_by_level[lvl][2],node.sound_file_path_by_level[lvl],node.alert_type_by_level[lvl][3],node.alert_type_by_level[lvl][4],sms_id,node.alert_type_by_level[lvl][5],im_id,node.alert_type_by_level[lvl][6],node.script_name_by_level[lvl])
|
868
|
+
$db.commit
|
869
|
+
stmt=$db.prepare("SELECT MAX(id) FROM alert_override_detail")
|
870
|
+
stmt.execute() do |rs|
|
871
|
+
rs.each do |aodid|
|
872
|
+
if aodid
|
873
|
+
stmt2=$db.prepare("INSERT INTO alert_override VALUES (NULL,?,?,?)")
|
874
|
+
$db.transaction
|
875
|
+
stmt2.execute(nid, aodid, lvl)
|
876
|
+
$db.commit
|
877
|
+
end
|
878
|
+
end
|
879
|
+
end
|
880
|
+
}
|
881
|
+
|
882
|
+
end
|
883
|
+
|
884
|
+
#
|
885
|
+
# remove all alert override for a specific node
|
886
|
+
#
|
887
|
+
def db_del_alert_override(node_ip, node_type=nil)
|
888
|
+
if !node_type
|
889
|
+
node_type=NETWORKNODE
|
890
|
+
end
|
891
|
+
nid=db_get_node_id(node_ip, node_type)
|
892
|
+
stmt=$db.prepare("SELECT alert_override_detail_id FROM alert_override WHERE node_id=?")
|
893
|
+
stmt.execute(nid) do |rs|
|
894
|
+
rs.each do |aoid|
|
895
|
+
|
896
|
+
stmt2=$db.prepare("SELECT mail_by_level_id, sms_num_by_level_id, im_dest_by_level_id FROM alert_override_detail WHERE id=?")
|
897
|
+
stmt2.execute(aoid) do |rs|
|
898
|
+
rs.each do |mail_contact_id, sms_contact_id, im_contact_id|
|
899
|
+
stmt3=$db.prepare("DELETE from alert_override_contact WHERE id=?")
|
900
|
+
$db.transaction
|
901
|
+
stmt3.execute(mail_contact_id)
|
902
|
+
stmt3.execute(sms_contact_id)
|
903
|
+
stmt3.execute(im_contact_id)
|
904
|
+
$db.commit
|
905
|
+
end
|
906
|
+
end
|
907
|
+
stmt4=$db.prepare("DELETE from alert_override_detail WHERE id=?")
|
908
|
+
$db.transaction
|
909
|
+
stmt4.execute(aoid)
|
910
|
+
$db.commit
|
911
|
+
end
|
912
|
+
end
|
913
|
+
stmt5=$db.prepare("DELETE from alert_override WHERE node_id=?")
|
914
|
+
$db.transaction
|
915
|
+
stmt5.execute(nid)
|
916
|
+
$db.commit
|
917
|
+
end
|
918
|
+
|
919
|
+
#
|
920
|
+
# remove all links stuff for a specific node
|
921
|
+
#
|
922
|
+
def db_del_links(node_ip=nil, node_type=nil)
|
923
|
+
if !node_ip
|
924
|
+
stmt=$db.prepare("DELETE from link")
|
925
|
+
$db.transaction
|
926
|
+
stmt.execute()
|
927
|
+
$db.commit
|
928
|
+
else
|
929
|
+
nid=db_get_node_id(node_ip, node_type)
|
930
|
+
stmt=$db.prepare("DELETE from link WHERE node1=? or node2=?")
|
931
|
+
$db.transaction
|
932
|
+
stmt.execute(nid,nid)
|
933
|
+
$db.commit
|
934
|
+
end
|
935
|
+
end
|
936
|
+
|
937
|
+
#
|
938
|
+
# call Link class and fill directly the $links
|
939
|
+
#
|
940
|
+
def db_get_links()
|
941
|
+
stmt=$db.prepare("SELECT link_state, name, speed, node1, node2 FROM link")
|
942
|
+
stmt.execute() do |rs|
|
943
|
+
rs.each do |link_state, name, speed, node1, node2|
|
944
|
+
ip1, nodetype1 = db_get_ip_type(node1)
|
945
|
+
ip2, nodetype2 = db_get_ip_type(node2)
|
946
|
+
if nodetype1 == HOSTNODE
|
947
|
+
node1=$host[ip1]
|
948
|
+
else
|
949
|
+
node1=$network[ip1]
|
950
|
+
end
|
951
|
+
if nodetype2 == HOSTNODE
|
952
|
+
node2=$host[ip2]
|
953
|
+
else
|
954
|
+
node2=$network[ip2]
|
955
|
+
end
|
956
|
+
Link.new(node1, node2)
|
957
|
+
end
|
958
|
+
end
|
959
|
+
end
|
960
|
+
|
961
|
+
#
|
962
|
+
# save link for a given node, this method save the $links array to db
|
963
|
+
#
|
964
|
+
def db_set_links()
|
965
|
+
$links.each {|link|
|
966
|
+
node_ip1=link.node1.ip
|
967
|
+
node_ip2=link.node2.ip
|
968
|
+
node_type1=HOSTNODE
|
969
|
+
if link.node1.class == Network
|
970
|
+
node_type1=NETWORKNODE
|
971
|
+
end
|
972
|
+
node_type2=HOSTNODE
|
973
|
+
if link.node2.class == Network
|
974
|
+
node_type2=NETWORKNODE
|
975
|
+
end
|
976
|
+
nid1=db_get_node_id(node_ip1, node_type1)
|
977
|
+
nid2=db_get_node_id(node_ip2, node_type2)
|
978
|
+
|
979
|
+
stmt=$db.prepare("INSERT INTO link VALUES (?, ?, ?, ?, ?, ?)")
|
980
|
+
$db.transaction
|
981
|
+
stmt.execute(nil, 1, "", 0, nid1, nid2)
|
982
|
+
$db.commit
|
983
|
+
}
|
984
|
+
end
|
985
|
+
|
986
|
+
#
|
987
|
+
# remove all snmp monitoring stuff for a specific node
|
988
|
+
#
|
989
|
+
def db_del_snmp_monitoring(node_ip, node_type)
|
990
|
+
db_del_template_monitoring("snmp", node_ip, node_type)
|
991
|
+
end
|
992
|
+
|
993
|
+
#
|
994
|
+
# remove all wmi monitoring stuff for a specific node
|
995
|
+
#
|
996
|
+
def db_del_wmi_monitoring(node_ip, node_type)
|
997
|
+
db_del_template_monitoring("wmi", node_ip, node_type)
|
998
|
+
end
|
999
|
+
|
1000
|
+
#
|
1001
|
+
# remove all jmx monitoring stuff for a specific node
|
1002
|
+
#
|
1003
|
+
def db_del_jmx_monitoring(node_ip, node_type)
|
1004
|
+
stmt=$db.prepare("SELECT id, node_and_jmx_monitor_id FROM node WHERE ip=? and nodetype=?")
|
1005
|
+
stmt.execute(node_ip,node_type) do |rs|
|
1006
|
+
rs.each do |nodeid,nodejmxid|
|
1007
|
+
if nodejmxid
|
1008
|
+
stmt=$db.prepare("SELECT jmx_monitor_id, jmx_attr_monitor_id FROM node_and_jmx_monitor WHERE node_id=? and id=?")
|
1009
|
+
stmt.execute(nodeid, nodejmxid) do |rs|
|
1010
|
+
rs.each do |jmxmonid, jmxattrmonid|
|
1011
|
+
if jmxmonid
|
1012
|
+
#we can pass here multiple time
|
1013
|
+
stmt=$db.prepare("DELETE from jmx_monitor WHERE id=?")
|
1014
|
+
$db.transaction
|
1015
|
+
stmt.execute(jmxmonid)
|
1016
|
+
$db.commit
|
1017
|
+
end
|
1018
|
+
if jmxattrmonid
|
1019
|
+
stmt=$db.prepare("DELETE from jmx_attr_monitor WHERE id=?")
|
1020
|
+
$db.transaction
|
1021
|
+
stmt.execute(jmxattrmonid)
|
1022
|
+
$db.commit
|
1023
|
+
end
|
1024
|
+
end
|
1025
|
+
$db.transaction
|
1026
|
+
stmt2=$db.prepare("DELETE from node_and_jmx_monitor WHERE node_id=? and id=?")
|
1027
|
+
stmt2.execute(nodeid,nodejmxid)
|
1028
|
+
$db.commit
|
1029
|
+
end
|
1030
|
+
end
|
1031
|
+
end
|
1032
|
+
end
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
#
|
1036
|
+
# remove all snmp trap monitoring stuff for a specific node
|
1037
|
+
#
|
1038
|
+
def db_del_snmptrap_monitoring(node_ip, node_type)
|
1039
|
+
db_del_template_monitoring("snmptrap", node_ip, node_type)
|
1040
|
+
end
|
1041
|
+
|
1042
|
+
#
|
1043
|
+
# remove all syslog monitoring stuff for a specific node
|
1044
|
+
#
|
1045
|
+
def db_del_syslog_monitoring(node_ip, node_type)
|
1046
|
+
db_del_template_monitoring("syslog", node_ip, node_type)
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
|
1050
|
+
def db_select_all_prp(table)
|
1051
|
+
return $db.prepare("SELECT * FROM #{table}")
|
1052
|
+
end
|
1053
|
+
|
1054
|
+
def db_delete_all_prp(table)
|
1055
|
+
begin
|
1056
|
+
return $db.prepare("DELETE FROM #{table}")
|
1057
|
+
rescue Exception => msg
|
1058
|
+
$log.info("Error when trying to delete table: #{msg}")
|
1059
|
+
return nil
|
1060
|
+
end
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
def db_insert_ref_prp4(table)
|
1064
|
+
return $db.prepare("INSERT INTO #{table} VALUES (?, ?, ?, ?)")
|
1065
|
+
end
|
1066
|
+
|
1067
|
+
def db_insert_ref_prp(table)
|
1068
|
+
return $db.prepare("INSERT INTO #{table} VALUES (?, ?, ?)")
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
def db_delete_all_node_prp()
|
1072
|
+
return $db.prepare("DELETE FROM node")
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
def db_insert_custom_monitor(cm_name_id)
|
1076
|
+
stmt=$db.prepare("INSERT INTO custom_monitor VALUES (NULL,?)")
|
1077
|
+
$db.transaction
|
1078
|
+
stmt.execute(cm_name_id)
|
1079
|
+
$db.commit
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
def db_get_custom_monitor_id(cm_name_id)
|
1083
|
+
stmt=$db.prepare("SELECT id FROM custom_monitor WHERE name=?")
|
1084
|
+
stmt.execute(cm_name_id) do |rs|
|
1085
|
+
rs.each do |field,type|
|
1086
|
+
if !field
|
1087
|
+
return 0
|
1088
|
+
end
|
1089
|
+
return field.to_i
|
1090
|
+
end
|
1091
|
+
end
|
1092
|
+
return 0
|
1093
|
+
end
|
1094
|
+
|
1095
|
+
def db_get_network_id(map)
|
1096
|
+
stmt=$db.prepare("SELECT id FROM node WHERE nodetype=? and ip=?")
|
1097
|
+
stmt.execute(NETWORKNODE, map) do |rs|
|
1098
|
+
rs.each do |field,type|
|
1099
|
+
if !field
|
1100
|
+
return 0
|
1101
|
+
end
|
1102
|
+
return field.to_i
|
1103
|
+
end
|
1104
|
+
end
|
1105
|
+
return 0
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
#
|
1109
|
+
# delete a node from the db and all the stuff around it
|
1110
|
+
#
|
1111
|
+
def db_delete_node(node_type, ip, mask)
|
1112
|
+
#sqlite does not support cascading delete
|
1113
|
+
begin
|
1114
|
+
db_del_services(ip, node_type)
|
1115
|
+
db_del_snmp_monitoring(ip, node_type)
|
1116
|
+
db_del_wmi_monitoring(ip, node_type)
|
1117
|
+
db_del_jmx_monitoring(ip, node_type)
|
1118
|
+
db_del_snmptrap_monitoring(ip, node_type)
|
1119
|
+
db_del_syslog_monitoring(ip, node_type)
|
1120
|
+
db_del_custom_monitoring(ip, node_type)
|
1121
|
+
db_del_links(ip, node_type)
|
1122
|
+
db_del_accounts(ip, node_type)
|
1123
|
+
db_del_interfaces(ip, node_type)
|
1124
|
+
db_del_groups(ip, node_type)
|
1125
|
+
db_del_alert_override(ip, node_type)
|
1126
|
+
|
1127
|
+
$db.transaction
|
1128
|
+
stmt=$db.prepare("DELETE FROM node WHERE nodetype=? and ip=? and netmask=?")
|
1129
|
+
stmt.execute(node_type,ip,mask)
|
1130
|
+
$db.commit
|
1131
|
+
rescue Exception => msg
|
1132
|
+
$log.error("Error when trying to delete #{ip}/#{mask} from db #{msg.backtrace.join("\n")}")
|
1133
|
+
end
|
1134
|
+
end
|
1135
|
+
|
1136
|
+
def db_insert_node_prp(uuid,nodetype,ip,mask,ipv6,mask6,mac,map,status,avail_sev,snmp_sev,custom_sev,trap_sev, serv_sev, wmi_sev, syslog_sev, jmx_sev, x,y,icon,description,snmp_version,snmp_port,snmp_timeout,snmp_retry,type,os,name,dns_name,dns_domain,netbios_name,netbios_domain,nodesize,bg_type,bg_data)
|
1137
|
+
if defined?($db) && ($db !=nil)
|
1138
|
+
stmt=$db.prepare("SELECT count(id) FROM node WHERE nodetype=? and ip=? and netmask=?")
|
1139
|
+
stmt.execute(nodetype,ip,mask) do |rs|
|
1140
|
+
rs.each do |field,vtype|
|
1141
|
+
if field.to_i==0
|
1142
|
+
map_id=db_get_network_id(map)
|
1143
|
+
begin
|
1144
|
+
$db.transaction
|
1145
|
+
stmt=$db.prepare("INSERT INTO node VALUES (NULL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
|
1146
|
+
stmt.execute(uuid,nodetype,ip,mask,ipv6,mask6,mac,map_id,status,avail_sev,snmp_sev,custom_sev,trap_sev, serv_sev, wmi_sev, syslog_sev, jmx_sev,x,y,icon,description,snmp_version,snmp_port,snmp_timeout,snmp_retry,type,os,name,dns_name,dns_domain,netbios_name,netbios_domain,nodesize,bg_type,bg_data)
|
1147
|
+
$db.commit
|
1148
|
+
rescue
|
1149
|
+
$log.error("Error when adding a new node in database")
|
1150
|
+
end
|
1151
|
+
end
|
1152
|
+
end
|
1153
|
+
end
|
1154
|
+
end
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
#
|
1158
|
+
# return the ip corresponding to a given node id
|
1159
|
+
#
|
1160
|
+
def db_get_ip(nid)
|
1161
|
+
if nid
|
1162
|
+
stmt=$db.prepare("SELECT ip FROM node WHERE id=?")
|
1163
|
+
stmt.execute(nid) do |rs|
|
1164
|
+
rs.each do |field,type|
|
1165
|
+
if !field
|
1166
|
+
return nil
|
1167
|
+
end
|
1168
|
+
return field
|
1169
|
+
end
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
return nil
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
#
|
1176
|
+
# return an array of ip and type corresponding to a given node id
|
1177
|
+
#
|
1178
|
+
def db_get_ip_type(nid)
|
1179
|
+
if nid
|
1180
|
+
stmt=$db.prepare("SELECT ip, nodetype FROM node WHERE id=?")
|
1181
|
+
stmt.execute(nid) do |rs|
|
1182
|
+
rs.each do |ip,type|
|
1183
|
+
return [ip, type]
|
1184
|
+
end
|
1185
|
+
end
|
1186
|
+
end
|
1187
|
+
return nil
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
#
|
1191
|
+
# return a hash of all services for a given node id and service monitor id
|
1192
|
+
#
|
1193
|
+
def db_get_services(nodeid, service_monitor_id)
|
1194
|
+
if !service_monitor_id
|
1195
|
+
return nil
|
1196
|
+
end
|
1197
|
+
services=Hash.new
|
1198
|
+
stmt=$db.prepare("SELECT protocol, port, name, monitor, service_sev FROM service, service_monitor WHERE service_monitor.node_id=? and service_monitor.id=? and service_monitor.service_id=service.id")
|
1199
|
+
stmt.execute(nodeid, service_monitor_id) do |rs|
|
1200
|
+
rs.each do |proto, port, name, monitor, sev|
|
1201
|
+
services["#{proto}/#{port}"]=Service.new(proto, port.to_i, name, monitor, sev.to_i)
|
1202
|
+
end
|
1203
|
+
end
|
1204
|
+
if services.size() == 0
|
1205
|
+
return nil
|
1206
|
+
else
|
1207
|
+
return services
|
1208
|
+
end
|
1209
|
+
end
|
1210
|
+
|
1211
|
+
def db_get_jmx_monitoring(ip, type)
|
1212
|
+
stmt=$db.prepare("SELECT id, node_and_jmx_monitor_id FROM node WHERE nodetype=? and ip=?")
|
1213
|
+
stmt.execute(type, ip) do |rs|
|
1214
|
+
rs.each do |id, jmxid|
|
1215
|
+
db_get_jmx_monitoring_ids(ip, id, jmxid)
|
1216
|
+
end
|
1217
|
+
end
|
1218
|
+
end
|
1219
|
+
|
1220
|
+
def db_get_jmx_monitoring_ids(ip, id, node_and_jmx_monitor_id)
|
1221
|
+
stmt=$db.prepare("SELECT distinct jmx_monitor.id, jmx_state, jmx_ref_name, jmx_protocol, jmx_port, jmx_auth FROM node_and_jmx_monitor, jmx_monitor WHERE node_id=? and node_and_jmx_monitor.id=? and jmx_monitor_id=jmx_monitor.id")
|
1222
|
+
stmt.execute(id, node_and_jmx_monitor_id) do |rs|
|
1223
|
+
rs.each do |jmx_id, state, jmxref, proto, port, auth|
|
1224
|
+
attribuesh=Hash.new
|
1225
|
+
stmt=$db.prepare("SELECT name, oper, value, jmxsev FROM node_and_jmx_monitor, jmx_attr_monitor WHERE node_id=? and node_and_jmx_monitor.id=? and jmx_attr_monitor_id=jmx_attr_monitor.id and node_and_jmx_monitor.jmx_monitor_id=?")
|
1226
|
+
stmt.execute(id, node_and_jmx_monitor_id, jmx_id) do |rs|
|
1227
|
+
rs.each do |name, oper, value, jmxsev|
|
1228
|
+
attribuesh[name]=JmxAttributeMonitoring.new(name, oper.to_i(), value.to_i(), jmxsev.to_i())
|
1229
|
+
end
|
1230
|
+
end
|
1231
|
+
$host[ip].add_jmx_monitoring(state.to_i(), jmxref, proto, port.to_i(), auth, attribuesh.dup)
|
1232
|
+
end
|
1233
|
+
end
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
def db_read_node()
|
1237
|
+
|
1238
|
+
#first read network node details
|
1239
|
+
#here we want recursive network id, map id is increasingm and 0 is the root map
|
1240
|
+
stmt=$db.prepare("SELECT * FROM node WHERE nodetype='n' ORDER BY map")
|
1241
|
+
networkinmap=Hash.new
|
1242
|
+
stmt.execute() do |rs|
|
1243
|
+
rs.each do |id, uuid, nodetype, ip, mask, ipv6, mask6, mac, map, status, avail_sev, snmp_sev,custom_sev,trap_sev, serv_sev, wmi_sev, syslog_sev, jmx_sev, service_monitor_id,node_and_snmp_monitor_id,node_and_wmi_monitor_id, node_and_jmx_monitor_id, node_and_snmptrap_monitor_id,node_and_syslog_monitor_id, node_and_custom_monitor_id, node_and_account_id,node_and_group_id, node_and_interface_id, x,y,icon,description, snmp_version,snmp_port, snmp_timeout, snmp_retry,type,os,name,dns_name,dns_domain,netbios_name,netbios_domain,node_size,map_bg_type,map_bg_data|
|
1244
|
+
|
1245
|
+
#read service
|
1246
|
+
services=db_get_services(id, service_monitor_id)
|
1247
|
+
map_ip=db_get_ip(map)
|
1248
|
+
nnode=Network.new(ip, mask.to_i, ipv6, mask6.to_i, map_ip, services, status.to_i, x.to_i, y.to_i, icon, description, type, os, name, dns_domain, netbios_domain, uuid)
|
1249
|
+
nnode.snmp_version=snmp_version
|
1250
|
+
nnode.snmp_port=snmp_port
|
1251
|
+
nnode.snmp_timeout=snmp_timeout
|
1252
|
+
nnode.snmp_retry=snmp_retry
|
1253
|
+
|
1254
|
+
if node_size.to_i() == 0
|
1255
|
+
nnode.node_size=NodeView::NODE_SIZE
|
1256
|
+
else
|
1257
|
+
nnode.node_size=node_size.to_i()
|
1258
|
+
end
|
1259
|
+
|
1260
|
+
nnode.map_bg_type=map_bg_type
|
1261
|
+
if map_bg_type == "color"
|
1262
|
+
#rgb is store as a text space char separated
|
1263
|
+
nnode.map_bg_data=map_bg_data.split
|
1264
|
+
else
|
1265
|
+
nnode.map_bg_data=map_bg_data
|
1266
|
+
end
|
1267
|
+
nnode.set_all_account(db_get_accounts(ip, nodetype))
|
1268
|
+
|
1269
|
+
#load alert override
|
1270
|
+
db_get_alert_override(nnode, NETWORKNODE)
|
1271
|
+
|
1272
|
+
nnode.reload
|
1273
|
+
networkinmap[ip]=map_ip
|
1274
|
+
$network[ip]=nnode
|
1275
|
+
end
|
1276
|
+
end
|
1277
|
+
networkinmap.each_pair do |network_ip, map|
|
1278
|
+
$network[map].add_network($network[network_ip]) unless map == nil
|
1279
|
+
end
|
1280
|
+
|
1281
|
+
#then read the other nodes
|
1282
|
+
stmt=$db.prepare("SELECT * FROM node WHERE nodetype!='n' ORDER BY ip")
|
1283
|
+
stmt.execute() do |rs|
|
1284
|
+
rs.each do |id, uuid, nodetype, ip, mask, ipv6, mask6, mac, map, status, avail_sev, snmp_sev,custom_sev,trap_sev, serv_sev, wmi_sev, syslog_sev, jmx_sev, service_monitor_id,node_and_snmp_monitor_id,node_and_wmi_monitor_id, node_and_jmx_monitor_id, node_and_snmptrap_monitor_id,node_and_syslog_monitor_id, node_and_custom_monitor_id,node_and_account_id,node_and_group_id, node_and_interface_id, x,y,icon,description, snmp_version,snmp_port, snmp_timeout, snmp_retry,type,os,name,dns_name,dns_domain,netbios_name,netbios_domain,node_size,map_bg_type,map_bg_data|
|
1285
|
+
|
1286
|
+
#read service
|
1287
|
+
services=db_get_services(id, service_monitor_id)
|
1288
|
+
map_ip=db_get_ip(map)
|
1289
|
+
nnode=Host.new(ip, mask.to_i, ipv6, mask6.to_i, map_ip, mac, dns_name, netbios_name, services, status.to_i, x.to_i, y.to_i, icon, description, type, os, uuid)
|
1290
|
+
nnode.set_severities(avail_sev.to_i, snmp_sev.to_i, custom_sev.to_i, trap_sev.to_i,serv_sev.to_i, wmi_sev.to_i, syslog_sev.to_i, jmx_sev.to_i)
|
1291
|
+
nnode.set_all_account(db_get_accounts(ip, nodetype))
|
1292
|
+
nnode.set_all_interface(db_get_interfaces(id, node_and_interface_id))
|
1293
|
+
nnode.name = name
|
1294
|
+
nnode.reload
|
1295
|
+
|
1296
|
+
$host[ip]=nnode
|
1297
|
+
|
1298
|
+
if node_and_snmp_monitor_id
|
1299
|
+
stmt=$db.prepare("SELECT snmp_state, oid_ref_name, oper, threshold, oidsev FROM node_and_snmp_monitor, snmp_monitor WHERE node_id=? and node_and_snmp_monitor.id=? and snmp_monitor_id=snmp_monitor.id")
|
1300
|
+
stmt.execute(id, node_and_snmp_monitor_id) do |rs|
|
1301
|
+
rs.each do |state, oidref, oper, threshold, sev|
|
1302
|
+
$host[ip].add_snmp_monitoring(state.to_i(), oidref, oper.to_i(), threshold, sev.to_i(),"init")
|
1303
|
+
end
|
1304
|
+
end
|
1305
|
+
end
|
1306
|
+
|
1307
|
+
if node_and_wmi_monitor_id
|
1308
|
+
stmt=$db.prepare("SELECT wmi_state, wmi_ref_name, oper, value, wmisev FROM node_and_wmi_monitor, wmi_monitor WHERE node_id=? and node_and_wmi_monitor.id=? and wmi_monitor_id=wmi_monitor.id")
|
1309
|
+
stmt.execute(id, node_and_wmi_monitor_id) do |rs|
|
1310
|
+
rs.each do |state, wmiref, oper, val, sev|
|
1311
|
+
$host[ip].add_wmi_monitoring(state.to_i(), wmiref, oper.to_i(), val, sev.to_i(), "init")
|
1312
|
+
end
|
1313
|
+
end
|
1314
|
+
end
|
1315
|
+
|
1316
|
+
if node_and_jmx_monitor_id
|
1317
|
+
db_get_jmx_monitoring_ids(ip, id, node_and_jmx_monitor_id)
|
1318
|
+
end
|
1319
|
+
|
1320
|
+
if node_and_snmptrap_monitor_id
|
1321
|
+
stmt=$db.prepare("SELECT snmptrap_state, snmptrap_ref, snmptrap_sev FROM node_and_snmptrap_monitor, snmptrap_monitor WHERE node_id=? and node_and_snmptrap_monitor.id=? and snmptrap_monitor_id=snmptrap_monitor.id")
|
1322
|
+
stmt.execute(id, node_and_snmptrap_monitor_id) do |rs|
|
1323
|
+
rs.each do |state, ref, sev|
|
1324
|
+
$host[ip].add_snmptrap_monitoring(state.to_i(), ref, sev.to_i(),"init")
|
1325
|
+
end
|
1326
|
+
end
|
1327
|
+
end
|
1328
|
+
|
1329
|
+
if node_and_syslog_monitor_id
|
1330
|
+
stmt=$db.prepare("SELECT syslog_state, syslog_ref, syslog_sev FROM node_and_syslog_monitor, syslog_monitor WHERE node_id=? and node_and_syslog_monitor.id=? and syslog_monitor_id=syslog_monitor.id")
|
1331
|
+
stmt.execute(id, node_and_syslog_monitor_id) do |rs|
|
1332
|
+
rs.each do |state, ref, sev|
|
1333
|
+
$host[ip].add_syslog_monitoring(state.to_i(), ref, sev.to_i(),"init")
|
1334
|
+
end
|
1335
|
+
end
|
1336
|
+
end
|
1337
|
+
|
1338
|
+
if node_and_custom_monitor_id
|
1339
|
+
stmt=$db.prepare("SELECT custom_state, custom_name, custom_param, custom_sev FROM node_and_custom_monitor, custom_monitor WHERE node_id=? and node_and_custom_monitor.id=? and custom_monitor_id=custom_monitor.id")
|
1340
|
+
stmt.execute(id, node_and_custom_monitor_id) do |rs|
|
1341
|
+
rs.each do |state, name, param, sev|
|
1342
|
+
$host[ip].add_custom_monitoring(state.to_i(), name, param, sev.to_i(), "init")
|
1343
|
+
end
|
1344
|
+
end
|
1345
|
+
end
|
1346
|
+
|
1347
|
+
$network[map_ip].add_host(nnode)
|
1348
|
+
$network[map_ip].update_status()
|
1349
|
+
|
1350
|
+
end
|
1351
|
+
end
|
1352
|
+
end
|
1353
|
+
|
1354
|
+
#
|
1355
|
+
# read db schema version
|
1356
|
+
#
|
1357
|
+
def db_check_version_schema()
|
1358
|
+
stmt=$db.prepare("SELECT version FROM db_schema")
|
1359
|
+
stmt.execute() do |rs|
|
1360
|
+
rs.each do |vers|
|
1361
|
+
#converting SQLite3::ResultSet::ArrayWithTypesAndFields to float
|
1362
|
+
if vers.join("\t").to_s.to_f != DB_SCHEMA_VERSION
|
1363
|
+
$log.fatal("Wrong db version #{vers} expected #{DB_SCHEMA_VERSION}, backup your .db file and try again")
|
1364
|
+
exit()
|
1365
|
+
end
|
1366
|
+
end
|
1367
|
+
end
|
1368
|
+
return 0
|
1369
|
+
end
|
1370
|
+
|
1371
|
+
#
|
1372
|
+
# read contacts information and fill hash
|
1373
|
+
#
|
1374
|
+
def db_read_contact()
|
1375
|
+
stmt=$db.prepare("SELECT firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note FROM contact")
|
1376
|
+
stmt.execute() do |rs|
|
1377
|
+
rs.each do |firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note|
|
1378
|
+
$contact["#{firstname}|#{lastname}"]=Contact.new(firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note)
|
1379
|
+
end
|
1380
|
+
end
|
1381
|
+
return 0
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
#
|
1385
|
+
# return contact id
|
1386
|
+
#
|
1387
|
+
def db_get_contact_id(firstname, lastname)
|
1388
|
+
stmt=$db.prepare("SELECT id FROM contact WHERE firstname=? and lastname=?")
|
1389
|
+
stmt.execute(firstname, lastname) do |rs|
|
1390
|
+
rs.each do |cid|
|
1391
|
+
if cid
|
1392
|
+
return cid
|
1393
|
+
end
|
1394
|
+
end
|
1395
|
+
end
|
1396
|
+
end
|
1397
|
+
|
1398
|
+
#
|
1399
|
+
# return array of firstname and lastname for a given contact
|
1400
|
+
#
|
1401
|
+
def db_get_contact_names(id)
|
1402
|
+
stmt=$db.prepare("SELECT firstname, lastname FROM contact WHERE id=?")
|
1403
|
+
stmt.execute(id) do |rs|
|
1404
|
+
rs.each do |firstname, lastname|
|
1405
|
+
return [firstname, lastname]
|
1406
|
+
end
|
1407
|
+
end
|
1408
|
+
end
|
1409
|
+
|
1410
|
+
#
|
1411
|
+
# write contacts information
|
1412
|
+
#
|
1413
|
+
def db_write_contact(firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note)
|
1414
|
+
cid=db_get_contact_id(firstname, lastname)
|
1415
|
+
if cid
|
1416
|
+
stmt2=$db.prepare("UPDATE contact SET firstname=?, lastname=?, email=?, phone=?, mobile=?, pager=?, im=?, title=?, organization=?, location=?, note=? WHERE id=?")
|
1417
|
+
$db.transaction
|
1418
|
+
stmt2.execute(firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note, cid)
|
1419
|
+
$db.commit
|
1420
|
+
else
|
1421
|
+
stmt2=$db.prepare("INSERT INTO contact VALUES ((SELECT IFNULL(MAX(id),0) FROM contact)+1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
1422
|
+
$db.transaction
|
1423
|
+
stmt2.execute(firstname, lastname, email, phone, mobile, pager, im, title, organization, location, note)
|
1424
|
+
$db.commit
|
1425
|
+
end
|
1426
|
+
end
|
1427
|
+
|
1428
|
+
#
|
1429
|
+
# del contacts information
|
1430
|
+
# we don't need to check for node_and_contact value entries, they should have already been handled
|
1431
|
+
# so here we remove not USED contact
|
1432
|
+
#
|
1433
|
+
def db_del_contact(firstname, lastname)
|
1434
|
+
stmt=$db.prepare("DELETE from contact WHERE firstname=? and lastname=?")
|
1435
|
+
$db.transaction
|
1436
|
+
stmt.execute(firstname, lastname)
|
1437
|
+
$db.commit
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
def db_read_refs()
|
1441
|
+
OIDRef::read_db_oidref()
|
1442
|
+
WMIRef::read_db_wmiref()
|
1443
|
+
JMXRef::read_db_jmxref()
|
1444
|
+
SyslogRef::read_db_syslogref()
|
1445
|
+
SnmpTrapRef::read_db_snmptrapref()
|
1446
|
+
end
|
1447
|
+
|
1448
|
+
#
|
1449
|
+
# read and init component hash
|
1450
|
+
#
|
1451
|
+
def db_read(fic=SQLITE_DB)
|
1452
|
+
open_db(fic)
|
1453
|
+
db_check_version_schema()
|
1454
|
+
db_read_refs()
|
1455
|
+
db_set_custom_monitor()
|
1456
|
+
db_read_contact()
|
1457
|
+
db_read_node()
|
1458
|
+
db_get_links()
|
1459
|
+
end
|
1460
|
+
|
1461
|
+
#
|
1462
|
+
# create database tables
|
1463
|
+
#
|
1464
|
+
def create_db(fic=SQLITE_DB)
|
1465
|
+
$log.info("Create and fill DB")
|
1466
|
+
open_db(fic)
|
1467
|
+
begin
|
1468
|
+
sql = <<SQL
|
1469
|
+
|
1470
|
+
|
1471
|
+
CREATE TABLE service_monitor (
|
1472
|
+
id INTEGER NOT NULL,
|
1473
|
+
node_id INTEGER
|
1474
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1475
|
+
service_id INTEGER
|
1476
|
+
CONSTRAINT fk_service_id REFERENCES service(id),
|
1477
|
+
monitor INTEGER,
|
1478
|
+
service_sev INTEGER,
|
1479
|
+
PRIMARY KEY (id, node_id, service_id)
|
1480
|
+
);
|
1481
|
+
|
1482
|
+
CREATE TABLE service (
|
1483
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1484
|
+
protocol VARCHAR(10),
|
1485
|
+
port INTEGER,
|
1486
|
+
name VARCHAR(50)
|
1487
|
+
);
|
1488
|
+
|
1489
|
+
CREATE TABLE snmp_monitor (
|
1490
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1491
|
+
snmp_state BOOLEAN,
|
1492
|
+
oid_ref_name VARCHAR(50)
|
1493
|
+
CONSTRAINT fk_oid_ref_name REFERENCES oid_ref(name),
|
1494
|
+
oper INTEGER,
|
1495
|
+
threshold INTEGER,
|
1496
|
+
oidsev INTEGER
|
1497
|
+
);
|
1498
|
+
|
1499
|
+
CREATE TABLE node_and_snmp_monitor(
|
1500
|
+
id INTEGER NOT NULL,
|
1501
|
+
node_id INTEGER
|
1502
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1503
|
+
snmp_monitor_id INTEGER
|
1504
|
+
CONSTRAINT fk_snmp_monitor_id REFERENCES snmp_monitor(id),
|
1505
|
+
PRIMARY KEY (id, node_id, snmp_monitor_id)
|
1506
|
+
);
|
1507
|
+
|
1508
|
+
CREATE TABLE wmi_monitor (
|
1509
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1510
|
+
wmi_state BOOLEAN,
|
1511
|
+
wmi_ref_name VARCHAR(50)
|
1512
|
+
CONSTRAINT fk_wmi_ref_name REFERENCES wmi_ref(name),
|
1513
|
+
oper INTEGER,
|
1514
|
+
value INTEGER,
|
1515
|
+
wmisev INTEGER
|
1516
|
+
);
|
1517
|
+
|
1518
|
+
CREATE TABLE jmx_monitor (
|
1519
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1520
|
+
jmx_state BOOLEAN,
|
1521
|
+
jmx_ref_name VARCHAR(50)
|
1522
|
+
CONSTRAINT fk_jmx_ref_name REFERENCES jmx_ref(name),
|
1523
|
+
jmx_protocol VARCHAR(10),
|
1524
|
+
jmx_port INTEGER,
|
1525
|
+
jmx_auth VARCHAR(20)
|
1526
|
+
);
|
1527
|
+
|
1528
|
+
CREATE TABLE jmx_attr_monitor (
|
1529
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1530
|
+
name VARCHAR(50),
|
1531
|
+
oper INTEGER,
|
1532
|
+
value INTEGER,
|
1533
|
+
jmxsev INTEGER
|
1534
|
+
);
|
1535
|
+
|
1536
|
+
CREATE TABLE node_and_wmi_monitor(
|
1537
|
+
id INTEGER NOT NULL,
|
1538
|
+
node_id INTEGER
|
1539
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1540
|
+
wmi_monitor_id INTEGER
|
1541
|
+
CONSTRAINT fk_wmi_monitor_id REFERENCES wmi_monitor(id),
|
1542
|
+
PRIMARY KEY (id, node_id, wmi_monitor_id)
|
1543
|
+
);
|
1544
|
+
|
1545
|
+
CREATE TABLE node_and_jmx_monitor(
|
1546
|
+
id INTEGER NOT NULL,
|
1547
|
+
node_id INTEGER
|
1548
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1549
|
+
jmx_monitor_id INTEGER
|
1550
|
+
CONSTRAINT fk_jmx_monitor_id REFERENCES jmx_monitor(id),
|
1551
|
+
jmx_attr_monitor_id INTEGER
|
1552
|
+
CONSTRAINT fk_jmx_attr_monitor_id REFERENCES jmx_attr_monitor(id),
|
1553
|
+
PRIMARY KEY (id, node_id, jmx_monitor_id, jmx_attr_monitor_id)
|
1554
|
+
);
|
1555
|
+
|
1556
|
+
CREATE TABLE snmptrap_monitor (
|
1557
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1558
|
+
snmptrap_state BOOLEAN,
|
1559
|
+
snmptrap_ref VARCHAR(50)
|
1560
|
+
CONSTRAINT fk_snmptrap_ref_name REFERENCES snmptrap_ref(name),
|
1561
|
+
snmptrap_sev INTEGER
|
1562
|
+
);
|
1563
|
+
|
1564
|
+
CREATE TABLE node_and_snmptrap_monitor(
|
1565
|
+
id INTEGER NOT NULL,
|
1566
|
+
node_id INTEGER
|
1567
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1568
|
+
snmptrap_monitor_id INTEGER
|
1569
|
+
CONSTRAINT fk_snmptrap_id REFERENCES snmptrap(id),
|
1570
|
+
PRIMARY KEY (id, node_id, snmptrap_monitor_id)
|
1571
|
+
);
|
1572
|
+
|
1573
|
+
CREATE TABLE syslog_monitor (
|
1574
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1575
|
+
syslog_state BOOLEAN,
|
1576
|
+
syslog_ref VARCHAR(50)
|
1577
|
+
CONSTRAINT fk_syslog_ref_name REFERENCES syslog_ref(name),
|
1578
|
+
syslog_sev INTEGER
|
1579
|
+
);
|
1580
|
+
|
1581
|
+
CREATE TABLE node_and_syslog_monitor(
|
1582
|
+
id INTEGER NOT NULL,
|
1583
|
+
node_id INTEGER
|
1584
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1585
|
+
syslog_monitor_id INTEGER
|
1586
|
+
CONSTRAINT fk_syslog_monitor_id REFERENCES syslog_monitor(id),
|
1587
|
+
PRIMARY KEY (id, node_id, syslog_monitor_id)
|
1588
|
+
);
|
1589
|
+
|
1590
|
+
CREATE TABLE custom_monitor(
|
1591
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1592
|
+
custom_name VARCHAR(50)
|
1593
|
+
);
|
1594
|
+
|
1595
|
+
CREATE TABLE node_and_custom_monitor(
|
1596
|
+
id INTEGER NOT NULL,
|
1597
|
+
node_id INTEGER
|
1598
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1599
|
+
custom_monitor_id INTEGER
|
1600
|
+
CONSTRAINT fk_custom_monitor_id REFERENCES custom_monitor(id),
|
1601
|
+
custom_state BOOLEAN,
|
1602
|
+
custom_param VARCHAR(512),
|
1603
|
+
custom_sev INTEGER,
|
1604
|
+
PRIMARY KEY (id, node_id, custom_monitor_id)
|
1605
|
+
);
|
1606
|
+
|
1607
|
+
CREATE TABLE account (
|
1608
|
+
id INTEGER PRIMARY KEY,
|
1609
|
+
idname VARCHAR(50),
|
1610
|
+
login VARCHAR(50),
|
1611
|
+
password VARCHAR(50)
|
1612
|
+
);
|
1613
|
+
|
1614
|
+
CREATE TABLE node_and_account (
|
1615
|
+
id INTEGER NOT NULL,
|
1616
|
+
node_id INTEGER
|
1617
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1618
|
+
account_id INTEGER
|
1619
|
+
CONSTRAINT fk_account_id REFERENCES account(id),
|
1620
|
+
PRIMARY KEY (id, node_id, account_id)
|
1621
|
+
);
|
1622
|
+
|
1623
|
+
CREATE TABLE alert_override (
|
1624
|
+
id INTEGER PRIMARY KEY,
|
1625
|
+
node_id INTEGER
|
1626
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1627
|
+
alert_override_detail_id INTEGER
|
1628
|
+
CONSTRAINT fk_alert_override_detail_id REFERENCES alert_override_detail(id),
|
1629
|
+
alert_type_by_level VARCHAR(20)
|
1630
|
+
);
|
1631
|
+
|
1632
|
+
CREATE TABLE alert_override_contact (
|
1633
|
+
id INTEGER PRIMARY KEY,
|
1634
|
+
contact_id INTEGER
|
1635
|
+
CONSTRAINT fk_contact REFERENCES contact(id)
|
1636
|
+
);
|
1637
|
+
|
1638
|
+
CREATE TABLE alert_override_detail (
|
1639
|
+
id INTEGER PRIMARY KEY,
|
1640
|
+
mail_state BOOLEAN,
|
1641
|
+
mail_by_level_id INTEGER
|
1642
|
+
CONSTRAINT fk_alert_override_contact1 REFERENCES alert_override_contact(id),
|
1643
|
+
popup_state BOOLEAN,
|
1644
|
+
beep_state BOOLEAN,
|
1645
|
+
sound_file_path_by_level VARCHAR(255),
|
1646
|
+
syslog_state BOOLEAN,
|
1647
|
+
sms_state BOOLEAN,
|
1648
|
+
sms_num_by_level_id INTEGER
|
1649
|
+
CONSTRAINT fk_alert_override_contact2 REFERENCES alert_override_contact(id),
|
1650
|
+
im_state BOOLEAN,
|
1651
|
+
im_dest_by_level_id INTEGER
|
1652
|
+
CONSTRAINT fk_alert_override_contact3 REFERENCES alert_override_contact(id),
|
1653
|
+
script_state BOOLEAN,
|
1654
|
+
script_name_by_level VARCHAR(255),
|
1655
|
+
irc_state BOOLEAN
|
1656
|
+
);
|
1657
|
+
|
1658
|
+
CREATE TABLE interface (
|
1659
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1660
|
+
name VARCHAR(10),
|
1661
|
+
link_status INTEGER,
|
1662
|
+
speed VARCHAR(50),
|
1663
|
+
type VARCHAR(50)
|
1664
|
+
);
|
1665
|
+
|
1666
|
+
CREATE TABLE node_and_interface (
|
1667
|
+
id INTEGER NOT NULL,
|
1668
|
+
node_id INTEGER
|
1669
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1670
|
+
interface_id INTEGER
|
1671
|
+
CONSTRAINT fk_interface_id REFERENCES interface(id),
|
1672
|
+
PRIMARY KEY (id, node_id, interface_id)
|
1673
|
+
);
|
1674
|
+
|
1675
|
+
CREATE TABLE node (
|
1676
|
+
id INTEGER NOT NULL PRIMARY KEY,
|
1677
|
+
uuid VARCHAR(36),
|
1678
|
+
nodetype VARCHAR(1),
|
1679
|
+
ip VARCHAR(15),
|
1680
|
+
netmask INTEGER,
|
1681
|
+
ipv6 VARCHAR(39),
|
1682
|
+
netmask6 INTEGER,
|
1683
|
+
mac VARCHAR(17),
|
1684
|
+
map INTEGER
|
1685
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1686
|
+
status INTEGER,
|
1687
|
+
avail_sev INTEGER,
|
1688
|
+
snmp_sev INTEGER,
|
1689
|
+
custom_sev INTEGER,
|
1690
|
+
trap_sev INTEGER,
|
1691
|
+
service_sev INTEGER,
|
1692
|
+
wmi_sev INTEGER,
|
1693
|
+
syslog_sev INTEGER,
|
1694
|
+
jmx_sev INTEGER,
|
1695
|
+
service_monitor_id INTEGER
|
1696
|
+
CONSTRAINT fk_service_monitor_id REFERENCES service_monitor(id),
|
1697
|
+
node_and_snmp_monitor_id INTEGER
|
1698
|
+
CONSTRAINT fk_node_and_snmp_monitor_id REFERENCES node_and_snmp_monitor(id),
|
1699
|
+
node_and_wmi_monitor_id INTEGER
|
1700
|
+
CONSTRAINT fk_node_and_wmi_monitor_id REFERENCES node_and_wmi_monitor(id),
|
1701
|
+
node_and_jmx_monitor_id INTEGER
|
1702
|
+
CONSTRAINT fk_node_and_jmx_monitor_id REFERENCES node_and_jmx_monitor(id),
|
1703
|
+
node_and_snmptrap_monitor_id INTEGER
|
1704
|
+
CONSTRAINT fk_node_and_snmptrap_monitor_id REFERENCES node_and_snmptrap_monitor(id),
|
1705
|
+
node_and_syslog_monitor_id INTEGER
|
1706
|
+
CONSTRAINT fk_node_and_syslog_monitor_id REFERENCES node_and_syslog_monitor(id),
|
1707
|
+
node_and_custom_monitor_id INTEGER
|
1708
|
+
CONSTRAINT fk_node_and_custom_monitor_id REFERENCES node_and_custom_monitor(id),
|
1709
|
+
node_and_account_id INTEGER CONSTRAINT fk_node_and_account_id REFERENCES node_and_account(id),
|
1710
|
+
node_and_group_id INTEGER CONSTRAINT fk_node_and_group_id REFERENCES node_and_group(id),
|
1711
|
+
node_and_interface_id INTEGER CONSTRAINT fk_node_and_interface_id REFERENCES node_and_interface(id),
|
1712
|
+
x INTEGER,
|
1713
|
+
y INTEGER,
|
1714
|
+
icon VARCHAR(50),
|
1715
|
+
description VARCHAR(255),
|
1716
|
+
snmp_version VARCHAR(50),
|
1717
|
+
snmp_port VARCHAR(50),
|
1718
|
+
snmp_timeout VARCHAR(50),
|
1719
|
+
snmp_retry VARCHAR(50),
|
1720
|
+
type VARCHAR(50),
|
1721
|
+
os VARCHAR(50),
|
1722
|
+
name VARCHAR(50),
|
1723
|
+
dns_name VARCHAR(50),
|
1724
|
+
dns_domain VARCHAR(50),
|
1725
|
+
netbios_name VARCHAR(50),
|
1726
|
+
netbios_domain VARCHAR(50),
|
1727
|
+
node_size INTEGER,
|
1728
|
+
map_bg_type VARCHAR(20),
|
1729
|
+
map_bg_data VARCHAR(255)
|
1730
|
+
);
|
1731
|
+
|
1732
|
+
CREATE TABLE link (
|
1733
|
+
id INTEGER PRIMARY KEY,
|
1734
|
+
link_state INTEGER,
|
1735
|
+
name VARCHAR(255),
|
1736
|
+
speed VARCHAR(50),
|
1737
|
+
node1 INTEGER
|
1738
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1739
|
+
node2 INTEGER
|
1740
|
+
CONSTRAINT fk_node_id REFERENCES node(id)
|
1741
|
+
);
|
1742
|
+
|
1743
|
+
CREATE TABLE ngroup (
|
1744
|
+
id INTEGER PRIMARY KEY,
|
1745
|
+
name VARCHAR(50)
|
1746
|
+
);
|
1747
|
+
|
1748
|
+
CREATE TABLE node_and_group (
|
1749
|
+
id INTEGER NOT NULL,
|
1750
|
+
node_id INTEGER
|
1751
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1752
|
+
group_id INTEGER
|
1753
|
+
CONSTRAINT fk_group_id REFERENCES ngroup(id),
|
1754
|
+
PRIMARY KEY (id, node_id, group_id)
|
1755
|
+
);
|
1756
|
+
|
1757
|
+
CREATE TABLE node_and_contact (
|
1758
|
+
id INTEGER NOT NULL,
|
1759
|
+
node_id INTEGER
|
1760
|
+
CONSTRAINT fk_node_id REFERENCES node(id),
|
1761
|
+
contact_id INTEGER
|
1762
|
+
CONSTRAINT fk_contact_id REFERENCES contact(id),
|
1763
|
+
PRIMARY KEY (id, node_id, contact_id)
|
1764
|
+
);
|
1765
|
+
|
1766
|
+
CREATE TABLE contact (
|
1767
|
+
id INTEGER NOT NULL,
|
1768
|
+
firstname VARCHAR(50),
|
1769
|
+
lastname VARCHAR(50),
|
1770
|
+
email VARCHAR(50),
|
1771
|
+
phone VARCHAR(20),
|
1772
|
+
mobile VARCHAR(20),
|
1773
|
+
pager VARCHAR(20),
|
1774
|
+
im VARCHAR(50),
|
1775
|
+
title VARCHAR(255),
|
1776
|
+
organization VARCHAR(255),
|
1777
|
+
location VARCHAR(255),
|
1778
|
+
note VARCHAR(255),
|
1779
|
+
PRIMARY KEY (id)
|
1780
|
+
);
|
1781
|
+
|
1782
|
+
CREATE TABLE db_schema (
|
1783
|
+
version REAL
|
1784
|
+
);
|
1785
|
+
|
1786
|
+
INSERT INTO db_schema VALUES (#{DB_SCHEMA_VERSION});
|
1787
|
+
|
1788
|
+
CREATE TABLE oid_ref (
|
1789
|
+
name VARCHAR(50) PRIMARY KEY,
|
1790
|
+
description VARCHAR(255),
|
1791
|
+
value VARCHAR(255)
|
1792
|
+
);
|
1793
|
+
|
1794
|
+
INSERT INTO oid_ref VALUES ('Cpu', 'UCD-SNMP-MIB::ssCpuUser.0+UCD-SNMP-MIB::ssCpuSystem.0', '1.3.6.1.4.1.2021.11.9.0+1.3.6.1.4.1.2021.11.10.0');
|
1795
|
+
|
1796
|
+
CREATE TABLE wmi_ref (
|
1797
|
+
name VARCHAR(50) PRIMARY KEY,
|
1798
|
+
description VARCHAR(255),
|
1799
|
+
value VARCHAR(255)
|
1800
|
+
);
|
1801
|
+
|
1802
|
+
INSERT INTO wmi_ref VALUES ('Services', 'List Win32 Started Services', 'select Name from Win32_Service where Started=true');
|
1803
|
+
INSERT INTO wmi_ref VALUES ('Processes', 'List Win32 Processes', 'select * from Win32_Process');
|
1804
|
+
INSERT INTO wmi_ref VALUES ('Accounts', 'List Win32 Accounts', 'select * from Win32_UserAccount');
|
1805
|
+
|
1806
|
+
CREATE TABLE jmx_ref (
|
1807
|
+
name VARCHAR(50) PRIMARY KEY,
|
1808
|
+
description VARCHAR(255),
|
1809
|
+
mbean VARCHAR(255),
|
1810
|
+
attribute VARCHAR(255)
|
1811
|
+
);
|
1812
|
+
INSERT INTO jmx_ref VALUES ('Memory', 'Memory MBean', 'java.lang:type=Memory', 'heap_memory_usage non_heap_memory_usage');
|
1813
|
+
INSERT INTO jmx_ref VALUES ('OS', 'OS MBean', 'java.lang:type=OperatingSystem', 'name');
|
1814
|
+
INSERT INTO jmx_ref VALUES ('Thread', 'Thread MBean', 'java.lang:type=Threading', 'thread_count');
|
1815
|
+
|
1816
|
+
CREATE TABLE syslog_ref (
|
1817
|
+
name VARCHAR(50) PRIMARY KEY,
|
1818
|
+
description VARCHAR(255),
|
1819
|
+
value VARCHAR(255)
|
1820
|
+
);
|
1821
|
+
INSERT INTO syslog_ref VALUES ('Catch all', 'Trigger on all events', '(.+)');
|
1822
|
+
|
1823
|
+
CREATE TABLE snmptrap_ref (
|
1824
|
+
name VARCHAR(50) PRIMARY KEY,
|
1825
|
+
description VARCHAR(255),
|
1826
|
+
value VARCHAR(255)
|
1827
|
+
);
|
1828
|
+
INSERT INTO snmptrap_ref VALUES ('Cold Start', '', 'snmp.0.0');
|
1829
|
+
INSERT INTO snmptrap_ref VALUES ('Warn Start', '', 'snmp.1.0');
|
1830
|
+
INSERT INTO snmptrap_ref VALUES ('Link Down', '', 'snmp.2.0');
|
1831
|
+
INSERT INTO snmptrap_ref VALUES ('Link Up', '', 'snmp.3.0');
|
1832
|
+
INSERT INTO snmptrap_ref VALUES ('Authentication failure', '', 'snmp.4.0');
|
1833
|
+
|
1834
|
+
SQL
|
1835
|
+
|
1836
|
+
$db.execute_batch(sql)
|
1837
|
+
File.chmod(0600, fic)
|
1838
|
+
rescue SQLite3::SQLException => msg
|
1839
|
+
$log.fatal("Error #{msg} #{msg.backtrace.join("\n")}, can't create DB #{fic}")
|
1840
|
+
File.delete(fic)
|
1841
|
+
exit(1)
|
1842
|
+
end
|
1843
|
+
db_read_refs()
|
1844
|
+
db_set_custom_monitor()
|
1845
|
+
end
|
1846
|
+
|
1847
|
+
#
|
1848
|
+
# return nb lign of the file db
|
1849
|
+
#
|
1850
|
+
|
1851
|
+
def nb_lign_db(fic=DEFAULTHOSTDB)
|
1852
|
+
if FileTest.exist?(fic)
|
1853
|
+
fic = File.new(fic,'r')
|
1854
|
+
lign=fic.gets
|
1855
|
+
nblign=1
|
1856
|
+
while lign
|
1857
|
+
lign=fic.gets
|
1858
|
+
nblign+=1
|
1859
|
+
end
|
1860
|
+
fic.close
|
1861
|
+
end
|
1862
|
+
return nblign
|
1863
|
+
end
|
1864
|
+
|
1865
|
+
class Listener
|
1866
|
+
include StreamListener
|
1867
|
+
|
1868
|
+
def init_service_attr()
|
1869
|
+
@protocol=nil
|
1870
|
+
@port=nil
|
1871
|
+
@service_name=nil
|
1872
|
+
@monitor=nil
|
1873
|
+
@service_sev=nil
|
1874
|
+
end
|
1875
|
+
|
1876
|
+
def init_snmp_attr()
|
1877
|
+
@snmp_state=nil
|
1878
|
+
@oid_ref=nil
|
1879
|
+
@snmp_oper=nil
|
1880
|
+
@snmp_threshold=nil
|
1881
|
+
@oid_sev=nil
|
1882
|
+
end
|
1883
|
+
|
1884
|
+
def init_wmi_attr()
|
1885
|
+
@wmi_state=nil
|
1886
|
+
@wmi_ref=nil
|
1887
|
+
@wmi_oper=nil
|
1888
|
+
@wmi_value=nil
|
1889
|
+
@wmi_sev=nil
|
1890
|
+
end
|
1891
|
+
|
1892
|
+
def init_snmptrap_attr()
|
1893
|
+
@snmptrap_state=nil
|
1894
|
+
@snmptrap_ref=nil
|
1895
|
+
@trapsev=nil
|
1896
|
+
end
|
1897
|
+
|
1898
|
+
def init_syslog_attr()
|
1899
|
+
@syslog_state=nil
|
1900
|
+
@syslog_ref=nil
|
1901
|
+
@syslog_sev=nil
|
1902
|
+
end
|
1903
|
+
|
1904
|
+
def init_attr()
|
1905
|
+
@uuid=nil
|
1906
|
+
@ip=nil
|
1907
|
+
@ipv6=nil
|
1908
|
+
@mask=nil
|
1909
|
+
@mask6=nil
|
1910
|
+
@mac=nil
|
1911
|
+
@dns_name=nil
|
1912
|
+
@netbios_name=nil
|
1913
|
+
@status=1
|
1914
|
+
@avail_sev=UNMANAGED
|
1915
|
+
@snmp_sev=UNMANAGED
|
1916
|
+
@custom_sev=UNMANAGED
|
1917
|
+
@trap_sev=UNMANAGED
|
1918
|
+
@service_sev=UNMANAGED
|
1919
|
+
@wmi_sev=UNMANAGED
|
1920
|
+
@syslog_sev=UNMANAGED
|
1921
|
+
@jmx_sev=UNMANAGED
|
1922
|
+
@x=0
|
1923
|
+
@y=0
|
1924
|
+
@icon=nil
|
1925
|
+
@description=nil
|
1926
|
+
@snmp_version=nil
|
1927
|
+
@snmp_port=nil
|
1928
|
+
@snmp_timeout=nil
|
1929
|
+
@snmp_retry=nil
|
1930
|
+
@type=nil
|
1931
|
+
@os=nil
|
1932
|
+
@map=nil
|
1933
|
+
@name=nil
|
1934
|
+
@dns_domain=nil
|
1935
|
+
@netbios_domain=nil
|
1936
|
+
@node_size=nil
|
1937
|
+
@map_bg_type=nil
|
1938
|
+
@map_bg_data=nil
|
1939
|
+
@custom_monitor=nil
|
1940
|
+
@inherit_from_global=nil
|
1941
|
+
end
|
1942
|
+
def tag_start(name, attributes)
|
1943
|
+
#puts "Start #{name}"
|
1944
|
+
#test if tag is a new node
|
1945
|
+
if name == "Host" || name == "Network"
|
1946
|
+
init_attr()
|
1947
|
+
elsif name == "services"
|
1948
|
+
@services=Hash.new
|
1949
|
+
elsif name == "service"
|
1950
|
+
init_service_attr()
|
1951
|
+
elsif name == "snmp_monitor"
|
1952
|
+
@snmp_monitor=Hash.new
|
1953
|
+
elsif name == "wmi_monitor"
|
1954
|
+
@wmi_monitor=Hash.new
|
1955
|
+
elsif name == "snmptrap_monitor"
|
1956
|
+
@snmptrap_monitor=Hash.new
|
1957
|
+
elsif name == "snmptrap"
|
1958
|
+
init_snmptrap_attr()
|
1959
|
+
elsif name == "syslog_monitor"
|
1960
|
+
@syslog_monitor=Hash.new
|
1961
|
+
elsif name == "syslog"
|
1962
|
+
init_syslog_attr()
|
1963
|
+
end
|
1964
|
+
@tag=name
|
1965
|
+
end
|
1966
|
+
def text(text)
|
1967
|
+
if @tag == "uuid"
|
1968
|
+
@uuid=text
|
1969
|
+
return
|
1970
|
+
end
|
1971
|
+
if @tag == "ip"
|
1972
|
+
@ip=text
|
1973
|
+
return
|
1974
|
+
end
|
1975
|
+
if @tag == "ipv6"
|
1976
|
+
@ipv6=text
|
1977
|
+
return
|
1978
|
+
end
|
1979
|
+
if @tag == "mask"
|
1980
|
+
@mask=text
|
1981
|
+
return
|
1982
|
+
end
|
1983
|
+
if @tag == "mask6"
|
1984
|
+
@mask6=text
|
1985
|
+
return
|
1986
|
+
end
|
1987
|
+
if @tag == "mac"
|
1988
|
+
@mac=text
|
1989
|
+
return
|
1990
|
+
end
|
1991
|
+
if @tag == "dns_name"
|
1992
|
+
@dns_name=text
|
1993
|
+
return
|
1994
|
+
end
|
1995
|
+
if @tag == "netbios_name"
|
1996
|
+
@netbios_name=text
|
1997
|
+
return
|
1998
|
+
end
|
1999
|
+
if @tag == "protocol"
|
2000
|
+
@protocol=text
|
2001
|
+
return
|
2002
|
+
end
|
2003
|
+
if @tag == "port"
|
2004
|
+
@port=text
|
2005
|
+
return
|
2006
|
+
end
|
2007
|
+
if @tag == "monitor"
|
2008
|
+
@monitor=text
|
2009
|
+
return
|
2010
|
+
end
|
2011
|
+
if @tag == "service_sev"
|
2012
|
+
@service_sev=text
|
2013
|
+
return
|
2014
|
+
end
|
2015
|
+
if @tag == "status"
|
2016
|
+
@status=text
|
2017
|
+
return
|
2018
|
+
end
|
2019
|
+
if @tag == "avail_sev"
|
2020
|
+
@avail_sev=text
|
2021
|
+
return
|
2022
|
+
end
|
2023
|
+
if @tag == "snmp_sev"
|
2024
|
+
@snmp_sev=text
|
2025
|
+
return
|
2026
|
+
end
|
2027
|
+
if @tag == "custom_sev"
|
2028
|
+
@custom_sev=text
|
2029
|
+
return
|
2030
|
+
end
|
2031
|
+
if @tag == "trap_sev"
|
2032
|
+
@trap_sev=text
|
2033
|
+
return
|
2034
|
+
end
|
2035
|
+
if @tag == "service_sev"
|
2036
|
+
@service_sev=text
|
2037
|
+
return
|
2038
|
+
end
|
2039
|
+
if @tag == "wmi_sev"
|
2040
|
+
@wmi_sev=text
|
2041
|
+
return
|
2042
|
+
end
|
2043
|
+
if @tag == "syslog_sev"
|
2044
|
+
@syslog_sev=text
|
2045
|
+
return
|
2046
|
+
end
|
2047
|
+
if @tag == "jmx_sev"
|
2048
|
+
@jmx_sev=text
|
2049
|
+
return
|
2050
|
+
end
|
2051
|
+
if @tag == "x"
|
2052
|
+
@x=text
|
2053
|
+
return
|
2054
|
+
end
|
2055
|
+
if @tag == "y"
|
2056
|
+
@y=text
|
2057
|
+
return
|
2058
|
+
end
|
2059
|
+
if @tag == "icon"
|
2060
|
+
@icon=text
|
2061
|
+
return
|
2062
|
+
end
|
2063
|
+
if @tag == "description"
|
2064
|
+
@description=text
|
2065
|
+
return
|
2066
|
+
end
|
2067
|
+
if @tag == "snmp_version"
|
2068
|
+
@snmp_version=text
|
2069
|
+
return
|
2070
|
+
end
|
2071
|
+
if @tag == "snmp_port"
|
2072
|
+
@snmp_port=text
|
2073
|
+
return
|
2074
|
+
end
|
2075
|
+
if @tag == "snmp_timeout"
|
2076
|
+
@snmp_timeout=text
|
2077
|
+
return
|
2078
|
+
end
|
2079
|
+
if @tag == "snmp_retry"
|
2080
|
+
@snmp_retry=text
|
2081
|
+
return
|
2082
|
+
end
|
2083
|
+
if @tag == "type"
|
2084
|
+
@type=text
|
2085
|
+
return
|
2086
|
+
end
|
2087
|
+
if @tag == "os"
|
2088
|
+
@os=text
|
2089
|
+
return
|
2090
|
+
end
|
2091
|
+
if @tag == "map"
|
2092
|
+
@map=text
|
2093
|
+
return
|
2094
|
+
end
|
2095
|
+
if @tag == "name"
|
2096
|
+
@name=text
|
2097
|
+
return
|
2098
|
+
end
|
2099
|
+
if @tag == "dns_domain"
|
2100
|
+
@dns_domain=text
|
2101
|
+
return
|
2102
|
+
end
|
2103
|
+
if @tag == "netbios_domain"
|
2104
|
+
@netbios_domain=text
|
2105
|
+
return
|
2106
|
+
end
|
2107
|
+
if @tag == "node_size"
|
2108
|
+
@node_size=text
|
2109
|
+
return
|
2110
|
+
end
|
2111
|
+
if @tag == "map_bg_type"
|
2112
|
+
@map_bg_type=text
|
2113
|
+
return
|
2114
|
+
end
|
2115
|
+
if @tag == "map_bg_data"
|
2116
|
+
if @map_bg_type == "color"
|
2117
|
+
@map_bg_data=text.split
|
2118
|
+
else
|
2119
|
+
@map_bg_data=text
|
2120
|
+
end
|
2121
|
+
return
|
2122
|
+
end
|
2123
|
+
if @tag == "inherit_from_global"
|
2124
|
+
@inherit_from_global=text
|
2125
|
+
return
|
2126
|
+
end
|
2127
|
+
if @tag == "snmp_state"
|
2128
|
+
@snmp_state=text
|
2129
|
+
return
|
2130
|
+
end
|
2131
|
+
if @tag == "oid_ref"
|
2132
|
+
@oid_ref=text
|
2133
|
+
return
|
2134
|
+
end
|
2135
|
+
if @tag == "snmp_oper"
|
2136
|
+
@snmp_oper=text
|
2137
|
+
return
|
2138
|
+
end
|
2139
|
+
if @tag == "snmp_threshold"
|
2140
|
+
@snmp_threshold=text
|
2141
|
+
return
|
2142
|
+
end
|
2143
|
+
if @tag == "oid_sev"
|
2144
|
+
@oid_sev=text
|
2145
|
+
return
|
2146
|
+
end
|
2147
|
+
if @tag == "wmi_state"
|
2148
|
+
@wmi_state=text
|
2149
|
+
return
|
2150
|
+
end
|
2151
|
+
if @tag == "wmi_ref"
|
2152
|
+
@wmi_ref=text
|
2153
|
+
return
|
2154
|
+
end
|
2155
|
+
if @tag == "wmi_oper"
|
2156
|
+
@wmi_oper=text
|
2157
|
+
return
|
2158
|
+
end
|
2159
|
+
if @tag == "wmi_value"
|
2160
|
+
@wmi_value=text
|
2161
|
+
return
|
2162
|
+
end
|
2163
|
+
if @tag == "wmi_sev"
|
2164
|
+
@wmi_sev=text
|
2165
|
+
return
|
2166
|
+
end
|
2167
|
+
if @tag == "snmptrap_state"
|
2168
|
+
@snmptrap_state=text
|
2169
|
+
return
|
2170
|
+
end
|
2171
|
+
if @tag == "snmptrap_ref"
|
2172
|
+
@snmptrap_ref=text
|
2173
|
+
return
|
2174
|
+
end
|
2175
|
+
if @tag == "trapsev"
|
2176
|
+
@trapsev=text
|
2177
|
+
return
|
2178
|
+
end
|
2179
|
+
if @tag == "custom_monitor"
|
2180
|
+
@custom_monitor=text
|
2181
|
+
return
|
2182
|
+
end
|
2183
|
+
if @tag == "syslog_state"
|
2184
|
+
@syslog_state=text
|
2185
|
+
return
|
2186
|
+
end
|
2187
|
+
if @tag == "syslog_ref"
|
2188
|
+
@syslog_ref=text
|
2189
|
+
return
|
2190
|
+
end
|
2191
|
+
if @tag == "syslog_sev"
|
2192
|
+
@syslog_sev=text
|
2193
|
+
return
|
2194
|
+
end
|
2195
|
+
if text.chomp != ""
|
2196
|
+
puts "Unknown xml tag #{@tag} value #{text.chomp}"
|
2197
|
+
end
|
2198
|
+
end
|
2199
|
+
def tag_end(name)
|
2200
|
+
# puts "End #{name}"
|
2201
|
+
|
2202
|
+
if name == "Host"
|
2203
|
+
#puts @ip, @mask.to_i, @map, @mac, @dns_name, @netbios_name, @port, @status.to_i, @x.to_i, @y.to_i, @icon, @description, @type, @os
|
2204
|
+
nnode=Host.new(@ip, @mask.to_i, @ipv6, @mask6.to_i, @map, @mac, @dns_name, @netbios_name, @services, @status.to_i, @x.to_i, @y.to_i, @icon, @description, @type, @os, @uuid)
|
2205
|
+
if @name != Node::NONAME_PROPERTY
|
2206
|
+
nnod.name = @name
|
2207
|
+
end
|
2208
|
+
|
2209
|
+
nnode.set_severities(@avail_sev.to_i, @snmp_sev.to_i, @custom_sev.to_i, @trap_sev.to_i, @service_sev.to_i, @wmi_sev.to_i, @syslog_sev.to_i, @jmx_sev.to_i)
|
2210
|
+
nnode.snmp_version=@snmp_version
|
2211
|
+
nnode.snmp_port=@snmp_port
|
2212
|
+
nnode.snmp_timeout=@snmp_timeout
|
2213
|
+
nnode.snmp_retry=@snmp_retry
|
2214
|
+
|
2215
|
+
nnode.reload
|
2216
|
+
$host[@ip]=nnode
|
2217
|
+
if defined?(@snmp_monitor) && (@snmp_monitor != nil)
|
2218
|
+
@snmp_monitor.each do |mon,tab|
|
2219
|
+
oidref, state, oper, threshold, sev = mon, tab[0], tab[1], tab[2], tab[3]
|
2220
|
+
$host[@ip].add_snmp_monitoring(state.to_i(), oidref, oper.to_i(), threshold, sev.to_i())
|
2221
|
+
end
|
2222
|
+
end
|
2223
|
+
|
2224
|
+
if defined?(@wmi_monitor) && (@wmi_monitor != nil)
|
2225
|
+
@wmi_monitor.each do |mon,tab|
|
2226
|
+
wmiref, state, oper, val, sev = mon, tab[0], tab[1], tab[2], tab[3]
|
2227
|
+
$host[@ip].add_wmi_monitoring(state.to_i(), wmiref, oper.to_i(), val, sev.to_i())
|
2228
|
+
end
|
2229
|
+
end
|
2230
|
+
|
2231
|
+
if defined?(@snmptrap_monitor) && (@snmptrap_monitor != nil)
|
2232
|
+
@snmptrap_monitor.each do |mon,tab|
|
2233
|
+
snmptrap_ref, state, trapsev = mon, tab[0], tab[1]
|
2234
|
+
$host[@ip].add_snmptrap_monitoring(state.to_i(), snmptrap_ref, trapsev.to_i())
|
2235
|
+
end
|
2236
|
+
end
|
2237
|
+
if defined?(@custom_monitor) && (@custom_monitor != nil)
|
2238
|
+
@custom_monitor.each do |name,tab|
|
2239
|
+
state, param, sev = tab[0], tab[1], tab[2]
|
2240
|
+
$host[@ip].add_custom_monitoring(state.to_i(), name, param, sev.to_i())
|
2241
|
+
end
|
2242
|
+
end
|
2243
|
+
if defined?(@syslog_monitor) && (@syslog_monitor != nil)
|
2244
|
+
@syslog_monitor.each do |ref,tab|
|
2245
|
+
state, sev = tab[0], tab[1]
|
2246
|
+
$host[@ip].add_syslog_monitoring(state.to_i(), ref, sev.to_i())
|
2247
|
+
end
|
2248
|
+
end
|
2249
|
+
#we update network host list
|
2250
|
+
#we assume here networks are already loaded
|
2251
|
+
$network[@map].add_host(nnode)
|
2252
|
+
$network[@map].update_status()
|
2253
|
+
return
|
2254
|
+
end
|
2255
|
+
if name == "Network"
|
2256
|
+
#puts @ip, @mask
|
2257
|
+
#we assume here first network loaded is root network ROOTMAPADDR
|
2258
|
+
if @ip==ROOTMAPADDR && $network != nil && $network[@ip]!=nil
|
2259
|
+
#we already have a root map network node
|
2260
|
+
else
|
2261
|
+
nnode=Network.new(@ip, @mask.to_i, @ipv6, @mask6.to_i, @map, @services, @status.to_i, @x.to_i, @y.to_i, @icon, @description, @type, @os, @name, @dns_domain, @netbios_domain, @uuid)
|
2262
|
+
nnode.snmp_version=@snmp_version
|
2263
|
+
nnode.snmp_port=@snmp_port
|
2264
|
+
nnode.snmp_timeout=@snmp_timeout
|
2265
|
+
nnode.snmp_retry=@snmp_retry
|
2266
|
+
|
2267
|
+
if @node_size != nil && isInteger(@node_size)
|
2268
|
+
nnode.node_size=@node_size.to_i()
|
2269
|
+
end
|
2270
|
+
if @map_bg_type != ""
|
2271
|
+
nnode.map_bg_type=@map_bg_type
|
2272
|
+
nnode.map_bg_data=@map_bg_data
|
2273
|
+
end
|
2274
|
+
nnode.set_inherit_conf(i2b(@inherit_from_global))
|
2275
|
+
nnode.reload
|
2276
|
+
$network[@ip]=nnode
|
2277
|
+
end
|
2278
|
+
return
|
2279
|
+
end
|
2280
|
+
if name == "services"
|
2281
|
+
init_service_attr()
|
2282
|
+
end
|
2283
|
+
if name == "service"
|
2284
|
+
@service_name="?" unless @service_name != nil
|
2285
|
+
@monitor=1 unless @monitor != nil
|
2286
|
+
@services["#{@protocol}/#{@port}"] = Service.new(@protocol, @port, @service_name, @monitor, @service_sev) unless @services == nil
|
2287
|
+
end
|
2288
|
+
#for each snmp_monitor under block
|
2289
|
+
if name == "snmp"
|
2290
|
+
if defined?(@oid_ref) && (@oid_ref != nil)
|
2291
|
+
@snmp_monitor["#{@oid_ref}"]=[@snmp_state, @snmp_oper, @snmp_threshold, @oid_sev]
|
2292
|
+
end
|
2293
|
+
init_snmp_attr()
|
2294
|
+
end
|
2295
|
+
#for each wmi_monitor under block
|
2296
|
+
if name == "wmi"
|
2297
|
+
if defined?(@wmi_ref) && (@wmi_ref != nil)
|
2298
|
+
@wmi_monitor["#{@wmi_ref}"]=[@wmi_state, @wmi_oper, @wmi_value, @wmi_sev]
|
2299
|
+
end
|
2300
|
+
init_wmi_attr()
|
2301
|
+
end
|
2302
|
+
|
2303
|
+
#for each snmptrap_monitor under block
|
2304
|
+
if name == "snmptrap"
|
2305
|
+
if defined?(@snmptrap_ref) && (@snmptrap_ref != nil)
|
2306
|
+
@snmptrap_monitor["#{@snmptrap_ref}"]=[@snmptrap_state, @trapsev]
|
2307
|
+
end
|
2308
|
+
init_snmptrap_attr()
|
2309
|
+
end
|
2310
|
+
#for each syslog_monitor under block
|
2311
|
+
if name == "syslog"
|
2312
|
+
if defined?(@syslog_ref) && (@syslog_ref != nil)
|
2313
|
+
@syslog_monitor["#{@syslog_ref}"]=[@syslog_state, @syslog_sev]
|
2314
|
+
end
|
2315
|
+
init_syslog_attr()
|
2316
|
+
end
|
2317
|
+
end
|
2318
|
+
end
|
2319
|
+
|
2320
|
+
def create_root_network()
|
2321
|
+
$log.info("Creating root network")
|
2322
|
+
if !exist_network(ROOTMAPADDR)
|
2323
|
+
$network[ROOTMAPADDR]=Network.new(ROOTMAPADDR)
|
2324
|
+
$network[ROOTMAPADDR].name="Root"
|
2325
|
+
end
|
2326
|
+
end
|
2327
|
+
|
2328
|
+
def read_xml(fic=DEFAULTHOSTDB)
|
2329
|
+
set_busy()
|
2330
|
+
#we do not check here if the xml file is valid
|
2331
|
+
$log.info("Loading nodes")
|
2332
|
+
listener = Listener.new
|
2333
|
+
begin
|
2334
|
+
file=File.new(fic)
|
2335
|
+
rescue
|
2336
|
+
$log.error("File #{fic} not found")
|
2337
|
+
create_root_network()
|
2338
|
+
return
|
2339
|
+
end
|
2340
|
+
parser = Parsers::StreamParser.new(file, listener)
|
2341
|
+
parser.parse()
|
2342
|
+
$log.info("Node database rebuilt")
|
2343
|
+
#here we assume we have loaded all networks
|
2344
|
+
#we update network host list where in fact host is a network in network
|
2345
|
+
$network.each_key {|ip|
|
2346
|
+
host=$network[ip]
|
2347
|
+
$network[host.map].add_network(host) unless host.map == nil
|
2348
|
+
}
|
2349
|
+
set_unbusy()
|
2350
|
+
end
|
2351
|
+
|
2352
|
+
def network_to_xml(ip)
|
2353
|
+
doc = Document.new
|
2354
|
+
doc.add_element("Network")
|
2355
|
+
|
2356
|
+
i=1
|
2357
|
+
doc.root.add_element("uuid")
|
2358
|
+
doc.root.elements[i].text = $network[ip].uuid
|
2359
|
+
i+=1
|
2360
|
+
doc.root.add_element("ip")
|
2361
|
+
doc.root.elements[i].text = $network[ip].ip
|
2362
|
+
i+=1
|
2363
|
+
doc.root.add_element("mask")
|
2364
|
+
doc.root.elements[i].text = $network[ip].netmask
|
2365
|
+
i+=1
|
2366
|
+
doc.root.add_element("map")
|
2367
|
+
doc.root.elements[i].text = $network[ip].map
|
2368
|
+
i+=1
|
2369
|
+
doc.root.add_element("services")
|
2370
|
+
services=doc.root.elements[i]
|
2371
|
+
$network[ip].service.each_value {|serv|
|
2372
|
+
service=Element.new("service")
|
2373
|
+
service.add_element("protocol")
|
2374
|
+
service.elements["protocol"].text = serv.protocol
|
2375
|
+
service.add_element("port")
|
2376
|
+
service.elements["port"].text = serv.port
|
2377
|
+
service.add_element("name")
|
2378
|
+
service.elements["name"].text = serv.name
|
2379
|
+
service.add_element("monitor")
|
2380
|
+
service.elements["monitor"].text = serv.monitor
|
2381
|
+
services.elements << service
|
2382
|
+
}
|
2383
|
+
i+=1
|
2384
|
+
|
2385
|
+
doc.root.add_element("status")
|
2386
|
+
doc.root.elements[i].text = $network[ip].status
|
2387
|
+
i+=1
|
2388
|
+
|
2389
|
+
doc.root.add_element("x")
|
2390
|
+
doc.root.elements[i].text = $network[ip].x
|
2391
|
+
i+=1
|
2392
|
+
|
2393
|
+
doc.root.add_element("y")
|
2394
|
+
doc.root.elements[i].text = $network[ip].y
|
2395
|
+
i+=1
|
2396
|
+
|
2397
|
+
doc.root.add_element("icon")
|
2398
|
+
doc.root.elements[i].text = $network[ip].icon
|
2399
|
+
i+=1
|
2400
|
+
|
2401
|
+
doc.root.add_element("description")
|
2402
|
+
doc.root.elements[i].text = $network[ip].description
|
2403
|
+
i+=1
|
2404
|
+
|
2405
|
+
doc.root.add_element("snmp_version")
|
2406
|
+
doc.root.elements[i].text = $network[ip].snmp_version
|
2407
|
+
i+=1
|
2408
|
+
|
2409
|
+
doc.root.add_element("snmp_port")
|
2410
|
+
doc.root.elements[i].text = $network[ip].snmp_port
|
2411
|
+
i+=1
|
2412
|
+
|
2413
|
+
doc.root.add_element("snmp_port")
|
2414
|
+
doc.root.elements[i].text = $network[ip].snmp_port
|
2415
|
+
i+=1
|
2416
|
+
|
2417
|
+
doc.root.add_element("snmp_retry")
|
2418
|
+
doc.root.elements[i].text = $network[ip].snmp_retry
|
2419
|
+
i+=1
|
2420
|
+
|
2421
|
+
doc.root.add_element("type")
|
2422
|
+
doc.root.elements[i].text = $network[ip].type
|
2423
|
+
i+=1
|
2424
|
+
|
2425
|
+
doc.root.add_element("os")
|
2426
|
+
doc.root.elements[i].text = $network[ip].os
|
2427
|
+
i+=1
|
2428
|
+
|
2429
|
+
doc.root.add_element("name")
|
2430
|
+
doc.root.elements[i].text = $network[ip].name
|
2431
|
+
i+=1
|
2432
|
+
|
2433
|
+
doc.root.add_element("dns_domain")
|
2434
|
+
doc.root.elements[i].text = $network[ip].dns_domain
|
2435
|
+
i+=1
|
2436
|
+
|
2437
|
+
doc.root.add_element("netbios_domain")
|
2438
|
+
doc.root.elements[i].text = $network[ip].netbios_domain
|
2439
|
+
i+=1
|
2440
|
+
|
2441
|
+
doc.root.add_element("node_size")
|
2442
|
+
doc.root.elements[i].text = $network[ip].node_size
|
2443
|
+
i+=1
|
2444
|
+
|
2445
|
+
doc.root.add_element("map_bg_type")
|
2446
|
+
doc.root.elements[i].text = $network[ip].map_bg_type
|
2447
|
+
i+=1
|
2448
|
+
|
2449
|
+
doc.root.add_element("map_bg_data")
|
2450
|
+
if $network[ip].map_bg_type == "color"
|
2451
|
+
doc.root.elements[i].text = $network[ip].map_bg_data.join(" ")
|
2452
|
+
else
|
2453
|
+
doc.root.elements[i].text = $network[ip].map_bg_data
|
2454
|
+
end
|
2455
|
+
i+=1
|
2456
|
+
|
2457
|
+
doc.root.add_element("inherit_from_global")
|
2458
|
+
doc.root.elements[i].text = b2i($network[ip].inherit_from_global)
|
2459
|
+
i+=1
|
2460
|
+
|
2461
|
+
return doc
|
2462
|
+
end
|
2463
|
+
|
2464
|
+
def write_xml(fic_name="#{CONF_DIR}/#{DEFAULTHOSTDBFILE}")
|
2465
|
+
set_busy()
|
2466
|
+
$log.info("Saving nodes to XML file #{fic_name}")
|
2467
|
+
begin
|
2468
|
+
tf=Tempfile.new(File.basename(fic_name))
|
2469
|
+
rescue Exception=>msg
|
2470
|
+
$log.error("Error in write_xml when tried to generate a temp file name")
|
2471
|
+
return
|
2472
|
+
end
|
2473
|
+
|
2474
|
+
|
2475
|
+
#we write first of all the root of all network = ROOTMAPADDR
|
2476
|
+
tf.puts(network_to_xml(ROOTMAPADDR))
|
2477
|
+
|
2478
|
+
#1st: we write the node network
|
2479
|
+
$network.each_key {|ip|
|
2480
|
+
if ip != ROOTMAPADDR
|
2481
|
+
tf.puts(network_to_xml(ip))
|
2482
|
+
end
|
2483
|
+
}
|
2484
|
+
|
2485
|
+
#2nd: we write the node host
|
2486
|
+
$host.each_key {|ip|
|
2487
|
+
doc = Document.new
|
2488
|
+
doc.add_element("Host")
|
2489
|
+
|
2490
|
+
i=1
|
2491
|
+
doc.root.add_element("uuid")
|
2492
|
+
doc.root.elements[i].text = $host[ip].uuid
|
2493
|
+
i+=1
|
2494
|
+
doc.root.add_element("ip")
|
2495
|
+
doc.root.elements[i].text = $host[ip].ip
|
2496
|
+
i+=1
|
2497
|
+
doc.root.add_element("mask")
|
2498
|
+
doc.root.elements[i].text = $host[ip].netmask
|
2499
|
+
i+=1
|
2500
|
+
doc.root.add_element("map")
|
2501
|
+
doc.root.elements[i].text = $host[ip].map
|
2502
|
+
i+=1
|
2503
|
+
doc.root.add_element("mac")
|
2504
|
+
doc.root.elements[i].text = $host[ip].mac
|
2505
|
+
i+=1
|
2506
|
+
doc.root.add_element("dns_name")
|
2507
|
+
doc.root.elements[i].text = $host[ip].dns_name
|
2508
|
+
i+=1
|
2509
|
+
doc.root.add_element("netbios_name")
|
2510
|
+
doc.root.elements[i].text = $host[ip].netbios_name
|
2511
|
+
i+=1
|
2512
|
+
doc.root.add_element("services")
|
2513
|
+
services=doc.root.elements[i]
|
2514
|
+
$host[ip].service.each_value {|serv|
|
2515
|
+
service=Element.new("service")
|
2516
|
+
service.add_element("protocol")
|
2517
|
+
service.elements["protocol"].text = serv.protocol
|
2518
|
+
service.add_element("port")
|
2519
|
+
service.elements["port"].text = serv.port
|
2520
|
+
service.add_element("name")
|
2521
|
+
service.elements["name"].text = serv.name
|
2522
|
+
service.add_element("monitor")
|
2523
|
+
service.elements["monitor"].text = serv.monitor
|
2524
|
+
services.elements << service
|
2525
|
+
}
|
2526
|
+
i+=1
|
2527
|
+
doc.root.add_element("avail_sev")
|
2528
|
+
doc.root.elements[i].text = $host[ip].avail_sev
|
2529
|
+
i+=1
|
2530
|
+
doc.root.add_element("snmp_sev")
|
2531
|
+
doc.root.elements[i].text = $host[ip].snmp_sev
|
2532
|
+
i+=1
|
2533
|
+
doc.root.add_element("custom_sev")
|
2534
|
+
doc.root.elements[i].text = $host[ip].custom_sev
|
2535
|
+
i+=1
|
2536
|
+
doc.root.add_element("trap_sev")
|
2537
|
+
doc.root.elements[i].text = $host[ip].trap_sev
|
2538
|
+
i+=1
|
2539
|
+
doc.root.add_element("service_sev")
|
2540
|
+
doc.root.elements[i].text = $host[ip].service_sev
|
2541
|
+
i+=1
|
2542
|
+
doc.root.add_element("wmi_sev")
|
2543
|
+
doc.root.elements[i].text = $host[ip].wmi_sev
|
2544
|
+
i+=1
|
2545
|
+
doc.root.add_element("syslog_sev")
|
2546
|
+
doc.root.elements[i].text = $host[ip].syslog_sev
|
2547
|
+
i+=1
|
2548
|
+
doc.root.add_element("jmx_sev")
|
2549
|
+
doc.root.elements[i].text = $host[ip].jmx_sev
|
2550
|
+
i+=1
|
2551
|
+
doc.root.add_element("x")
|
2552
|
+
doc.root.elements[i].text = $host[ip].x
|
2553
|
+
i+=1
|
2554
|
+
doc.root.add_element("y")
|
2555
|
+
doc.root.elements[i].text = $host[ip].y
|
2556
|
+
i+=1
|
2557
|
+
doc.root.add_element("icon")
|
2558
|
+
doc.root.elements[i].text = $host[ip].icon
|
2559
|
+
i+=1
|
2560
|
+
doc.root.add_element("description")
|
2561
|
+
doc.root.elements[i].text = $host[ip].description
|
2562
|
+
i+=1
|
2563
|
+
doc.root.add_element("snmp_version")
|
2564
|
+
doc.root.elements[i].text = $host[ip].snmp_version
|
2565
|
+
i+=1
|
2566
|
+
doc.root.add_element("snmp_port")
|
2567
|
+
doc.root.elements[i].text = $host[ip].snmp_port
|
2568
|
+
i+=1
|
2569
|
+
doc.root.add_element("snmp_timeout")
|
2570
|
+
doc.root.elements[i].text = $host[ip].snmp_timeout
|
2571
|
+
i+=1
|
2572
|
+
doc.root.add_element("snmp_retry")
|
2573
|
+
doc.root.elements[i].text = $host[ip].snmp_retry
|
2574
|
+
i+=1
|
2575
|
+
doc.root.add_element("type")
|
2576
|
+
doc.root.elements[i].text = $host[ip].type
|
2577
|
+
i+=1
|
2578
|
+
doc.root.add_element("os")
|
2579
|
+
doc.root.elements[i].text = $host[ip].os
|
2580
|
+
i+=1
|
2581
|
+
|
2582
|
+
doc.root.add_element("snmp_monitor")
|
2583
|
+
snmp_monitor=doc.root.elements[i]
|
2584
|
+
$host[ip].snmp_monitoring.each_value {|mon|
|
2585
|
+
snmp=Element.new("snmp")
|
2586
|
+
snmp.add_element("snmp_state")
|
2587
|
+
snmp.elements["snmp_state"].text = mon.get_state()
|
2588
|
+
snmp.add_element("oid_ref")
|
2589
|
+
snmp.elements["oid_ref"].text = mon.oidref
|
2590
|
+
snmp.add_element("snmp_oper")
|
2591
|
+
snmp.elements["snmp_oper"].text = SnmpMonitoring::TESTOP.index(mon.oper)
|
2592
|
+
snmp.add_element("snmp_threshold")
|
2593
|
+
snmp.elements["snmp_threshold"].text = mon.threshold.to_s()
|
2594
|
+
snmp.add_element("oid_sev")
|
2595
|
+
snmp.elements["oid_sev"].text = mon.raw_severity
|
2596
|
+
snmp_monitor.elements << snmp
|
2597
|
+
}
|
2598
|
+
i+=1
|
2599
|
+
|
2600
|
+
doc.root.add_element("wmi_monitor")
|
2601
|
+
wmi_monitor=doc.root.elements[i]
|
2602
|
+
$host[ip].wmi_monitoring.each_value {|mon|
|
2603
|
+
wmi=Element.new("wmi")
|
2604
|
+
wmi.add_element("wmi_state")
|
2605
|
+
wmi.elements["wmi_state"].text = mon.get_state()
|
2606
|
+
wmi.add_element("wmi_ref")
|
2607
|
+
wmi.elements["wmi_ref"].text = mon.wmiref
|
2608
|
+
wmi.add_element("wmi_oper")
|
2609
|
+
wmi.elements["wmi_oper"].text = WmiMonitoring::TESTOP.index(mon.oper)
|
2610
|
+
wmi.add_element("wmi_value")
|
2611
|
+
wmi.elements["wmi_value"].text = mon.value.to_s()
|
2612
|
+
wmi.add_element("wmi_sev")
|
2613
|
+
wmi.elements["wmi_sev"].text = mon.raw_severity
|
2614
|
+
wmi_monitor.elements << wmi
|
2615
|
+
}
|
2616
|
+
i+=1
|
2617
|
+
|
2618
|
+
doc.root.add_element("snmptrap_monitor")
|
2619
|
+
snmptrap_monitor=doc.root.elements[i]
|
2620
|
+
$host[ip].snmptrap_monitoring.each_value {|mon|
|
2621
|
+
snmptrap=Element.new("snmptrap")
|
2622
|
+
snmptrap.add_element("snmptrap_state")
|
2623
|
+
snmptrap.elements["snmptrap_state"].text = mon.get_state()
|
2624
|
+
snmptrap.add_element("snmptrap_ref")
|
2625
|
+
snmptrap.elements["snmptrap_ref"].text = mon.get_snmptrap_ref()
|
2626
|
+
snmptrap.add_element("trapsev")
|
2627
|
+
snmptrap.elements["trapsev"].text = mon.raw_severity
|
2628
|
+
snmptrap_monitor.elements << snmptrap
|
2629
|
+
}
|
2630
|
+
i+=1
|
2631
|
+
|
2632
|
+
doc.root.add_element("custom_monitor")
|
2633
|
+
custom_monitor=doc.root.elements[i]
|
2634
|
+
$host[ip].custom_monitoring.each_value {|mon|
|
2635
|
+
custom=Element.new("custom")
|
2636
|
+
custom.add_element("custom_state")
|
2637
|
+
custom.elements["custom_state"].text = mon.get_state()
|
2638
|
+
custom.add_element("custom_name")
|
2639
|
+
custom.elements["custom_name"].text = mon.get_name()
|
2640
|
+
custom.add_element("custom_param")
|
2641
|
+
custom.elements["custom_param"].text = mon.get_param()
|
2642
|
+
custom.add_element("custom_sev")
|
2643
|
+
custom.elements["custom_sev"].text = mon.raw_severity
|
2644
|
+
custom.elements << custom
|
2645
|
+
}
|
2646
|
+
i+=1
|
2647
|
+
|
2648
|
+
doc.root.add_element("syslog_monitor")
|
2649
|
+
syslog_monitor=doc.root.elements[i]
|
2650
|
+
$host[ip].syslog_monitoring.each_value {|mon|
|
2651
|
+
syslog=Element.new("syslog")
|
2652
|
+
syslog.add_element("syslog_state")
|
2653
|
+
syslog.elements["syslog_state"].text = mon.get_state()
|
2654
|
+
syslog.add_element("syslog_ref")
|
2655
|
+
syslog.elements["syslog_ref"].text = mon.get_syslog_ref()
|
2656
|
+
syslog.add_element("syslog_sev")
|
2657
|
+
syslog.elements["syslog_sev"].text = mon.raw_severity
|
2658
|
+
syslog_monitor.elements << syslog
|
2659
|
+
}
|
2660
|
+
i+=1
|
2661
|
+
|
2662
|
+
tf.puts(doc)
|
2663
|
+
}
|
2664
|
+
#all seems good
|
2665
|
+
tf.close
|
2666
|
+
FileUtils.move(tf.path, fic_name)
|
2667
|
+
set_unbusy()
|
2668
|
+
end
|