new functions(WIP) - /reboot and /restart service
This commit is contained in:
parent
f28f291a49
commit
0afffee697
1 changed files with 34 additions and 4 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue