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

gongchao pushed a commit to branch pushgateway
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/pushgateway by this push:
     new d01f3e2263 [improve] push gateway filter to parse stream
d01f3e2263 is described below

commit d01f3e226375296e3912376b05dac375cc654e7c
Author: tomsun28 <[email protected]>
AuthorDate: Sat Feb 22 10:25:40 2025 +0800

    [improve] push gateway filter to parse stream
    
    Signed-off-by: tomsun28 <[email protected]>
---
 .../push/config/PushErrorRequestWrapper.java       | 14 +++++++
 .../hertzbeat/push/config/PushFilterConfig.java    | 26 ++++++++++++
 .../config/PushGatewayStreamReadingFilter.java     | 47 ++++++++++++++++++++++
 .../push/controller/PushGatewayController.java     | 26 ++++--------
 4 files changed, 95 insertions(+), 18 deletions(-)

diff --git 
a/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushErrorRequestWrapper.java
 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushErrorRequestWrapper.java
new file mode 100644
index 0000000000..3545627dc6
--- /dev/null
+++ 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushErrorRequestWrapper.java
@@ -0,0 +1,14 @@
+package org.apache.hertzbeat.push.config;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+
+/**
+ *
+ */
+public class PushErrorRequestWrapper extends HttpServletRequestWrapper {
+    
+    public PushErrorRequestWrapper(HttpServletRequest request) {
+        super(request);
+    }
+}
diff --git 
a/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushFilterConfig.java
 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushFilterConfig.java
new file mode 100644
index 0000000000..66aae2a4f9
--- /dev/null
+++ 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushFilterConfig.java
@@ -0,0 +1,26 @@
+package org.apache.hertzbeat.push.config;
+
+import org.apache.hertzbeat.push.service.PushGatewayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ *
+ */
+@Configuration
+public class PushFilterConfig {
+
+    @Autowired
+    private PushGatewayService pushGatewayService;
+
+    @Bean
+    public FilterRegistrationBean<PushGatewayStreamReadingFilter> 
contentTypeFilter() {
+        FilterRegistrationBean<PushGatewayStreamReadingFilter> 
registrationBean = new FilterRegistrationBean<>();
+        registrationBean.setFilter(new 
PushGatewayStreamReadingFilter(pushGatewayService));
+        registrationBean.addUrlPatterns("/api/push/pushgateway1");
+        registrationBean.setOrder(Integer.MIN_VALUE);
+        return registrationBean;
+    }
+}
diff --git 
a/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushGatewayStreamReadingFilter.java
 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushGatewayStreamReadingFilter.java
new file mode 100644
index 0000000000..e3995318a9
--- /dev/null
+++ 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/config/PushGatewayStreamReadingFilter.java
@@ -0,0 +1,47 @@
+package org.apache.hertzbeat.push.config;
+
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import org.apache.hertzbeat.push.service.PushGatewayService;
+
+
+/**
+ * todo 
+ */
+public class PushGatewayStreamReadingFilter implements Filter {
+    
+    private final PushGatewayService pushGatewayService;
+    
+    public PushGatewayStreamReadingFilter(PushGatewayService 
pushGatewayService) {
+        this.pushGatewayService = pushGatewayService;
+    }
+    
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {}
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain)
+            throws IOException, ServletException {
+        if (request instanceof HttpServletRequest httpRequest) {
+            // todo path 解析 monitor 等信息
+            boolean flag = 
pushGatewayService.pushMetricsData(request.getInputStream(), "monitorName");
+            if (flag) {
+                chain.doFilter(request, response);    
+            } else {
+                PushErrorRequestWrapper errorRequestWrapper = new 
PushErrorRequestWrapper(httpRequest);
+                chain.doFilter(errorRequestWrapper, response);   
+            }
+        } else {
+            chain.doFilter(request, response);
+        }
+    }
+
+    @Override
+    public void destroy() {}
+}
diff --git 
a/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/controller/PushGatewayController.java
 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/controller/PushGatewayController.java
index 1d0f5a06a3..1c58840028 100644
--- 
a/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/controller/PushGatewayController.java
+++ 
b/hertzbeat-push/src/main/java/org/apache/hertzbeat/push/controller/PushGatewayController.java
@@ -22,13 +22,9 @@ package org.apache.hertzbeat.push.controller;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.io.InputStream;
 import org.apache.hertzbeat.common.entity.dto.Message;
-import org.apache.hertzbeat.push.service.PushGatewayService;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.hertzbeat.push.config.PushErrorRequestWrapper;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -41,19 +37,13 @@ import 
org.springframework.web.bind.annotation.RestController;
 @RequestMapping(value = "/api/push/pushgateway1")
 public class PushGatewayController {
 
-    @Autowired
-    private PushGatewayService pushGatewayService;
-
-    @PostMapping("/{monitorname}")
-    @Operation(summary = "Push metric data to hertzbeat pushgateway", 
description = "Push metric data to hertzbeat pushgateway")
-    public ResponseEntity<Message<Void>> pushMetrics(HttpServletRequest 
request, @PathVariable("monitorname")String monitorName) throws IOException {
-        InputStream inputStream = request.getInputStream();
-        boolean result = pushGatewayService.pushMetricsData(inputStream, 
monitorName);
-        if (result) {
-            return ResponseEntity.ok(Message.success("Push success"));
-        }
-        else {
-            return ResponseEntity.ok(Message.success("Push failed"));
+    @PostMapping()
+    @Operation(summary = "Push metric data to hertzbeat push gateway", 
description = "Push metric data to hertzbeat push gateway")
+    public ResponseEntity<Message<Void>> pushMetrics(HttpServletRequest 
request) {
+        if (request instanceof PushErrorRequestWrapper) {
+            return ResponseEntity.ok(Message.success("Push failed"));     
+        } else {
+            return ResponseEntity.ok(Message.success("Push success"));   
         }
     }
 


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

Reply via email to