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,124 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
#
|
4
|
+
# get changelog from version arg
|
5
|
+
#
|
6
|
+
def get_changelog(version)
|
7
|
+
changelog_text=""
|
8
|
+
#changelog file name is changelog-last_version_file_name
|
9
|
+
changelog_base_name="changelog-"
|
10
|
+
|
11
|
+
begin
|
12
|
+
Net::HTTP.start(GNMS_PROJECT_SERVER, 80) do |http|
|
13
|
+
response,=http.get('/'+GNMS_PROJECT_URL+'/'+changelog_base_name+version)
|
14
|
+
response.body.each do |str|
|
15
|
+
changelog_text=changelog_text+"#{str}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue
|
19
|
+
end
|
20
|
+
if changelog_text == ""
|
21
|
+
return "No changelog available"
|
22
|
+
else
|
23
|
+
return changelog_text
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# check new update from the main home project url
|
29
|
+
#
|
30
|
+
#
|
31
|
+
def check_update_window
|
32
|
+
last_version_file_name="lastversion"
|
33
|
+
window = Gtk::Window.new
|
34
|
+
window.set_size_request(500,250)
|
35
|
+
window.set_title "Check update"
|
36
|
+
window.set_transient_for($win)
|
37
|
+
|
38
|
+
vbox = Gtk::VBox.new
|
39
|
+
vbox.show
|
40
|
+
window.add vbox
|
41
|
+
|
42
|
+
Net::HTTP.version_1_1
|
43
|
+
last_version=""
|
44
|
+
text = Gtk::TextView.new
|
45
|
+
combo_last_version = Gtk::ComboBox.new
|
46
|
+
Thread.start {
|
47
|
+
|
48
|
+
begin
|
49
|
+
Gtk.thread_protect do
|
50
|
+
$win.hide_update_menu_entry()
|
51
|
+
end
|
52
|
+
Net::HTTP.start(GNMS_PROJECT_SERVER, 80) do |http|
|
53
|
+
response,=http.get('/'+GNMS_PROJECT_URL+'/'+last_version_file_name)
|
54
|
+
response.body.each do |str|
|
55
|
+
re=Regexp.new('^(\d+)\.(\d+)\.?(.+)?$')
|
56
|
+
str.scan(re) do |m1, m2, m3|
|
57
|
+
if (m1.to_i() > GNMSMAJORVERSION)
|
58
|
+
last_version=last_version+"#{str}"
|
59
|
+
elsif (m1.to_i() >= GNMSMAJORVERSION) && (m2.to_i() > GNMSMINORVERSION)
|
60
|
+
last_version=last_version+"#{str}"
|
61
|
+
elsif (m1.to_i() >= GNMSMAJORVERSION) && (m2.to_i() >= GNMSMINORVERSION)
|
62
|
+
if m3 != nil
|
63
|
+
if m3 > GNMSTAGVERSION
|
64
|
+
last_version=last_version+"#{str}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
Gtk.thread_protect do
|
71
|
+
hbox=Gtk::HBox.new
|
72
|
+
labelf=Gtk::Label.new("Choose version")
|
73
|
+
hbox.add labelf
|
74
|
+
last_version.split(/\n/).each {|v|
|
75
|
+
combo_last_version.append_string(v)
|
76
|
+
}
|
77
|
+
combo_last_version.show
|
78
|
+
hbox.add combo_last_version
|
79
|
+
vbox.add hbox
|
80
|
+
combo_last_version.signal_connect("changed") {|val|
|
81
|
+
if val.text != ""
|
82
|
+
text.buffer.delete(text.buffer.start_iter,text.buffer.end_iter)
|
83
|
+
text.buffer.insert_at_cursor(get_changelog(combo_last_version.active_text).to_s)
|
84
|
+
end
|
85
|
+
}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
rescue
|
89
|
+
#no update available
|
90
|
+
Gtk.thread_protect do
|
91
|
+
window.set_size_request(350,25)
|
92
|
+
label=Gtk::Label.new("No update available for version : "+GNMSVERSION)
|
93
|
+
vbox.add label
|
94
|
+
end
|
95
|
+
end
|
96
|
+
Gtk.thread_protect do
|
97
|
+
if last_version != ""
|
98
|
+
changelog=get_changelog(combo_last_version.active_text)
|
99
|
+
text.cursor_visible=false
|
100
|
+
text.set_size_request(-1,225)
|
101
|
+
text.set_editable(false)
|
102
|
+
text.show
|
103
|
+
scrolled_window = Gtk::ScrolledWindow.new(nil, nil)
|
104
|
+
scrolled_window.border_width=2
|
105
|
+
scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
|
106
|
+
scrolled_window.show
|
107
|
+
scrolled_window.add(text)
|
108
|
+
text.grab_focus
|
109
|
+
text.freeze
|
110
|
+
text.buffer.insert_at_cursor(changelog.to_s)
|
111
|
+
vbox.add scrolled_window
|
112
|
+
end
|
113
|
+
window.show_all
|
114
|
+
window.signal_connect("key_press_event") {|w,e|
|
115
|
+
if e.keyval == Gdk::Keyval::GDK_Escape
|
116
|
+
window.destroy
|
117
|
+
end
|
118
|
+
}
|
119
|
+
window.signal_connect("destroy") {|w,e|
|
120
|
+
$win.show_update_menu_entry()
|
121
|
+
}
|
122
|
+
end
|
123
|
+
}
|
124
|
+
end
|
data/lib/gui/widgets.rb
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
|
2
|
+
module Gtk
|
3
|
+
class CList < TreeView
|
4
|
+
attr_accessor :nb_event
|
5
|
+
|
6
|
+
def set_sort_column(col_src,col_dst)
|
7
|
+
get_column(col_src-1).set_sort_column_id(col_dst)
|
8
|
+
end
|
9
|
+
def initialize(ttitle)
|
10
|
+
@nb_event=0
|
11
|
+
super(Gtk::ListStore.new(Gdk::Color, *ttitle.collect{|d| d.class}))
|
12
|
+
set_enable_search(false)
|
13
|
+
i=1
|
14
|
+
renderer=Gtk::CellRendererText.new()
|
15
|
+
#renderer.background = "pink"
|
16
|
+
ttitle.each {|col|
|
17
|
+
column=Gtk::TreeViewColumn.new(col,
|
18
|
+
renderer,{
|
19
|
+
:background_gdk => 0,
|
20
|
+
:text => i
|
21
|
+
})
|
22
|
+
column.set_sort_column_id(i)
|
23
|
+
append_column(column)
|
24
|
+
i+=1
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def append(ttext)
|
29
|
+
row=model.append
|
30
|
+
set_bg_color(ttext[1], row)
|
31
|
+
i=1
|
32
|
+
ttext.each {|val|
|
33
|
+
row[i]=val
|
34
|
+
i+=1
|
35
|
+
}
|
36
|
+
@nb_event+=1
|
37
|
+
end
|
38
|
+
|
39
|
+
def prepend(ttext)
|
40
|
+
row=model.prepend
|
41
|
+
if ttext
|
42
|
+
set_bg_color(ttext[1], row)
|
43
|
+
i=1
|
44
|
+
ttext.each {|val|
|
45
|
+
row[i]=val
|
46
|
+
i+=1
|
47
|
+
}
|
48
|
+
@nb_event+=1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def remove(row)
|
53
|
+
if model.remove(row)
|
54
|
+
@nb_event-=1
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def clear()
|
59
|
+
model.clear()
|
60
|
+
@nb_event=0
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_value(iter, column)
|
64
|
+
model.get_value(iter, column) unless iter == nil
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# change title of each column
|
69
|
+
#
|
70
|
+
def changed_all_column_name(table)
|
71
|
+
indx=0
|
72
|
+
columns.each do |col|
|
73
|
+
col.set_title(table[indx])
|
74
|
+
indx+=1
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# change title to str of column col
|
80
|
+
#
|
81
|
+
def changed_column_name(col,str)
|
82
|
+
get_column(col).set_title(str) unless col > (columns.size - 1)
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
private
|
87
|
+
def set_bg_color(val, row)
|
88
|
+
case val
|
89
|
+
when ""
|
90
|
+
when "PANIC"
|
91
|
+
row[0]=$red
|
92
|
+
when "ALERT"
|
93
|
+
row[0]=$orange
|
94
|
+
when "ERR"
|
95
|
+
row[0]=$yellow
|
96
|
+
when "WARN"
|
97
|
+
row[0]=$blue
|
98
|
+
when "INFO"
|
99
|
+
row[0]=$green
|
100
|
+
else
|
101
|
+
#perhaps it s not a level it s a status ?
|
102
|
+
set_bg_color(get_level_from_status(val),row)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class ImageComboList < Gtk::ComboBox
|
108
|
+
|
109
|
+
@subdir = String.new
|
110
|
+
@filename = String.new
|
111
|
+
@filetype = String.new
|
112
|
+
|
113
|
+
def filename
|
114
|
+
return "#{@subdir}/#{self.active_iter[1]}.#{@filetype}"
|
115
|
+
end
|
116
|
+
|
117
|
+
def name
|
118
|
+
return "#{self.active_iter[1]}"
|
119
|
+
end
|
120
|
+
|
121
|
+
def selected
|
122
|
+
if self
|
123
|
+
return self.active
|
124
|
+
else
|
125
|
+
return nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def initialize(subd, filename, filetype="png")
|
130
|
+
@subdir = subd
|
131
|
+
@filename = filename
|
132
|
+
@filetype = filetype
|
133
|
+
|
134
|
+
item_active = 0
|
135
|
+
|
136
|
+
model = Gtk::ListStore.new(Gdk::Pixbuf, String)
|
137
|
+
menu_icon_size = Gtk::IconSize.lookup(Gtk::IconSize::MENU)[0]
|
138
|
+
pos = 0
|
139
|
+
for typefile in Dir["#{PIXMAP_PATH}/#{subd}/*#{filetype}"].sort
|
140
|
+
iter = model.append
|
141
|
+
iter[0] = Gdk::Pixbuf.new(typefile, menu_icon_size, menu_icon_size)
|
142
|
+
iter[1] = typefile[PIXMAP_PATH.length+subd.length + 2 ,typefile.size - PIXMAP_PATH.length - subd.length - 2 - filetype.length - 1]
|
143
|
+
if filename and iter[1] == filename
|
144
|
+
item_active = pos
|
145
|
+
end
|
146
|
+
pos +=1
|
147
|
+
end
|
148
|
+
|
149
|
+
super(model)
|
150
|
+
self.active = item_active
|
151
|
+
|
152
|
+
# column 1
|
153
|
+
renderer = Gtk::CellRendererPixbuf.new
|
154
|
+
self.pack_start(renderer, false)
|
155
|
+
self.set_attributes(renderer, :pixbuf => 0)
|
156
|
+
|
157
|
+
# column 2
|
158
|
+
renderer = Gtk::CellRendererText.new
|
159
|
+
self.pack_start(renderer, true)
|
160
|
+
self.set_attributes(renderer, :text => 1)
|
161
|
+
|
162
|
+
#self.signal_connect("changed") do
|
163
|
+
# p self.filename
|
164
|
+
#end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
@@ -0,0 +1,286 @@
|
|
1
|
+
class WMIRefWindow
|
2
|
+
|
3
|
+
def clear_ls()
|
4
|
+
@wmi_ref_ls.clear()
|
5
|
+
end
|
6
|
+
#populate listview with saved values
|
7
|
+
def populate_ls()
|
8
|
+
$wmi_refs.each_key do |name|
|
9
|
+
iter = @wmi_ref_ls.append
|
10
|
+
iter[0] = name
|
11
|
+
iter[1] = $wmi_refs[name].description
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize()
|
16
|
+
#save wmiref hash
|
17
|
+
@wmirefs_backup=$wmi_refs.dup
|
18
|
+
@window=Gtk::Window.new
|
19
|
+
@window.set_title("WMI Request Ref configuration")
|
20
|
+
@window.set_size_request(300, 200)
|
21
|
+
|
22
|
+
@window.signal_connect("key_press_event") {|w,e|
|
23
|
+
if e.keyval == Gdk::Keyval::GDK_Escape
|
24
|
+
@window.destroy
|
25
|
+
end
|
26
|
+
}
|
27
|
+
|
28
|
+
frame = Gtk::Frame::new
|
29
|
+
frame.border_width=5
|
30
|
+
frame.show
|
31
|
+
vbox_root=Gtk::VBox::new
|
32
|
+
vbox_root.show
|
33
|
+
@window.add vbox_root
|
34
|
+
vbox_root.add frame
|
35
|
+
|
36
|
+
vbox = Gtk::VBox.new(false,0)
|
37
|
+
vbox.show
|
38
|
+
frame.add vbox
|
39
|
+
|
40
|
+
@wmi_ref_ls = Gtk::ListStore.new(String, String)
|
41
|
+
@wmi_ref_view = Gtk::TreeView.new(@wmi_ref_ls)
|
42
|
+
@wmi_ref_view.show
|
43
|
+
column1 = Gtk::TreeViewColumn.new("Name",
|
44
|
+
Gtk::CellRendererText.new, {:text => 0})
|
45
|
+
column1.set_sort_column_id(0)
|
46
|
+
column2 = Gtk::TreeViewColumn.new("Description",
|
47
|
+
Gtk::CellRendererText.new, {:text => 1})
|
48
|
+
column2.set_sort_column_id(1)
|
49
|
+
|
50
|
+
@wmi_ref_view.append_column(column1)
|
51
|
+
@wmi_ref_view.append_column(column2)
|
52
|
+
|
53
|
+
scroll = Gtk::ScrolledWindow.new(nil, nil)
|
54
|
+
scroll.border_width=2
|
55
|
+
scroll.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC)
|
56
|
+
scroll.add @wmi_ref_view
|
57
|
+
scroll.show
|
58
|
+
|
59
|
+
# Create a menu
|
60
|
+
menu = Gtk::Menu.new
|
61
|
+
|
62
|
+
item_add = Gtk::ImageMenuItem.new("Add WMI Ref")
|
63
|
+
image_item_add = Gtk::Image.new()
|
64
|
+
image_item_add.set_stock(Gtk::Stock::ADD)
|
65
|
+
item_add.set_image(image_item_add)
|
66
|
+
item_add.signal_connect("activate") { add_gui_wmi_ref() }
|
67
|
+
menu.append(item_add)
|
68
|
+
item_del = Gtk::ImageMenuItem.new("Delete selected WMI Ref")
|
69
|
+
image_item_del = Gtk::Image.new()
|
70
|
+
image_item_del.set_stock(Gtk::Stock::REMOVE)
|
71
|
+
item_del.set_image(image_item_del)
|
72
|
+
item_del.signal_connect("activate") {
|
73
|
+
if @wmi_ref_view.selection.selected!=nil
|
74
|
+
if WMIRef::del_wmi_ref(@wmi_ref_view.selection.selected[0])
|
75
|
+
@wmi_ref_view.model.remove(@wmi_ref_view.selection.selected)
|
76
|
+
else
|
77
|
+
dialog = Gtk::MessageDialog.new(@window, Gtk::Dialog::DESTROY_WITH_PARENT,
|
78
|
+
Gtk::MessageDialog::ERROR,
|
79
|
+
Gtk::MessageDialog::BUTTONS_OK,
|
80
|
+
"You can't delete! WMI Ref in use")
|
81
|
+
dialog.run
|
82
|
+
dialog.destroy
|
83
|
+
end
|
84
|
+
end
|
85
|
+
}
|
86
|
+
menu.append(item_del)
|
87
|
+
item_edit = Gtk::ImageMenuItem.new("Edit WMI Ref")
|
88
|
+
image_item_edit = Gtk::Image.new()
|
89
|
+
image_item_edit.set_stock(Gtk::Stock::EDIT)
|
90
|
+
item_edit.set_image(image_item_edit)
|
91
|
+
item_edit.signal_connect("activate") {
|
92
|
+
if @wmi_ref_view.selection.selected != nil
|
93
|
+
edit_wmi_ref(@wmi_ref_view.selection.selected[0])
|
94
|
+
end
|
95
|
+
}
|
96
|
+
menu.append(item_edit)
|
97
|
+
|
98
|
+
@wmi_ref_view.signal_connect("button_press_event") do |widget, event|
|
99
|
+
if event.kind_of? Gdk::EventButton and event.button == 3
|
100
|
+
if @wmi_ref_view.selection.selected == nil
|
101
|
+
item_del.set_sensitive(false)
|
102
|
+
item_edit.set_sensitive(false)
|
103
|
+
else
|
104
|
+
item_del.set_sensitive(true)
|
105
|
+
item_edit.set_sensitive(true)
|
106
|
+
end
|
107
|
+
menu.popup(nil, nil, event.button, event.time)
|
108
|
+
elsif (@wmi_ref_view.selection.selected != nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
|
109
|
+
edit_wmi_ref(@wmi_ref_view.selection.selected[0])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
menu.show_all
|
114
|
+
|
115
|
+
populate_ls()
|
116
|
+
vbox.add(scroll)
|
117
|
+
|
118
|
+
bbox = Gtk::HBox::new(FALSE, 10)
|
119
|
+
bbox.border_width=10
|
120
|
+
bbox.show
|
121
|
+
|
122
|
+
ok_button = Gtk::Button.new(Gtk::Stock::OK)
|
123
|
+
ok_button.show
|
124
|
+
ok_button.signal_connect("clicked") {
|
125
|
+
WMIRef::write_db_wmiref()
|
126
|
+
@window.destroy
|
127
|
+
}
|
128
|
+
|
129
|
+
cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
|
130
|
+
cancel_button.show
|
131
|
+
cancel_button.signal_connect("clicked") {
|
132
|
+
$wmi_refs=@wmirefs_backup
|
133
|
+
@window.destroy
|
134
|
+
}
|
135
|
+
ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
|
136
|
+
bbox.pack_start(ok_button, TRUE, TRUE, 0)
|
137
|
+
cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
|
138
|
+
bbox.pack_start(cancel_button, TRUE, TRUE, 0)
|
139
|
+
|
140
|
+
separator = Gtk::HSeparator::new()
|
141
|
+
separator.show
|
142
|
+
vbox_root.pack_start(separator, FALSE, TRUE, 0)
|
143
|
+
vbox_root.pack_start(bbox, FALSE, TRUE, 0)
|
144
|
+
|
145
|
+
@window.show
|
146
|
+
end
|
147
|
+
|
148
|
+
def add_gui_wmi_ref()
|
149
|
+
add_modify_wmi_ref(true)
|
150
|
+
end
|
151
|
+
|
152
|
+
def edit_wmi_ref(wmi_ref_name)
|
153
|
+
add_modify_wmi_ref(false, wmi_ref_name)
|
154
|
+
end
|
155
|
+
|
156
|
+
def add_modify_wmi_ref(add_boolean, wmi_ref_name=nil)
|
157
|
+
window=Gtk::Window.new
|
158
|
+
window.set_modal(true)
|
159
|
+
lbl="Edit WMI Ref"
|
160
|
+
if add_boolean
|
161
|
+
lbl="Add WMI Ref"
|
162
|
+
end
|
163
|
+
|
164
|
+
window.set_title(lbl)
|
165
|
+
window.set_size_request(460, 160)
|
166
|
+
|
167
|
+
window.signal_connect("key_press_event") {|w,e|
|
168
|
+
if e.keyval == Gdk::Keyval::GDK_Escape
|
169
|
+
window.destroy
|
170
|
+
end
|
171
|
+
}
|
172
|
+
|
173
|
+
frame = Gtk::Frame::new
|
174
|
+
frame.border_width=10
|
175
|
+
frame.show
|
176
|
+
vbox_root=Gtk::VBox::new
|
177
|
+
vbox_root.show
|
178
|
+
window.add vbox_root
|
179
|
+
vbox_root.add frame
|
180
|
+
|
181
|
+
vbox = Gtk::VBox.new
|
182
|
+
vbox.show
|
183
|
+
frame.add vbox
|
184
|
+
|
185
|
+
table = Gtk::Table.new(3,2,false)
|
186
|
+
table.show
|
187
|
+
|
188
|
+
label_name = Gtk::Label.new "Name"
|
189
|
+
label_name.show
|
190
|
+
if add_boolean
|
191
|
+
entry_name = Gtk::Entry.new
|
192
|
+
else
|
193
|
+
entry_name = Gtk::Entry.new
|
194
|
+
entry_name.set_editable false
|
195
|
+
entry_name.set_text(wmi_ref_name)
|
196
|
+
end
|
197
|
+
entry_name.show
|
198
|
+
|
199
|
+
table.attach(label_name,0,1,0,1)
|
200
|
+
table.attach(entry_name,1,2,0,1)
|
201
|
+
|
202
|
+
entry_description = Gtk::Entry.new
|
203
|
+
if !add_boolean
|
204
|
+
entry_description.set_text($wmi_refs[entry_name.text()].description) unless entry_name.text() == ""
|
205
|
+
end
|
206
|
+
entry_description.show
|
207
|
+
label_description = Gtk::Label.new "Description"
|
208
|
+
label_description.show
|
209
|
+
|
210
|
+
table.attach(label_description,0,1,1,2)
|
211
|
+
table.attach(entry_description,1,2,1,2)
|
212
|
+
|
213
|
+
entry_value = Gtk::Entry.new
|
214
|
+
if !add_boolean
|
215
|
+
entry_value.set_text($wmi_refs[entry_name.text()].value) unless entry_name.text() == ""
|
216
|
+
end
|
217
|
+
entry_value.show
|
218
|
+
label_value = Gtk::Label.new "Value"
|
219
|
+
label_value.show
|
220
|
+
|
221
|
+
table.attach(label_value,0,1,2,3)
|
222
|
+
table.attach(entry_value,1,2,2,3)
|
223
|
+
if !add_boolean
|
224
|
+
entry_name.signal_connect("changed") {|e|
|
225
|
+
if e.text() != ""
|
226
|
+
entry_description.set_text($wmi_refs[e.text()].description)
|
227
|
+
entry_value.set_text($wmi_refs[e.text()].value)
|
228
|
+
end
|
229
|
+
}
|
230
|
+
end
|
231
|
+
bbox =Gtk::HBox::new(FALSE, 10)
|
232
|
+
bbox.border_width=10
|
233
|
+
bbox.show
|
234
|
+
|
235
|
+
ok_button = Gtk::Button.new(Gtk::Stock::OK)
|
236
|
+
ok_button.show
|
237
|
+
ok_button.signal_connect("clicked") {
|
238
|
+
if add_boolean
|
239
|
+
#new entry!
|
240
|
+
if $wmi_refs[entry_name.text()] == nil
|
241
|
+
WMIRef::add_wmi_ref(entry_name.text(),entry_description.text(),entry_value.text())
|
242
|
+
iter = @wmi_ref_ls.append
|
243
|
+
iter[0] = entry_name.text()
|
244
|
+
iter[1] = entry_description.text()
|
245
|
+
window.destroy
|
246
|
+
else
|
247
|
+
dialog = Gtk::MessageDialog.new(window, Gtk::Dialog::DESTROY_WITH_PARENT,
|
248
|
+
Gtk::MessageDialog::ERROR,
|
249
|
+
Gtk::MessageDialog::BUTTONS_OK,
|
250
|
+
"WMI Ref '#{entry_name.text()}' already exists!")
|
251
|
+
dialog.run
|
252
|
+
dialog.destroy
|
253
|
+
end
|
254
|
+
else
|
255
|
+
#modify existing entry
|
256
|
+
$wmi_refs[entry_name.text()].description=entry_description.text()
|
257
|
+
$wmi_refs[entry_name.text()].value=entry_value.text()
|
258
|
+
@wmi_ref_ls.each do |model,path,iter|
|
259
|
+
if iter[0] == entry_name.text()
|
260
|
+
iter[1]=entry_description.text()
|
261
|
+
break
|
262
|
+
end
|
263
|
+
end
|
264
|
+
window.destroy
|
265
|
+
end
|
266
|
+
}
|
267
|
+
|
268
|
+
cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
|
269
|
+
cancel_button.show
|
270
|
+
cancel_button.signal_connect("clicked") {
|
271
|
+
window.destroy
|
272
|
+
}
|
273
|
+
|
274
|
+
ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
|
275
|
+
bbox.pack_start(ok_button, TRUE, TRUE, 0)
|
276
|
+
cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
|
277
|
+
bbox.pack_start(cancel_button, TRUE, TRUE, 0)
|
278
|
+
|
279
|
+
vbox.add(table)
|
280
|
+
separator = Gtk::HSeparator::new()
|
281
|
+
separator.show
|
282
|
+
vbox_root.pack_start(separator, FALSE, TRUE, 0)
|
283
|
+
vbox_root.pack_start(bbox, FALSE, TRUE, 0)
|
284
|
+
window.show
|
285
|
+
end
|
286
|
+
end
|