This is an automated email from the ASF dual-hosted git repository.
tomsun28 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 d5cf683f4f [bugfix] Fix imported monitor instance being empty due to
host/instan… (#4142)
d5cf683f4f is described below
commit d5cf683f4f03b619fbdf3adcad25f227eaa60fe7
Author: starryCoder <[email protected]>
AuthorDate: Fri May 29 00:19:38 2026 +0800
[bugfix] Fix imported monitor instance being empty due to host/instan…
(#4142)
Co-authored-by: Tomsun28 <[email protected]>
Co-authored-by: lynx009 <[email protected]>
---
.../service/impl/AbstractImExportServiceImpl.java | 11 +++
.../manager/service/JsonImExportServiceTest.java | 80 +++++++++++++++++++++-
2 files changed, 89 insertions(+), 2 deletions(-)
diff --git
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java
index 7bf85944de..1dab35ae7b 100644
---
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java
+++
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java
@@ -127,6 +127,17 @@ public abstract class AbstractImExportServiceImpl
implements ImExportService {
if (exportMonitor.monitor != null) {
// Add one more null check
BeanUtils.copyProperties(exportMonitor.monitor, monitor);
+ if (exportMonitor.params != null) {
+ String host = exportMonitor.params.stream()
+ .filter(p -> "host".equals(p.field)).findFirst()
+ .map(p -> p.value).orElse(null);
+ String port = exportMonitor.params.stream()
+ .filter(p -> "port".equals(p.field)).findFirst()
+ .map(p -> p.value).orElse(null);
+ if (host != null) {
+ monitor.setInstance(port != null ? host + ":" + port :
host);
+ }
+ }
}
monitorDto.setMonitor(monitor);
if (exportMonitor.getMonitor() != null) {
diff --git
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/JsonImExportServiceTest.java
b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/JsonImExportServiceTest.java
index 3c36a18c33..57c69168b5 100644
---
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/JsonImExportServiceTest.java
+++
b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/JsonImExportServiceTest.java
@@ -21,26 +21,47 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.doNothing;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import org.apache.hertzbeat.common.entity.manager.Monitor;
+import org.apache.hertzbeat.common.entity.manager.Param;
+import org.apache.hertzbeat.manager.config.ManagerSseManager;
import org.apache.hertzbeat.manager.service.impl.AbstractImExportServiceImpl;
import org.apache.hertzbeat.manager.service.impl.JsonImExportServiceImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
/**
* Test case for {@link JsonImExportServiceImpl}
*/
-
+@ExtendWith(MockitoExtension.class)
class JsonImExportServiceTest {
private JsonImExportServiceImpl jsonImExportService;
+ @Mock
+ private MonitorService monitorService;
+
+ @Mock
+ private ManagerSseManager managerSseManager;
+
@BeforeEach
- public void setUp() {
+ public void setUp() throws Exception {
jsonImExportService = new JsonImExportServiceImpl();
+ Field monitorServiceField =
jsonImExportService.getClass().getSuperclass().getDeclaredField("monitorService");
+ monitorServiceField.setAccessible(true);
+ monitorServiceField.set(jsonImExportService, monitorService);
+ Field sseField =
jsonImExportService.getClass().getSuperclass().getDeclaredField("managerSseManager");
+ sseField.setAccessible(true);
+ sseField.set(jsonImExportService, managerSseManager);
}
@Test
@@ -89,4 +110,59 @@ class JsonImExportServiceTest {
assertEquals("JSON", jsonImExportService.type());
}
+ @Test
+ void testImportConfig_shouldSetInstanceFromHostAndPortParams() {
+ String json =
"[{\"monitor\":{\"name\":\"test\",\"app\":\"windows\",\"intervals\":6000,\"status\":1},"
+ +
"\"params\":[{\"field\":\"host\",\"type\":1,\"value\":\"localhost\"},"
+ + "{\"field\":\"port\",\"type\":0,\"value\":\"161\"}]}]";
+
+ ArgumentCaptor<Monitor> monitorCaptor =
ArgumentCaptor.forClass(Monitor.class);
+ ArgumentCaptor<List<Param>> paramsCaptor =
ArgumentCaptor.forClass(List.class);
+ doNothing().when(monitorService).addMonitor(monitorCaptor.capture(),
paramsCaptor.capture(),
+ org.mockito.Mockito.any(), org.mockito.Mockito.any());
+
+ ByteArrayInputStream bis = new
ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
+ jsonImExportService.importConfig("test.json", bis);
+
+ Monitor captured = monitorCaptor.getValue();
+ assertEquals("localhost:161", captured.getInstance());
+ assertEquals("test", captured.getName());
+ assertEquals("windows", captured.getApp());
+
+ List<Param> capturedParams = paramsCaptor.getValue();
+ assertNotNull(capturedParams);
+ assertEquals(2, capturedParams.size());
+ }
+
+ @Test
+ void testImportConfig_shouldSetInstanceWithHostOnly() {
+ String json =
"[{\"monitor\":{\"name\":\"test\",\"app\":\"linux\",\"intervals\":6000,\"status\":1},"
+ +
"\"params\":[{\"field\":\"host\",\"type\":1,\"value\":\"192.168.1.1\"}]}]";
+
+ ArgumentCaptor<Monitor> monitorCaptor =
ArgumentCaptor.forClass(Monitor.class);
+ doNothing().when(monitorService).addMonitor(monitorCaptor.capture(),
+ org.mockito.Mockito.any(), org.mockito.Mockito.any(),
org.mockito.Mockito.any());
+
+ ByteArrayInputStream bis = new
ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
+ jsonImExportService.importConfig("test.json", bis);
+
+ Monitor captured = monitorCaptor.getValue();
+ assertEquals("192.168.1.1", captured.getInstance());
+ }
+
+ @Test
+ void testImportConfig_shouldHandleNoHostParam() {
+ String json =
"[{\"monitor\":{\"name\":\"test\",\"app\":\"website\",\"intervals\":6000,\"status\":1},"
+ +
"\"params\":[{\"field\":\"url\",\"type\":1,\"value\":\"http://example.com\"}]}]";
+
+ ArgumentCaptor<Monitor> monitorCaptor =
ArgumentCaptor.forClass(Monitor.class);
+ doNothing().when(monitorService).addMonitor(monitorCaptor.capture(),
+ org.mockito.Mockito.any(), org.mockito.Mockito.any(),
org.mockito.Mockito.any());
+
+ ByteArrayInputStream bis = new
ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
+ jsonImExportService.importConfig("test.json", bis);
+
+ Monitor captured = monitorCaptor.getValue();
+ assertEquals(null, captured.getInstance());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]