pref: NEZ-3215 nz-agent jdk&springboot 版本升级

This commit is contained in:
shizhendong
2023-10-10 17:53:26 +08:00
parent 968406eedc
commit 9d3987ab3b
12 changed files with 113 additions and 116 deletions

View File

@@ -1,5 +1,5 @@
# docker镜像
image: git.mesalab.cn:7443/nezha/nz-build-env:1.3
image: git.mesalab.cn:7443/nezha/nz-build-env:1.5
# 定义全局变量
variables:
MINIO_HOST: 'http://192.168.40.48:2020/'

23
pom.xml
View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<version>3.1.3</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>net.geedge</groupId>
@@ -15,7 +15,7 @@
<name>nz-agent</name>
<description>nezha prometheus config sync agent</description>
<properties>
<java.version>1.8</java.version>
<java.version>21</java.version>
<log4j2.version>2.17.0</log4j2.version>
<commons.fileupload.version>1.3.1</commons.fileupload.version>
</properties>
@@ -28,6 +28,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -53,6 +54,7 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -70,11 +72,6 @@
<version>${commons.fileupload.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
</dependency>
<!-- snmp4j -->
<dependency>
<groupId>org.snmp4j</groupId>
@@ -88,6 +85,13 @@
<artifactId>reactive-streams</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.1.3</version>
</dependency>
<!-- 添加 XJar 依赖 -->
<!-- <dependency> -->
<!-- <groupId>com.github.core-lib</groupId> -->
@@ -118,10 +122,9 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<version>3.11.0</version>
<configuration>
<source>8</source>
<target>8</target>
<release>${java.version}</release>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

View File

@@ -1,22 +1,23 @@
package net.geedge.confagent.config;
import org.apache.http.HeaderElement;
import org.apache.http.HeaderElementIterator;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.HeaderElement;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.config.Registry;
import org.apache.hc.core5.http.config.RegistryBuilder;
import org.apache.hc.core5.http.message.BasicHeaderElementIterator;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.util.TimeValue;
import org.apache.hc.core5.util.Timeout;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeaderElementIterator;
import org.apache.http.protocol.HTTP;
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
@@ -119,9 +120,9 @@ public class RestTemplateConfig {
connectionManager.setMaxTotal(maxTotal);
// 路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(maxPerRoute);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout)// 服务器返回数据(response)的时间超过该时间抛出readtimeout
.setConnectTimeout(connectionTimeout)// 连接上服务器(握手成功)的时间超出该时间抛出connect timeout
.setConnectionRequestTimeout(connectionRequestTimeout)// 从连接池中获取连接的超时时间超过该时间未拿到可用连接会抛出org.apache.http.conn.ConnectionPoolTimeoutException:Timeout
RequestConfig requestConfig = RequestConfig.custom().setResponseTimeout(Timeout.ofMilliseconds(socketTimeout))// 服务器返回数据(response)的时间超过该时间抛出readtimeout
.setConnectTimeout(Timeout.ofMilliseconds(connectionTimeout))// 连接上服务器(握手成功)的时间超出该时间抛出connect timeout
.setConnectionRequestTimeout(Timeout.ofMilliseconds(connectionRequestTimeout))// 从连接池中获取连接的超时时间超过该时间未拿到可用连接会抛出org.apache.http.conn.ConnectionPoolTimeoutException:Timeout
// waiting for connection from pool
.build();
return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager)
@@ -137,22 +138,20 @@ public class RestTemplateConfig {
public ConnectionKeepAliveStrategy connectionKeepAliveStrategy() {
return new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
// Honor 'keep-alive' header
HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator(HTTP.CONN_KEEP_ALIVE));
public TimeValue getKeepAliveDuration(HttpResponse httpResponse, HttpContext httpContext) {
BasicHeaderElementIterator it = new BasicHeaderElementIterator(httpResponse.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
HeaderElement he = it.nextElement();
String param = he.getName();
String value = he.getValue();
HeaderElement next = it.next();
String param = next.getName();
String value = next.getValue();
if (value != null && "timeout".equalsIgnoreCase(param)) {
try {
return Long.parseLong(value) * 1000;
} catch (NumberFormatException ignore) {
return TimeValue.ofMilliseconds(Integer.valueOf(value) * 1000);
} catch (NumberFormatException e) {
}
}
}
return keepAliveTime * 1000;
return TimeValue.ofMilliseconds(keepAliveTime * 1000);
}
};
}

