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,28 @@
|
|
1
|
+
require "#{GNMSLIB}"+'/monitor/server/syslog/syslog_server'
|
2
|
+
require "#{GNMSLIB}"+'/monitor/server/msg_buffer'
|
3
|
+
require "#{GNMSLIB}"+'/monitor/server/syslog/syslog_analyzer'
|
4
|
+
|
5
|
+
class SyslogCapture
|
6
|
+
def initialize()
|
7
|
+
if $config.syslog_mon
|
8
|
+
buff=MsgBuffer.new(1)
|
9
|
+
begin
|
10
|
+
@input = SyslogServer.new(buff)
|
11
|
+
@output = SyslogAnalyzer.new(buff)
|
12
|
+
rescue Errno::EADDRINUSE => msg
|
13
|
+
rescue Errno::EACCES => msg
|
14
|
+
$log.error("Syslog Server: not started")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def stop()
|
20
|
+
if defined?(@input) && (@input != nil)
|
21
|
+
@input.close_socket()
|
22
|
+
Thread.kill(@input.get_thread())
|
23
|
+
$log.debug("end of SyslogServer thread")
|
24
|
+
#output thread will be done auto
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class SyslogMonitoring
|
2
|
+
|
3
|
+
def initialize (st, syslog_ref, sev)
|
4
|
+
@state=st
|
5
|
+
@syslog_ref=syslog_ref
|
6
|
+
#index of $status, 0 is auto map syslog severity
|
7
|
+
@severity=sev
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_syslog_ref()
|
11
|
+
return @syslog_ref
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_state()
|
15
|
+
return @state
|
16
|
+
end
|
17
|
+
|
18
|
+
def active?()
|
19
|
+
return @state==1
|
20
|
+
end
|
21
|
+
|
22
|
+
def raw_severity()
|
23
|
+
return @severity
|
24
|
+
end
|
25
|
+
|
26
|
+
def severity()
|
27
|
+
if @severity > 0
|
28
|
+
return $status[@severity-1]
|
29
|
+
end
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
end #class
|
@@ -0,0 +1,136 @@
|
|
1
|
+
class SyslogRef
|
2
|
+
attr_accessor :name, :description
|
3
|
+
|
4
|
+
TABLENAME='syslog_ref'
|
5
|
+
#############global management###############
|
6
|
+
#
|
7
|
+
# add an syslog_ref
|
8
|
+
# arg n for uniq name, descr the description and calc the calcul to do
|
9
|
+
# return true if deleted otherwise false
|
10
|
+
#
|
11
|
+
def SyslogRef::add_syslog_ref(n, descr, calc)
|
12
|
+
if $syslog_refs[n] == nil
|
13
|
+
$syslog_refs[n] = SyslogRef.new(n, descr, calc)
|
14
|
+
return true
|
15
|
+
end
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# delete an syslog_ref
|
21
|
+
# return true is entry delete otherwise false
|
22
|
+
#
|
23
|
+
def SyslogRef::del_syslog_ref(n)
|
24
|
+
if !$syslog_refs[n].used?()
|
25
|
+
$syslog_refs.delete(n)
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
|
31
|
+
def SyslogRef::write_db_syslogref()
|
32
|
+
if defined?($db) && ($db !=nil)
|
33
|
+
$db.transaction
|
34
|
+
db_delete_all_prp(TABLENAME).execute()
|
35
|
+
stmt=db_insert_ref_prp(TABLENAME)
|
36
|
+
$syslog_refs.each_value do |syslog_ref|
|
37
|
+
stmt.execute(syslog_ref.name, syslog_ref.description, syslog_ref.value.source)
|
38
|
+
end
|
39
|
+
$db.commit
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def SyslogRef::write_syslogref_conf_file(fic_name=SYSLOGREFS_CONF_FILE)
|
44
|
+
field_separator='~'
|
45
|
+
fic=Tempfile.new(File.basename(fic_name))
|
46
|
+
$syslog_refs.each_value do |syslog_ref|
|
47
|
+
fic.puts "#{syslog_ref.name}#{field_separator}#{syslog_ref.description}#{field_separator}#{syslog_ref.value.source}"
|
48
|
+
end
|
49
|
+
fic.close()
|
50
|
+
if !FileUtils.move(fic.path, fic_name)
|
51
|
+
$log.error("Can not save syslog ref conf file")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def SyslogRef::read_db_syslogref()
|
56
|
+
if defined?($db) && ($db !=nil)
|
57
|
+
db_select_all_prp(TABLENAME).execute do |rs|
|
58
|
+
rs.each do |name, description, value|
|
59
|
+
add_syslog_ref(name,description,value)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def SyslogRef::read_syslogref_conf_file(fic=SYSLOGREFS_CONF_FILE)
|
66
|
+
field_separator='~'
|
67
|
+
if FileTest.exist?(fic)
|
68
|
+
fic = File.new(fic,'r')
|
69
|
+
lign=fic.gets
|
70
|
+
while lign
|
71
|
+
lign_t = lign.split(field_separator)
|
72
|
+
if lign_t.size() == 3
|
73
|
+
add_syslog_ref(lign_t[0],lign_t[1],lign_t[2].chomp())
|
74
|
+
end
|
75
|
+
lign=fic.gets
|
76
|
+
end
|
77
|
+
fic.close
|
78
|
+
else
|
79
|
+
puts "syslogrefs conf file not found"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# return a table of all syslogref name
|
85
|
+
#
|
86
|
+
def SyslogRef::get_syslog_refs_name()
|
87
|
+
name_t=[]
|
88
|
+
$syslog_refs.each_key {|name|
|
89
|
+
name_t.push name
|
90
|
+
}
|
91
|
+
return name_t
|
92
|
+
end
|
93
|
+
|
94
|
+
def SyslogRef::syslog_ref_exist?(name)
|
95
|
+
return $syslog_refs[name] != nil
|
96
|
+
end
|
97
|
+
#############end global management###############
|
98
|
+
|
99
|
+
def initialize (n, descr, re)
|
100
|
+
#name is the identifier, it must be uniq
|
101
|
+
@name=n
|
102
|
+
@description=descr
|
103
|
+
#here value is a regexp
|
104
|
+
@value=Regexp.new(re)
|
105
|
+
@nb_use=0
|
106
|
+
end
|
107
|
+
|
108
|
+
def add_use()
|
109
|
+
@nb_use+=1
|
110
|
+
end
|
111
|
+
|
112
|
+
def del_use()
|
113
|
+
@nb_use-=1
|
114
|
+
end
|
115
|
+
|
116
|
+
def used?()
|
117
|
+
return @nb_use>0
|
118
|
+
end
|
119
|
+
|
120
|
+
def to_str()
|
121
|
+
print "SyslogRef: ", @name, " ", @description, " ", @value
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_regex()
|
125
|
+
return @value
|
126
|
+
end
|
127
|
+
|
128
|
+
def value()
|
129
|
+
return @value
|
130
|
+
end
|
131
|
+
|
132
|
+
def set_value(re)
|
133
|
+
@value=Regexp.new(re)
|
134
|
+
end
|
135
|
+
|
136
|
+
end #class
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class SyslogServer
|
2
|
+
|
3
|
+
def initialize(buff)
|
4
|
+
require 'socket'
|
5
|
+
@port = $config.syslog_port
|
6
|
+
@buff=buff
|
7
|
+
Socket.do_not_reverse_lookup = true
|
8
|
+
@server = UDPSocket.open
|
9
|
+
begin
|
10
|
+
$log.info("Syslog Server: listening on udp port #{@port}")
|
11
|
+
@server.bind("", @port)
|
12
|
+
rescue Errno::EADDRINUSE => msg
|
13
|
+
$log.fatal("Syslog Server: #{msg}, socket in use")
|
14
|
+
raise Errno::EADDRINUSE
|
15
|
+
rescue Errno::EACCES => msg
|
16
|
+
$log.fatal("Syslog Server: #{msg}, need root perms")
|
17
|
+
raise Errno::EACCES
|
18
|
+
rescue Exception => msg
|
19
|
+
raise msg
|
20
|
+
end
|
21
|
+
|
22
|
+
@listener = Thread.start do
|
23
|
+
while $config.syslog_mon
|
24
|
+
begin
|
25
|
+
msg = @server.recvfrom(1024)
|
26
|
+
#extract peer info: domain, port, name, and IP address
|
27
|
+
@buff.put Time.new.to_s()+'|'+"#{msg[1][3]}#{msg[0]}"
|
28
|
+
Thread.pass if @buff.full?
|
29
|
+
rescue Exception => msg
|
30
|
+
#catch when stream is closed by close() method
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def close_socket()
|
37
|
+
@server.close unless @server == nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_thread
|
41
|
+
@listener
|
42
|
+
end
|
43
|
+
end
|
data/lib/node.rb
ADDED
@@ -0,0 +1,1020 @@
|
|
1
|
+
require "#{GNMSLIB}"+'/gui/color_macro'
|
2
|
+
require "#{GNMSLIB}"+'/service'
|
3
|
+
require "#{GNMSLIB}"+'/interface'
|
4
|
+
|
5
|
+
class Node
|
6
|
+
|
7
|
+
NONAME_PROPERTY="(noname)"
|
8
|
+
NOARP_PROPERTY="(noarp)"
|
9
|
+
NODESCR_PROPERTY="(nodesc)"
|
10
|
+
|
11
|
+
#accessor for inner field
|
12
|
+
attr_accessor :uuid, :ip, :netmask, :ipv6, :netmask6, :service, :custom_monitoring, :snmp_monitoring, :wmi_monitoring, :snmptrap_monitoring, :syslog_monitoring, :jmx_monitoring, :http_monitoring, :status, :interface, :x, :y, :icon, :description, :snmp_version, :snmp_port, :snmp_timeout, :snmp_retry, :type, :os, :node_view, :map
|
13
|
+
attr_reader :avail_sev, :snmp_sev, :custom_sev, :trap_sev, :service_sev, :wmi_sev, :syslog_sev, :jmx_sev
|
14
|
+
#accessor for alert specific reaction
|
15
|
+
attr_accessor :mail_by_level, :sound_file_path_by_level, :sms_num_by_level, :script_name_by_level, :im_dest_by_level
|
16
|
+
attr_accessor :alert_type_by_level, :inherit_from_global
|
17
|
+
|
18
|
+
def set_inherit_conf(bool)
|
19
|
+
@inherit_from_global=bool
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# each time global conf is changed we have to modify the root node config
|
24
|
+
#
|
25
|
+
def set_snmp_conf(rcommunity, wcommunity, version, port, timeout, snmpretry, saveindb_flag=0)
|
26
|
+
if account_exist_nr?("snmp")
|
27
|
+
self.set_account_login("snmp", rcommunity)
|
28
|
+
self.set_account_password("snmp", wcommunity)
|
29
|
+
end
|
30
|
+
@snmp_version=version
|
31
|
+
@snmp_port=port
|
32
|
+
@snmp_timeout=timeout
|
33
|
+
@snmp_retry=snmpretry
|
34
|
+
|
35
|
+
if saveindb_flag
|
36
|
+
nodeid=db_get_node_id(@ip,NETWORKNODE)
|
37
|
+
db_set_snmp_parameter(nodeid, version, port, timeout, snmpretry)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
#
|
41
|
+
# enable type of alert according to a level
|
42
|
+
#
|
43
|
+
def enable_alert_type(type, level)
|
44
|
+
ind=$talert_type.index(type)
|
45
|
+
if ind > -1
|
46
|
+
set_alert_type(type, level, true)
|
47
|
+
return 0
|
48
|
+
end
|
49
|
+
return 1
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# disable type of alert according to a level
|
54
|
+
#
|
55
|
+
def disable_alert_type(type, level)
|
56
|
+
ind=$talert_type.index(type)
|
57
|
+
if ind > -1
|
58
|
+
set_alert_type(type, level, false)
|
59
|
+
return 0
|
60
|
+
end
|
61
|
+
return 1
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# return either the overwritten snmp port or the inherit snmp port from network ancestor
|
67
|
+
#
|
68
|
+
def get_default_inherit_snmp_port()
|
69
|
+
if (self.class == Network) && (@snmp_port != nil)
|
70
|
+
return @snmp_port
|
71
|
+
else
|
72
|
+
if @map == ROOTMAPADDR
|
73
|
+
return $config.snmp_port
|
74
|
+
else
|
75
|
+
return $network[@map].get_default_inherit_snmp_port()
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# return either the overwritten snmp version or the default general value
|
82
|
+
#
|
83
|
+
def get_default_inherit_snmp_version()
|
84
|
+
if (self.class == Network) && (@snmp_version != nil)
|
85
|
+
return @snmp_version
|
86
|
+
else
|
87
|
+
if @map == ROOTMAPADDR
|
88
|
+
return $config.snmp_version
|
89
|
+
else
|
90
|
+
return $network[@map].get_default_inherit_snmp_version()
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# return either the overwritten snmp timeout or the inherit snmp timeout from network ancestor
|
97
|
+
#
|
98
|
+
def get_default_inherit_snmp_timeout()
|
99
|
+
if (self.class == Network) && (@snmp_timeout != nil)
|
100
|
+
return @snmp_timeout
|
101
|
+
else
|
102
|
+
if @map == ROOTMAPADDR
|
103
|
+
return $config.snmp_timeout
|
104
|
+
else
|
105
|
+
return $network[@map].get_default_inherit_snmp_timeout()
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
#
|
111
|
+
# return either the overwritten snmp retry or the inherit snmp retry from network ancestor
|
112
|
+
#
|
113
|
+
def get_default_inherit_snmp_retry()
|
114
|
+
if (self.class == Network) && (@snmp_retry != nil)
|
115
|
+
return @snmp_retry
|
116
|
+
else
|
117
|
+
if @map == ROOTMAPADDR
|
118
|
+
return $config.snmp_retry
|
119
|
+
else
|
120
|
+
return $network[@map].get_default_inherit_snmp_retry()
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
def initialize (ip="", mask=24, ipv6="", mask6=64, mp=nil, serv=nil, s=UNKNOWN, xd=0 ,yd=0, i="", d=NODESCR_PROPERTY, t=nil, o="unknown", uuid=create_uuid())
|
127
|
+
|
128
|
+
@uuid = uuid
|
129
|
+
@ip=ip
|
130
|
+
if isInteger(mask)
|
131
|
+
@netmask = mask
|
132
|
+
elsif isValidIPv4(mask)
|
133
|
+
@netmask = IPCalc.netmask_to_bits(mask)
|
134
|
+
end
|
135
|
+
@ipv6=ipv6
|
136
|
+
@netmask6=mask6
|
137
|
+
if serv
|
138
|
+
#serv must be a hash of service class
|
139
|
+
@service=serv.dup
|
140
|
+
else
|
141
|
+
@service=Hash.new
|
142
|
+
end
|
143
|
+
|
144
|
+
@snmp_monitoring=Hash.new
|
145
|
+
@wmi_monitoring=Hash.new
|
146
|
+
@custom_monitoring=Hash.new
|
147
|
+
@syslog_monitoring=Hash.new
|
148
|
+
@snmptrap_monitoring=Hash.new
|
149
|
+
@jmx_monitoring=Hash.new
|
150
|
+
@http_monitoring=Hash.new
|
151
|
+
|
152
|
+
@status=s
|
153
|
+
@avail_sev=UNKNOWN
|
154
|
+
@snmp_sev=UNMANAGED
|
155
|
+
@custom_sev=UNMANAGED
|
156
|
+
@trap_sev=UNMANAGED
|
157
|
+
@service_sev=UNMANAGED
|
158
|
+
@wmi_sev=UNMANAGED
|
159
|
+
@syslog_sev=UNMANAGED
|
160
|
+
@jmx_sev=UNMANAGED
|
161
|
+
|
162
|
+
@account=Hash.new
|
163
|
+
@group=Array.new
|
164
|
+
@interface=Hash.new
|
165
|
+
|
166
|
+
@x=xd
|
167
|
+
@y=yd
|
168
|
+
@links=[]
|
169
|
+
@type=t
|
170
|
+
|
171
|
+
if i == "" || i == nil
|
172
|
+
if $config.host_icon_view=="os"
|
173
|
+
@icon = "os/unknown.png"
|
174
|
+
else
|
175
|
+
#type
|
176
|
+
if (@type != nil) && (@type != "")
|
177
|
+
@icon = "#{find_extension("type/#{@type}")}"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
else
|
181
|
+
@icon=i
|
182
|
+
end
|
183
|
+
|
184
|
+
if d == "" || d == nil
|
185
|
+
@description=""
|
186
|
+
else
|
187
|
+
@description=d
|
188
|
+
end
|
189
|
+
|
190
|
+
@os=o
|
191
|
+
#ip and map could not be the same
|
192
|
+
if mp != ip
|
193
|
+
if mp == nil && ip != ROOTMAPADDR
|
194
|
+
#we want the node on the root network
|
195
|
+
@map=ROOTMAPADDR
|
196
|
+
else
|
197
|
+
if ip == ROOTMAPADDR
|
198
|
+
@map=nil
|
199
|
+
@snmp_version=$config.snmp_version
|
200
|
+
@snmp_port=$config.snmp_port
|
201
|
+
@snmp_timeout=$config.snmp_timeout
|
202
|
+
@snmp_retry=$config.snmp_retry
|
203
|
+
else
|
204
|
+
@map=mp
|
205
|
+
if $network[mp]
|
206
|
+
@snmp_version=$network[mp].snmp_version
|
207
|
+
@snmp_port=$network[mp].snmp_port
|
208
|
+
@snmp_timeout=$network[mp].snmp_timeout
|
209
|
+
@snmp_retry=$network[mp].snmp_retry
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
else
|
214
|
+
@map=ROOTMAPADDR
|
215
|
+
end
|
216
|
+
|
217
|
+
@mail_by_level = Hash.new
|
218
|
+
$config.init_hash_conf_by_level(@mail_by_level)
|
219
|
+
@sound_file_path_by_level = Hash.new
|
220
|
+
$config.init_hash_conf_by_level(@sound_file_path_by_level)
|
221
|
+
@sms_num_by_level = Hash.new
|
222
|
+
$config.init_hash_conf_by_level(@sms_num_by_level)
|
223
|
+
@im_dest_by_level = Hash.new
|
224
|
+
$config.init_hash_conf_by_level(@im_dest_by_level)
|
225
|
+
@script_name_by_level = Hash.new
|
226
|
+
$config.init_hash_conf_by_level(@script_name_by_level)
|
227
|
+
|
228
|
+
@inherit_from_global=true
|
229
|
+
@alert_type_by_level = Hash.new
|
230
|
+
init_level_alert_type(@alert_type_by_level)
|
231
|
+
|
232
|
+
end
|
233
|
+
#
|
234
|
+
# remove all links between connected nodes
|
235
|
+
#
|
236
|
+
def del_all_links()
|
237
|
+
if nb_links() > 0
|
238
|
+
nb_link=nb_links()
|
239
|
+
cpt=0
|
240
|
+
links_t=@links.dup
|
241
|
+
while cpt < nb_link do
|
242
|
+
lnk=links_t[cpt]
|
243
|
+
lnk.node1.del_link(lnk)
|
244
|
+
lnk.node2.del_link(lnk)
|
245
|
+
$links.delete(lnk)
|
246
|
+
lnk.remove_link()
|
247
|
+
cpt+=1
|
248
|
+
end
|
249
|
+
@links.clear
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
#
|
254
|
+
# return links hash
|
255
|
+
#
|
256
|
+
def get_links()
|
257
|
+
return @links
|
258
|
+
end
|
259
|
+
|
260
|
+
#
|
261
|
+
# return value corresponding to the links between other nodes
|
262
|
+
#
|
263
|
+
def nb_links()
|
264
|
+
return @links.size
|
265
|
+
end
|
266
|
+
|
267
|
+
#
|
268
|
+
# check if it exists a link between node pass in 1st argument
|
269
|
+
# return 1 if true or 0 if false
|
270
|
+
#
|
271
|
+
def linked(node)
|
272
|
+
@links.each {|lnk|
|
273
|
+
if lnk.point?(node)
|
274
|
+
return 1
|
275
|
+
end
|
276
|
+
}
|
277
|
+
return 0
|
278
|
+
end
|
279
|
+
|
280
|
+
#
|
281
|
+
# add a link to links hash
|
282
|
+
#
|
283
|
+
def add_link(lnk)
|
284
|
+
if @links.index(lnk) == nil
|
285
|
+
@links.push(lnk)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
#
|
290
|
+
# del link from links hash between node pass as 1st argument
|
291
|
+
#
|
292
|
+
def del_node_link(node)
|
293
|
+
@links.each {|lnk|
|
294
|
+
if lnk.point?(node)
|
295
|
+
lnk.node1.del_link(lnk)
|
296
|
+
lnk.node2.del_link(lnk)
|
297
|
+
$links.delete(lnk)
|
298
|
+
lnk.remove_link()
|
299
|
+
return 1
|
300
|
+
end
|
301
|
+
}
|
302
|
+
return 0
|
303
|
+
end
|
304
|
+
|
305
|
+
#
|
306
|
+
# del link from links hash pass in 1st argument
|
307
|
+
#
|
308
|
+
def del_link(lnk)
|
309
|
+
@links.delete(lnk)
|
310
|
+
end
|
311
|
+
|
312
|
+
#
|
313
|
+
# update status based on the avail, snmp, custom severities
|
314
|
+
#
|
315
|
+
def refresh_status()
|
316
|
+
$log.debug("refresh_status: #{ip} status=#{@status}")
|
317
|
+
#if all sev are identical, set general sev as sev
|
318
|
+
if @avail_sev == @snmp_sev and @snmp_sev == @custom_sev and @custom_sev == @trap_sev and @trap_sev == @service_sev and @service_sev == @wmi_sev and @wmi_sev == @syslog_sev and @syslog_sev == @jmx_sev
|
319
|
+
change_status(@snmp_sev)
|
320
|
+
if @snmp_sev == UNMANAGED and self.node_view
|
321
|
+
self.node_view.reset_notification()
|
322
|
+
self.node_view.update_notification_icon()
|
323
|
+
end
|
324
|
+
return
|
325
|
+
end
|
326
|
+
|
327
|
+
#reinit specific sev if needed
|
328
|
+
if !$config.port_mon and (@service_sev != UNMANAGED)
|
329
|
+
@service_sev = UNMANAGED
|
330
|
+
end
|
331
|
+
if !$config.snmp_mon and (@snmp_sev != UNMANAGED)
|
332
|
+
@snmp_sev = UNMANAGED
|
333
|
+
end
|
334
|
+
if !$config.custom_mon and (@custom_sev != UNMANAGED)
|
335
|
+
@custom_sev = UNMANAGED
|
336
|
+
end
|
337
|
+
if !$config.snmptrap_mon and (@trap_sev != UNMANAGED)
|
338
|
+
@trap_sev = UNMANAGED
|
339
|
+
end
|
340
|
+
if !$config.syslog_mon and (@syslog_sev != UNMANAGED)
|
341
|
+
@syslog_sev = UNMANAGED
|
342
|
+
end
|
343
|
+
if !$config.wmi_mon and (@wmi_sev != UNMANAGED)
|
344
|
+
@wmi_sev = UNMANAGED
|
345
|
+
end
|
346
|
+
if !$config.jmx_mon and (@jmx_sev != UNMANAGED)
|
347
|
+
@jmx_sev = UNMANAGED
|
348
|
+
end
|
349
|
+
|
350
|
+
if $config.port_mon and (@service_sev == UNMANAGED)
|
351
|
+
@service_sev = UNKNOWN
|
352
|
+
end
|
353
|
+
if $config.snmp_mon and (@snmp_sev == UNMANAGED)
|
354
|
+
@snmp_sev = UNKNOWN
|
355
|
+
end
|
356
|
+
if $config.custom_mon and (@custom_sev == UNMANAGED)
|
357
|
+
@custom_sev = UNKNOWN
|
358
|
+
end
|
359
|
+
if $config.snmptrap_mon and (@trap_sev == UNMANAGED)
|
360
|
+
@trap_sev = UNKNOWN
|
361
|
+
end
|
362
|
+
if $config.syslog_mon and (@syslog_sev == UNMANAGED)
|
363
|
+
@syslog_sev = UNKNOWN
|
364
|
+
end
|
365
|
+
if $config.wmi_mon and (@wmi_sev == UNMANAGED)
|
366
|
+
@wmi_sev = UNKNOWN
|
367
|
+
end
|
368
|
+
if $config.jmx_mon and (@jmx_sev == UNMANAGED)
|
369
|
+
@jmx_sev = UNKNOWN
|
370
|
+
end
|
371
|
+
|
372
|
+
#if at least one is critical set global sev to critical
|
373
|
+
if ((@avail_sev == CRITICAL) and (@snmp_sev <= UNMANAGED) and (@custom_sev <= UNMANAGED) and (@trap_sev <= UNMANAGED) and (@service_sev <= UNMANAGED) and (@wmi_sev <= UNMANAGED) and (@syslog_sev <= UNMANAGED) and (@jmx_sev <= UNMANAGED)) || (@snmp_sev == CRITICAL) || (@custom_sev == CRITICAL) || (@trap_sev == CRITICAL) || (@service_sev == CRITICAL) || (@jmx_sev == CRITICAL) || (@syslog_sev == CRITICAL) || (@wmi_sev == CRITICAL)
|
374
|
+
change_status(CRITICAL)
|
375
|
+
else
|
376
|
+
if ((@avail_sev > UNMANAGED) and (@snmp_sev <= UNMANAGED) and (@custom_sev <= UNMANAGED) and (@trap_sev <= UNMANAGED) and (@service_sev <= UNMANAGED) and (@wmi_sev <= UNMANAGED) and (@syslog_sev <= UNMANAGED) and (@jmx_sev <= UNMANAGED))
|
377
|
+
change_status(@avail_sev)
|
378
|
+
else
|
379
|
+
#we have to dont care about UNMANAGED and UNKNOWN value
|
380
|
+
cpt=0
|
381
|
+
if @snmp_sev > UNMANAGED
|
382
|
+
cpt+=1
|
383
|
+
end
|
384
|
+
if @custom_sev > UNMANAGED
|
385
|
+
cpt+=1
|
386
|
+
end
|
387
|
+
if @trap_sev > UNMANAGED
|
388
|
+
cpt+=1
|
389
|
+
end
|
390
|
+
if @service_sev > UNMANAGED
|
391
|
+
cpt+=1
|
392
|
+
end
|
393
|
+
if @wmi_sev > UNMANAGED
|
394
|
+
cpt+=1
|
395
|
+
end
|
396
|
+
if @syslog_sev > UNMANAGED
|
397
|
+
cpt+=1
|
398
|
+
end
|
399
|
+
if @jmx_sev > UNMANAGED
|
400
|
+
cpt+=1
|
401
|
+
end
|
402
|
+
|
403
|
+
if cpt > 0
|
404
|
+
val=(
|
405
|
+
(((@service_sev>UNMANAGED) and $config.port_mon)?@service_sev:UNMANAGED) +
|
406
|
+
(((@snmp_sev>UNMANAGED) and $config.snmp_mon)?@snmp_sev:UNMANAGED) +
|
407
|
+
(((@wmi_sev>UNMANAGED) and $config.wmi_mon)?@wmi_sev:UNMANAGED) +
|
408
|
+
(((@jmx_sev>UNMANAGED) and $config.jmx_mon)?@jmx_sev:UNMANAGED) +
|
409
|
+
(((@custom_sev>UNMANAGED) and $config.custom_mon)?@custom_sev:UNMANAGED) +
|
410
|
+
(((@trap_sev>UNMANAGED) and $config.snmptrap_mon)?@trap_sev:UNMANAGED) +
|
411
|
+
(((@syslog_sev>UNMANAGED) and $config.syslog_mon)?@syslog_sev:UNMANAGED)
|
412
|
+
)/cpt
|
413
|
+
|
414
|
+
#print "cpt: ",cpt, " val ",val.floor(),"\n"
|
415
|
+
if val.floor() <= UNMANAGED
|
416
|
+
$log.fatal("refresh_status: fail to compute status")
|
417
|
+
else
|
418
|
+
change_status(val.floor())
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
def hide_label()
|
426
|
+
@node_view.hide_text()
|
427
|
+
end
|
428
|
+
|
429
|
+
def show_label()
|
430
|
+
@node_view.show_text() unless !@node_view
|
431
|
+
end
|
432
|
+
|
433
|
+
def set_label_visibility()
|
434
|
+
if !$config.show_label
|
435
|
+
hide_label()
|
436
|
+
return false
|
437
|
+
else
|
438
|
+
show_label()
|
439
|
+
return true
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
def set_severity(event_type, sev)
|
444
|
+
case event_type
|
445
|
+
when EventWindow::PORT_EVENT_TYPE
|
446
|
+
set_service_severity(sev)
|
447
|
+
when EventWindow::TRAP_EVENT_TYPE
|
448
|
+
set_trap_severity(sev)
|
449
|
+
when EventWindow::CUSTOM_EVENT_TYPE
|
450
|
+
set_custom_severity(sev)
|
451
|
+
when EventWindow::SNMP_EVENT_TYPE
|
452
|
+
set_snmp_severity(sev)
|
453
|
+
when EventWindow::WMI_EVENT_TYPE
|
454
|
+
set_wmi_severity(sev)
|
455
|
+
when EventWindow::SYSLOG_EVENT_TYPE
|
456
|
+
set_syslog_severity(sev)
|
457
|
+
when EventWindow::JMX_EVENT_TYPE
|
458
|
+
set_jmx_severity(sev)
|
459
|
+
when EventWindow::AVAIL_EVENT_TYPE
|
460
|
+
set_avail_severity(sev)
|
461
|
+
when EventWindow::CORE_EVENT_TYPE
|
462
|
+
else
|
463
|
+
$log.error("unknown event type: #{event_type}")
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
def set_avail_severity(sev)
|
468
|
+
@avail_sev=sev
|
469
|
+
refresh_status()
|
470
|
+
end
|
471
|
+
|
472
|
+
def set_service_severity(sev)
|
473
|
+
@service_sev=sev
|
474
|
+
refresh_status()
|
475
|
+
end
|
476
|
+
|
477
|
+
def set_wmi_severity(sev)
|
478
|
+
@wmi_sev=sev
|
479
|
+
refresh_status()
|
480
|
+
end
|
481
|
+
|
482
|
+
def set_jmx_severity(sev)
|
483
|
+
@jmx_sev=sev
|
484
|
+
refresh_status()
|
485
|
+
end
|
486
|
+
|
487
|
+
def set_syslog_severity(sev)
|
488
|
+
@syslog_sev=sev
|
489
|
+
refresh_status()
|
490
|
+
end
|
491
|
+
|
492
|
+
|
493
|
+
#sev is an index $status_value
|
494
|
+
def set_snmp_severity(sev)
|
495
|
+
@snmp_sev=sev
|
496
|
+
refresh_status()
|
497
|
+
end
|
498
|
+
|
499
|
+
def set_custom_severity(sev)
|
500
|
+
@custom_sev=sev
|
501
|
+
refresh_status()
|
502
|
+
end
|
503
|
+
|
504
|
+
#use for snmp trap and syslog msgs
|
505
|
+
def set_trap_severity(sev)
|
506
|
+
@trap_sev=sev
|
507
|
+
refresh_status()
|
508
|
+
end
|
509
|
+
|
510
|
+
def set_all_severity(sev)
|
511
|
+
@avail_sev=sev
|
512
|
+
@snmp_sev=sev
|
513
|
+
@custom_sev=sev
|
514
|
+
@trap_sev=sev
|
515
|
+
@service_sev=sev
|
516
|
+
@wmi_sev=sev
|
517
|
+
@syslog_sev=sev
|
518
|
+
@jmx_sev=sev
|
519
|
+
refresh_status()
|
520
|
+
end
|
521
|
+
|
522
|
+
# return custom monitoring severity
|
523
|
+
def custom_severity(name)
|
524
|
+
cust = @custom_monitoring[name]
|
525
|
+
if cust
|
526
|
+
return cust.severity
|
527
|
+
end
|
528
|
+
return nil
|
529
|
+
end
|
530
|
+
|
531
|
+
# return custom monitoring parameter
|
532
|
+
def custom_parameter(name)
|
533
|
+
cust = @custom_monitoring[name]
|
534
|
+
if cust
|
535
|
+
return cust.param
|
536
|
+
end
|
537
|
+
return nil
|
538
|
+
end
|
539
|
+
|
540
|
+
def service_key(protocol, port)
|
541
|
+
return "#{protocol}/#{port}"
|
542
|
+
end
|
543
|
+
|
544
|
+
# return service instance based on the service name as a key
|
545
|
+
def service_by_name(name)
|
546
|
+
@service.each_value {|serv|
|
547
|
+
if serv.name == name
|
548
|
+
return serv
|
549
|
+
end
|
550
|
+
}
|
551
|
+
return nil
|
552
|
+
end
|
553
|
+
|
554
|
+
def add_service(protocol, port, name="?", monitor_flag=1, sev=0)
|
555
|
+
if @service[service_key(protocol, port)] == nil
|
556
|
+
@service[service_key(protocol, port)] = Service.new(protocol,port,name,monitor_flag,$status.index(sev))
|
557
|
+
end
|
558
|
+
#store in db
|
559
|
+
db_add_service(ip, get_node_type(), protocol, port, name, monitor_flag, $status.index(sev))
|
560
|
+
end
|
561
|
+
|
562
|
+
def del_service(protocol, port)
|
563
|
+
if @service[service_key(protocol, port)] != nil
|
564
|
+
@service[service_key(protocol, port)].delete()
|
565
|
+
end
|
566
|
+
#del in db
|
567
|
+
db_del_service(protocol, port)
|
568
|
+
end
|
569
|
+
|
570
|
+
#
|
571
|
+
# check if a given port is monitored
|
572
|
+
#
|
573
|
+
def is_service_monitor(protocol, port)
|
574
|
+
return (@service[service_key(protocol, port)] != nil) && (@service[service_key(protocol, port)].monitored?())
|
575
|
+
end
|
576
|
+
|
577
|
+
#
|
578
|
+
# get severity associated to a given proto/port
|
579
|
+
#
|
580
|
+
def get_service_sev(protocol, port)
|
581
|
+
return @service[service_key(protocol, port)].severity
|
582
|
+
end
|
583
|
+
|
584
|
+
|
585
|
+
def add_wmi_monitoring(state, wmiref_name, op, val, sev, status=nil)
|
586
|
+
if @wmi_monitoring[wmiref_name] == nil
|
587
|
+
if WMIRef::wmi_ref_exist?(wmiref_name)
|
588
|
+
if sev.class != Fixnum
|
589
|
+
@wmi_monitoring[wmiref_name]=WmiMonitoring.new(state, wmiref_name, WmiMonitoring::TESTOP.index(op), val, $status.index(sev))
|
590
|
+
db_add_wmi_monitoring(ip, get_node_type(), state, wmiref_name, WmiMonitoring::TESTOP.index(op), val, $status.index(sev)) unless status
|
591
|
+
else
|
592
|
+
@wmi_monitoring[wmiref_name]=WmiMonitoring.new(state, wmiref_name, op, val, sev)
|
593
|
+
db_add_wmi_monitoring(ip, get_node_type(), state, wmiref_name, op, val, sev) unless status
|
594
|
+
end
|
595
|
+
$wmi_refs[wmiref_name].add_use()
|
596
|
+
else
|
597
|
+
$log.error("WMI entry #{wmiref_name} is unknown")
|
598
|
+
end
|
599
|
+
end
|
600
|
+
end
|
601
|
+
|
602
|
+
def add_jmx_monitoring(state, jmxref_name, proto, port, auth, attribuesh)
|
603
|
+
if @jmx_monitoring[jmxref_name] == nil
|
604
|
+
if JMXRef::jmx_ref_exist?(jmxref_name)
|
605
|
+
@jmx_monitoring[jmxref_name]=JmxMonitoring.new(state, jmxref_name, proto, port, auth)
|
606
|
+
attribuesh.each_value {|attr|
|
607
|
+
if attr.class == JmxAttributeMonitoring
|
608
|
+
@jmx_monitoring[jmxref_name].add_attribute(attr.attributeName, attr.operator, attr.value, attr.severity)
|
609
|
+
end
|
610
|
+
}
|
611
|
+
$jmx_refs[jmxref_name].add_use()
|
612
|
+
else
|
613
|
+
$log.error("JMX entry #{jmxref_name} is unknown")
|
614
|
+
end
|
615
|
+
end
|
616
|
+
end
|
617
|
+
|
618
|
+
def add_snmp_monitoring(state, oidref_name, op, val, sev, status=nil)
|
619
|
+
if @snmp_monitoring[oidref_name] == nil
|
620
|
+
if OIDRef::oid_ref_exist?(oidref_name)
|
621
|
+
if sev.class != Fixnum
|
622
|
+
@snmp_monitoring[oidref_name]=SnmpMonitoring.new(state, oidref_name, SnmpMonitoring::TESTOP.index(op), val, $status.index(sev))
|
623
|
+
db_add_snmp_monitoring(ip, get_node_type(), state, oidref_name, SnmpMonitoring::TESTOP.index(op), val, $status.index(sev)) unless status
|
624
|
+
else
|
625
|
+
@snmp_monitoring[oidref_name]=SnmpMonitoring.new(state, oidref_name, op, val, sev)
|
626
|
+
db_add_snmp_monitoring(ip, get_node_type(), state, oidref_name, op, val, sev) unless status
|
627
|
+
end
|
628
|
+
$oid_refs[oidref_name].add_use()
|
629
|
+
else
|
630
|
+
$log.error("SNMP OID #{oidref_name} is unknown")
|
631
|
+
end
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
def nb_interface()
|
636
|
+
return @interface.size
|
637
|
+
end
|
638
|
+
|
639
|
+
def add_interface(n, lstatus=nil, sp=nil, tp=nil)
|
640
|
+
if @interface[n] == nil
|
641
|
+
@interface[n] = Interface.new(n, lstatus, sp, tp)
|
642
|
+
#we are adding it in db at save time
|
643
|
+
else
|
644
|
+
$log.error("Interface #{n} already exists")
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
648
|
+
def del_interface(n)
|
649
|
+
if @interface[n] != nil
|
650
|
+
@interface[n].delete()
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
def del_wmi_monitoring(oidref_name)
|
655
|
+
if @wmi_monitoring[oidref_name] != nil
|
656
|
+
$wmi_refs[oidref_name].del_use()
|
657
|
+
@wmi_monitoring[oidref_name].delete()
|
658
|
+
end
|
659
|
+
end
|
660
|
+
|
661
|
+
def del_jmx_monitoring(oidref_name)
|
662
|
+
if @jmx_monitoring[oidref_name] != nil
|
663
|
+
$jmx_refs[oidref_name].del_use()
|
664
|
+
@jmx_monitoring[oidref_name].delete()
|
665
|
+
end
|
666
|
+
end
|
667
|
+
|
668
|
+
def del_snmp_monitoring(oidref_name)
|
669
|
+
if @snmp_monitoring[oidref_name] != nil
|
670
|
+
$oid_refs[oidref_name].del_use()
|
671
|
+
@snmp_monitoring[oidref_name].delete()
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
def add_custom_monitoring(state, custom_mon_name, param, sev, status=nil)
|
676
|
+
if $custom_monitor and ($custom_monitor.index(custom_mon_name) != nil) and (@custom_monitoring[custom_mon_name] == nil)
|
677
|
+
@custom_monitoring[custom_mon_name] = CustomMonitoring.new(state.to_i, custom_mon_name, param, sev.to_i)
|
678
|
+
db_add_custom_monitoring(ip, get_node_type(), [state, custom_mon_name, param, sev]) unless status
|
679
|
+
end
|
680
|
+
end
|
681
|
+
|
682
|
+
def add_custom_monitoring_bulk(custom_mon_array)
|
683
|
+
custom_mon_array.each {|state, custom_mon_name, param, sev|
|
684
|
+
add_custom_monitoring(state.to_i, custom_mon_name, param, sev.to_i, "init")
|
685
|
+
}
|
686
|
+
db_add_custom_monitoring(ip, get_node_type(), custom_mon_array)
|
687
|
+
end
|
688
|
+
|
689
|
+
def del_custom_monitoring(custom_mon_name)
|
690
|
+
if @custom_monitoring[custom_mon_name] != nil
|
691
|
+
@custom_monitoring[custom_mon_name].delete()
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
695
|
+
def add_syslog_monitoring(state, syslog_ref_name, sev, status=nil)
|
696
|
+
if @syslog_monitoring[syslog_ref_name] == nil
|
697
|
+
if SyslogRef::syslog_ref_exist?(syslog_ref_name)
|
698
|
+
if sev.class != Fixnum
|
699
|
+
#puts "add_syslog_monitoring ", syslog_ref_name, sev, $status.index(sev)
|
700
|
+
#here 0 sev corresponds to map syslog default severity
|
701
|
+
sev_tmp=$status.index(sev)
|
702
|
+
if sev_tmp == nil
|
703
|
+
sev_tmp=0
|
704
|
+
else
|
705
|
+
sev_tmp+=1
|
706
|
+
end
|
707
|
+
@syslog_monitoring[syslog_ref_name]=SyslogMonitoring.new(state, syslog_ref_name, sev_tmp)
|
708
|
+
db_add_syslog_monitoring(ip, get_node_type(), state, syslog_ref_name , sev_tmp) unless status
|
709
|
+
else
|
710
|
+
#puts "add_syslog_monitoring ", syslog_ref_name, sev
|
711
|
+
@syslog_monitoring[syslog_ref_name]=SyslogMonitoring.new(state, syslog_ref_name, sev)
|
712
|
+
db_add_syslog_monitoring(ip, get_node_type(), state, syslog_ref_name , sev) unless status
|
713
|
+
end
|
714
|
+
$syslog_refs[syslog_ref_name].add_use()
|
715
|
+
end
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
def del_syslog_monitoring(syslog_ref_name)
|
720
|
+
if @syslog_monitoring[syslog_ref_name] != nil
|
721
|
+
$syslog_refs[syslog_ref_name].del_use()
|
722
|
+
@syslog_monitoring[syslog_ref_name].delete()
|
723
|
+
end
|
724
|
+
end
|
725
|
+
|
726
|
+
def add_snmptrap_monitoring(state, snmptrap_ref_name, sev, status=nil)
|
727
|
+
if @snmptrap_monitoring[snmptrap_ref_name] == nil
|
728
|
+
if SnmpTrapRef::snmptrap_ref_exist?(snmptrap_ref_name)
|
729
|
+
if sev.class != Fixnum
|
730
|
+
sev_tmp=$status.index(sev)
|
731
|
+
if sev_tmp == nil
|
732
|
+
sev_tmp=0
|
733
|
+
else
|
734
|
+
sev_tmp+=1
|
735
|
+
end
|
736
|
+
@snmptrap_monitoring[snmptrap_ref_name]=SnmpTrapMonitoring.new(state, snmptrap_ref_name, sev_tmp)
|
737
|
+
db_add_snmptrap_monitoring(ip, get_node_type(), state, snmptrap_ref_name, sev_tmp) unless status
|
738
|
+
else
|
739
|
+
@snmptrap_monitoring[snmptrap_ref_name]=SnmpTrapMonitoring.new(state, snmptrap_ref_name, sev)
|
740
|
+
db_add_snmptrap_monitoring(ip, get_node_type(), state, snmptrap_ref_name, sev) unless status
|
741
|
+
end
|
742
|
+
$snmptrap_refs[snmptrap_ref_name].add_use()
|
743
|
+
end
|
744
|
+
end
|
745
|
+
end
|
746
|
+
|
747
|
+
def del_snmptrap_monitoring(snmptrap_ref_name)
|
748
|
+
if @snmptrap_monitoring[snmptrap_ref_name] != nil
|
749
|
+
$snmptrap_refs[snmptrap_ref_name].del_use()
|
750
|
+
@snmptrap_monitoring[snmptrap_ref_name].delete()
|
751
|
+
end
|
752
|
+
end
|
753
|
+
|
754
|
+
#
|
755
|
+
# set map for changing map of a node
|
756
|
+
#
|
757
|
+
def set_map(map)
|
758
|
+
if map != @map
|
759
|
+
if self.class == Host
|
760
|
+
$network[@map].del_host(ip)
|
761
|
+
$network[@map].update_status()
|
762
|
+
@map=map
|
763
|
+
$network[@map].add_host(self)
|
764
|
+
$network[@map].update_status()
|
765
|
+
@node_view.reparent($network[@map].map_view)
|
766
|
+
else
|
767
|
+
$network[@map].del_net(ip)
|
768
|
+
$network[@map].update_status()
|
769
|
+
@map=map
|
770
|
+
$network[@map].add_network(self)
|
771
|
+
$network[@map].update_status()
|
772
|
+
@node_view.reparent($network[@map].map_view)
|
773
|
+
end
|
774
|
+
end
|
775
|
+
end
|
776
|
+
|
777
|
+
#
|
778
|
+
# clear all accounts from the hash
|
779
|
+
#
|
780
|
+
def clear_account()
|
781
|
+
@account=Hash.new
|
782
|
+
end
|
783
|
+
|
784
|
+
#
|
785
|
+
# clear all accounts from *db*
|
786
|
+
#
|
787
|
+
def clear_db_accounts()
|
788
|
+
db_del_accounts(ip, get_node_type())
|
789
|
+
end
|
790
|
+
|
791
|
+
#
|
792
|
+
# add account in *db*
|
793
|
+
#
|
794
|
+
def add_db_account(accounts)
|
795
|
+
db_add_account(ip, get_node_type(), accounts)
|
796
|
+
end
|
797
|
+
|
798
|
+
#
|
799
|
+
# clear all services
|
800
|
+
#
|
801
|
+
def clear_service()
|
802
|
+
@service=Hash.new
|
803
|
+
db_del_services(ip, get_node_type())
|
804
|
+
end
|
805
|
+
|
806
|
+
#
|
807
|
+
# clear all wmi monitoring
|
808
|
+
#
|
809
|
+
def clear_wmi_monitoring()
|
810
|
+
@wmi_monitoring.each_value do |wmi_mon|
|
811
|
+
$wmi_refs[wmi_mon.wmiref].del_use()
|
812
|
+
end
|
813
|
+
@wmi_monitoring=Hash.new
|
814
|
+
db_del_wmi_monitoring(ip, get_node_type())
|
815
|
+
end
|
816
|
+
|
817
|
+
#
|
818
|
+
# clear all jmx monitoring
|
819
|
+
#
|
820
|
+
def clear_jmx_monitoring()
|
821
|
+
@jmx_monitoring.each_value do |jmx_mon|
|
822
|
+
$jmx_refs[jmx_mon.get_ref()].del_use()
|
823
|
+
end
|
824
|
+
@jmx_monitoring=Hash.new
|
825
|
+
db_del_jmx_monitoring(ip, get_node_type())
|
826
|
+
end
|
827
|
+
|
828
|
+
def init_jmx_from_db()
|
829
|
+
@jmx_monitoring.each_value do |jmx_mon|
|
830
|
+
$jmx_refs[jmx_mon.get_ref()].del_use()
|
831
|
+
end
|
832
|
+
@jmx_monitoring=Hash.new
|
833
|
+
db_get_jmx_monitoring(ip, get_node_type())
|
834
|
+
end
|
835
|
+
|
836
|
+
def get_node_type()
|
837
|
+
nodetype=HOSTNODE
|
838
|
+
if self.class == Network
|
839
|
+
nodetype=NETWORKNODE
|
840
|
+
end
|
841
|
+
return nodetype
|
842
|
+
end
|
843
|
+
|
844
|
+
#
|
845
|
+
# clear all snmp monitoring
|
846
|
+
#
|
847
|
+
def clear_snmp_monitoring()
|
848
|
+
@snmp_monitoring.each_value do |snmp_mon|
|
849
|
+
$oid_refs[snmp_mon.oidref].del_use()
|
850
|
+
end
|
851
|
+
@snmp_monitoring=Hash.new
|
852
|
+
db_del_snmp_monitoring(ip, get_node_type())
|
853
|
+
end
|
854
|
+
|
855
|
+
#
|
856
|
+
# clear all custom monitoring
|
857
|
+
#
|
858
|
+
def clear_custom_monitoring()
|
859
|
+
@custom_monitoring=Hash.new
|
860
|
+
db_del_custom_monitoring(ip, get_node_type())
|
861
|
+
end
|
862
|
+
|
863
|
+
#
|
864
|
+
# clear all snmptrap monitoring
|
865
|
+
#
|
866
|
+
def clear_snmptrap_monitoring()
|
867
|
+
@snmptrap_monitoring.each_value do |snmptrap_mon|
|
868
|
+
$snmptrap_refs[snmptrap_mon.get_snmptrap_ref()].del_use()
|
869
|
+
end
|
870
|
+
@snmptrap_monitoring=Hash.new
|
871
|
+
db_del_snmptrap_monitoring(ip, get_node_type())
|
872
|
+
end
|
873
|
+
|
874
|
+
#
|
875
|
+
# clear all syslog monitoring
|
876
|
+
#
|
877
|
+
def clear_syslog_monitoring()
|
878
|
+
@syslog_monitoring.each_value do |syslog_mon|
|
879
|
+
$syslog_refs[syslog_mon.get_syslog_ref()].del_use()
|
880
|
+
end
|
881
|
+
@syslog_monitoring=Hash.new
|
882
|
+
db_del_syslog_monitoring(ip, get_node_type())
|
883
|
+
end
|
884
|
+
|
885
|
+
|
886
|
+
#
|
887
|
+
# return description if different from default value
|
888
|
+
#
|
889
|
+
def description?()
|
890
|
+
return description != "(nodesc)"
|
891
|
+
end
|
892
|
+
|
893
|
+
#
|
894
|
+
# return a point corresponding to the position of the node
|
895
|
+
#
|
896
|
+
def point_pos()
|
897
|
+
return [@x, @y]
|
898
|
+
end
|
899
|
+
|
900
|
+
#
|
901
|
+
# check if a given account id already exist
|
902
|
+
#
|
903
|
+
def account_size()
|
904
|
+
return @account.size()
|
905
|
+
end
|
906
|
+
|
907
|
+
#
|
908
|
+
# get the accounts hash
|
909
|
+
#
|
910
|
+
def get_all_account()
|
911
|
+
return @account
|
912
|
+
end
|
913
|
+
|
914
|
+
#
|
915
|
+
# set the accounts hash
|
916
|
+
#
|
917
|
+
def set_all_account(haccount)
|
918
|
+
@account=haccount.dup
|
919
|
+
end
|
920
|
+
|
921
|
+
#
|
922
|
+
# set the interface hash
|
923
|
+
#
|
924
|
+
def set_all_interface(intf)
|
925
|
+
@interface=intf.dup
|
926
|
+
end
|
927
|
+
|
928
|
+
|
929
|
+
#
|
930
|
+
# init account from db
|
931
|
+
#
|
932
|
+
def init_account_from_db()
|
933
|
+
clear_account()
|
934
|
+
@account=db_get_accounts(ip, get_node_type())
|
935
|
+
end
|
936
|
+
|
937
|
+
#
|
938
|
+
# get the account idents
|
939
|
+
#
|
940
|
+
def get_account_id(id)
|
941
|
+
if account_exist_nr?(id)
|
942
|
+
return @account[id]
|
943
|
+
end
|
944
|
+
return $network[@map].get_all_account()[id]
|
945
|
+
end
|
946
|
+
|
947
|
+
#
|
948
|
+
# get the account login specify by id
|
949
|
+
#
|
950
|
+
def get_account_login(id)
|
951
|
+
return @account[id][0]
|
952
|
+
end
|
953
|
+
|
954
|
+
#
|
955
|
+
# set the account login specify by id
|
956
|
+
#
|
957
|
+
def set_account_login(id, value)
|
958
|
+
@account[id][0]=value
|
959
|
+
end
|
960
|
+
|
961
|
+
#
|
962
|
+
# get the account password specify by id
|
963
|
+
#
|
964
|
+
def get_account_password(id)
|
965
|
+
return @account[id][1]
|
966
|
+
end
|
967
|
+
|
968
|
+
#
|
969
|
+
# set the account password specify by id
|
970
|
+
#
|
971
|
+
def set_account_password(id, value)
|
972
|
+
@account[id][1]=value
|
973
|
+
end
|
974
|
+
|
975
|
+
#
|
976
|
+
# check if a given account id already exist
|
977
|
+
#
|
978
|
+
def account_exist?(id)
|
979
|
+
if !@map
|
980
|
+
return @account.has_key?(id)
|
981
|
+
end
|
982
|
+
#account can also be the account from the network
|
983
|
+
return @account.has_key?(id) || $network[@map].get_all_account().has_key?(id)
|
984
|
+
end
|
985
|
+
|
986
|
+
#
|
987
|
+
# check if a given account id already exist for the host (non recursive)
|
988
|
+
#
|
989
|
+
def account_exist_nr?(id)
|
990
|
+
return @account.has_key?(id)
|
991
|
+
end
|
992
|
+
|
993
|
+
#
|
994
|
+
# add an account
|
995
|
+
#
|
996
|
+
def add_account(id, login, passwd)
|
997
|
+
if !account_exist_nr?(id)
|
998
|
+
@account[id] = Array.new(2)
|
999
|
+
@account[id][0] = login
|
1000
|
+
@account[id][1] = passwd
|
1001
|
+
end
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
#
|
1005
|
+
# del an account
|
1006
|
+
#
|
1007
|
+
def del_account(id)
|
1008
|
+
return @account.delete(id)
|
1009
|
+
end
|
1010
|
+
|
1011
|
+
#
|
1012
|
+
# set type value property based on level
|
1013
|
+
#
|
1014
|
+
private
|
1015
|
+
def set_alert_type(type, level, value)
|
1016
|
+
@alert_type_by_level[level][$talert_type.index(type)]=value
|
1017
|
+
end
|
1018
|
+
alias ipv4 ip
|
1019
|
+
alias netmask4 netmask
|
1020
|
+
end #class
|