gpt4 book ai didi

java - Spring 启动: Count Page Views - Actuators

转载 作者:行者123 更新时间:2023-11-30 01:53:18 24 4
gpt4 key购买 nike

我需要计算每个端点上的 View 数。这个想法是为所有端点创建一个通用的请求计数映射,该映射应根据动态输入的端点返回 View 计数。

假设有人想要检查 http://localhost:8080/user/101 上的浏览​​次数。

  1. RequestMappping path =/admin/count & RequestParam = url(此处
    /用户/101)
  2. 然后根据RequestParam创建动态请求http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/user/101
  3. 获取并返回动态请求(JSON对象)的响应并获取COUNT的值

I stuck on how to send a dynamic request to http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/user/101 and return the response of it and get the count value

<小时/>
@RequestMapping(path="/admin/count",method=RequestMethod.POST)
public JSONObject count(@RequestParam(name="url") final String url)//@PathVariable(name="url") final String url
{
String finalURL = "http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:" + url + "";
return sendRequestToURL(finalURL);
}
<小时/>
@RequestMapping(path="/{finalURL}",method=RequestMethod.GET)
public JSONObject sendRequestToURL(@PathVariable("finalURL") String url)
{
//How to return the response Here
}
<小时/>

这是我直接触发 URL 时得到的结果

GET: http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/user/101

  {
"name": "http.server.requests",
"description": null,
"baseUnit": "seconds",
"measurements": [
{
"statistic": "COUNT",
"value": 1
},
{
"statistic": "TOTAL_TIME",
"value": 0.3229436
},
{
"statistic": "MAX",
"value": 0.3229436
}
],
"availableTags": [
{
"tag": "exception",
"values": [
"None"
]
},
{
"tag": "method",
"values": [
"GET"
]
},
{
"tag": "outcome",
"values": [
"SUCCESS"
]
},
{
"tag": "status",
"values": [
"200"
]
}
]
}
<小时/>

环境:

    `spring boot 2.1.2.RELEASE`
<java.version>1.8</java.version>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

最佳答案

所以你想封装actuator/metrics/admin/count

Java 中调用 Rest API 的方法和库有很多种

我会添加最简单的

类似这样的事情

public JSONObject sendRequestToURL(@PathVariable("finalURL") String urlToRead)
{
StringBuilder result = new StringBuilder();
URL url = new URL(urlToRead);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
return new JSONObject(result.toString()); // org.json
}

编辑1:

你就快到了。只需要将 String 解析为 JSONObject 即可。也许可以试试这个

String strJson = result.toString().replace("\\\"","'");
JSONObject jo = new JSONObject(strJson.substring(1,json.length()-1));
return jo;

编辑2:

我猜你已经安装了 Spring Security。

当您在内部调用 API 时,Spring 会将其视为需要身份验证的外部调用。

作为解决方法,您可以排除 /actuator来自安全上下文的 API。

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/actuator*").permitAll()

...
}

或 XML 格式

<security:http  auto-config="true"  use-expressions="true"   >
<security:intercept-url pattern="/actuator*" access="permitAll"/>

...
</security:http>

希望 Spring 安全性会忽略此 URL,并且您将不会收到登录表单。

关于java - Spring 启动: Count Page Views - Actuators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55332664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com