mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-16 04:21:49 +00:00
[AB-8] adding slash command and message context commands to metrics
This commit is contained in:
@@ -109,15 +109,16 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
public static final String COMMAND_CONFIRMATION_MESSAGE_TEMPLATE_KEY = "command_confirmation_message";
|
public static final String COMMAND_CONFIRMATION_MESSAGE_TEMPLATE_KEY = "command_confirmation_message";
|
||||||
public static final String COMMAND_PROCESSED = "command.processed";
|
public static final String COMMAND_PROCESSED = "command.processed";
|
||||||
public static final String STATUS_TAG = "status";
|
public static final String STATUS_TAG = "status";
|
||||||
|
public static final String TYPE_TAG = "type";
|
||||||
public static final CounterMetric COMMANDS_PROCESSED_COUNTER = CounterMetric
|
public static final CounterMetric COMMANDS_PROCESSED_COUNTER = CounterMetric
|
||||||
.builder()
|
.builder()
|
||||||
.name(COMMAND_PROCESSED)
|
.name(COMMAND_PROCESSED)
|
||||||
.tagList(Arrays.asList(MetricTag.getTag(STATUS_TAG, "processed")))
|
.tagList(Arrays.asList(MetricTag.getTag(STATUS_TAG, "processed"), MetricTag.getTag(TYPE_TAG, "message")))
|
||||||
.build();
|
.build();
|
||||||
public static final CounterMetric COMMANDS_WRONG_PARAMETER_COUNTER = CounterMetric
|
public static final CounterMetric COMMANDS_WRONG_PARAMETER_COUNTER = CounterMetric
|
||||||
.builder()
|
.builder()
|
||||||
.name(COMMAND_PROCESSED)
|
.name(COMMAND_PROCESSED)
|
||||||
.tagList(Arrays.asList(MetricTag.getTag(STATUS_TAG, "parameter.wrong")))
|
.tagList(Arrays.asList(MetricTag.getTag(STATUS_TAG, "parameter.wrong"), MetricTag.getTag(TYPE_TAG, "message")))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package dev.sheldan.abstracto.core.interaction.context.message;
|
package dev.sheldan.abstracto.core.interaction.context.message;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.CommandReceivedHandler;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionResult;
|
import dev.sheldan.abstracto.core.interaction.InteractionResult;
|
||||||
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
|
import dev.sheldan.abstracto.core.interaction.context.message.listener.MessageContextCommandListener;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.CounterMetric;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.MetricService;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.MetricTag;
|
||||||
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
import dev.sheldan.abstracto.core.models.listener.interaction.MessageContextInteractionModel;
|
||||||
import dev.sheldan.abstracto.core.service.FeatureConfigService;
|
import dev.sheldan.abstracto.core.service.FeatureConfigService;
|
||||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
@@ -17,6 +21,8 @@ import org.springframework.core.task.TaskExecutor;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@@ -48,11 +54,20 @@ public class MessageContextCommandListenerBean extends ListenerAdapter {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FeatureModeService featureModeService;
|
private FeatureModeService featureModeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MetricService metricService;
|
||||||
|
|
||||||
|
public static final CounterMetric MESSAGE_CONTEXT_COMMANDS_PROCESSED_COUNTER = CounterMetric
|
||||||
|
.builder()
|
||||||
|
.name(CommandReceivedHandler.COMMAND_PROCESSED)
|
||||||
|
.tagList(Arrays.asList(MetricTag.getTag(CommandReceivedHandler.STATUS_TAG, "processed"), MetricTag.getTag(CommandReceivedHandler.TYPE_TAG, "context.message")))
|
||||||
|
.build();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessageContextInteraction(@NotNull MessageContextInteractionEvent event) {
|
public void onMessageContextInteraction(@NotNull MessageContextInteractionEvent event) {
|
||||||
if(listenerList == null) return;
|
if(listenerList == null) return;
|
||||||
CompletableFuture.runAsync(() -> self.executeListenerLogic(event), messageContextCommandExecutor).exceptionally(throwable -> {
|
CompletableFuture.runAsync(() -> self.executeListenerLogic(event), messageContextCommandExecutor).exceptionally(throwable -> {
|
||||||
log.error("Failed to execute listener logic in async button event.", throwable);
|
log.error("Failed to execute listener logic in async message context event.", throwable);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -68,6 +83,7 @@ public class MessageContextCommandListenerBean extends ListenerAdapter {
|
|||||||
List<MessageContextCommandListener> validListener = filterFeatureAwareListener(listenerList, model);
|
List<MessageContextCommandListener> validListener = filterFeatureAwareListener(listenerList, model);
|
||||||
Optional<MessageContextCommandListener> listenerOptional = findListener(validListener, model);
|
Optional<MessageContextCommandListener> listenerOptional = findListener(validListener, model);
|
||||||
if(listenerOptional.isPresent()) {
|
if(listenerOptional.isPresent()) {
|
||||||
|
metricService.incrementCounter(MESSAGE_CONTEXT_COMMANDS_PROCESSED_COUNTER);
|
||||||
listener = listenerOptional.get();
|
listener = listenerOptional.get();
|
||||||
listener.execute(model);
|
listener.execute(model);
|
||||||
InteractionResult result = InteractionResult.fromSuccess();
|
InteractionResult result = InteractionResult.fromSuccess();
|
||||||
@@ -116,4 +132,9 @@ public class MessageContextCommandListenerBean extends ListenerAdapter {
|
|||||||
return listenerList;
|
return listenerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void filterPostProcessors() {
|
||||||
|
metricService.registerCounter(MESSAGE_CONTEXT_COMMANDS_PROCESSED_COUNTER, "Message context commands processed");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package dev.sheldan.abstracto.core.interaction.slash;
|
package dev.sheldan.abstracto.core.interaction.slash;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.command.Command;
|
import dev.sheldan.abstracto.core.command.Command;
|
||||||
|
import dev.sheldan.abstracto.core.command.CommandReceivedHandler;
|
||||||
import dev.sheldan.abstracto.core.command.condition.ConditionResult;
|
import dev.sheldan.abstracto.core.command.condition.ConditionResult;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.command.service.CommandService;
|
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||||
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
|
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.CounterMetric;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.MetricService;
|
||||||
|
import dev.sheldan.abstracto.core.metric.service.MetricTag;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
@@ -19,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@@ -45,6 +50,15 @@ public class SlashCommandListenerBean extends ListenerAdapter {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private List<PostCommandExecution> executions;
|
private List<PostCommandExecution> executions;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MetricService metricService;
|
||||||
|
|
||||||
|
public static final CounterMetric SLASH_COMMANDS_PROCESSED_COUNTER = CounterMetric
|
||||||
|
.builder()
|
||||||
|
.name(CommandReceivedHandler.COMMAND_PROCESSED)
|
||||||
|
.tagList(Arrays.asList(MetricTag.getTag(CommandReceivedHandler.STATUS_TAG, "processed"), MetricTag.getTag(CommandReceivedHandler.TYPE_TAG, "slash")))
|
||||||
|
.build();
|
||||||
|
|
||||||
public List<Command> getSlashCommands() {
|
public List<Command> getSlashCommands() {
|
||||||
if(commands == null || commands.isEmpty()) {
|
if(commands == null || commands.isEmpty()) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
@@ -59,7 +73,7 @@ public class SlashCommandListenerBean extends ListenerAdapter {
|
|||||||
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
||||||
if(commands == null || commands.isEmpty()) return;
|
if(commands == null || commands.isEmpty()) return;
|
||||||
CompletableFuture.runAsync(() -> self.executeListenerLogic(event), slashCommandExecutor).exceptionally(throwable -> {
|
CompletableFuture.runAsync(() -> self.executeListenerLogic(event), slashCommandExecutor).exceptionally(throwable -> {
|
||||||
log.error("Failed to execute listener logic in async button event.", throwable);
|
log.error("Failed to execute listener logic in async slash command event.", throwable);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -68,6 +82,7 @@ public class SlashCommandListenerBean extends ListenerAdapter {
|
|||||||
public void executeListenerLogic(SlashCommandInteractionEvent event) {
|
public void executeListenerLogic(SlashCommandInteractionEvent event) {
|
||||||
Optional<Command> potentialCommand = findCommand(event);
|
Optional<Command> potentialCommand = findCommand(event);
|
||||||
potentialCommand.ifPresent(command -> {
|
potentialCommand.ifPresent(command -> {
|
||||||
|
metricService.incrementCounter(SLASH_COMMANDS_PROCESSED_COUNTER);
|
||||||
try {
|
try {
|
||||||
commandService.isCommandExecutable(command, event).thenAccept(conditionResult -> {
|
commandService.isCommandExecutable(command, event).thenAccept(conditionResult -> {
|
||||||
self.executeCommand(event, command, conditionResult);
|
self.executeCommand(event, command, conditionResult);
|
||||||
@@ -123,6 +138,7 @@ public class SlashCommandListenerBean extends ListenerAdapter {
|
|||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void filterPostProcessors() {
|
public void filterPostProcessors() {
|
||||||
|
metricService.registerCounter(SLASH_COMMANDS_PROCESSED_COUNTER, "Slash Commands processed");
|
||||||
executions = executions
|
executions = executions
|
||||||
.stream()
|
.stream()
|
||||||
.filter(PostCommandExecution::supportsSlash)
|
.filter(PostCommandExecution::supportsSlash)
|
||||||
|
|||||||
Reference in New Issue
Block a user