0.3 #146
@ -13,10 +13,14 @@ class CustomFileLoggerABC(Logger, ABC):
|
||||
@abstractmethod
|
||||
def __init__(self, key: str, config: ConfigurationABC, time_format: TimeFormatSettings, env: ApplicationEnvironmentABC):
|
||||
self._key = key
|
||||
settings: LoggingSettings = config.get_configuration(f'{FileLoggingSettings.__name__}_{key}')
|
||||
Logger.__init__(self, settings, time_format, env)
|
||||
self._settings: LoggingSettings = config.get_configuration(f'{FileLoggingSettings.__name__}_{key}')
|
||||
Logger.__init__(self, self._settings, time_format, env)
|
||||
self._begin_log()
|
||||
|
||||
@property
|
||||
def settings(self) -> LoggingSettings:
|
||||
return self._settings
|
||||
|
||||
def _begin_log(self):
|
||||
console_level = self._console.value
|
||||
self._console = LoggingLevelEnum.OFF
|
||||
|
95
kdb-bot/src/modules/technician/command/log_command.py
Normal file
95
kdb-bot/src/modules/technician/command/log_command.py
Normal file
@ -0,0 +1,95 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
from cpl_core.dependency_injection import ServiceProviderABC
|
||||
from cpl_core.logging import LoggingSettings
|
||||
from cpl_discord.command import DiscordCommandABC
|
||||
from cpl_query.extension import List
|
||||
from cpl_translation import TranslatePipe
|
||||
from discord.ext import commands
|
||||
from discord.ext.commands import Context
|
||||
|
||||
from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC
|
||||
from bot_core.abc.custom_file_logger_abc import CustomFileLoggerABC
|
||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||
from bot_core.helper.command_checks import CommandChecks
|
||||
from bot_core.logging.command_logger import CommandLogger
|
||||
from modules.permission.abc.permission_service_abc import PermissionServiceABC
|
||||
|
||||
|
||||
class LogCommand(DiscordCommandABC):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
logger: CommandLogger,
|
||||
logging_settings: LoggingSettings,
|
||||
services: ServiceProviderABC,
|
||||
message_service: MessageServiceABC,
|
||||
client_utils: ClientUtilsServiceABC,
|
||||
translate: TranslatePipe,
|
||||
permissions: PermissionServiceABC,
|
||||
):
|
||||
DiscordCommandABC.__init__(self)
|
||||
|
||||
self._logger = logger
|
||||
self._logging_settings = logging_settings
|
||||
self._services = services
|
||||
self._message_service = message_service
|
||||
self._client_utils = client_utils
|
||||
self._t = translate
|
||||
self._permissions = permissions
|
||||
|
||||
self._logger.trace(__name__, f'Loaded command service: {type(self).__name__}')
|
||||
|
||||
def _reduce_path(self, p: str) -> str:
|
||||
if p.count('/') == 1 or p == '':
|
||||
return p
|
||||
|
||||
return self._reduce_path(os.path.dirname(p))
|
||||
|
||||
@commands.hybrid_command()
|
||||
@commands.guild_only()
|
||||
@CommandChecks.check_is_ready()
|
||||
@CommandChecks.check_is_member_technician()
|
||||
async def log(self, ctx: Context, date_from: datetime = datetime.now()):
|
||||
self._logger.debug(__name__, f'Received command log {ctx}')
|
||||
|
||||
possible_log_paths = List(str)
|
||||
possible_log_paths.append(self._reduce_path(self._logging_settings.path))
|
||||
|
||||
file_extensions = List(str)
|
||||
if '.' in self._logging_settings.filename:
|
||||
split_filename = self._logging_settings.filename.split(".")
|
||||
file_extensions.append(f'.{split_filename[len(split_filename) - 1]}')
|
||||
|
||||
for subclass in CustomFileLoggerABC.__subclasses__():
|
||||
logger: CustomFileLoggerABC = self._services.get_service(subclass)
|
||||
if logger is None:
|
||||
continue
|
||||
|
||||
path = self._reduce_path(logger.settings.path)
|
||||
if '.' in logger.settings.filename:
|
||||
split_filename = logger.settings.filename.split(".")
|
||||
file_extension = f'.{split_filename[len(split_filename) - 1]}'
|
||||
if file_extension not in file_extensions:
|
||||
file_extensions.append(file_extension)
|
||||
|
||||
if path in possible_log_paths:
|
||||
continue
|
||||
possible_log_paths.append(path)
|
||||
|
||||
files = List(str)
|
||||
now = datetime.now()
|
||||
for possible_path in possible_log_paths:
|
||||
for r, d, f in os.walk(possible_path):
|
||||
for file in f:
|
||||
if '.' not in file:
|
||||
continue
|
||||
|
||||
split_filename = file.split(".")
|
||||
if f'.{split_filename[len(split_filename) - 1]}' not in file_extensions:
|
||||
continue
|
||||
|
||||
files.append(os.path.join(r, file))
|
||||
|
||||
self._logger.trace(__name__, f'Finished log command')
|
@ -6,6 +6,7 @@ from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
|
||||
from bot_core.abc.module_abc import ModuleABC
|
||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||
from modules.base.abc.base_helper_abc import BaseHelperABC
|
||||
from modules.technician.command.log_command import LogCommand
|
||||
from modules.technician.command.restart_command import RestartCommand
|
||||
from modules.technician.command.shutdown_command import ShutdownCommand
|
||||
from modules.base.service.base_helper_service import BaseHelperService
|
||||
@ -24,4 +25,5 @@ class TechnicianModule(ModuleABC):
|
||||
# commands
|
||||
self._dc.add_command(RestartCommand)
|
||||
self._dc.add_command(ShutdownCommand)
|
||||
self._dc.add_command(LogCommand)
|
||||
# events
|
||||
|
Loading…
Reference in New Issue
Block a user