simple_host_monitoring 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/examples/example01.rb +60 -60
- data/lib/basehost.rb +158 -158
- data/lib/localhost.rb +62 -62
- data/lib/localhosthistory.rb +10 -10
- data/lib/remotehost.rb +10 -10
- data/lib/simple_host_monitoring.rb +76 -76
- metadata +24 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4ba993e5a93a0bd30a1f883e9dc298db9a09a886
|
4
|
+
data.tar.gz: 276a2f20a0c4aa5a9903ef5bd61951678b1d06cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a00b3474829d5eea7f35b4db9648268b62a7d7fd6d9525deffd824368a1a3c5dfef70e14efa934edaf8ac2ee03b10dfe17d71c1ebf974a31b16481f25a95d7a8
|
7
|
+
data.tar.gz: b91e7b6828fb7272806ef572819c1778c29952f63139237d02cf41bb8099149b47031c7232e3cd4b5ceace6182e301a3d7672bcbca5d2ca19e48bb50c8852938
|
data/examples/example01.rb
CHANGED
@@ -1,60 +1,60 @@
|
|
1
|
-
require_relative '../lib/simple_host_monitoring'
|
2
|
-
|
3
|
-
#
|
4
|
-
parser = BlackStack::SimpleCommandLineParser.new(
|
5
|
-
:description => 'This command will launch a SimpleHostMonitoring client that will push the status of the host every X seconds.',
|
6
|
-
:configuration => [{
|
7
|
-
:name=>'log',
|
8
|
-
:mandatory=>false,
|
9
|
-
:description=>'Write a logfile with the status of this command.',
|
10
|
-
:type=>BlackStack::SimpleCommandLineParser::BOOL,
|
11
|
-
:default=>false
|
12
|
-
},
|
13
|
-
{
|
14
|
-
:name=>'log_auto_delete',
|
15
|
-
:mandatory=>false,
|
16
|
-
:description=>'Write a logfile with the status of this command.',
|
17
|
-
:type=>BlackStack::SimpleCommandLineParser::BOOL,
|
18
|
-
:default=>true
|
19
|
-
},
|
20
|
-
{
|
21
|
-
:name=>'poll_seconds',
|
22
|
-
:mandatory=>false,
|
23
|
-
:description=>'How many delay seconds between the starting of a poll cycle and the starting of the next one.',
|
24
|
-
:type=>BlackStack::SimpleCommandLineParser::INT,
|
25
|
-
:default=>10
|
26
|
-
},
|
27
|
-
]
|
28
|
-
)
|
29
|
-
|
30
|
-
#
|
31
|
-
logger = BlackStack::LocalLoggerFactory.create('./example01.log')
|
32
|
-
|
33
|
-
#
|
34
|
-
while (true)
|
35
|
-
url = "https://euler.connectionsphere.com/api1.4/shm/update.json"
|
36
|
-
api_key = '290582D4-D00C-4D37-82AF-23043B242647'
|
37
|
-
|
38
|
-
logger.logs "Flag start time... "
|
39
|
-
start_time = Time.now
|
40
|
-
logger.done
|
41
|
-
|
42
|
-
logger.logs "Poll... "
|
43
|
-
host = BlackStack::RemoteHost.new
|
44
|
-
host.poll
|
45
|
-
logger.done
|
46
|
-
|
47
|
-
logger.logs "Flag end time... "
|
48
|
-
end_time = Time.now
|
49
|
-
logger.done
|
50
|
-
|
51
|
-
logger.logs "Push... "
|
52
|
-
host.push(api_key, url)
|
53
|
-
logger.done
|
54
|
-
|
55
|
-
logger.logs "Sleep... "
|
56
|
-
enlapsed_seconds = end_time - start_time
|
57
|
-
poll_seconds = parser.value('poll_seconds')
|
58
|
-
sleep( poll_seconds - enlapsed_seconds ) if poll_seconds > enlapsed_seconds
|
59
|
-
logger.done
|
60
|
-
end
|
1
|
+
require_relative '../lib/simple_host_monitoring'
|
2
|
+
|
3
|
+
#
|
4
|
+
parser = BlackStack::SimpleCommandLineParser.new(
|
5
|
+
:description => 'This command will launch a SimpleHostMonitoring client that will push the status of the host every X seconds.',
|
6
|
+
:configuration => [{
|
7
|
+
:name=>'log',
|
8
|
+
:mandatory=>false,
|
9
|
+
:description=>'Write a logfile with the status of this command.',
|
10
|
+
:type=>BlackStack::SimpleCommandLineParser::BOOL,
|
11
|
+
:default=>false
|
12
|
+
},
|
13
|
+
{
|
14
|
+
:name=>'log_auto_delete',
|
15
|
+
:mandatory=>false,
|
16
|
+
:description=>'Write a logfile with the status of this command.',
|
17
|
+
:type=>BlackStack::SimpleCommandLineParser::BOOL,
|
18
|
+
:default=>true
|
19
|
+
},
|
20
|
+
{
|
21
|
+
:name=>'poll_seconds',
|
22
|
+
:mandatory=>false,
|
23
|
+
:description=>'How many delay seconds between the starting of a poll cycle and the starting of the next one.',
|
24
|
+
:type=>BlackStack::SimpleCommandLineParser::INT,
|
25
|
+
:default=>10
|
26
|
+
},
|
27
|
+
]
|
28
|
+
)
|
29
|
+
|
30
|
+
#
|
31
|
+
logger = BlackStack::LocalLoggerFactory.create('./example01.log')
|
32
|
+
|
33
|
+
#
|
34
|
+
while (true)
|
35
|
+
url = "https://euler.connectionsphere.com/api1.4/shm/update.json"
|
36
|
+
api_key = '290582D4-D00C-4D37-82AF-23043B242647'
|
37
|
+
|
38
|
+
logger.logs "Flag start time... "
|
39
|
+
start_time = Time.now
|
40
|
+
logger.done
|
41
|
+
|
42
|
+
logger.logs "Poll... "
|
43
|
+
host = BlackStack::RemoteHost.new
|
44
|
+
host.poll
|
45
|
+
logger.done
|
46
|
+
|
47
|
+
logger.logs "Flag end time... "
|
48
|
+
end_time = Time.now
|
49
|
+
logger.done
|
50
|
+
|
51
|
+
logger.logs "Push... "
|
52
|
+
host.push(api_key, url)
|
53
|
+
logger.done
|
54
|
+
|
55
|
+
logger.logs "Sleep... "
|
56
|
+
enlapsed_seconds = end_time - start_time
|
57
|
+
poll_seconds = parser.value('poll_seconds')
|
58
|
+
sleep( poll_seconds - enlapsed_seconds ) if poll_seconds > enlapsed_seconds
|
59
|
+
logger.done
|
60
|
+
end
|
data/lib/basehost.rb
CHANGED
@@ -1,158 +1,158 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'sys/filesystem'
|
3
|
-
require 'sys/cpu'
|
4
|
-
require 'pp'
|
5
|
-
include Sys
|
6
|
-
|
7
|
-
module BlackStack
|
8
|
-
|
9
|
-
module BaseHost
|
10
|
-
|
11
|
-
# Map the status of this host to the attributes of the class
|
12
|
-
# Returns the hash descriptor of the object
|
13
|
-
def poll()
|
14
|
-
b_total_memory = windows_os? ? `wmic ComputerSystem get TotalPhysicalMemory`.delete('^0-9').to_i : `cat /proc/meminfo | grep MemTotal`.delete('^0-9').to_i*1024
|
15
|
-
kb_total_memory = b_total_memory / 1024
|
16
|
-
mb_total_memory = kb_total_memory / 1024
|
17
|
-
gb_total_memory = mb_total_memory / 1024
|
18
|
-
|
19
|
-
kb_free_memory = windows_os? ? `wmic OS get FreePhysicalMemory`.delete('^0-9').to_i : `cat /proc/meminfo | grep MemFree`.delete('^0-9').to_i
|
20
|
-
mb_free_memory = kb_free_memory / 1024
|
21
|
-
gb_free_memory = mb_free_memory / 1024
|
22
|
-
|
23
|
-
# getting disk free space
|
24
|
-
stat = Sys::Filesystem.stat("/")
|
25
|
-
mb_total_disk = stat.block_size * stat.blocks / 1024 / 1024
|
26
|
-
mb_free_disk = stat.block_size * stat.blocks_available / 1024 / 1024
|
27
|
-
|
28
|
-
# getting public Internet IP
|
29
|
-
#remote_ip = remoteIp()
|
30
|
-
|
31
|
-
# getting server name
|
32
|
-
hostname = Socket.gethostname
|
33
|
-
|
34
|
-
# mapping cpu status
|
35
|
-
# self.id = BlackStack::SimpleHostMonitoring::host_id
|
36
|
-
if windows_os?
|
37
|
-
self.cpu_architecture = CPU.architecture.to_s
|
38
|
-
self.cpu_speed = CPU.freq.to_i
|
39
|
-
self.cpu_load_average = CPU.load_avg.to_i
|
40
|
-
self.cpu_model = CPU.model.to_s
|
41
|
-
self.cpu_type = CPU.cpu_type.to_s
|
42
|
-
self.cpu_number = CPU.num_cpu.to_i
|
43
|
-
else
|
44
|
-
self.cpu_architecture = `lscpu | grep Architecture`.split(':')[1].strip!
|
45
|
-
self.cpu_speed = `lscpu | grep "CPU MHz:"`.split(':')[1].strip!.to_f.round
|
46
|
-
self.cpu_load_average = Sys::CPU.load_avg.to_s.to_i
|
47
|
-
self.cpu_model = `lscpu | grep "Model"`.split(':')[1].strip!
|
48
|
-
self.cpu_type = self.cpu_model.split(' ')[0]
|
49
|
-
self.cpu_number = `lscpu | grep "^CPU(s):"`.split(':')[1].strip!.to_i
|
50
|
-
end
|
51
|
-
|
52
|
-
# mapping ram status
|
53
|
-
self.mem_total = mb_total_memory.to_i
|
54
|
-
self.mem_free = mb_free_memory.to_i
|
55
|
-
|
56
|
-
# mapping disk status
|
57
|
-
self.disk_total = mb_total_disk.to_i
|
58
|
-
self.disk_free = mb_free_disk.to_i
|
59
|
-
|
60
|
-
# mapping lan attributes
|
61
|
-
self.net_hostname = hostname
|
62
|
-
#self.net_remote_ip = remote_ip.to_s
|
63
|
-
self.net_mac_address = BlackStack::SimpleHostMonitoring.macaddress
|
64
|
-
|
65
|
-
self.to_hash
|
66
|
-
end
|
67
|
-
|
68
|
-
#
|
69
|
-
def to_hash
|
70
|
-
{
|
71
|
-
# :id => self.id,
|
72
|
-
:cpu_architecture => self.cpu_architecture,
|
73
|
-
:cpu_speed => self.cpu_speed,
|
74
|
-
:cpu_load_average => self.cpu_load_average,
|
75
|
-
:cpu_model => self.cpu_model,
|
76
|
-
:cpu_type => self.cpu_type,
|
77
|
-
:cpu_number => self.cpu_number,
|
78
|
-
:mem_total => self.mem_total,
|
79
|
-
:mem_free => self.mem_free,
|
80
|
-
:disk_total => self.disk_total,
|
81
|
-
:disk_free => self.disk_free,
|
82
|
-
:net_hostname => self.net_hostname,
|
83
|
-
#:net_remote_ip => self.net_remote_ip,
|
84
|
-
:net_mac_address => self.net_mac_address
|
85
|
-
}
|
86
|
-
end
|
87
|
-
|
88
|
-
#
|
89
|
-
def self.valid_descriptor?(h)
|
90
|
-
return false if !h.is_a?(Hash)
|
91
|
-
# return false if !h[:id].to_s.guid?
|
92
|
-
return false if h[:cpu_architecture].to_s.size==0
|
93
|
-
return false if !h[:cpu_speed].to_s.fixnum?
|
94
|
-
return false if !h[:cpu_load_average].to_s.fixnum?
|
95
|
-
return false if h[:cpu_model].to_s.size==0
|
96
|
-
return false if h[:cpu_type].to_s.size==0
|
97
|
-
return false if !h[:cpu_number].to_s.fixnum?
|
98
|
-
return false if !h[:mem_total].to_s.fixnum?
|
99
|
-
return false if !h[:mem_free].to_s.fixnum?
|
100
|
-
return false if !h[:disk_total].to_s.fixnum?
|
101
|
-
return false if !h[:disk_free].to_s.fixnum?
|
102
|
-
return false if h[:net_hostname].to_s.size==0
|
103
|
-
#return false if h[:net_remote_ip].to_s.size==0
|
104
|
-
return false if h[:net_mac_address].to_s.size==0
|
105
|
-
true
|
106
|
-
end
|
107
|
-
|
108
|
-
#
|
109
|
-
def self.descriptor_validation_details(h)
|
110
|
-
s = ''
|
111
|
-
s += 'Wrong descriptor format. ' if !h.is_a?(Hash)
|
112
|
-
# s += 'Invalid id. ' if !h[:id].to_s.guid?
|
113
|
-
s += 'Invalid cpu_architecture. ' if h[:cpu_architecture].to_s.size==0
|
114
|
-
s += 'Invalid cpu_speed. ' if !h[:cpu_speed].to_s.fixnum?
|
115
|
-
s += 'Invalid cpu_load_average. ' if !h[:cpu_load_average].to_s.fixnum?
|
116
|
-
s += 'Invalid cpu_model. ' if h[:cpu_model].to_s.size==0
|
117
|
-
s += 'Invalid cpu_type. ' if h[:cpu_type].to_s.size==0
|
118
|
-
s += 'Invalid cpu_number. ' if !h[:cpu_number].to_s.fixnum?
|
119
|
-
s += 'Invalid mem_total. ' if !h[:mem_total].to_s.fixnum?
|
120
|
-
s += 'Invalid mem_free. ' if !h[:mem_free].to_s.fixnum?
|
121
|
-
s += 'Invalid disk_total. ' if !h[:disk_total].to_s.fixnum?
|
122
|
-
s += 'Invalid disk_free. ' if !h[:disk_free].to_s.fixnum?
|
123
|
-
s += 'Invalid net_hostname. ' if h[:net_hostname].to_s.size==0
|
124
|
-
#s += 'Invalid :net_remote_ip. ' if h[:net_remote_ip].to_s.size==0
|
125
|
-
s += 'Invalid net_mac_address. ' if h[:net_mac_address].to_s.size==0
|
126
|
-
s
|
127
|
-
end
|
128
|
-
|
129
|
-
#
|
130
|
-
def parse(h)
|
131
|
-
# self.id = h[:id]
|
132
|
-
self.cpu_architecture = h[:cpu_architecture]
|
133
|
-
self.cpu_speed = h[:cpu_speed]
|
134
|
-
self.cpu_load_average = h[:cpu_load_average]
|
135
|
-
self.cpu_model = h[:cpu_model]
|
136
|
-
self.cpu_type = h[:cpu_type]
|
137
|
-
self.cpu_number = h[:cpu_number]
|
138
|
-
self.mem_total = h[:mem_total]
|
139
|
-
self.mem_free = h[:mem_free]
|
140
|
-
self.disk_total = h[:disk_total]
|
141
|
-
self.disk_free = h[:disk_free]
|
142
|
-
self.net_hostname = h[:net_hostname]
|
143
|
-
#self.net_remote_ip = h[:net_remote_ip]
|
144
|
-
self.net_mac_address = h[:net_mac_address]
|
145
|
-
end
|
146
|
-
|
147
|
-
#
|
148
|
-
def push(api_key, url)
|
149
|
-
BlackStack::Netting::api_call( url, {:api_key => api_key}.merge(self.to_hash) )
|
150
|
-
end
|
151
|
-
|
152
|
-
def windows_os?
|
153
|
-
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
154
|
-
end
|
155
|
-
|
156
|
-
end # module BaseHost
|
157
|
-
|
158
|
-
end # module BlackStack
|
1
|
+
require 'open-uri'
|
2
|
+
require 'sys/filesystem'
|
3
|
+
require 'sys/cpu'
|
4
|
+
require 'pp'
|
5
|
+
include Sys
|
6
|
+
|
7
|
+
module BlackStack
|
8
|
+
|
9
|
+
module BaseHost
|
10
|
+
|
11
|
+
# Map the status of this host to the attributes of the class
|
12
|
+
# Returns the hash descriptor of the object
|
13
|
+
def poll()
|
14
|
+
b_total_memory = windows_os? ? `wmic ComputerSystem get TotalPhysicalMemory`.delete('^0-9').to_i : `cat /proc/meminfo | grep MemTotal`.delete('^0-9').to_i*1024
|
15
|
+
kb_total_memory = b_total_memory / 1024
|
16
|
+
mb_total_memory = kb_total_memory / 1024
|
17
|
+
gb_total_memory = mb_total_memory / 1024
|
18
|
+
|
19
|
+
kb_free_memory = windows_os? ? `wmic OS get FreePhysicalMemory`.delete('^0-9').to_i : `cat /proc/meminfo | grep MemFree`.delete('^0-9').to_i
|
20
|
+
mb_free_memory = kb_free_memory / 1024
|
21
|
+
gb_free_memory = mb_free_memory / 1024
|
22
|
+
|
23
|
+
# getting disk free space
|
24
|
+
stat = Sys::Filesystem.stat("/")
|
25
|
+
mb_total_disk = stat.block_size * stat.blocks / 1024 / 1024
|
26
|
+
mb_free_disk = stat.block_size * stat.blocks_available / 1024 / 1024
|
27
|
+
|
28
|
+
# getting public Internet IP
|
29
|
+
#remote_ip = remoteIp()
|
30
|
+
|
31
|
+
# getting server name
|
32
|
+
hostname = Socket.gethostname
|
33
|
+
|
34
|
+
# mapping cpu status
|
35
|
+
# self.id = BlackStack::SimpleHostMonitoring::host_id
|
36
|
+
if windows_os?
|
37
|
+
self.cpu_architecture = CPU.architecture.to_s
|
38
|
+
self.cpu_speed = CPU.freq.to_i
|
39
|
+
self.cpu_load_average = CPU.load_avg.to_i
|
40
|
+
self.cpu_model = CPU.model.to_s
|
41
|
+
self.cpu_type = CPU.cpu_type.to_s
|
42
|
+
self.cpu_number = CPU.num_cpu.to_i
|
43
|
+
else
|
44
|
+
self.cpu_architecture = `lscpu | grep Architecture`.split(':')[1].strip!
|
45
|
+
self.cpu_speed = `lscpu | grep "CPU MHz:"`.split(':')[1].strip!.to_f.round
|
46
|
+
self.cpu_load_average = Sys::CPU.load_avg.to_s.to_i
|
47
|
+
self.cpu_model = `lscpu | grep "Model"`.split(':')[1].strip!
|
48
|
+
self.cpu_type = self.cpu_model.split(' ')[0]
|
49
|
+
self.cpu_number = `lscpu | grep "^CPU(s):"`.split(':')[1].strip!.to_i
|
50
|
+
end
|
51
|
+
|
52
|
+
# mapping ram status
|
53
|
+
self.mem_total = mb_total_memory.to_i
|
54
|
+
self.mem_free = mb_free_memory.to_i
|
55
|
+
|
56
|
+
# mapping disk status
|
57
|
+
self.disk_total = mb_total_disk.to_i
|
58
|
+
self.disk_free = mb_free_disk.to_i
|
59
|
+
|
60
|
+
# mapping lan attributes
|
61
|
+
self.net_hostname = hostname
|
62
|
+
#self.net_remote_ip = remote_ip.to_s
|
63
|
+
self.net_mac_address = BlackStack::SimpleHostMonitoring.macaddress
|
64
|
+
|
65
|
+
self.to_hash
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
def to_hash
|
70
|
+
{
|
71
|
+
# :id => self.id,
|
72
|
+
:cpu_architecture => self.cpu_architecture,
|
73
|
+
:cpu_speed => self.cpu_speed,
|
74
|
+
:cpu_load_average => self.cpu_load_average,
|
75
|
+
:cpu_model => self.cpu_model,
|
76
|
+
:cpu_type => self.cpu_type,
|
77
|
+
:cpu_number => self.cpu_number,
|
78
|
+
:mem_total => self.mem_total,
|
79
|
+
:mem_free => self.mem_free,
|
80
|
+
:disk_total => self.disk_total,
|
81
|
+
:disk_free => self.disk_free,
|
82
|
+
:net_hostname => self.net_hostname,
|
83
|
+
#:net_remote_ip => self.net_remote_ip,
|
84
|
+
:net_mac_address => self.net_mac_address
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
#
|
89
|
+
def self.valid_descriptor?(h)
|
90
|
+
return false if !h.is_a?(Hash)
|
91
|
+
# return false if !h[:id].to_s.guid?
|
92
|
+
return false if h[:cpu_architecture].to_s.size==0
|
93
|
+
return false if !h[:cpu_speed].to_s.fixnum?
|
94
|
+
return false if !h[:cpu_load_average].to_s.fixnum?
|
95
|
+
return false if h[:cpu_model].to_s.size==0
|
96
|
+
return false if h[:cpu_type].to_s.size==0
|
97
|
+
return false if !h[:cpu_number].to_s.fixnum?
|
98
|
+
return false if !h[:mem_total].to_s.fixnum?
|
99
|
+
return false if !h[:mem_free].to_s.fixnum?
|
100
|
+
return false if !h[:disk_total].to_s.fixnum?
|
101
|
+
return false if !h[:disk_free].to_s.fixnum?
|
102
|
+
return false if h[:net_hostname].to_s.size==0
|
103
|
+
#return false if h[:net_remote_ip].to_s.size==0
|
104
|
+
return false if h[:net_mac_address].to_s.size==0
|
105
|
+
true
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
def self.descriptor_validation_details(h)
|
110
|
+
s = ''
|
111
|
+
s += 'Wrong descriptor format. ' if !h.is_a?(Hash)
|
112
|
+
# s += 'Invalid id. ' if !h[:id].to_s.guid?
|
113
|
+
s += 'Invalid cpu_architecture. ' if h[:cpu_architecture].to_s.size==0
|
114
|
+
s += 'Invalid cpu_speed. ' if !h[:cpu_speed].to_s.fixnum?
|
115
|
+
s += 'Invalid cpu_load_average. ' if !h[:cpu_load_average].to_s.fixnum?
|
116
|
+
s += 'Invalid cpu_model. ' if h[:cpu_model].to_s.size==0
|
117
|
+
s += 'Invalid cpu_type. ' if h[:cpu_type].to_s.size==0
|
118
|
+
s += 'Invalid cpu_number. ' if !h[:cpu_number].to_s.fixnum?
|
119
|
+
s += 'Invalid mem_total. ' if !h[:mem_total].to_s.fixnum?
|
120
|
+
s += 'Invalid mem_free. ' if !h[:mem_free].to_s.fixnum?
|
121
|
+
s += 'Invalid disk_total. ' if !h[:disk_total].to_s.fixnum?
|
122
|
+
s += 'Invalid disk_free. ' if !h[:disk_free].to_s.fixnum?
|
123
|
+
s += 'Invalid net_hostname. ' if h[:net_hostname].to_s.size==0
|
124
|
+
#s += 'Invalid :net_remote_ip. ' if h[:net_remote_ip].to_s.size==0
|
125
|
+
s += 'Invalid net_mac_address. ' if h[:net_mac_address].to_s.size==0
|
126
|
+
s
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
def parse(h)
|
131
|
+
# self.id = h[:id]
|
132
|
+
self.cpu_architecture = h[:cpu_architecture]
|
133
|
+
self.cpu_speed = h[:cpu_speed]
|
134
|
+
self.cpu_load_average = h[:cpu_load_average]
|
135
|
+
self.cpu_model = h[:cpu_model]
|
136
|
+
self.cpu_type = h[:cpu_type]
|
137
|
+
self.cpu_number = h[:cpu_number]
|
138
|
+
self.mem_total = h[:mem_total]
|
139
|
+
self.mem_free = h[:mem_free]
|
140
|
+
self.disk_total = h[:disk_total]
|
141
|
+
self.disk_free = h[:disk_free]
|
142
|
+
self.net_hostname = h[:net_hostname]
|
143
|
+
#self.net_remote_ip = h[:net_remote_ip]
|
144
|
+
self.net_mac_address = h[:net_mac_address]
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
def push(api_key, url)
|
149
|
+
BlackStack::Netting::api_call( url, {:api_key => api_key}.merge(self.to_hash) )
|
150
|
+
end
|
151
|
+
|
152
|
+
def windows_os?
|
153
|
+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
154
|
+
end
|
155
|
+
|
156
|
+
end # module BaseHost
|
157
|
+
|
158
|
+
end # module BlackStack
|
data/lib/localhost.rb
CHANGED
@@ -1,62 +1,62 @@
|
|
1
|
-
require_relative './basehost'
|
2
|
-
require_relative './localhosthistory'
|
3
|
-
|
4
|
-
module BlackStack
|
5
|
-
|
6
|
-
class LocalHost < Sequel::Model(:host)
|
7
|
-
include BaseHost
|
8
|
-
LocalHost.dataset = LocalHost.dataset.disable_insert_output
|
9
|
-
|
10
|
-
#
|
11
|
-
def parse(h)
|
12
|
-
#self.id = h[:id]
|
13
|
-
self.cpu_architecture = h[:cpu_architecture]
|
14
|
-
self.cpu_speed = h[:cpu_speed]
|
15
|
-
self.cpu_load_average = h[:cpu_load_average]
|
16
|
-
self.cpu_model = h[:cpu_model]
|
17
|
-
self.cpu_type = h[:cpu_type]
|
18
|
-
self.cpu_number = h[:cpu_number]
|
19
|
-
self.mem_total = h[:mem_total]
|
20
|
-
self.mem_free = h[:mem_free]
|
21
|
-
self.disk_total = h[:disk_total]
|
22
|
-
self.disk_free = h[:disk_free]
|
23
|
-
self.net_hostname = h[:net_hostname]
|
24
|
-
#self.net_remote_ip = h[:net_remote_ip]
|
25
|
-
self.net_mac_address = h[:net_mac_address]
|
26
|
-
end
|
27
|
-
|
28
|
-
#
|
29
|
-
def track
|
30
|
-
h = LocalHostHistory.new
|
31
|
-
h.id = guid()
|
32
|
-
h.id_host = self.id
|
33
|
-
h.create_time = now()
|
34
|
-
h.cpu_architecture = self.cpu_architecture
|
35
|
-
h.cpu_speed = self.cpu_speed
|
36
|
-
h.cpu_load_average = self.cpu_load_average
|
37
|
-
h.cpu_model = self.cpu_model
|
38
|
-
h.cpu_type = self.cpu_type
|
39
|
-
h.cpu_number = self.cpu_number
|
40
|
-
h.mem_total = self.mem_total
|
41
|
-
h.mem_free = self.mem_free
|
42
|
-
h.disk_total = self.disk_total
|
43
|
-
h.disk_free = self.disk_free
|
44
|
-
h.net_hostname = self.net_hostname
|
45
|
-
h.net_remote_ip = self.net_remote_ip
|
46
|
-
h.net_mac_address = self.net_mac_address
|
47
|
-
h.save
|
48
|
-
end
|
49
|
-
|
50
|
-
#
|
51
|
-
def mem_load
|
52
|
-
100.to_f*(self.mem_total.to_f - self.mem_free.to_f) / self.mem_total.to_f
|
53
|
-
end
|
54
|
-
|
55
|
-
#
|
56
|
-
def disk_load
|
57
|
-
100.to_f*(self.disk_total.to_f - self.disk_free.to_f) / self.disk_total.to_f
|
58
|
-
end
|
59
|
-
|
60
|
-
end # class LocalHost
|
61
|
-
|
62
|
-
end # module BlackStack
|
1
|
+
require_relative './basehost'
|
2
|
+
require_relative './localhosthistory'
|
3
|
+
|
4
|
+
module BlackStack
|
5
|
+
|
6
|
+
class LocalHost < Sequel::Model(:host)
|
7
|
+
include BaseHost
|
8
|
+
LocalHost.dataset = LocalHost.dataset.disable_insert_output
|
9
|
+
|
10
|
+
#
|
11
|
+
def parse(h)
|
12
|
+
#self.id = h[:id]
|
13
|
+
self.cpu_architecture = h[:cpu_architecture]
|
14
|
+
self.cpu_speed = h[:cpu_speed]
|
15
|
+
self.cpu_load_average = h[:cpu_load_average]
|
16
|
+
self.cpu_model = h[:cpu_model]
|
17
|
+
self.cpu_type = h[:cpu_type]
|
18
|
+
self.cpu_number = h[:cpu_number]
|
19
|
+
self.mem_total = h[:mem_total]
|
20
|
+
self.mem_free = h[:mem_free]
|
21
|
+
self.disk_total = h[:disk_total]
|
22
|
+
self.disk_free = h[:disk_free]
|
23
|
+
self.net_hostname = h[:net_hostname]
|
24
|
+
#self.net_remote_ip = h[:net_remote_ip]
|
25
|
+
self.net_mac_address = h[:net_mac_address]
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
def track
|
30
|
+
h = LocalHostHistory.new
|
31
|
+
h.id = guid()
|
32
|
+
h.id_host = self.id
|
33
|
+
h.create_time = now()
|
34
|
+
h.cpu_architecture = self.cpu_architecture
|
35
|
+
h.cpu_speed = self.cpu_speed
|
36
|
+
h.cpu_load_average = self.cpu_load_average
|
37
|
+
h.cpu_model = self.cpu_model
|
38
|
+
h.cpu_type = self.cpu_type
|
39
|
+
h.cpu_number = self.cpu_number
|
40
|
+
h.mem_total = self.mem_total
|
41
|
+
h.mem_free = self.mem_free
|
42
|
+
h.disk_total = self.disk_total
|
43
|
+
h.disk_free = self.disk_free
|
44
|
+
h.net_hostname = self.net_hostname
|
45
|
+
h.net_remote_ip = self.net_remote_ip
|
46
|
+
h.net_mac_address = self.net_mac_address
|
47
|
+
h.save
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
def mem_load
|
52
|
+
100.to_f*(self.mem_total.to_f - self.mem_free.to_f) / self.mem_total.to_f
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
def disk_load
|
57
|
+
100.to_f*(self.disk_total.to_f - self.disk_free.to_f) / self.disk_total.to_f
|
58
|
+
end
|
59
|
+
|
60
|
+
end # class LocalHost
|
61
|
+
|
62
|
+
end # module BlackStack
|
data/lib/localhosthistory.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require_relative './basehost'
|
2
|
-
|
3
|
-
module BlackStack
|
4
|
-
|
5
|
-
class LocalHostHistory < Sequel::Model(:hosthistory)
|
6
|
-
LocalHostHistory.dataset = LocalHostHistory.dataset.disable_insert_output
|
7
|
-
|
8
|
-
end # class LocalHostHistory
|
9
|
-
|
10
|
-
end # module BlackStack
|
1
|
+
require_relative './basehost'
|
2
|
+
|
3
|
+
module BlackStack
|
4
|
+
|
5
|
+
class LocalHostHistory < Sequel::Model(:hosthistory)
|
6
|
+
LocalHostHistory.dataset = LocalHostHistory.dataset.disable_insert_output
|
7
|
+
|
8
|
+
end # class LocalHostHistory
|
9
|
+
|
10
|
+
end # module BlackStack
|
data/lib/remotehost.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require_relative './basehost'
|
2
|
-
|
3
|
-
module BlackStack
|
4
|
-
|
5
|
-
class RemoteHost
|
6
|
-
attr_accessor :cpu_architecture, :cpu_speed, :cpu_load_average, :cpu_model, :cpu_type, :cpu_number, :mem_total, :mem_free, :disk_total, :disk_free, :net_hostname, :net_remote_ip, :net_mac_address
|
7
|
-
include BaseHost
|
8
|
-
end # class RemoteHost
|
9
|
-
|
10
|
-
end # module BlackStack
|
1
|
+
require_relative './basehost'
|
2
|
+
|
3
|
+
module BlackStack
|
4
|
+
|
5
|
+
class RemoteHost
|
6
|
+
attr_accessor :cpu_architecture, :cpu_speed, :cpu_load_average, :cpu_model, :cpu_type, :cpu_number, :mem_total, :mem_free, :disk_total, :disk_free, :net_hostname, :net_remote_ip, :net_mac_address
|
7
|
+
include BaseHost
|
8
|
+
end # class RemoteHost
|
9
|
+
|
10
|
+
end # module BlackStack
|
@@ -1,76 +1,76 @@
|
|
1
|
-
require 'simple_command_line_parser'
|
2
|
-
require 'simple_cloud_logging'
|
3
|
-
|
4
|
-
require 'socket'
|
5
|
-
require 'time'
|
6
|
-
require 'uri'
|
7
|
-
require 'net/http'
|
8
|
-
require 'json'
|
9
|
-
require 'openssl'
|
10
|
-
require 'tiny_tds'
|
11
|
-
require 'sequel'
|
12
|
-
|
13
|
-
require_relative './basehost'
|
14
|
-
require_relative './remotehost'
|
15
|
-
#require_relative './localhost'
|
16
|
-
|
17
|
-
module BlackStack
|
18
|
-
|
19
|
-
module SimpleHostMonitoring
|
20
|
-
|
21
|
-
# get the unique host id from the file ./host_id.data
|
22
|
-
# if the file does not exists, it will ask the API for a GUID and create the file
|
23
|
-
HOST_ID_FILENAME = './host_id.data'
|
24
|
-
|
25
|
-
=begin # derepcated
|
26
|
-
@@host_id = nil
|
27
|
-
def self.reset_host_id
|
28
|
-
@@host_id = BlackStack::Pampa::get_guid
|
29
|
-
File.open(HOST_ID_FILENAME, 'w') {|f| f.write(@@host_id) }
|
30
|
-
@@host_id
|
31
|
-
end
|
32
|
-
def self.host_id
|
33
|
-
if @@host_id.nil?
|
34
|
-
if File.file?(HOST_ID_FILENAME)
|
35
|
-
@@host_id = File.read(HOST_ID_FILENAME)
|
36
|
-
else
|
37
|
-
@@host_id = self.reset_host_id
|
38
|
-
end
|
39
|
-
end # !@@host_id.nil?
|
40
|
-
@@host_id = self.reset_host_id if !@@host_id.guid?
|
41
|
-
@@host_id
|
42
|
-
end
|
43
|
-
=end
|
44
|
-
# This function works in windows only
|
45
|
-
# TODO: Esta funcion no retorna la mac address completa
|
46
|
-
# TODO: Validar que no se retorne una macaddress virtual, con todos valores en 0
|
47
|
-
def self.macaddress()
|
48
|
-
return `cat /sys/class/net/eth0/address`.upcase.strip.gsub(':', '-') unless BlackStack::RemoteHost.new.windows_os?
|
49
|
-
|
50
|
-
s = `ipconfig /all`
|
51
|
-
|
52
|
-
# The standard (IEEE 802) format for printing MAC-48
|
53
|
-
# => addresses in human-friendly form is six groups
|
54
|
-
# => of two hexadecimal digits, separated by hyphens
|
55
|
-
# => - or colons :
|
56
|
-
v = s.scan(/(([A-F0-9]{2}\-){5})([A-F0-9]{2}$)/im)
|
57
|
-
|
58
|
-
if (v.size>0)
|
59
|
-
return v.first.join.to_s
|
60
|
-
else
|
61
|
-
return nil
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
#
|
66
|
-
def self.require_db_classes()
|
67
|
-
# You have to load all the Sinatra classes after connect the database.
|
68
|
-
require_relative '../lib/localhost.rb'
|
69
|
-
require_relative '../lib/localhosthistory.rb'
|
70
|
-
end
|
71
|
-
|
72
|
-
end # module SimpleHostMonitoring
|
73
|
-
|
74
|
-
end # module BlackStack
|
75
|
-
|
76
|
-
|
1
|
+
require 'simple_command_line_parser'
|
2
|
+
require 'simple_cloud_logging'
|
3
|
+
|
4
|
+
require 'socket'
|
5
|
+
require 'time'
|
6
|
+
require 'uri'
|
7
|
+
require 'net/http'
|
8
|
+
require 'json'
|
9
|
+
require 'openssl'
|
10
|
+
require 'tiny_tds'
|
11
|
+
require 'sequel'
|
12
|
+
|
13
|
+
require_relative './basehost'
|
14
|
+
require_relative './remotehost'
|
15
|
+
#require_relative './localhost'
|
16
|
+
|
17
|
+
module BlackStack
|
18
|
+
|
19
|
+
module SimpleHostMonitoring
|
20
|
+
|
21
|
+
# get the unique host id from the file ./host_id.data
|
22
|
+
# if the file does not exists, it will ask the API for a GUID and create the file
|
23
|
+
HOST_ID_FILENAME = './host_id.data'
|
24
|
+
|
25
|
+
=begin # derepcated
|
26
|
+
@@host_id = nil
|
27
|
+
def self.reset_host_id
|
28
|
+
@@host_id = BlackStack::Pampa::get_guid
|
29
|
+
File.open(HOST_ID_FILENAME, 'w') {|f| f.write(@@host_id) }
|
30
|
+
@@host_id
|
31
|
+
end
|
32
|
+
def self.host_id
|
33
|
+
if @@host_id.nil?
|
34
|
+
if File.file?(HOST_ID_FILENAME)
|
35
|
+
@@host_id = File.read(HOST_ID_FILENAME)
|
36
|
+
else
|
37
|
+
@@host_id = self.reset_host_id
|
38
|
+
end
|
39
|
+
end # !@@host_id.nil?
|
40
|
+
@@host_id = self.reset_host_id if !@@host_id.guid?
|
41
|
+
@@host_id
|
42
|
+
end
|
43
|
+
=end
|
44
|
+
# This function works in windows only
|
45
|
+
# TODO: Esta funcion no retorna la mac address completa
|
46
|
+
# TODO: Validar que no se retorne una macaddress virtual, con todos valores en 0
|
47
|
+
def self.macaddress()
|
48
|
+
return `cat /sys/class/net/eth0/address`.upcase.strip.gsub(':', '-') unless BlackStack::RemoteHost.new.windows_os?
|
49
|
+
|
50
|
+
s = `ipconfig /all`
|
51
|
+
|
52
|
+
# The standard (IEEE 802) format for printing MAC-48
|
53
|
+
# => addresses in human-friendly form is six groups
|
54
|
+
# => of two hexadecimal digits, separated by hyphens
|
55
|
+
# => - or colons :
|
56
|
+
v = s.scan(/(([A-F0-9]{2}\-){5})([A-F0-9]{2}$)/im)
|
57
|
+
|
58
|
+
if (v.size>0)
|
59
|
+
return v.first.join.to_s
|
60
|
+
else
|
61
|
+
return nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
def self.require_db_classes()
|
67
|
+
# You have to load all the Sinatra classes after connect the database.
|
68
|
+
require_relative '../lib/localhost.rb'
|
69
|
+
require_relative '../lib/localhosthistory.rb'
|
70
|
+
end
|
71
|
+
|
72
|
+
end # module SimpleHostMonitoring
|
73
|
+
|
74
|
+
end # module BlackStack
|
75
|
+
|
76
|
+
|
metadata
CHANGED
@@ -1,53 +1,53 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_host_monitoring
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Daniel Sardi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.2.8
|
20
|
-
- - "
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.2.8
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 1.2.8
|
30
|
-
- - "
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.2.8
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: json
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 1.8.1
|
40
|
-
- - "
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 1.8.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 1.8.1
|
50
|
-
- - "
|
50
|
+
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.8.1
|
53
53
|
- !ruby/object:Gem::Dependency
|
@@ -68,60 +68,60 @@ dependencies:
|
|
68
68
|
name: sequel
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- - "
|
71
|
+
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 4.28.0
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 4.28.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 4.28.0
|
84
|
-
- - "
|
84
|
+
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 4.28.0
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: simple_command_line_parser
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
|
-
- - "
|
91
|
+
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 1.1.2
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.1.2
|
97
97
|
type: :runtime
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 1.1.2
|
104
|
-
- - "
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: 1.1.2
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
108
|
name: simple_cloud_logging
|
109
109
|
requirement: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- - "
|
111
|
+
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: 1.1.23
|
114
|
-
- - "
|
114
|
+
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 1.1.23
|
117
117
|
type: :runtime
|
118
118
|
prerelease: false
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
|
-
- - "
|
121
|
+
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: 1.1.23
|
124
|
-
- - "
|
124
|
+
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 1.1.23
|
127
127
|
description: 'THIS GEM IS STILL IN DEVELOPMENT STAGE. Find documentation here: https://github.com/leandrosardi/simple_host_monitoring.'
|
@@ -155,7 +155,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
- !ruby/object:Gem::Version
|
156
156
|
version: '0'
|
157
157
|
requirements: []
|
158
|
-
|
158
|
+
rubyforge_project:
|
159
|
+
rubygems_version: 2.4.5.1
|
159
160
|
signing_key:
|
160
161
|
specification_version: 4
|
161
162
|
summary: THIS GEM IS STILL IN DEVELOPMENT STAGE. Track memory, CPU and disk space
|