diff --git a/tools/log_tool.py b/tools/log_tool.py new file mode 100644 index 0000000..a0159fe --- /dev/null +++ b/tools/log_tool.py @@ -0,0 +1,82 @@ +# tools/log_tool.py + +from .base_tool import BaseTool +import logging +import os +from datetime import datetime, timedelta + +class LogTool(BaseTool): + def __init__(self): + # Set up logging + self.logger = logging.getLogger(__name__) + self.logger.setLevel(logging.INFO) + + # Create a file handler + file_handler = logging.FileHandler('log_tool.log') + file_handler.setLevel(logging.INFO) + + # Create a console handler + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + + # Create a formatting for the logs + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + file_handler.setFormatter(formatter) + console_handler.setFormatter(formatter) + + # Add the handlers to the logger + self.logger.addHandler(file_handler) + self.logger.addHandler(console_handler) + + def get_functions(self): + return [ + { + "name": "get_log_contents", + "description": "Get the contents of the log file.", + "parameters": { + "type": "object", + "properties": { + "line_count": { + "type": "integer", + "description": "Number of lines from the end of the log file to retrieve" + } + }, + "required": [] + } + } + ] + + def execute(self, function_name, **kwargs): + self.logger.info(f"Executing: {function_name}") + + if function_name == "get_log_contents": + return self._get_log_contents(kwargs.get("line_count")) + else: + error_message = f"Unknown function: {function_name}" + self.logger.error(error_message) + return error_message + + def _get_log_contents(self, line_count=None): + log_file_path = 'tools/tool_output.log' + + if not os.path.exists(log_file_path): + error_message = "Log file does not exist." + self.logger.error(error_message) + return error_message + + try: + with open(log_file_path, 'r') as log_file: + log_lines = log_file.readlines() + + if line_count is not None: + log_lines = log_lines[-line_count:] + else: + now = datetime.now() + twenty_four_hours_ago = now - timedelta(days=1) + log_lines = [line for line in log_lines if datetime.strptime(line.split(' - ')[0], '%Y-%m-%d %H:%M:%S,%f') > twenty_four_hours_ago] + + return "".join(log_lines) + except Exception as e: + error_message = f"An error occurred while reading the log file: {e}" + self.logger.error(error_message) + return error_message \ No newline at end of file