]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-22479 Implement after() method for providers
authorAlain Kermis <alain.kermis@sonarsource.com>
Fri, 19 Jul 2024 14:01:17 +0000 (16:01 +0200)
committersonartech <sonartech@sonarsource.com>
Wed, 24 Jul 2024 20:02:49 +0000 (20:02 +0000)
server/sonar-db-migration/src/main/java/org/sonar/server/telemetry/TelemetryDbMigrationStepsProvider.java
server/sonar-db-migration/src/main/java/org/sonar/server/telemetry/TelemetryDbMigrationSuccessProvider.java
server/sonar-db-migration/src/main/java/org/sonar/server/telemetry/TelemetryDbMigrationTotalTimeProvider.java
server/sonar-telemetry-core/src/main/java/org/sonar/telemetry/core/TelemetryDataProvider.java
server/sonar-telemetry/src/main/java/org/sonar/telemetry/TelemetryDaemon.java
server/sonar-telemetry/src/main/java/org/sonar/telemetry/metrics/TelemetryMetricsLoader.java

index c2e52da08ba6f42e3655093ab37bab223d00e0f9..ea400c355ec16dd332dfff8873dbbdf0d2886359 100644 (file)
@@ -59,7 +59,7 @@ public class TelemetryDbMigrationStepsProvider implements TelemetryDataProvider<
   }
 
   @Override
-  public void destroy() {
+  public void after() {
     dbMigrationCompletedSteps = null;
   }
 }
index 1680a99d770536fa5fc6d95ed7ea244e725dbc1f..b50d241f8a5ac43f8271818c3ed953f4b404eee4 100644 (file)
@@ -59,7 +59,7 @@ public class TelemetryDbMigrationSuccessProvider implements TelemetryDataProvide
   }
 
   @Override
-  public void destroy() {
+  public void after() {
     dbMigrationSuccess = null;
   }
 }
index 6be779e1f84b8054527c031410f4f05a109985ec..7fe57f039342494b230738eb6ba56eb300a97cc3 100644 (file)
@@ -59,7 +59,7 @@ public class TelemetryDbMigrationTotalTimeProvider implements TelemetryDataProvi
   }
 
   @Override
-  public void destroy() {
+  public void after() {
     dbMigrationTotalTime = null;
   }
 }
index 47054aece8eeb61cdeedcc3886ea410e6d4eba1d..b91453f3aa38345592440bcc310d6abee2b31e6c 100644 (file)
@@ -77,7 +77,12 @@ public interface TelemetryDataProvider<T> {
     throw new IllegalStateException("Not implemented");
   }
 
-  default void destroy() {
+  /**
+   * This method will be executed for every telemetry provider after telemetry metrics are sent. This is important for some telemetry
+   * providers, more specifically, those adhoc metrics which are usually to be sent as once off values as these values are typically
+   * stored in memory. The most common use case would be to clear the data.
+   */
+  default void after() {
     // this method does nothing by default it is used to perform cleanup tasks if needed
   }
 }
index a528094695a26191714e816d1cd5d8a369f0a902..f920ff8956a57c0b87a04b486c5e0874b55a745c 100644 (file)
@@ -169,6 +169,9 @@ public class TelemetryDaemon extends AbstractStoppableScheduledExecutorServiceIm
       context.getMetricsToUpdate().forEach(toUpdate -> dbClient.telemetryMetricsSentDao().upsert(dbSession, toUpdate));
       dbSession.commit();
     }
+
+    // Finally, run after tasks for all providers
+    telemetryMetricsLoader.runProviderAfterTasks();
   }
 
   private void uploadLegacyTelemetry() throws IOException {
index f232fe82fcef3ec351276b8f6ad0307e23fa14ec..aeb5f3c3074b17a442f0002945218d22daa888fb 100644 (file)
@@ -90,6 +90,10 @@ public class TelemetryMetricsLoader {
     }
   }
 
+  public void runProviderAfterTasks() {
+    this.providers.forEach(TelemetryDataProvider::after);
+  }
+
   private Set<BaseMessage> retrieveBaseMessages(Map<Dimension, Set<Metric>> metrics) {
     return metrics.entrySet().stream()
       // we do not want to send payloads with zero metrics