update tool

pull/17608/head
fuwx 1 year ago
parent 82a1355b68
commit 0734216837
No known key found for this signature in database
GPG Key ID: C8FA8C18DFB4702B

@ -18,10 +18,17 @@ class ThresholdTool(BuiltinTool):
metric = tool_parameters.get('metricData') metric = tool_parameters.get('metricData')
metric_data = json.loads(metric) metric_data = json.loads(metric)
threshold = float(tool_parameters.get('threshold')) threshold = float(tool_parameters.get('threshold'))
res = {} res = []
for k, v in metric_data['data'].items(): for serie in metric_data['data']:
tmpres = {
"name": serie['legend'],
"data": {},
}
for k, v in serie['chart']['chartData'].items():
v = float(v)
if v > threshold: if v > threshold:
res[str(k)] = v tmpres['data'][str(k)] = v
res.append(tmpres)
res = json.dumps({ res = json.dumps({
"type": 'llm', "type": 'llm',
"display": False, "display": False,

@ -7,7 +7,7 @@ import requests
from configs import dify_config from configs import dify_config
from core.tools.builtin_tool.tool import BuiltinTool from core.tools.builtin_tool.tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.builtin_tool.providers.utils import APOUtils
class SelectContainerCPUTool(BuiltinTool): class SelectContainerCPUTool(BuiltinTool):
def _invoke( def _invoke(
@ -18,25 +18,26 @@ class SelectContainerCPUTool(BuiltinTool):
app_id: Optional[str] = None, app_id: Optional[str] = None,
message_id: Optional[str] = None, message_id: Optional[str] = None,
) -> Generator[ToolInvokeMessage, None, None]: ) -> Generator[ToolInvokeMessage, None, None]:
container_name = tool_parameters.get("container") pod = tool_parameters.get("pod")
namespace = tool_parameters.get("namespace")
start_time = tool_parameters.get("startTime") start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime") end_time = tool_parameters.get("endTime")
pmql = 'rate(container_cpu_usage_seconds_total{container="' + container_name + '"}[1m])'
params = { params = {
'query': pmql, 'metricName': '基础设施情况 - 容器CPU - 容器CPU使用率 - Containerd',
'start': start_time, 'params': {
'end': end_time, "pod": pod,
'step': '1m' "namespace": namespace
},
'startTime': start_time,
'endTime': end_time,
'step': APOUtils.get_step(start_time, end_time),
} }
url = dify_config.APO_VM_URL + "/api/v1/query_range" resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params)
resp = requests.get(url, params=params) list = resp.json()['result']
list = resp.json()['data']['result'][0]
res = {}
for item in list['values']:
res[str(item[0] * 1000)] = float(item[1])
list = json.dumps({ list = json.dumps({
'type': 'cpu', 'type': 'cpu',
'display': True, 'display': True,
'data': res, 'unit': list['unit'],
'data': list['timeseries']
}) })
yield self.create_text_message(list) yield self.create_text_message(list)

@ -15,18 +15,31 @@ description:
pt_BR: Query the CPU utilization of the container pt_BR: Query the CPU utilization of the container
llm: Query the CPU utilization of the container llm: Query the CPU utilization of the container
parameters: parameters:
- name: container - name: pod
type: string type: string
required: true required: true
label: label:
en_US: container en_US: pod
zh_Hans: container zh_Hans: pod
pt_BR: container pt_BR: pod
human_description: human_description:
en_US: Specified container name en_US: Specified pod name
zh_Hans: 指定的容器名称 zh_Hans: 指定的容器POD名称
pt_BR: Specified container name pt_BR: Specified pod name
llm_description: Specified container name llm_description: Specified pod name
form: llm
- name: namespace
type: string
required: true
label:
en_US: namespace
zh_Hans: namespace
pt_BR: namespace
human_description:
en_US: Specified namespace
zh_Hans: 指定的容器所在Namespace
pt_BR: Specified namespace
llm_description: Specified namespace
form: llm form: llm
- name: startTime - name: startTime
type: number type: number

@ -7,7 +7,7 @@ import requests
from configs import dify_config from configs import dify_config
from core.tools.builtin_tool.tool import BuiltinTool from core.tools.builtin_tool.tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.builtin_tool.providers.utils import APOUtils
class SelectContainerRSSTool(BuiltinTool): class SelectContainerRSSTool(BuiltinTool):
def _invoke( def _invoke(
@ -18,24 +18,26 @@ class SelectContainerRSSTool(BuiltinTool):
app_id: Optional[str] = None, app_id: Optional[str] = None,
message_id: Optional[str] = None, message_id: Optional[str] = None,
) -> Generator[ToolInvokeMessage, None, None]: ) -> Generator[ToolInvokeMessage, None, None]:
container_name = tool_parameters.get("container") pod = tool_parameters.get("pod")
namespace = tool_parameters.get("namespace")
start_time = tool_parameters.get("startTime") start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime") end_time = tool_parameters.get("endTime")
pmql = 'container_memory_rss{container="' + container_name + '"}'
params = { params = {
'query': pmql, 'metricName': '基础设施情况 - 容器内存 - 容器内存使用率 - Containerd',
'start': start_time, 'params': {
'end': end_time, "pod": pod,
'step': '1m' "namespace": namespace
},
'startTime': start_time,
'endTime': end_time,
'step': APOUtils.get_step(start_time, end_time),
} }
resp = requests.get(dify_config.APO_VM_URL + '/api/v1/query_range', params=params) resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params)
list = resp.json()['data']['result'][0] list = resp.json()['result']
res = {}
for item in list['values']:
res[str(item[0] * 1000)] = float(item[1])
list = json.dumps({ list = json.dumps({
'type': 'memory', 'type': 'memory',
'display': True, 'display': True,
'data': res, 'unit': list['unit'],
'data': list['timeseries']
}) })
yield self.create_text_message(list) yield self.create_text_message(list)

@ -3,30 +3,43 @@ identity:
author: APO author: APO
label: label:
en_US: Query container resident memory usage en_US: Query container resident memory usage
zh_Hans: 查询容器驻留内存使用量 zh_Hans: 查询容器内存使用量
pt_BR: Query container resident memory usage pt_BR: Query container resident memory usage
description: description:
human: human:
en_US: Query container resident memory usage en_US: Query container resident memory usage
zh_Hans: 查询容器驻留内存使用量 zh_Hans: 查询容器内存使用量
pt_BR: Query container resident memory usage pt_BR: Query container resident memory usage
llm: Query container resident memory usage llm: Query container resident memory usage
display: display:
type: memory type: memory
unit: bytes unit: bytes
parameters: parameters:
- name: container - name: pod
type: string type: string
required: true required: true
label: label:
en_US: container en_US: pod
zh_Hans: container zh_Hans: pod
pt_BR: container pt_BR: pod
human_description: human_description:
en_US: Specified container name en_US: Specified pod name
zh_Hans: 指定的容器名称 zh_Hans: 指定的容器POD名称
pt_BR: Specified container name pt_BR: Specified pod name
llm_description: Specified container name llm_description: Specified pod name
form: llm
- name: namespace
type: string
required: true
label:
en_US: namespace
zh_Hans: namespace
pt_BR: namespace
human_description:
en_US: Specified namespace
zh_Hans: 指定的容器所在Namespace
pt_BR: Specified namespace
llm_description: Specified namespace
form: llm form: llm
- name: startTime - name: startTime
type: number type: number

@ -7,7 +7,7 @@ import requests
from configs import dify_config from configs import dify_config
from core.tools.builtin_tool.tool import BuiltinTool from core.tools.builtin_tool.tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.builtin_tool.providers.utils import APOUtils
class SelectCPUTool(BuiltinTool): class SelectCPUTool(BuiltinTool):
def _invoke( def _invoke(
@ -21,22 +21,21 @@ class SelectCPUTool(BuiltinTool):
node_name = tool_parameters.get("nodeName") node_name = tool_parameters.get("nodeName")
start_time = tool_parameters.get("startTime") start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime") end_time = tool_parameters.get("endTime")
sumql = 'sum by (instance_name) (avg by (mode, instance_name)'
pmql = sumql + ' (rate(node_cpu_seconds_total{mode!="idle", instance_name="' + node_name + '"}[1m])))'
params = { params = {
'query': pmql, 'metricName': '宿主机监控指标 - Quick CPU / Mem / Disk - CPU Busy',
'start': start_time, 'params': {
'end': end_time, "node": node_name,
'step': '1m' },
'startTime': start_time,
'endTime': end_time,
'step': APOUtils.get_step(start_time, end_time),
} }
resp = requests.get(dify_config.APO_VM_URL + '/api/v1/query_range', params=params) resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params)
list = resp.json()['data']['result'][0] list = resp.json()['result']
res = {}
for item in list['values']:
res[str(item[0] * 1000)] = float(item[1])
list = json.dumps({ list = json.dumps({
'type': 'cpu', 'type': 'cpu',
'display': True, 'display': True,
'data': res, 'unit': list['unit'],
'data': list['timeseries']
}) })
yield self.create_text_message(list) yield self.create_text_message(list)

@ -0,0 +1,35 @@
class APOUtils:
@classmethod
def get_step(self, start_time, end_time):
time_diff = end_time - start_time
SECOND = 1000000 # microseconds
MINUTE = 60 * SECOND
HOUR = 60 * MINUTE
step = SECOND # default step is 1 second
if time_diff <= 15 * MINUTE:
step = 30 * SECOND
elif time_diff <= 30 * MINUTE:
step = 1 * MINUTE
elif time_diff <= 1 * HOUR:
step = 2 * MINUTE
elif time_diff <= 1.5 * HOUR:
step = 3 * MINUTE
elif time_diff <= 3 * HOUR:
step = 6 * MINUTE
elif time_diff <= 6 * HOUR:
step = 12 * MINUTE
elif time_diff <= 12 * HOUR:
step = 24 * MINUTE
elif time_diff <= 15 * HOUR:
step = 30 * MINUTE
elif time_diff <= 30 * HOUR:
step = 1 * HOUR
else:
step = ((time_diff + 30 * SECOND - 1) // (30 * SECOND)) * SECOND
return step
Loading…
Cancel
Save