aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-webserver-monitoring/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-webserver-monitoring/src')
-rw-r--r--server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ServerMonitoringMetrics.java15
-rw-r--r--server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ce/RecentTasksDurationTask.java24
-rw-r--r--server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ServerMonitoringMetricsTest.java12
-rw-r--r--server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ce/RecentTasksDurationTaskTest.java16
4 files changed, 55 insertions, 12 deletions
diff --git a/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ServerMonitoringMetrics.java b/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ServerMonitoringMetrics.java
index 9d6c9c9ebc5..39f91037d8c 100644
--- a/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ServerMonitoringMetrics.java
+++ b/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ServerMonitoringMetrics.java
@@ -37,6 +37,7 @@ public class ServerMonitoringMetrics {
private final Gauge cePendingTasksTotal;
private final Summary ceTasksRunningDuration;
+ private final Summary ceSystemTasksRunningDuration;
private final Gauge elasticsearchDiskSpaceFreeBytesGauge;
private final Gauge elasticSearchDiskSpaceTotalBytes;
@@ -80,6 +81,12 @@ public class ServerMonitoringMetrics {
.labelNames("task_type", "project_key")
.register();
+ ceSystemTasksRunningDuration = Summary.build()
+ .name("sonarqube_compute_engine_system_tasks_running_duration_seconds")
+ .help("Compute engine system task running time in seconds")
+ .labelNames("task_type")
+ .register();
+
computeEngineGauge = Gauge.build()
.name("sonarqube_health_compute_engine_status")
.help("Tells whether Compute Engine is up (healthy, ready to take tasks) or down. 1 for up, 0 for down")
@@ -165,8 +172,12 @@ public class ServerMonitoringMetrics {
cePendingTasksTotal.set(numberOfPendingTasks);
}
- public void observeComputeEngineTaskDuration(long durationInSeconds, String taskType, String projectKey) {
- ceTasksRunningDuration.labels(taskType, projectKey).observe(durationInSeconds);
+ public void observeComputeEngineTaskDuration(long durationInSeconds, String taskType, String label) {
+ ceTasksRunningDuration.labels(taskType, label).observe(durationInSeconds);
+ }
+
+ public void observeComputeEngineSystemTaskDuration(long durationInSeconds, String taskType) {
+ ceSystemTasksRunningDuration.labels(taskType).observe(durationInSeconds);
}
public void setComputeEngineStatusToGreen() {
diff --git a/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ce/RecentTasksDurationTask.java b/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ce/RecentTasksDurationTask.java
index 74d3dd85387..5a4c22d15d8 100644
--- a/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ce/RecentTasksDurationTask.java
+++ b/server/sonar-webserver-monitoring/src/main/java/org/sonar/server/monitoring/ce/RecentTasksDurationTask.java
@@ -22,11 +22,12 @@ package org.sonar.server.monitoring.ce;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.stream.Collectors;
-import org.sonar.api.config.Configuration;
-import org.sonar.api.utils.System2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.sonar.api.config.Configuration;
+import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.ce.CeActivityDto;
@@ -56,6 +57,7 @@ public class RecentTasksDurationTask extends ComputeEngineMetricsTask {
Collection<String> entityUuids = recentSuccessfulTasks.stream()
.map(CeActivityDto::getEntityUuid)
+ .filter(Objects::nonNull)
.toList();
List<EntityDto> entities = dbClient.entityDao().selectByUuids(dbSession, entityUuids);
Map<String, String> entityUuidAndKeys = entities.stream()
@@ -75,20 +77,22 @@ public class RecentTasksDurationTask extends ComputeEngineMetricsTask {
private void reportObservedDurationForTasks(List<CeActivityDto> tasks, Map<String, String> entityUuidAndKeys) {
for (CeActivityDto task : tasks) {
- String mainComponentUuid = task.getEntityUuid();
+ String entityUuid = task.getEntityUuid();
Long executionTimeMs = task.getExecutionTimeMs();
try {
- requireNonNull(mainComponentUuid);
requireNonNull(executionTimeMs);
- String mainComponentKey = entityUuidAndKeys.get(mainComponentUuid);
- requireNonNull(mainComponentKey);
-
- metrics.observeComputeEngineTaskDuration(executionTimeMs, task.getTaskType(), mainComponentKey);
+ if (entityUuid != null) {
+ String label = entityUuidAndKeys.get(entityUuid);
+ requireNonNull(label);
+ metrics.observeComputeEngineTaskDuration(executionTimeMs, task.getTaskType(), label);
+ } else {
+ metrics.observeComputeEngineSystemTaskDuration(executionTimeMs, task.getTaskType());
+ }
} catch (RuntimeException e) {
- LOGGER.warn("Can't report metric data for a CE task with component uuid " + mainComponentUuid, e);
+ LOGGER.warn("Can't report metric data for a CE task with entity uuid " + entityUuid, e);
}
}
-
}
+
}
diff --git a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ServerMonitoringMetricsTest.java b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ServerMonitoringMetricsTest.java
index 8b0cbd624f0..ecacceefccb 100644
--- a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ServerMonitoringMetricsTest.java
+++ b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ServerMonitoringMetricsTest.java
@@ -158,6 +158,18 @@ public class ServerMonitoringMetricsTest {
labelNames, labelValues)).isEqualTo(10);
}
+ @Test
+ public void observeComputeEngineSystemTaskDurationTest() {
+ ServerMonitoringMetrics metrics = new ServerMonitoringMetrics();
+ String[] labelNames = {"task_type"};
+ String[] labelValues = {"AUDIT_PURGE"};
+
+ metrics.observeComputeEngineSystemTaskDuration(10, labelValues[0]);
+
+ assertThat(CollectorRegistry.defaultRegistry.getSampleValue("sonarqube_compute_engine_system_tasks_running_duration_seconds_sum",
+ labelNames, labelValues)).isEqualTo(10);
+ }
+
private int sizeOfDefaultRegistry() {
Enumeration<Collector.MetricFamilySamples> metrics = CollectorRegistry.defaultRegistry.metricFamilySamples();
return Collections.list(metrics).size();
diff --git a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ce/RecentTasksDurationTaskTest.java b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ce/RecentTasksDurationTaskTest.java
index 5b5fc0a3570..7fdbfaa9dee 100644
--- a/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ce/RecentTasksDurationTaskTest.java
+++ b/server/sonar-webserver-monitoring/src/test/java/org/sonar/server/monitoring/ce/RecentTasksDurationTaskTest.java
@@ -86,6 +86,22 @@ public class RecentTasksDurationTaskTest {
}
@Test
+ public void run_given1TaskWithEntityUuidAnd1Without_observeDurationFor2Tasks() {
+ RecentTasksDurationTask task = new RecentTasksDurationTask(dbClient, metrics, config, system);
+ List<CeActivityDto> recentTasks = createTasks(2, 0);
+
+ recentTasks.get(0).setEntityUuid(null);
+
+ when(entityDao.selectByUuids(any(), any())).thenReturn(createEntityDtos(1));
+ when(ceActivityDao.selectNewerThan(any(), anyLong())).thenReturn(recentTasks);
+
+ task.run();
+
+ verify(metrics, times(1)).observeComputeEngineTaskDuration(anyLong(), any(), any());
+ verify(metrics, times(1)).observeComputeEngineSystemTaskDuration(anyLong(), any());
+ }
+
+ @Test
public void run_givenNullExecutionTime_dontReportMetricData() {
RecentTasksDurationTask task = new RecentTasksDurationTask(dbClient, metrics, config, system);
List<CeActivityDto> recentTasks = createTasks(1, 0);