PrometheusServiceImpl.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.jjt.biz.service.impl;
  2. import cn.hutool.http.HttpRequest;
  3. import cn.hutool.http.HttpResponse;
  4. import cn.hutool.http.HttpUtil;
  5. import cn.hutool.http.Method;
  6. import cn.hutool.json.JSONArray;
  7. import cn.hutool.json.JSONObject;
  8. import cn.hutool.json.JSONUtil;
  9. import com.jjt.biz.service.IPrometheusService;
  10. import com.jjt.common.utils.StringUtils;
  11. import com.jjt.common.utils.sign.Base64;
  12. import com.jjt.system.service.ISysConfigService;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.stereotype.Service;
  15. import org.yaml.snakeyaml.util.UriEncoder;
  16. import javax.annotation.Resource;
  17. import java.nio.charset.StandardCharsets;
  18. import java.text.DecimalFormat;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. /**
  22. * 告警记录Service业务层处理
  23. *
  24. * @author jjt
  25. * @date 2024-08-08
  26. */
  27. @Service
  28. @Slf4j
  29. public class PrometheusServiceImpl implements IPrometheusService {
  30. @Resource
  31. private ISysConfigService configService;
  32. /**
  33. * 获取接口地址
  34. *
  35. * @return 接口地址
  36. */
  37. private String baseUri() {
  38. return configService.selectConfigByKey("pm.url");
  39. }
  40. /**
  41. * 即时查询
  42. *
  43. * @param param 查询参数
  44. * @return 结果
  45. */
  46. @Override
  47. public Float query(String param) {
  48. if (StringUtils.isNotEmpty(param)) {
  49. if (StringUtils.isNotEmpty(param)) {
  50. String uri = baseUri() + "/api/v1/query";
  51. param = UriEncoder.encode(param);
  52. Map<String, Object> map = new HashMap<>(16);
  53. map.put("query", param);
  54. HttpRequest request = HttpUtil.createPost(uri);
  55. request.setMethod(Method.GET);
  56. String auth = configService.selectConfigByKey("pm.param");
  57. if (StringUtils.isNotEmpty(auth)) {
  58. String baseAuth = "Basic " + Base64.encode(auth.getBytes());
  59. request.header("Authorization", baseAuth);
  60. }
  61. request.form(map);
  62. request.setConnectionTimeout(2000);
  63. try (HttpResponse execute = request.execute()) {
  64. if (!execute.isOk()) {
  65. throw new RuntimeException("status:" + execute.getStatus() + "\tres:" + execute.body());
  66. }
  67. String res = new String(execute.body().getBytes(), StandardCharsets.UTF_8);
  68. JSONObject object = JSONUtil.parseObj(res, true);
  69. JSONArray array = object.getJSONObject("data").getJSONArray("result");
  70. JSONArray value = array.getJSONObject(0).getJSONArray("value");
  71. DecimalFormat df = new DecimalFormat("#0.00");
  72. return Float.parseFloat(df.format(value.getFloat(1)));
  73. } catch (Exception e) {
  74. log.error("调用prometheus接口失败, url=" + uri + ",param=" + param, e);
  75. return null;
  76. }
  77. } else {
  78. return null;
  79. }
  80. } else {
  81. return null;
  82. }
  83. }
  84. }