diff options
Diffstat (limited to 'server/sonar-webserver-monitoring/src')
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); |