From 25045cf072b4b8fdc64272bec59610ae8d9a709d Mon Sep 17 00:00:00 2001 From: son tran Date: Mon, 6 Feb 2023 14:09:25 +0700 Subject: [PATCH] monitor server onpremise --- run.py | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 run.py diff --git a/run.py b/run.py new file mode 100644 index 0000000..aa43ae7 --- /dev/null +++ b/run.py @@ -0,0 +1,162 @@ +import os +import re +from time import sleep +from datetime import datetime +import time +import requests +import json +# import schedule + +bot_token_gr = "1072981445:AAGR5pcUbHI7acIvcRQWRTAmCIMPG4dacn4" +bot_chatID_gr = "-329625622" +bot_token_SOnTV = "1915371572:AAElb2Ea3ZzAoZvOM2B8DrjmtCtANtMppt0" +bot_chatID_SOnTV = "763038225" +name_server = 'Server Richy' +service = 'docker' +now = datetime.now() +current_time = now.strftime("%H:%M:%S") +memUsed = 0 +def check_stt_service(): + status = os.popen('sudo service' + ' ' + service + ' ' + 'status | grep running | wc -l') + stt = status.read() + return stt + +def monitor_docker(): + lines = readfile() + status_service = check_stt_service().split("\n")[0] + print('Service docker status = ' + status_service) + if status_service == '1': + for line in lines: + print(line.strip()) + l = line.strip().split('_') + lts = ''.join([str(e) for e in l]) + # o = os.popen('docker inspect' + ' ' + line.strip()) + try: + o = os.popen('sudo docker inspect' + ' ' + line.strip()) + data = json.loads(o.read()) + # print(data) + try: + stt = data[0]['State']['Health']['Status'] + # print(stt) + if stt == 'healthy': + print('docker inspect service ' + line.strip() + ' = ' + stt) + pass + else: + print('docker inspect service ' + line.strip() + ' = ' + stt) + telegram_bot_sendtext(name_server + ' ' + ' container' + ' ' + lts + ' ' + stt) + except: + stt = data[0]['State']['Status'] + # print(stt) + if stt == 'running': + print(stt) + pass + else: + print('docker inspect service ' + line.strip() + ' = ' + stt) + # print('---------------------') + telegram_bot_sendtext(name_server + ' container' + ' ' + lts + ' ' + stt) + except: + print('Do not inspect service ' + line.strip()) + telegram_bot_sendtext(name_server + ' ' + ' container' + ' ' + lts + ' ' + ' not inspect') + else: + print(status_service) + telegram_bot_sendtext(name_server + ' service ' + service + ' status dead. Turn on now!!!') + + +def get_memory(): + t = time.localtime() + dtime = (str(t.tm_hour) + ':' + str(t.tm_min) + ':' + str(t.tm_sec) + ' ' + str(t.tm_mday) + '/' + str(t.tm_mon) + '/' + str(t.tm_year)) + hournow = t.tm_hour + cmd = 'cat /proc/meminfo' + i = os.popen(cmd).read() + mem = i.split() + memTotal = float(mem[1]) + memAvailable = float(mem[7]) + memUsed = round((memTotal - memAvailable) * 100 / memTotal) + swapTotal = float(mem[43]) + swapFree = float(mem[46]) + swapUsed = round((swapTotal-swapFree) * 100 /swapTotal) + if memUsed >= 80: + print(str(dtime) + ' ' + 'Memory used: ', memUsed, '%') + # telegram_bot_sendtext(name_server + ' ' + ' memory used:' + ' ' + str(memUsed)) + if hournow in range(1,5): + print(hournow) + print("Send message to telegram!!!") + telegram_bot_sendtext(name_server + ' ' + ' % Memory used:' + ' ' + str(memUsed) + ' . reboot server') + # os.system('sudo reboot') + else: + print("Send message to telegram!!!") + telegram_bot_sendtext(name_server + ' ' + ' % Memory used:' + ' ' + str(memUsed)) + else: + print(str(dtime) + ' ' + 'Memory used: ', memUsed, '%') + if swapUsed >= 80: + print(str(dtime) + ' ' + 'Swap used: ', swapUsed, '%') + telegram_bot_sendtext(name_server + ' ' + ' % Swap used:' + ' ' + str(swapUsed)) + else: + print(str(dtime) + ' ' + 'Swap used: ', swapUsed, '%') + return memUsed, swapUsed + +def get_cpu(): + t = time.localtime() + dtime = (str(t.tm_hour) + ':' + str(t.tm_min) + ':' + str(t.tm_sec) + ' ' + str(t.tm_mday) + '/' + str(t.tm_mon) + '/' + str(t.tm_year)) + cmd = 'grep "cpu " /proc/stat' + output = os.popen(cmd) + cpu = output.read().strip().split(' ') + user = float(cpu[2]) + system = float(cpu[4]) + idle = float(cpu[5]) + cpu_used = round((user + system)*100 / (user + system + idle), 1) + if cpu_used >= 80: + print(str(dtime) + ' ' + 'CPU used: ', cpu_used, '%') + telegram_bot_sendtext(name_server + ' ' + 'CPU used:' + ' ' + str(cpu_used)) + else: + print(str(dtime) + ' ' + 'CPU used: ', cpu_used, '%') + pass + +def get_free_space(): + cmd = 'df -H /dev/sda2 --output=pcent' + output = os.popen(cmd).read().split("\n") + d_used = output[1].split("%") + d = d_used[0].split(" ") + if int(d[1]) >= 95: + disk = d[1] + print("Disk_used = " + d[1] + "%") + telegram_bot_sendtext(name_server + ' ' + '% DISK used =' + ' ' + disk) + else: + print("Disk_used = " + d[1] + "%") + pass + +def telegram_bot_sendtext(bot_message): + bot_token = bot_token_gr + bot_chatID = bot_chatID_gr + send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message + + response = requests.get(send_text) + return response.json() + +def readfile(): + try: + file = open('hosts.txt', 'r') + Lines = file.readlines() + return Lines + finally: + file.close() +mem = get_memory() +bot_message = (name_server + ' ' + 'memory used:' + ' ' + str(mem[0]) + ' ' + 'swapused:' + ' ' + str(mem[1])) +while(True): + now = datetime.now() + current_time = now.strftime("%H:%M") + print("current_time = " + current_time) + time_now = time.localtime() + get_free_space() + get_cpu() + get_memory() + # mem = get_memory() + + bot_test = ("hello") + if current_time == '09:00': + telegram_bot_sendtext(bot_message) + monitor_docker() + # print(memUsed) + # print(swapUsed) + + sleep(59)