From 6fde9fe04f86a3376fc657f10b8aa32e4bc97436 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 17:50:15 +0800
Subject: [PATCH] feat: add auto tune console page

---
 src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java |   30 ++++++++++++++++++++++++------
 1 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java b/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
index 8b26ec5..e6420de 100644
--- a/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
+++ b/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
@@ -75,6 +75,15 @@
             return AutoTuneCoordinatorResult.skipped("interval_not_reached");
         }
 
+        return runAgentWithLock(AutoTuneTriggerType.AUTO.getCode(), intervalMinutes, true);
+    }
+
+    @Override
+    public AutoTuneCoordinatorResult runManualAutoTune() {
+        return runAgentWithLock(AutoTuneTriggerType.MANUAL.getCode(), null, false);
+    }
+
+    private AutoTuneCoordinatorResult runAgentWithLock(String triggerType, Integer intervalMinutes, boolean writeGuard) {
         String lockKey = RedisKeyType.AI_AUTO_TUNE_RUNNING_LOCK.key;
         String lockToken = UUID.randomUUID().toString();
         if (!redisUtil.trySetStringIfAbsent(lockKey, lockToken, RUNNING_LOCK_SECONDS)) {
@@ -83,13 +92,15 @@
 
         AutoTuneAgentService.AutoTuneAgentResult agentResult = null;
         try {
-            safeMarkLastTriggerGuard(intervalMinutes);
-            agentResult = autoTuneAgentService.runAutoTune(AutoTuneTriggerType.AUTO.getCode());
+            if (writeGuard && intervalMinutes != null) {
+                safeMarkLastTriggerGuard(intervalMinutes);
+            }
+            agentResult = autoTuneAgentService.runAutoTune(triggerType);
             safeWriteOperateLog(agentResult);
             return AutoTuneCoordinatorResult.triggered(agentResult);
         } catch (Exception exception) {
             log.error("Auto tune coordinator failed to run agent", exception);
-            agentResult = failedAgentResult(exception);
+            agentResult = failedAgentResult(triggerType, exception);
             safeWriteOperateLog(agentResult);
             return AutoTuneCoordinatorResult.triggered(agentResult);
         } finally {
@@ -173,10 +184,10 @@
                 String.valueOf(System.currentTimeMillis()), expireSeconds);
     }
 
-    private AutoTuneAgentService.AutoTuneAgentResult failedAgentResult(Exception exception) {
+    private AutoTuneAgentService.AutoTuneAgentResult failedAgentResult(String triggerType, Exception exception) {
         AutoTuneAgentService.AutoTuneAgentResult result = new AutoTuneAgentService.AutoTuneAgentResult();
         result.setSuccess(false);
-        result.setTriggerType(AutoTuneTriggerType.AUTO.getCode());
+        result.setTriggerType(triggerType);
         result.setSummary("鑷姩璋冨弬鍚庡彴浠诲姟鎵ц寮傚父: " + exception.getMessage());
         result.setToolCallCount(0);
         result.setLlmCallCount(0);
@@ -200,7 +211,7 @@
             return;
         }
         OperateLog operateLog = new OperateLog();
-        operateLog.setAction("ai_auto_tune_background_scheduler");
+        operateLog.setAction(resolveOperateLogAction(agentResult));
         operateLog.setUserId(SYSTEM_USER_ID);
         operateLog.setIp("system");
         operateLog.setRequest(JSON.toJSONString(buildRequestSummary(agentResult)));
@@ -209,6 +220,13 @@
         operateLogService.save(operateLog);
     }
 
+    private String resolveOperateLogAction(AutoTuneAgentService.AutoTuneAgentResult agentResult) {
+        if (agentResult != null && AutoTuneTriggerType.MANUAL.getCode().equals(agentResult.getTriggerType())) {
+            return "ai_auto_tune_manual_trigger";
+        }
+        return "ai_auto_tune_background_scheduler";
+    }
+
     private Map<String, Object> buildRequestSummary(AutoTuneAgentService.AutoTuneAgentResult agentResult) {
         Map<String, Object> request = new LinkedHashMap<>();
         request.put("trigger", agentResult.getTriggerType());

--
Gitblit v1.9.1