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.

Files changed (140) hide show
  1. data/LICENSE +459 -0
  2. data/README +29 -0
  3. data/bin/gnms +11 -0
  4. data/gnms.gemspec +70 -0
  5. data/lib/cmd_parse.rb +747 -0
  6. data/lib/config_global.rb +414 -0
  7. data/lib/contact.rb +171 -0
  8. data/lib/external/crypt/blowfish-tables.rb +190 -0
  9. data/lib/external/crypt/blowfish.rb +110 -0
  10. data/lib/external/crypt/cbc.rb +123 -0
  11. data/lib/external/crypt/stringxor.rb +27 -0
  12. data/lib/external/fog.rb +41 -0
  13. data/lib/external/jjmx.rb +45 -0
  14. data/lib/external/sms.rb +282 -0
  15. data/lib/external/xmpp4r-simple.rb +497 -0
  16. data/lib/format.rb +85 -0
  17. data/lib/gnms.rb +329 -0
  18. data/lib/gui/about_window.rb +177 -0
  19. data/lib/gui/adddelnode.rb +799 -0
  20. data/lib/gui/base_window.rb +789 -0
  21. data/lib/gui/canvas_map.rb +498 -0
  22. data/lib/gui/charts/gruff.rb +51 -0
  23. data/lib/gui/color_macro.rb +145 -0
  24. data/lib/gui/config_window.rb +2151 -0
  25. data/lib/gui/custom_plugin_window.rb +90 -0
  26. data/lib/gui/debug_window.rb +46 -0
  27. data/lib/gui/event_window.rb +469 -0
  28. data/lib/gui/find_node_window.rb +438 -0
  29. data/lib/gui/help_window.rb +47 -0
  30. data/lib/gui/ipcalculator.rb +147 -0
  31. data/lib/gui/jmx_ref_window.rb +309 -0
  32. data/lib/gui/link_view.rb +46 -0
  33. data/lib/gui/mib_browser.rb +585 -0
  34. data/lib/gui/node_host_property.rb +3712 -0
  35. data/lib/gui/node_host_view.rb +270 -0
  36. data/lib/gui/node_network_property.rb +1059 -0
  37. data/lib/gui/node_network_view.rb +186 -0
  38. data/lib/gui/node_view.rb +672 -0
  39. data/lib/gui/oid_ref_window.rb +288 -0
  40. data/lib/gui/snmptrap_ref_window.rb +288 -0
  41. data/lib/gui/sub/account_frame.rb +196 -0
  42. data/lib/gui/sub/contact_frame.rb +519 -0
  43. data/lib/gui/syslog_ref_window.rb +288 -0
  44. data/lib/gui/treenode_window.rb +320 -0
  45. data/lib/gui/update_window.rb +124 -0
  46. data/lib/gui/widgets.rb +169 -0
  47. data/lib/gui/wmi_ref_window.rb +286 -0
  48. data/lib/interface.rb +16 -0
  49. data/lib/ipcalc.rb +266 -0
  50. data/lib/link.rb +45 -0
  51. data/lib/main.rb +1091 -0
  52. data/lib/monitor/client/custom/custom_monitoring.rb +40 -0
  53. data/lib/monitor/client/jmx/jmx_attr_monitoring.rb +36 -0
  54. data/lib/monitor/client/jmx/jmx_monitoring.rb +83 -0
  55. data/lib/monitor/client/jmx/jmx_ref.rb +114 -0
  56. data/lib/monitor/client/snmp/mibs/SNMPv2-MIB.txt +854 -0
  57. data/lib/monitor/client/snmp/mibs/SNMPv2-SMI.txt +344 -0
  58. data/lib/monitor/client/snmp/oid_ref.rb +141 -0
  59. data/lib/monitor/client/snmp/snmp.rb +178 -0
  60. data/lib/monitor/client/snmp/snmp_monitoring.rb +58 -0
  61. data/lib/monitor/client/wmi/wmi.rb +139 -0
  62. data/lib/monitor/client/wmi/wmi_monitoring.rb +60 -0
  63. data/lib/monitor/client/wmi/wmi_ref.rb +141 -0
  64. data/lib/monitor/custom_plugin.rb +50 -0
  65. data/lib/monitor/server/msg_buffer.rb +39 -0
  66. data/lib/monitor/server/snmp/snmptrap_analyzer.rb +81 -0
  67. data/lib/monitor/server/snmp/snmptrap_capture.rb +26 -0
  68. data/lib/monitor/server/snmp/snmptrap_monitoring.rb +32 -0
  69. data/lib/monitor/server/snmp/snmptrap_ref.rb +135 -0
  70. data/lib/monitor/server/snmp/snmptrap_server.rb +50 -0
  71. data/lib/monitor/server/syslog/syslog_analyzer.rb +141 -0
  72. data/lib/monitor/server/syslog/syslog_capture.rb +28 -0
  73. data/lib/monitor/server/syslog/syslog_monitoring.rb +32 -0
  74. data/lib/monitor/server/syslog/syslog_ref.rb +136 -0
  75. data/lib/monitor/server/syslog/syslog_server.rb +43 -0
  76. data/lib/node.rb +1020 -0
  77. data/lib/node_db.rb +2668 -0
  78. data/lib/node_host.rb +215 -0
  79. data/lib/node_listener.rb +639 -0
  80. data/lib/node_network.rb +269 -0
  81. data/lib/node_property.rb +39 -0
  82. data/lib/notify/alarm.rb +247 -0
  83. data/lib/notify/irc_bot.rb +167 -0
  84. data/lib/notify/xmpp_bot.rb +107 -0
  85. data/lib/service.rb +36 -0
  86. data/lib/version.rb +8 -0
  87. data/pixmap/bg/map_bg.jpg +0 -0
  88. data/pixmap/bg/map_bg2.jpg +0 -0
  89. data/pixmap/logo.jpg +0 -0
  90. data/pixmap/logo_icon.png +0 -0
  91. data/pixmap/os/3com.png +0 -0
  92. data/pixmap/os/aix.gif +0 -0
  93. data/pixmap/os/amiga.png +0 -0
  94. data/pixmap/os/beos.png +0 -0
  95. data/pixmap/os/cisco.png +0 -0
  96. data/pixmap/os/freebsd.png +0 -0
  97. data/pixmap/os/hp.png +0 -0
  98. data/pixmap/os/hurd.gif +0 -0
  99. data/pixmap/os/irix.gif +0 -0
  100. data/pixmap/os/linux.png +0 -0
  101. data/pixmap/os/mac.png +0 -0
  102. data/pixmap/os/netbsd.gif +0 -0
  103. data/pixmap/os/netware.png +0 -0
  104. data/pixmap/os/openbsd.png +0 -0
  105. data/pixmap/os/os2warp.gif +0 -0
  106. data/pixmap/os/qnx.gif +0 -0
  107. data/pixmap/os/sco.gif +0 -0
  108. data/pixmap/os/sgi.xpm +111 -0
  109. data/pixmap/os/solaris.gif +0 -0
  110. data/pixmap/os/unix.gif +0 -0
  111. data/pixmap/os/unknown.png +0 -0
  112. data/pixmap/os/vms.xpm +345 -0
  113. data/pixmap/os/windows.png +0 -0
  114. data/pixmap/type/cloud.png +0 -0
  115. data/pixmap/type/device.png +0 -0
  116. data/pixmap/type/firewall.png +0 -0
  117. data/pixmap/type/gateway.png +0 -0
  118. data/pixmap/type/home.png +0 -0
  119. data/pixmap/type/host.png +0 -0
  120. data/pixmap/type/network.png +0 -0
  121. data/pixmap/type/printer.png +0 -0
  122. data/pixmap/type/router.png +0 -0
  123. data/pixmap/type/server.png +0 -0
  124. data/pixmap/type/switch.png +0 -0
  125. data/pixmap/type/vm.png +0 -0
  126. data/plugins/Defaultme.rb +7 -0
  127. data/plugins/DnsCheck.rb +46 -0
  128. data/plugins/FooMonitor.rb +26 -0
  129. data/plugins/HttpVirtualHostMonitor.rb +43 -0
  130. data/plugins/MysqlShowStatusMonitor.rb +64 -0
  131. data/plugins/PgsqlPercentConnectionMonitor.rb +72 -0
  132. data/plugins/SshCpuLoadMonitor.rb +85 -0
  133. data/plugins/SshDiskMonitor.rb +69 -0
  134. data/plugins/SshFgtAvExpiredMonitor.rb +75 -0
  135. data/plugins/SshPercentUsedRamMonitor.rb +74 -0
  136. data/plugins/TelnetCpuLoadMonitor.rb +69 -0
  137. data/plugins/example1.rb +15 -0
  138. data/plugins/example2.rb +7 -0
  139. data/sound/beep.wav +0 -0
  140. metadata +378 -0
@@ -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