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

gongchao 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 d52ae67b1 [improve][HIP] HIP-01: Implement refactoring AbstractCollect 
(#1966)
d52ae67b1 is described below

commit d52ae67b1243a2a5cba8626bcfecfd852ec40651
Author: crossoverJie <[email protected]>
AuthorDate: Mon May 13 00:05:51 2024 +0800

    [improve][HIP] HIP-01: Implement refactoring AbstractCollect (#1966)
    
    Co-authored-by: tomsun28 <[email protected]>
---
 .../collector/collect/AbstractCollect.java         |   8 ++
 .../collect/database/JdbcCommonCollect.java        |  35 ++---
 .../collector/collect/dns/DnsCollectImpl.java      |  10 +-
 .../collector/collect/ftp/FtpCollectImpl.java      |  37 ++----
 .../collector/collect/http/HttpCollectImpl.java    |  41 +++---
 .../collect/http/SslCertificateCollectImpl.java    |  31 +++--
 .../collector/collect/httpsd/HttpsdImpl.java       |  14 +-
 .../collector/collect/icmp/IcmpCollectImpl.java    |  14 +-
 .../collector/collect/jmx/JmxCollectImpl.java      |  20 +--
 .../collect/memcached/MemcachedCollectImpl.java    |  13 +-
 .../collect/mongodb/MongodbSingleCollectImpl.java  |  33 ++---
 .../collect/mq/RocketmqSingleCollectImpl.java      |  28 ++--
 .../nebulagraph/NebulaGraphCollectImpl.java        |  12 +-
 .../collect/nebulagraph/NgqlCollectImpl.java       |  27 ++--
 .../collector/collect/nginx/NginxCollectImpl.java  |  33 ++---
 .../collector/collect/ntp/NtpCollectImpl.java      |  12 +-
 .../collector/collect/pop3/Pop3CollectImpl.java    |  28 ++--
 .../collector/collect/push/PushCollectImpl.java    |   4 +
 .../collect/redfish/RedfishCollectImpl.java        |  30 ++---
 .../collect/redis/RedisCommonCollectImpl.java      |  21 +--
 .../collector/collect/smtp/SmtpCollectImpl.java    |  12 +-
 .../collector/collect/snmp/SnmpCollectImpl.java    |  28 ++--
 .../collector/collect/ssh/SshCollectImpl.java      |  20 +--
 .../collect/telnet/TelnetCollectImpl.java          |  11 +-
 .../collector/collect/udp/UdpCollectImpl.java      |  12 +-
 .../collect/websocket/WebsocketCollectImpl.java    |  13 +-
 .../collector/dispatch/MetricsCollect.java         |   7 +-
 .../collector/collect/ftp/FtpCollectImplTest.java  |   7 +-
 .../collector/collect/httpsd/HttpsdImplTest.java   |   4 +-
 .../collect/nebulagraph/NgqlCollectImplTest.java   |   5 +-
 .../collect/nginx/NginxCollectImplTest.java        |  12 +-
 .../collector/collect/ntp/NtpCollectImplTest.java  |   1 +
 .../collect/redfish/RedfishCollectImplTest.java    | 148 +++++++++++----------
 .../collect/redis/RedisClusterCollectImplTest.java |   1 +
 .../collect/redis/RedisSingleCollectImplTest.java  |   1 +
 .../collect/telnet/TelnetCollectImplTest.java      |   2 +
 .../collector/collect/udp/UdpCollectImplTest.java  |  15 ++-
 .../websocket/WebsocketCollectImplTest.java        |   1 +
 38 files changed, 361 insertions(+), 390 deletions(-)

diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java
index 07bbf6642..82caa0012 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java
@@ -26,6 +26,14 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
  */
 public abstract class AbstractCollect {
 
+    /**
+     * Pre-check metrics
+     * @param metrics metric configuration
+     * @throws IllegalArgumentException when validation failed
+     */
+    public abstract void preCheck(Metrics metrics) throws 
IllegalArgumentException;
+
+
     /**
      * Real acquisition implementation interface
      * @param builder response builder
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java
index f1bf2872b..22943694c 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java
@@ -63,17 +63,23 @@ public class JdbcCommonCollect extends AbstractCollect {
         connectionCommonCache = new ConnectionCommonCache<>();
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getJdbc() == null) {
+            throw new IllegalArgumentException("Database collect must has jdbc 
params");
+        }
+        if (StringUtils.hasText(metrics.getJdbc().getUrl())) {
+            for (String keyword : VULNERABLE_KEYWORDS) {
+                if (metrics.getJdbc().getUrl().contains(keyword)) {
+                    throw new IllegalArgumentException("Jdbc url prohibit 
contains vulnerable param " + keyword);
+                }
+            }
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
-        // check the params
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         JdbcProtocol jdbcProtocol = metrics.getJdbc();
         String databaseUrl = constructDatabaseUrl(jdbcProtocol);
         int timeout = CollectUtil.getTimeout(jdbcProtocol.getTimeout());
@@ -311,17 +317,4 @@ public class JdbcCommonCollect extends AbstractCollect {
             default -> throw new IllegalArgumentException("Not support 
database platform: " + jdbcProtocol.getPlatform());
         };
     }
-
-    private void validateParams(Metrics metrics) throws 
IllegalArgumentException {
-        if (metrics == null || metrics.getJdbc() == null) {
-            throw new IllegalArgumentException("Database collect must has jdbc 
params");
-        }
-        if (StringUtils.hasText(metrics.getJdbc().getUrl())) {
-            for (String keyword : VULNERABLE_KEYWORDS) {
-                if (metrics.getJdbc().getUrl().contains(keyword)) {
-                    throw new IllegalArgumentException("Jdbc url prohibit 
contains vulnerable param " + keyword);
-                }
-            }
-        }
-    }
 }
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java
index 58cb70409..c85565b21 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java
@@ -92,17 +92,19 @@ public class DnsCollectImpl extends AbstractCollect {
 
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         // compatible with monitoring template configurations of older versions
         if (StringUtils.isBlank(metrics.getDns().getQueryClass())) {
             metrics.getDns().setQueryClass(DClass.string(DClass.IN));
         }
         // check params
         if (checkDnsProtocolFailed(metrics.getDns())) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("DNS collect must have a valid DNS protocol param! 
");
-            return;
+            throw new IllegalArgumentException("DNS collect must have a valid 
DNS protocol param! ");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
 
         DnsResolveResult dnsResolveResult;
         try {
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java
index e03f527b3..e287eea33 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java
@@ -41,20 +41,25 @@ public class FtpCollectImpl extends AbstractCollect {
     private static final String ANONYMOUS = "anonymous";
     private static final String PASSWORD = "password";
 
+    /**
+     * preCheck params
+     */
+    public void preCheck(Metrics metrics) throws IllegalArgumentException{
+        if (metrics == null || metrics.getFtp() == null) {
+            throw new IllegalArgumentException("Ftp collect must has ftp 
params.");
+        }
+        FtpProtocol ftpProtocol = metrics.getFtp();
+        Assert.hasText(ftpProtocol.getHost(), "Ftp Protocol host is 
required.");
+        Assert.hasText(ftpProtocol.getPort(), "Ftp Protocol port is 
required.");
+        Assert.hasText(ftpProtocol.getDirection(), "Ftp Protocol direction is 
required.");
+        Assert.hasText(ftpProtocol.getTimeout(), "Ftp Protocol timeout is 
required.");
+    }
+
 
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         FTPClient ftpClient = new FTPClient();
         FtpProtocol ftpProtocol = metrics.getFtp();
-        // Judge whether the basic information is wrong
-        try {
-            preCheck(metrics);
-        } catch (Exception e) {
-            log.info("[FtpProtocol] error: {}", 
CommonUtil.getMessageFromThrowable(e), e);
-            builder.setCode(CollectRep.Code.UN_CONNECTABLE);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         // Set timeout
         
ftpClient.setControlKeepAliveReplyTimeout(Integer.parseInt(ftpProtocol.getTimeout()));
 
@@ -141,20 +146,6 @@ public class FtpCollectImpl extends AbstractCollect {
         }
     }
 
-    /**
-     * preCheck params
-     */
-    private void preCheck(Metrics metrics) {
-        if (metrics == null || metrics.getFtp() == null) {
-            throw new IllegalArgumentException("Ftp collect must has ftp 
params.");
-        }
-        FtpProtocol ftpProtocol = metrics.getFtp();
-        Assert.hasText(ftpProtocol.getHost(), "Ftp Protocol host is 
required.");
-        Assert.hasText(ftpProtocol.getPort(), "Ftp Protocol port is 
required.");
-        Assert.hasText(ftpProtocol.getDirection(), "Ftp Protocol direction is 
required.");
-        Assert.hasText(ftpProtocol.getTimeout(), "Ftp Protocol timeout is 
required.");
-    }
-
     @Override
     public String supportProtocol() {
         return DispatchConstants.PROTOCOL_FTP;
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java
index 2a2da5b43..01a4ff4d2 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java
@@ -105,18 +105,28 @@ public class HttpCollectImpl extends AbstractCollect {
     
     public HttpCollectImpl() {
     }
-    
+
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getHttp() == null) {
+            throw new IllegalArgumentException("Http/Https collect must has 
http params");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder,
                         long monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
+
+        HttpProtocol httpProtocol = metrics.getHttp();
+        String url = httpProtocol.getUrl();
+        if (!StringUtils.hasText(url) || !url.startsWith(RIGHT_DASH)) {
+            httpProtocol.setUrl(StringUtils.hasText(url) ? RIGHT_DASH + 
url.trim() : RIGHT_DASH);
+        }
+        if (CollectionUtils.isEmpty(httpProtocol.getSuccessCodes())) {
+            httpProtocol.setSuccessCodes(List.of("200"));
         }
+
         HttpContext httpContext = createHttpContext(metrics.getHttp());
         HttpUriRequest request = createHttpRequest(metrics.getHttp());
         try (CloseableHttpResponse response = 
CommonHttpClient.getHttpClient().execute(request, httpContext)) {
@@ -198,23 +208,6 @@ public class HttpCollectImpl extends AbstractCollect {
         return DispatchConstants.PROTOCOL_HTTP;
     }
     
-    private void validateParams(Metrics metrics) throws Exception {
-        if (metrics == null || metrics.getHttp() == null) {
-            throw new Exception("Http/Https collect must has http params");
-        }
-        
-        HttpProtocol httpProtocol = metrics.getHttp();
-        String url = httpProtocol.getUrl();
-        
-        if (!StringUtils.hasText(url) || !url.startsWith(RIGHT_DASH)) {
-            httpProtocol.setUrl(StringUtils.hasText(url) ? RIGHT_DASH + 
url.trim() : RIGHT_DASH);
-        }
-        
-        if (CollectionUtils.isEmpty(httpProtocol.getSuccessCodes())) {
-            httpProtocol.setSuccessCodes(List.of("200"));
-        }
-    }
-    
     private void parseResponseByWebsite(String resp, List<String> aliasFields, 
HttpProtocol http,
                                         CollectRep.MetricsData.Builder 
builder, Long responseTime) {
         CollectRep.ValueRow.Builder valueRowBuilder = 
CollectRep.ValueRow.newBuilder();
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java
index 96a4df12b..d214f10f3 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java
@@ -56,18 +56,24 @@ public class SslCertificateCollectImpl extends 
AbstractCollect {
 
     public SslCertificateCollectImpl() {}
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getHttp() == null) {
+            throw new IllegalArgumentException("Http/Https collect must has 
http params");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder,
                         long monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
+
         HttpProtocol httpProtocol = metrics.getHttp();
+        String url = httpProtocol.getUrl();
+        if (!StringUtils.hasText(url) || !url.startsWith(RIGHT_DASH)) {
+            httpProtocol.setUrl(StringUtils.hasText(url) ? RIGHT_DASH + 
url.trim() : RIGHT_DASH);
+        }
+
         HttpsURLConnection urlConnection = null;
         try {
             String uri = "";
@@ -153,14 +159,7 @@ public class SslCertificateCollectImpl extends 
AbstractCollect {
         return DispatchConstants.PROTOCOL_SSL_CERT;
     }
 
-    private void validateParams(Metrics metrics) throws Exception {
-        if (metrics == null || metrics.getHttp() == null) {
-            throw new Exception("Http/Https collect must has http params");
-        }
-        HttpProtocol httpProtocol = metrics.getHttp();
-        String url = httpProtocol.getUrl();
-        if (!StringUtils.hasText(url) || !url.startsWith(RIGHT_DASH)) {
-            httpProtocol.setUrl(StringUtils.hasText(url) ? RIGHT_DASH + 
url.trim() : RIGHT_DASH);
-        }
+    private void validateParams(Metrics metrics) {
+
     }
 }
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImpl.java
index a828850c1..977243dfe 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImpl.java
@@ -50,14 +50,16 @@ public class HttpsdImpl extends AbstractCollect {
     private DiscoveryClientManagement discoveryClientManagement = new 
DiscoveryClientManagement();
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         HttpsdProtocol httpsdProtocol = metrics.getHttpsd();
-        // check params
-        if (checkParamsFailed(httpsdProtocol)) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("http_sd collect must have a valid http_sd protocol 
param! ");
-            return;
+        if (Objects.isNull(httpsdProtocol) || httpsdProtocol.isInvalid()){
+            throw new IllegalArgumentException("http_sd collect must have a 
valid http_sd protocol param! ");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        HttpsdProtocol httpsdProtocol = metrics.getHttpsd();
 
         try (DiscoveryClient discoveryClient = 
discoveryClientManagement.getClient(httpsdProtocol)) {
             collectMetrics(builder, metrics, discoveryClient);
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java
index e8042679e..832aaded4 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java
@@ -39,14 +39,16 @@ public class IcmpCollectImpl extends AbstractCollect {
     public IcmpCollectImpl(){}
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
-        // Simple validation requires mandatory parameters
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getIcmp() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("ICMP collect must has icmp params");
-            return;
+            throw new IllegalArgumentException("ICMP collect must has icmp 
params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
+
         IcmpProtocol icmp = metrics.getIcmp();
         // The default timeout is 6000 milliseconds
         int timeout = 6000;
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java
index a45186b08..f1c5ef7ea 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java
@@ -75,11 +75,20 @@ public class JmxCollectImpl extends AbstractCollect {
         connectionCommonCache = new ConnectionCommonCache<>();
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        Assert.isTrue(metrics != null && metrics.getJmx() != null, "JMX 
collect must have JMX params");
+
+        String url = metrics.getJmx().getUrl();
+        if (StringUtils.hasText(url)) {
+            Assert.doesNotContain(url, IGNORED_STUB, "JMX url prohibit 
contains stub, please check");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
 
         try {
-            validateParams(metrics);
             JmxProtocol jmxProtocol = metrics.getJmx();
 
             // Create a jndi remote connection
@@ -164,15 +173,6 @@ public class JmxCollectImpl extends AbstractCollect {
         return attributeValueMap;
     }
 
-    private void validateParams(Metrics metrics) {
-        Assert.isTrue(metrics != null && metrics.getJmx() != null, "JMX 
collect must have JMX params");
-        
-        String url = metrics.getJmx().getUrl();
-        if (StringUtils.hasText(url)) {
-            Assert.doesNotContain(url, IGNORED_STUB, "JMX url prohibit 
contains stub, please check");
-        }
-    }
-
     private JMXConnector getConnectSession(JmxProtocol jmxProtocol) throws 
IOException {
         CacheIdentifier identifier = 
CacheIdentifier.builder().ip(jmxProtocol.getHost())
                 
.port(jmxProtocol.getPort()).username(jmxProtocol.getUsername())
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java
index 4c7d1df2e..137a26f30 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java
@@ -55,13 +55,16 @@ public class MemcachedCollectImpl extends AbstractCollect {
     private static final String STATS_END_RSP = "END";
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getMemcached() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("Memcached collect must has Memcached params");
-            return;
+            throw new IllegalArgumentException("Memcached collect must has 
Memcached params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
+
         MemcachedProtocol memcachedProtocol = metrics.getMemcached();
         String memcachedHost = memcachedProtocol.getHost();
         String memcachedPort = memcachedProtocol.getPort();
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
index 881ee41f9..d54f73591 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
@@ -85,15 +85,21 @@ public class MongodbSingleCollectImpl extends 
AbstractCollect {
         connectionCommonCache = new ConnectionCommonCache<>();
     }
 
+    /**
+     * Check that the mongodb connection information in metrics is complete
+     */
+    public void preCheck(Metrics metrics) throws IllegalArgumentException{
+        Assert.isTrue(metrics != null && metrics.getMongodb() != null, 
"Mongodb collect must has mongodb params");
+        MongodbProtocol mongodbProtocol = metrics.getMongodb();
+        Assert.hasText(mongodbProtocol.getCommand(), "Mongodb Protocol command 
is required.");
+        Assert.hasText(mongodbProtocol.getHost(), "Mongodb Protocol host is 
required.");
+        Assert.hasText(mongodbProtocol.getPort(), "Mongodb Protocol port is 
required.");
+        Assert.hasText(mongodbProtocol.getUsername(), "Mongodb Protocol 
username is required.");
+        Assert.hasText(mongodbProtocol.getPassword(), "Mongodb Protocol 
password is required.");
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        try {
-            preCheck(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         // The command naming convention is the command supported by the above 
mongodb diagnostic. Support subdocument
         // If the command does not include., execute the command directly and 
use the document it returns;
         // otherwise, you need to execute the metricsParts[0] command first 
and then obtain the related subdocument
@@ -171,19 +177,6 @@ public class MongodbSingleCollectImpl extends 
AbstractCollect {
         });
     }
 
-    /**
-     * Check that the mongodb connection information in metrics is complete
-     */
-    private void preCheck(Metrics metrics) {
-        Assert.isTrue(metrics != null && metrics.getMongodb() != null, 
"Mongodb collect must has mongodb params");
-        MongodbProtocol mongodbProtocol = metrics.getMongodb();
-        Assert.hasText(mongodbProtocol.getCommand(), "Mongodb Protocol command 
is required.");
-        Assert.hasText(mongodbProtocol.getHost(), "Mongodb Protocol host is 
required.");
-        Assert.hasText(mongodbProtocol.getPort(), "Mongodb Protocol port is 
required.");
-        Assert.hasText(mongodbProtocol.getUsername(), "Mongodb Protocol 
username is required.");
-        Assert.hasText(mongodbProtocol.getPassword(), "Mongodb Protocol 
password is required.");
-    }
-
     public static CacheIdentifier getIdentifier(MongodbProtocol 
mongodbProtocol){
         // try to reuse connection
         return CacheIdentifier.builder()
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mq/RocketmqSingleCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mq/RocketmqSingleCollectImpl.java
index 7547012d2..e3da22277 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mq/RocketmqSingleCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mq/RocketmqSingleCollectImpl.java
@@ -106,15 +106,19 @@ public class RocketmqSingleCollectImpl extends 
AbstractCollect implements Dispos
         ThreadUtils.shutdownGracefully(this.executorService, 10L, 
TimeUnit.SECONDS);
     }
 
+    /**
+     * preCheck params
+     * @param metrics metrics config
+     */
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        Assert.isTrue(metrics != null && metrics.getRocketmq() != null, 
"Mongodb collect must has rocketmq params");
+        RocketmqProtocol rocketmq = metrics.getRocketmq();
+        Assert.hasText(rocketmq.getNamesrvHost(), "Rocketmq Protocol 
namesrvHost is required.");
+        Assert.hasText(rocketmq.getNamesrvPort(), "Rocketmq Protocol 
namesrvPort is required.");
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        try {
-            preCheck(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         DefaultMQAdminExt mqAdminExt = null;
         try {
             mqAdminExt = this.createMqAdminExt(metrics);
@@ -141,16 +145,6 @@ public class RocketmqSingleCollectImpl extends 
AbstractCollect implements Dispos
         return DispatchConstants.PROTOCOL_ROCKETMQ;
     }
 
-    /**
-     * preCheck params
-     * @param metrics metrics config
-     */
-    private void preCheck(Metrics metrics) {
-        Assert.isTrue(metrics != null && metrics.getRocketmq() != null, 
"Mongodb collect must has rocketmq params");
-        RocketmqProtocol rocketmq = metrics.getRocketmq();
-        Assert.hasText(rocketmq.getNamesrvHost(), "Rocketmq Protocol 
namesrvHost is required.");
-        Assert.hasText(rocketmq.getNamesrvPort(), "Rocketmq Protocol 
namesrvPort is required.");
-    }
 
     /**
      * create the DefaultMQAdminExt
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java
index 1ffb6b674..3be472396 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java
@@ -69,13 +69,15 @@ public class NebulaGraphCollectImpl extends AbstractCollect 
{
 
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getNebulaGraph() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("NebulaGraph collect must has NebulaGraph params");
-            return;
+            throw new IllegalArgumentException("NebulaGraph collect must has 
NebulaGraph params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
         NebulaGraphProtocol nebulaGraph = metrics.getNebulaGraph();
         String timePeriod = nebulaGraph.getTimePeriod();
 
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java
index 9c3e6a27d..fea98f302 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java
@@ -50,16 +50,18 @@ public class NgqlCollectImpl extends AbstractCollect {
 
     private static final String COMMAND_SHOW_JOBS = "SHOW JOBS;";
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        NgqlProtocol ngql = metrics.getNgql();
+        Assert.hasText(ngql.getHost(), "NGQL protocol host is required");
+        Assert.hasText(ngql.getPort(), "Port protocol host is required");
+        Assert.hasText(ngql.getParseType(), "NGQL protocol parseType is 
required");
+        Assert.hasText(ngql.getUsername(), "NGQL protocol username is 
required");
+        Assert.hasText(ngql.getPassword(), "NGQL protocol password is 
required");
+    }
+
     @Override
     public void collect(Builder builder, long monitorId, String app, Metrics 
metrics) {
-        // check the params
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         NgqlProtocol ngql = metrics.getNgql();
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
@@ -93,15 +95,6 @@ public class NgqlCollectImpl extends AbstractCollect {
         }
     }
 
-    private void validateParams(Metrics metrics) {
-        NgqlProtocol ngql = metrics.getNgql();
-        Assert.hasText(ngql.getHost(), "NGQL protocol host is required");
-        Assert.hasText(ngql.getPort(), "Port protocol host is required");
-        Assert.hasText(ngql.getParseType(), "NGQL protocol parseType is 
required");
-        Assert.hasText(ngql.getUsername(), "NGQL protocol username is 
required");
-        Assert.hasText(ngql.getPassword(), "NGQL protocol password is 
required");
-    }
-
     /**
      * parseType filterCount Filter the result set according to requirements 
and count the quantity
      * command:  field#ngql#filterName#filterValue
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java
index d9804182e..62ad719c0 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java
@@ -80,17 +80,22 @@ public class NginxCollectImpl extends AbstractCollect {
         
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        final NginxProtocol nginxProtocol;
+        if (metrics == null || (nginxProtocol = metrics.getNginx()) == null || 
nginxProtocol.isInValid()) {
+            throw new IllegalArgumentException("Nginx collect must has nginx 
params");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
 
-        // validate parameters
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
+        NginxProtocol nginxProtocol = metrics.getNginx();
+        String url = nginxProtocol.getUrl();
+        if (StringUtils.isEmpty(url) || !url.startsWith(RIGHT_DASH)) {
+            nginxProtocol.setUrl(url == null ? RIGHT_DASH : RIGHT_DASH + 
url.trim());
         }
 
         HttpContext httpContext = createHttpContext(metrics.getNginx());
@@ -130,20 +135,6 @@ public class NginxCollectImpl extends AbstractCollect {
         return DispatchConstants.PROTOCOL_NGINX;
     }
 
-    private void validateParams(Metrics metrics) throws Exception {
-        final NginxProtocol nginxProtocol;
-        
-        if (metrics == null || (nginxProtocol = metrics.getNginx()) == null || 
nginxProtocol.isInValid()) {
-            throw new Exception("Nginx collect must has nginx params");
-        }
-        
-        String url = nginxProtocol.getUrl();
-        
-        if (StringUtils.isEmpty(url) || !url.startsWith(RIGHT_DASH)) {
-            nginxProtocol.setUrl(url == null ? RIGHT_DASH : RIGHT_DASH + 
url.trim());
-        }
-    }
-
     private HttpContext createHttpContext(NginxProtocol nginxProtocol) {
         HttpHost host = new HttpHost(nginxProtocol.getHost(), 
Integer.parseInt(nginxProtocol.getPort()));
         HttpClientContext httpClientContext = new HttpClientContext();
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java
index 1161e0fba..3720edbf5 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java
@@ -51,13 +51,15 @@ public class NtpCollectImpl extends AbstractCollect {
     }
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getNtp() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("NTP collect must have NTP params");
-            return;
+            throw new IllegalArgumentException("NTP collect must have NTP 
params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
         NtpProtocol ntpProtocol = metrics.getNtp();
         String host = ntpProtocol.getHost();
         int timeout = CollectUtil.getTimeout(ntpProtocol.getTimeout());
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java
index 1078570c5..ee54ffda5 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java
@@ -49,18 +49,18 @@ public class Pop3CollectImpl extends AbstractCollect {
 
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        Pop3Protocol pop3Protocol;
+        if (metrics == null || (pop3Protocol = metrics.getPop3()) == null || 
pop3Protocol.isInvalid()) {
+            throw new IllegalArgumentException("Pop3 collect must has pop3 
params");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
 
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
-
         Pop3Protocol pop3Protocol = metrics.getPop3();
         POP3Client pop3Client = null;
         boolean ssl = Boolean.parseBoolean(pop3Protocol.getSsl());
@@ -101,18 +101,6 @@ public class Pop3CollectImpl extends AbstractCollect {
         return DispatchConstants.PROTOCOL_POP3;
     }
 
-    /**
-     * validate parameters
-     * @param metrics metrics
-     * @throws Exception exception
-     */
-    private void validateParams(Metrics metrics) throws Exception {
-        Pop3Protocol pop3Protocol;
-        if (metrics == null || (pop3Protocol = metrics.getPop3()) == null || 
pop3Protocol.isInvalid()) {
-            throw new Exception("Pop3 collect must has pop3 params");
-        }
-    }
-
     /**
      * create a POP3 connection【 with SSL encryption support 】
      * @param pop3Protocol pop3 Protocol
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java
index 6eb0d2ea3..1b2d3028b 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java
@@ -67,6 +67,10 @@ public class PushCollectImpl extends AbstractCollect {
     public PushCollectImpl() {
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder,
                         long monitorId, String app, Metrics metrics) {
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java
index 439e695fe..3462c3ebd 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java
@@ -51,14 +51,19 @@ public class RedfishCollectImpl extends AbstractCollect {
     }
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getRedfish() == null) {
+            throw new IllegalArgumentException("Redfish collect must has 
redfish params");
         }
+        RedfishProtocol redfishProtocol = metrics.getRedfish();
+        Assert.hasText(redfishProtocol.getHost(), "Redfish Protocol host is 
required.");
+        Assert.hasText(redfishProtocol.getPort(), "Redfish Protocol port is 
required.");
+        Assert.hasText(redfishProtocol.getUsername(), "Redfish Protocol 
username is required.");
+        Assert.hasText(redfishProtocol.getPassword(), "Redfish Protocol 
password is required.");
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         ConnectSession connectSession = null;
         try {
             connectSession = getRedfishConnectSession(metrics.getRedfish());
@@ -117,17 +122,6 @@ public class RedfishCollectImpl extends AbstractCollect {
         return DispatchConstants.PROTOCOL_REDFISH;
     }
 
-    private void validateParams(Metrics metrics) throws Exception {
-        if (metrics == null || metrics.getRedfish() == null) {
-            throw new Exception("Redfish collect must has redfish params");
-        }
-        RedfishProtocol redfishProtocol = metrics.getRedfish();
-        Assert.hasText(redfishProtocol.getHost(), "Redfish Protocol host is 
required.");
-        Assert.hasText(redfishProtocol.getPort(), "Redfish Protocol port is 
required.");
-        Assert.hasText(redfishProtocol.getUsername(), "Redfish Protocol 
username is required.");
-        Assert.hasText(redfishProtocol.getPassword(), "Redfish Protocol 
password is required.");
-    }
-
 
     private List<String> getResourcesUri(Metrics metrics, ConnectSession 
connectSession) {
         String name = metrics.getName();
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
index c1223e9ba..dfc4e2587 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
@@ -75,15 +75,15 @@ public class RedisCommonCollectImpl extends AbstractCollect 
{
         connectionCommonCache = new ConnectionCommonCache<>();
     }
 
+    public void preCheck(Metrics metrics) throws IllegalArgumentException{
+        Assert.noNullElements(new Object[] {metrics, metrics.getRedis()}, 
"Redis collect must has redis params");
+        RedisProtocol redisProtocol = metrics.getRedis();
+        Assert.hasText(redisProtocol.getHost(), "Redis Protocol host is 
required.");
+        Assert.hasText(redisProtocol.getPort(), "Redis Protocol port is 
required.");
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        try {
-            preCheck(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         try {
             if (Objects.nonNull(metrics.getRedis().getPattern()) && 
Objects.equals(metrics.getRedis().getPattern(), CLUSTER)) {
                 List<Map<String, String>> redisInfoList = 
getClusterRedisInfo(metrics);
@@ -331,13 +331,6 @@ public class RedisCommonCollectImpl extends 
AbstractCollect {
         return result;
     }
 
-    private void preCheck(Metrics metrics) {
-       Assert.noNullElements(new Object[] {metrics, metrics.getRedis()}, 
"Redis collect must has redis params");
-        RedisProtocol redisProtocol = metrics.getRedis();
-        Assert.hasText(redisProtocol.getHost(), "Redis Protocol host is 
required.");
-        Assert.hasText(redisProtocol.getPort(), "Redis Protocol port is 
required.");
-    }
-
     @Override
     public String supportProtocol() {
         return DispatchConstants.PROTOCOL_REDIS;
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java
index aef7290fa..66ef4acc4 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java
@@ -45,13 +45,15 @@ public class SmtpCollectImpl extends AbstractCollect {
     }
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getSmtp() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("Smtp collect must has Smtp params");
-            return;
+            throw new IllegalArgumentException("Smtp collect must has Smtp 
params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
         SmtpProtocol smtpProtocol = metrics.getSmtp();
         String host = smtpProtocol.getHost();
         String port = smtpProtocol.getPort();
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java
index c1661efd0..78aa80d73 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java
@@ -83,16 +83,20 @@ public class SnmpCollectImpl extends AbstractCollect {
     private final Map<Integer, Snmp> versionSnmpService = new 
ConcurrentHashMap<>(3);
 
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getSnmp() == null) {
+            throw new IllegalArgumentException("Snmp collect must has snmp 
params");
+        }
+        SnmpProtocol snmpProtocol = metrics.getSnmp();
+        Assert.hasText(snmpProtocol.getHost(), "snmp host is required.");
+        Assert.hasText(snmpProtocol.getPort(), "snmp port is required.");
+        Assert.notNull(snmpProtocol.getVersion(), "snmp version is required.");
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         SnmpProtocol snmpProtocol = metrics.getSnmp();
         int timeout = CollectUtil.getTimeout(snmpProtocol.getTimeout());
         int snmpVersion = getSnmpVersion(snmpProtocol.getVersion());
@@ -262,16 +266,6 @@ public class SnmpCollectImpl extends AbstractCollect {
     }
 
 
-    private void validateParams(Metrics metrics) {
-        if (metrics == null || metrics.getSnmp() == null) {
-            throw new IllegalArgumentException("Snmp collect must has snmp 
params");
-        }
-        SnmpProtocol snmpProtocol = metrics.getSnmp();
-        Assert.hasText(snmpProtocol.getHost(), "snmp host is required.");
-        Assert.hasText(snmpProtocol.getPort(), "snmp port is required.");
-        Assert.notNull(snmpProtocol.getVersion(), "snmp version is required.");
-    }
-
     private synchronized Snmp getSnmpService(int snmpVersion, SnmpBuilder 
snmpBuilder) throws IOException {
         Snmp snmpService = versionSnmpService.get(snmpVersion);
         if (snmpService != null) {
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java
index cf2fad0a0..1a77c7937 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java
@@ -75,16 +75,16 @@ public class SshCollectImpl extends AbstractCollect {
         connectionCommonCache = new ConnectionCommonCache<>();
     }
 
+    @Override
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
+        if (metrics == null || metrics.getSsh() == null) {
+            throw new IllegalArgumentException("ssh collect must has ssh 
params");
+        }
+    }
+
     @Override
     public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
         long startTime = System.currentTimeMillis();
-        try {
-            validateParams(metrics);
-        } catch (Exception e) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg(e.getMessage());
-            return;
-        }
         SshProtocol sshProtocol = metrics.getSsh();
         boolean reuseConnection = 
Boolean.parseBoolean(sshProtocol.getReuseConnection());
         int timeout = CollectUtil.getTimeout(sshProtocol.getTimeout(), 
DEFAULT_TIMEOUT);
@@ -327,10 +327,4 @@ public class SshCollectImpl extends AbstractCollect {
         }
         return clientSession;
     }
-
-    private void validateParams(Metrics metrics) throws Exception {
-        if (metrics == null || metrics.getSsh() == null) {
-            throw new Exception("ssh collect must has ssh params");
-        }
-    }
 }
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java
index c53fdc8c5..46acd9d01 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java
@@ -47,14 +47,15 @@ public class TelnetCollectImpl extends AbstractCollect {
     public TelnetCollectImpl(){}
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getTelnet() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("Telnet collect must has telnet params");
-            return;
+            throw new IllegalArgumentException("Telnet collect must has Telnet 
params");
         }
+    }
 
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
         TelnetProtocol telnet = metrics.getTelnet();
         int timeout = CollectUtil.getTimeout(telnet.getTimeout());
         TelnetClient telnetClient = null;
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java
index 0d733b5fc..b75e4aa12 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java
@@ -47,13 +47,15 @@ public class UdpCollectImpl extends AbstractCollect {
     }
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getUdp() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("Udp collect must has udp params");
-            return;
+            throw new IllegalArgumentException("Udp collect must has udp 
params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
         UdpProtocol udpProtocol = metrics.getUdp();
         int timeout = CollectUtil.getTimeout(udpProtocol.getTimeout());
         try (DatagramSocket socket = new DatagramSocket()) {
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java
index 411683b93..065d94166 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java
@@ -55,13 +55,16 @@ public class WebsocketCollectImpl extends AbstractCollect {
     }
 
     @Override
-    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
-        long startTime = System.currentTimeMillis();
+    public void preCheck(Metrics metrics) throws IllegalArgumentException {
         if (metrics == null || metrics.getWebsocket() == null) {
-            builder.setCode(CollectRep.Code.FAIL);
-            builder.setMsg("Websocket collect must has Websocket params");
-            return;
+            throw new IllegalArgumentException("Websocket collect must has 
Websocket params");
         }
+    }
+
+    @Override
+    public void collect(CollectRep.MetricsData.Builder builder, long 
monitorId, String app, Metrics metrics) {
+        long startTime = System.currentTimeMillis();
+
         WebsocketProtocol websocketProtocol = metrics.getWebsocket();
         // Compatible with monitoring templates without path parameters
         if (StringUtils.isBlank(websocketProtocol.getPath())) {
diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java
index 4457f31f4..610f93fb0 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java
@@ -151,13 +151,18 @@ public class MetricsCollect implements Runnable, 
Comparable<MetricsCollect> {
                     + metrics.getName() + ", " + metrics.getProtocol());
         } else {
             try {
+                abstractCollect.preCheck(metrics);
                 abstractCollect.collect(response, monitorId, app, metrics);
             } catch (Exception e) {
                 String msg = e.getMessage();
                 if (msg == null && e.getCause() != null) {
                     msg = e.getCause().getMessage();
                 }
-                log.error("[Metrics Collect]: {}.", msg, e);
+                if (e instanceof IllegalArgumentException){
+                    log.error("[Metrics PreCheck]: {}.", msg, e);
+                } else {
+                    log.error("[Metrics Collect]: {}.", msg, e);
+                }
                 response.setCode(CollectRep.Code.FAIL);
                 if (msg != null) {
                     response.setMsg(msg);
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java
index 90c49d00a..2cd0a13c7 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java
@@ -19,6 +19,7 @@ package org.apache.hertzbeat.collector.collect.ftp;
 
 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 java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -44,7 +45,6 @@ class FtpCollectImplTest {
 
     @Test
     void testPreCheck() {
-        CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         FtpProtocol ftpProtocol = FtpProtocol.builder()
                 .host("127.0.0.1")
                 .username("admin")
@@ -60,8 +60,7 @@ class FtpCollectImplTest {
         metrics.setName("server");
         metrics.setFtp(ftpProtocol);
         metrics.setAliasFields(aliasField);
-        ftpCollectImpl.collect(builder, 1L, "test", metrics);
-        assertEquals(builder.getCode(), CollectRep.Code.UN_CONNECTABLE);
+        assertThrows(IllegalArgumentException.class, ()-> 
ftpCollectImpl.preCheck(metrics));
 
     }
 
@@ -96,7 +95,7 @@ class FtpCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setFtp(ftpProtocol);
         metrics.setAliasFields(aliasField);
-
+        ftpCollectImpl.preCheck(metrics);
         ftpCollectImpl.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImplTest.java
index b67c63e1b..f0a619fe3 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/httpsd/HttpsdImplTest.java
@@ -79,7 +79,7 @@ class HttpsdImplTest {
                 .build();
         Mockito.when(client.getServerInfo()).thenReturn(serverInfo);
         httpsd.setDiscoveryClientManagement(discoveryClientManagement);
-
+        httpsd.preCheck(metrics);
         httpsd.collect(builder, 1L, "test", metrics);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
             assertEquals(host, valueRow.getColumns(0));
@@ -123,7 +123,7 @@ class HttpsdImplTest {
 
         Mockito.when(client.getServices()).thenReturn(serviceInstances);
         httpsd.setDiscoveryClientManagement(discoveryClientManagement);
-
+        httpsd.preCheck(metrics);
         httpsd.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java
index cb808896f..25f6050a3 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java
@@ -18,7 +18,6 @@
 package org.apache.hertzbeat.collector.collect.nebulagraph;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -84,6 +83,7 @@ class NgqlCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setNgql(ngqlProtocol);
         metrics.setAliasFields(aliasField);
+        ngqlCollect.preCheck(metrics);
         ngqlCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         assertEquals(builder.getValues(0).getColumns(0), collation);
@@ -117,6 +117,7 @@ class NgqlCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setNgql(ngqlProtocol);
         metrics.setAliasFields(aliasField);
+        ngqlCollect.preCheck(metrics);
         ngqlCollect.collect(builder, 1L, "test", metrics);
         assertEquals(1, builder.getValuesCount());
         assertEquals("1", builder.getValues(0).getColumns(0));
@@ -149,6 +150,7 @@ class NgqlCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setNgql(ngqlProtocol);
         metrics.setAliasFields(aliasField);
+        ngqlCollect.preCheck(metrics);
         ngqlCollect.collect(builder, 1L, "test", metrics);
         assertEquals(3, builder.getValuesCount());
         for (int i = 0; i < result.size(); i++) {
@@ -186,6 +188,7 @@ class NgqlCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setNgql(ngqlProtocol);
         metrics.setAliasFields(aliasField);
+        ngqlCollect.preCheck(metrics);
         ngqlCollect.collect(builder, 1L, "test", metrics);
         assertEquals(1, builder.getValuesCount());
         for (int i = 0; i < 3; i++) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java
index 9443184d9..fdaf19d9b 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java
@@ -94,6 +94,7 @@ public class NginxCollectImplTest {
             Metrics metrics = new Metrics();
             metrics.setName("nginx_status");
             metrics.setNginx(nginxProtocol);
+            nginxCollect.preCheck(metrics);
             nginxCollect.collect(builder, monitorId, app, metrics);
             assertEquals(builder.getCode(), CollectRep.Code.FAIL);
         }
@@ -154,6 +155,7 @@ public class NginxCollectImplTest {
             metrics.setFields(fields);
             metrics.setName("nginx_status");
             metrics.setNginx(nginxProtocol);
+            nginxCollect.preCheck(metrics);
             nginxCollect.collect(builder, monitorId, app, metrics);
             assertEquals(builder.getCode(), CollectRep.Code.SUCCESS);
             for (CollectRep.ValueRow row : builder.getValuesList()) {
@@ -219,6 +221,7 @@ public class NginxCollectImplTest {
             metrics.setFields(fields);
             metrics.setName("req_status");
             metrics.setNginx(nginxProtocol);
+            nginxCollect.preCheck(metrics);
             nginxCollect.collect(builder, monitorId, app, metrics);
             assertEquals(builder.getCode(), CollectRep.Code.SUCCESS);
             assertEquals(builder.getValuesCount(), 2);
@@ -298,10 +301,11 @@ public class NginxCollectImplTest {
 
     @Test
     public void testNginxStatusMatch() {
-        String status = "Active connections: 2\n" +
-                "server accepts handled requests\n" +
-                "4 4 2\n" +
-                "Reading: 0 Writing: 1 Waiting: 1";
+        String status = """
+                Active connections: 2
+                server accepts handled requests
+                4 4 2
+                Reading: 0 Writing: 1 Waiting: 1""";
 
         // 使用正则表达式匹配并提取所需的键和对应的值
         Pattern keyValuePattern = Pattern.compile("(\\w+): (\\d+)");
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java
index 56aeb8e1e..8f67c2869 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java
@@ -76,6 +76,7 @@ class NtpCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setNtp(telnetProtocol);
         metrics.setAliasFields(aliasField);
+        ntpCollect.preCheck(metrics);
         ntpCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java
index 26ffe9f34..f2ddf1b34 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java
@@ -17,6 +17,9 @@
 
 package org.apache.hertzbeat.collector.collect.redfish;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.hertzbeat.common.entity.job.Metrics;
 import org.apache.hertzbeat.common.entity.job.protocol.RedfishProtocol;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
@@ -29,11 +32,9 @@ import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
+/**
+ * Test case for {@link RedfishCollectImpl}
+ */
 @ExtendWith(MockitoExtension.class)
 public class RedfishCollectImplTest {
     @Mock
@@ -69,6 +70,7 @@ public class RedfishCollectImplTest {
         metrics.setAliasFields(aliasField);
         metrics.setName("Chassis");
         RedfishClient.create(redfishProtocol);
+        redfishCollect.preCheck(metrics);
         redfishCollect.collect(builder, 1L, "test", metrics);
     }
 
@@ -82,70 +84,77 @@ public class RedfishCollectImplTest {
         metrics.setRedfish(redfishProtocol);
         metrics.setAliasFields(aliasField);
         metrics.setName("PowerSupply");
-        String Chassis = "{\n" +
-                "    \"@odata.type\": 
\"#ChassisCollection.ChassisCollection\",\n" +
-                "    \"Name\": \"Chassis Collection\",\n" +
-                "    \"[email protected]\": 2,\n" +
-                "    \"Members\": [\n" +
-                "        {\n" +
-                "            \"@odata.id\": \"/redfish/v1/Chassis/1U\"\n" +
-                "        },\n" +
-                "        {\n" +
-                "            \"@odata.id\": \"/redfish/v1/Chassis/2U\"\n" +
-                "        }\n" +
-                "    ]\n" +
-                "}";
-        String powerSupplies1U = "{\n" +
-                "    \"@odata.type\": 
\"#PowerSupplyCollection.PowerSupplyCollection\",\n" +
-                "    \"Name\": \"Power Supply Collection\",\n" +
-                "    \"[email protected]\": 2,\n" +
-                "    \"Members\": [\n" +
-                "        {\n" +
-                "            \"@odata.id\": 
\"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1\"\n" +
-                "        },\n" +
-                "        {\n" +
-                "            \"@odata.id\": 
\"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2\"\n" +
-                "        }\n" +
-                "    ]\n" +
-                "}";
-        String powerSupplies2U = "{\n" +
-                "    \"@odata.type\": 
\"#PowerSupplyCollection.PowerSupplyCollection\",\n" +
-                "    \"Name\": \"Power Supply Collection\",\n" +
-                "    \"[email protected]\": 2,\n" +
-                "    \"Members\": [\n" +
-                "        {\n" +
-                "            \"@odata.id\": 
\"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay1\"\n" +
-                "        },\n" +
-                "        {\n" +
-                "            \"@odata.id\": 
\"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay2\"\n" +
-                "        }\n" +
-                "    ]\n" +
-                "}";
-        String bay1U1 = "{\n" +
-                "    \"@odata.type\": \"#PowerSupply.v1_5_3.PowerSupply\",\n" +
-                "    \"Id\": \"Bay1\",\n" +
-                "    \"Name\": \"Power Supply Bay 1\",\n" +
-                "    \"@odata.id\": 
\"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1\"\n" +
-                "}";
-        String bay2U1 = "{\n" +
-                "    \"@odata.type\": \"#PowerSupply.v1_5_3.PowerSupply\",\n" +
-                "    \"Id\": \"Bay2\",\n" +
-                "    \"Name\": \"Power Supply Bay 2\",\n" +
-                "    \"@odata.id\": 
\"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2\"\n" +
-                "}";
-        String bay1U2 = "{\n" +
-                "    \"@odata.type\": \"#PowerSupply.v1_5_3.PowerSupply\",\n" +
-                "    \"Id\": \"Bay1\",\n" +
-                "    \"Name\": \"Power Supply Bay 1\",\n" +
-                "    \"@odata.id\": 
\"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay1\"\n" +
-                "}";
-        String bay2U2 = "{\n" +
-                "    \"@odata.type\": \"#PowerSupply.v1_5_3.PowerSupply\",\n" +
-                "    \"Id\": \"Bay2\",\n" +
-                "    \"Name\": \"Power Supply Bay 2\",\n" +
-                "    \"@odata.id\": 
\"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay2\"\n" +
-                "}";
-        
Mockito.when(redfishConnectSession.getRedfishResource("/redfish/v1/Chassis/")).thenReturn(Chassis);
+        String chassis = """
+                {
+                    "@odata.type": "#ChassisCollection.ChassisCollection",
+                    "Name": "Chassis Collection",
+                    "[email protected]": 2,
+                    "Members": [
+                        {
+                            "@odata.id": "/redfish/v1/Chassis/1U"
+                        },
+                        {
+                            "@odata.id": "/redfish/v1/Chassis/2U"
+                        }
+                    ]
+                }""";
+        String powerSupplies1U = """
+                {
+                    "@odata.type": 
"#PowerSupplyCollection.PowerSupplyCollection",
+                    "Name": "Power Supply Collection",
+                    "[email protected]": 2,
+                    "Members": [
+                        {
+                            "@odata.id": 
"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1"
+                        },
+                        {
+                            "@odata.id": 
"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2"
+                        }
+                    ]
+                }""";
+        String powerSupplies2U = """
+                {
+                    "@odata.type": 
"#PowerSupplyCollection.PowerSupplyCollection",
+                    "Name": "Power Supply Collection",
+                    "[email protected]": 2,
+                    "Members": [
+                        {
+                            "@odata.id": 
"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay1"
+                        },
+                        {
+                            "@odata.id": 
"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay2"
+                        }
+                    ]
+                }""";
+        String bay1U1 = """
+                {
+                    "@odata.type": "#PowerSupply.v1_5_3.PowerSupply",
+                    "Id": "Bay1",
+                    "Name": "Power Supply Bay 1",
+                    "@odata.id": 
"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1"
+                }""";
+        String bay2U1 = """
+                {
+                    "@odata.type": "#PowerSupply.v1_5_3.PowerSupply",
+                    "Id": "Bay2",
+                    "Name": "Power Supply Bay 2",
+                    "@odata.id": 
"/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2"
+                }""";
+        String bay1U2 = """
+                {
+                    "@odata.type": "#PowerSupply.v1_5_3.PowerSupply",
+                    "Id": "Bay1",
+                    "Name": "Power Supply Bay 1",
+                    "@odata.id": 
"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay1"
+                }""";
+        String bay2U2 = """
+                {
+                    "@odata.type": "#PowerSupply.v1_5_3.PowerSupply",
+                    "Id": "Bay2",
+                    "Name": "Power Supply Bay 2",
+                    "@odata.id": 
"/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay2"
+                }""";
+        
Mockito.when(redfishConnectSession.getRedfishResource("/redfish/v1/Chassis/")).thenReturn(chassis);
         
Mockito.when(redfishConnectSession.getRedfishResource("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies")).thenReturn(powerSupplies1U);
         
Mockito.when(redfishConnectSession.getRedfishResource("/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies")).thenReturn(powerSupplies2U);
         
Mockito.when(redfishConnectSession.getRedfishResource("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1")).thenReturn(bay1U1);
@@ -155,6 +164,7 @@ public class RedfishCollectImplTest {
         MockedStatic<RedfishClient> clientMockedStatic = 
Mockito.mockStatic(RedfishClient.class);
         clientMockedStatic.when(() -> 
RedfishClient.create(redfishProtocol)).thenReturn(redfishClient);
         
Mockito.when(redfishClient.connect()).thenReturn(redfishConnectSession);
+        redfishCollect.preCheck(metrics);
         redfishCollect.collect(builder, 1L, "test", metrics);
         
assertEquals("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1", 
builder.getValues(0).getColumns(0));
         
assertEquals("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2", 
builder.getValues(1).getColumns(0));
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
index ebad258ca..f968a6a92 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
@@ -128,6 +128,7 @@ public class RedisClusterCollectImplTest {
         Mockito.when(cmd.info(metrics.getName())).thenReturn(info);
         Mockito.when(cmd.clusterInfo()).thenReturn(clusterInfo);
 
+        redisClusterCollect.preCheck(metrics);
         redisClusterCollect.collect(builder, 1L, "test", metrics);
 
         assertEquals(builder.getCode(), CollectRep.Code.SUCCESS);
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
index 7effd0483..2a104d123 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
@@ -126,6 +126,7 @@ class RedisSingleCollectImplTest {
         Mockito.when(connection.sync()).thenReturn(cmd);
         Mockito.when(cmd.info(metrics.getName())).thenReturn(redisInfo);
 
+        redisSingleCollect.preCheck(metrics);
         redisSingleCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getCode(), CollectRep.Code.SUCCESS);
         for (CollectRep.ValueRow row : builder.getValuesList()) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java
index 35e3327b0..78f3c9832 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java
@@ -86,6 +86,7 @@ class TelnetCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setTelnet(telnetProtocol);
         metrics.setAliasFields(aliasField);
+        telnetCollect.preCheck(metrics);
         telnetCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
@@ -138,6 +139,7 @@ class TelnetCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setTelnet(telnetProtocol);
         metrics.setAliasFields(aliasField);
+        telnetCollect.preCheck(metrics);
         telnetCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java
index f8ed3c0dd..e4dc2f75e 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java
@@ -19,6 +19,7 @@ package org.apache.hertzbeat.collector.collect.udp;
 
 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 java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.PortUnreachableException;
@@ -46,18 +47,15 @@ class UdpCollectImplTest {
 
     @Test
     void testPreCheck() {
-        CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         List<String> aliasField = new ArrayList<>();
         aliasField.add("responseTime");
         Metrics metrics = new Metrics();
         metrics.setAliasFields(aliasField);
-        udpCollect.collect(builder, 1L, "test", metrics);
-        assertEquals(builder.getCode(), CollectRep.Code.FAIL);
-
+        assertThrows(IllegalArgumentException.class, () -> 
udpCollect.preCheck(metrics));
     }
 
     @Test
-    void testCollect(){
+    void testCollect() {
         CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         UdpProtocol ftpProtocol = UdpProtocol.builder()
                 .timeout("10")
@@ -77,6 +75,7 @@ class UdpCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setUdp(ftpProtocol);
         metrics.setAliasFields(aliasField);
+        udpCollect.preCheck(metrics);
         udpCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {
@@ -87,7 +86,7 @@ class UdpCollectImplTest {
     }
 
     @Test
-    void testCollectWithSocketException(){
+    void testCollectWithSocketException() {
         CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         UdpProtocol ftpProtocol = UdpProtocol.builder()
                 .timeout("10")
@@ -107,6 +106,7 @@ class UdpCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setUdp(ftpProtocol);
         metrics.setAliasFields(aliasField);
+        udpCollect.preCheck(metrics);
         udpCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getCode(), CollectRep.Code.UN_CONNECTABLE);
 
@@ -114,7 +114,7 @@ class UdpCollectImplTest {
     }
 
     @Test
-    void testCollectWithPortUnreachableException(){
+    void testCollectWithPortUnreachableException() {
         CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         UdpProtocol ftpProtocol = UdpProtocol.builder()
                 .timeout("10")
@@ -134,6 +134,7 @@ class UdpCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setUdp(ftpProtocol);
         metrics.setAliasFields(aliasField);
+        udpCollect.preCheck(metrics);
         udpCollect.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getCode(), CollectRep.Code.UN_REACHABLE);
 
diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java
index b7ce64359..e167f25b8 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java
@@ -86,6 +86,7 @@ class WebsocketCollectImplTest {
         Metrics metrics = new Metrics();
         metrics.setWebsocket(websocketProtocol);
         metrics.setAliasFields(aliasField);
+        websocketCollectImpl.preCheck(metrics);
         websocketCollectImpl.collect(builder, 1L, "test", metrics);
         assertEquals(builder.getValuesCount(), 1);
         for (CollectRep.ValueRow valueRow : builder.getValuesList()) {


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

Reply via email to