feat: add some host metrics query tools (#2)

* feat: add some host metrics query tools

* fix: wrong params
pull/17608/head
MisluNotFound 1 year ago committed by GitHub
parent d35b3c5bb7
commit ff2c59a881
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,5 +1,5 @@
identity: identity:
name: select_container_cpu name: 查询容器CPU利用率
author: APO author: APO
label: label:
en_US: Query the CPU utilization of the container en_US: Query the CPU utilization of the container

@ -1,5 +1,5 @@
identity: identity:
name: select_container_rss name: 查询容器内存使用量
author: APO author: APO
label: label:
en_US: Query container resident memory usage en_US: Query container resident memory usage

@ -1,5 +1,5 @@
identity: identity:
name: container_rtt name: 查询容器网络与下游RTT
author: APO author: APO
label: label:
en_US: Query container rtt en_US: Query container rtt

@ -1,5 +1,5 @@
identity: identity:
name: fault_log name: 查询服务日志数据
author: APO author: APO
label: label:
en_US: Query service log data en_US: Query service log data

@ -0,0 +1,46 @@
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 HostCoreNumTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - CPU Cores",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机CPU核心数
author: APO
label:
en_US: Query host's CPU cores number
zh_Hans: 查询宿主机CPU核心数
pt_BR: Query host's CPU cores number
description:
human:
en_US: Query host's CPU cores number
zh_Hans: 查询宿主机CPU核心数
pt_BR: Query host's CPU cores number
llm: Query host's CPU cores number
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - CPU Cores
unit: short
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,45 @@
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 HostCpuCoreUsageTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Basic CPU / Mem / Net / Disk - CPU Basic - CPU Usage",
'params': {
'node': node,
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机宿主机CPU使用量(核数)
author: APO
label:
en_US: Query host's CPU cores usage
zh_Hans: 查询宿主机宿主机CPU使用量(核数)
pt_BR: Query host's CPU cores usage
description:
human:
en_US: Query host's CPU cores usage
zh_Hans: 查询宿主机宿主机CPU使用量(核数)
pt_BR: Query host's CPU cores usage
llm: Query host's CPU cores usage
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - CPU Cores
unit: core
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostCpuPressureTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - CPU",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机CPU压力
author: APO
label:
en_US: Query host's CPU pressure
zh_Hans: 查询宿主机CPU压力
pt_BR: Query host's CPU pressure
description:
human:
en_US: Query host's CPU pressure
zh_Hans: 查询宿主机CPU压力
pt_BR: Query host's CPU pressure
llm: Query host's CPU pressure
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - CPU
unit: percentunit
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,44 @@
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 HostCpuUsageTool(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]:
node = tool_parameters.get("node")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - CPU Busy",
'params': {
'node': node,
},
'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)

@ -0,0 +1,57 @@
identity:
name: 查询宿主机CPU繁忙率
author: APO
label:
en_US: Query host's CPU usage
zh_Hans: 查询宿主机CPU繁忙率
pt_BR: Query host's CPU usage
description:
human:
en_US: Query host's CPU usage
zh_Hans: 查询宿主机CPU繁忙率
pt_BR: Query host's CPU usage
llm: Query host's CPU usage
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - CPU Busy
unit: percent
parameters:
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostIoPressureTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - I/O",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机I/O压力
author: APO
label:
en_US: Query host's I/O pressure
zh_Hans: 查询宿主机I/O压力
pt_BR: Query host's I/O pressure
descriptI/On:
human:
en_US: Query host's I/O pressure
zh_Hans: 查询宿主机I/O压力
pt_BR: Query host's I/O pressure
llm: Query host's I/O pressure
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - I/O
unit: percentunit
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_descriptI/On:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_descriptI/On: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_descriptI/On:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_descriptI/On: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostMemPressureTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - Mem",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机CPU压力
author: APO
label:
en_US: Query host's memory pressure
zh_Hans: 查询宿主机CPU压力
pt_BR: Query host's memory pressure
description:
human:
en_US: Query host's memory pressure
zh_Hans: 查询宿主机内存压力
pt_BR: Query host's memory pressure
llm: Query host's memory pressure
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Pressure - Mem
unit: percentunit
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostRamTotalTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - RAM Total",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机RAM总大小
author: APO
label:
en_US: Query host's ram total size
zh_Hans: 查询宿主机RAM总大小
pt_BR: Query host's ram total size
description:
human:
en_US: Query host's ram total size
zh_Hans: 查询宿主机RAM总大小
pt_BR: Query host's ram total size
llm: Query host's ram total size
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - RAM Total
unit: bytes
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostRamUsageTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - RAM Used - B",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机RAM使用率
author: APO
label:
en_US: Query host's RAM usage
zh_Hans: 查询宿主机RAM使用率
pt_BR: Query host's RAM usage
description:
human:
en_US: Query host's RAM usage
zh_Hans: 查询宿主机RAM使用率
pt_BR: Query host's RAM usage
llm: Query host's RAM usage
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - RAM Used - B
unit: percent
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,44 @@
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 HostRootFsTotalTool(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]:
node = tool_parameters.get("node")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - RootFS Total",
'params': {
'node': node,
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机根文件系统总大小
author: APO
label:
en_US: Query host's file system total size
zh_Hans: 查询宿主机根文件系统总大小
pt_BR: Query host's file system total size
description:
human:
en_US: Query host's file system total size
zh_Hans: 查询宿主机根文件系统总大小
pt_BR: Query host's file system total size
llm: Query host's file system total size
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - RootFS Total
unit: bytes
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostRootFsUsageTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Root FS Used",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机根文件系统使用率
author: APO
label:
en_US: Query host's root file system usage
zh_Hans: 查询宿主机根文件系统使用率
pt_BR: Query host's root file system usage
description:
human:
en_US: Query host's root file system usage
zh_Hans: 查询宿主机根文件系统使用率
pt_BR: Query host's root file system usage
llm: Query host's root file system usage
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Root FS Used
unit: percent
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostSwapTotal(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - SWAP Total",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机宿主机SWAP总大小
author: APO
label:
en_US: Query host's SWAP total size
zh_Hans: 查询宿主机宿主机SWAP总大小
pt_BR: Query host's SWAP total size
description:
human:
en_US: Query host's SWAP total size
zh_Hans: 查询宿主机宿主机SWAP总大小
pt_BR: Query host's SWAP total size
llm: Query host's SWAP total size
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - SWAP Total
unit: bytes
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostSwapUsageTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - SWAP Used",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机SWAP使用率
author: APO
label:
en_US: Query host's SWAP usage
zh_Hans: 查询宿主机SWAP使用率
pt_BR: Query host's SWAP usage
description:
human:
en_US: Query host's SWAP usage
zh_Hans: 查询宿主机SWAP使用率
pt_BR: Query host's SWAP usage
llm: Query host's SWAP usage
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - SWAP Used
unit: percent
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostSysLoad(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Sys Load",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机最近1分钟的系统负载
author: APO
label:
en_US: Query host's system load for the last 1 minute
zh_Hans: 查询宿主机最近1分钟的系统负载
pt_BR: Query host's system load for the last 1 minute
description:
human:
en_US: Query host's system load for the last 1 minute
zh_Hans: 查询宿主机最近1分钟的系统负载
pt_BR: Query host's system load for the last 1 minute
llm: Query host's system load for the last 1 minute
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Sys Load
unit: percent
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostSysProcBusyTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Basic CPU / Mem / Net / Disk - CPU Basic - Busy System",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 查询宿主机系统进程CPU繁忙率
author: APO
label:
en_US: Query host's system process CPU usage
zh_Hans: 查询宿主机系统进程CPU繁忙率
pt_BR: Query host's system process CPU usage
description:
human:
en_US: Query host's system process CPU usage
zh_Hans: 查询宿主机系统进程CPU繁忙率
pt_BR: Query host's system process CPU usage
llm: Query host's system process CPU usage
display:
type: metric
title: 宿主机监控指标 - Basic CPU / Mem / Net / Disk - CPU Basic - Busy System
unit: percentunit
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -0,0 +1,46 @@
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 HostUptimeTool(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]:
node = tool_parameters.get("node")
job = tool_parameters.get("job")
start_time = tool_parameters.get("startTime")
end_time = tool_parameters.get("endTime")
params = {
'metricName': "宿主机监控指标 - Quick CPU / Mem / Disk - Uptime",
'params': {
'node': node,
**({'job': job} if job else {})
},
'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)

@ -0,0 +1,70 @@
identity:
name: 宿主机运行时间
author: APO
label:
en_US: Query host's uptime
zh_Hans: 宿主机运行时间
pt_BR: Query host's uptime
description:
human:
en_US: Query host's uptime
zh_Hans: 宿主机运行时间
pt_BR: Query host's uptime
llm: Query host's uptime
display:
type: metric
title: 宿主机监控指标 - Quick CPU / Mem / Disk - Uptime
unit: s
parameters:
- name: job
type: string
required: false
label:
en_US: Prometheus Job
zh_Hans: Prometheus任务
pt_BR: Tarefa Prometheus
human_description:
en_US: Prometheus job name for host metrics
zh_Hans: Prometheus任务名称宿主机指标
pt_BR: Prometheus job name for host metrics
llm_description: Unique identifier for metrics scrape job
form: llm
- name: node
type: string
required: true
label:
en_US: Host Node
zh_Hans: 宿主机节点
pt_BR: Host Node
human_description:
en_US: Host node identifier
zh_Hans: 宿主机节点标识
pt_BR: Host node identifier
llm_description: Unique identifier for host node
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
zh_Hans: 开始时间 (微秒)
pt_BR: Data query start time
llm_description: Data query start time
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
zh_Hans: 结束时间 (微秒)
pt_BR: Data query end time
llm_description: Data query start time
form: llm

@ -1,5 +1,5 @@
identity: identity:
name: originx_service_red_avg_resp name: Originx 北极星指标 (服务层级) - RED指标 - 平均响应时间
author: APO author: APO
label: label:
en_US: Query the CPU utilization of the host en_US: Query the CPU utilization of the host

@ -1,5 +1,5 @@
identity: identity:
name: select_cpu name: 查询主机CPU利用率
author: APO author: APO
label: label:
en_US: Query the CPU utilization of the host en_US: Query the CPU utilization of the host

@ -1,5 +1,5 @@
identity: identity:
name: topology name: 查询入口服务拓扑结构
author: APO author: APO
label: label:
en_US: Query the entry service topology en_US: Query the entry service topology

Loading…
Cancel
Save