This is an automated email from the ASF dual-hosted git repository. zqr10159 pushed a commit to branch 2.0.0 in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
commit 66ae2f6c88335c3759bb7bbdc4465dd8ebeac0ce Author: Logic <[email protected]> AuthorDate: Fri May 29 09:46:56 2026 +0800 fix(ai): align tools with backend API changes Validation: - ./mvnw -pl hertzbeat-ai -Dcheckstyle.skip=true -DskipITs -Dskip.frontend -Dskip.npm -DskipDocker -DskipTests clean compile - git diff --cached --check - cached trailing-whitespace scan --- .../hertzbeat/ai/tools/impl/AlertToolsImpl.java | 26 +++++++++++----------- .../hertzbeat/ai/tools/impl/MonitorToolsImpl.java | 10 +++++---- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java index 2e8df751c2..4b461b0888 100644 --- a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java +++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java @@ -44,26 +44,26 @@ public class AlertToolsImpl implements AlertTools { @Override @Tool(name = "query_alerts", description = """ HertzBeat: Query alerts with comprehensive filtering and pagination options. - + ALERT TYPES: - Pass alertType='single' for individual alert instances - Pass alertType='group' for grouped/aggregated alerts - Pass alertType='both' to get both types (separate sections) - + STATUS FILTERING: - 'firing': Currently active alerts requiring attention - 'resolved': Previously active alerts that have been cleared - 'all': Both firing and resolved alerts (default) - + SEARCH & FILTERING: - search: Search in alert content, labels, or descriptions - sort: Order by 'startAt' (trigger time), 'triggerTimes' (frequency), 'status' - order: 'asc' (oldest first) or 'desc' (newest first, default) - + PAGINATION: - pageIndex: Page number starting from 0 - pageSize: Number of alerts per page (default: 10, max recommended: 50) - + EXAMPLE AND COMMON USE CASES: - Recent active alerts: alertType='single', status='firing', sort='startAt', order='desc' - Historical analysis: alertType='single', status='resolved', pageSize=50 @@ -115,7 +115,7 @@ public class AlertToolsImpl implements AlertTools { // Handle different alert types if ("single".equalsIgnoreCase(alertType) || "both".equalsIgnoreCase(alertType)) { Page<SingleAlert> singleResult = alertService.getSingleAlerts(status, search, sort, order, pageIndex, pageSize); - + response.append("SINGLE ALERTS:\n"); response.append("Found ").append(singleResult.getContent().size()).append(" single alerts (Total: ").append(singleResult.getTotalElements()).append("):\n\n"); @@ -124,7 +124,7 @@ public class AlertToolsImpl implements AlertTools { response.append("Status: ").append(alert.getStatus()).append("\n"); response.append("Content: ").append(alert.getContent() != null ? alert.getContent() : "No content").append("\n"); response.append("Trigger Times: ").append(alert.getTriggerTimes()).append("\n"); - + if (alert.getStartAt() != null) { response.append("Started At: ").append(UtilityClass.formatTimestamp(alert.getStartAt())).append("\n"); } @@ -134,7 +134,7 @@ public class AlertToolsImpl implements AlertTools { if (alert.getEndAt() != null) { response.append("Ended At: ").append(UtilityClass.formatTimestamp(alert.getEndAt())).append("\n"); } - + if (alert.getLabels() != null && !alert.getLabels().isEmpty()) { response.append("Labels: ").append(alert.getLabels()).append("\n"); } @@ -151,9 +151,9 @@ public class AlertToolsImpl implements AlertTools { if ("both".equalsIgnoreCase(alertType)) { response.append("\n"); } - - Page<GroupAlert> groupResult = alertService.getGroupAlerts(status, search, sort, order, pageIndex, pageSize); - + + Page<GroupAlert> groupResult = alertService.getGroupAlerts(status, search, null, sort, order, pageIndex, pageSize); + response.append("GROUP ALERTS:\n"); response.append("Found ").append(groupResult.getContent().size()).append(" group alerts (Total: ").append(groupResult.getTotalElements()).append("):\n\n"); @@ -161,14 +161,14 @@ public class AlertToolsImpl implements AlertTools { response.append("Group Alert ID: ").append(alert.getId()).append("\n"); response.append("Status: ").append(alert.getStatus()).append("\n"); response.append("Group Key: ").append(alert.getGroupKey() != null ? alert.getGroupKey() : "No group key").append("\n"); - + if (alert.getGmtCreate() != null) { response.append("Created At: ").append(alert.getGmtCreate()).append("\n"); } if (alert.getGmtUpdate() != null) { response.append("Updated At: ").append(alert.getGmtUpdate()).append("\n"); } - + if (alert.getCommonLabels() != null && !alert.getCommonLabels().isEmpty()) { response.append("Common Labels: ").append(alert.getCommonLabels()).append("\n"); } diff --git a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java index 7495cf83eb..b89eaf11d4 100644 --- a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java +++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java @@ -32,7 +32,7 @@ import org.springframework.ai.tool.annotation.ToolParam; import org.springframework.beans.factory.annotation.Autowired; import org.apache.hertzbeat.common.entity.manager.Monitor; import org.apache.hertzbeat.common.entity.manager.Param; -import org.apache.hertzbeat.common.entity.manager.ParamDefine; +import org.apache.hertzbeat.manager.pojo.dto.ParamDefineInfo; import java.util.ArrayList; import java.util.List; @@ -280,7 +280,9 @@ public class MonitorToolsImpl implements MonitorTools { // Validate that all required parameters for this monitor type are provided try { - MonitorDto monitorDto = MonitorDto.builder().monitor(monitor).params(paramList).build(); + MonitorDto monitorDto = new MonitorDto(); + monitorDto.setMonitor(monitor); + monitorDto.setParams(paramList); monitorService.validate(monitorDto, false); } catch (IllegalArgumentException argumentException) { if (argumentException.getMessage().contains("required")) { @@ -456,7 +458,7 @@ public class MonitorToolsImpl implements MonitorTools { } // Get parameter definitions from app service - List<ParamDefine> paramDefines = appService.getAppParamDefines(app.toLowerCase().trim()); + List<ParamDefineInfo> paramDefines = appService.getAppParamDefines(app.toLowerCase().trim()); if (paramDefines == null || paramDefines.isEmpty()) { return String.format("No parameter definitions found for monitor type '%s'. " @@ -468,7 +470,7 @@ public class MonitorToolsImpl implements MonitorTools { response.append(String.format("Parameter Definitions for Monitor Type '%s' (Total: %d):\n\n", app, paramDefines.size())); - for (ParamDefine paramDefine : paramDefines) { + for (ParamDefineInfo paramDefine : paramDefines) { response.append("• Field: ").append(paramDefine.getField()).append("\n"); // Add display name if available --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
