Stirling-PDF/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java

104 lines
4.1 KiB
Java
Raw Normal View History

2023-05-18 00:58:15 +02:00
package stirling.software.SPDF.controller.web;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
2023-05-21 18:12:18 +02:00
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
import io.swagger.v3.oas.annotations.Operation;
2023-06-29 22:51:08 +02:00
import io.swagger.v3.oas.annotations.Parameter;
2023-06-25 10:16:32 +02:00
import io.swagger.v3.oas.annotations.tags.Tag;
2023-05-21 18:12:18 +02:00
2023-05-18 00:58:15 +02:00
@RestController
@RequestMapping("/api/v1")
2023-06-25 10:16:32 +02:00
@Tag(name = "API", description = "Info APIs")
2023-05-18 00:58:15 +02:00
public class MetricsController {
private final MeterRegistry meterRegistry;
public MetricsController(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@GetMapping("/status")
@Operation(summary = "Application status and version",
description = "This endpoint returns the status of the application and its version number.")
public Map<String, String> getStatus() {
Map<String, String> status = new HashMap<>();
status.put("status", "UP");
status.put("version", getClass().getPackage().getImplementationVersion());
return status;
}
@GetMapping("/loads")
@Operation(summary = "GET request count",
description = "This endpoint returns the total count of GET requests or the count of GET requests for a specific endpoint.")
2023-06-29 22:51:08 +02:00
public Double getPageLoads(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional<String> endpoint) {
2023-05-18 00:58:15 +02:00
try {
2023-06-29 22:51:08 +02:00
double count = 0.0;
2023-05-18 00:58:15 +02:00
for (Meter meter : meterRegistry.getMeters()) {
if (meter.getId().getName().equals("http.requests")) {
String method = meter.getId().getTag("method");
if (method != null && method.equals("GET")) {
2023-06-29 22:51:08 +02:00
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if(!endpoint.get().startsWith("/")) {
endpoint = Optional.of("/" + endpoint.get());
}
System.out.println("loads " + endpoint.get() + " vs " + meter.getId().getTag("uri"));
if(endpoint.get().equals(meter.getId().getTag("uri"))){
if (meter instanceof Counter) {
count += ((Counter) meter).count();
}
}
} else {
if (meter instanceof Counter) {
count += ((Counter) meter).count();
}
}
2023-05-18 00:58:15 +02:00
}
}
}
return count;
} catch (Exception e) {
return -1.0;
}
}
@GetMapping("/requests")
@Operation(summary = "POST request count",
description = "This endpoint returns the total count of POST requests or the count of POST requests for a specific endpoint.")
2023-06-29 22:51:08 +02:00
public Double getTotalRequests(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional<String> endpoint) {
2023-05-18 00:58:15 +02:00
try {
Counter counter;
2023-06-29 22:51:08 +02:00
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if(!endpoint.get().startsWith("/")) {
endpoint = Optional.of("/" + endpoint.get());
}
System.out.println("loads " + endpoint.get() + " vs " + meterRegistry.get("http.requests").tags("uri", endpoint.get()).toString());
2023-05-18 00:58:15 +02:00
counter = meterRegistry.get("http.requests")
.tags("method", "POST", "uri", endpoint.get()).counter();
} else {
counter = meterRegistry.get("http.requests")
.tags("method", "POST").counter();
}
return counter.count();
} catch (Exception e) {
2023-06-29 22:51:08 +02:00
e.printStackTrace();
return 0.0;
2023-05-18 00:58:15 +02:00
}
}
}