diff --git a/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.py b/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.py new file mode 100644 index 0000000000..33650bc412 --- /dev/null +++ b/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.py @@ -0,0 +1,48 @@ +import json +from collections.abc import Generator +from typing import Any, Optional + +import requests + +from configs import dify_config +from core.tools.builtin_tool.tool import BuiltinTool +from core.tools.entities.tool_entities import ToolInvokeMessage +from libs.apo_utils import APOUtils + + +class LogErrorLevelCountTool(BuiltinTool): + def _invoke( + self, + user_id: str, + tool_parameters: dict[str, Any], + conversation_id: Optional[str] = None, + app_id: Optional[str] = None, + message_id: Optional[str] = None, + ) -> Generator[ToolInvokeMessage, None, None]: + pod_name = tool_parameters.get('pod_name', '.*') + namespace = tool_parameters.get('namespace', '.*') + pid = tool_parameters.get('pid', '.*') + start_time = tool_parameters.get("startTime") + end_time = tool_parameters.get("endTime") + params = { + 'metricName': '宿主机监控指标 - 日志解析错误计数总览 - log error level count', + 'params': { + 'pod_name': pod_name, + 'namespace': namespace, + 'pid': pid + }, + 'startTime': start_time, + 'endTime': end_time, + 'step': APOUtils.get_step(start_time, end_time), + } + resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params) + list = resp.json()['result'] + list = json.dumps({ + 'type': 'metric', + 'display': True, + 'unit': list['unit'], + 'data': { + 'timeseries': list['timeseries'] + } + }) + yield self.create_text_message(list) \ No newline at end of file diff --git a/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.yaml b/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.yaml new file mode 100644 index 0000000000..ef70c12cfe --- /dev/null +++ b/api/core/tools/builtin_tool/providers/apo_select/tools/log_error_level_count.yaml @@ -0,0 +1,75 @@ +identity: + name: 记录了日志解析系统中按错误级别统计的总次数 + author: APO + label: + en_US: Records the total count of log parsing system errors categorized by error level + zh_Hans: 记录了日志解析系统中按错误级别统计的总次数 +description: + human: + en_US: Records the total count of log parsing system errors categorized by error level + zh_Hans: 记录了日志解析系统中按错误级别统计的总次数 + llm: Records the total count of log parsing system errors categorized by error level +display: + type: metric + title: 宿主机监控指标 - 日志解析错误计数总览 - log error level count + unit: "short" +parameters: + - name: pod_name + type: string + required: False + label: + en_US: Pod name + zh_Hans: Pod名称 + human_description: + en_US: Pod name + zh_Hans: Pod名称 + llm_description: Pod name + form: llm + - name: namespace + type: string + required: False + label: + en_US: Namespace + zh_Hans: 命名空间 + human_description: + en_US: Namespace + zh_Hans: 命名空间 + llm_description: Namespace + form: llm + - name: pid + type: string + required: False + label: + en_US: Process ID + zh_Hans: 进程ID + human_description: + en_US: Process ID + zh_Hans: 进程ID + llm_description: Process ID + form: llm + - name: startTime + type: number + required: true + label: + en_US: startTime + zh_Hans: startTime + pt_BR: startTime + human_description: + en_US: Data query start time(Microsecond) + zh_Hans: 开始时间 (微秒) + pt_BR: Data query start time + llm_description: Data query start time(Microsecond) + form: llm + - name: endTime + type: number + required: true + label: + en_US: endTime + zh_Hans: endTime + pt_BR: endTime + human_description: + en_US: Data query end time(Microsecond) + zh_Hans: 结束时间 (微秒) + pt_BR: Data query end time(Microsecond) + llm_description: Data query end time(Microsecond) + form: llm diff --git a/api/core/tools/builtin_tool/providers/apo_select/tools/thread_polaris_p90.py b/api/core/tools/builtin_tool/providers/apo_select/tools/thread_polaris_p90.py index 7178de324b..61853bd623 100644 --- a/api/core/tools/builtin_tool/providers/apo_select/tools/thread_polaris_p90.py +++ b/api/core/tools/builtin_tool/providers/apo_select/tools/thread_polaris_p90.py @@ -41,15 +41,13 @@ class ThreadPolarisP90(BuiltinTool): values = [float(value[1]) for value in entry["values"]] stats[tid] = { - "max": max(values), - "min": min(values) + "avg": sum(values) / len(values), } return json.dumps(stats) def get_metrics(self, type: str, pod: str, start: int, end: int) -> dict: - pre_query = '''histogram_quantile(0.9, sum(rate(originx_thread_polaris_nanoseconds_bucket{pod="''' - query = pre_query + pod + '''", type="''' + type + '''"}[1m])) by (tid, vmrange))''' + query = 'increase(originx_thread_polaris_nanoseconds_sum{pod="' + pod + '", type="cpu"}[1m])' step = '10m' hour = 3600 * 1000 diff --git a/api/initializer/__init__.py b/api/initializer/__init__.py index 70523c859a..401b865320 100644 --- a/api/initializer/__init__.py +++ b/api/initializer/__init__.py @@ -11,6 +11,8 @@ import os def run_initializers(app: Flask): if os.environ.get("MODE") != "api": return + if os.environ.get("APO_INIT") == "false": + return with app.app_context(): for func, _ in sorted(_initializers, key=lambda x: x[1]): func() \ No newline at end of file