Reverted to MyStrategy instead of Cerebro experiments and implemented base functionality for a Matrix logging mechanism. Reviewed-on: #6
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import asyncio
|
|
import logging
|
|
import os
|
|
|
|
from nio import AsyncClient, MatrixRoom, RoomMessageText
|
|
|
|
class MatrixHandler(logging.Handler):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.address = os.getenv('MATRIX_HOMESERVER_ADDRESS')
|
|
self.user_id = os.getenv('MATRIX_USER_ID')
|
|
self.user_password = os.getenv('MATRIX_USER_PASSWORD')
|
|
self.room_id = os.getenv('MATRIX_ROOM_ID')
|
|
self.device_id = os.getenv('MATRIX_DEVICE_ID')
|
|
|
|
def message_callback(self, room: MatrixRoom, event: RoomMessageText) -> None:
|
|
return
|
|
|
|
async def send_to_matrix(self, record):
|
|
client = AsyncClient(self.address, self.user_id)
|
|
await client.login(self.user_password, self.device_id)
|
|
client.add_event_callback(self.message_callback, RoomMessageText)
|
|
await client.room_send(
|
|
self.room_id,
|
|
message_type='m.room.message',
|
|
content={'msgtype': 'm.text', 'body': self.formatter.format(record)}
|
|
)
|
|
|
|
def emit(self, record):
|
|
asyncio.run(self.send_to_matrix(record))
|
|
|
|
class MatrixLogger:
|
|
def __init__(self, name):
|
|
self.log = logging.getLogger(name)
|
|
self.log.setLevel(os.getenv('LOG_LEVEL', 'INFO'))
|
|
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setLevel(os.getenv('LOG_LEVEL', 'INFO'))
|
|
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s'))
|
|
|
|
matrix_handler = MatrixHandler()
|
|
matrix_handler.setLevel(os.getenv('LOG_LEVEL', 'INFO'))
|
|
matrix_handler.setFormatter(logging.Formatter('%(levelname)s - %(name)s - %(message)s'))
|
|
|
|
self.log.addHandler(console_handler)
|
|
self.log.addHandler(matrix_handler)
|
|
|
|
def debug(self, message):
|
|
self.log.debug(message)
|
|
|
|
def info(self, message):
|
|
self.log.info(message)
|
|
|
|
def warning(self, message):
|
|
self.log.warning(message)
|
|
|
|
def error(self, message):
|
|
self.log.error(message)
|
|
|
|
def critical(self, message):
|
|
self.log.critical(message)
|
|
|