This is an automated email from the ASF dual-hosted git repository.
Duansg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/master by this push:
new 4feff12e32 fix(alert): keep datasource in alert rule export/import
(#4264)
4feff12e32 is described below
commit 4feff12e320edfd5e79628d9ae328373362b60fa
Author: NekoPunch <[email protected]>
AuthorDate: Sun Aug 9 10:34:47 2026 -0700
fix(alert): keep datasource in alert rule export/import (#4264)
Co-authored-by: Duansg <[email protected]>
---
.../apache/hertzbeat/alert/dto/AlertDefineDTO.java | 2 ++
.../impl/AlertDefineExcelImExportServiceImpl.java | 6 ++++-
.../AlertDefineExcelImExportServiceTest.java | 5 ++++
.../AlertDefineJsonImExportServiceTest.java | 30 +++++++++++++++++++++-
.../AlertDefineYamlImExportServiceTest.java | 3 +++
5 files changed, 44 insertions(+), 2 deletions(-)
diff --git
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/AlertDefineDTO.java
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/AlertDefineDTO.java
index 3ac01585db..674ee9deb3 100644
---
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/AlertDefineDTO.java
+++
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/AlertDefineDTO.java
@@ -51,4 +51,6 @@ public class AlertDefineDTO {
private String template;
@Excel(name = "Enable")
private Boolean enable;
+ @Excel(name = "Datasource")
+ private String datasource;
}
diff --git
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertDefineExcelImExportServiceImpl.java
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertDefineExcelImExportServiceImpl.java
index 91feab35d4..ca6af4f41c 100644
---
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertDefineExcelImExportServiceImpl.java
+++
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertDefineExcelImExportServiceImpl.java
@@ -155,6 +155,7 @@ public class AlertDefineExcelImExportServiceImpl extends
AlertDefineAbstractImEx
alertDefineDTO.setAnnotations(JsonUtil.fromJson(getCellValueAsString(row.getCell(6)),
typeReference));
alertDefineDTO.setTemplate(getCellValueAsString(row.getCell(7)));
alertDefineDTO.setEnable(getCellValueAsBoolean(row.getCell(8)));
+ alertDefineDTO.setDatasource(getCellValueAsString(row.getCell(9)));
return alertDefineDTO;
}
@@ -186,7 +187,7 @@ public class AlertDefineExcelImExportServiceImpl extends
AlertDefineAbstractImEx
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// set header
- String[] headers = {"Name", "Type", "Expr", "Period", "Times",
"Labels", "Annotations", "Template", "Enable"};
+ String[] headers = {"Name", "Type", "Expr", "Period", "Times",
"Labels", "Annotations", "Template", "Enable", "Datasource"};
Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
@@ -227,6 +228,9 @@ public class AlertDefineExcelImExportServiceImpl extends
AlertDefineAbstractImEx
Cell enableCell = row.createCell(8);
enableCell.setCellValue(alertDefineDTO.getEnable());
enableCell.setCellStyle(cellStyle);
+ Cell datasourceCell = row.createCell(9);
+ datasourceCell.setCellValue(alertDefineDTO.getDatasource());
+ datasourceCell.setCellStyle(cellStyle);
}
workbook.write(os);
os.close();
diff --git
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineExcelImExportServiceTest.java
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineExcelImExportServiceTest.java
index 885898f0a7..34875e3d27 100644
---
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineExcelImExportServiceTest.java
+++
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineExcelImExportServiceTest.java
@@ -69,6 +69,7 @@ public class AlertDefineExcelImExportServiceTest {
row.createCell(6).setCellValue(JsonUtil.toJson(Map.of("key",
"value")));
row.createCell(7).setCellValue("template1");
row.createCell(8).setCellValue(true);
+ row.createCell(9).setCellValue("promql");
ByteArrayInputStream inputStream = new
ByteArrayInputStream(toByteArray(initialWorkbook));
@@ -93,6 +94,7 @@ public class AlertDefineExcelImExportServiceTest {
assertEquals(Map.of("key", "value"),
alertDefineDTO.getAnnotations());
assertEquals("template1", alertDefineDTO.getTemplate());
assertTrue(alertDefineDTO.getEnable());
+ assertEquals("promql", alertDefineDTO.getDatasource());
}
}
@@ -111,6 +113,7 @@ public class AlertDefineExcelImExportServiceTest {
alertDefineDTO.setAnnotations(Map.of("key", "value"));
alertDefineDTO.setTemplate("template1");
alertDefineDTO.setEnable(true);
+ alertDefineDTO.setDatasource("promql");
exportAlertDefineDTO.setAlertDefine(alertDefineDTO);
exportAlertDefineList.add(exportAlertDefineDTO);
@@ -129,6 +132,7 @@ public class AlertDefineExcelImExportServiceTest {
assertEquals("Annotations",
headerRow.getCell(6).getStringCellValue());
assertEquals("Template",
headerRow.getCell(7).getStringCellValue());
assertEquals("Enable",
headerRow.getCell(8).getStringCellValue());
+ assertEquals("Datasource",
headerRow.getCell(9).getStringCellValue());
Row dataRow = resultSheet.getRow(1);
assertEquals("app1", dataRow.getCell(0).getStringCellValue());
@@ -140,6 +144,7 @@ public class AlertDefineExcelImExportServiceTest {
assertEquals(JsonUtil.toJson(Map.of("key", "value")),
dataRow.getCell(6).getStringCellValue());
assertEquals("template1",
dataRow.getCell(7).getStringCellValue());
assertTrue(dataRow.getCell(8).getBooleanCellValue());
+ assertEquals("promql",
dataRow.getCell(9).getStringCellValue());
}
}
}
diff --git
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineJsonImExportServiceTest.java
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineJsonImExportServiceTest.java
index d0727c0dca..9674f6ec8b 100644
---
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineJsonImExportServiceTest.java
+++
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineJsonImExportServiceTest.java
@@ -21,6 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
@@ -29,8 +31,10 @@ import java.util.List;
import org.apache.hertzbeat.alert.dto.AlertDefineDTO;
import org.apache.hertzbeat.alert.dto.ExportAlertDefineDTO;
import
org.apache.hertzbeat.alert.service.impl.AlertDefineJsonImExportServiceImpl;
+import org.apache.hertzbeat.common.entity.alerter.AlertDefine;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.springframework.test.util.ReflectionTestUtils;
/**
* test case for {@link AlertDefineJsonImExportServiceImpl}
@@ -43,7 +47,7 @@ class AlertDefineJsonImExportServiceTest {
@SuppressWarnings("checkstyle:OperatorWrap")
private static final String JSON_DATA =
"[{\"alertDefine\":{\"name\":\"App1\",\"type\":\"realtime\"," +
"\"expr\":\"Expr1\",\"period\":3000,\"times\":3," +
- "\"enable\":true,\"template\":\"Template1\"}}]";
+
"\"enable\":true,\"template\":\"Template1\",\"datasource\":\"promql\"}}]";
private InputStream inputStream;
private List<ExportAlertDefineDTO> alertDefineList;
@@ -77,6 +81,7 @@ class AlertDefineJsonImExportServiceTest {
assertEquals(1, result.size());
assertEquals("App1", result.get(0).getAlertDefine().getName());
assertEquals("realtime", result.get(0).getAlertDefine().getType());
+ assertEquals("promql", result.get(0).getAlertDefine().getDatasource());
}
@Test
@@ -100,6 +105,29 @@ class AlertDefineJsonImExportServiceTest {
assertTrue(result.contains("realtime"));
}
+ @Test
+ void testExportKeepsDatasource() {
+ AlertDefineService alertDefineService = mock(AlertDefineService.class);
+ AlertDefine define = AlertDefine.builder()
+ .name("test")
+ .type("periodic_metric")
+ .expr("cpu_usage{instance=\"server1\"} > 80")
+ .datasource("promql")
+ .period(300)
+ .times(3)
+ .template("test")
+ .enable(true)
+ .build();
+ when(alertDefineService.getAlertDefine(1L)).thenReturn(define);
+ ReflectionTestUtils.setField(service, "alertDefineService",
alertDefineService);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ service.exportConfig(outputStream, List.of(1L));
+
+ String result = outputStream.toString(StandardCharsets.UTF_8);
+ assertTrue(result.contains("promql"), "exported config should keep
datasource, but got: " + result);
+ }
+
@Test
void testType() {
assertEquals("JSON", service.type());
diff --git
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java
index 692b633b8d..8383d82377 100644
---
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java
+++
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java
@@ -64,6 +64,7 @@ class AlertDefineYamlImExportServiceTest {
times: 3
enable: true
template: Template1
+ datasource: promql
""";
private InputStream inputStream;
@@ -82,6 +83,7 @@ class AlertDefineYamlImExportServiceTest {
alertDefine.setExpr("Expr1");
alertDefine.setEnable(true);
alertDefine.setTemplate("Template1");
+ alertDefine.setDatasource("promql");
ExportAlertDefineDTO exportAlertDefine = new ExportAlertDefineDTO();
exportAlertDefine.setAlertDefine(alertDefine);
@@ -135,6 +137,7 @@ class AlertDefineYamlImExportServiceTest {
assertTrue(yamlOutput.contains("name: App1"));
assertTrue(yamlOutput.contains("type: realtime"));
assertTrue(yamlOutput.contains("expr: Expr1"));
+ assertTrue(yamlOutput.contains("datasource: promql"));
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]