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_data = json.loads(metric)
threshold = float(tool_parameters.get('threshold'))
res = {}
for k, v in metric_data['data'].items():
res = []
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:
res[str(k)] = v
tmpres['data'][str(k)] = v
res.append(tmpres)
res = json.dumps({
"type": 'llm',
"display": False,

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

@ -15,18 +15,31 @@ description:
pt_BR: Query the CPU utilization of the container
llm: Query the CPU utilization of the container
parameters:
- name: container
- name: pod
type: string
required: true
label:
en_US: container
zh_Hans: container
pt_BR: container
en_US: pod
zh_Hans: pod
pt_BR: pod
human_description:
en_US: Specified container name
zh_Hans: 指定的容器名称
pt_BR: Specified container name
llm_description: Specified container name
en_US: Specified pod name
zh_Hans: 指定的容器POD名称
pt_BR: Specified pod 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
- name: startTime
type: number

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

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

@ -7,7 +7,7 @@ import requests
from configs import dify_config
from core.tools.builtin_tool.tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.builtin_tool.providers.utils import APOUtils
class SelectCPUTool(BuiltinTool):
def _invoke(
@ -21,22 +21,21 @@ class SelectCPUTool(BuiltinTool):
node_name = tool_parameters.get("nodeName")
start_time = tool_parameters.get("startTime")
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 = {
'query': pmql,
'start': start_time,
'end': end_time,
'step': '1m'
'metricName': '宿主机监控指标 - Quick CPU / Mem / Disk - CPU Busy',
'params': {
"node": node_name,
},
'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)
list = resp.json()['data']['result'][0]
res = {}
for item in list['values']:
res[str(item[0] * 1000)] = float(item[1])
resp = requests.post(dify_config.APO_BACKEND_URL + '/api/metric/query', json=params)
list = resp.json()['result']
list = json.dumps({
'type': 'cpu',
'display': True,
'data': res,
'unit': list['unit'],
'data': list['timeseries']
})
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