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

liuhongyu 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 bd1924b01 [bugfix] fix service discovery host field  
NullPointerException (#3767)
bd1924b01 is described below

commit bd1924b016c3a0a0f0d96eb827109095710cddf3
Author: kangli <[email protected]>
AuthorDate: Tue Sep 23 21:23:40 2025 +0800

    [bugfix] fix service discovery host field  NullPointerException (#3767)
    
    Co-authored-by: kangli <[email protected]>
    Co-authored-by: Calvin <[email protected]>
    Co-authored-by: Sherlock Yin <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../hertzbeat/collector/metrics/HertzBeatMetricsCollector.java    | 5 +++++
 .../apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java | 8 +++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/metrics/HertzBeatMetricsCollector.java
 
b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/metrics/HertzBeatMetricsCollector.java
index 66e4b9995..ebbee45bb 100644
--- 
a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/metrics/HertzBeatMetricsCollector.java
+++ 
b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/metrics/HertzBeatMetricsCollector.java
@@ -24,6 +24,7 @@ import io.micrometer.core.instrument.Timer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.job.Job;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.time.Duration;
 import java.util.Map;
@@ -58,6 +59,10 @@ public class HertzBeatMetricsCollector {
         Map<String, String> metadata = job.getMetadata();
         String monitorName = metadata != null ? metadata.get("instancename") : 
"unknown";
         String monitorTarget = metadata != null ? metadata.get("instancehost") 
: "unknown";
+        // todo can not get the host from service discovery
+        if (!StringUtils.hasText(monitorTarget)) {
+            monitorTarget = "unknown";
+        }
 
         // Record collection count
         Counter.builder("hertzbeat.collect.total")
diff --git 
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
index 26ada75da..0661d6c1b 100644
--- 
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
+++ 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
@@ -276,7 +276,8 @@ public class MonitorServiceImpl implements MonitorService {
     public void validate(MonitorDto monitorDto, Boolean isModify) throws 
IllegalArgumentException {
         // The request monitoring parameter matches the monitoring parameter 
definition mapping check
         Monitor monitor = monitorDto.getMonitor();
-        monitor.setHost(monitor.getHost().trim());
+        // The Service Discovery host field may be null
+        monitor.setHost(StringUtils.hasText(monitor.getHost()) ? 
monitor.getHost().trim() : null);
         monitor.setName(monitor.getName().trim());
         Map<String, Param> paramMap = monitorDto.getParams()
                 .stream()
@@ -316,9 +317,14 @@ public class MonitorServiceImpl implements MonitorService {
         // Parameter definition structure verification
         List<ParamDefine> paramDefines = 
appService.getAppParamDefines(monitorDto.getMonitor().getApp());
         if (!CollectionUtils.isEmpty(paramDefines)) {
+            boolean isStatic = 
CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) || 
!StringUtils.hasText(monitor.getScrape());
             for (ParamDefine paramDefine : paramDefines) {
                 String field = paramDefine.getField();
                 Param param = paramMap.get(field);
+                // Get the host from service discovery
+                if (!isStatic && "host".equals(field)) {
+                    continue;
+                }
                 if (paramDefine.isRequired() && (param == null || 
param.getParamValue() == null)) {
                     throw new IllegalArgumentException("Params field " + field 
+ " is required.");
                 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to