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
data/lib/format.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
#
|
2
|
+
# str -> boolean
|
3
|
+
#
|
4
|
+
|
5
|
+
class String
|
6
|
+
def ascii(replacement="")
|
7
|
+
self.gsub(/[\x00-\x09]|[\x0b\x0c]|[\x0e\x1f]|[\x80-\xff]/, replacement)
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_b()
|
11
|
+
return self == "true"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def i2b(i)
|
16
|
+
if (i == "1") || (i == 1)
|
17
|
+
return true
|
18
|
+
else
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def b2i(bool)
|
24
|
+
if bool == true
|
25
|
+
return 1
|
26
|
+
else
|
27
|
+
return 0
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# return true if arg is an ip addr
|
33
|
+
# need: an arg
|
34
|
+
#
|
35
|
+
def isValidIPv4(ip)
|
36
|
+
if ip.nil?
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
lip = ip.split(/\./)
|
40
|
+
if lip.size != 4
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
lip.each do |val|
|
44
|
+
if !isInteger(val) || (val.to_i > 255 || val.to_i < 0)
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
return true
|
49
|
+
end
|
50
|
+
|
51
|
+
#
|
52
|
+
# return true if fixnum arg is a valid port
|
53
|
+
#
|
54
|
+
def isValidPort(port)
|
55
|
+
if isInteger(port.to_s())
|
56
|
+
if (port>0) && (port<65535)
|
57
|
+
return true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
return false
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# return true if arg is an integer
|
65
|
+
# need: an arg
|
66
|
+
#
|
67
|
+
def isInteger(str)
|
68
|
+
begin
|
69
|
+
return str.match(/^\d+$/)
|
70
|
+
rescue
|
71
|
+
if str.class == Fixnum
|
72
|
+
return true
|
73
|
+
else
|
74
|
+
return false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# return true if arg is a double
|
81
|
+
# need: an arg
|
82
|
+
#
|
83
|
+
def isDouble(str)
|
84
|
+
return str.match(/^\d+\.\d+$/)
|
85
|
+
end
|
data/lib/gnms.rb
ADDED
@@ -0,0 +1,329 @@
|
|
1
|
+
=begin header
|
2
|
+
|
3
|
+
launcher main program
|
4
|
+
|
5
|
+
David Maciejak
|
6
|
+
20030120
|
7
|
+
|
8
|
+
=end
|
9
|
+
|
10
|
+
RMAGICK_BYPASS_VERSION_TEST = true
|
11
|
+
|
12
|
+
if ENV['LANG'] != nil
|
13
|
+
ENV['LANG']='en_GB.UTF-8'
|
14
|
+
ENV['LANGUAGE']='en_GB.UTF-8'
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# initialize level alert type corresponding to how alert is done according to the severity of the event
|
19
|
+
#
|
20
|
+
def init_level_alert_type(h)
|
21
|
+
for l in $LEVEL
|
22
|
+
h[l]= [false,false,true,false,false,false,false,false]
|
23
|
+
end
|
24
|
+
return 0
|
25
|
+
end
|
26
|
+
|
27
|
+
GNMSLIB = $LOAD_PATH[0]
|
28
|
+
|
29
|
+
require 'logger'
|
30
|
+
require 'thread'
|
31
|
+
|
32
|
+
PIXMAP_PATH = "#{GNMSLIB}/../pixmap"
|
33
|
+
SOUND_DIR = "#{GNMSLIB}/../sound"
|
34
|
+
SCRIPT_DIR = "#{GNMSLIB}/../script"
|
35
|
+
TEST_DIR = "#{GNMSLIB}/../test"
|
36
|
+
PLUGIN_DIR = "#{GNMSLIB}/../plugins"
|
37
|
+
|
38
|
+
ROOTMAPADDR="0.0.0.0"
|
39
|
+
ROOTMAPNAME="ROOT"
|
40
|
+
|
41
|
+
GNMS_PROJECT_SERVER="gnms.rubyforge.org"
|
42
|
+
GNMS_PROJECT_URL=""
|
43
|
+
|
44
|
+
MAP_SYSLOG_SEV="Inner"
|
45
|
+
|
46
|
+
SNMPv1="1"
|
47
|
+
SNMPv2="2c"
|
48
|
+
|
49
|
+
HOSTNODE='h'
|
50
|
+
NETWORKNODE='n'
|
51
|
+
|
52
|
+
#default pixmap size
|
53
|
+
$pixmap_size = "32"
|
54
|
+
|
55
|
+
CRITICAL=5
|
56
|
+
MAJOR=4
|
57
|
+
WARNING=3
|
58
|
+
MINOR=2
|
59
|
+
NORMAL=1
|
60
|
+
UNMANAGED=0
|
61
|
+
UNKNOWN=-1
|
62
|
+
|
63
|
+
$status = ["CRITICAL", "MAJOR", "WARNING", "MINOR", "NORMAL", "UNMANAGED", "UNKNOWN"]
|
64
|
+
$status_color = [0xCC0000FF, 0xFF8800FF, 0xFFDA00FF, 0x69E5E5FF, 0x00CC00FF, 0xBEBEBEFF, 0x9368E5FF]
|
65
|
+
$status_value = [5, 4, 3, 2, 1, 0, -1]
|
66
|
+
|
67
|
+
$LEVEL = ["INFO","WARN","ERR","ALERT","PANIC"]
|
68
|
+
$level_view="WARN"
|
69
|
+
$talert_type=["mail", "popup", "beep", "syslog", "sms", "im", "script", "irc"]
|
70
|
+
$level_alert_type = Hash.new
|
71
|
+
init_level_alert_type($level_alert_type)
|
72
|
+
|
73
|
+
Contact_selected_info=Struct.new("Contact_selected_info", :firstname, :lastname)
|
74
|
+
|
75
|
+
$os=Dir["#{PIXMAP_PATH}/os/*"]
|
76
|
+
$type = Dir["#{PIXMAP_PATH}/type/*"]
|
77
|
+
|
78
|
+
$sound_is_played=false
|
79
|
+
|
80
|
+
PROJECTNAME = "GNMS"
|
81
|
+
AUTHORS = [ "David Maciejak", "Dylan Yin" ]
|
82
|
+
DOCUMENTORS = []
|
83
|
+
|
84
|
+
GNMSPPH="just a simple text to badly protect secrets"
|
85
|
+
GNMSKEY=1978
|
86
|
+
|
87
|
+
#creating gnms conf dir
|
88
|
+
require 'etc'
|
89
|
+
require 'fileutils'
|
90
|
+
|
91
|
+
homedir = Etc.getpwuid.dir
|
92
|
+
if !homedir
|
93
|
+
puts("Error getting home directory ??")
|
94
|
+
exit(1)
|
95
|
+
end
|
96
|
+
|
97
|
+
CONF_DIR = "#{homedir}/.#{PROJECTNAME.downcase}/conf"
|
98
|
+
if !File.exists?(CONF_DIR) or !File.directory?(CONF_DIR)
|
99
|
+
File.delete(CONF_DIR) unless !File.exists?(CONF_DIR)
|
100
|
+
FileUtils.mkdir_p(CONF_DIR)
|
101
|
+
end
|
102
|
+
LOG_DIR = "#{homedir}/.#{PROJECTNAME.downcase}/log"
|
103
|
+
if !File.exists?(LOG_DIR) or !File.directory?(LOG_DIR)
|
104
|
+
File.delete(LOG_DIR) unless !File.exists?(LOG_DIR)
|
105
|
+
FileUtils.mkdir_p(LOG_DIR)
|
106
|
+
end
|
107
|
+
SNAPSHOT_DIR = "#{homedir}/.#{PROJECTNAME.downcase}/snapshot"
|
108
|
+
if !File.exists?(SNAPSHOT_DIR) or !File.directory?(SNAPSHOT_DIR)
|
109
|
+
File.delete(SNAPSHOT_DIR) unless !File.exists?(SNAPSHOT_DIR)
|
110
|
+
FileUtils.mkdir_p(SNAPSHOT_DIR)
|
111
|
+
end
|
112
|
+
|
113
|
+
if $stdout.isatty
|
114
|
+
$log = Logger.new(STDOUT)
|
115
|
+
$log.level = Logger::INFO
|
116
|
+
$log.progname = PROJECTNAME
|
117
|
+
else
|
118
|
+
$log = Logger.new("#{LOG_DIR}/#{PROJECTNAME.downcase}.log", 10, 1024000)
|
119
|
+
$log.level = Logger::INFO
|
120
|
+
$log.progname = PROJECTNAME
|
121
|
+
end
|
122
|
+
|
123
|
+
begin
|
124
|
+
require 'gtk2'
|
125
|
+
rescue LoadError
|
126
|
+
$log.fatal("You must install gtk2 module for ruby")
|
127
|
+
end
|
128
|
+
|
129
|
+
PID_FILE = "#{homedir}/.#{PROJECTNAME.downcase}/#{PROJECTNAME.downcase}.pid"
|
130
|
+
if File.exists?(PID_FILE)
|
131
|
+
is_running = 0
|
132
|
+
File.open(PID_FILE, 'r') {|f| pid = f.read()
|
133
|
+
if pid.match(/^\d+$/)
|
134
|
+
begin
|
135
|
+
Process.kill(0, pid.to_i)
|
136
|
+
is_running = pid.to_i
|
137
|
+
rescue
|
138
|
+
rescue Errno::ESRCH
|
139
|
+
is_running = 0
|
140
|
+
end
|
141
|
+
end
|
142
|
+
}
|
143
|
+
if is_running > 0
|
144
|
+
error_msg = "There is already a running instance of #{PROJECTNAME} pid:#{is_running}"
|
145
|
+
$log.fatal(error_msg)
|
146
|
+
dialog = Gtk::MessageDialog.new(nil, Gtk::Dialog::DESTROY_WITH_PARENT,
|
147
|
+
Gtk::MessageDialog::ERROR,
|
148
|
+
Gtk::MessageDialog::BUTTONS_OK,
|
149
|
+
error_msg)
|
150
|
+
dialog.set_title PROJECTNAME
|
151
|
+
dialog.set_icon("#{PIXMAP_PATH}/logo_icon.png")
|
152
|
+
dialog.run
|
153
|
+
exit(-1)
|
154
|
+
else
|
155
|
+
$log.info("Old pid file found, maybe #{PROJECTNAME} crashed last time, please report any issues you are encountering")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
File.open(PID_FILE, 'w') {|f| f.write($$) }
|
159
|
+
|
160
|
+
SQLITE_DB="#{CONF_DIR}/gnms.db"
|
161
|
+
SQLITE_DB_TEST="#{CONF_DIR}/gnms-test.db"
|
162
|
+
IDENT_CONF_FILE="#{CONF_DIR}/ident.conf"
|
163
|
+
GLOBAL_CONF_TEST_FILE="#{CONF_DIR}/gnms-test.conf"
|
164
|
+
GLOBAL_CONF_FILE="#{CONF_DIR}/gnms.conf"
|
165
|
+
OIDREFS_CONF_FILE="#{CONF_DIR}/snmp_oidrefs.conf"
|
166
|
+
SYSLOGREFS_CONF_FILE="#{CONF_DIR}/syslog_refs.conf"
|
167
|
+
SNMPTRAPREFS_CONF_FILE="#{CONF_DIR}/snmptrap_refs.conf"
|
168
|
+
|
169
|
+
#we delete path and extension of the file
|
170
|
+
for i in [$os,$type]
|
171
|
+
ost=[]
|
172
|
+
for osi in i
|
173
|
+
ostt=osi.split(/\//)
|
174
|
+
osttt=(ostt[ostt.size - 1]).split(/\./)
|
175
|
+
ost.push osttt[0]
|
176
|
+
end
|
177
|
+
if ost != nil
|
178
|
+
if i==$os
|
179
|
+
$os=ost.sort
|
180
|
+
else
|
181
|
+
$type=ost.sort
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
#
|
187
|
+
# check ruby and gtk version
|
188
|
+
#
|
189
|
+
def verify_system_conf()
|
190
|
+
ruby_cmd_version = RUBY_VERSION
|
191
|
+
ruby_version="^1\.[89]"
|
192
|
+
if ruby_cmd_version.match(ruby_version)
|
193
|
+
if (defined? Gtk) and !Gtk.check_version(2,4,0)
|
194
|
+
return 0
|
195
|
+
else
|
196
|
+
$log.error("This tool needs at least GTK version 2.4")
|
197
|
+
end
|
198
|
+
else
|
199
|
+
$log.error("This tool needs Ruby 1.8 or Ruby 1.9")
|
200
|
+
end
|
201
|
+
return 1
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
#
|
206
|
+
# return logger module level according to event log severity
|
207
|
+
#
|
208
|
+
def txtlvl_to_loggerlvl(str)
|
209
|
+
case str
|
210
|
+
when "Debug"
|
211
|
+
return Logger::DEBUG
|
212
|
+
when "Info"
|
213
|
+
return Logger::INFO
|
214
|
+
when "Warning"
|
215
|
+
return Logger::WARN
|
216
|
+
when "Error"
|
217
|
+
return Logger::ERROR
|
218
|
+
else
|
219
|
+
return Logger::INFO
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
####################################################################################
|
224
|
+
#
|
225
|
+
# go!
|
226
|
+
#
|
227
|
+
|
228
|
+
|
229
|
+
#verify ruby/gtk/gnome conf
|
230
|
+
unless verify_system_conf == 0
|
231
|
+
$log.error("System configuration is not ok")
|
232
|
+
exit(1)
|
233
|
+
else
|
234
|
+
$log.info("System configuration is ok")
|
235
|
+
|
236
|
+
|
237
|
+
##############################################################################
|
238
|
+
#load other files
|
239
|
+
require "#{GNMSLIB}"+'/version'
|
240
|
+
require "#{GNMSLIB}"+'/main'
|
241
|
+
##############################################################################
|
242
|
+
|
243
|
+
|
244
|
+
Gtk::RC.parse_string <<EOS
|
245
|
+
|
246
|
+
style "tooltips"
|
247
|
+
|
248
|
+
{
|
249
|
+
bg[NORMAL] = {0.94, 0.90, 0.54}
|
250
|
+
}
|
251
|
+
|
252
|
+
widget "gtk-tooltips" style "tooltips"
|
253
|
+
EOS
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
module Gtk
|
258
|
+
# Thread-safety stuff.
|
259
|
+
# Loosely based on booh, by Guillaume Cottenceau.
|
260
|
+
|
261
|
+
PENDING_CALLS_MUTEX = Mutex.new
|
262
|
+
PENDING_CALLS = []
|
263
|
+
|
264
|
+
def self.thread_protect(&proc)
|
265
|
+
if Thread.current == Thread.main
|
266
|
+
proc.call
|
267
|
+
else
|
268
|
+
PENDING_CALLS_MUTEX.synchronize do
|
269
|
+
PENDING_CALLS << proc
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
def self.thread_flush
|
275
|
+
if PENDING_CALLS_MUTEX.try_lock
|
276
|
+
for closure in PENDING_CALLS
|
277
|
+
closure.call
|
278
|
+
end
|
279
|
+
PENDING_CALLS.clear
|
280
|
+
PENDING_CALLS_MUTEX.unlock
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
def self.init_thread_protect
|
285
|
+
Gtk.timeout_add(100) do
|
286
|
+
PENDING_CALLS_MUTEX.synchronize do
|
287
|
+
for closure in PENDING_CALLS
|
288
|
+
closure.call
|
289
|
+
end
|
290
|
+
PENDING_CALLS.clear
|
291
|
+
end
|
292
|
+
true
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
Gtk.init_thread_protect
|
298
|
+
|
299
|
+
begin
|
300
|
+
Gtk.init
|
301
|
+
rescue
|
302
|
+
$log.fatal("Can't init GTK, is your display correct ?")
|
303
|
+
exit(1)
|
304
|
+
end
|
305
|
+
|
306
|
+
#nagscreen
|
307
|
+
|
308
|
+
#window = Gtk::Window.new
|
309
|
+
#window.set_default_size(300,150)
|
310
|
+
#window.set_window_position(Gtk::Window::POS_CENTER)
|
311
|
+
#window.set_title "GNMS"
|
312
|
+
#window.set_decorated(false)
|
313
|
+
#window.set_modal(true)
|
314
|
+
#hbox = Gtk::VBox.new
|
315
|
+
#hbox.add(Gtk::Image.new("#{PIXMAP_PATH}/logo.jpg"))
|
316
|
+
#lb=Gtk::Label::new("Starting")
|
317
|
+
#lb.show
|
318
|
+
#hbox.add lb
|
319
|
+
#hbox.show_all
|
320
|
+
#window.add hbox
|
321
|
+
#window.show_all
|
322
|
+
|
323
|
+
#Thread.start {
|
324
|
+
launch_gnms_main()
|
325
|
+
#}
|
326
|
+
|
327
|
+
Gtk.main
|
328
|
+
|
329
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
#
|
2
|
+
# About window class
|
3
|
+
#
|
4
|
+
|
5
|
+
class AboutWindow
|
6
|
+
|
7
|
+
####################################################################
|
8
|
+
#show the "about window".
|
9
|
+
#Dylan,Yin June 18th,2009 #
|
10
|
+
####################################################################
|
11
|
+
|
12
|
+
def initialize()
|
13
|
+
|
14
|
+
about = Gtk::Window.new
|
15
|
+
about.set_size_request(350,420)
|
16
|
+
about.set_title "About GNMS"
|
17
|
+
about.resizable=false
|
18
|
+
about.window_position=Gtk::Window::POS_CENTER
|
19
|
+
icon_name="./pixmap/logo_icon.png"
|
20
|
+
Gtk::Window.set_default_icon(icon_name)
|
21
|
+
about.show
|
22
|
+
|
23
|
+
about.signal_connect("destroy") {
|
24
|
+
about.destroy
|
25
|
+
}
|
26
|
+
about.signal_connect("key_press_event") {|w,e|
|
27
|
+
if !@inthread
|
28
|
+
if e.keyval == 65307 #Esc key press
|
29
|
+
about.destroy
|
30
|
+
end
|
31
|
+
end
|
32
|
+
}
|
33
|
+
|
34
|
+
vboxb = Gtk::VBox.new(false,5)
|
35
|
+
vboxb.show
|
36
|
+
about.add vboxb
|
37
|
+
vboxb.border_width=5
|
38
|
+
|
39
|
+
pxb = Gdk::Pixbuf.new("#{PIXMAP_PATH}/logo_icon.png",64,64)
|
40
|
+
image = Gtk::Image.new(pxb)
|
41
|
+
image.show
|
42
|
+
hboxb = Gtk::HBox.new(false,0)
|
43
|
+
hboxb.show
|
44
|
+
vboxb.add hboxb
|
45
|
+
|
46
|
+
vboxb1 = Gtk::VBox.new(false,0)
|
47
|
+
vboxb1.show
|
48
|
+
|
49
|
+
|
50
|
+
label_version = Gtk::Label.new
|
51
|
+
label_version.show
|
52
|
+
label_version.set_size_request(270,80)
|
53
|
+
label_version.wrap=true
|
54
|
+
label_version.set_markup("<span weight=\"bold\" size=\"xx-large\">GNMS #{GNMSVERSION}</span>",true)
|
55
|
+
|
56
|
+
label_infor = Gtk::Label.new
|
57
|
+
label_infor.show
|
58
|
+
label_infor.set_size_request(270,90)
|
59
|
+
label_infor.wrap=true
|
60
|
+
label_infor.set_markup("<span size=\"large\">Gnome Network Management System, for monitoring ip elements.</span>",true)
|
61
|
+
vboxb1.pack_start_defaults(label_version)
|
62
|
+
vboxb1.pack_start_defaults(label_infor)
|
63
|
+
|
64
|
+
hboxb.pack_start_defaults(image)
|
65
|
+
hboxb.pack_start_defaults(vboxb1)
|
66
|
+
hboxb.set_size_request(350,140)
|
67
|
+
hboxb1 = Gtk::HBox.new(false,0)
|
68
|
+
hboxb1.show
|
69
|
+
label_credit = Gtk::Label.new
|
70
|
+
label_credit.show
|
71
|
+
label_credit.text="Credit:"
|
72
|
+
|
73
|
+
label_blank = Gtk::Label.new
|
74
|
+
label_blank.show
|
75
|
+
label_blank.text=""
|
76
|
+
|
77
|
+
vboxb2 = Gtk::VBox.new(false,0)
|
78
|
+
vboxb2.show
|
79
|
+
vboxb2.pack_start_defaults(label_credit)
|
80
|
+
vboxb2.pack_start_defaults(label_blank)
|
81
|
+
vboxb2.set_size_request(80,-1)
|
82
|
+
|
83
|
+
vboxb3 = Gtk::VBox.new(false,0)
|
84
|
+
vboxb3.show
|
85
|
+
|
86
|
+
AUTHORS.each {|auth|
|
87
|
+
label_developer1 = Gtk::Label.new
|
88
|
+
label_developer1.show
|
89
|
+
label_developer1.text=auth
|
90
|
+
label_developer1.set_alignment(0,0.5)
|
91
|
+
vboxb3.pack_start_defaults(label_developer1)
|
92
|
+
}
|
93
|
+
vboxb3.set_size_request(270,-1)
|
94
|
+
|
95
|
+
vboxb.add hboxb1
|
96
|
+
hboxb1.pack_start_defaults(vboxb2)
|
97
|
+
hboxb1.pack_start_defaults(vboxb3)
|
98
|
+
hboxb1.set_size_request(350,40)
|
99
|
+
|
100
|
+
hboxb2 = Gtk::HBox.new(false,0)
|
101
|
+
hboxb2.show
|
102
|
+
|
103
|
+
hboxb3 = Gtk::HBox.new(false,0)
|
104
|
+
hboxb3.show
|
105
|
+
|
106
|
+
#add the information table
|
107
|
+
|
108
|
+
@treestore=Gtk::ListStore.new(String,String)
|
109
|
+
@ctree = Gtk::TreeView.new(@treestore)
|
110
|
+
@ctree.selection.mode = Gtk::SELECTION_MULTIPLE
|
111
|
+
@ctree.enable_search=true
|
112
|
+
@ctree.enable_tree_lines=true
|
113
|
+
|
114
|
+
# Create a renderer
|
115
|
+
renderer = Gtk::CellRendererText.new
|
116
|
+
renderer.editable=false
|
117
|
+
|
118
|
+
# Add column using our renderer
|
119
|
+
col = Gtk::TreeViewColumn.new("Name", renderer, :text => 0)
|
120
|
+
@ctree.append_column(col)
|
121
|
+
col = Gtk::TreeViewColumn.new("Value", renderer, :text => 1)
|
122
|
+
@ctree.append_column(col)
|
123
|
+
@ctree.headers_visible=true
|
124
|
+
@ctree.show
|
125
|
+
|
126
|
+
sysinfor=get_system_infor()
|
127
|
+
|
128
|
+
iter=@treestore.append
|
129
|
+
iter[0]="Cpu"
|
130
|
+
iter[1]=sysinfor["cpu"]
|
131
|
+
|
132
|
+
iter=@treestore.append
|
133
|
+
iter[0]="Memory"
|
134
|
+
iter[1]=sysinfor["Memory"]
|
135
|
+
|
136
|
+
iter=@treestore.append
|
137
|
+
iter[0]="Hostname"
|
138
|
+
iter[1]=sysinfor["hostname"]
|
139
|
+
|
140
|
+
iter=@treestore.append
|
141
|
+
iter[0]="OS Version"
|
142
|
+
iter[1]=sysinfor["OS"]
|
143
|
+
|
144
|
+
iter=@treestore.append
|
145
|
+
iter[0]="Total Disk Size"
|
146
|
+
iter[1]=sysinfor["Disk Size"]
|
147
|
+
|
148
|
+
hboxb3.add @ctree
|
149
|
+
|
150
|
+
scrolled_about = Gtk::ScrolledWindow.new(nil, nil)
|
151
|
+
scrolled_about.border_width=5
|
152
|
+
scrolled_about.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_NEVER)
|
153
|
+
scrolled_about.set_size_request(-1,180)
|
154
|
+
hboxb2.pack_start_defaults(scrolled_about)
|
155
|
+
|
156
|
+
scrolled_about.add_with_viewport(hboxb3)
|
157
|
+
scrolled_about.show
|
158
|
+
vboxb.add hboxb2
|
159
|
+
|
160
|
+
hboxb4 = Gtk::HButtonBox.new
|
161
|
+
hboxb4.show
|
162
|
+
|
163
|
+
hboxb4.set_layout_style(Gtk::ButtonBox::END)
|
164
|
+
button_close=Gtk::Button.new(Gtk::Stock::CLOSE)
|
165
|
+
button_close.signal_connect("clicked") {
|
166
|
+
about.destroy
|
167
|
+
}
|
168
|
+
button_close.show
|
169
|
+
button_close.set_size_request(80,30)
|
170
|
+
hboxb4.add button_close
|
171
|
+
|
172
|
+
vboxb.add hboxb4
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
end
|
177
|
+
end
|