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