From 0afffee697ebdaec8bf7dbb7cb76aa82b843818a Mon Sep 17 00:00:00 2001 From: hornet Date: Thu, 17 Oct 2024 15:51:21 +0500 Subject: [PATCH] new functions(WIP) - /reboot and /restart service --- lainmonitor.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/lainmonitor.py b/lainmonitor.py index 1b23e61..f053e0d 100644 --- a/lainmonitor.py +++ b/lainmonitor.py @@ -1,15 +1,19 @@ #description: telegram bot for monitoring the system #dependencies: telebot #usage: python3 lainmonitor.py | or run it as a service -#author: hornetmaidan +#authors: hornet import subprocess import threading +from time import sleep import telebot #define the variables status, hostname, uptime, zerotier, prosody, postgres, tailscale, disk, ping = 'unknown', 'unknown', 'unknown', 'unknown', 'unknown', 'unknown', 'unknown', 'unknown', 'unknown' nodes, hostnames, reach, threads = [], [], [], [] +#change this to your hostname +host = 'lainlounge' + #load the token token = open('.env', 'r').read().strip() @@ -58,6 +62,26 @@ def check_tailscale(): return reach +#restart services +def restart_service(service): + subprocess.Popen(f'sudo systemctl restart {service}', shell=True, stdout=subprocess.PIPE).stdout.read().decode().strip() + sleep(3) + service_status = subprocess.Popen(f'sudo systemctl status {service} | grep "Active"', shell=True, stdout=subprocess.PIPE).stdout.read().decode().strip() + message = f'{service} restarted! status: {service_status}' + +#restart services menu +def restart_menu(): + keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True) + zerotier_button = telebot.types.KeyboardButton('zerotier-one', callback_data='zerotier') + prosody_button = telebot.types.KeyboardButton('prosody', callback_data='prosody') + postgres_button = telebot.types.KeyboardButton('postgresql', callback_data='postgresql') + tailscale_button = telebot.types.KeyboardButton('tailscaled', callback_data='tailscaled') + + return keyboard + +def reboot(): + subprocess.Popen('sudo reboot', shell=True, stdout=subprocess.PIPE).stdout.read().decode().strip() + #debug handler def check(): global status, hostname, uptime, zerotier, prosody, postgres, tailscale, disk @@ -73,7 +97,7 @@ def check(): return status, hostname, uptime, zerotier, prosody, postgres, tailscale, disk #message handling -@bot.message_handler(commands=['start', 'help', 'status', 'reboot', 'ping']) +@bot.message_handler(commands=['start', 'help', 'status', 'restart', 'reboot', 'ping']) def handle(message): if message.text == '/start': bot.reply_to(message, 'lainmonitor v1.0 --- standing by...') @@ -84,8 +108,14 @@ def handle(message): status_message = f'hostname: {hostname}\nsystem status: {status}\nuptime: {uptime}\nzerotier: {zerotier}\nprosody: {prosody}\npostgres: {postgres}\ntailscale: {tailscale}' bot.reply_to(message, status_message) bot.reply_to(message, f'filesystem info for {hostname}: \n\n{disk}') - elif message.text == '/reboot': - bot.reply_to(message, 'work in progress...') + elif message.text == f'/restart {host}': + if host == hostname: + bot.send_message(message.chat.id, 'select a service to restart:', reply_markup=restart_menu()) + else: + pass + elif message.text == f'/reboot {hostname}': + bot.reply_to(message, f'rebooting {host}...') + reboot() elif message.text == '/ping': check_tailscale() ping_status = '\n'.join(reach)