gnms 2.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of gnms might be problematic. Click here for more details.
- data/LICENSE +459 -0
- data/README +29 -0
- data/bin/gnms +11 -0
- data/gnms.gemspec +70 -0
- data/lib/cmd_parse.rb +747 -0
- data/lib/config_global.rb +414 -0
- data/lib/contact.rb +171 -0
- data/lib/external/crypt/blowfish-tables.rb +190 -0
- data/lib/external/crypt/blowfish.rb +110 -0
- data/lib/external/crypt/cbc.rb +123 -0
- data/lib/external/crypt/stringxor.rb +27 -0
- data/lib/external/fog.rb +41 -0
- data/lib/external/jjmx.rb +45 -0
- data/lib/external/sms.rb +282 -0
- data/lib/external/xmpp4r-simple.rb +497 -0
- data/lib/format.rb +85 -0
- data/lib/gnms.rb +329 -0
- data/lib/gui/about_window.rb +177 -0
- data/lib/gui/adddelnode.rb +799 -0
- data/lib/gui/base_window.rb +789 -0
- data/lib/gui/canvas_map.rb +498 -0
- data/lib/gui/charts/gruff.rb +51 -0
- data/lib/gui/color_macro.rb +145 -0
- data/lib/gui/config_window.rb +2151 -0
- data/lib/gui/custom_plugin_window.rb +90 -0
- data/lib/gui/debug_window.rb +46 -0
- data/lib/gui/event_window.rb +469 -0
- data/lib/gui/find_node_window.rb +438 -0
- data/lib/gui/help_window.rb +47 -0
- data/lib/gui/ipcalculator.rb +147 -0
- data/lib/gui/jmx_ref_window.rb +309 -0
- data/lib/gui/link_view.rb +46 -0
- data/lib/gui/mib_browser.rb +585 -0
- data/lib/gui/node_host_property.rb +3712 -0
- data/lib/gui/node_host_view.rb +270 -0
- data/lib/gui/node_network_property.rb +1059 -0
- data/lib/gui/node_network_view.rb +186 -0
- data/lib/gui/node_view.rb +672 -0
- data/lib/gui/oid_ref_window.rb +288 -0
- data/lib/gui/snmptrap_ref_window.rb +288 -0
- data/lib/gui/sub/account_frame.rb +196 -0
- data/lib/gui/sub/contact_frame.rb +519 -0
- data/lib/gui/syslog_ref_window.rb +288 -0
- data/lib/gui/treenode_window.rb +320 -0
- data/lib/gui/update_window.rb +124 -0
- data/lib/gui/widgets.rb +169 -0
- data/lib/gui/wmi_ref_window.rb +286 -0
- data/lib/interface.rb +16 -0
- data/lib/ipcalc.rb +266 -0
- data/lib/link.rb +45 -0
- data/lib/main.rb +1091 -0
- data/lib/monitor/client/custom/custom_monitoring.rb +40 -0
- data/lib/monitor/client/jmx/jmx_attr_monitoring.rb +36 -0
- data/lib/monitor/client/jmx/jmx_monitoring.rb +83 -0
- data/lib/monitor/client/jmx/jmx_ref.rb +114 -0
- data/lib/monitor/client/snmp/mibs/SNMPv2-MIB.txt +854 -0
- data/lib/monitor/client/snmp/mibs/SNMPv2-SMI.txt +344 -0
- data/lib/monitor/client/snmp/oid_ref.rb +141 -0
- data/lib/monitor/client/snmp/snmp.rb +178 -0
- data/lib/monitor/client/snmp/snmp_monitoring.rb +58 -0
- data/lib/monitor/client/wmi/wmi.rb +139 -0
- data/lib/monitor/client/wmi/wmi_monitoring.rb +60 -0
- data/lib/monitor/client/wmi/wmi_ref.rb +141 -0
- data/lib/monitor/custom_plugin.rb +50 -0
- data/lib/monitor/server/msg_buffer.rb +39 -0
- data/lib/monitor/server/snmp/snmptrap_analyzer.rb +81 -0
- data/lib/monitor/server/snmp/snmptrap_capture.rb +26 -0
- data/lib/monitor/server/snmp/snmptrap_monitoring.rb +32 -0
- data/lib/monitor/server/snmp/snmptrap_ref.rb +135 -0
- data/lib/monitor/server/snmp/snmptrap_server.rb +50 -0
- data/lib/monitor/server/syslog/syslog_analyzer.rb +141 -0
- data/lib/monitor/server/syslog/syslog_capture.rb +28 -0
- data/lib/monitor/server/syslog/syslog_monitoring.rb +32 -0
- data/lib/monitor/server/syslog/syslog_ref.rb +136 -0
- data/lib/monitor/server/syslog/syslog_server.rb +43 -0
- data/lib/node.rb +1020 -0
- data/lib/node_db.rb +2668 -0
- data/lib/node_host.rb +215 -0
- data/lib/node_listener.rb +639 -0
- data/lib/node_network.rb +269 -0
- data/lib/node_property.rb +39 -0
- data/lib/notify/alarm.rb +247 -0
- data/lib/notify/irc_bot.rb +167 -0
- data/lib/notify/xmpp_bot.rb +107 -0
- data/lib/service.rb +36 -0
- data/lib/version.rb +8 -0
- data/pixmap/bg/map_bg.jpg +0 -0
- data/pixmap/bg/map_bg2.jpg +0 -0
- data/pixmap/logo.jpg +0 -0
- data/pixmap/logo_icon.png +0 -0
- data/pixmap/os/3com.png +0 -0
- data/pixmap/os/aix.gif +0 -0
- data/pixmap/os/amiga.png +0 -0
- data/pixmap/os/beos.png +0 -0
- data/pixmap/os/cisco.png +0 -0
- data/pixmap/os/freebsd.png +0 -0
- data/pixmap/os/hp.png +0 -0
- data/pixmap/os/hurd.gif +0 -0
- data/pixmap/os/irix.gif +0 -0
- data/pixmap/os/linux.png +0 -0
- data/pixmap/os/mac.png +0 -0
- data/pixmap/os/netbsd.gif +0 -0
- data/pixmap/os/netware.png +0 -0
- data/pixmap/os/openbsd.png +0 -0
- data/pixmap/os/os2warp.gif +0 -0
- data/pixmap/os/qnx.gif +0 -0
- data/pixmap/os/sco.gif +0 -0
- data/pixmap/os/sgi.xpm +111 -0
- data/pixmap/os/solaris.gif +0 -0
- data/pixmap/os/unix.gif +0 -0
- data/pixmap/os/unknown.png +0 -0
- data/pixmap/os/vms.xpm +345 -0
- data/pixmap/os/windows.png +0 -0
- data/pixmap/type/cloud.png +0 -0
- data/pixmap/type/device.png +0 -0
- data/pixmap/type/firewall.png +0 -0
- data/pixmap/type/gateway.png +0 -0
- data/pixmap/type/home.png +0 -0
- data/pixmap/type/host.png +0 -0
- data/pixmap/type/network.png +0 -0
- data/pixmap/type/printer.png +0 -0
- data/pixmap/type/router.png +0 -0
- data/pixmap/type/server.png +0 -0
- data/pixmap/type/switch.png +0 -0
- data/pixmap/type/vm.png +0 -0
- data/plugins/Defaultme.rb +7 -0
- data/plugins/DnsCheck.rb +46 -0
- data/plugins/FooMonitor.rb +26 -0
- data/plugins/HttpVirtualHostMonitor.rb +43 -0
- data/plugins/MysqlShowStatusMonitor.rb +64 -0
- data/plugins/PgsqlPercentConnectionMonitor.rb +72 -0
- data/plugins/SshCpuLoadMonitor.rb +85 -0
- data/plugins/SshDiskMonitor.rb +69 -0
- data/plugins/SshFgtAvExpiredMonitor.rb +75 -0
- data/plugins/SshPercentUsedRamMonitor.rb +74 -0
- data/plugins/TelnetCpuLoadMonitor.rb +69 -0
- data/plugins/example1.rb +15 -0
- data/plugins/example2.rb +7 -0
- data/sound/beep.wav +0 -0
- metadata +378 -0
@@ -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
|