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,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
@@ -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