Extended montioring functionality
This commit is contained in:
36
monitor.py
36
monitor.py
@@ -17,15 +17,45 @@ def read_config():
|
|||||||
with open('config.yaml', 'r') as stream:
|
with open('config.yaml', 'r') as stream:
|
||||||
return yaml.safe_load(stream)
|
return yaml.safe_load(stream)
|
||||||
|
|
||||||
|
def string_to_float(data):
|
||||||
|
return float(data.strip().split(' ', 2)[0].strip())
|
||||||
|
|
||||||
|
def parse_top_string(data):
|
||||||
|
rows = data.splitlines()
|
||||||
|
|
||||||
|
load = rows[0].split('load average: ', 2)[1]
|
||||||
|
|
||||||
|
cpu_data = rows[1].split(':', 2)[1].strip().split(',')
|
||||||
|
cpu_percent = 100.0 - float(cpu_data[3].strip().split(' ', 2)[0].strip()) - float(cpu_data[7].strip().split(' ', 2)[0].strip())
|
||||||
|
if (cpu_percent < 0):
|
||||||
|
cpu_percent = 0
|
||||||
|
|
||||||
|
ram_unit, ram_data = rows[2].split(':', 2)
|
||||||
|
ram_factor = 1
|
||||||
|
if ram_unit[0] == 'K':
|
||||||
|
ram_factor = 1024
|
||||||
|
ram_data = ram_data.strip().split(',')
|
||||||
|
ram_total = float(ram_data[0].strip().split(' ', 2)[0].strip()) / ram_factor / 1024
|
||||||
|
ram_free = float(ram_data[1].strip().split(' ', 2)[0].strip()) / ram_factor / 1024
|
||||||
|
|
||||||
|
return load, cpu_percent, ram_total, ram_free
|
||||||
|
|
||||||
def update_keys(host, keys, host_length):
|
def update_keys(host, keys, host_length):
|
||||||
try:
|
try:
|
||||||
client = paramiko.SSHClient()
|
client = paramiko.SSHClient()
|
||||||
client.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
|
client.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
|
||||||
client.connect(host, username = 'root')
|
client.connect(host, username = 'root')
|
||||||
stdin, stdout, stderr = client.exec_command('uptime')
|
|
||||||
|
stdin, stdout, stderr = client.exec_command('top -bn1 | grep "^top\\|^%Cpu\\|^.iB Mem"')
|
||||||
stdin.close()
|
stdin.close()
|
||||||
print(('✅ ' + host + ': ').ljust(host_length + 5) + stdout.read().decode('utf-8').strip().split('load average: ', 2)[1])
|
|
||||||
|
data = stdout.read().decode('utf-8').strip()
|
||||||
client.close()
|
client.close()
|
||||||
|
|
||||||
|
load, cpu_percent, ram_total, ram_free = parse_top_string(data)
|
||||||
|
|
||||||
|
print(('✅ ' + host).ljust(host_length + 5) + load + ' (' + '{:3.1f}'.format(cpu_percent).rjust(5) + '%) ' + '{:3.1f}'.format(ram_total - ram_free).rjust(5) + ' / ' + '{:3.1f}'.format(ram_total).rjust(5) + ' GiB')
|
||||||
|
|
||||||
except:
|
except:
|
||||||
print('❌ ' + host)
|
print('❌ ' + host)
|
||||||
|
|
||||||
@@ -41,6 +71,8 @@ def main():
|
|||||||
for key in config['keys']:
|
for key in config['keys']:
|
||||||
keys.append(key['key'])
|
keys.append(key['key'])
|
||||||
|
|
||||||
|
print('Host'.center(host_length + 5) + ' ' + 'Load'.center(25) + ' ' + 'Ram Usage'.center(17))
|
||||||
|
|
||||||
for host in config['hosts']:
|
for host in config['hosts']:
|
||||||
try:
|
try:
|
||||||
thread = task_thread(host, keys, host_length)
|
thread = task_thread(host, keys, host_length)
|
||||||
|
|||||||
Reference in New Issue
Block a user