This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new bf03220d fix(audit): record data source create, update and delete 
operations (#1658)
bf03220d is described below

commit bf03220dcdac0e5253a0fccfd1777e99d8088dc3
Author: aias00 <[email protected]>
AuthorDate: Tue Aug 11 20:45:53 2026 +0800

    fix(audit): record data source create, update and delete operations (#1658)
---
 .../rocketmq/studio/settings/SettingsService.java  | 28 +++++++++++++++++++++-
 .../studio/settings/SettingsServiceTest.java       |  6 +++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java 
b/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
index 6364e2a7..0845bad9 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/settings/SettingsService.java
@@ -120,6 +120,28 @@ public class SettingsService {
         }
     }
 
+    private void recordDataSourceAudit(String operation, DataSourceVO 
dataSource) {
+        if (dataSource == null) {
+            return;
+        }
+        String detail = String.format("name=%s, type=%s, instanceCount=%d", 
dataSource.getName(),
+                dataSource.getType(), dataSource.getInstanceIds() == null ? 0 
: dataSource.getInstanceIds().size());
+        recordDataSourceAudit(operation, dataSource.getKey(), detail);
+    }
+
+    private void recordDataSourceDeleteAudit(String key) {
+        recordDataSourceAudit("DELETE_DATA_SOURCE", key, "key=" + key);
+    }
+
+    private void recordDataSourceAudit(String operation, String key, String 
detail) {
+        try {
+            operationAuditService.record(operation, "METRICS_DATA_SOURCE", 
key, null, detail, "SUCCESS", null);
+        } catch (Exception auditFailure) {
+            log.warn("Failed to record data source audit operation={} key={}: 
{}", operation, key,
+                    auditFailure.getMessage());
+        }
+    }
+
 
     public List<DataSourceVO> listDataSources() {
         log.debug("Listing all data sources");
@@ -133,7 +155,9 @@ public class SettingsService {
         }
         log.info("Creating data source: {}", dataSource.getName());
         dataSource.setKey(UUID.randomUUID().toString());
-        return settingsRepository.saveDataSource(dataSource);
+        DataSourceVO saved = settingsRepository.saveDataSource(dataSource);
+        recordDataSourceAudit("CREATE_DATA_SOURCE", saved);
+        return saved;
     }
 
 
@@ -147,6 +171,7 @@ public class SettingsService {
         if (!settingsRepository.replaceDataSource(dataSource)) {
             throw new BusinessException(404, "Data source not found: " + key);
         }
+        recordDataSourceAudit("UPDATE_DATA_SOURCE", dataSource);
         return dataSource;
     }
 
@@ -157,6 +182,7 @@ public class SettingsService {
         if (!settingsRepository.deleteDataSource(normalizedKey)) {
             throw new BusinessException(404, "Data source not found: " + 
normalizedKey);
         }
+        recordDataSourceDeleteAudit(normalizedKey);
     }
 
 
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
index 1b3d9ba9..5bee1216 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/settings/SettingsServiceTest.java
@@ -232,6 +232,8 @@ class SettingsServiceTest {
         assertThat(result.getKey()).isNotBlank();
         assertThat(result.getName()).isEqualTo("New DS");
         verify(settingsRepository).saveDataSource(input);
+        verify(operationAuditService).record("CREATE_DATA_SOURCE", 
"METRICS_DATA_SOURCE", result.getKey(),
+                null, "name=New DS, type=rocketmq, instanceCount=0", 
"SUCCESS", null);
     }
 
     @Test
@@ -268,6 +270,8 @@ class SettingsServiceTest {
         assertThat(result.getKey()).isEqualTo("ds-1");
         assertThat(result.getName()).isEqualTo("Updated DS");
         verify(settingsRepository).replaceDataSource(input);
+        verify(operationAuditService).record("UPDATE_DATA_SOURCE", 
"METRICS_DATA_SOURCE", "ds-1",
+                null, "name=Updated DS, type=rocketmq, instanceCount=0", 
"SUCCESS", null);
     }
 
     @Test
@@ -317,6 +321,8 @@ class SettingsServiceTest {
         settingsService.deleteDataSource("ds-1");
 
         verify(settingsRepository).deleteDataSource("ds-1");
+        verify(operationAuditService).record("DELETE_DATA_SOURCE", 
"METRICS_DATA_SOURCE", "ds-1",
+                null, "key=ds-1", "SUCCESS", null);
     }
 
     @Test

Reply via email to