diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java index 924610086..96a0550f6 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java @@ -5,7 +5,9 @@ import dev.sheldan.abstracto.core.metric.service.MetricService; import dev.sheldan.abstracto.core.metric.service.MetricTag; import lombok.extern.slf4j.Slf4j; import net.dv8tion.jda.api.events.GenericEvent; +import net.dv8tion.jda.api.events.http.HttpRequestEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.Route; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,8 +21,13 @@ public class JDAMetrics extends ListenerAdapter { private MetricService metricService; public static final String JDA_EVENT_METRIC = "jda.event"; + public static final String JDA_REQUEST_METRIC = "jda.request"; public static final String EVENT_CLASS = "event.class"; - private final HashMap coveredEvents = new HashMap<>(); + public static final String HTTP_METHOD = "http.method"; + public static final String HTTP_URL = "http.url"; + public static final String HTTP_KEY = "http.key"; + private final HashMap, CounterMetric> coveredEvents = new HashMap<>(); + private final HashMap coveredRoutes = new HashMap<>(); @Override public void onGenericEvent(GenericEvent event) { @@ -39,4 +46,25 @@ public class JDAMetrics extends ListenerAdapter { metricService.incrementCounter(coveredEvents.get(event.getClass())); } + @Override + public void onHttpRequest(HttpRequestEvent event) { + Route baseRoute = event.getRequest().getRoute().getBaseRoute(); + String urlKey = baseRoute.toString(); + if(!coveredRoutes.containsKey(urlKey)) { + CounterMetric metric = + CounterMetric + .builder() + .tagList(Arrays.asList( + MetricTag.getTag(HTTP_METHOD, baseRoute.getMethod().name()), + MetricTag.getTag(HTTP_URL, baseRoute.getRoute()), + MetricTag.getTag(HTTP_KEY, baseRoute.toString()))) + .name(JDA_REQUEST_METRIC) + .build(); + metricService.registerCounter(metric, "Requests towards URL " + urlKey); + coveredRoutes.put(urlKey, metric); + log.info("Registering new metric for URL {}. There are now {} metrics.", urlKey, coveredRoutes.size()); + } + metricService.incrementCounter(coveredRoutes.get(urlKey)); + } + }