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,3712 @@
1
+ require "#{GNMSLIB}"+'/monitor/client/snmp/snmp_monitoring'
2
+ require "#{GNMSLIB}"+'/monitor/client/wmi/wmi_monitoring'
3
+ require "#{GNMSLIB}"+'/monitor/client/jmx/jmx_monitoring'
4
+ require "#{GNMSLIB}"+'/monitor/client/custom/custom_monitoring'
5
+ require "#{GNMSLIB}"+'/monitor/server/syslog/syslog_monitoring'
6
+ require "#{GNMSLIB}"+'/monitor/server/snmp/snmptrap_monitoring'
7
+
8
+ class NodeHostProperty
9
+
10
+ def toggle_select_port(path=0)
11
+ #switch all port
12
+ @treeview.model.each {|model, path, iter|
13
+ fixed =iter[0]
14
+ fixed ^= 1
15
+ @cbutton[path.to_str().to_i()]=fixed
16
+ iter[0] = fixed
17
+ }
18
+ end
19
+
20
+ def toggle_select_custom(path=0)
21
+ @customview.model.each {|model, path, iter|
22
+ fixed =iter[0]
23
+ fixed ^= 1
24
+ iter[0] = fixed
25
+ }
26
+ end
27
+
28
+ def include_regex_str(str,list)
29
+ list.each {|str_lign|
30
+ if str_lign.match(str)
31
+ return true
32
+ end
33
+ } unless list == nil
34
+ return false
35
+ end
36
+
37
+ #
38
+ # add or modify an existing service
39
+ #
40
+ def add_monitored_service(mode=nil)
41
+
42
+ protocol=nil
43
+ port=nil
44
+ service_name=nil
45
+ severity=nil
46
+
47
+ addportwin=Gtk::Window.new
48
+
49
+ if mode
50
+ if @treeview.selection.selected == nil
51
+ return
52
+ end
53
+ title="Edit monitored service"
54
+ iter=@treeview.selection.selected
55
+ protocol=iter[1]
56
+ port=iter[2]
57
+ service_name=iter[3]
58
+ severity=iter[4]
59
+ else
60
+ title="Add monitored service"
61
+ end
62
+
63
+ addportwin.set_title(title)
64
+ addportwin.set_size_request(315, -1)
65
+ addportwin.set_modal(true)
66
+
67
+ addportwin.signal_connect("key_press_event") {|w,e|
68
+ if e.keyval == Gdk::Keyval::GDK_Escape
69
+ addportwin.destroy
70
+ end
71
+ }
72
+
73
+ frame = Gtk::Frame::new
74
+ frame.border_width=10
75
+ frame.show
76
+ vbox_root=Gtk::VBox::new
77
+ vbox_root.show
78
+ addportwin.add vbox_root
79
+ vbox_root.add frame
80
+ vbox = Gtk::VBox.new
81
+ vbox.show
82
+ frame.add vbox
83
+
84
+ table = Gtk::Table.new(4,2,false)
85
+ table.show
86
+
87
+ entry_serv = Gtk::Entry.new
88
+ entry_serv.set_text(service_name) unless service_name==nil
89
+ label_proto = Gtk::Label.new "Protocol"
90
+ label_proto.show
91
+
92
+ entry_proto = Gtk::ComboBox.new
93
+ protos = ["tcp","udp"]
94
+ protos.each {|p|
95
+ entry_proto.append_text(p)
96
+ }
97
+ if protocol
98
+ ind = protos.index(protocol)
99
+ entry_proto.set_active(ind) if ind
100
+ else
101
+ ind = protos.index("tcp")
102
+ entry_proto.set_active(ind) if ind
103
+ end
104
+ entry_proto.set_size_request(20,-1)
105
+ entry_proto.show
106
+
107
+ bbox=Gtk::HButtonBox.new
108
+ bbox.show
109
+ bbox.add entry_proto
110
+ table.attach(label_proto,0,1,0,1)
111
+ table.attach(bbox,1,2,0,1)
112
+
113
+ label_port = Gtk::Label.new "Port"
114
+ label_port.show
115
+ entry_port = Gtk::Entry.new
116
+ entry_port.set_max_length 5
117
+ entry_port.set_text(port.to_s()) unless port==nil
118
+ entry_port.set_size_request(20,-1)
119
+ entry_port.show
120
+ entry_port.signal_connect("changed") {
121
+ entry_serv.text=service_name(entry_proto.active_text, entry_port.text)
122
+ }
123
+ entry_proto.signal_connect("changed") {
124
+ entry_serv.text=service_name(entry_proto.active_text, entry_port.text) unless entry_port.text==nil
125
+ }
126
+ bbox=Gtk::HButtonBox.new
127
+ bbox.show
128
+ bbox.add entry_port
129
+ table.attach(label_port,0,1,1,2)
130
+ table.attach(bbox,1,2,1,2)
131
+
132
+ label_serv = Gtk::Label.new "Service"
133
+ label_serv.show
134
+ entry_serv.set_size_request(20,-1)
135
+ entry_serv.show
136
+ bbox=Gtk::HButtonBox.new
137
+ bbox.show
138
+ bbox.add entry_serv
139
+ table.attach(label_serv,0,1,2,3)
140
+ table.attach(bbox,1,2,2,3)
141
+
142
+ label_sev = Gtk::Label.new "Severity"
143
+ label_sev.show
144
+ entry_sev = Gtk::ComboBox.new
145
+ $status[0..3].each {|sev|
146
+ entry_sev.append_text(sev)
147
+ }
148
+ entry_sev.signal_connect("changed") {
149
+ entry_sev.child.set_background_gdk(@color_style[entry_sev.active])
150
+ }
151
+ ind = 0
152
+ if severity
153
+ ind = $status[0..3].index(severity)
154
+ entry_sev.set_active(ind) if ind
155
+ else
156
+ entry_sev.set_active(ind)
157
+ end
158
+ entry_sev.child.set_background_gdk(@color_style[ind])
159
+
160
+ entry_sev.set_size_request(150,-1)
161
+ entry_sev.show
162
+ bbox=Gtk::HButtonBox.new
163
+ bbox.show
164
+ bbox.add entry_sev
165
+ table.attach(label_sev,0,1,3,4)
166
+ table.attach(bbox,1,2,3,4)
167
+
168
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
169
+ ok_button.show
170
+ ok_button.signal_connect("clicked") {
171
+ if mode
172
+ #here we just modify this service
173
+ if isValidPort(entry_port.text.to_i())
174
+ iter=@treeview.selection.selected
175
+ iter[1] = entry_proto.active_text
176
+ iter[2] = entry_port.text.to_i
177
+ iter[3] = entry_serv.text
178
+ iter[4] = entry_sev.active_text
179
+ addportwin.destroy()
180
+ else
181
+ errorEntry(addportwin, "Bad port #{entry_port.entry.text}")
182
+ end
183
+ else
184
+ #just add this service
185
+ if isValidPort(entry_port.text.to_i())
186
+ search_mon_port=false
187
+ @treeview.model.each {|model, path, iter|
188
+ if iter[2]==entry_port.text.to_i && iter[1]==entry_proto.active_text
189
+ search_mon_port=true
190
+ break
191
+ end
192
+ }
193
+
194
+ if search_mon_port==false
195
+ iter=@treeview.model.append
196
+ iter[0] = 1
197
+ iter[1] = entry_proto.active_text
198
+ iter[2] = entry_port.text.to_i
199
+ iter[3] = entry_serv.text
200
+ iter[4] = entry_sev.active_text
201
+ addportwin.destroy()
202
+ else
203
+ errorEntry(addportwin, "#{entry_proto.active_text}/#{entry_port.text} already exists")
204
+ end
205
+ else
206
+ errorEntry(addportwin, "Bad port #{entry_port.text}")
207
+ end
208
+ end
209
+ }
210
+
211
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
212
+ cancel_button.show
213
+ cancel_button.signal_connect("clicked") {
214
+ addportwin.destroy
215
+ }
216
+
217
+ bbox =Gtk::HBox::new(FALSE, 10)
218
+ bbox.border_width=10
219
+ bbox.show
220
+
221
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
222
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
223
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
224
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
225
+
226
+ vbox.add(table)
227
+ separator = Gtk::HSeparator::new()
228
+ separator.show
229
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
230
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
231
+
232
+ addportwin.show
233
+
234
+ end
235
+
236
+ def add_monitored_snmp(mode=nil)
237
+ oidref=nil
238
+ operator=nil
239
+ threshold=nil
240
+ severity=nil
241
+
242
+ addsnmpwin=Gtk::Window.new
243
+
244
+ if mode
245
+ if @snmpview.selection.selected == nil
246
+ return
247
+ end
248
+ title="Edit monitored SNMP OID"
249
+ iter=@snmpview.selection.selected
250
+ oidref=iter[1]
251
+ operator=iter[2]
252
+ threshold=iter[3]
253
+ severity=iter[4]
254
+ else
255
+ title="Add monitored SNMP OID"
256
+ end
257
+
258
+ addsnmpwin.set_title(title)
259
+ addsnmpwin.set_size_request(340, -1)
260
+ addsnmpwin.set_modal(true)
261
+
262
+ addsnmpwin.signal_connect("key_press_event") {|w,e|
263
+ if e.keyval == Gdk::Keyval::GDK_Escape
264
+ addsnmpwin.destroy
265
+ end
266
+ }
267
+
268
+ frame = Gtk::Frame::new
269
+ frame.border_width=10
270
+ frame.show
271
+ vbox_root=Gtk::VBox::new
272
+ vbox_root.show
273
+ addsnmpwin.add vbox_root
274
+ vbox_root.add frame
275
+ vbox = Gtk::VBox.new
276
+ vbox.show
277
+ frame.add vbox
278
+
279
+ table = Gtk::Table.new(4,2,false)
280
+ table.show
281
+
282
+ label_oidref = Gtk::Label.new "OID Ref"
283
+ label_oidref.show
284
+ entry_oidref = Gtk::ComboBox.new
285
+ OIDRef::get_oid_refs_name().each {|oid|
286
+ entry_oidref.append_text(oid)
287
+ }
288
+ if oidref
289
+ ind = OIDRef::get_oid_refs_name().index(oidref)
290
+ entry_oidref.set_active(ind) if ind
291
+ else
292
+ entry_oidref.set_active(0)
293
+ end
294
+ entry_oidref.set_size_request(150,-1)
295
+ entry_oidref.show
296
+ bbox=Gtk::HButtonBox.new
297
+ bbox.show
298
+ bbox.add entry_oidref
299
+ table.attach(label_oidref,0,1,0,1)
300
+ table.attach(bbox,1,2,0,1)
301
+
302
+ label_operator = Gtk::Label.new "Operator"
303
+ label_operator.show
304
+ entry_operator = Gtk::ComboBox.new
305
+ SnmpMonitoring::TESTOP.each {|ope|
306
+ entry_operator.append_text(ope)
307
+ }
308
+ if operator
309
+ ind = SnmpMonitoring::TESTOP.index(operator)
310
+ entry_operator.set_active(ind) if ind
311
+ else
312
+ entry_operator.set_active(0)
313
+ end
314
+
315
+ entry_operator.set_size_request(150,-1)
316
+ entry_operator.show
317
+ bbox=Gtk::HButtonBox.new
318
+ bbox.show
319
+ bbox.add entry_operator
320
+ table.attach(label_operator,0,1,1,2)
321
+ table.attach(bbox,1,2,1,2)
322
+
323
+ entry_threshold = Gtk::Entry.new
324
+ entry_threshold.set_text(threshold) unless threshold==nil
325
+ label_threshold = Gtk::Label.new "Threshold"
326
+ label_threshold.show
327
+ entry_threshold.set_size_request(150,-1)
328
+ entry_threshold.show
329
+ bbox=Gtk::HButtonBox.new
330
+ bbox.show
331
+ bbox.add entry_threshold
332
+ table.attach(label_threshold,0,1,2,3)
333
+ table.attach(bbox,1,2,2,3)
334
+
335
+ label_sev = Gtk::Label.new "Severity"
336
+ label_sev.show
337
+ entry_sev = Gtk::ComboBox.new
338
+ $status[0..3].each {|sev|
339
+ entry_sev.append_text(sev)
340
+ }
341
+ entry_sev.signal_connect("changed") {
342
+ entry_sev.child.set_background_gdk(@color_style[entry_sev.active])
343
+ }
344
+ ind = 0
345
+ if severity
346
+ ind = $status[0..3].index(severity)
347
+ entry_sev.set_active(ind) if ind
348
+ else
349
+ entry_sev.set_active(ind)
350
+ end
351
+ entry_sev.child.set_background_gdk(@color_style[ind])
352
+
353
+ entry_sev.set_size_request(150,-1)
354
+ entry_sev.show
355
+ bbox=Gtk::HButtonBox.new
356
+ bbox.show
357
+ bbox.add entry_sev
358
+ table.attach(label_sev,0,1,3,4)
359
+ table.attach(bbox,1,2,3,4)
360
+
361
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
362
+ ok_button.show
363
+ ok_button.signal_connect("clicked") {
364
+ if mode
365
+ #here we just modify this service
366
+ iter=@snmpview.selection.selected
367
+ iter[1] = entry_oidref.active_text
368
+ iter[2] = entry_operator.active_text
369
+ iter[3] = entry_threshold.text
370
+ iter[4] = entry_sev.active_text
371
+ addsnmpwin.destroy()
372
+ else
373
+ if isInteger(entry_threshold.text)
374
+ #need to test if already exists
375
+ error_detected=0
376
+ @snmpview.model.each {|model, path, iter|
377
+ if "#{iter[1]}" == "#{entry_oidref.active_text}"
378
+ error_detected=1
379
+ break
380
+ end
381
+ }
382
+ if error_detected == 0
383
+ iter=@snmpview.model.append
384
+ iter[0] = 1
385
+ iter[1] = entry_oidref.active_text
386
+ iter[2] = entry_operator.active_text
387
+ iter[3] = entry_threshold.text
388
+ iter[4] = entry_sev.active_text
389
+ addsnmpwin.destroy()
390
+ else
391
+ errorEntry(addsnmpwin, "OID Ref already set")
392
+ end
393
+ else
394
+ errorEntry(addsnmpwin, "Threshold #{entry_threshold.text} need to be an integer")
395
+ end
396
+ end
397
+ }
398
+
399
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
400
+ cancel_button.show
401
+ cancel_button.signal_connect("clicked") {
402
+ addsnmpwin.destroy
403
+ }
404
+
405
+ bbox =Gtk::HBox::new(FALSE, 10)
406
+ bbox.border_width=10
407
+ bbox.show
408
+
409
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
410
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
411
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
412
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
413
+
414
+ vbox.add(table)
415
+ separator = Gtk::HSeparator::new()
416
+ separator.show
417
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
418
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
419
+
420
+ addsnmpwin.show
421
+ end
422
+
423
+
424
+ def add_monitored_wmi(mode=nil)
425
+ wmiref=nil
426
+ operator=nil
427
+ value=nil
428
+ severity=nil
429
+
430
+ addwmiwin=Gtk::Window.new
431
+
432
+ if mode
433
+ if @wmiview.selection.selected == nil
434
+ return
435
+ end
436
+ title="Edit monitored WMI Ref"
437
+ iter=@wmiview.selection.selected
438
+ wmiref=iter[1]
439
+ operator=iter[2]
440
+ value=iter[3]
441
+ severity=iter[4]
442
+ else
443
+ title="Add monitored WMI Ref"
444
+ end
445
+
446
+ addwmiwin.set_title(title)
447
+ addwmiwin.set_size_request(340, -1)
448
+ addwmiwin.set_modal(true)
449
+
450
+ addwmiwin.signal_connect("key_press_event") {|w,e|
451
+ if e.keyval == Gdk::Keyval::GDK_Escape
452
+ addwmiwin.destroy
453
+ end
454
+ }
455
+
456
+ frame = Gtk::Frame::new
457
+ frame.border_width=10
458
+ frame.show
459
+ vbox_root=Gtk::VBox::new
460
+ vbox_root.show
461
+ addwmiwin.add vbox_root
462
+ vbox_root.add frame
463
+ vbox = Gtk::VBox.new
464
+ vbox.show
465
+ frame.add vbox
466
+
467
+ table = Gtk::Table.new(4,2,false)
468
+ table.show
469
+
470
+ label_wmiref = Gtk::Label.new "WMI Ref"
471
+ label_wmiref.show
472
+ entry_wmiref = Gtk::ComboBox.new
473
+ WMIRef::get_wmi_refs_name().each {|ref|
474
+ entry_wmiref.append_text(ref)
475
+ }
476
+ if wmiref
477
+ ind = WMIRef::get_wmi_refs_name().index(wmiref)
478
+ entry_wmiref.set_active(ind) if ind
479
+ else
480
+ entry_wmiref.set_active(0)
481
+ end
482
+ entry_wmiref.set_size_request(150, -1)
483
+ entry_wmiref.show
484
+ bbox=Gtk::HButtonBox.new
485
+ bbox.show
486
+ bbox.add entry_wmiref
487
+ table.attach(label_wmiref,0,1,0,1)
488
+ table.attach(bbox,1,2,0,1)
489
+
490
+ label_operator = Gtk::Label.new "Operator"
491
+ label_operator.show
492
+ entry_operator = Gtk::ComboBox.new
493
+ WmiMonitoring::TESTOP.each {|ope|
494
+ entry_operator.append_text(ope)
495
+ }
496
+ if operator
497
+ ind = WmiMonitoring::TESTOP.index(operator)
498
+ entry_operator.set_active(ind) if ind
499
+ else
500
+ entry_operator.set_active(0)
501
+ end
502
+
503
+ entry_operator.set_size_request(150, -1)
504
+ entry_operator.show
505
+ bbox=Gtk::HButtonBox.new
506
+ bbox.show
507
+ bbox.add entry_operator
508
+ table.attach(label_operator,0,1,1,2)
509
+ table.attach(bbox,1,2,1,2)
510
+
511
+ entry_value = Gtk::Entry.new
512
+ entry_value.set_text(value) unless value==nil
513
+ label_value = Gtk::Label.new "Value"
514
+ label_value.show
515
+ entry_value.set_size_request(150, -1)
516
+ entry_value.show
517
+ bbox=Gtk::HButtonBox.new
518
+ bbox.show
519
+ bbox.add entry_value
520
+ table.attach(label_value,0,1,2,3)
521
+ table.attach(bbox,1,2,2,3)
522
+
523
+ label_sev = Gtk::Label.new "Severity"
524
+ label_sev.show
525
+ entry_sev = Gtk::ComboBox.new
526
+ $status[0..3].each {|sev|
527
+ entry_sev.append_text(sev)
528
+ }
529
+ entry_sev.signal_connect("changed") {
530
+ entry_sev.child.set_background_gdk(@color_style[entry_sev.active])
531
+ }
532
+ ind = 0
533
+ if severity
534
+ ind = $status[0..3].index(severity)
535
+ entry_sev.set_active(ind) if ind
536
+ else
537
+ entry_sev.set_active(ind)
538
+ end
539
+ entry_sev.child.set_background_gdk(@color_style[ind])
540
+ entry_sev.set_size_request(150, -1)
541
+ entry_sev.show
542
+ bbox=Gtk::HButtonBox.new
543
+ bbox.show
544
+ bbox.add entry_sev
545
+ table.attach(label_sev,0,1,3,4)
546
+ table.attach(bbox,1,2,3,4)
547
+
548
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
549
+ ok_button.show
550
+ ok_button.signal_connect("clicked") {
551
+ if mode
552
+ #here we just modify this service
553
+ iter=@wmiview.selection.selected
554
+ iter[1] = entry_wmiref.active_text
555
+ iter[2] = entry_operator.active_text
556
+ iter[3] = entry_value.text
557
+ iter[4] = entry_sev.active_text
558
+ addwmiwin.destroy()
559
+ else
560
+ if entry_value.text != ""
561
+ #need to test if already exists
562
+ error_detected=0
563
+ @wmiview.model.each {|model, path, iter|
564
+ if "#{iter[1]}" == "#{entry_wmiref.active_text}"
565
+ error_detected=1
566
+ break
567
+ end
568
+ }
569
+ if error_detected == 0
570
+ iter=@wmiview.model.append
571
+ iter[0] = 1
572
+ iter[1] = entry_wmiref.active_text
573
+ iter[2] = entry_operator.active_text
574
+ iter[3] = entry_value.text
575
+ iter[4] = entry_sev.active_text
576
+ addwmiwin.destroy()
577
+ else
578
+ errorEntry(addwmiwin, "WMI Ref already set")
579
+ end
580
+ else
581
+ errorEntry(addwmiwin, "WMI Ref, you must set a value")
582
+ end
583
+ end
584
+ }
585
+
586
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
587
+ cancel_button.show
588
+ cancel_button.signal_connect("clicked") {
589
+ addwmiwin.destroy
590
+ }
591
+
592
+ bbox =Gtk::HBox::new(FALSE, 10)
593
+ bbox.border_width=10
594
+ bbox.show
595
+
596
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
597
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
598
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
599
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
600
+
601
+ vbox.add(table)
602
+ separator = Gtk::HSeparator::new()
603
+ separator.show
604
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
605
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
606
+
607
+ addwmiwin.show
608
+ end
609
+
610
+ def add_monitored_jmx(node, mode=nil)
611
+ jmxref=nil
612
+ protocol="rmi"
613
+ port=nil
614
+ auth=nil
615
+ jmxattr_h=Hash.new
616
+
617
+ addjmxwin=Gtk::Window.new
618
+
619
+ if mode
620
+ if @jmxview.selection.selected == nil
621
+ return
622
+ end
623
+ title="Edit monitored jmx Ref"
624
+ iter=@jmxview.selection.selected
625
+ jmxref=iter[1]
626
+ protocol=iter[2].split("/")[0]
627
+ port=iter[2].split("/")[1]
628
+ auth=iter[3]
629
+ else
630
+ title="Add monitored jmx Ref"
631
+ end
632
+
633
+ addjmxwin.set_title(title)
634
+ addjmxwin.set_size_request(340, 300)
635
+ addjmxwin.set_modal(true)
636
+
637
+ addjmxwin.signal_connect("key_press_event") {|w,e|
638
+ if e.keyval == Gdk::Keyval::GDK_Escape
639
+ addjmxwin.destroy
640
+ end
641
+ }
642
+
643
+ frame = Gtk::Frame::new
644
+ frame.border_width=10
645
+ frame.show
646
+ vbox_root=Gtk::VBox::new
647
+ vbox_root.show
648
+ addjmxwin.add vbox_root
649
+ vbox_root.add frame
650
+ vbox = Gtk::VBox.new
651
+ vbox.show
652
+ frame.add vbox
653
+
654
+ table = Gtk::Table.new(4,2,false)
655
+ table.show
656
+
657
+ label_jmxref = Gtk::Label.new "JMX Ref"
658
+ label_jmxref.show
659
+ entry_jmxref = Gtk::ComboBox.new
660
+ if mode
661
+ entry_jmxref.set_sensitive(false)
662
+ end
663
+ JMXRef::get_jmx_refs_name().each {|ref|
664
+ entry_jmxref.append_text(ref)
665
+ }
666
+ if jmxref
667
+ ind = JMXRef::get_jmx_refs_name().index(jmxref)
668
+ entry_jmxref.set_active(ind) if ind
669
+ else
670
+ entry_jmxref.set_active(0)
671
+ end
672
+
673
+ entry_jmxref.set_size_request(150, -1)
674
+ entry_jmxref.show
675
+ bbox=Gtk::HButtonBox.new
676
+ bbox.show
677
+ bbox.add entry_jmxref
678
+ table.attach(label_jmxref,0,1,0,1)
679
+ table.attach(bbox,1,2,0,1)
680
+
681
+ entry_protocol = Gtk::Entry.new
682
+ entry_protocol.set_text(protocol) unless protocol==nil
683
+ entry_protocol.set_sensitive(false)
684
+ label_protocol = Gtk::Label.new "Protocol"
685
+ label_protocol.show
686
+ entry_protocol.set_size_request(150, -1)
687
+ entry_protocol.show
688
+ bbox=Gtk::HButtonBox.new
689
+ bbox.show
690
+ bbox.add entry_protocol
691
+ table.attach(label_protocol,0,1,1,2)
692
+ table.attach(bbox,1,2,1,2)
693
+
694
+ entry_port = Gtk::Entry.new
695
+ entry_port.set_text(port) unless port==nil
696
+ label_port = Gtk::Label.new "Port"
697
+ label_port.show
698
+ entry_port.set_size_request(150, -1)
699
+ entry_port.show
700
+ bbox=Gtk::HButtonBox.new
701
+ bbox.show
702
+ bbox.add entry_port
703
+ table.attach(label_port,0,1,2,3)
704
+ table.attach(bbox,1,2,2,3)
705
+
706
+ label_auth = Gtk::Label.new "Authentication"
707
+ label_auth.show
708
+ entry_auth = Gtk::ComboBox.new
709
+ node.get_all_account().keys.unshift("None").each {|authval|
710
+ entry_auth.append_text(authval)
711
+ }
712
+ if auth
713
+ ind = node.get_all_account().keys.unshift("None").index(auth)
714
+ entry_auth.set_active(ind) if ind
715
+ else
716
+ entry_auth.set_active(0)
717
+ end
718
+ entry_auth.set_size_request(150, -1)
719
+ entry_auth.show
720
+ bbox=Gtk::HButtonBox.new
721
+ bbox.show
722
+ bbox.add entry_auth
723
+ table.attach(label_auth,0,1,3,4)
724
+ table.attach(bbox,1,2,3,4)
725
+
726
+ jmxls = Gtk::TreeStore.new(String, String, String, String)
727
+ @jmxtv = Gtk::TreeView.new(jmxls)
728
+ @jmxtv_nb_entry=0
729
+
730
+ model=Gtk::ListStore.new(String)
731
+ $jmx_refs[entry_jmxref.active_text].attribute.split.each {|attr|
732
+ if attr != ""
733
+ iter = model.append
734
+ iter[0] = attr
735
+ end
736
+ }
737
+
738
+ model2=Gtk::ListStore.new(String)
739
+ JmxAttributeMonitoring::TESTOP.each {|op|
740
+ iter = model2.append
741
+ iter[0] = op
742
+ }
743
+
744
+ model4=Gtk::ListStore.new(String)
745
+ $status[0..3].each {|sev|
746
+ iter = model4.append
747
+ iter[0] = sev
748
+ }
749
+
750
+ renderer1=Gtk::CellRendererCombo.new
751
+ column1 = Gtk::TreeViewColumn.new("Attribute", renderer1, "text" => 0)
752
+ renderer1.model = model
753
+ renderer1.text_column = 0
754
+ renderer1.has_entry = false
755
+ renderer1.editable = true
756
+ renderer1.signal_connect('edited') do |w, path, new_text|
757
+ if path != ""
758
+ iter = @jmxtv.model.get_iter(path)
759
+ iter[0] = new_text
760
+ end
761
+ end
762
+ column1.set_sort_column_id(0)
763
+
764
+ renderer2=Gtk::CellRendererCombo.new
765
+ column2 = Gtk::TreeViewColumn.new("Operator", renderer2, "text" => 1)
766
+ column2.set_sort_column_id(1)
767
+ renderer2.model = model2
768
+ renderer2.text_column = 0
769
+ renderer2.has_entry = false
770
+ renderer2.editable = true
771
+ renderer2.signal_connect('edited') do |w, path, new_text|
772
+ if path != ""
773
+ iter = @jmxtv.model.get_iter(path)
774
+ iter[1] = new_text
775
+ jmxattr_h[iter[0]].set_operator(JmxAttributeMonitoring::TESTOP.index(new_text))
776
+ end
777
+ end
778
+
779
+ def cell_jmx_attr_value_edited(cell, path_string, new_text, col, node, jmxattr_h)
780
+ iter = @jmxtv.model.get_iter(path_string)
781
+ iter[col] = new_text
782
+ jmxattr_h[iter[0]].set_value(new_text)
783
+ end
784
+
785
+ tr0=Gtk::CellRendererText.new
786
+ tr0.editable=true
787
+ tr0.mode=Gtk::CellRenderer::MODE_EDITABLE
788
+ tr0.signal_connect("edited") { |renderer, iter, var|
789
+ cell_jmx_attr_value_edited(renderer, iter, var, 2, node, jmxattr_h)
790
+ }
791
+ column3 = Gtk::TreeViewColumn.new("Value", tr0, "text" => 2)
792
+ column3.set_sort_column_id(2)
793
+
794
+ renderer4=Gtk::CellRendererCombo.new
795
+ column4 = Gtk::TreeViewColumn.new("Severity", renderer4, "text" => 3)
796
+ column4.set_sort_column_id(3)
797
+ renderer4.model = model4
798
+ renderer4.text_column = 0
799
+ renderer4.has_entry = false
800
+ renderer4.editable = true
801
+ renderer4.signal_connect('edited') do |w, path, new_text|
802
+ if path != ""
803
+ iter = @jmxtv.model.get_iter(path)
804
+ iter[3] = new_text
805
+ jmxattr_h[iter[0]].set_severity($status.index(new_text))
806
+ end
807
+ end
808
+
809
+ column4.set_cell_data_func(renderer4) do |col, renderer, model, iter|
810
+ if iter[3] and iter[3] != ""
811
+ renderer.set_background_gdk(@color_style[$status.index(iter[3])])
812
+ else
813
+ renderer.background = nil
814
+ end
815
+ end
816
+
817
+ @jmxtv.append_column(column1)
818
+ @jmxtv.append_column(column2)
819
+ @jmxtv.append_column(column3)
820
+ @jmxtv.append_column(column4)
821
+
822
+ if mode
823
+ #load existing jmx attribute table
824
+ if node.jmx_monitoring[entry_jmxref.active_text]
825
+ attr_h=node.jmx_monitoring[entry_jmxref.active_text].get_attributes()
826
+ attr_h.each_value { |attr|
827
+ parent=jmxls.append(nil)
828
+ parent[0]=attr.attributeName
829
+ parent[1]=JmxAttributeMonitoring::TESTOP[attr.operator]
830
+ parent[2]=attr.value.to_s
831
+ parent[3]=$status[attr.severity]
832
+ jmxattr_h[parent[0]]=JmxAttributeMonitoring.new(parent[0], attr.operator, parent[2], attr.severity)
833
+ @jmxtv_nb_entry+=1
834
+ }
835
+ end
836
+ end
837
+
838
+ #create menu
839
+ menu_jmx_attr = Gtk::Menu.new
840
+
841
+ item_add_jmx_attr = Gtk::ImageMenuItem.new("Add JMX Attribute")
842
+ image_item_add_jmx_attr = Gtk::Image.new()
843
+ image_item_add_jmx_attr.set_stock(Gtk::Stock::ADD)
844
+ item_add_jmx_attr.set_image(image_item_add_jmx_attr)
845
+ item_add_jmx_attr.signal_connect("activate") {
846
+ insert_jmx_attr_entry(node, jmxattr_h, entry_jmxref)
847
+ }
848
+ menu_jmx_attr.append(item_add_jmx_attr)
849
+
850
+ item_del_jmx_attr = Gtk::ImageMenuItem.new("Delete JMX Attribute")
851
+ image_item_del_jmx_attr = Gtk::Image.new()
852
+ image_item_del_jmx_attr.set_stock(Gtk::Stock::REMOVE)
853
+ item_del_jmx_attr.set_image(image_item_del_jmx_attr)
854
+ item_del_jmx_attr.signal_connect("activate") {|renderer, iter, var|
855
+ remove_selected_jmx_attr_entry(node, jmxattr_h, entry_jmxref)
856
+ }
857
+ menu_jmx_attr.append(item_del_jmx_attr)
858
+ menu_jmx_attr.show_all
859
+
860
+ @jmxtv.signal_connect("button_press_event") do |widget, event|
861
+ if event.kind_of? Gdk::EventButton and event.button == 3
862
+ menu_jmx_attr.popup(nil, nil, event.button, event.time)
863
+ end
864
+ end
865
+
866
+ @jmxtv.signal_connect("key_press_event") {|w,e|
867
+ if e.keyval == Gdk::Keyval::GDK_Delete
868
+ remove_selected_jmx_attr_entry(node, jmxattr_h, entry_jmxref)
869
+ elsif e.keyval == Gdk::Keyval::GDK_Insert
870
+ insert_jmx_attr_entry(node, jmxattr_h, entry_jmxref)
871
+ end
872
+ }
873
+
874
+ def insert_jmx_attr_entry(node, jmxattr_h, mbean)
875
+ if $jmx_refs[mbean.active_text].attribute.split.size > @jmxtv_nb_entry
876
+ iter=@jmxtv.model.append(nil)
877
+ val=""
878
+ $jmx_refs[mbean.active_text].attribute.split.each {|attr|
879
+ if !jmxattr_h[mbean.active_text]
880
+ val=attr
881
+ break
882
+ elsif !jmxattr_h[attr]
883
+ val=attr
884
+ break
885
+ end
886
+ }
887
+ if val != ""
888
+ #as we insert the attribute we blocked the mbean name
889
+ mbean.set_sensitive(false)
890
+ iter[0] = val
891
+ iter[1] = JmxAttributeMonitoring::TESTOP[0]
892
+ iter[2] = "0"
893
+ iter[3] = $status[0]
894
+ jmxattr_h[iter[0]]=JmxAttributeMonitoring.new(iter[0],0,iter[2],0)
895
+ @jmxtv_nb_entry+=1
896
+ end
897
+ end
898
+ end
899
+
900
+ def remove_selected_jmx_attr_entry(node, jmxattr_h, mbean)
901
+ if @jmxtv.selection.selected
902
+ jmxattr_h.delete(@jmxtv.model.get_value(@jmxtv.selection.selected,0))
903
+ @jmxtv.model.remove(@jmxtv.selection.selected)
904
+ @jmxtv_nb_entry-=1
905
+ if @jmxtv_nb_entry == 0
906
+ mbean.set_sensitive(true)
907
+ end
908
+ end
909
+ end
910
+
911
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
912
+ ok_button.show
913
+ ok_button.signal_connect("clicked") {
914
+ if (entry_port.text != "") && (isInteger(entry_port.text))
915
+ if mode
916
+ #here we just modify this jmx ref
917
+ iter=@jmxview.selection.selected
918
+ iter[1] = entry_jmxref.active_text
919
+ iter[2] = entry_protocol.text + "/" + entry_port.text
920
+ iter[3] = entry_auth.active_text
921
+ node.jmx_monitoring[entry_jmxref.active_text].set_protocol(entry_protocol.text)
922
+ node.jmx_monitoring[entry_jmxref.active_text].set_port(entry_port.text)
923
+ node.jmx_monitoring[entry_jmxref.active_text].set_auth(entry_auth.active_text)
924
+ node.jmx_monitoring[entry_jmxref.active_text].clear_attributes()
925
+ jmxattr_h.each_value {|attr|
926
+ node.jmx_monitoring[entry_jmxref.active_text].add_attribute(attr.attributeName, attr.operator, attr.value, attr.severity)
927
+ }
928
+ addjmxwin.destroy()
929
+ else
930
+ #new entry
931
+ list_rows = 0
932
+ @jmxtv.model.each {|model, path, it|
933
+ list_rows += 1
934
+ if "#{it[2]}" != ""
935
+ #need to test if already exists
936
+ error_detected=0
937
+ @jmxview.model.each {|model, path, iter|
938
+ if "#{iter[1]}" == "#{entry_jmxref.active_text}"
939
+ error_detected=1
940
+ break
941
+ end
942
+ }
943
+ if error_detected == 0
944
+ iter=@jmxview.model.append
945
+ iter[0] = 1
946
+ iter[1] = entry_jmxref.active_text
947
+ iter[2] = entry_protocol.text + "/" + entry_port.text
948
+ iter[3] = entry_auth.active_text
949
+
950
+ node.add_jmx_monitoring(iter[0], iter[1], entry_protocol.text, entry_port.text, entry_auth.active_text, jmxattr_h)
951
+ addjmxwin.destroy()
952
+ else
953
+ errorEntry(addjmxwin, "jmx Ref already set")
954
+ end
955
+ else
956
+ errorEntry(addjmxwin, "jmx Ref, you must set a value")
957
+ end
958
+ }
959
+ errorEntry(addjmxwin, "jmx attributes not set") if list_rows == 0
960
+ end
961
+ else
962
+ entry_port.grab_focus()
963
+ errorEntry(addjmxwin, "Port should be a valid integer")
964
+ end
965
+ }
966
+
967
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
968
+ cancel_button.show
969
+ cancel_button.signal_connect("clicked") {
970
+ addjmxwin.destroy
971
+ }
972
+
973
+ bbox =Gtk::HBox::new(FALSE, 10)
974
+ bbox.border_width=10
975
+ bbox.show
976
+
977
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
978
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
979
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
980
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
981
+
982
+ vbox.add(table)
983
+ vbox.add(@jmxtv)
984
+ separator = Gtk::HSeparator::new()
985
+ separator.show
986
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
987
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
988
+
989
+ addjmxwin.show_all
990
+ end
991
+
992
+ def get_syslog_refs_left()
993
+ syslog_ref_list_local=[]
994
+ @syslogview.model.each {|model, path, iter|
995
+ syslog_ref_list_local.push(iter[1].dup().to_s())
996
+ }
997
+ syslog_ref_list_local=SyslogRef::get_syslog_refs_name()-syslog_ref_list_local
998
+ return syslog_ref_list_local
999
+ end
1000
+
1001
+ def add_monitored_snmptrap(mode=nil)
1002
+ snmptrapref=nil
1003
+ severity=nil
1004
+
1005
+ #list already snmptrap ref configured
1006
+ snmptrap_ref_list=[]
1007
+
1008
+ if mode
1009
+ if @snmptrapview.selection.selected == nil
1010
+ return
1011
+ end
1012
+ title="Edit monitored SNMP Trap Ref"
1013
+ iter=@snmptrapview.selection.selected
1014
+ snmptrapref=iter[1]
1015
+ severity=iter[2]
1016
+ else
1017
+ title="Add monitored SNMP Trap Ref"
1018
+ snmptrap_ref_list=get_snmptrap_refs_left()
1019
+ if snmptrap_ref_list.size() == 0
1020
+ return
1021
+ end
1022
+ end
1023
+
1024
+ addsnmptrapwin=Gtk::Window.new
1025
+ addsnmptrapwin.set_title(title)
1026
+ addsnmptrapwin.set_size_request(340, -1)
1027
+ addsnmptrapwin.set_modal(true)
1028
+
1029
+ addsnmptrapwin.signal_connect("key_press_event") {|w,e|
1030
+ if e.keyval == Gdk::Keyval::GDK_Escape
1031
+ addsnmptrapwin.destroy
1032
+ end
1033
+ }
1034
+
1035
+ frame = Gtk::Frame::new
1036
+ frame.border_width=10
1037
+ frame.show
1038
+ vbox_root=Gtk::VBox::new
1039
+ vbox_root.show
1040
+ addsnmptrapwin.add vbox_root
1041
+ vbox_root.add frame
1042
+ vbox = Gtk::VBox.new
1043
+ vbox.show
1044
+ frame.add vbox
1045
+
1046
+ table = Gtk::Table.new(4,2,false)
1047
+ table.show
1048
+
1049
+ label_snmptrapref = Gtk::Label.new "SNMP Trap Ref"
1050
+ label_snmptrapref.show
1051
+ entry_snmptrapref = Gtk::ComboBox.new
1052
+ snmp_trap_list=snmptrap_ref_list
1053
+ if mode
1054
+ snmp_trap_list = SnmpTrapRef::get_snmptrap_refs_name()
1055
+ end
1056
+ snmp_trap_list.each {|slist|
1057
+ entry_snmptrapref.append_text(slist)
1058
+ }
1059
+ if snmptrapref
1060
+ ind = snmp_trap_list.index(snmptrapref)
1061
+ entry_snmptrapref.set_active(ind) if ind
1062
+ else
1063
+ entry_snmptrapref.set_active(0)
1064
+ end
1065
+ entry_snmptrapref.set_size_request(150, -1)
1066
+ entry_snmptrapref.show
1067
+ bbox=Gtk::HButtonBox.new
1068
+ bbox.show
1069
+ bbox.add entry_snmptrapref
1070
+ table.attach(label_snmptrapref,0,1,0,1)
1071
+ table.attach(bbox,1,2,0,1)
1072
+
1073
+ label_sev = Gtk::Label.new "Severity"
1074
+ label_sev.show
1075
+ entry_sev = Gtk::ComboBox.new
1076
+ $status[0..3].each {|sev|
1077
+ entry_sev.append_text(sev)
1078
+ }
1079
+ entry_sev.signal_connect("changed") {
1080
+ entry_sev.child.set_background_gdk(@color_style[entry_sev.active])
1081
+ }
1082
+ ind = 0
1083
+ if severity
1084
+ ind = $status[0..3].index(severity)
1085
+ entry_sev.set_active(ind) if ind
1086
+ else
1087
+ entry_sev.set_active(ind)
1088
+ end
1089
+ entry_sev.child.set_background_gdk(@color_style[ind])
1090
+
1091
+ entry_sev.set_size_request(150, -1)
1092
+ entry_sev.show
1093
+ bbox=Gtk::HButtonBox.new
1094
+ bbox.show
1095
+ bbox.add entry_sev
1096
+ table.attach(label_sev,0,1,1,2)
1097
+ table.attach(bbox,1,2,1,2)
1098
+
1099
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
1100
+ ok_button.show
1101
+ ok_button.signal_connect("clicked") {
1102
+ iter=nil
1103
+ if mode
1104
+ #here we just modify this service
1105
+ iter=@snmptrapview.selection.selected
1106
+ else
1107
+ iter=@snmptrapview.model.append
1108
+ iter[0] = 1
1109
+ end
1110
+ iter[1] = entry_snmptrapref.active_text
1111
+ iter[2] = entry_sev.active_text
1112
+ iter[3] = $snmptrap_refs[ entry_snmptrapref.active_text].description
1113
+ addsnmptrapwin.destroy()
1114
+ }
1115
+
1116
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
1117
+ cancel_button.show
1118
+ cancel_button.signal_connect("clicked") {
1119
+ addsnmptrapwin.destroy
1120
+ }
1121
+
1122
+ bbox =Gtk::HBox::new(FALSE, 10)
1123
+ bbox.border_width=10
1124
+ bbox.show
1125
+
1126
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
1127
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
1128
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
1129
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
1130
+
1131
+ vbox.add(table)
1132
+ separator = Gtk::HSeparator::new()
1133
+ separator.show
1134
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
1135
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
1136
+
1137
+ addsnmptrapwin.show
1138
+ end
1139
+
1140
+ def get_snmptrap_refs_left()
1141
+ snmptrap_ref_list=[]
1142
+ @snmptrapview.model.each {|model, path, iter|
1143
+ snmptrap_ref_list.push(iter[1].dup().to_s())
1144
+ }
1145
+ snmptrap_ref_list=SnmpTrapRef::get_snmptrap_refs_name()-snmptrap_ref_list
1146
+ return snmptrap_ref_list
1147
+ end
1148
+
1149
+ def add_monitored_syslog(mode=nil)
1150
+ syslogpref=nil
1151
+ severity=nil
1152
+
1153
+ #list already syslog ref configured
1154
+ syslog_ref_list=[]
1155
+
1156
+ if mode
1157
+ if @syslogview.selection.selected == nil
1158
+ return
1159
+ end
1160
+ title="Edit monitored Syslog Ref"
1161
+ iter=@syslogview.selection.selected
1162
+ syslogpref=iter[1]
1163
+ severity=iter[2]
1164
+ else
1165
+ title="Add monitored Syslog Ref"
1166
+ syslog_ref_list=get_syslog_refs_left()
1167
+ if syslog_ref_list.size() == 0
1168
+ return
1169
+ end
1170
+ end
1171
+
1172
+ addsyslogwin=Gtk::Window.new
1173
+ addsyslogwin.set_title(title)
1174
+ addsyslogwin.set_size_request(340, -1)
1175
+ addsyslogwin.set_modal(true)
1176
+
1177
+ addsyslogwin.signal_connect("key_press_event") {|w,e|
1178
+ if e.keyval == Gdk::Keyval::GDK_Escape
1179
+ addsyslogwin.destroy
1180
+ end
1181
+ }
1182
+
1183
+ frame = Gtk::Frame::new
1184
+ frame.border_width=10
1185
+ frame.show
1186
+ vbox_root=Gtk::VBox::new
1187
+ vbox_root.show
1188
+ addsyslogwin.add vbox_root
1189
+ vbox_root.add frame
1190
+ vbox = Gtk::VBox.new
1191
+ vbox.show
1192
+ frame.add vbox
1193
+
1194
+ table = Gtk::Table.new(4,2,false)
1195
+ table.show
1196
+
1197
+ label_oidref = Gtk::Label.new "Syslog Ref"
1198
+ label_oidref.show
1199
+ entry_oidref = Gtk::ComboBox.new
1200
+ if mode
1201
+ syslog_ref_list = SyslogRef::get_syslog_refs_name()
1202
+ end
1203
+
1204
+ syslog_ref_list.each {|ref|
1205
+ entry_oidref.append_text(ref)
1206
+ }
1207
+ if syslogpref
1208
+ ind = syslog_ref_list.index(syslogpref)
1209
+ entry_oidref.set_active(ind) if ind
1210
+ else
1211
+ entry_oidref.set_active(0)
1212
+ end
1213
+ entry_oidref.set_size_request(150, -1)
1214
+ entry_oidref.show
1215
+ bbox=Gtk::HButtonBox.new
1216
+ bbox.show
1217
+ bbox.add entry_oidref
1218
+ table.attach(label_oidref,0,1,0,1)
1219
+ table.attach(bbox,1,2,0,1)
1220
+
1221
+ label_sev = Gtk::Label.new "Severity"
1222
+ label_sev.show
1223
+ entry_sev = Gtk::ComboBox.new
1224
+ sevs = [MAP_SYSLOG_SEV]+$status[0..3]
1225
+ sevs.each {|sev|
1226
+ entry_sev.append_text(sev)
1227
+ }
1228
+ entry_sev.signal_connect("changed") {
1229
+ if entry_sev.active > 0
1230
+ entry_sev.child.set_background_gdk(@color_style[entry_sev.active-1])
1231
+ end
1232
+ }
1233
+ ind = 0
1234
+ if severity
1235
+ ind = sevs.index(severity)
1236
+ entry_sev.set_active(ind) if ind
1237
+ else
1238
+ entry_sev.set_active(ind)
1239
+ end
1240
+ if ind > 0
1241
+ entry_sev.child.set_background_gdk(@color_style[ind-1])
1242
+ end
1243
+
1244
+ entry_sev.set_size_request(150, -1)
1245
+ entry_sev.show
1246
+ bbox=Gtk::HButtonBox.new
1247
+ bbox.show
1248
+ bbox.add entry_sev
1249
+ table.attach(label_sev,0,1,1,2)
1250
+ table.attach(bbox,1,2,1,2)
1251
+
1252
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
1253
+ ok_button.show
1254
+ ok_button.signal_connect("clicked") {
1255
+ iter=nil
1256
+ if mode
1257
+ #here we just modify this service
1258
+ iter=@syslogview.selection.selected
1259
+ else
1260
+ iter=@syslogview.model.append
1261
+ iter[0] = 1
1262
+ end
1263
+ iter[1] = entry_oidref.active_text
1264
+ iter[2] = entry_sev.active_text
1265
+ iter[3] = $syslog_refs[entry_oidref.active_text].description
1266
+ addsyslogwin.destroy()
1267
+ }
1268
+
1269
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
1270
+ cancel_button.show
1271
+ cancel_button.signal_connect("clicked") {
1272
+ addsyslogwin.destroy
1273
+ }
1274
+
1275
+ bbox =Gtk::HBox::new(FALSE, 10)
1276
+ bbox.border_width=10
1277
+ bbox.show
1278
+
1279
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
1280
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
1281
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
1282
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
1283
+
1284
+ vbox.add(table)
1285
+ separator = Gtk::HSeparator::new()
1286
+ separator.show
1287
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
1288
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
1289
+
1290
+ addsyslogwin.show
1291
+ end
1292
+
1293
+ def edit_monitored_service()
1294
+ add_monitored_service("edit")
1295
+ end
1296
+
1297
+ def edit_monitored_snmp()
1298
+ add_monitored_snmp("edit")
1299
+ end
1300
+
1301
+ def edit_monitored_wmi()
1302
+ add_monitored_wmi("edit")
1303
+ end
1304
+
1305
+ def edit_monitored_jmx(node)
1306
+ add_monitored_jmx(node, "edit")
1307
+ end
1308
+
1309
+ def edit_monitored_syslog()
1310
+ add_monitored_syslog("edit")
1311
+ end
1312
+ def edit_monitored_snmptrap()
1313
+ add_monitored_snmptrap("edit")
1314
+ end
1315
+
1316
+ def fill_port_view(node)
1317
+ @treeview.show
1318
+ @vbox_ports.add(@treeview)
1319
+ row_mon_port=[]
1320
+ if @scanned_port_list != nil
1321
+ for x in 1..@scanned_port_list.size
1322
+ row=[]
1323
+ plattr=@scanned_port_list[x-1].split(/[\ ]+/)
1324
+ port=plattr[0].to_i()
1325
+ proto=plattr[1]
1326
+ name=plattr[2]
1327
+
1328
+ #we verify if we monitor this port
1329
+ cbutton=0
1330
+ if node.is_service_monitor(proto, port)
1331
+ cbutton=1
1332
+ end
1333
+ if name == ""
1334
+ service = "?"
1335
+ else
1336
+ service = name
1337
+ end
1338
+ sev = $status[node.get_service_sev(proto, port)]
1339
+ @cbutton.push(cbutton)
1340
+ row.push(cbutton)
1341
+ row.push(proto)
1342
+ row.push(port)
1343
+ row.push(service)
1344
+ row.push(sev)
1345
+ row_mon_port.push(row)
1346
+ end
1347
+ end
1348
+ row_mon_port.each do |cb, proto, port, service, sev|
1349
+ iter = @treeview.model.append
1350
+ iter[0] = cb
1351
+ iter[1] = proto
1352
+ iter[2] = port
1353
+ iter[3] = service
1354
+ iter[4] = sev
1355
+ end
1356
+ end
1357
+
1358
+
1359
+
1360
+ def fill_port_list(node)
1361
+
1362
+ #we need to append all monitored ports of service hash
1363
+ #@scanned_port_list is ordered as udp first and port number ...
1364
+ if node.service != nil
1365
+ if @scanned_port_list == nil
1366
+ @scanned_port_list=[]
1367
+ node.service.sort{|s1,s2| s1[0].split('/')[1].to_i()<=>s2[0].split('/')[1].to_i()}.each {|w,serv|
1368
+ str="#{serv.port} #{serv.protocol} "
1369
+ @scanned_port_list.push "#{str} #{serv.name}"
1370
+ }
1371
+ else
1372
+ node.service.each_value {|serv|
1373
+ str="#{serv.port} #{serv.protocol} "
1374
+ if !include_regex_str("^#{str}",@scanned_port_list)
1375
+ # we need to add it correctly
1376
+ plistbis=[]
1377
+ i=0
1378
+ for pt in @scanned_port_list
1379
+ ptt = pt.split(/ /)
1380
+ if ptt[1] == serv.protocol && serv.port.to_i < ptt[0].to_i
1381
+ plistbis.push "#{str} #{serv.name}"
1382
+ for port in @scanned_port_list[i..@scanned_port_list.size-1]
1383
+ plistbis.push port
1384
+ end
1385
+ break
1386
+ else
1387
+ if ptt[1] != serv.protocol
1388
+ if serv.protocol == "udp"
1389
+ plistbis.push "#{str} #{serv.name}"
1390
+ for port in @scanned_port_list[i..@scanned_port_list.size-1]
1391
+ plistbis.push port
1392
+ end
1393
+ break
1394
+ else #its ptt[1] udp the first
1395
+ plistbis.push pt
1396
+ end
1397
+ else
1398
+ plistbis.push pt
1399
+ end
1400
+ end
1401
+ i+=1
1402
+ end
1403
+ @scanned_port_list=plistbis
1404
+ end
1405
+ }
1406
+ end
1407
+ end
1408
+ end
1409
+
1410
+ def scan_port_now(node)
1411
+
1412
+ @scan_port_th=Thread.new {
1413
+ labelwait=Gtk::Label.new("Waiting scanning ports ...")
1414
+ labelwait.show
1415
+ @treeview.hide
1416
+ @vbox_ports.remove(@treeview)
1417
+ @treeview.model.clear()
1418
+ @vbox_ports.add(labelwait)
1419
+ @scanned_port_list=listport(node.ip).split(/\n/)
1420
+ fill_port_list(node)
1421
+ labelwait.hide
1422
+ @vbox_ports.remove(labelwait)
1423
+ labelwait.destroy
1424
+ fill_port_view(node)
1425
+ }
1426
+ end
1427
+
1428
+
1429
+ ###############################################################
1430
+ def initialize (node)
1431
+
1432
+ @color_style = [$red, $orange, $yellow, $blue]
1433
+
1434
+ window=Gtk::Window.new
1435
+ #we need window to be a class variable to be accessible from account_frame sub error window
1436
+ @window=window
1437
+ window.set_transient_for($win)
1438
+ window.set_title("Node property of "+node.ip+"/#{node.netmask}")
1439
+ window.set_size_request(450, 450)
1440
+ window.set_modal(true)
1441
+ vboxb = Gtk::VBox::new
1442
+ window.add vboxb
1443
+ vboxb.show
1444
+
1445
+ notebook = Gtk::Notebook::new()
1446
+ notebook.set_tab_pos(Gtk::POS_TOP)
1447
+ vboxb.add notebook
1448
+ notebook.show
1449
+
1450
+ ################################ status tab #########
1451
+
1452
+ frame = Gtk::Frame::new
1453
+ frame.border_width=10
1454
+ frame.set_size_request(300, 290)
1455
+ frame.show
1456
+
1457
+ vbox = Gtk::VBox::new(false,2)
1458
+ vbox.show
1459
+ frame.add vbox
1460
+
1461
+ frame_st=Gtk::Frame.new("General")
1462
+ frame_st.border_width=10
1463
+ table_st = Gtk::Table.new(1,2,false)
1464
+ table_st.show
1465
+ label_status = Gtk::Label.new "Current"
1466
+ label_status.show
1467
+ entry_status = Gtk::Entry.new
1468
+ tstyle=Gtk::Style.new
1469
+ rgb=hexa_to_rgb_color($status_color[$status_value[node.status]])
1470
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1471
+ entry_status.set_style(tstyle)
1472
+ entry_status.set_text($status[$status_value[node.status]])
1473
+ entry_status.set_size_request(100, -1)
1474
+ entry_status.set_xalign(0.5);
1475
+ entry_status.set_editable false
1476
+ entry_status.show
1477
+ bbox=Gtk::HButtonBox.new
1478
+ bbox.show
1479
+ bbox.add entry_status
1480
+ table_st.attach(label_status,0,1,0,1)
1481
+ table_st.attach(bbox,1,2,0,1)
1482
+ frame_st.add table_st
1483
+ frame_st.show
1484
+ vbox.add frame_st
1485
+
1486
+ frame_dt=Gtk::Frame.new("Details")
1487
+ frame_dt.border_width=10
1488
+ table = Gtk::Table.new(8,2,false)
1489
+ table.show
1490
+
1491
+ label_avail = Gtk::Label.new "Availability"
1492
+ label_avail.show
1493
+ entry_avail = Gtk::Entry.new
1494
+ tstyle=Gtk::Style.new
1495
+ rgb=nil
1496
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.avail_sev)])
1497
+ entry_avail.set_text($status[$status_value.index(node.avail_sev)])
1498
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1499
+ entry_avail.set_style(tstyle)
1500
+ entry_avail.set_size_request(100, -1)
1501
+ entry_avail.set_xalign(0.5);
1502
+ entry_avail.set_editable false
1503
+ entry_avail.show
1504
+ bbox=Gtk::HButtonBox.new
1505
+ bbox.show
1506
+ bbox.add entry_avail
1507
+ table.attach(label_avail,0,1,0,1)
1508
+ table.attach(bbox,1,2,0,1)
1509
+
1510
+ label_service = Gtk::Label.new "Service"
1511
+ label_service.show
1512
+ entry_service = Gtk::Entry.new
1513
+ tstyle=Gtk::Style.new
1514
+ rgb=nil
1515
+ if $config.port_mon
1516
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.service_sev)])
1517
+ entry_service.set_text($status[$status_value.index(node.service_sev)])
1518
+ else
1519
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1520
+ entry_service.set_text($status[$status_value.index(UNMANAGED)])
1521
+ end
1522
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1523
+ entry_service.set_style(tstyle)
1524
+ entry_service.set_size_request(100, -1)
1525
+ entry_service.set_xalign(0.5);
1526
+ entry_service.set_editable false
1527
+ entry_service.show
1528
+ bbox=Gtk::HButtonBox.new
1529
+ bbox.show
1530
+ bbox.add entry_service
1531
+ table.attach(label_service,0,1,1,2)
1532
+ table.attach(bbox,1,2,1,2)
1533
+
1534
+ label_snmp = Gtk::Label.new "SNMP"
1535
+ label_snmp.show
1536
+ entry_snmp = Gtk::Entry.new
1537
+ tstyle=Gtk::Style.new
1538
+ rgb=nil
1539
+ if $config.snmp_mon
1540
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.snmp_sev)])
1541
+ entry_snmp.set_text($status[$status_value.index(node.snmp_sev)])
1542
+ else
1543
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1544
+ entry_snmp.set_text($status[$status_value.index(UNMANAGED)])
1545
+ end
1546
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1547
+ entry_snmp.set_style(tstyle)
1548
+
1549
+ entry_snmp.set_size_request(100, -1)
1550
+ entry_snmp.set_xalign(0.5);
1551
+ entry_snmp.set_editable false
1552
+ entry_snmp.show
1553
+ bbox=Gtk::HButtonBox.new
1554
+ bbox.show
1555
+ bbox.add entry_snmp
1556
+ table.attach(label_snmp,0,1,2,3)
1557
+ table.attach(bbox,1,2,2,3)
1558
+
1559
+ label_wmi = Gtk::Label.new "WMI"
1560
+ label_wmi.show
1561
+ entry_wmi = Gtk::Entry.new
1562
+ tstyle=Gtk::Style.new
1563
+ rgb=nil
1564
+ if $config.wmi_mon
1565
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.wmi_sev)])
1566
+ entry_wmi.set_text($status[$status_value.index(node.wmi_sev)])
1567
+ else
1568
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1569
+ entry_wmi.set_text($status[$status_value.index(UNMANAGED)])
1570
+ end
1571
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1572
+ entry_wmi.set_style(tstyle)
1573
+
1574
+ entry_wmi.set_size_request(100, -1)
1575
+ entry_wmi.set_xalign(0.5);
1576
+ entry_wmi.set_editable false
1577
+ entry_wmi.show
1578
+ bbox=Gtk::HButtonBox.new
1579
+ bbox.show
1580
+ bbox.add entry_wmi
1581
+ table.attach(label_wmi,0,1,3,4)
1582
+ table.attach(bbox,1,2,3,4)
1583
+
1584
+ label_jmx = Gtk::Label.new "JMX"
1585
+ label_jmx.show
1586
+ entry_jmx = Gtk::Entry.new
1587
+ tstyle=Gtk::Style.new
1588
+ rgb=nil
1589
+ if $config.jmx_mon
1590
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.jmx_sev)])
1591
+ entry_jmx.set_text($status[$status_value.index(node.jmx_sev)])
1592
+ else
1593
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1594
+ entry_jmx.set_text($status[$status_value.index(UNMANAGED)])
1595
+ end
1596
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1597
+ entry_jmx.set_style(tstyle)
1598
+
1599
+ entry_jmx.set_size_request(100, -1)
1600
+ entry_jmx.set_xalign(0.5);
1601
+ entry_jmx.set_editable false
1602
+ entry_jmx.show
1603
+ bbox=Gtk::HButtonBox.new
1604
+ bbox.show
1605
+ bbox.add entry_jmx
1606
+ table.attach(label_jmx,0,1,4,5)
1607
+ table.attach(bbox,1,2,4,5)
1608
+
1609
+ label_custom = Gtk::Label.new "Custom"
1610
+ label_custom.show
1611
+ entry_custom = Gtk::Entry.new
1612
+ tstyle=Gtk::Style.new
1613
+ rgb=nil
1614
+ if $config.custom_mon
1615
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.custom_sev)])
1616
+ entry_custom.set_text($status[$status_value.index(node.custom_sev)])
1617
+ else
1618
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1619
+ entry_custom.set_text($status[$status_value.index(UNMANAGED)])
1620
+ end
1621
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1622
+ entry_custom.set_style(tstyle)
1623
+
1624
+ entry_custom.set_size_request(100, -1)
1625
+ entry_custom.set_xalign(0.5)
1626
+ entry_custom.set_editable false
1627
+ entry_custom.show
1628
+ bbox=Gtk::HButtonBox.new
1629
+ bbox.show
1630
+ bbox.add entry_custom
1631
+ table.attach(label_custom,0,1,5,6)
1632
+ table.attach(bbox,1,2,5,6)
1633
+
1634
+ label_syslog = Gtk::Label.new "Syslog"
1635
+ label_syslog.show
1636
+ entry_syslog = Gtk::Entry.new
1637
+ tstyle=Gtk::Style.new
1638
+ rgb=nil
1639
+ if $config.syslog_mon
1640
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.syslog_sev)])
1641
+ entry_syslog.set_text($status[$status_value.index(node.syslog_sev)])
1642
+ else
1643
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1644
+ entry_syslog.set_text($status[$status_value.index(UNMANAGED)])
1645
+ end
1646
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1647
+ entry_syslog.set_style(tstyle)
1648
+ entry_syslog.set_size_request(100, -1)
1649
+ entry_syslog.set_xalign(0.5)
1650
+ entry_syslog.set_editable false
1651
+ entry_syslog.show
1652
+ bbox=Gtk::HButtonBox.new
1653
+ bbox.show
1654
+ bbox.add entry_syslog
1655
+ table.attach(label_syslog,0,1,6,7)
1656
+ table.attach(bbox,1,2,6,7)
1657
+
1658
+ label_trap = Gtk::Label.new "SNMP Trap"
1659
+ label_trap.show
1660
+ entry_trap = Gtk::Entry.new
1661
+ tstyle=Gtk::Style.new
1662
+ rgb=nil
1663
+ if $config.snmptrap_mon
1664
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.trap_sev)])
1665
+ entry_trap.set_text($status[$status_value.index(node.trap_sev)])
1666
+ else
1667
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1668
+ entry_trap.set_text($status[$status_value.index(UNMANAGED)])
1669
+ end
1670
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1671
+ entry_trap.set_style(tstyle)
1672
+ entry_trap.set_size_request(100, -1)
1673
+ entry_trap.set_xalign(0.5)
1674
+ entry_trap.set_editable false
1675
+ entry_trap.show
1676
+ bbox=Gtk::HButtonBox.new
1677
+ bbox.show
1678
+ bbox.add entry_trap
1679
+ table.attach(label_trap,0,1,7,8)
1680
+ table.attach(bbox,1,2,7,8)
1681
+
1682
+ frame_dt.add table
1683
+ frame_dt.show
1684
+ vbox.add frame_dt
1685
+
1686
+ #update node sev periodically
1687
+ refresh_node_sev_display=Thread.new {
1688
+ while (window != nil) do
1689
+ sleep(10)
1690
+ begin
1691
+ rgb=hexa_to_rgb_color($status_color[$status_value[node.status]])
1692
+ Gtk.thread_protect do
1693
+ tstyle=Gtk::Style.new
1694
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1695
+ entry_status.set_style(tstyle)
1696
+ entry_status.set_text($status[$status_value[node.status]])
1697
+
1698
+ rgb=nil
1699
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.avail_sev)])
1700
+ entry_avail.set_text($status[$status_value.index(node.avail_sev)])
1701
+ tstyle=Gtk::Style.new
1702
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1703
+ entry_avail.set_style(tstyle)
1704
+
1705
+ rgb=nil
1706
+ if $config.port_mon
1707
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.service_sev)])
1708
+ entry_service.set_text($status[$status_value.index(node.service_sev)])
1709
+ else
1710
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1711
+ entry_service.set_text($status[$status_value.index(UNMANAGED)])
1712
+ end
1713
+ tstyle=Gtk::Style.new
1714
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1715
+ entry_service.set_style(tstyle)
1716
+
1717
+ rgb=nil
1718
+ if $config.snmp_mon || $config.wmi_mon
1719
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.snmp_sev)])
1720
+ entry_snmp.set_text($status[$status_value.index(node.snmp_sev)])
1721
+ else
1722
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1723
+ entry_snmp.set_text($status[$status_value.index(UNMANAGED)])
1724
+ end
1725
+ tstyle=Gtk::Style.new
1726
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1727
+ entry_snmp.set_style(tstyle)
1728
+
1729
+ rgb=nil
1730
+ if $config.wmi_mon
1731
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.wmi_sev)])
1732
+ entry_wmi.set_text($status[$status_value.index(node.wmi_sev)])
1733
+ else
1734
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1735
+ entry_wmi.set_text($status[$status_value.index(UNMANAGED)])
1736
+ end
1737
+ tstyle=Gtk::Style.new
1738
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1739
+ entry_wmi.set_style(tstyle)
1740
+
1741
+ rgb=nil
1742
+ if $config.jmx_mon
1743
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.jmx_sev)])
1744
+ entry_jmx.set_text($status[$status_value.index(node.jmx_sev)])
1745
+ else
1746
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1747
+ entry_jmx.set_text($status[$status_value.index(UNMANAGED)])
1748
+ end
1749
+ tstyle=Gtk::Style.new
1750
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1751
+ entry_jmx.set_style(tstyle)
1752
+
1753
+ rgb=nil
1754
+ if $config.custom_mon
1755
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.custom_sev)])
1756
+ entry_custom.set_text($status[$status_value.index(node.custom_sev)])
1757
+ else
1758
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1759
+ entry_custom.set_text($status[$status_value.index(UNMANAGED)])
1760
+ end
1761
+ tstyle=Gtk::Style.new
1762
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1763
+ entry_custom.set_style(tstyle)
1764
+
1765
+ rgb=nil
1766
+ if $config.syslog_mon
1767
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.syslog_sev)])
1768
+ entry_syslog.set_text($status[$status_value.index(node.syslog_sev)])
1769
+ else
1770
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1771
+ entry_syslog.set_text($status[$status_value.index(UNMANAGED)])
1772
+ end
1773
+ tstyle=Gtk::Style.new
1774
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1775
+ entry_syslog.set_style(tstyle)
1776
+
1777
+ rgb=nil
1778
+ if $config.snmptrap_mon
1779
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(node.trap_sev)])
1780
+ entry_trap.set_text($status[$status_value.index(node.trap_sev)])
1781
+ else
1782
+ rgb=hexa_to_rgb_color($status_color[$status_value.index(UNMANAGED)])
1783
+ entry_trap.set_text($status[$status_value.index(UNMANAGED)])
1784
+ end
1785
+ tstyle=Gtk::Style.new
1786
+ tstyle.set_base(Gtk::STATE_NORMAL, rgb.red, rgb.green, rgb.blue)
1787
+ entry_trap.set_style(tstyle)
1788
+ end
1789
+ rescue Exception => msg
1790
+ $log.debug("Exception in refresh_node_sev_display for #{node.ip}: #{msg}")
1791
+ end
1792
+ end
1793
+ }
1794
+
1795
+ hbox = Gtk::HBox.new(FALSE, 1)
1796
+ hbox.add Gtk::Image.new(Gtk::Stock::DIALOG_WARNING, Gtk::IconSize::MENU)
1797
+ hbox.add Gtk::Label::new("Status")
1798
+ hbox.show_all
1799
+ notebook.append_page frame, hbox
1800
+
1801
+ window.signal_connect("key_press_event") {|w,e|
1802
+ if e.keyval == Gdk::Keyval::GDK_Escape
1803
+ #we rollback here the account from the db to the @account hash
1804
+ node.init_account_from_db()
1805
+ Thread.kill(@scan_port_th) unless @scan_port_th == nil
1806
+ Gtk.thread_flush
1807
+ Thread.kill(refresh_node_sev_display)
1808
+ Gtk.thread_flush
1809
+ window.destroy
1810
+ end
1811
+ }
1812
+
1813
+ #########################################################################
1814
+
1815
+ # frame = Gtk::Frame::new
1816
+ # frame.border_width=10
1817
+ # frame.show
1818
+
1819
+ notebook_info = Gtk::Notebook::new()
1820
+ notebook_info.show
1821
+
1822
+ frame_stored = Gtk::Frame::new
1823
+ frame_stored.border_width=10
1824
+ frame_stored.set_size_request(300, 290)
1825
+ frame_stored.show
1826
+
1827
+ table = Gtk::Table.new(10,2,false)
1828
+ table.show
1829
+
1830
+ vbox = Gtk::VBox.new
1831
+ vbox.show
1832
+ frame_stored.add vbox
1833
+ vbox.add table
1834
+
1835
+ label_icon = Gtk::Label.new "Icon"
1836
+ label_icon.show
1837
+ entry_type = Gtk::ImageComboList.new("type", "#{node.type}")
1838
+ entry_type.set_size_request(200, -1)
1839
+ entry_type.show
1840
+
1841
+ bbox=Gtk::HButtonBox.new
1842
+ bbox.show
1843
+ bbox.add entry_type
1844
+
1845
+ table.attach(label_icon,0,1,0,1)
1846
+ table.attach(bbox,1,2,0,1)
1847
+
1848
+ label_xy = Gtk::Label.new "X:Y"
1849
+ label_xy.show
1850
+ entry_x = Gtk::Entry.new
1851
+ entry_x.set_editable false
1852
+ entry_x.set_text "#{node.x.to_i}"
1853
+ entry_x.set_size_request(96, -1)
1854
+ entry_x.show
1855
+ bbox=Gtk::HButtonBox.new
1856
+ bbox.set_layout_style Gtk::ButtonBox::EDGE
1857
+ bbox.show
1858
+ bbox.add entry_x
1859
+ table.attach(label_xy,0,1,1,2)
1860
+
1861
+ entry_y = Gtk::Entry.new
1862
+ entry_y.set_editable false
1863
+ entry_y.set_text "#{node.y.to_i}"
1864
+ entry_y.set_size_request(96, -1)
1865
+ entry_y.show
1866
+
1867
+ bbox.add entry_y
1868
+
1869
+ table.attach(bbox,1,2,1,2,Gtk::EXPAND)
1870
+
1871
+ label_ip = Gtk::Label.new "IP"
1872
+ label_ip.show
1873
+ entry_ip = Gtk::Entry.new
1874
+ entry_ip.set_editable false
1875
+ entry_ip.set_text(node.ip)
1876
+ entry_ip.set_size_request(200, -1)
1877
+ entry_ip.show
1878
+ bbox=Gtk::HButtonBox.new
1879
+ bbox.show
1880
+ bbox.add entry_ip
1881
+
1882
+ table.attach(label_ip,0,1,2,3)
1883
+ table.attach(bbox,1,2,2,3)
1884
+
1885
+ label_mask = Gtk::Label.new "Mask"
1886
+ label_mask.show
1887
+ entry_mask = Gtk::Entry.new
1888
+ entry_mask.set_text node.netmask.to_s
1889
+ entry_mask.set_size_request(200, -1)
1890
+ entry_mask.show
1891
+ bbox=Gtk::HButtonBox.new
1892
+ bbox.show
1893
+ bbox.add entry_mask
1894
+
1895
+ table.attach(label_mask,0,1,3,4)
1896
+ table.attach(bbox,1,2,3,4)
1897
+
1898
+ label_map = Gtk::Label.new "Network"
1899
+ label_map.show
1900
+ entry_map = Gtk::Entry.new
1901
+ entry_map.set_editable false
1902
+ entry_map.set_text(node.map)
1903
+ entry_map.set_size_request(200, -1)
1904
+ entry_map.show
1905
+ bbox=Gtk::HButtonBox.new
1906
+ bbox.show
1907
+ bbox.add entry_map
1908
+
1909
+ table.attach(label_map,0,1,4,5)
1910
+ table.attach(bbox,1,2,4,5)
1911
+
1912
+ label_mac = Gtk::Label.new "MAC"
1913
+ label_mac.show
1914
+ entry_mac = Gtk::Entry.new
1915
+ entry_mac.set_text(node.mac)
1916
+ entry_mac.set_size_request(200, -1)
1917
+ entry_mac.show
1918
+ bbox=Gtk::HButtonBox.new
1919
+ bbox.show
1920
+ bbox.add entry_mac
1921
+ table.attach(label_mac,0,1,5,6)
1922
+ table.attach(bbox,1,2,5,6)
1923
+
1924
+ label_name = Gtk::Label.new "DNS Name"
1925
+ label_name.show
1926
+ entry_name = Gtk::Entry.new
1927
+ #local host can have name filled by facter and not the dns_name
1928
+ if node.hostname?() and !node.dns_name?()
1929
+ entry_name.set_text(node.name)
1930
+ else
1931
+ entry_name.set_text(node.dns_name)
1932
+ end
1933
+ entry_name.set_size_request(200, -1)
1934
+ entry_name.show
1935
+ bbox=Gtk::HButtonBox.new
1936
+ bbox.show
1937
+ bbox.add entry_name
1938
+
1939
+ table.attach(label_name,0,1,6,7)
1940
+ table.attach(bbox,1,2,6,7)
1941
+
1942
+ label_netbiosname = Gtk::Label.new "Netbios Name"
1943
+ label_netbiosname.show
1944
+ entry_netbiosname = Gtk::Entry.new
1945
+ entry_netbiosname.set_text(node.netbios_name)
1946
+ entry_netbiosname.set_size_request(200, -1)
1947
+ entry_netbiosname.show
1948
+ bbox=Gtk::HButtonBox.new
1949
+ bbox.show
1950
+ bbox.add entry_netbiosname
1951
+
1952
+ table.attach(label_netbiosname,0,1,7,8)
1953
+ table.attach(bbox,1,2,7,8)
1954
+
1955
+ label_os = Gtk::Label.new "OS"
1956
+ label_os.show
1957
+ entry_os = Gtk::ImageComboList.new("os", "#{node.os}")
1958
+ entry_os.set_size_request(200, -1)
1959
+ entry_os.show
1960
+ bbox=Gtk::HButtonBox.new
1961
+ bbox.show
1962
+ bbox.add entry_os
1963
+
1964
+ table.attach(label_os,0,1,8,9)
1965
+ table.attach(bbox,1,2,8,9)
1966
+
1967
+ label_desc = Gtk::Label.new "Description"
1968
+ label_desc.show
1969
+ entry_desc = Gtk::Entry.new
1970
+ entry_desc.set_text(node.description)
1971
+ entry_desc.set_size_request(200, -1)
1972
+ entry_desc.show
1973
+ bbox=Gtk::HButtonBox.new
1974
+ bbox.show
1975
+ bbox.add entry_desc
1976
+
1977
+ table.attach(label_desc,0,1,9,10)
1978
+ table.attach(bbox,1,2,9,10)
1979
+
1980
+ hbox = Gtk::HBox.new(FALSE, 1)
1981
+ hbox.add Gtk::Image.new(Gtk::Stock::INFO, Gtk::IconSize::MENU)
1982
+ hbox.add Gtk::Label::new("Information")
1983
+ hbox.show_all
1984
+
1985
+ notebook_info.append_page frame_stored, Gtk::Label::new("Stored")
1986
+
1987
+ ########## SNMP tab
1988
+
1989
+ frame_snmp_info = Gtk::Frame::new
1990
+ frame_snmp_info.border_width=10
1991
+ frame_snmp_info.set_size_request(300, 290)
1992
+ frame_snmp_info.show
1993
+
1994
+ table = Gtk::Table.new(5,2,false)
1995
+ table.show
1996
+ frame_snmp_info.add table
1997
+
1998
+ label_desc = Gtk::Label.new "Description"
1999
+ label_desc.show
2000
+ entry_descsnmp = Gtk::Entry.new
2001
+ entry_descsnmp.set_editable false
2002
+
2003
+ def snmp_description(entry, node, read_community)
2004
+ if $config.snmp_mon
2005
+ entry.set_text "(polling...)"
2006
+ Thread.start {
2007
+ val=get_snmp_description(node)
2008
+ Gtk.thread_protect do
2009
+ begin
2010
+ entry.set_position 0
2011
+ entry.set_text val
2012
+ rescue Exception => msg
2013
+ $log.debug("Exception in snmp_description for #{node.ip}: #{msg}")
2014
+ end
2015
+ end
2016
+ }
2017
+ else
2018
+ Gtk.thread_protect do
2019
+ begin
2020
+ entry.set_sensitive(false)
2021
+ entry.set_text "(SNMP is disable)"
2022
+ rescue
2023
+ $log.debug("Exception in snmp_description for #{node.ip}: #{msg}")
2024
+ end
2025
+ end
2026
+ end
2027
+ end
2028
+ if node.get_account_id("snmp")
2029
+ login, password = node.get_account_id("snmp")
2030
+ snmp_description(entry_descsnmp, node, login)
2031
+ end
2032
+ entry_descsnmp.set_size_request(200, -1)
2033
+ entry_descsnmp.show
2034
+ bbox=Gtk::HButtonBox.new
2035
+ bbox.show
2036
+ bbox.add entry_descsnmp
2037
+
2038
+ table.attach(label_desc,0,1,0,1)
2039
+ table.attach(bbox,1,2,0,1)
2040
+
2041
+ label_uptime = Gtk::Label.new "Uptime"
2042
+ label_uptime.show
2043
+ entry_uptime = Gtk::Entry.new
2044
+ entry_uptime.set_editable false
2045
+ def snmp_uptime(entry, node, read_community)
2046
+ if $config.snmp_mon
2047
+ entry.set_text "(polling...)"
2048
+ Thread.start {
2049
+ val=get_snmp_uptime(node)
2050
+ Gtk.thread_protect do
2051
+ begin
2052
+ entry.set_position 0
2053
+ entry.set_text val
2054
+ rescue Exception => msg
2055
+ $log.debug("Exception in snmp_uptime for #{node.ip}: #{msg}")
2056
+ end
2057
+ end
2058
+ }
2059
+ else
2060
+ begin
2061
+ entry.set_sensitive(false)
2062
+ entry.set_text "(SNMP is disable)"
2063
+ rescue Exception => msg
2064
+ $log.debug("Exception in snmp_uptime for #{node.ip}: #{msg}")
2065
+ end
2066
+ end
2067
+ end
2068
+ if node.get_account_id("snmp")
2069
+ login, password = node.get_account_id("snmp")
2070
+ snmp_uptime(entry_uptime, node, login)
2071
+ end
2072
+ entry_uptime.set_size_request(200, -1)
2073
+ entry_uptime.show
2074
+ bbox=Gtk::HButtonBox.new
2075
+ bbox.show
2076
+ bbox.add entry_uptime
2077
+
2078
+ table.attach(label_uptime,0,1,1,2)
2079
+ table.attach(bbox,1,2,1,2)
2080
+
2081
+ label_contact = Gtk::Label.new "Contact"
2082
+ label_contact.show
2083
+ entry_contact = Gtk::Entry.new
2084
+ entry_contact.set_editable false
2085
+ def snmp_contact(entry, node, read_community)
2086
+ if $config.snmp_mon
2087
+ entry.set_text "(polling...)"
2088
+ Thread.start {
2089
+ val=get_snmp_contact(node)
2090
+ Gtk.thread_protect do
2091
+ begin
2092
+ entry.set_position 0
2093
+ entry.set_text val
2094
+ rescue Exception => msg
2095
+ $log.debug("Exception in snmp_contact for #{node.ip}: #{msg}")
2096
+ end
2097
+ end
2098
+ }
2099
+ else
2100
+ Gtk.thread_protect do
2101
+ begin
2102
+ entry.set_sensitive(false)
2103
+ entry.set_text "(SNMP is disable)"
2104
+ rescue Exception => msg
2105
+ $log.debug("Exception in snmp_contact for #{node.ip}: #{msg}")
2106
+ end
2107
+ end
2108
+
2109
+ end
2110
+ end
2111
+ if node.get_account_id("snmp")
2112
+ login, password = node.get_account_id("snmp")
2113
+ snmp_contact(entry_contact, node, login)
2114
+ end
2115
+ entry_contact.set_size_request(200, -1)
2116
+ entry_contact.show
2117
+ bbox=Gtk::HButtonBox.new
2118
+ bbox.show
2119
+ bbox.add entry_contact
2120
+
2121
+ table.attach(label_contact,0,1,2,3)
2122
+ table.attach(bbox,1,2,2,3)
2123
+ label_location = Gtk::Label.new "Location"
2124
+ label_location.show
2125
+ entry_location = Gtk::Entry.new
2126
+ entry_location.set_editable false
2127
+ def snmp_location(entry, node, read_community)
2128
+ if $config.snmp_mon
2129
+ entry.set_text "(polling...)"
2130
+ Thread.start {
2131
+ val=get_snmp_location(node)
2132
+ Gtk.thread_protect do
2133
+ begin
2134
+ entry.set_position 0
2135
+ entry.set_text val
2136
+ rescue Exception => msg
2137
+ $log.debug("Exception in snmp_location for #{node.ip}: #{msg}")
2138
+ end
2139
+ end
2140
+ }
2141
+ else
2142
+ Gtk.thread_protect do
2143
+ begin
2144
+ entry.set_sensitive(false)
2145
+ entry.set_text "(SNMP is disable)"
2146
+ rescue Exception => msg
2147
+ $log.debug("Exception in snmp_location for #{node.ip}: #{msg}")
2148
+ end
2149
+ end
2150
+ end
2151
+ end
2152
+ if node.get_account_id("snmp")
2153
+ login, password = node.get_account_id("snmp")
2154
+ snmp_location(entry_location, node, login)
2155
+ end
2156
+ entry_location.set_size_request(200, -1)
2157
+ entry_location.show
2158
+ bbox=Gtk::HButtonBox.new
2159
+ bbox.show
2160
+ bbox.add entry_location
2161
+
2162
+ table.attach(label_location,0,1,3,4)
2163
+ table.attach(bbox,1,2,3,4)
2164
+
2165
+ hbbox=Gtk::HButtonBox.new
2166
+ refresh_button = Gtk::Button.new(Gtk::Stock::REFRESH)
2167
+ if !$config.snmp_mon
2168
+ refresh_button.set_sensitive false
2169
+ end
2170
+ hbbox.add refresh_button
2171
+ hbbox.show
2172
+
2173
+ refresh_button.signal_connect("clicked") do
2174
+ if node.get_account_id("snmp")
2175
+ login, password = node.get_account_id("snmp")
2176
+ snmp_description(entry_descsnmp, node, login)
2177
+ snmp_uptime(entry_uptime, node, login)
2178
+ snmp_contact(entry_contact, node, login)
2179
+ snmp_location(entry_location, node, login)
2180
+ end
2181
+ end
2182
+
2183
+ refresh_button.show
2184
+ table.attach(hbbox,1,2,4,5)
2185
+
2186
+ notebook_info.append_page frame_snmp_info, Gtk::Label::new("SNMP")
2187
+
2188
+ ########## WMI tab, info from Win32_ComputerSystem and Win32_OperatingSystem
2189
+
2190
+ frame_wmi_info = Gtk::Frame::new
2191
+ frame_wmi_info.border_width=10
2192
+ frame_wmi_info.set_size_request(300, 290)
2193
+ frame_wmi_info.show
2194
+
2195
+ table = Gtk::Table.new(8,2,false)
2196
+ table.show
2197
+ frame_wmi_info.add table
2198
+
2199
+ label_desc = Gtk::Label.new "Description"
2200
+ label_desc.show
2201
+ entry_descwmi = Gtk::Entry.new
2202
+ entry_descwmi.set_editable false
2203
+
2204
+ def wmi_description(entry, node, login ,pass)
2205
+ if $config.wmi_mon
2206
+ entry.set_text "(polling...)"
2207
+ Thread.start {
2208
+ val=get_wmi_description(login, pass, node.ip)
2209
+ if val
2210
+ Gtk.thread_protect do
2211
+ begin
2212
+ entry.set_position 0
2213
+ entry.set_text val
2214
+ rescue Exception => msg
2215
+ $log.debug("Exception in wmi_description for #{node.ip}: #{msg}")
2216
+ end
2217
+ end
2218
+ end
2219
+ }
2220
+ else
2221
+ begin
2222
+ entry.set_sensitive(false)
2223
+ entry.set_text "(WMI is disable)"
2224
+ rescue
2225
+ end
2226
+ end
2227
+ end
2228
+ if node.get_account_id("wmi")
2229
+ login, password = node.get_account_id("wmi")
2230
+ wmi_description(entry_descwmi, node, login, password)
2231
+ end
2232
+ entry_descwmi.set_size_request(200, -1)
2233
+ entry_descwmi.show
2234
+ bbox=Gtk::HButtonBox.new
2235
+ bbox.show
2236
+ bbox.add entry_descwmi
2237
+
2238
+ table.attach(label_desc,0,1,0,1)
2239
+ table.attach(bbox,1,2,0,1)
2240
+
2241
+ label_boot = Gtk::Label.new "Bootup State"
2242
+ label_boot.show
2243
+ entry_bootwmi = Gtk::Entry.new
2244
+ entry_bootwmi.set_editable false
2245
+
2246
+ def wmi_boot(entry, node, login ,pass)
2247
+ if $config.wmi_mon
2248
+ entry.set_text "(polling...)"
2249
+ Thread.start {
2250
+ val=get_wmi_boot_state(login, pass, node.ip)
2251
+ if val
2252
+ Gtk.thread_protect do
2253
+ begin
2254
+ entry.set_position 0
2255
+ entry.set_text val
2256
+ rescue Exception => msg
2257
+ $log.debug("Exception in wmi_boot for #{node.ip}: #{msg}")
2258
+ end
2259
+ end
2260
+ end
2261
+ }
2262
+ else
2263
+ Gtk.thread_protect do
2264
+ begin
2265
+ entry.set_sensitive(false)
2266
+ entry.set_text "(WMI is disable)"
2267
+ rescue
2268
+ end
2269
+ end
2270
+ end
2271
+ end
2272
+
2273
+ if node.get_account_id("wmi")
2274
+ login, password = node.get_account_id("wmi")
2275
+ wmi_boot(entry_bootwmi, node, login, password)
2276
+ end
2277
+ entry_bootwmi.set_size_request(200, -1)
2278
+ entry_bootwmi.show
2279
+ bbox=Gtk::HButtonBox.new
2280
+ bbox.show
2281
+ bbox.add entry_bootwmi
2282
+
2283
+ table.attach(label_boot,0,1,1,2)
2284
+ table.attach(bbox,1,2,1,2)
2285
+
2286
+ label_thermal = Gtk::Label.new "Thermal State"
2287
+ label_thermal.show
2288
+ entry_thermalwmi = Gtk::Entry.new
2289
+ entry_thermalwmi.set_editable false
2290
+
2291
+ def wmi_thermal(entry, node, login ,pass)
2292
+ if $config.wmi_mon
2293
+ entry.set_text "(polling...)"
2294
+ Thread.start {
2295
+ val=get_wmi_thermal_state(login, pass, node.ip)
2296
+ if val
2297
+ Gtk.thread_protect do
2298
+ begin
2299
+ entry.set_position 0
2300
+ entry.set_text val
2301
+ rescue Exception => msg
2302
+ $log.debug("Exception in wmi_thermal for #{node.ip}: #{msg}")
2303
+ end
2304
+ end
2305
+ end
2306
+ }
2307
+ else
2308
+ begin
2309
+ entry.set_sensitive(false)
2310
+ entry.set_text "(WMI is disable)"
2311
+ rescue
2312
+ end
2313
+ end
2314
+ end
2315
+
2316
+ if node.get_account_id("wmi")
2317
+ login, password = node.get_account_id("wmi")
2318
+ wmi_thermal(entry_thermalwmi, node, login, password)
2319
+ end
2320
+ entry_thermalwmi.set_size_request(200, -1)
2321
+ entry_thermalwmi.show
2322
+ bbox=Gtk::HButtonBox.new
2323
+ bbox.show
2324
+ bbox.add entry_thermalwmi
2325
+
2326
+ table.attach(label_thermal,0,1,2,3)
2327
+ table.attach(bbox,1,2,2,3)
2328
+
2329
+ label_nbproc = Gtk::Label.new "Processor Number"
2330
+ label_nbproc.show
2331
+ entry_nbprocwmi = Gtk::Entry.new
2332
+ entry_nbprocwmi.set_editable false
2333
+
2334
+ def wmi_nbproc(entry, node, login ,pass)
2335
+ if $config.wmi_mon
2336
+ entry.set_text "(polling...)"
2337
+ Thread.start {
2338
+ val=get_wmi_nb_proc(login, pass, node.ip)
2339
+ if val
2340
+ Gtk.thread_protect do
2341
+ begin
2342
+ entry.set_position 0
2343
+ entry.set_text val
2344
+ rescue Exception => msg
2345
+ $log.debug("Exception in wmi_nbproc for #{node.ip}: #{msg}")
2346
+ end
2347
+ end
2348
+ end
2349
+ }
2350
+ else
2351
+ begin
2352
+ entry.set_sensitive(false)
2353
+ entry.set_text "(WMI is disable)"
2354
+ rescue
2355
+ end
2356
+ end
2357
+ end
2358
+
2359
+ if node.get_account_id("wmi")
2360
+ login, password = node.get_account_id("wmi")
2361
+ wmi_nbproc(entry_nbprocwmi, node, login, password)
2362
+ end
2363
+ entry_nbprocwmi.set_size_request(200, -1)
2364
+ entry_nbprocwmi.show
2365
+ bbox=Gtk::HButtonBox.new
2366
+ bbox.show
2367
+ bbox.add entry_nbprocwmi
2368
+
2369
+ table.attach(label_nbproc,0,1,3,4)
2370
+ table.attach(bbox,1,2,3,4)
2371
+
2372
+ label_systype = Gtk::Label.new "System Type"
2373
+ label_systype.show
2374
+ entry_systype = Gtk::Entry.new
2375
+ entry_systype.set_editable false
2376
+
2377
+ def wmi_systype(entry, node, login ,pass)
2378
+ if $config.wmi_mon
2379
+ entry.set_text "(polling...)"
2380
+ Thread.start {
2381
+ val=get_wmi_system_type(login, pass, node.ip)
2382
+ if val
2383
+ Gtk.thread_protect do
2384
+ begin
2385
+ entry.set_position 0
2386
+ entry.set_text val
2387
+ rescue Exception => msg
2388
+ $log.debug("Exception in wmi_systype for #{node.ip}: #{msg}")
2389
+ end
2390
+ end
2391
+ end
2392
+ }
2393
+ else
2394
+ begin
2395
+ entry.set_sensitive(false)
2396
+ entry.set_text "(WMI is disable)"
2397
+ rescue
2398
+ end
2399
+ end
2400
+ end
2401
+
2402
+ if node.get_account_id("wmi")
2403
+ login, password = node.get_account_id("wmi")
2404
+ wmi_systype(entry_systype, node, login, password)
2405
+ end
2406
+ entry_systype.set_size_request(200, -1)
2407
+ entry_systype.show
2408
+ bbox=Gtk::HButtonBox.new
2409
+ bbox.show
2410
+ bbox.add entry_systype
2411
+
2412
+ table.attach(label_systype,0,1,4,5)
2413
+ table.attach(bbox,1,2,4,5)
2414
+
2415
+ label_oswmi = Gtk::Label.new "OS"
2416
+ label_oswmi.show
2417
+ entry_oswmi = Gtk::Entry.new
2418
+ entry_oswmi.set_editable false
2419
+
2420
+ def wmi_os(entry, node, login ,pass)
2421
+ if $config.wmi_mon
2422
+ entry.set_text "(polling...)"
2423
+ Thread.start {
2424
+ val=get_wmi_os(login, pass, node.ip)
2425
+ if val
2426
+ Gtk.thread_protect do
2427
+ begin
2428
+ entry.set_position 0
2429
+ entry.set_text val
2430
+ rescue Exception => msg
2431
+ $log.debug("Exception in wmi_os for #{node.ip}: #{msg}")
2432
+ end
2433
+ end
2434
+ end
2435
+ }
2436
+ else
2437
+ begin
2438
+ entry.set_sensitive(false)
2439
+ entry.set_text "(WMI is disable)"
2440
+ rescue
2441
+ end
2442
+ end
2443
+ end
2444
+
2445
+ if node.get_account_id("wmi")
2446
+ login, password = node.get_account_id("wmi")
2447
+ wmi_os(entry_oswmi, node, login, password)
2448
+ end
2449
+ entry_oswmi.set_size_request(200, -1)
2450
+ entry_oswmi.show
2451
+ bbox=Gtk::HButtonBox.new
2452
+ bbox.show
2453
+ bbox.add entry_oswmi
2454
+
2455
+ table.attach(label_oswmi,0,1,5,6)
2456
+ table.attach(bbox,1,2,5,6)
2457
+
2458
+ label_producttype = Gtk::Label.new "Product Type"
2459
+ label_producttype.show
2460
+ entry_producttype = Gtk::Entry.new
2461
+ entry_producttype.set_editable false
2462
+
2463
+ def wmi_producttype(entry, node, login ,pass)
2464
+ if $config.wmi_mon
2465
+ entry.set_text "(polling...)"
2466
+ Thread.start {
2467
+ val=get_wmi_product_type(login, pass, node.ip)
2468
+ if val
2469
+ Gtk.thread_protect do
2470
+ begin
2471
+ entry.set_position 0
2472
+ entry.set_text val
2473
+ rescue Exception => msg
2474
+ $log.debug("Exception in wmi_producttype for #{node.ip}: #{msg}")
2475
+ end
2476
+ end
2477
+ end
2478
+ }
2479
+ else
2480
+ begin
2481
+ entry.set_sensitive(false)
2482
+ entry.set_text "(WMI is disable)"
2483
+ rescue
2484
+ end
2485
+ end
2486
+ end
2487
+
2488
+ if node.get_account_id("wmi")
2489
+ login, password = node.get_account_id("wmi")
2490
+ wmi_producttype(entry_producttype, node, login, password)
2491
+ end
2492
+ entry_producttype.set_size_request(200, -1)
2493
+ entry_producttype.show
2494
+ bbox=Gtk::HButtonBox.new
2495
+ bbox.show
2496
+ bbox.add entry_producttype
2497
+
2498
+ table.attach(label_producttype,0,1,6,7)
2499
+ table.attach(bbox,1,2,6,7)
2500
+
2501
+ hbbox=Gtk::HButtonBox.new
2502
+ refresh_button_wmi = Gtk::Button.new(Gtk::Stock::REFRESH)
2503
+ if !$config.wmi_mon
2504
+ refresh_button_wmi.set_sensitive false
2505
+ end
2506
+ hbbox.add refresh_button_wmi
2507
+ hbbox.show
2508
+
2509
+ refresh_button_wmi.signal_connect("clicked") do
2510
+ if node.get_account_id("wmi")
2511
+ login, password = node.get_account_id("wmi")
2512
+ wmi_description(entry_descwmi, node, login, password)
2513
+ wmi_boot(entry_bootwmi, node, login, password)
2514
+ wmi_thermal(entry_thermalwmi, node, login, password)
2515
+ wmi_nbproc(entry_nbprocwmi, node, login, password)
2516
+ wmi_systype(entry_systype, node, login, password)
2517
+ wmi_os(entry_oswmi, node, login, password)
2518
+ wmi_producttype(entry_producttype, node, login, password)
2519
+ end
2520
+ end
2521
+
2522
+ refresh_button_wmi.show
2523
+ table.attach(hbbox,1,2,7,8)
2524
+
2525
+
2526
+ notebook_info.append_page frame_wmi_info, Gtk::Label::new("WMI")
2527
+
2528
+ notebook.append_page notebook_info, hbox
2529
+
2530
+ ###############################Account conf########################
2531
+
2532
+ eval IO.read("#{GNMSLIB}"+'/gui/sub/account_frame.rb')
2533
+
2534
+ ########### begin port monitoring #################################
2535
+
2536
+ frame = Gtk::Frame::new
2537
+ frame.border_width=10
2538
+ frame.show
2539
+
2540
+ vvbox = Gtk::VBox::new
2541
+ vvbox.show
2542
+ vvbox.add frame
2543
+
2544
+ vbox = Gtk::VBox::new(false,3)
2545
+ vbox.show
2546
+ frame.add vbox
2547
+
2548
+ @vbox_ports = Gtk::VBox::new
2549
+ @vbox_ports.show
2550
+
2551
+ #scrolled_window.add_with_viewport(vbox_ports)
2552
+ #vbox_ports.set_focus_vadjustment(scrolled_window.vadjustment)
2553
+ #scrolled_window.show
2554
+ vbox.add @vbox_ports
2555
+ @scan_port_th=nil
2556
+ @cbutton=[]
2557
+ @scanned_port_list=nil
2558
+
2559
+ ######################## nmap thread ##################################
2560
+
2561
+ ls = Gtk::ListStore.new(Integer, String, Integer, String, String)
2562
+ @treeview = Gtk::TreeView.new(ls)
2563
+
2564
+ renderer = Gtk::CellRendererToggle.new
2565
+ renderer.signal_connect('toggled') do |cell, path|
2566
+ # get toggled iter
2567
+ iter = @treeview.model.get_iter(path)
2568
+ fixed =iter[0]
2569
+ # do something with the value
2570
+ fixed ^= 1
2571
+ @cbutton[path.to_i()]=fixed
2572
+ # set new value
2573
+ iter[0] = fixed
2574
+ end
2575
+
2576
+ column1 = Gtk::TreeViewColumn.new("Selected",
2577
+ renderer, {:active => 0})
2578
+ column1.set_clickable(true)
2579
+ column2 = Gtk::TreeViewColumn.new("Protocol",
2580
+ Gtk::CellRendererText.new, {:text => 1})
2581
+ column2.set_sort_column_id(1)
2582
+ column3 = Gtk::TreeViewColumn.new("Port",
2583
+ Gtk::CellRendererText.new, {:text => 2})
2584
+ column3.set_sort_column_id(2)
2585
+ column4 = Gtk::TreeViewColumn.new("Service",
2586
+ Gtk::CellRendererText.new, {:text => 3})
2587
+ column4.set_sort_column_id(3)
2588
+ sev_renderer = Gtk::CellRendererText.new
2589
+ column5 = Gtk::TreeViewColumn.new("Severity", sev_renderer, {:text => 4})
2590
+ column5.set_sort_column_id(4)
2591
+
2592
+ column5.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
2593
+ if iter[4] and iter[4] != ""
2594
+ renderer.set_background_gdk(@color_style[$status.index(iter[4])])
2595
+ else
2596
+ renderer.background = nil
2597
+ end
2598
+ end
2599
+
2600
+ column1.signal_connect("clicked") do |column|
2601
+ toggle_select_port()
2602
+ end
2603
+
2604
+ @treeview.append_column(column1)
2605
+ @treeview.append_column(column2)
2606
+ @treeview.append_column(column3)
2607
+ @treeview.append_column(column4)
2608
+ @treeview.append_column(column5)
2609
+ @treeview.show
2610
+
2611
+ # Create a menu
2612
+ menu_port = Gtk::Menu.new
2613
+
2614
+ item_add_serv = Gtk::ImageMenuItem.new("Add service")
2615
+ image_item_add_serv = Gtk::Image.new()
2616
+ image_item_add_serv.set_stock(Gtk::Stock::ADD)
2617
+ item_add_serv.set_image(image_item_add_serv)
2618
+ item_add_serv.signal_connect("activate") { add_monitored_service() }
2619
+ menu_port.append(item_add_serv)
2620
+
2621
+ item_del_serv = Gtk::ImageMenuItem.new("Delete selected service")
2622
+ image_item_del_serv = Gtk::Image.new()
2623
+ image_item_del_serv.set_stock(Gtk::Stock::REMOVE)
2624
+ item_del_serv.set_image(image_item_del_serv)
2625
+ item_del_serv.signal_connect("activate") {
2626
+ @treeview.model.remove(@treeview.selection.selected) unless @treeview.selection.selected==nil
2627
+ }
2628
+ menu_port.append(item_del_serv)
2629
+
2630
+ item_edit_serv = Gtk::ImageMenuItem.new("Edit service")
2631
+ image_item_edit_serv = Gtk::Image.new()
2632
+ image_item_edit_serv.set_stock(Gtk::Stock::EDIT)
2633
+ item_edit_serv.set_image(image_item_edit_serv)
2634
+ item_edit_serv.signal_connect("activate") { edit_monitored_service() }
2635
+ menu_port.append(item_edit_serv)
2636
+
2637
+ scan_port_serv = Gtk::ImageMenuItem.new("Scan ports")
2638
+ image_scan_port_serv = Gtk::Image.new()
2639
+ image_scan_port_serv.set_stock(Gtk::Stock::REFRESH)
2640
+ scan_port_serv.set_image(image_scan_port_serv)
2641
+ scan_port_serv.signal_connect("activate") { scan_port_now(node) }
2642
+ menu_port.append(scan_port_serv)
2643
+
2644
+ item_sw_serv = Gtk::MenuItem.new("Switch selection")
2645
+ item_sw_serv.signal_connect("activate") { toggle_select_port() }
2646
+ menu_port.append(item_sw_serv)
2647
+ menu_port.show_all
2648
+
2649
+ @treeview.signal_connect("key_press_event") do |tview,e|
2650
+ if e.keyval == Gdk::Keyval::GDK_Delete
2651
+ tview.model.remove(tview.selection.selected) unless tview.selection.selected==nil
2652
+ end
2653
+ end
2654
+
2655
+ @treeview.signal_connect("button_press_event") do |widget, event|
2656
+ if event.kind_of? Gdk::EventButton and event.button == 3
2657
+ if @treeview.selection.selected==nil
2658
+ item_edit_serv.set_sensitive(false)
2659
+ item_del_serv.set_sensitive(false)
2660
+
2661
+ else
2662
+ item_edit_serv.set_sensitive(true)
2663
+ item_del_serv.set_sensitive(true)
2664
+ end
2665
+ menu_port.popup(nil, nil, event.button, event.time)
2666
+ elsif (@treeview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
2667
+ edit_monitored_service()
2668
+ end
2669
+ end
2670
+
2671
+ fill_port_list(node)
2672
+ fill_port_view(node)
2673
+
2674
+ if !($config.port_mon && $config.nmap_path != "")
2675
+ @treeview.set_sensitive false
2676
+ @treeview.show
2677
+ frame.set_label("This monitoring is disabled")
2678
+ end
2679
+
2680
+ notebook_inside = Gtk::Notebook::new()
2681
+ label_port = Gtk::Label::new("Service")
2682
+ notebook_inside.append_page(vvbox, label_port)
2683
+ notebook_inside.show
2684
+
2685
+ ######################### snmp oid monitoring ###################################################################
2686
+
2687
+ frame = Gtk::Frame::new
2688
+ frame.border_width=10
2689
+ frame.set_size_request(300, 290)
2690
+ frame.show
2691
+
2692
+ vbox = Gtk::VBox::new
2693
+ vbox.show
2694
+ frame.add vbox
2695
+
2696
+ snmp_ls = Gtk::ListStore.new(Integer, String, String, String, String)
2697
+ @snmpview = Gtk::TreeView.new(snmp_ls)
2698
+
2699
+ renderer_snmp = Gtk::CellRendererToggle.new
2700
+ renderer_snmp.signal_connect('toggled') do |cell, path|
2701
+ # get toggled iter
2702
+ iter = @snmpview.model.get_iter(path)
2703
+ fixed =iter[0]
2704
+ # do something with the value
2705
+ fixed ^= 1
2706
+ # set new value
2707
+ iter[0] = fixed
2708
+ end
2709
+
2710
+ if !$config.snmp_mon
2711
+ @snmpview.set_sensitive false
2712
+ frame.set_label("This monitoring is disabled")
2713
+ end
2714
+
2715
+ if OIDRef::oid_ref_nb_entry() == 0
2716
+ @snmpview.set_sensitive false
2717
+ frame.set_label("No SNMP OID defined, go in Tools menu")
2718
+ end
2719
+
2720
+ column1 = Gtk::TreeViewColumn.new("Selected",
2721
+ renderer_snmp, {:active => 0})
2722
+ column1.set_clickable(true)
2723
+ column2 = Gtk::TreeViewColumn.new("OID label",
2724
+ Gtk::CellRendererText.new, {:text => 1})
2725
+ column2.set_sort_column_id(1)
2726
+ column3 = Gtk::TreeViewColumn.new("Operator",
2727
+ Gtk::CellRendererText.new, {:text => 2})
2728
+ column3.set_sort_column_id(2)
2729
+ tr=Gtk::CellRendererText.new
2730
+ tr.mode=Gtk::CellRenderer::MODE_EDITABLE
2731
+ column4 = Gtk::TreeViewColumn.new("Threshold",
2732
+ tr, {:text => 3})
2733
+ column4.set_sort_column_id(3)
2734
+ sev_renderer = Gtk::CellRendererText.new
2735
+ column5 = Gtk::TreeViewColumn.new("Severity", sev_renderer, {:text => 4})
2736
+ column5.set_sort_column_id(4)
2737
+
2738
+ column5.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
2739
+ if iter[4] and iter[4] != ""
2740
+ renderer.set_background_gdk(@color_style[$status.index(iter[4])])
2741
+ else
2742
+ renderer.background = nil
2743
+ end
2744
+ end
2745
+
2746
+ @snmpview.append_column(column1)
2747
+ @snmpview.append_column(column2)
2748
+ @snmpview.append_column(column3)
2749
+ @snmpview.append_column(column4)
2750
+ @snmpview.append_column(column5)
2751
+ @snmpview.show
2752
+
2753
+ # Create a menu
2754
+ menu_snmp = Gtk::Menu.new
2755
+
2756
+ item_add_snmp = Gtk::ImageMenuItem.new("Add SNMP Ref")
2757
+ image_item_add_snmp = Gtk::Image.new()
2758
+ image_item_add_snmp.set_stock(Gtk::Stock::ADD)
2759
+ item_add_snmp.set_image(image_item_add_snmp)
2760
+ item_add_snmp.signal_connect("activate") { add_monitored_snmp() unless OIDRef::get_oid_refs_name().size() == 0 }
2761
+ menu_snmp.append(item_add_snmp)
2762
+
2763
+ item_del_snmp = Gtk::ImageMenuItem.new("Delete selected SNMP Ref")
2764
+ image_item_del_snmp = Gtk::Image.new()
2765
+ image_item_del_snmp.set_stock(Gtk::Stock::REMOVE)
2766
+ item_del_snmp.set_image(image_item_del_snmp)
2767
+ item_del_snmp.signal_connect("activate") {
2768
+ @snmpview.model.remove(@snmpview.selection.selected) unless @snmpview.selection.selected==nil
2769
+ }
2770
+ menu_snmp.append(item_del_snmp)
2771
+
2772
+ item_edit_snmp = Gtk::ImageMenuItem.new("Edit SNMP Ref")
2773
+ image_edit_snmp = Gtk::Image.new()
2774
+ image_edit_snmp.set_stock(Gtk::Stock::EDIT)
2775
+ item_edit_snmp.set_image(image_edit_snmp)
2776
+ item_edit_snmp.signal_connect("activate") { edit_monitored_snmp() }
2777
+ menu_snmp.append(item_edit_snmp)
2778
+
2779
+ menu_snmp.show_all
2780
+
2781
+ @snmpview.signal_connect("button_press_event") do |widget, event|
2782
+ if event.kind_of? Gdk::EventButton and event.button == 3
2783
+ if @snmpview.selection.selected==nil
2784
+ item_edit_snmp.set_sensitive(false)
2785
+ item_del_snmp.set_sensitive(false)
2786
+ else
2787
+ item_edit_snmp.set_sensitive(true)
2788
+ item_del_snmp.set_sensitive(true)
2789
+ end
2790
+ if OIDRef::get_oid_refs_name().size() > 0
2791
+ item_add_snmp.set_sensitive(true)
2792
+ else
2793
+ item_add_snmp.set_sensitive(false)
2794
+ end
2795
+ menu_snmp.popup(nil, nil, event.button, event.time)
2796
+ elsif (@snmpview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
2797
+ edit_monitored_snmp()
2798
+ end
2799
+ end
2800
+
2801
+ #populate with saved values
2802
+ node.snmp_monitoring.each_value do |snmp_mon|
2803
+ iter = snmp_ls.append
2804
+ iter[0] = snmp_mon.get_state()
2805
+ iter[1] = snmp_mon.oidref
2806
+ iter[2] = snmp_mon.oper
2807
+ iter[3] = snmp_mon.threshold.to_s
2808
+ iter[4] = snmp_mon.severity
2809
+ end
2810
+
2811
+ vbox.add(@snmpview)
2812
+
2813
+ label_snmp = Gtk::Label::new("SNMP")
2814
+ notebook_inside.append_page frame, label_snmp
2815
+
2816
+ ######################### end snmp oid monitoring ##########################################################
2817
+
2818
+ ######################### wmi monitoring ###################################################################
2819
+
2820
+ frame = Gtk::Frame::new
2821
+ frame.border_width=10
2822
+ frame.set_size_request(300, 290)
2823
+ frame.show
2824
+
2825
+ vbox = Gtk::VBox::new
2826
+ vbox.show
2827
+ frame.add vbox
2828
+
2829
+ wmi_ls = Gtk::ListStore.new(Integer, String, String, String, String)
2830
+ @wmiview = Gtk::TreeView.new(wmi_ls)
2831
+
2832
+ renderer_wmi = Gtk::CellRendererToggle.new
2833
+ renderer_wmi.signal_connect('toggled') do |cell, path|
2834
+ # get toggled iter
2835
+ iter = @wmiview.model.get_iter(path)
2836
+ fixed =iter[0]
2837
+ # do something with the value
2838
+ fixed ^= 1
2839
+ # set new value
2840
+ iter[0] = fixed
2841
+ end
2842
+
2843
+ if !$config.wmi_mon
2844
+ @wmiview.set_sensitive false
2845
+ frame.set_label("This monitoring is disabled")
2846
+ end
2847
+
2848
+ if WMIRef::wmi_ref_nb_entry() == 0
2849
+ @wmiview.set_sensitive false
2850
+ frame.set_label("No WMI request defined, go in Tools menu")
2851
+ end
2852
+
2853
+ column1 = Gtk::TreeViewColumn.new("Selected",
2854
+ renderer_wmi, {:active => 0})
2855
+ column1.set_clickable(true)
2856
+ column2 = Gtk::TreeViewColumn.new("WMI label",
2857
+ Gtk::CellRendererText.new, {:text => 1})
2858
+ column2.set_sort_column_id(1)
2859
+ column3 = Gtk::TreeViewColumn.new("Operator",
2860
+ Gtk::CellRendererText.new, {:text => 2})
2861
+ column3.set_sort_column_id(2)
2862
+ tr=Gtk::CellRendererText.new
2863
+ tr.mode=Gtk::CellRenderer::MODE_EDITABLE
2864
+ column4 = Gtk::TreeViewColumn.new("Threshold",
2865
+ tr, {:text => 3})
2866
+ column4.set_sort_column_id(3)
2867
+ sev_renderer = Gtk::CellRendererText.new
2868
+ column5 = Gtk::TreeViewColumn.new("Severity", sev_renderer, {:text => 4})
2869
+ column5.set_sort_column_id(4)
2870
+
2871
+ column5.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
2872
+ if iter[4] and iter[4] != ""
2873
+ renderer.set_background_gdk(@color_style[$status.index(iter[4])])
2874
+ else
2875
+ renderer.background = nil
2876
+ end
2877
+ end
2878
+
2879
+ @wmiview.append_column(column1)
2880
+ @wmiview.append_column(column2)
2881
+ @wmiview.append_column(column3)
2882
+ @wmiview.append_column(column4)
2883
+ @wmiview.append_column(column5)
2884
+ @wmiview.show
2885
+
2886
+ # Create a popup menu
2887
+ menu_wmi = Gtk::Menu.new
2888
+
2889
+ item_add_wmi = Gtk::ImageMenuItem.new("Add WMI Ref")
2890
+ image_item_add_wmi = Gtk::Image.new()
2891
+ image_item_add_wmi.set_stock(Gtk::Stock::ADD)
2892
+ item_add_wmi.set_image(image_item_add_wmi)
2893
+ item_add_wmi.signal_connect("activate") { add_monitored_wmi() unless WMIRef::get_wmi_refs_name().size() == 0 }
2894
+ menu_wmi.append(item_add_wmi)
2895
+
2896
+ item_del_wmi = Gtk::ImageMenuItem.new("Delete selected WMI Ref")
2897
+ image_item_del_wmi = Gtk::Image.new()
2898
+ image_item_del_wmi.set_stock(Gtk::Stock::REMOVE)
2899
+ item_del_wmi.set_image(image_item_del_wmi)
2900
+ item_del_wmi.signal_connect("activate") {
2901
+ @wmiview.model.remove(@wmiview.selection.selected) unless @wmiview.selection.selected==nil
2902
+ }
2903
+ menu_wmi.append(item_del_wmi)
2904
+
2905
+ item_edit_wmi = Gtk::ImageMenuItem.new("Edit WMI Ref")
2906
+ image_edit_wmi = Gtk::Image.new()
2907
+ image_edit_wmi.set_stock(Gtk::Stock::EDIT)
2908
+ item_edit_wmi.set_image(image_edit_wmi)
2909
+ item_edit_wmi.signal_connect("activate") { edit_monitored_wmi() }
2910
+ menu_wmi.append(item_edit_wmi)
2911
+
2912
+ menu_wmi.show_all
2913
+
2914
+ @wmiview.signal_connect("button_press_event") do |widget, event|
2915
+ if event.kind_of? Gdk::EventButton and event.button == 3
2916
+ if @wmiview.selection.selected==nil
2917
+ item_edit_wmi.set_sensitive(false)
2918
+ item_del_wmi.set_sensitive(false)
2919
+ else
2920
+ item_edit_wmi.set_sensitive(true)
2921
+ item_del_wmi.set_sensitive(true)
2922
+ end
2923
+ if WMIRef::get_wmi_refs_name().size() > 0
2924
+ item_add_wmi.set_sensitive(true)
2925
+ else
2926
+ item_add_wmi.set_sensitive(false)
2927
+ end
2928
+ menu_wmi.popup(nil, nil, event.button, event.time)
2929
+ elsif (@wmiview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
2930
+ edit_monitored_wmi()
2931
+ end
2932
+ end
2933
+
2934
+ #populate with saved values
2935
+ node.wmi_monitoring.each_value do |wmi_mon|
2936
+ iter = wmi_ls.append
2937
+ iter[0] = wmi_mon.get_state()
2938
+ iter[1] = wmi_mon.wmiref
2939
+ iter[2] = wmi_mon.oper
2940
+ iter[3] = wmi_mon.value.to_s
2941
+ iter[4] = wmi_mon.severity
2942
+ end
2943
+
2944
+ vbox.add(@wmiview)
2945
+
2946
+ label_wmi = Gtk::Label::new("WMI")
2947
+ notebook_inside.append_page frame, label_wmi
2948
+
2949
+ ###########################end wmi monitoring#####################################################################
2950
+
2951
+ ######################### jmx monitoring ###################################################################
2952
+
2953
+ frame = Gtk::Frame::new
2954
+ frame.border_width=10
2955
+ frame.set_size_request(300, 290)
2956
+ frame.show
2957
+
2958
+ vbox = Gtk::VBox::new
2959
+ vbox.show
2960
+ frame.add vbox
2961
+
2962
+ jmx_ls = Gtk::ListStore.new(Integer, String, String, String)
2963
+ @jmxview = Gtk::TreeView.new(jmx_ls)
2964
+
2965
+ renderer_jmx = Gtk::CellRendererToggle.new
2966
+ renderer_jmx.signal_connect('toggled') do |cell, path|
2967
+ # get toggled iter
2968
+ iter = @jmxview.model.get_iter(path)
2969
+ fixed =iter[0]
2970
+ # do something with the value
2971
+ fixed ^= 1
2972
+ # set new value
2973
+ iter[0] = fixed
2974
+ node.jmx_monitoring[iter[1]].set_state(fixed.to_i)
2975
+ end
2976
+
2977
+ if !$config.jmx_mon
2978
+ @jmxview.set_sensitive false
2979
+ frame.set_label("This monitoring is disabled")
2980
+ end
2981
+
2982
+ if JMXRef::jmx_ref_nb_entry() == 0
2983
+ @jmxview.set_sensitive false
2984
+ frame.set_label("No jmx request defined, go in Tools menu")
2985
+ end
2986
+
2987
+ column1 = Gtk::TreeViewColumn.new("Selected",
2988
+ renderer_jmx, {:active => 0})
2989
+ column1.set_clickable(true)
2990
+ column2 = Gtk::TreeViewColumn.new("Label",
2991
+ Gtk::CellRendererText.new, {:text => 1})
2992
+ column2.set_sort_column_id(1)
2993
+ column3 = Gtk::TreeViewColumn.new("Protocol/Port",
2994
+ Gtk::CellRendererText.new, {:text => 2})
2995
+ column3.set_sort_column_id(2)
2996
+ column4 = Gtk::TreeViewColumn.new("Auth",
2997
+ Gtk::CellRendererText.new, {:text => 3})
2998
+ column4.set_sort_column_id(3)
2999
+
3000
+ @jmxview.append_column(column1)
3001
+ @jmxview.append_column(column2)
3002
+ @jmxview.append_column(column3)
3003
+ @jmxview.append_column(column4)
3004
+ @jmxview.show
3005
+
3006
+ # Create a popup menu
3007
+ menu_jmx = Gtk::Menu.new
3008
+
3009
+ item_add_jmx = Gtk::ImageMenuItem.new("Add JMX Ref")
3010
+ image_item_add_jmx = Gtk::Image.new()
3011
+ image_item_add_jmx.set_stock(Gtk::Stock::ADD)
3012
+ item_add_jmx.set_image(image_item_add_jmx)
3013
+ item_add_jmx.signal_connect("activate") { add_monitored_jmx(node) unless JMXRef::get_jmx_refs_name().size() == 0 }
3014
+ menu_jmx.append(item_add_jmx)
3015
+
3016
+ item_del_jmx = Gtk::ImageMenuItem.new("Delete selected JMX Ref")
3017
+ image_item_del_jmx = Gtk::Image.new()
3018
+ image_item_del_jmx.set_stock(Gtk::Stock::REMOVE)
3019
+ item_del_jmx.set_image(image_item_del_jmx)
3020
+ item_del_jmx.signal_connect("activate") {
3021
+ @jmxview.model.remove(@jmxview.selection.selected) unless @jmxview.selection.selected==nil
3022
+ }
3023
+ menu_jmx.append(item_del_jmx)
3024
+
3025
+ item_edit_jmx = Gtk::ImageMenuItem.new("Edit JMX Ref")
3026
+ image_edit_jmx = Gtk::Image.new()
3027
+ image_edit_jmx.set_stock(Gtk::Stock::EDIT)
3028
+ item_edit_jmx.set_image(image_edit_jmx)
3029
+ item_edit_jmx.signal_connect("activate") { edit_monitored_jmx(node) }
3030
+ menu_jmx.append(item_edit_jmx)
3031
+
3032
+ menu_jmx.show_all
3033
+
3034
+ @jmxview.signal_connect("button_press_event") do |widget, event|
3035
+ if event.kind_of? Gdk::EventButton and event.button == 3
3036
+ if @jmxview.selection.selected==nil
3037
+ item_edit_jmx.set_sensitive(false)
3038
+ item_del_jmx.set_sensitive(false)
3039
+ else
3040
+ item_edit_jmx.set_sensitive(true)
3041
+ item_del_jmx.set_sensitive(true)
3042
+ end
3043
+ if JMXRef::get_jmx_refs_name().size() > 0
3044
+ item_add_jmx.set_sensitive(true)
3045
+ else
3046
+ item_add_jmx.set_sensitive(false)
3047
+ end
3048
+ menu_jmx.popup(nil, nil, event.button, event.time)
3049
+ elsif (@jmxview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
3050
+ edit_monitored_jmx(node)
3051
+ end
3052
+ end
3053
+
3054
+ #populate with saved values
3055
+ node.jmx_monitoring.each_value do |jmx_mon|
3056
+ iter = jmx_ls.append
3057
+ iter[0] = jmx_mon.get_state()
3058
+ iter[1] = jmx_mon.get_ref()
3059
+ iter[2] = "#{jmx_mon.get_protocol()}/#{jmx_mon.get_port()}"
3060
+ iter[3] = jmx_mon.get_auth()
3061
+ end
3062
+
3063
+ vbox.add(@jmxview)
3064
+
3065
+ label_jmx = Gtk::Label::new("JMX")
3066
+ notebook_inside.append_page frame, label_jmx
3067
+
3068
+ ###########################end jmx monitoring#####################################################################
3069
+
3070
+ ######################### snmp trap monitoring ###################################################################
3071
+
3072
+ frame = Gtk::Frame::new
3073
+ frame.border_width=10
3074
+ frame.set_size_request(300, 290)
3075
+ frame.show
3076
+
3077
+ vbox = Gtk::VBox::new
3078
+ vbox.show
3079
+ frame.add vbox
3080
+
3081
+ snmp_trap_ls = Gtk::ListStore.new(Integer, String, String, String)
3082
+ @snmptrapview = Gtk::TreeView.new(snmp_trap_ls)
3083
+ @snmptrapview.set_tooltip_column(3)
3084
+
3085
+ renderer_snmp = Gtk::CellRendererToggle.new
3086
+ renderer_snmp.signal_connect('toggled') do |cell, path|
3087
+ # get toggled iter
3088
+ iter = @snmptrapview.model.get_iter(path)
3089
+ fixed =iter[0]
3090
+ # do something with the value
3091
+ fixed ^= 1
3092
+ # set new value
3093
+ iter[0] = fixed
3094
+ end
3095
+
3096
+ if !$config.snmptrap_mon
3097
+ @snmptrapview.set_sensitive false
3098
+ frame.set_label("This monitoring is disabled")
3099
+ end
3100
+
3101
+ column1 = Gtk::TreeViewColumn.new("Selected",
3102
+ renderer_snmp, {:active => 0})
3103
+ column1.set_clickable(true)
3104
+ column2 = Gtk::TreeViewColumn.new("Trap label",
3105
+ Gtk::CellRendererText.new, {:text => 1})
3106
+ column2.set_sort_column_id(1)
3107
+ sev_renderer = Gtk::CellRendererText.new
3108
+ column3 = Gtk::TreeViewColumn.new("Severity", sev_renderer, {:text => 2})
3109
+ column4 = Gtk::TreeViewColumn.new("Description",
3110
+ Gtk::CellRendererText.new, {:text => 3})
3111
+ column4.visible = false
3112
+ column3.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
3113
+ if iter[2] and iter[2] != ""
3114
+ renderer.set_background_gdk(@color_style[$status.index(iter[2])])
3115
+ else
3116
+ renderer.background = nil
3117
+ end
3118
+ end
3119
+
3120
+ @snmptrapview.append_column(column1)
3121
+ @snmptrapview.append_column(column2)
3122
+ @snmptrapview.append_column(column3)
3123
+ @snmptrapview.append_column(column4)
3124
+ @snmptrapview.show
3125
+
3126
+ # Create a menu
3127
+ menu_snmptrap = Gtk::Menu.new
3128
+ item_add_snmptrap = Gtk::ImageMenuItem.new("Add SNMP Trap")
3129
+ image_item_add_snmptrap = Gtk::Image.new()
3130
+ image_item_add_snmptrap.set_stock(Gtk::Stock::ADD)
3131
+ item_add_snmptrap.set_image(image_item_add_snmptrap)
3132
+ item_add_snmptrap.signal_connect("activate") { add_monitored_snmptrap() unless SnmpTrapRef::get_snmptrap_refs_name().size() == 0 }
3133
+ menu_snmptrap.append(item_add_snmptrap)
3134
+
3135
+ item_del_snmptrap = Gtk::ImageMenuItem.new("Delete selected SNMP Trap")
3136
+ image_item_del_snmptrap = Gtk::Image.new()
3137
+ image_item_del_snmp.set_stock(Gtk::Stock::REMOVE)
3138
+ item_del_snmptrap.set_image(image_item_del_snmptrap)
3139
+ item_del_snmptrap.signal_connect("activate") {
3140
+ @snmptrapview.model.remove(@snmptrapview.selection.selected) unless @snmptrapview.selection.selected==nil
3141
+ }
3142
+ menu_snmptrap.append(item_del_snmptrap)
3143
+
3144
+ item_edit_snmptrap = Gtk::ImageMenuItem.new("Edit SNMP Trap")
3145
+ image_edit_snmptrap = Gtk::Image.new()
3146
+ image_edit_snmptrap.set_stock(Gtk::Stock::EDIT)
3147
+ item_edit_snmptrap.set_image(image_edit_snmptrap)
3148
+ item_edit_snmptrap.signal_connect("activate") { edit_monitored_snmp() }
3149
+ menu_snmptrap.append(item_edit_snmptrap)
3150
+
3151
+ menu_snmptrap.show_all
3152
+
3153
+ @snmptrapview.signal_connect("button_press_event") do |widget, event|
3154
+ if event.kind_of? Gdk::EventButton and event.button == 3
3155
+ if @snmptrapview.selection.selected==nil
3156
+ item_edit_snmptrap.set_sensitive(false)
3157
+ item_del_snmptrap.set_sensitive(false)
3158
+ else
3159
+ item_edit_snmptrap.set_sensitive(true)
3160
+ item_del_snmptrap.set_sensitive(true)
3161
+ end
3162
+ if SnmpTrapRef::get_snmptrap_refs_name().size() > 0 && get_snmptrap_refs_left().size() > 0
3163
+ item_add_snmptrap.set_sensitive(true)
3164
+ else
3165
+ item_add_snmptrap.set_sensitive(false)
3166
+ end
3167
+ menu_snmptrap.popup(nil, nil, event.button, event.time)
3168
+ elsif (@snmptrapview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
3169
+ edit_monitored_snmptrap()
3170
+ end
3171
+ end
3172
+
3173
+ #populate with saved values
3174
+ node.snmptrap_monitoring.each_value do |snmptrap_mon|
3175
+ iter = snmp_trap_ls.append
3176
+ iter[0] = snmptrap_mon.get_state()
3177
+ iter[1] = snmptrap_mon.get_snmptrap_ref()
3178
+ iter[2] = snmptrap_mon.severity()
3179
+ iter[3] = $snmptrap_refs[snmptrap_mon.get_snmptrap_ref()].description
3180
+ end
3181
+
3182
+ vbox.add(@snmptrapview)
3183
+
3184
+ label_snmptrap = Gtk::Label::new("SNMP trap")
3185
+ notebook_inside.append_page frame, label_snmptrap
3186
+
3187
+ ###########################end snmp trap monitoring############################################################
3188
+
3189
+ ######################### syslog monitoring ###################################################################
3190
+
3191
+ frame = Gtk::Frame::new
3192
+ frame.border_width=10
3193
+ frame.set_size_request(300, 290)
3194
+ frame.show
3195
+
3196
+ vbox = Gtk::VBox::new
3197
+ vbox.show
3198
+ frame.add vbox
3199
+
3200
+ syslog_ls = Gtk::ListStore.new(Integer, String, String, String)
3201
+ @syslogview = Gtk::TreeView.new(syslog_ls)
3202
+ @syslogview.set_tooltip_column(3)
3203
+
3204
+ renderer_syslog = Gtk::CellRendererToggle.new
3205
+ renderer_syslog.signal_connect('toggled') do |cell, path|
3206
+ # get toggled iter
3207
+ iter = @syslogview.model.get_iter(path)
3208
+ fixed =iter[0]
3209
+ # do something with the value
3210
+ fixed ^= 1
3211
+ # set new value
3212
+ iter[0] = fixed
3213
+ end
3214
+
3215
+ if !$config.syslog_mon
3216
+ @syslogview.set_sensitive false
3217
+ frame.set_label("This monitoring is disabled")
3218
+ end
3219
+
3220
+ column1 = Gtk::TreeViewColumn.new("Selected",
3221
+ renderer_syslog, {:active => 0})
3222
+ column1.set_clickable(true)
3223
+ column2 = Gtk::TreeViewColumn.new("Syslog label",
3224
+ Gtk::CellRendererText.new, {:text => 1})
3225
+ column2.set_sort_column_id(1)
3226
+ sev_renderer = Gtk::CellRendererText.new
3227
+ column3 = Gtk::TreeViewColumn.new("Severity", sev_renderer, {:text => 2})
3228
+ column4 = Gtk::TreeViewColumn.new("Description", Gtk::CellRendererText.new, {:text => 3})
3229
+ column4.visible = false
3230
+ column3.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
3231
+ if iter[2] and iter[2] != ""
3232
+ ind = $status.index(iter[2])
3233
+ if ind
3234
+ color = @color_style[ind]
3235
+ if color
3236
+ renderer.set_background_gdk(color)
3237
+ end
3238
+ next
3239
+ end
3240
+ end
3241
+ renderer.background = nil
3242
+ end
3243
+
3244
+ @syslogview.append_column(column1)
3245
+ @syslogview.append_column(column2)
3246
+ @syslogview.append_column(column3)
3247
+ @syslogview.append_column(column4)
3248
+ @syslogview.show
3249
+
3250
+ # Create a menu
3251
+ menu_syslog = Gtk::Menu.new
3252
+
3253
+ item_add_syslog = Gtk::ImageMenuItem.new("Add Syslog Ref")
3254
+ image_item_add_syslog = Gtk::Image.new()
3255
+ image_item_add_syslog.set_stock(Gtk::Stock::ADD)
3256
+ item_add_syslog.set_image(image_item_add_syslog)
3257
+ item_add_syslog.signal_connect("activate") {
3258
+ add_monitored_syslog() unless SyslogRef::get_syslog_refs_name().size() == 0
3259
+ }
3260
+
3261
+ menu_syslog.append(item_add_syslog)
3262
+
3263
+ item_del_syslog = Gtk::ImageMenuItem.new("Delete selected Syslog Ref")
3264
+ image_item_del_syslog = Gtk::Image.new()
3265
+ image_item_del_syslog.set_stock(Gtk::Stock::REMOVE)
3266
+ item_del_syslog.set_image(image_item_del_syslog)
3267
+ item_del_syslog.signal_connect("activate") {
3268
+ @syslogview.model.remove(@syslogview.selection.selected) unless @syslogview.selection.selected==nil
3269
+ }
3270
+ menu_syslog.append(item_del_syslog)
3271
+
3272
+ item_edit_syslog = Gtk::ImageMenuItem.new("Edit Syslog Ref")
3273
+ image_item_edit_syslog = Gtk::Image.new()
3274
+ image_item_edit_syslog.set_stock(Gtk::Stock::EDIT)
3275
+ item_edit_syslog.set_image(image_item_edit_syslog)
3276
+ item_edit_syslog.signal_connect("activate") { edit_monitored_syslog() }
3277
+ menu_syslog.append(item_edit_syslog)
3278
+
3279
+ menu_syslog.show_all
3280
+
3281
+ @syslogview.signal_connect("button_press_event") do |widget, event|
3282
+ if event.kind_of? Gdk::EventButton and event.button == 3
3283
+ if @syslogview.selection.selected==nil
3284
+ item_edit_syslog.set_sensitive(false)
3285
+ item_del_syslog.set_sensitive(false)
3286
+ else
3287
+ item_edit_syslog.set_sensitive(true)
3288
+ item_del_syslog.set_sensitive(true)
3289
+ end
3290
+ if SyslogRef::get_syslog_refs_name().size() > 0 && get_syslog_refs_left().size() > 0
3291
+ item_add_syslog.set_sensitive(true)
3292
+ else
3293
+ item_add_syslog.set_sensitive(false)
3294
+ end
3295
+ menu_syslog.popup(nil, nil, event.button, event.time)
3296
+ elsif (@syslogview.selection.selected!=nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
3297
+ edit_monitored_syslog()
3298
+ end
3299
+ end
3300
+
3301
+ #populate with saved values
3302
+ node.syslog_monitoring.each_value do |syslog_mon|
3303
+ iter = syslog_ls.append
3304
+ iter[0] = syslog_mon.get_state()
3305
+ iter[1] = syslog_mon.get_syslog_ref()
3306
+ if syslog_mon.raw_severity()>0
3307
+ iter[2] = syslog_mon.severity()
3308
+ else
3309
+ iter[2] = MAP_SYSLOG_SEV
3310
+ end
3311
+ iter[3] = $syslog_refs[syslog_mon.get_syslog_ref()].description
3312
+ end
3313
+
3314
+ vbox.add(@syslogview)
3315
+
3316
+ label_syslog = Gtk::Label::new("Syslog")
3317
+ notebook_inside.append_page frame, label_syslog
3318
+
3319
+ ###########################end syslog monitoring#################################################################
3320
+
3321
+ ######################### external cmd/plugin monitoring ###################################################################
3322
+
3323
+ frame = Gtk::Frame::new
3324
+ frame.border_width=10
3325
+ frame.set_size_request(300, 290)
3326
+ frame.show
3327
+
3328
+ vbox = Gtk::VBox::new
3329
+ vbox.show
3330
+ frame.add vbox
3331
+
3332
+ custom_ls = Gtk::ListStore.new(Integer, String, String, String, String)
3333
+ @customview = Gtk::TreeView.new(custom_ls)
3334
+ @customview.set_tooltip_column(4)
3335
+
3336
+ if !$config.custom_mon
3337
+ @customview.set_sensitive false
3338
+ frame.set_label("This monitoring is disabled")
3339
+ end
3340
+
3341
+ renderer = Gtk::CellRendererToggle.new
3342
+ renderer.signal_connect('toggled') do |cell, path|
3343
+ # get toggled iter
3344
+ iter = @customview.model.get_iter(path)
3345
+ fixed =iter[0]
3346
+ # do something with the value
3347
+ fixed ^= 1
3348
+ # set new value
3349
+ iter[0] = fixed
3350
+ end
3351
+
3352
+ column1 = Gtk::TreeViewColumn.new("Selected",
3353
+ renderer, {:active => 0})
3354
+ column1.set_clickable(true)
3355
+ column2 = Gtk::TreeViewColumn.new("Name",
3356
+ Gtk::CellRendererText.new, {:text => 1})
3357
+
3358
+ column2.set_sort_column_id(1)
3359
+ renderer = Gtk::CellRendererText.new
3360
+ renderer.set_editable(true)
3361
+
3362
+ sev_ls_value=Gtk::ListStore.new(String)
3363
+ $status[0..3].each {|sev|
3364
+ iter = sev_ls_value.append
3365
+ iter[0] = sev
3366
+ }
3367
+
3368
+ sev_renderer=Gtk::CellRendererCombo.new
3369
+ column3 = Gtk::TreeViewColumn.new("Severity", sev_renderer, "text" => 2)
3370
+ column3.set_sort_column_id(2)
3371
+ sev_renderer.model = sev_ls_value
3372
+ sev_renderer.text_column = 0
3373
+ sev_renderer.has_entry = false
3374
+ sev_renderer.editable = true
3375
+
3376
+ def custom_monitor_cell_set_parameter(cell, path_string, new_text, col)
3377
+ iter = @customview.model.get_iter(path_string)
3378
+ iter[col] = new_text
3379
+ end
3380
+
3381
+ tr0 = Gtk::CellRendererText.new
3382
+ tr0.editable = true
3383
+ tr0.mode =Gtk::CellRenderer::MODE_EDITABLE
3384
+ tr0.signal_connect("edited") { |renderer, iter, var|
3385
+ custom_monitor_cell_set_parameter(renderer, iter, var, 3)
3386
+ }
3387
+
3388
+ column4 = Gtk::TreeViewColumn.new("Parameter", tr0, {:text => 3})
3389
+ column4.set_sort_column_id(3)
3390
+
3391
+ column5 = Gtk::TreeViewColumn.new("Description", renderer, {:text => 4})
3392
+ column5.visible = false
3393
+
3394
+ column1.signal_connect("clicked") do |column|
3395
+ toggle_select_custom()
3396
+ end
3397
+
3398
+ sev_renderer.signal_connect("changed") {|cell, path, iter|
3399
+ sev = cell.model.get_value(iter,0)
3400
+ cell.set_background_gdk(@color_style[$status.index(sev)])
3401
+ i = @customview.selection.selected
3402
+ @customview.model.set_value(i, 2, sev)
3403
+ }
3404
+
3405
+ column3.set_cell_data_func(sev_renderer) do |col, renderer, model, iter|
3406
+ if iter[2] and iter[2] != ""
3407
+ ind = $status.index(iter[2])
3408
+ if ind
3409
+ color = @color_style[ind]
3410
+ if color
3411
+ renderer.set_background_gdk(color)
3412
+ end
3413
+ next
3414
+ end
3415
+ end
3416
+ renderer.background = nil
3417
+ end
3418
+
3419
+ @customview.append_column(column1)
3420
+ @customview.append_column(column2)
3421
+ @customview.append_column(column3)
3422
+ @customview.append_column(column4)
3423
+ @customview.append_column(column5)
3424
+ @customview.show
3425
+
3426
+ #populate with saved values
3427
+ if $custom_monitor
3428
+ $custom_monitor.each do |cm_name|
3429
+ iter = custom_ls.append
3430
+ if node.custom_monitoring[cm_name] != nil
3431
+ iter[0] = node.custom_monitoring[cm_name].get_state()
3432
+ else
3433
+ iter[0] = 0
3434
+ end
3435
+ #class name
3436
+ iter[1] = cm_name
3437
+ #default sev
3438
+ if node.custom_monitoring[cm_name] != nil
3439
+ iter[2] = node.custom_monitoring[cm_name].severity
3440
+ else
3441
+ begin
3442
+ iter[2] = Object.const_get(cm_name).default_severity()
3443
+ rescue
3444
+ #default sev is not set
3445
+ iter[2] = "CRITICAL"
3446
+ end
3447
+ end
3448
+ #param
3449
+ if node.custom_monitoring[cm_name] != nil
3450
+ iter[3] = node.custom_monitoring[cm_name].param.to_s
3451
+ else
3452
+ begin
3453
+ iter[3] = Object.const_get(cm_name).parameter().to_s
3454
+ rescue Exception => msg
3455
+ $log.error("Can't instantiate #{cm_name} plugin class #{msg}")
3456
+ iter[3] = ""
3457
+ end
3458
+ end
3459
+ #description
3460
+ begin
3461
+ iter[4] = Object.const_get(cm_name).name()
3462
+ rescue Exception => msg
3463
+ $log.error("Can't instantiate #{cm_name} plugin class #{msg}")
3464
+ iter[4] = ""
3465
+ end
3466
+ end
3467
+ end
3468
+
3469
+ vbox.add(@customview)
3470
+
3471
+ label_custom = Gtk::Label::new("Custom")
3472
+ notebook_inside.append_page frame, label_custom
3473
+
3474
+ ###########################end external cmd/plugin monitoring#################################################################
3475
+
3476
+ hbox = Gtk::HBox.new(FALSE, 1)
3477
+ hbox.add Gtk::Image.new(Gtk::Stock::EXECUTE, Gtk::IconSize::MENU)
3478
+ hbox.add Gtk::Label::new("Monitoring")
3479
+ hbox.show_all
3480
+ notebook.append_page notebook_inside, hbox
3481
+
3482
+ ######################### graph ###################################################################
3483
+
3484
+ # frame = Gtk::Frame::new("Graphic monitoring")
3485
+ # frame.border_width=10
3486
+ # frame.set_size_request(300, 300)
3487
+ # frame.show
3488
+
3489
+ # label = Gtk::Label::new("Graph")
3490
+ # notebook.append_page frame, label
3491
+
3492
+ ###########################end graph#################################################################
3493
+
3494
+ ok_button = Gtk::Button.new(Gtk::Stock::SAVE)
3495
+ ok_button.signal_connect("clicked") {
3496
+
3497
+ Thread.kill(@scan_port_th) unless @scan_port_th == nil
3498
+ Gtk.thread_flush
3499
+ if $config.port_mon && ($config.nmap_path != "")
3500
+ #store services
3501
+ if defined?(@treeview)
3502
+ node.clear_service()
3503
+ @treeview.model.each {|model, path, iter|
3504
+ selected = iter[0]
3505
+ protocol = iter[1]
3506
+ port = iter[2]
3507
+ service_name = iter[3]
3508
+ sev = iter[4]
3509
+ node.add_service(protocol, port, service_name, selected, sev)
3510
+ }
3511
+ end
3512
+ end
3513
+
3514
+ #store snmp_monitoring
3515
+ node.clear_snmp_monitoring()
3516
+ nbline=0
3517
+ @snmpview.model.each {|model, path, iter|
3518
+ state = iter[0]
3519
+ oidname = iter[1]
3520
+ oper = iter[2]
3521
+ threshold = iter[3]
3522
+ severity = iter[4]
3523
+ node.add_snmp_monitoring(state, oidname, oper, threshold, severity)
3524
+ nbline+=1
3525
+ }
3526
+ if nbline > 0 && (node.snmp_sev == UNMANAGED)
3527
+ node.set_snmp_severity(UNKNOWN)
3528
+ end
3529
+
3530
+ #store wmi_monitoring
3531
+ node.clear_wmi_monitoring()
3532
+ nbline=0
3533
+ @wmiview.model.each {|model, path, iter|
3534
+ state = iter[0]
3535
+ wminame = iter[1]
3536
+ oper = iter[2]
3537
+ value= iter[3]
3538
+ severity = iter[4]
3539
+ node.add_wmi_monitoring(state, wminame, oper, value, severity)
3540
+ nbline+=1
3541
+ }
3542
+ if nbline > 0 && (node.snmp_sev == UNMANAGED)
3543
+ node.set_snmp_severity(UNKNOWN)
3544
+ end
3545
+
3546
+ #store jmx_monitoring
3547
+ nbline=0
3548
+ db_del_jmx_monitoring(node.ip, HOSTNODE)
3549
+ node.jmx_monitoring.each_value { |jmx|
3550
+ db_add_jmx_monitoring(node.ip, HOSTNODE, jmx.get_state(), jmx.get_ref(), jmx.get_protocol(), jmx.get_port(), jmx.get_auth(), jmx.get_attributes())
3551
+ nbline+=1
3552
+ }
3553
+ if (nbline > 0) && (node.jmx_monitoring.size > 0) && (node.snmp_sev == UNMANAGED)
3554
+ node.set_snmp_severity(UNKNOWN)
3555
+ end
3556
+
3557
+ #store custom_monitoring
3558
+ node.clear_custom_monitoring()
3559
+ nbline=0
3560
+ custom_mon_table = Array.new()
3561
+
3562
+ @customview.model.each {|model, path, iter|
3563
+ state = iter[0]
3564
+ name = iter[1]
3565
+ severity = iter[2]
3566
+ param = iter[3]
3567
+ custom_mon_table.push(Array.[](state, name, param, $status.index(severity)))
3568
+ nbline+=1
3569
+ }
3570
+ if nbline > 0
3571
+ node.add_custom_monitoring_bulk(custom_mon_table)
3572
+ end
3573
+
3574
+ if nbline > 0 && (node.custom_sev == UNMANAGED)
3575
+ node.set_custom_severity(UNKNOWN)
3576
+ end
3577
+
3578
+ #store syslog_monitoring
3579
+ node.clear_syslog_monitoring()
3580
+ nbline=0
3581
+ @syslogview.model.each {|model, path, iter|
3582
+ state = iter[0]
3583
+ syslog_ref = iter[1]
3584
+ severity = iter[2]
3585
+ node.add_syslog_monitoring(state, syslog_ref, severity)
3586
+ nbline+=1
3587
+ }
3588
+ if nbline > 0 && (node.trap_sev == UNMANAGED)
3589
+ node.set_trap_severity(UNKNOWN)
3590
+ end
3591
+
3592
+ #store snmptrap_monitoring
3593
+ node.clear_snmptrap_monitoring()
3594
+ nbline=0
3595
+ @snmptrapview.model.each {|model, path, iter|
3596
+ state = iter[0]
3597
+ snmptrap_ref = iter[1]
3598
+ severity = iter[2]
3599
+ node.add_snmptrap_monitoring(state, snmptrap_ref, severity)
3600
+ nbline+=1
3601
+ }
3602
+ if nbline > 0 && (node.trap_sev == UNMANAGED)
3603
+ node.set_trap_severity(UNKNOWN)
3604
+ end
3605
+
3606
+ #store account only in db as the lived value is already stored in @acccount hash
3607
+ node.clear_db_accounts()
3608
+ account_table = Array.new()
3609
+ @account_view.model.each {|model, path, iter|
3610
+ idname = iter[0]
3611
+ login = iter[1]
3612
+ password = iter[2]
3613
+ account_table.push([idname, login, password])
3614
+ }
3615
+ if account_table.length > 0
3616
+ node.add_db_account(account_table)
3617
+ end
3618
+
3619
+
3620
+ #general
3621
+ if entry_x.text.to_i >= 0 && entry_x.text.to_i <= $win.window.geometry[2]
3622
+ node.x = entry_x.text.to_i
3623
+ end
3624
+ if entry_y.text.to_i >= 0 && entry_y.text.to_i <= $win.window.geometry[3]
3625
+ node.y = entry_y.text.to_i
3626
+ end
3627
+
3628
+ need_reload_icon=0
3629
+
3630
+ if entry_os.name != node.os || entry_type.name != node.type
3631
+ need_reload_icon=1
3632
+ end
3633
+
3634
+ if isValidIPv4(entry_ip.text)
3635
+ node.ip = entry_ip.text
3636
+ end
3637
+
3638
+ nodeid=db_get_node_id(node.ip, HOSTNODE)
3639
+
3640
+ node.netmask = entry_mask.text.to_i
3641
+ db_set_mask(nodeid, node.netmask)
3642
+
3643
+ if (entry_mac.text=="") || (entry_mac.text.match('\s+'))
3644
+ node.mac=Node::NOARP_PROPERTY
3645
+ else
3646
+ node.mac = entry_mac.text
3647
+ end
3648
+ db_set_mac(nodeid, node.mac)
3649
+
3650
+ if (entry_name.text=="") || (entry_name.text.match('\s+'))
3651
+ node.dns_name=Node::NONAME_PROPERTY
3652
+ else
3653
+ node.dns_name = entry_name.text
3654
+ end
3655
+ if (entry_netbiosname.text=="") || (entry_netbiosname.text.match('\s+'))
3656
+ node.netbios_name=Node::NONAME_PROPERTY
3657
+ else
3658
+ node.netbios_name = entry_netbiosname.text
3659
+ end
3660
+ if (entry_desc.text=="") || (entry_desc.text.match('\s+'))
3661
+ node.description=Node::NODESCR_PROPERTY
3662
+ else
3663
+ node.description = entry_desc.text
3664
+ end
3665
+ db_set_description(nodeid, node.description)
3666
+
3667
+ node.os = entry_os.name
3668
+ if entry_type.filename != nil
3669
+ node.change_type(entry_type.name)
3670
+ end
3671
+ node.change_label()
3672
+ if need_reload_icon == 1
3673
+ node.reload
3674
+ end
3675
+
3676
+ Thread.kill(refresh_node_sev_display)
3677
+ Gtk.thread_flush
3678
+ window.destroy
3679
+
3680
+ }
3681
+
3682
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
3683
+ cancel_button.signal_connect("clicked") {
3684
+ #we rollback the jmx monitoring from the db
3685
+ node.init_jmx_from_db()
3686
+ #we rollback here the account from the db to the @account hash
3687
+ node.init_account_from_db()
3688
+ Thread.kill(@scan_port_th) unless @scan_port_th == nil
3689
+ Gtk.thread_flush
3690
+ Thread.kill(refresh_node_sev_display)
3691
+ Gtk.thread_flush
3692
+ window.destroy
3693
+ }
3694
+
3695
+ hbox=Gtk::HBox.new(FALSE, 10)
3696
+ hbox.border_width=10
3697
+ hbox.show
3698
+ hbox.pack_start(ok_button, TRUE, TRUE, 0)
3699
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT);
3700
+ hbox.pack_start(cancel_button, TRUE, TRUE, 0)
3701
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT);
3702
+ separator = Gtk::HSeparator::new()
3703
+ vboxb.pack_start(separator, FALSE, TRUE, 0)
3704
+ separator.show
3705
+ vboxb.pack_start(hbox, FALSE, TRUE, 0)
3706
+ ok_button.show
3707
+ cancel_button.show
3708
+
3709
+ window.show
3710
+
3711
+ end
3712
+ end