Pārlūkot izejas kodu

解决prometheus需要认证相关问题

wukai 10 mēneši atpakaļ
vecāks
revīzija
4b4d1dfa54

+ 81 - 40
jjt-admin/src/test/java/com/test/Test.java

@@ -1,8 +1,24 @@
 package com.test;
 
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import com.jjt.common.utils.http.HttpUtils;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.http.Method;
+import com.jjt.common.utils.StringUtils;
+import com.jjt.common.utils.sign.Base64;
+import org.yaml.snakeyaml.util.UriEncoder;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Test$
@@ -11,43 +27,68 @@ import com.jjt.common.utils.http.HttpUtils;
  * @date 2024/8/22 22:13
  */
 public class Test {
-    public static void main(String[] args) {
-        String url = "http://192.168.188.188:18000/api/sas/diff";
-//        jsonObject.put("data", );
-        String params = "{\n" +
-                "  \"data\": [\n" +
-                "    55,\n" +
-                "    98,\n" +
-                "    67,\n" +
-                "    20,\n" +
-                "    29,\n" +
-                "    27,\n" +
-                "    59,\n" +
-                "    98,\n" +
-                "    88,\n" +
-                "    27,\n" +
-                "    90,\n" +
-                "    90,\n" +
-                "    94,\n" +
-                "    29,\n" +
-                "    81,\n" +
-                "    77,\n" +
-                "    46,\n" +
-                "    65,\n" +
-                "    35\n" +
-                "    ]\n" +
-                "}";
-        JSONObject jsonObject = JSONObject.parseObject(params);
-//        String result = HttpUtils.dataPost(url, jsonObject);
+    public static void main(String[] args) throws Exception {
+        String uri = "http://192.168.188.66:9090/api/v1/query"; // 目标URL
+        String param = "node_cpu_guest_seconds_total{cpu=\"0\",mode=\"user\"}";
+        param = UriEncoder.encode(param);
+        System.err.println(Base64.encode("admin:123456".getBytes()));
+        String auth = "admin:123456";
+        String baseAuth = "Basic " + Base64.encode(auth.getBytes());
+        Map<String, Object> map = new HashMap<>(16);
+        map.put("query", param);
+        HttpRequest request = HttpUtil.createPost(uri);
+        request.setMethod(Method.GET);
+        request.header("Authorization", baseAuth);
+        request.form(map);
+        request.setConnectionTimeout(5000);
+        HttpResponse execute = request.execute();
+        // 如果操作成功,则不会执行以下代码
+        String res = new String(execute.body().getBytes(), StandardCharsets.UTF_8);
+        System.err.println(res);
+    }
+
+    public static HttpResponse response(HttpRequest request) throws Exception {
+        try (HttpResponse res = request.execute()) {
+            if (!res.isOk()) {
+                throw new RuntimeException(res.body());
+            }
+            return res;
+        }
+    }
 
-        JSONObject obj = new JSONObject();
-        JSONArray array = new JSONArray();
-        array.add(1);
-        array.add(3);
-        array.add(5);
-        array.add(7);
-        array.add(123);
-        obj.put("data", array);
-        System.err.println(obj);
+    public static String sendGet(String url, String param, String contentType, String baseAuth) {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try {
+            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("Authorization", baseAuth);
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (ConnectException e) {
+            e.printStackTrace();
+        } catch (SocketTimeoutException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (Exception ex) {
+            }
+        }
+        return result.toString();
     }
 }

+ 5 - 0
jjt-biz/pom.xml

@@ -45,5 +45,10 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
+        </dependency>
     </dependencies>
 </project>

+ 0 - 6
jjt-biz/src/main/java/com/jjt/biz/service/IPrometheusService.java

@@ -17,10 +17,4 @@ public interface IPrometheusService {
      */
     Float query(String param);
 
-    /**
-     * 普罗米修斯接口
-     *
-     * @return 结果
-     */
-    JSONObject range();
 }

+ 43 - 26
jjt-biz/src/main/java/com/jjt/biz/service/impl/PrometheusServiceImpl.java

@@ -1,17 +1,25 @@
 package com.jjt.biz.service.impl;
 
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.http.Method;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.jjt.biz.service.IPrometheusService;
-import com.jjt.common.core.redis.RedisCache;
 import com.jjt.common.utils.StringUtils;
-import com.jjt.common.utils.http.HttpUtils;
+import com.jjt.common.utils.sign.Base64;
 import com.jjt.system.service.ISysConfigService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.yaml.snakeyaml.util.UriEncoder;
 
 import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
 import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 告警记录Service业务层处理
@@ -20,11 +28,10 @@ import java.text.DecimalFormat;
  * @date 2024-08-08
  */
 @Service
+@Slf4j
 public class PrometheusServiceImpl implements IPrometheusService {
     @Resource
     private ISysConfigService configService;
-    @Resource
-    private RedisCache redisCache;
 
     /**
      * 获取接口地址
@@ -44,30 +51,40 @@ public class PrometheusServiceImpl implements IPrometheusService {
     @Override
     public Float query(String param) {
         if (StringUtils.isNotEmpty(param)) {
-            String uri = baseUri() + "/api/v1/query?query=";
-            uri += UriEncoder.encode(param);
-            String result = HttpUtils.sendGet(uri);
-            JSONObject jsonObject = JSONObject.parseObject(result);
-            try {
-                JSONArray array = jsonObject.getJSONObject("data").getJSONArray("result");
-                JSONArray value = array.getJSONObject(0).getJSONArray("value");
-                DecimalFormat df = new DecimalFormat("#0.00");
-                return Float.parseFloat(df.format(value.getFloat(1)));
-            } catch (Exception ignored) {
+            if (StringUtils.isNotEmpty(param)) {
+                String uri = baseUri() + "/api/v1/query";
+                param = UriEncoder.encode(param);
+
+                Map<String, Object> map = new HashMap<>(16);
+                map.put("query", param);
+                HttpRequest request = HttpUtil.createPost(uri);
+                request.setMethod(Method.GET);
+                String auth = configService.selectConfigByKey("pm.param");
+                if (StringUtils.isNotEmpty(auth)) {
+                    String baseAuth = "Basic " + Base64.encode(auth.getBytes());
+                    request.header("Authorization", baseAuth);
+                }
+                request.form(map);
+                request.setConnectionTimeout(2000);
+                try (HttpResponse execute = request.execute()) {
+                    if (!execute.isOk()) {
+                        throw new RuntimeException("status:" + execute.getStatus() + "\tres:" + execute.body());
+                    }
+                    String res = new String(execute.body().getBytes(), StandardCharsets.UTF_8);
+                    JSONObject object = JSONUtil.parseObj(res, true);
+                    JSONArray array = object.getJSONObject("data").getJSONArray("result");
+                    JSONArray value = array.getJSONObject(0).getJSONArray("value");
+                    DecimalFormat df = new DecimalFormat("#0.00");
+                    return Float.parseFloat(df.format(value.getFloat(1)));
+                } catch (Exception e) {
+                    log.error("调用prometheus接口失败, url=" + uri + ",param=" + param, e);
+                    return null;
+                }
+            } else {
                 return null;
             }
         } else {
             return null;
         }
     }
-
-    /**
-     * 普罗米修斯接口
-     *
-     * @return 结果
-     */
-    @Override
-    public JSONObject range() {
-        return null;
-    }
 }