Added automatic error logging
This commit is contained in:
GaMeNu 2023-10-29 12:55:08 +02:00
parent 887b52f5d4
commit da74ad1948
2 changed files with 57 additions and 11 deletions

View File

@ -1,3 +1,4 @@
import asyncio
import json import json
import logging import logging
import os import os
@ -229,19 +230,28 @@ class DBAccess:
else: else:
self.log.addHandler(logging.StreamHandler()) self.log.addHandler(logging.StreamHandler())
try: self.connection = None
self.connection = mysql.connect( for i in range(12):
host='localhost', try:
user=DB_USERNAME, self.connection = mysql.connect(
password=DB_PASSWORD, host='localhost',
database='hfc_db' user=DB_USERNAME,
) password=DB_PASSWORD,
except mysql.Error as e: database='hfc_db'
self.connection.reconnect(attempts=12, delay=5) )
except mysql.Error as e:
self.log.error(f'Failed to connect to database. This is attempt {i+1}')
self.connection = mysql.connect(
host='localhost',
user=DB_USERNAME,
password=DB_PASSWORD,
database='hfc_db'
)
def __del__(self): def __del__(self):
self.connection.close() if self.connection is not None:
self.connection.close()
def add_area(self, area_id: int, area_name: str): def add_area(self, area_id: int, area_name: str):
with self.get_cursor() as crsr: with self.get_cursor() as crsr:

38
main.py
View File

@ -1,3 +1,9 @@
import datetime
import sys
import traceback
import types
from types import TracebackType
import discord import discord
from discord.ext import commands, tasks from discord.ext import commands, tasks
from dotenv import load_dotenv from dotenv import load_dotenv
@ -32,8 +38,38 @@ async def on_message(msg: discord.Message):
@bot.event @bot.event
async def on_ready(): async def on_ready():
await Notificator.setup(bot, handler)
await bot.change_presence(activity=discord.Activity(name='for HFC alerts.', type=discord.ActivityType.watching)) await bot.change_presence(activity=discord.Activity(name='for HFC alerts.', type=discord.ActivityType.watching))
botdata_path = os.path.join(os.path.realpath(__file__), '..', 'botdata')
if not os.path.isdir(botdata_path):
os.mkdir(botdata_path)
botdata_backup_path = os.path.join(botdata_path, 'backups')
if not os.path.isdir(botdata_backup_path):
os.mkdir(botdata_backup_path)
await Notificator.setup(bot, handler)
@bot.event
async def on_error(event, *args, **kwargs):
e: tuple[type, Exception, types.TracebackType] = sys.exc_info()
time = datetime.datetime.now()
path = os.path.join(os.path.realpath(__file__), '..', 'botdata', 'backups', f'ERRLOG_{time.strftime("%Y-%m-%d_%H-%M-%S")}.txt')
tb_str = '\n'.join(traceback.format_tb(e[2]))
data = f"""
An error has occurred! Don't worry, I saved an automatic log for ya :)
----------------------------------------------------------------------
Rough DateTime: {time.strftime("%Y-%m-%d %H:%M:%S")}
Error: {e[0].__name__}: {e[1]}
Traceback:
----------
{tb_str}
"""
with open(path, 'w') as f:
f.write(data)
bot.run(token=TOKEN, log_handler=handler) bot.run(token=TOKEN, log_handler=handler)