View File

@@ -19,8 +19,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;

View File

@@ -22,8 +22,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URI;
import java.nio.charset.Charset;

View File

@@ -4,7 +4,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

View File

@@ -10,10 +10,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -189,7 +189,7 @@ public class LokiController extends BaseController {
}
public void requestLoki(String lokiPath, String token, HttpServletRequest request, HttpServletResponse response) {
String queryString = ReflectUtil.invoke(request, "getQueryString");
String queryString = request.getQueryString();
String targetUrl = String.format("%s:%s%s?%s", "127.0.0.1", 13100, lokiPath,Tool.StrUtil.emptyToDefault(queryString, ""));
String url = UrlBuilder.ofHttp(targetUrl, Charset.forName("utf-8")).toString();
@@ -227,7 +227,11 @@ public class LokiController extends BaseController {
String responseMessage = conn.getResponseMessage();
Map<String, List<String>> responseHeaders = conn.getHeaderFields();
response.reset();
response.setStatus(responseCode, responseMessage);
response.setStatus(responseCode);
if (responseCode > 400) {
response.sendError(responseCode, responseMessage);
}
// 复制响应头
for (Map.Entry<String, List<String>> en : responseHeaders.entrySet()) {
String key = en.getKey();

View File

@@ -1,6 +1,7 @@
package net.geedge.confagent.controller;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletRequest;
import net.geedge.confagent.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -9,8 +10,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class OTAController extends BaseController{

View File

@@ -1,47 +1,36 @@
package net.geedge.confagent.controller;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.net.url.UrlPath;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpConnection;
import cn.hutool.log.Log;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Tags;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.net.url.UrlPath;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpConnection;
import cn.hutool.log.Log;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Tags;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import java.util.*;
@RestController
@RequestMapping("/prometheus")
@@ -179,7 +168,7 @@ public class PrometheusController extends BaseController{
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String hn = headerNames.nextElement();
ReflectUtil.invoke(conn,"addRequestProperty",hn,request.getHeader(hn));
conn.addRequestProperty(hn,request.getHeader(hn));
}
if (!"GET".equalsIgnoreCase(method)) {
conn.setDoOutput(true);
@@ -193,13 +182,17 @@ public class PrometheusController extends BaseController{
connInputStream = (responseCode < 400)? conn.getInputStream():conn.getErrorStream();
String responseMessage = conn.getResponseMessage();
Map<String, List<String>> responseHeaders = conn.getHeaderFields();
response.setStatus(responseCode, responseMessage);
response.setStatus(responseCode);
if (responseCode > 400) {
response.sendError(responseCode, responseMessage);
}
//复制响应头
for(Map.Entry<String, List<String>> en : responseHeaders.entrySet()) {
String key = en.getKey();
if (Tool.StrUtil.isEmpty(key) || "Transfer-Encoding".equals(key)) continue;
List<String> value = en.getValue();
ReflectUtil.invoke(response,"addHeader",key,Tool.StrUtil.join("; ",value));
response.addHeader(key, Tool.StrUtil.join("; ",value));
}
Tool.IoUtil.copy(connInputStream, resOutputStream);

View File

@@ -9,6 +9,8 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.http.Header;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONObject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
@@ -26,10 +28,8 @@ import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.List;
@@ -232,8 +232,7 @@ public class TalonProxyController extends BaseController {
// talon token
headers.add(HttpHeaders.AUTHORIZATION, targetToken);
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("UTF-8");
StandardServletMultipartResolver commonsMultipartResolver = new StandardServletMultipartResolver();
if (commonsMultipartResolver.isMultipart(request)) {
MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();

View File

@@ -1,22 +1,20 @@
package net.geedge.confagent.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import java.io.IOException;
import java.io.PrintWriter;
@Component
public class TokenInterceptor implements HandlerInterceptor {

View File

@@ -1,5 +1,12 @@
package net.geedge.confagent.util;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -8,15 +15,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.log.Log;
@Configuration
@Order(value = 1)
public class ConfagentUtil {