From ee7f9180dc63a7f2c513c16df466c356251556e9 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sun, 25 Jul 2021 15:17:27 +0200 Subject: [PATCH] [AB-xxx] adding JDA metrics for all events adding support to template environment variables in liquibase configuration removing not needed column from component payload --- .../abstracto/core/metric/JDAMetrics.java | 43 +++++++++++++++++++ .../core/repository/UserRepository.java | 10 ----- .../resources/migrations/1.3.5/collection.xml | 10 +++++ .../1.3.5/tables/component_payload.xml | 14 ++++++ .../migrations/1.3.5/tables/tables.xml | 10 +++++ .../resources/migrations/core-changeLog.xml | 1 + .../src/main/docker/deployment/python/main.py | 10 ++++- .../python/templates/liquibase.properties.j2 | 5 ++- 8 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java create mode 100644 abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/collection.xml create mode 100644 abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/component_payload.xml create mode 100644 abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/tables.xml 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 new file mode 100644 index 000000000..fe029792c --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/metric/JDAMetrics.java @@ -0,0 +1,43 @@ +package dev.sheldan.abstracto.core.metric; + +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.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.events.GenericEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.HashMap; + +@Component +@Slf4j +public class JDAMetrics extends ListenerAdapter { + @Autowired + private MetricService metricService; + + public static final String JDA_EVENT_METRIC = "jda.event"; + public static final String EVENT_CLASS = "event.class"; + private final HashMap coveredEvents = new HashMap<>(); + + @Override + public void onGenericEvent(@NotNull GenericEvent event) { + if(!coveredEvents.containsKey(event.getClass())) { + String eventName = event.getClass().getSimpleName(); + CounterMetric metric = + CounterMetric + .builder() + .tagList(Arrays.asList(MetricTag.getTag(EVENT_CLASS, eventName))) + .name(JDA_EVENT_METRIC) + .build(); + log.info("Registering new metric for event {}. There are now {} metrics.", eventName, coveredEvents.size()); + metricService.registerCounter(metric, "Events of type " + eventName); + coveredEvents.put(event.getClass(), metric); + } + metricService.incrementCounter(coveredEvents.get(event.getClass())); + } + +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/repository/UserRepository.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/repository/UserRepository.java index 8cb58b5c6..7192722e0 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/repository/UserRepository.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/repository/UserRepository.java @@ -1,19 +1,9 @@ package dev.sheldan.abstracto.core.repository; import dev.sheldan.abstracto.core.models.database.AUser; -import org.jetbrains.annotations.NotNull; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.lang.NonNull; import org.springframework.stereotype.Repository; -import java.util.Optional; - @Repository public interface UserRepository extends JpaRepository { - @NotNull - @Override - Optional findById(@NonNull Long aLong); - - @Override - boolean existsById(@NonNull Long aLong); } diff --git a/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/collection.xml b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/collection.xml new file mode 100644 index 000000000..35915fde6 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/collection.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/component_payload.xml b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/component_payload.xml new file mode 100644 index 000000000..9c110ceae --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/component_payload.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/tables.xml b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/tables.xml new file mode 100644 index 000000000..12bc40dad --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/resources/migrations/1.3.5/tables/tables.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/resources/migrations/core-changeLog.xml b/abstracto-application/core/core-impl/src/main/resources/migrations/core-changeLog.xml index 6bfd8a24b..264f6e455 100644 --- a/abstracto-application/core/core-impl/src/main/resources/migrations/core-changeLog.xml +++ b/abstracto-application/core/core-impl/src/main/resources/migrations/core-changeLog.xml @@ -18,4 +18,5 @@ + \ No newline at end of file diff --git a/abstracto-application/installer/src/main/docker/deployment/python/main.py b/abstracto-application/installer/src/main/docker/deployment/python/main.py index 600d6fe35..e66ad0c2e 100644 --- a/abstracto-application/installer/src/main/docker/deployment/python/main.py +++ b/abstracto-application/installer/src/main/docker/deployment/python/main.py @@ -3,6 +3,7 @@ import json import liquibase_deploy import os import sys +import re import templates_deploy from zipfile import ZipFile @@ -39,6 +40,12 @@ if not use_folder: print("Loading templates") templateLoader = jinja2.FileSystemLoader(searchpath="/python/templates") templateEnv = jinja2.Environment(loader=templateLoader) + variable_prefix_pattern = re.compile(r'ABSTRACTO_\w+') + variables = {} + for key, val in os.environ.items(): + if variable_prefix_pattern.match(key): + variables[key.lower().replace('_', '')] = val + template = templateEnv.get_template("liquibase.properties.j2") if deploy_liquibase: @@ -50,7 +57,8 @@ if not use_folder: liquibase_zip.extractall(target_folder) change_log_file = liquibase_artifact['file'] liquibase_config_text = template.render(change_log_file=change_log_file, db_host=db_config.host, db_port=db_config.port, - db_database=db_config.database, db_user=db_config.user, db_password=db_config.password, postgres_driver_path=postgres_driver_path) + db_database=db_config.database, db_user=db_config.user, db_password=db_config.password, + postgres_driver_path=postgres_driver_path, variables=variables) property_path = target_folder + '/liquibase.properties' with open(property_path, 'w') as liquibase_target_properties: liquibase_target_properties.write(liquibase_config_text) diff --git a/abstracto-application/installer/src/main/docker/deployment/python/templates/liquibase.properties.j2 b/abstracto-application/installer/src/main/docker/deployment/python/templates/liquibase.properties.j2 index bcce4cae7..cf429acdf 100644 --- a/abstracto-application/installer/src/main/docker/deployment/python/templates/liquibase.properties.j2 +++ b/abstracto-application/installer/src/main/docker/deployment/python/templates/liquibase.properties.j2 @@ -3,4 +3,7 @@ driver: org.postgresql.Driver url: jdbc:postgresql://{{ db_host }}:{{ db_port }}/{{ db_database }} username: {{ db_user }} password: {{ db_password }} -classpath: {{ postgres_driver_path }} \ No newline at end of file +classpath: {{ postgres_driver_path }} +{% for key, value in variables.items() %} +parameter.{{ key }}: {{ value }} +{% endfor %} \ No newline at end of file