!bot logs: Codeblock, argument to match against module name

This commit is contained in:
gammafn 2021-05-06 16:09:17 -05:00
parent 528a596d68
commit 809df07c14
1 changed files with 25 additions and 8 deletions

View File

@ -2,19 +2,24 @@ import collections
import logging import logging
import json import json
import requests import requests
from html import escape
from datetime import timedelta from datetime import timedelta
import time import time
from nio import RoomCreateError
from modules.common.module import BotModule, ModuleCannotBeDisabled from modules.common.module import BotModule, ModuleCannotBeDisabled
class LogDequeHandler(logging.Handler): class LogDequeHandler(logging.Handler):
def __init__(self, count): def __init__(self, count):
super().__init__(level = logging.NOTSET) super().__init__(level = logging.NOTSET)
self.last_logs = collections.deque([], maxlen=10) self.logs = dict()
self.level = logging.INFO self.level = logging.INFO
def emit(self, record): def emit(self, record):
self.last_logs.append(self.format(record)) try:
self.logs[str(record.module)].append(record)
except:
self.logs[str(record.module)] = collections.deque([record], maxlen=15)
class MatrixModule(BotModule): class MatrixModule(BotModule):
@ -52,8 +57,6 @@ class MatrixModule(BotModule):
await self.export_settings(bot, event) await self.export_settings(bot, event)
elif args[1] == 'ping': elif args[1] == 'ping':
await self.get_ping(bot, room, event) await self.get_ping(bot, room, event)
elif args[1] == 'logs':
await self.last_logs(bot, room, event)
elif len(args) == 3: elif len(args) == 3:
if args[1] == 'enable': if args[1] == 'enable':
@ -64,6 +67,8 @@ class MatrixModule(BotModule):
await self.export_settings(bot, event, module_name=args[2]) await self.export_settings(bot, event, module_name=args[2])
elif args[1] == 'import': elif args[1] == 'import':
await self.import_settings(bot, event) await self.import_settings(bot, event)
elif args[1] == 'logs':
await self.last_logs(bot, room, event, args[2])
else: else:
pass pass
@ -234,11 +239,23 @@ class MatrixModule(BotModule):
bot.save_settings() bot.save_settings()
await bot.send_msg(event.sender, f'Private message from {bot.matrix_user}', 'Updated bot settings') await bot.send_msg(event.sender, f'Private message from {bot.matrix_user}', 'Updated bot settings')
async def last_logs(self, bot, room, event): async def last_logs(self, bot, room, event, logmodule):
bot.must_be_owner(event) bot.must_be_owner(event)
res = await bot.send_msg(event.sender, f'Private message from {bot.matrix_user}', '\n'.join(self.loghandler.last_logs)) self.logger.info(f'{event.sender} asked for the most recent log messages.')
self.logger.info(f'{event.sender} asked for the last {len(self.loghandler.last_logs)} log messages.') msg_room = await bot.find_or_create_private_msg(event.sender, f'Private message from {bot.matrix_user}')
return res if not msg_room or (type(msg_room) is RoomCreateError):
# fallback to current room if we can't create one
msg_room = room
for key in self.loghandler.logs:
if logmodule in key:
logmodule = key
break
else:
return await bot.send_text(msg_room, 'Unknown module, or no logs yet')
print (self.loghandler.logs.keys())
msg = '\n'.join([self.loghandler.format(record) for record in self.loghandler.logs.get(logmodule)])
return await bot.send_html(msg_room, f'<pre><code class="language-txt">{escape(msg)}</code></pre>', msg)
def disable(self): def disable(self):
raise ModuleCannotBeDisabled raise ModuleCannotBeDisabled