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,789 @@
1
+ =begin header
2
+
3
+ base window
4
+
5
+ =end
6
+
7
+ require "#{GNMSLIB}"+'/gui/help_window'
8
+ require "#{GNMSLIB}"+'/gui/update_window'
9
+ require "#{GNMSLIB}"+'/gui/oid_ref_window'
10
+ require "#{GNMSLIB}"+'/gui/wmi_ref_window'
11
+ require "#{GNMSLIB}"+'/gui/jmx_ref_window'
12
+ require "#{GNMSLIB}"+'/gui/syslog_ref_window'
13
+ require "#{GNMSLIB}"+'/gui/snmptrap_ref_window'
14
+ require "#{GNMSLIB}"+'/gui/custom_plugin_window'
15
+ require "#{GNMSLIB}"+'/gui/mib_browser'
16
+ require "#{GNMSLIB}"+'/gui/about_window'
17
+ require "#{GNMSLIB}"+'/gui/find_node_window'
18
+ require "#{GNMSLIB}"+'/gui/color_macro'
19
+ require "#{GNMSLIB}"+'/gui/treenode_window'
20
+ require "#{GNMSLIB}"+'/gui/ipcalculator'
21
+ require "#{GNMSLIB}"+'/monitor/custom_plugin'
22
+ require "#{GNMSLIB}"+'/config_global'
23
+ require "#{GNMSLIB}"+'/node_db'
24
+
25
+ #default network map where to add new nodes
26
+ $network_map_always = 0
27
+ $network_map_result = nil
28
+ $in_network_map_choice = Mutex.new
29
+
30
+
31
+ #we load plugins rb files
32
+ lfile = Dir["#{PLUGIN_DIR}/*.rb"]
33
+ lfile.sort!
34
+ cptCustomMon=0
35
+ $plugin_name_list = []
36
+ for pluginsfile in lfile
37
+ begin
38
+ require pluginsfile
39
+
40
+ pluginsfile=pluginsfile[PLUGIN_DIR.length+1,pluginsfile.size - PLUGIN_DIR.length - 1 - 3]
41
+ cmd="#{pluginsfile[0,1].capitalize()}#{pluginsfile[1,pluginsfile.size - 1]}"
42
+ if (eval cmd).superclass==CustomPlugin
43
+ cptCustomMon+=1
44
+ #create custom monitor table if needed
45
+ if !defined?($custom_monitor)
46
+ $custom_monitor=[]
47
+ end
48
+ #add custom monitor into array
49
+ $custom_monitor.push(cmd)
50
+ else
51
+ $plugin_name_list.push(cmd)
52
+ end
53
+ rescue Exception => msg
54
+ $log.info("Error when loading #{pluginsfile} custom monitor plugin: #{msg}")
55
+ next
56
+ end
57
+
58
+ end
59
+
60
+ if cptCustomMon>0
61
+ $log.info("Find #{cptCustomMon} custom monitor plugin" + (cptCustomMon>1?"s":""))
62
+ end
63
+
64
+ class App < Gtk::Window
65
+
66
+ def N_ (text)
67
+ return text
68
+ end
69
+
70
+ def busy()
71
+ @busy = 1
72
+ self.disable_menu()
73
+ self.window.cursor = Gdk::Cursor.new(Gdk::Cursor::WATCH) if self.window
74
+ end
75
+
76
+ def unbusy()
77
+ @busy = 0
78
+ self.enable_menu()
79
+ self.window.cursor = nil if self.window
80
+ end
81
+
82
+ def busy?()
83
+ return @busy == 1
84
+ end
85
+
86
+ def set_map_display_view_user_defined()
87
+ $config.map_display_view="User defined"
88
+ end
89
+
90
+ def hide_menu_entry()
91
+ @ag.get_action("AddMenu").sensitive=false
92
+ end
93
+
94
+ def show_menu_entry()
95
+ @ag.get_action("AddMenu").sensitive=true
96
+ end
97
+
98
+ def hide_update_menu_entry()
99
+ @ag.get_action("Update").sensitive=false
100
+ end
101
+
102
+ def show_update_menu_entry()
103
+ @ag.get_action("Update").sensitive=true
104
+ end
105
+
106
+ def hide_menu()
107
+ @main_vbox.remove(@main_bar)
108
+ end
109
+
110
+ def disable_menu()
111
+ @main_bar.set_sensitive(false) if @main_bar
112
+ end
113
+
114
+ def enable_menu()
115
+ @main_bar.set_sensitive(true) if @main_bar
116
+ end
117
+
118
+ def show_menu()
119
+ @main_bar.height_request=30
120
+ @main_vbox.pack_start(@main_bar,false)
121
+ @main_vbox.reorder_child(@main_bar,0)
122
+ end
123
+
124
+ def check_update()
125
+ check_update_window()
126
+ end
127
+
128
+ def set_display_view_menu()
129
+ @ag.get_action("User defined").activate
130
+ end
131
+
132
+ def get_size_changed_from_menu()
133
+ return @size_changed_from_menu
134
+ end
135
+
136
+ def set_size_changed_from_menu(b)
137
+ @size_changed_from_menu=b
138
+ end
139
+
140
+ def initialize(title)
141
+
142
+ super(title)
143
+ @size_changed_from_menu=false
144
+ @busy = 0
145
+
146
+ pluginslist=[]
147
+ create_plugins_list(pluginslist)
148
+
149
+ proc_map_window=Proc.new {|action, current|
150
+ @size_changed_from_menu=true
151
+ $config.map_display_view=current.name
152
+ if current.name == "25% screen"
153
+ map_window_activ_quart()
154
+ elsif current.name == "50% screen"
155
+ map_window_activ_half()
156
+ elsif current.name == "100% screen"
157
+ map_window_activ_full()
158
+ elsif current.name == "Full screen"
159
+ $canvas.toggle_fullscreen()
160
+ end
161
+ }
162
+
163
+ proc_icon=Proc.new {|action, current|
164
+ if current.name.index("host")
165
+ if current.name == "host_type"
166
+ $config.host_icon_view="type"
167
+ host_icon()
168
+ else
169
+ $config.host_icon_view="os"
170
+ host_icon()
171
+ end
172
+ else
173
+ if current.name == "network_type"
174
+ $config.network_icon_view="type"
175
+ network_icon()
176
+ else
177
+ $config.network_icon_view="os"
178
+ network_icon()
179
+ end
180
+ end
181
+ }
182
+
183
+ proc_label=Proc.new {|action, current|
184
+ if current.name.index("host")
185
+ if current.name == "host_dns_name"
186
+ $config.host_label_view="dns_name"
187
+ host_label()
188
+ elsif current.name == "host_netbios_name"
189
+ $config.host_label_view="netbios_name"
190
+ host_label()
191
+ elsif current.name == "host_ip"
192
+ $config.host_label_view="ip"
193
+ host_label()
194
+ elsif current.name == "host_osl"
195
+ $config.host_label_view="os"
196
+ host_label()
197
+ elsif current.name == "host_mac"
198
+ $config.host_label_view="mac"
199
+ host_label()
200
+ elsif current.name == "host_mac_manufacturer"
201
+ $config.host_label_view="mac_manufacturer"
202
+ host_label()
203
+ elsif current.name == "host_description"
204
+ $config.host_label_view="description"
205
+ host_label()
206
+ end
207
+ else
208
+ case current.name
209
+ when "network_name"
210
+ $config.network_label_view="name"
211
+ network_label()
212
+ when "network_dns_domain"
213
+ $config.network_label_view="dns_domain"
214
+ network_label()
215
+ when "network_netbios_domain"
216
+ $config.network_label_view="netbios_domain"
217
+ network_label()
218
+ when "network_ip"
219
+ $config.network_label_view="ip"
220
+ network_label()
221
+ when "network_osl"
222
+ $config.network_label_view="os"
223
+ network_label()
224
+ when "network_description"
225
+ $config.network_label_view="description"
226
+ network_label()
227
+ end
228
+ end
229
+ }
230
+
231
+ plugins_list_xml=""
232
+ pluginslist.each {|plugin_name_table|
233
+ plugins_list_xml="#{plugins_list_xml}\n<menuitem action='#{plugin_name_table[0]}'/>"
234
+ }
235
+
236
+ main_menu = %Q[
237
+ <ui>
238
+ <menubar name='MainBar'>
239
+ <menu action='FileMenu'>
240
+ <menuitem action='Open backup file'/>
241
+ <menuitem action='Save log'/>
242
+ <menuitem action='Save map'/>
243
+ <menuitem action='Save map as XML'/>
244
+ <menuitem action='Snapshot'/>
245
+ <separator/>
246
+ <menuitem action='Reset'/>
247
+ <separator/>
248
+ <menuitem action='Quit'/>
249
+ </menu>
250
+ <menu action='ViewMenu'>
251
+ <menu action='LabelMenu'>
252
+ <menu action='LabelHostMenu'>
253
+ <menuitem action='host_dns_name'/>
254
+ <menuitem action='host_netbios_name'/>
255
+ <menuitem action='host_ip'/>
256
+ <menuitem action='host_osl'/>
257
+ <menuitem action='host_mac'/>
258
+ <menuitem action='host_mac_manufacturer'/>
259
+ <menuitem action='host_description'/>
260
+ </menu>
261
+ <menu action='LabelNetworkMenu'>
262
+ <menuitem action='network_name'/>
263
+ <menuitem action='network_dns_domain'/>
264
+ <menuitem action='network_netbios_domain'/>
265
+ <menuitem action='network_ip'/>
266
+ <menuitem action='network_osl'/>
267
+ <menuitem action='network_description'/>
268
+ </menu>
269
+ </menu>
270
+ <menu action='IconMenu'>
271
+ <menu action='IconHostMenu'>
272
+ <menuitem action='host_osi'/>
273
+ <menuitem action='host_type'/>
274
+ </menu>
275
+ <menu action='IconNetworkMenu'>
276
+ <menuitem action='network_osi'/>
277
+ <menuitem action='network_type'/>
278
+ </menu>
279
+ </menu>
280
+ <separator/>
281
+ <menuitem action='Select all nodes'/>
282
+ <menuitem action='Switch selected nodes'/>
283
+ <separator/>
284
+ <menuitem action='Zoom in'/>
285
+ <menuitem action='Zoom out'/>
286
+ <menu action='MapWindowMenu'>
287
+ <menuitem action='User defined'/>
288
+ <menuitem action='25% screen'/>
289
+ <menuitem action='50% screen'/>
290
+ <menuitem action='100% screen'/>
291
+ <menuitem action='Full screen'/>
292
+ </menu>
293
+ </menu>
294
+ <menu action='ManageMenu'>
295
+ <menu action='AddMenu'>
296
+ <menuitem action='Add host'/>
297
+ <menuitem action='Add host range'/>
298
+ <menuitem action='Add network'/>
299
+ </menu>
300
+ <separator/>
301
+ <menuitem action='Del node'/>
302
+ </menu>
303
+ <menu action='OptionMenu'>
304
+ <menuitem action='Preference'/>
305
+ <menu action='EventConfMenu'>
306
+ <menuitem action='SNMP OID conf'/>
307
+ <menuitem action='SNMP Trap conf'/>
308
+ <menuitem action='WMI Request conf'/>
309
+ <menuitem action='JMX Ref conf'/>
310
+ <menuitem action='Syslog Ref conf'/>
311
+ <menuitem action='Custom conf'/>
312
+ </menu>
313
+ </menu>
314
+ <menu action='ToolsMenu'>
315
+ <menuitem action='Node Tree'/>
316
+ <menuitem action='Node Find'/>
317
+ <menuitem action='Event browser'/>
318
+ <menuitem action='MIB browser'/>
319
+ <menuitem action='IP calculator'/>
320
+ </menu>
321
+ <menu action='PluginMenu'>
322
+ #{plugins_list_xml}
323
+ </menu>
324
+ <menu action='HelpMenu'>
325
+ <menuitem action='Help'/>
326
+ <menuitem action='Update'/>
327
+ <menuitem action='About...'/>
328
+ </menu>
329
+ </menubar>
330
+ </ui>]
331
+
332
+ #we need to have an action_procs!
333
+ @action_procs=actions = [
334
+ ["FileMenu", nil, "_File"],
335
+ ["Open backup file", Gtk::Stock::OPEN, "_Open backup file", "<control>O", "Open backup file", proc{ open_file }],
336
+ ["Save log", Gtk::Stock::SAVE, "Save _Log", "<control>L", "Save current log", proc{ $event_win.save_event() }],
337
+ ["Save map", Gtk::Stock::SAVE, "_Save Map", "<control>S", "Save map", proc{ save }],
338
+ ["Save map as XML", Gtk::Stock::SAVE, "Save Map As _XML", "<control>X", "Save map to a file", proc{ save_as }],
339
+ ["Snapshot", Gtk::Stock::PRINT, "Snap Shot", nil, "Take a snapshot", proc{ snapshot }],
340
+ ["Reset", Gtk::Stock::NEW, "_Reset", "<control>R", "Create a new map", proc{ new_map }],
341
+ ["Quit", Gtk::Stock::QUIT, "_Quit", "<control>Q", "Quit", proc{ quit_now }],
342
+ ["ViewMenu", nil, "View"],
343
+ ["LabelMenu", nil, "Node label"],
344
+ ["IconMenu", nil, "Node icon"],
345
+ ["LabelHostMenu", nil, "Host as"],
346
+ ["IconHostMenu", nil, "Host as"],
347
+ ["LabelNetworkMenu", nil, "Network as"],
348
+ ["IconNetworkMenu", nil, "Network as"],
349
+ ["Select all nodes", nil, "Select _all nodes", "<control>A", "", proc { select_all_node() }],
350
+ ["Switch selected nodes", nil, "Sw_itch selected nodes", "<control>I", "", proc { invert_selected_node() }],
351
+ ["Zoom in", Gtk::Stock::ZOOM_IN, "Zoom in", "KP_Add", "", proc { $canvas.node_view_zoom_in() }],
352
+ ["Zoom out", Gtk::Stock::ZOOM_OUT, "Zoom out", "KP_Subtract", "", proc { $canvas.node_view_zoom_out() }],
353
+ ["MapWindowMenu", nil, "Map window"],
354
+ ["ManageMenu", nil, "Manage"],
355
+ ["AddMenu", Gtk::Stock::ADD, "Add node"],
356
+ ["Add host", nil, "Host", nil, "", proc { addnodewin }],
357
+ ["Add host range", nil, "Host range", nil, "", proc { add_host_range }],
358
+ ["Add network", nil, "Network", nil, "", proc { addnetworkwin }],
359
+ ["Del node", Gtk::Stock::REMOVE, "Del node", nil, "", proc { delnodewin }],
360
+ ["OptionMenu", nil, "Option"],
361
+ ["Preference", Gtk::Stock::PREFERENCES, "Preference", nil, "", proc { create_config_option } ],
362
+ ["EventConfMenu", nil, "Monitoring conf"],
363
+ ["SNMP OID conf", nil, "SNMP OID", "", "", proc { OIDRefWindow.new() }],
364
+ ["WMI Request conf", nil, "WMI Request", "", "", proc { WMIRefWindow.new() }],
365
+ ["Syslog Ref conf", nil, "Syslog Event", "", "", proc { SyslogRefWindow.new() }],
366
+ ["SNMP Trap conf", nil, "SNMP Trap", "", "", proc { SnmpTrapRefWindow.new() }],
367
+ ["JMX Ref conf", nil, "JMX Request", "", "", proc { JMXRefWindow.new() }],
368
+ ["Custom conf", nil, "Custom Plugin", "", "", proc { CustomPluginWindow.new() }],
369
+ ["ToolsMenu", nil, "Tools"],
370
+ ["Node Tree", nil, "Node _Tree", "<control>T", "", proc { $treenode_win.show() }],
371
+ ["Node Find", Gtk::Stock::FIND, "Node _Find", "<control>F", "", proc { findnodewin }],
372
+ ["Event browser", nil, "_Event browser", "<control>E", "", proc { $event_win.show() }],
373
+ ["MIB browser", nil, "_MIB browser", "<control>M", "", proc { MibBrowser.new }],
374
+ ["IP calculator", nil, "IP _calculator", "<control>C", "", proc { netmask_calculator} ],
375
+ ["PluginMenu", nil, "Plugins"],
376
+ ["HelpMenu", nil, "Help"],
377
+ ["Help", Gtk::Stock::HELP, "Help", nil, "", proc{ create_help }],
378
+ ["Update", Gtk::Stock::HOME, "Check update", nil, "", proc{ check_update }],
379
+ ["About...", Gtk::Stock::ABOUT, "About", nil, "About", proc{ AboutWindow.new }]
380
+ ]
381
+ $log.info("#{pluginslist.length()} plugin" + (pluginslist.length()>1?"s":"") + " loaded")
382
+ if pluginslist.length()
383
+ actions=actions+pluginslist
384
+ end
385
+
386
+ map_window_radio_actions = [
387
+ ["User defined", nil, "User defined", nil, "User defined", 0],
388
+ ["25% screen", nil, "25% screen", nil, "25% screen", 1],
389
+ ["50% screen", nil, "50% screen", nil, "50% screen", 2],
390
+ ["100% screen", nil, "100% screen", nil, "100% screen", 3],
391
+ ["Full screen", nil, "Full screen", nil, "Full screen", 4]
392
+ ]
393
+
394
+ node_host_label_radio_actions = [
395
+ ["host_dns_name", nil, "DNS Name", nil, "DNS Name", 0],
396
+ ["host_netbios_name", nil, "Netbios Name", nil, "Netbios Name", 1],
397
+ ["host_ip", nil, "IP", nil, "IP", 2],
398
+ ["host_osl", nil, "OS", nil, "OS", 3],
399
+ ["host_mac", nil, "MAC", nil, "MAC", 4],
400
+ ["host_mac_manufacturer", nil, "MAC manufacturer", nil, "MAC manufacturer", 5],
401
+ ["host_description", nil, "Description", nil, "Description", 6]
402
+ ]
403
+
404
+ node_network_label_radio_actions = [
405
+ ["network_name", nil, "Name", nil, "Name", 0],
406
+ ["network_dns_domain", nil, "DNS Domain", nil, "DNS Domain", 1],
407
+ ["network_netbios_domain", nil, "Netbios Domain", nil, "Netbios Domain", 2],
408
+ ["network_ip", nil, "IP", nil, "IP", 3],
409
+ ["network_osl", nil, "OS", nil, "OS", 4],
410
+ ["network_description", nil, "Description", nil, "Description", 5]
411
+ ]
412
+
413
+ node_host_icon_radio_actions = [
414
+ ["host_osi", nil, "OS", nil, "OS", 0],
415
+ ["host_type", nil, "Type", nil, "Type", 1]
416
+ ]
417
+ node_network_icon_radio_actions=[
418
+ ["network_osi", nil, "OS", nil, "OS", 0],
419
+ ["network_type", nil, "Type", nil, "Type", 1]
420
+ ]
421
+ @ag=actiongroup = Gtk::ActionGroup.new("Actions")
422
+ actiongroup.add_actions(actions)
423
+
424
+ map_display=0
425
+ map_window_radio_actions.each do |tab|
426
+ if $config.map_display_view == tab[0]
427
+ map_display=tab[5]
428
+ end
429
+ end
430
+ actiongroup.add_radio_actions(map_window_radio_actions, map_display, proc_map_window )
431
+
432
+ label_view_pos=0
433
+ node_host_label_radio_actions.each do |tab|
434
+ if ("host_#{$config.host_label_view}" == tab[0]) || ("host_#{$config.host_label_view}l" == tab[0])
435
+ break
436
+ end
437
+ label_view_pos+=1
438
+ end
439
+ actiongroup.add_radio_actions(node_host_label_radio_actions, label_view_pos, proc_label )
440
+
441
+ label_view_pos=0
442
+ node_network_label_radio_actions.each do |tab|
443
+ if ("network_#{$config.network_label_view}" == tab[0]) || ("network_#{$config.network_label_view}l" == tab[0])
444
+ break
445
+ end
446
+ label_view_pos+=1
447
+ end
448
+ actiongroup.add_radio_actions(node_network_label_radio_actions, label_view_pos, proc_label )
449
+
450
+ icon_view_pos=0
451
+ node_host_icon_radio_actions.each do |tab|
452
+ if ("host_#{$config.host_icon_view}" == tab[0]) || ("host_#{$config.host_icon_view}i" == tab[0])
453
+ break
454
+ end
455
+ icon_view_pos+=1
456
+ end
457
+ actiongroup.add_radio_actions(node_host_icon_radio_actions, icon_view_pos, proc_icon )
458
+
459
+ icon_view_pos=0
460
+ node_network_icon_radio_actions.each do |tab|
461
+ if ("network_#{$config.network_icon_view}" == tab[0]) || ("network_#{$config.network_icon_view}i" == tab[0])
462
+ break
463
+ end
464
+ icon_view_pos+=1
465
+ end
466
+ actiongroup.add_radio_actions(node_network_icon_radio_actions, icon_view_pos, proc_icon )
467
+
468
+ uimanager = Gtk::UIManager.new
469
+ uimanager.insert_action_group(actiongroup, 0)
470
+ add_accel_group(uimanager.accel_group)
471
+ uimanager.add_ui(main_menu)
472
+ @main_bar=uimanager.get_widget("/MainBar")
473
+ #we set height size
474
+ @main_bar.height_request=30
475
+
476
+ $canvas=CanvasMap.new
477
+ $canvas_root=$canvas.get_root()
478
+
479
+ @main_vbox = Gtk::VBox.new()
480
+
481
+ @main_vbox.pack_start(@main_bar, false)
482
+ @main_vbox.pack_start($canvas, true, true)
483
+
484
+ @main_vbox.signal_connect('size-allocate') { |w,e|
485
+ set_map_display_view_user_defined()
486
+ height=e.height
487
+ if !$canvas.fullscreen?()
488
+ height-=@main_bar.height_request
489
+ else
490
+ #we need to store $win size!
491
+ $root_width=$win.window.geometry[2]
492
+ $root_height=$win.window.geometry[3]
493
+ end
494
+ $canvas.set_size(e.width,height)
495
+ false
496
+ }
497
+
498
+ add(@main_vbox)
499
+ show_all()
500
+ $canvas.grab_focus()
501
+ #on startup we hide some menu entries
502
+ hide_menu_entry()
503
+
504
+ end
505
+
506
+ private
507
+ def create_plugins_list (plist)
508
+ launch_plugin = Proc.new do |action, plugin|
509
+ cmd=plugin.name
510
+ cmd="#{cmd[0,1].capitalize()}#{cmd[1,cmd.size - 1]}"
511
+ #use thread to prevent crash from bogus name with file & class
512
+ Thread.start {
513
+ begin
514
+ Object.const_get(cmd).new()
515
+ rescue Exception => msg
516
+ $log.error("running plugin #{cmd}: #{msg}")
517
+ end
518
+ }
519
+ end
520
+ $plugin_name_list.each {|plugin_name|
521
+ plist.push(["#{plugin_name}", nil, "#{plugin_name}", nil, "", launch_plugin ])
522
+ }
523
+ end
524
+
525
+ #####begin host node icon#####################
526
+ private
527
+ def host_icon()
528
+ if get_map() != nil
529
+ $network[get_map()].host.each_value {|n|
530
+ n.reload
531
+ }
532
+ end
533
+ end
534
+ #####end host node icon#####################
535
+
536
+ #####begin network node icon#####################
537
+ private
538
+ def network_icon()
539
+ if get_map() != nil
540
+ $network[get_map()].network.each_value {|n|
541
+ n.reload()
542
+ }
543
+ else
544
+ $network[ROOTMAPADDR].reload()
545
+ end
546
+ end
547
+ #####end network node icon#####################
548
+
549
+ #####begin host node label#####################
550
+ private
551
+ def host_label()
552
+ if get_map() != nil
553
+ $network[get_map()].host.each_value {|n|
554
+ n.change_label($config.host_label_view)
555
+ }
556
+ end
557
+ end
558
+
559
+ #####end host node label#####################
560
+
561
+ #####begin network node label#####################
562
+ private
563
+ def network_label()
564
+ if get_map() != ROOTMAPADDR
565
+ $network[get_map()].network.each_value {|n|
566
+ n.change_label($config.network_label_view)
567
+ }
568
+ else
569
+ $network[ROOTMAPADDR].change_label($config.network_label_view)
570
+ end
571
+ end
572
+
573
+ #####end network node label#####################
574
+
575
+ ####################################################################################################
576
+ #
577
+ # Modify node position to keep relative position from the window
578
+ #
579
+ public
580
+ def proportional_node_position(wold, hold,w,h)
581
+
582
+ tmp_table= [$host, $network]
583
+ tmp_table.each {|hsh|
584
+ hsh.each_key {|ip|
585
+ xp=hsh[ip].x / wold.to_f
586
+ yp=hsh[ip].y / hold.to_f
587
+
588
+ x = (xp*w).to_i
589
+ y = (yp*h).to_i
590
+ hsh[ip].node_view.hide_link()
591
+ hsh[ip].node_view.move(x-hsh[ip].x,y-hsh[ip].y)
592
+ hsh[ip].node_view.show_link()
593
+ }
594
+ }
595
+ end
596
+
597
+ private
598
+ def map_window_activ_full
599
+ if $win !=nil
600
+ w=Gdk::screen_width
601
+ h=Gdk::screen_height-30
602
+ root_width=$win.window.geometry[2]
603
+ root_height=$win.window.geometry[3]
604
+ $win.window.resize(w,h)
605
+ proportional_node_position(root_width,root_height,w,h)
606
+ end
607
+ end
608
+
609
+ private
610
+ def map_window_activ_half
611
+ if $win !=nil
612
+ w=Gdk::screen_width*2/3
613
+ h=Gdk::screen_height*2/3
614
+ root_width=$win.window.geometry[2]
615
+ root_height=$win.window.geometry[3]
616
+ $win.window.resize(w,h)
617
+ proportional_node_position(root_width,root_height,w,h)
618
+ end
619
+ end
620
+
621
+ private
622
+ def map_window_activ_quart
623
+ if $win !=nil
624
+ w=Gdk::screen_width/2
625
+ h=Gdk::screen_height/2
626
+ root_width=$win.window.geometry[2]
627
+ root_height=$win.window.geometry[3]
628
+ $win.window.resize(w,h)
629
+ proportional_node_position(root_width,root_height,w,h)
630
+ end
631
+ end
632
+
633
+ ###################################################################################################
634
+ #
635
+ # popup to confirm init db
636
+ #
637
+ def confirm_initdb_window()
638
+ dialog = Gtk::MessageDialog.new($win, Gtk::Dialog::DESTROY_WITH_PARENT,
639
+ Gtk::MessageDialog::QUESTION,
640
+ Gtk::MessageDialog::BUTTONS_YES_NO,
641
+ "Do you really want to reset your node database ?")
642
+ dialog.run do |r|
643
+ dialog.destroy
644
+ if r == Gtk::Dialog::RESPONSE_NO
645
+ return false
646
+ else
647
+ return true
648
+ end
649
+ end
650
+ end
651
+
652
+ private
653
+ def new_map()
654
+ if confirm_initdb_window()
655
+ thread_stopping()
656
+ save()
657
+ init_map()
658
+ thread_starting()
659
+ end
660
+ end
661
+
662
+ public
663
+ def window_close
664
+ destroy
665
+ end
666
+
667
+ private
668
+ def create_config_option
669
+ $config.show()
670
+ end
671
+
672
+ private
673
+ def create_help
674
+ help_window()
675
+ end
676
+
677
+ private
678
+ def open_file()
679
+
680
+ fs=Gtk::FileChooserDialog.new("Open XML backup file",
681
+ self,
682
+ Gtk::FileChooser::ACTION_OPEN,
683
+ nil,
684
+ [Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT],
685
+ [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL]
686
+ )
687
+ xml_filter=Gtk::FileFilter.new
688
+ xml_filter.set_name("XML files")
689
+ xml_filter.add_pattern("*.xml")
690
+ fs.add_filter(xml_filter)
691
+ if fs.run == Gtk::Dialog::RESPONSE_ACCEPT
692
+ init_map()
693
+ $win.set_title("Gnms -> Load #{fs.filename}")
694
+ read_xml(fs.filename)
695
+ interfaces_table = local_interface()
696
+ if interfaces_table.size > 0
697
+ ip_of_first_interface = interfaces_table[0][0]
698
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", $host[ip_of_first_interface], "Load #{fs.filename}")
699
+ else
700
+ $event_win.add_event(EventWindow::CORE_EVENT_TYPE, "INFO", $host["127.0.0.1"], "Load #{fs.filename}")
701
+ end
702
+ $event_win.update_statusbar()
703
+ end
704
+ fs.destroy
705
+ end
706
+
707
+ private
708
+ def save_file()
709
+ save_to_filename=nil
710
+ fs=Gtk::FileChooserDialog.new("Save as File",
711
+ self,
712
+ Gtk::FileChooser::ACTION_SAVE,
713
+ nil,
714
+ [Gtk::Stock::SAVE, Gtk::Dialog::RESPONSE_ACCEPT],
715
+ [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL]
716
+ )
717
+ xml_filter=Gtk::FileFilter.new
718
+ xml_filter.set_name("XML files")
719
+ xml_filter.add_pattern("*.xml")
720
+ fs.add_filter(xml_filter)
721
+ if fs.run == Gtk::Dialog::RESPONSE_ACCEPT
722
+ save_to_filename=fs.filename
723
+ end
724
+ fs.destroy
725
+ return save_to_filename
726
+ end
727
+
728
+ private
729
+ def save_as
730
+ save_to_filename=save_file()
731
+ if save_to_filename != nil
732
+ write_xml(save_to_filename)
733
+ end
734
+ end
735
+
736
+ #
737
+ # save all nodes info in db but do not quit the application
738
+ #
739
+ private
740
+ def save()
741
+ save_all_in_db()
742
+ end
743
+
744
+ def snapshot()
745
+ def snapshot_file()
746
+ i=1
747
+ while (FileTest.exist?("#{SNAPSHOT_DIR}/snapshot-#{i}.png"))
748
+ i+=1
749
+ end
750
+ return "#{SNAPSHOT_DIR}/snapshot-#{i}.png"
751
+ end
752
+ win=Gtk::Window.new
753
+ win.set_transient_for($win)
754
+ win.set_title "Take a snapshot"
755
+ ok_button=Gtk::Button.new("Snap it as #{snapshot_file()}")
756
+ win.add ok_button
757
+ win.show_all
758
+ win.signal_connect("key_press_event") {|w,e|
759
+ if e.keyval == Gdk::Keyval::GDK_Escape
760
+ win.destroy
761
+ end
762
+ }
763
+
764
+ ok_button.signal_connect("clicked") {
765
+ x, y, width, height, depth = $canvas.window.geometry()
766
+ pixbuf = Gdk::Pixbuf.from_drawable(Gdk::Colormap.system,
767
+ $canvas.window, 0, 0,
768
+ width, height)
769
+ begin
770
+ pixbuf.save(snapshot_file(), "png") unless pixbuf == nil
771
+ rescue
772
+ $log.error("Can't save snapshot image to #{snapshot_file()}")
773
+ end
774
+ ok_button.set_label("Snap it as #{snapshot_file()}")
775
+ }
776
+ end
777
+
778
+ def init_map()
779
+ set_map()
780
+ $network.each_key {|ip|
781
+ if ip != ROOTMAPADDR
782
+ $network[ip].delete
783
+ end
784
+ }
785
+ $host.each_key {|ip|
786
+ $host[ip].delete
787
+ }
788
+ end
789
+ end