package org.sonar.server.computation.monitoring;
import java.util.LinkedHashMap;
+import org.sonar.server.computation.configuration.CeConfiguration;
import org.sonar.server.computation.queue.CeQueue;
import org.sonar.server.platform.monitoring.BaseMonitorMBean;
public class ComputeEngineQueueMonitor extends BaseMonitorMBean implements ComputeEngineQueueMonitorMBean {
private final CEQueueStatus queueStatus;
+ private final CeConfiguration ceConfiguration;
public ComputeEngineQueueMonitor(CEQueueStatus queueStatus,
// ReportQueue initializes CEQueueStatus and is therefor a dependency of
// ComputeEngineQueueMonitor.
// Do not remove this parameter, it ensures start order of components
- CeQueue ceQueue) {
+ CeQueue ceQueue,
+ CeConfiguration ceConfiguration) {
this.queueStatus = queueStatus;
+ this.ceConfiguration = ceConfiguration;
}
@Override
attributes.put("Successfully processed", getSuccessCount());
attributes.put("Processed with error", getErrorCount());
attributes.put("Processing time", getProcessingTime());
+ attributes.put("Worker count", getWorkerCount());
return attributes;
}
public long getProcessingTime() {
return queueStatus.getProcessingTime();
}
+
+ @Override
+ public int getWorkerCount() {
+ return ceConfiguration.getWorkerCount();
+ }
}
package org.sonar.server.computation.monitoring;
import org.junit.Test;
+import org.sonar.server.computation.configuration.CeConfiguration;
import org.sonar.server.computation.queue.CeQueueImpl;
import static org.assertj.core.api.Assertions.assertThat;
private static final long ERROR_COUNT = 10;
private static final long SUCCESS_COUNT = 13;
private static final long PROCESSING_TIME = 987;
+ private static final int WORKER_COUNT = 56;
- private ComputeEngineQueueMonitor underTest = new ComputeEngineQueueMonitor(new DumbCEQueueStatus(), mock(CeQueueImpl.class));
+ private ComputeEngineQueueMonitor underTest = new ComputeEngineQueueMonitor(new DumbCEQueueStatus(), mock(CeQueueImpl.class), new DumbCeConfiguration());
@Test
public void name_is_ComputeEngine() {
entry("In progress", IN_PROGRESS_COUNT),
entry("Successfully processed", SUCCESS_COUNT),
entry("Processed with error", ERROR_COUNT),
- entry("Processing time", PROCESSING_TIME));
+ entry("Processing time", PROCESSING_TIME),
+ entry("Worker count", WORKER_COUNT));
}
@Test
assertThat(underTest.getProcessingTime()).isEqualTo(PROCESSING_TIME);
}
+ @Test
+ public void getWorkerCount_delegates_to_the_CEConfiguration_instance() {
+ assertThat(underTest.getWorkerCount()).isEqualTo(WORKER_COUNT);
+ }
+
/**
* Dumb implementation of CEQueueStatus which returns constant values for get methods and throws UnsupportedOperationException
* for other methods.
throw new UnsupportedOperationException("Not Implemented");
}
}
+
+ private static class DumbCeConfiguration implements CeConfiguration {
+ @Override
+ public int getWorkerCount() {
+ return WORKER_COUNT;
+ }
+
+ @Override
+ public long getQueuePollingDelay() {
+ throw new UnsupportedOperationException("getQueuePollingDelay is not implemented");
+ }
+ }
}