From b0edb3ef66f2f8bea6aee77492d3f4d7b112e796 Mon Sep 17 00:00:00 2001 From: ganyang Date: Tue, 22 Apr 2025 22:04:37 +0800 Subject: [PATCH] feat(rds): enhance error logs query functionality - Add pagination support with page_size and page_number parameters - Improve error handling with detailed logging --- src/rds_openapi_mcp_server/server.py | 94 +++++++++++++++++++++------- 1 file changed, 70 insertions(+), 24 deletions(-) diff --git a/src/rds_openapi_mcp_server/server.py b/src/rds_openapi_mcp_server/server.py index 6354d0c..0285421 100644 --- a/src/rds_openapi_mcp_server/server.py +++ b/src/rds_openapi_mcp_server/server.py @@ -91,30 +91,6 @@ async def describe_db_instance_attribute(region_id: str, db_instance_id: str): raise e -@mcp.tool() -def describe_error_logs(region_id: str, db_instance_id: str, start_time: datetime, end_time: datetime): - """ - Queries the error log of an instance. - Args: - region_id: db instance region(e.g. cn-hangzhou) - db_instance_id: db instance id(e.g. rm-xxx) - start_time: start time UTC TimeZone (e.g. 2023-01-01T00:00Z) - end_time: end time UTC TimeZone (e.g. 2023-01-01T00:00Z) - """ - client = get_rds_client(region_id) - try: - request = rds_20140815_models.DescribeErrorLogsRequest( - dbinstance_id=db_instance_id, - start_time=transform_to_iso_8601(start_time, "minutes"), - end_time=transform_to_iso_8601(end_time, "minutes"), - page_size=100, - ) - response = client.describe_error_logs(request) - return response.to_map() - except Exception as e: - raise e - - @mcp.tool() async def describe_db_instance_performance(region_id: str, db_instance_id: str, db_type: str, perf_key: str, start_time: str, end_time: str): """ @@ -812,6 +788,76 @@ async def describe_slow_log_records( raise OpenAPIError(f"Failed to query slow log records: {str(e)}") +@mcp.tool() +async def describe_error_logs( + region_id: str, + db_instance_id: str, + start_time: str, + end_time: str, + page_size: int = 30, + page_number: int = 1 +) -> Dict[str, Any]: + """ + Query error logs of an RDS instance. + + Args: + region_id (str): The region ID of the RDS instance. + db_instance_id (str): The ID of the RDS instance. + start_time (str): The start time of the query. Format: yyyy-MM-ddTHH:mmZ (UTC time). + end_time (str): The end time of the query. Format: yyyy-MM-ddTHH:mmZ (UTC time). + page_size (int): The number of records per page. Range: 30~100. Default: 30. + page_number (int): The page number. Default: 1. + + Returns: + Dict[str, Any]: A dictionary containing error log information with the following structure: + { + "Items": { + "ErrorLog": [ + { + "CreateTime": "2011-05-30T12:11:04Z", + "ErrorInfo": "Error log content" + } + ] + }, + "PageNumber": 1, + "PageRecordCount": 30, + "TotalRecordCount": 100, + "RequestId": "98504E07-BB0E-40FC-B152-E4882615812C" + } + + Raises: + OpenAPIError: If the API call fails or returns an error. + """ + try: + client = get_rds_client(region_id) + request = rds_20140815_models.DescribeErrorLogsRequest( + dbinstance_id=db_instance_id, + start_time=start_time, + end_time=end_time, + page_size=page_size, + page_number=page_number + ) + response = await client.describe_error_logs_async(request) + return { + "Items": { + "ErrorLog": [ + { + "CreateTime": log.create_time, + "ErrorInfo": log.error_info + } + for log in response.body.items.error_log + ] + }, + "PageNumber": response.body.page_number, + "PageRecordCount": response.body.page_record_count, + "TotalRecordCount": response.body.total_record_count, + "RequestId": response.body.request_id + } + except Exception as e: + logger.error(f"Failed to describe error logs: {str(e)}") + raise OpenAPIError(f"Failed to describe error logs: {str(e)}") + + @mcp.tool() async def get_current_time() -> Dict[str, Any]: """Get the current time.