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,799 @@
1
+ #
2
+ # here we can find Gtk::Window for add or del an host
3
+ #
4
+
5
+
6
+ #
7
+ # window to ask in which map to add a node,
8
+ # list networks in combobox
9
+ # return the network ip
10
+ #
11
+ def choose_network_map(node_ip, default_map=nil)
12
+ $in_network_map_choice.synchronize {
13
+ choosemap_win = Gtk::Window.new
14
+ choosemap_win.set_transient_for($win)
15
+ choosemap_win.set_title("Choose network map")
16
+ choosemap_win.set_size_request(500, 200)
17
+ choosemap_win.set_modal(true)
18
+
19
+ hbox=Gtk::HBox::new
20
+ frame = Gtk::Frame::new
21
+ frame.border_width=10
22
+ frame.show
23
+ hbox.add frame
24
+
25
+ hbox_root=Gtk::HBox::new
26
+ vbox = Gtk::VButtonBox::new
27
+
28
+ label_map = Gtk::Label.new "New node at IP #{node_ip} found in local network segment.\nWhere do you want to add it ?"
29
+ entry_map = Gtk::ComboBox.new
30
+ get_network().each { |n|
31
+ entry_map.append_text(n)
32
+ }
33
+ entry_map.set_active(0)
34
+ if !default_map.nil? and !default_map.empty?
35
+ ind = get_network().index(default_map)
36
+ entry_map.set_active(ind) if ind
37
+ end
38
+ bbox=Gtk::HButtonBox.new
39
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
40
+ ok_button.signal_connect("clicked") {
41
+ result = entry_map.active_text
42
+ choosemap_win.destroy
43
+ $network_map_result = result
44
+ }
45
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
46
+ cancel_button.signal_connect("clicked") {
47
+ choosemap_win.destroy
48
+ $network_map_result = ""
49
+ }
50
+
51
+ choosemap_win.signal_connect("key_press_event") {|w,e|
52
+ if e.keyval == Gdk::Keyval::GDK_Escape
53
+ choosemap_win.destroy
54
+ $network_map_result = ""
55
+ end
56
+ }
57
+
58
+ check_map = Gtk::CheckButton.new("Always use this network")
59
+ if $network_map_always == 1
60
+ check_map.set_active true
61
+ else
62
+ check_map.set_active false
63
+ end
64
+ check_map.signal_connect("toggled") {
65
+ $network_map_always = check_map.active? ? 1 : 0
66
+ }
67
+
68
+ bbox.add ok_button
69
+ bbox.add cancel_button
70
+ bbox.show_all
71
+
72
+ vbox.add label_map
73
+ vbox.add entry_map
74
+ vbox.add check_map
75
+ vbox.add bbox
76
+ hbox_root.add Gtk::Image.new(Gtk::Stock::DIALOG_QUESTION, Gtk::IconSize::DIALOG)
77
+ hbox_root.add vbox
78
+ frame.add hbox_root
79
+ choosemap_win.add hbox
80
+ choosemap_win.show_all
81
+ }
82
+ end
83
+
84
+ #
85
+ # error window
86
+ #
87
+ def errorEntry(win, ent)
88
+ lbl="You have to fill at least IP or DNS name"
89
+ if ent != ""
90
+ lbl="Error: '#{ent}'"
91
+ end
92
+ dialog = Gtk::MessageDialog.new(win, Gtk::Dialog::DESTROY_WITH_PARENT,
93
+ Gtk::MessageDialog::ERROR,
94
+ Gtk::MessageDialog::BUTTONS_OK,
95
+ lbl)
96
+
97
+ dialog.set_icon("#{PIXMAP_PATH}/logo_icon.png")
98
+ dialog.run
99
+ dialog.destroy
100
+ end
101
+
102
+ #
103
+ # window to add an host
104
+ #
105
+ def addnodewin()
106
+
107
+ if $win == nil
108
+ return
109
+ end
110
+
111
+ addwin=Gtk::Window.new
112
+ addwin.set_transient_for($win)
113
+ addwin.set_title("Node host adding")
114
+ addwin.set_size_request(350, 270)
115
+ addwin.set_modal(true)
116
+
117
+ addwin.signal_connect("key_press_event") {|w,e|
118
+ if e.keyval == Gdk::Keyval::GDK_Escape
119
+ addwin.destroy
120
+ end
121
+ }
122
+
123
+ frame = Gtk::Frame::new("Add an host")
124
+ frame.border_width=10
125
+ frame.show
126
+ vbox_root=Gtk::VBox::new
127
+ vbox_root.show
128
+ addwin.add vbox_root
129
+ vbox_root.add frame
130
+
131
+ vbox = Gtk::VBox.new
132
+ vbox.show
133
+ frame.add vbox
134
+
135
+ table = Gtk::Table.new(8,2,false)
136
+ table.show
137
+
138
+ label_icon = Gtk::Label.new "Icon"
139
+ label_icon.show
140
+
141
+ ent = Gtk::ImageComboList.new("type", "host")
142
+ ent.show
143
+
144
+ table.attach(label_icon,0,1,0,1)
145
+ table.attach(ent,1,2,0,1)
146
+
147
+ #set_editable set_visibility set_sensitive set_text
148
+ entry_ip = Gtk::Entry.new
149
+ entry_ip.show
150
+
151
+ label_ip = Gtk::Label.new "IP"
152
+ label_ip.show
153
+
154
+ table.attach(label_ip,0,1,1,2)
155
+ table.attach(entry_ip,1,2,1,2)
156
+
157
+ hbox = Gtk::HBox.new
158
+ hbox.show
159
+ entry_netmask = Gtk::Entry.new
160
+ entry_netmask.set_text "255.255.255.0"
161
+ entry_netmask.set_editable false
162
+ entry_netmask.show
163
+
164
+ adj = Gtk::Adjustment::new(0, 1.0, 32.0, 1.0, 5.0, 0.0)
165
+ compressnetmask = Gtk::SpinButton::new(adj, 0, 0)
166
+ compressnetmask.set_wrap(true)
167
+ compressnetmask.set_editable false
168
+ compressnetmask.set_value 24.0
169
+
170
+ compressnetmask.show
171
+ hbox.add entry_netmask
172
+ hbox.add compressnetmask
173
+ label_netmask = Gtk::Label.new "Mask"
174
+ label_netmask.show
175
+ table.attach(label_netmask,0,1,2,3)
176
+ table.attach(hbox,1,2,2,3)
177
+
178
+ compressnetmask.signal_connect("value-changed") {
179
+ entry_netmask.set_text bit2netmask(compressnetmask.value_as_int)
180
+ }
181
+
182
+ entry_name = Gtk::Entry.new
183
+ #entry_name.select_region(0, 5)
184
+ entry_name.show
185
+
186
+ label_name = Gtk::Label.new "DNS name"
187
+ label_name.show
188
+
189
+ table.attach(label_name,0,1,3,4)
190
+ table.attach(entry_name,1,2,3,4)
191
+
192
+ label_map = Gtk::Label.new "Map"
193
+ label_map.show
194
+ entry_map = Gtk::ComboBox.new
195
+ get_network().each { |n|
196
+ entry_map.append_text(n)
197
+ }
198
+ if get_map() != nil
199
+ ind = get_network().index(get_map())
200
+ entry_map.set_active(ind) if ind
201
+ end
202
+ entry_map.show
203
+
204
+ table.attach(label_map,0,1,4,5)
205
+ table.attach(entry_map,1,2,4,5)
206
+
207
+ entry_description = Gtk::Entry.new
208
+ #entry_description.select_region(0, 5)
209
+ entry_description.show
210
+ label_description = Gtk::Label.new "Description"
211
+ label_description.show
212
+
213
+ table.attach(label_description,0,1,5,6)
214
+ table.attach(entry_description,1,2,5,6)
215
+
216
+ bbox =Gtk::HBox::new(FALSE, 10)
217
+ bbox.border_width=10
218
+ bbox.show
219
+
220
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
221
+ ok_button.show
222
+ ok_button.signal_connect("clicked") {
223
+ nnode_pix_os = "os/unknown.png"
224
+ if ent.filename == nil
225
+ nnode_type = "pc"
226
+ else
227
+ nnode_type_t = ent.filename.match('^.+\/(.+)\..*$')
228
+ nnode_type=nnode_type_t[1]
229
+ end
230
+
231
+ if isValidIPv4(entry_ip.text) or (entry_name.text != "")
232
+ if (entry_ip.text == "") and (entry_name.text != "")
233
+ #we will try to resolve the name
234
+ ip_from_name = ""
235
+ begin
236
+ ip_from_name = Resolv.getaddress entry_name.text
237
+ rescue Exception => msg
238
+ errorEntry(addwin, msg)
239
+ next
240
+ end
241
+ entry_ip.text = ip_from_name if ip_from_name
242
+ end
243
+ if entry_name.text == ""
244
+ entry_name.set_text Node::NONAME_PROPERTY
245
+ end
246
+
247
+ if entry_description.text == ""
248
+ entry_description.set_text Node::NODESCR_PROPERTY
249
+ end
250
+
251
+ lentry=entry_ip.text.split(/\./)
252
+ if lentry[3] == "0" || lentry[3] == "255"
253
+ #add a network
254
+ $log.info("Seems that it's a network! Trying to add it")
255
+ mask=compressnetmask.value_as_int
256
+ tfindremotehost(entry_ip.text,mask)
257
+ addwin.destroy
258
+ else
259
+ if !$host[entry_ip.text]
260
+ #we dont use add_host, here we can set more attribute
261
+ $host[entry_ip.text]=Host.new(entry_ip.text,compressnetmask.value_as_int,nil,nil,entry_map.active_text,Node::NOARP_PROPERTY,entry_name.text,Node::NONAME_PROPERTY,nil,UNKNOWN,0,0, nnode_pix_os,entry_description.text,nnode_type,"unknown")
262
+ $network[entry_map.active_text].add_host($host[entry_ip.text])
263
+ $network[entry_map.active_text].update_status()
264
+ $host[entry_ip.text].reload()
265
+ #now we need to force node view drawing
266
+ $host[entry_ip.text].node_view.show() if entry_map.active_text==get_map()
267
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", $host[entry_ip.text], "Host added")
268
+ #$network[entry_map.active_text].update_status()
269
+ addwin.destroy
270
+ else
271
+ errorEntry(addwin, "Host already exists")
272
+ end
273
+ end
274
+ else
275
+ errorEntry(addwin, entry_ip.text)
276
+ end
277
+ }
278
+
279
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
280
+ cancel_button.show
281
+ cancel_button.signal_connect("clicked") {
282
+ addwin.destroy
283
+ }
284
+
285
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
286
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
287
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
288
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
289
+
290
+ vbox.add(table)
291
+ separator = Gtk::HSeparator::new()
292
+ separator.show
293
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
294
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
295
+
296
+
297
+ addwin.show
298
+ end
299
+
300
+ #
301
+ # window to delete an host
302
+ #
303
+ def verify_delnodewin(node)
304
+
305
+ #test if is not the root network
306
+ if !node || (node.map == nil)
307
+ return
308
+ end
309
+
310
+ mode=1
311
+ if node.class == Array
312
+ #multiple nodes!
313
+ mode=2
314
+ end
315
+
316
+ if $config.confirm_delete
317
+ label=""
318
+ if mode == 1
319
+ if node.ip == ""
320
+ label = "Do you really want to delete this node ?"
321
+ else
322
+ label = "Do you want to delete '#{node.ip}' ?"
323
+ end
324
+ else
325
+ #test if there more than 1 node in the array
326
+ if node.size > 1
327
+ label = "Do you really want to delete these nodes ?"
328
+ else
329
+ label = "Do you want to delete '#{node[0].ip}' ?"
330
+ end
331
+ end
332
+ dialog = Gtk::MessageDialog.new($win, Gtk::Dialog::DESTROY_WITH_PARENT,
333
+ Gtk::MessageDialog::QUESTION,
334
+ Gtk::MessageDialog::BUTTONS_YES_NO,
335
+ label)
336
+ dialog.run do |r|
337
+ dialog.destroy
338
+ if r == Gtk::Dialog::RESPONSE_YES then
339
+ if mode == 1
340
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", node, "Host removed")
341
+ node.delete()
342
+ #update map
343
+ #$network[node.map].update_status()
344
+ else
345
+ node.each {|n|
346
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", n, "Host removed")
347
+ n.delete()
348
+ }
349
+ #$network[n[0].map].update_status() unless n[0] == nil
350
+ end
351
+ return 1
352
+ end
353
+ end
354
+ else
355
+ #dont show confirm popup and delete anyway
356
+ if mode == 1
357
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", node, "Host removed")
358
+ node.delete()
359
+ else
360
+ node.each {|n|
361
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", n, "Host removed")
362
+ n.delete()
363
+ }
364
+ end
365
+ return 1
366
+ end
367
+ return 0
368
+ end
369
+
370
+ #
371
+ # window to add a range of host node
372
+ #
373
+ def add_host_range()
374
+ if $win == nil
375
+ return
376
+ end
377
+
378
+ addwin=Gtk::Window.new
379
+ addwin.set_transient_for($win)
380
+ addwin.set_title("Node host range adding")
381
+ addwin.set_size_request(350, 150)
382
+ addwin.set_modal(true)
383
+
384
+ addwin.signal_connect("key_press_event") {|w,e|
385
+ if e.keyval == Gdk::Keyval::GDK_Escape
386
+ addwin.destroy
387
+ end
388
+ }
389
+
390
+ frame = Gtk::Frame::new("Add host range")
391
+ frame.border_width=10
392
+ frame.show
393
+ vbox_root=Gtk::VBox::new
394
+ vbox_root.show
395
+ addwin.add vbox_root
396
+ vbox_root.add frame
397
+ vbox = Gtk::VBox.new
398
+ vbox.show
399
+ frame.add vbox
400
+
401
+ table = Gtk::Table.new(3,2,false)
402
+ table.show
403
+
404
+ hostalivetoo = Gtk::CheckButton.new("Add alive hosts in range")
405
+ hostalivetoo.show
406
+
407
+ label_ip = Gtk::Label.new "IP"
408
+ label_ip.show
409
+
410
+ hbox = Gtk::HBox.new
411
+ hbox.show
412
+ entry_ip = Gtk::Entry.new
413
+ entry_ip.show
414
+ entry_ip_end = Gtk::Entry.new
415
+ entry_ip_end.set_size_request(10,-1)
416
+ entry_ip_end.show
417
+ hbox.add entry_ip
418
+ hbox.add entry_ip_end
419
+
420
+ table.attach(label_ip,0,1,0,1)
421
+ table.attach(hbox,1,2,0,1)
422
+
423
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
424
+ ok_button.show
425
+ ok_button.signal_connect("clicked") {
426
+
427
+ if isValidIPv4(entry_ip.text) && isInteger(entry_ip_end.text)
428
+
429
+ if hostalivetoo.active?
430
+ tfindrangeremotehost(entry_ip.text, entry_ip_end.text)
431
+ else
432
+ lentry=entry_ip.text.split(/\./)
433
+ ip_addr="#{lentry[0]}.#{lentry[1]}.#{lentry[3]}."
434
+ limit_inf=lentry[3].to_i()
435
+ limit_sup=entry_ip_end.text.to_i()
436
+ if limit_inf > limit_sup
437
+ limit_tmp=limit_inf
438
+ limit_inf=limit_sup
439
+ limit_sup=limit_tmp
440
+ end
441
+ for ip in limit_inf..limit_sup
442
+ add_host(ip_addr+"#{ip}", 24, get_map())
443
+ end
444
+ #$network[get_map()].update_status()
445
+ end
446
+ addwin.destroy
447
+ else
448
+ if isInteger(entry_ip_end.text)
449
+ errorEntry(addwin, entry_ip.text)
450
+ else
451
+ errorEntry(addwin, entry_ip_end.text)
452
+ end
453
+ end
454
+ }
455
+
456
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
457
+ cancel_button.show
458
+ cancel_button.signal_connect("clicked") {
459
+ addwin.destroy
460
+ }
461
+
462
+ bbox =Gtk::HBox::new(FALSE, 10)
463
+ bbox.border_width=10
464
+ bbox.show
465
+
466
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
467
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
468
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
469
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
470
+
471
+ vbox.add(table)
472
+ vbox.add hostalivetoo
473
+ separator = Gtk::HSeparator::new()
474
+ separator.show
475
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
476
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
477
+
478
+ addwin.show
479
+ end
480
+
481
+ #
482
+ # window to add a network
483
+ #
484
+ def addnetworkwin()
485
+ if $win == nil
486
+ return
487
+ end
488
+
489
+ addwin=Gtk::Window.new
490
+ addwin.set_transient_for($win)
491
+ addwin.set_title("Node network adding")
492
+ addwin.set_size_request(350, 200)
493
+ addwin.set_modal(true)
494
+
495
+ addwin.signal_connect("key_press_event") {|w,e|
496
+ if e.keyval == Gdk::Keyval::GDK_Escape
497
+ addwin.destroy
498
+ end
499
+ }
500
+
501
+ frame = Gtk::Frame::new("Add Network")
502
+ frame.border_width=10
503
+ frame.show
504
+ vbox_root=Gtk::VBox::new
505
+ vbox_root.show
506
+ addwin.add vbox_root
507
+ vbox_root.add frame
508
+ vbox = Gtk::VBox.new
509
+ vbox.show
510
+ frame.add vbox
511
+
512
+ table = Gtk::Table.new(3,2,false)
513
+ table.show
514
+
515
+ hostalivetoo = Gtk::CheckButton.new("Add alive host in network")
516
+ hostalivetoo.show
517
+
518
+ label_ip = Gtk::Label.new "IP / Domain"
519
+ label_ip.show
520
+ entry_ip = Gtk::Entry.new
521
+ entry_ip.show
522
+
523
+ table.attach(label_ip,0,1,0,1)
524
+ table.attach(entry_ip,1,2,0,1)
525
+ label_netmask = Gtk::Label.new "Netmask"
526
+ label_netmask.show
527
+
528
+ hbox = Gtk::HBox.new
529
+ hbox.show
530
+ entry_netmask = Gtk::Entry.new
531
+ entry_netmask.set_text "255.255.255.0"
532
+ entry_netmask.set_editable false
533
+ entry_netmask.show
534
+
535
+ adj = Gtk::Adjustment::new(0, 1.0, 32.0, 1.0, 5.0, 0.0)
536
+ compressnetmask = Gtk::SpinButton::new(adj, 0, 0)
537
+ compressnetmask.set_wrap(true)
538
+ compressnetmask.set_editable false
539
+ compressnetmask.set_value 24.0
540
+
541
+ compressnetmask.show
542
+ hbox.add entry_netmask
543
+ hbox.add compressnetmask
544
+ table.attach(label_netmask,0,1,1,2)
545
+ table.attach(hbox,1,2,1,2)
546
+
547
+ entry_ip.signal_connect("changed") {
548
+ if entry_ip.text.match /^[\.\d]+$/
549
+ hbox.set_sensitive(true)
550
+ else
551
+ hbox.set_sensitive(false)
552
+ end
553
+ }
554
+
555
+ compressnetmask.signal_connect("value-changed") {
556
+ entry_netmask.set_text bit2netmask(compressnetmask.value_as_int)
557
+ }
558
+
559
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
560
+ ok_button.show
561
+ ok_button.signal_connect("clicked") {
562
+ if isValidIPv4(entry_ip.text)
563
+ lentry=entry_ip.text.split(/\./)
564
+ if !$network[entry_ip.text]
565
+ if hostalivetoo.active?
566
+ tfindremotehost(entry_ip.text,compressnetmask.value_as_int)
567
+ else
568
+ add_network(entry_ip.text, compressnetmask.value_as_int, get_map())
569
+ end
570
+ addwin.destroy
571
+ else
572
+ errorEntry(addwin, "Network already exists")
573
+ end
574
+ else
575
+ #it may be a domainname
576
+ ip_from_domain = ""
577
+ begin
578
+ ip_from_domain = Resolv.getaddress entry_ip.text
579
+ #transfor this ip in at least a class C
580
+ ip_from_domain.gsub! /\.\d+$/,".0"
581
+ rescue Exception => msg
582
+ errorEntry(addwin, msg)
583
+ next
584
+ end
585
+ if !$network[ip_from_domain]
586
+ add_network(ip_from_domain, 24, get_map())
587
+ else
588
+ errorEntry(addwin, "Network already exists")
589
+ end
590
+ if hostalivetoo.active?
591
+ dns = Resolv::DNS.new
592
+
593
+ resource_type=Resolv::DNS::Resource::IN::ANY
594
+ if RUBY_VERSION.match("^1\.8")
595
+ #only A type for ruby 1.8 as ANY is not working
596
+ resource_type=Resolv::DNS::Resource::IN::A
597
+ end
598
+
599
+ dns.getresources(entry_ip.text, resource_type).collect do |r|
600
+ if r.kind_of?(Resolv::DNS::Resource::IN::MX) or r.kind_of?(Resolv::DNS::Resource::IN::A) or r.kind_of?(Resolv::DNS::Resource::IN::AAAA) or r.kind_of?(Resolv::DNS::Resource::IN::NS) then
601
+ begin
602
+ ip_from_name = ""
603
+ name = ""
604
+ if r.kind_of?(Resolv::DNS::Resource::IN::MX)
605
+ name = r.exchange.to_s.strip
606
+ ip_from_name = Resolv.getaddress name
607
+ elsif r.kind_of?(Resolv::DNS::Resource::IN::A)
608
+ ip_from_name = r.address.to_s.strip
609
+ elsif r.kind_of?(Resolv::DNS::Resource::IN::NS)
610
+ name = r.name.to_s.strip
611
+ ip_from_name = Resolv.getaddress name
612
+ end
613
+ if !$host[ip_from_name]
614
+ add_host(ip_from_name, 24, ip_from_domain)
615
+ if $host[ip_from_name]
616
+ if r.kind_of?(Resolv::DNS::Resource::IN::MX)
617
+ $host[ip_from_name].add_service("tcp", 25, "", 0, 0)
618
+ elsif r.kind_of?(Resolv::DNS::Resource::IN::NS)
619
+ $host[ip_from_name].add_service("udp", 53, "", 0, 0)
620
+ end
621
+ if name != ""
622
+ $host[ip_from_name].dns_name = name
623
+ end
624
+ end
625
+ else
626
+ errorEntry(addwin, "Host already exists")
627
+ end
628
+ rescue Exception => msg
629
+ errorEntry(addwin, msg)
630
+ next
631
+ end
632
+ end
633
+ end
634
+ end
635
+ addwin.destroy
636
+ end
637
+ }
638
+
639
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
640
+ cancel_button.show
641
+ cancel_button.signal_connect("clicked") {
642
+ addwin.destroy
643
+ }
644
+
645
+ bbox =Gtk::HBox::new(FALSE, 10)
646
+ bbox.border_width=10
647
+ bbox.show
648
+
649
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
650
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
651
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
652
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
653
+
654
+ vbox.add(table)
655
+ vbox.add hostalivetoo
656
+ separator = Gtk::HSeparator::new()
657
+ separator.show
658
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
659
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
660
+
661
+ addwin.show
662
+ end
663
+
664
+ #
665
+ # delete node
666
+ #
667
+ def delnodewin()
668
+ if $win == nil
669
+ return
670
+ end
671
+
672
+ delwin=Gtk::Window.new
673
+ delwin.set_transient_for($win)
674
+ delwin.set_title("Node deleting")
675
+ delwin.set_size_request(250, 160)
676
+ delwin.set_modal(true)
677
+
678
+ delwin.signal_connect("key_press_event") {|w,e|
679
+ if e.keyval == Gdk::Keyval::GDK_Escape
680
+ delwin.destroy
681
+ end
682
+ }
683
+
684
+ frame = Gtk::Frame::new("Del Node")
685
+ frame.border_width=10
686
+ frame.show
687
+ vbox_root=Gtk::VBox::new
688
+ vbox_root.show
689
+ delwin.add vbox_root
690
+ vbox_root.add frame
691
+ vbox = Gtk::VBox.new
692
+ vbox.show
693
+ frame.add vbox
694
+
695
+ table = Gtk::Table.new(3,2,false)
696
+ table.set_row_spacings(5)
697
+ table.set_size_request(-1,15)
698
+ table.show
699
+
700
+ label_type = Gtk::Label.new "Type"
701
+ label_type.show
702
+ combo_type=Gtk::ComboBox.new
703
+ combo_type.append_text("Host")
704
+ combo_type.append_text("Network")
705
+ combo_type.set_active(0)
706
+ combo_type.show
707
+
708
+ table.attach(label_type,0,1,0,1)
709
+ table.attach(combo_type,1,2,0,1)
710
+
711
+ label_value = Gtk::Label.new "Value"
712
+ label_value.show
713
+ combo_value=Gtk::ComboBox.new
714
+ $host.each_value do |node|
715
+ combo_value.append_text(node.ip)
716
+ end
717
+ combo_value.set_active(0)
718
+ combo_value.show
719
+
720
+ table.attach(label_value,0,1,1,2)
721
+ table.attach(combo_value,1,2,1,2)
722
+
723
+ combo_type.signal_connect("changed") do |combo|
724
+ case combo.active_text
725
+ when "Host" then
726
+ for ind in 0..$network.size()-2
727
+ combo_value.remove_text(0)
728
+ end
729
+ $host.each_value do |node|
730
+ combo_value.append_text(node.ip)
731
+ end
732
+ combo_value.set_active(0)
733
+ when "Network" then
734
+ for ind in 0..$host.size()-1
735
+ combo_value.remove_text(0)
736
+ end
737
+ #need to test in which map we are
738
+ network_list=[]
739
+ #contain path to map in which we are
740
+ map_list=[]
741
+ map_current=get_map()
742
+ begin
743
+ map_list.push map_current
744
+ map_current=$network[map_current].map
745
+ end until map_current == nil
746
+
747
+ $network.each_value do |node|
748
+ network_list.push(node.ip)
749
+ end
750
+ (network_list - map_list).each do |val|
751
+ combo_value.append_text(val)
752
+ end
753
+ combo_value.set_active(0)
754
+ end
755
+ end
756
+ del_button = Gtk::Button.new(Gtk::Stock::REMOVE)
757
+ del_button.show
758
+ del_button.signal_connect("clicked") {
759
+ case combo_type.active_text
760
+ when "Host" then
761
+ if combo_value.active_text != nil
762
+ if verify_delnodewin($host[combo_value.active_text]) == 1
763
+ combo_value.remove_text(combo_value.active)
764
+ combo_value.set_active(0)
765
+ end
766
+ end
767
+ when "Network" then
768
+ if combo_value.active_text != nil
769
+ if verify_delnodewin($network[combo_value.active_text]) == 1
770
+ combo_value.remove_text(combo_value.active)
771
+ combo_value.set_active(0)
772
+ end
773
+ end
774
+ end
775
+ }
776
+
777
+ close_button = Gtk::Button.new(Gtk::Stock::CLOSE)
778
+ close_button.show
779
+ close_button.signal_connect("clicked") {
780
+ delwin.destroy
781
+ }
782
+
783
+ bbox =Gtk::HBox::new(FALSE, 10)
784
+ bbox.border_width=10
785
+ bbox.show
786
+
787
+ del_button.set_flags(Gtk::Widget::CAN_DEFAULT)
788
+ bbox.pack_start(del_button, TRUE, TRUE, 0)
789
+ close_button.set_flags(Gtk::Widget::CAN_DEFAULT)
790
+ bbox.pack_start(close_button, TRUE, TRUE, 0)
791
+
792
+ vbox.pack_start(table, FALSE, TRUE)
793
+ separator = Gtk::HSeparator::new()
794
+ separator.show
795
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
796
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
797
+
798
+ delwin.show
799
+ end