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]