]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10592 display workers pause in System Info page
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 18 Apr 2018 19:28:49 +0000 (21:28 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 10 May 2018 18:20:53 +0000 (20:20 +0200)
server/sonar-ce/src/main/java/org/sonar/ce/monitoring/CEQueueStatus.java
server/sonar-ce/src/main/java/org/sonar/ce/monitoring/CEQueueStatusImpl.java
server/sonar-ce/src/main/java/org/sonar/ce/monitoring/CeTasksMBeanImpl.java
server/sonar-ce/src/test/java/org/sonar/ce/monitoring/CEQueueStatusImplTest.java
server/sonar-ce/src/test/java/org/sonar/ce/monitoring/CeTasksMBeanImplTest.java
server/sonar-server/src/main/java/org/sonar/server/platform/monitoring/cluster/CeQueueGlobalSection.java
server/sonar-server/src/test/java/org/sonar/server/platform/monitoring/cluster/CeQueueGlobalSectionTest.java

index 3127d3fef32172fbf8258d46213b2c3debfb2295..c8e4fc45eddd46fd34af0c82f53201cfa1af4550 100644 (file)
@@ -19,6 +19,9 @@
  */
 package org.sonar.ce.monitoring;
 
+import org.sonar.api.ce.ComputeEngineSide;
+
+@ComputeEngineSide
 public interface CEQueueStatus {
 
   /**
@@ -85,4 +88,6 @@ public interface CEQueueStatus {
    * Time spent processing batch reports since startup, in milliseconds.
    */
   long getProcessingTime();
+
+  boolean areWorkersPaused();
 }
index e9ac48c4727247d8b1eff4b547b48bfd6b66a41a..e1e9c679c0bd690f17c8dde734f7f7e0e1b14bc5 100644 (file)
  */
 package org.sonar.ce.monitoring;
 
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.ce.CeQueueDto;
+import org.sonar.server.property.InternalProperties;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
@@ -69,6 +71,14 @@ public class CEQueueStatusImpl implements CEQueueStatus {
     }
   }
 
+  @Override
+  public boolean areWorkersPaused() {
+    try (DbSession dbSession = dbClient.openSession(false)) {
+      Optional<String> val = dbClient.internalPropertiesDao().selectByKey(dbSession, InternalProperties.COMPUTE_ENGINE_PAUSE);
+      return "true".equals(val.orElse(null));
+    }
+  }
+
   @Override
   public long getInProgressCount() {
     return inProgress.get();
index 421dbd5d885ce92a00c8e7e2315e34d86f4b6ad1..ed62ab4bb21a7f9f22f20146e709daf2a5778f0d 100644 (file)
@@ -93,6 +93,7 @@ public class CeTasksMBeanImpl implements CeTasksMBean, Startable, SystemInfoSect
     builder.addAttributesBuilder().setKey("Processing Time (ms)").setLongValue(getProcessingTime()).build();
     builder.addAttributesBuilder().setKey("Worker Count").setLongValue(getWorkerCount()).build();
     builder.addAttributesBuilder().setKey("Max Worker Count").setLongValue(getWorkerMaxCount()).build();
+    builder.addAttributesBuilder().setKey("Workers Paused").setBooleanValue(queueStatus.areWorkersPaused()).build();
     return builder.build();
   }
 }
index b860b9042f838015e15e5c463a475b01e8b2c33f..285c86ee4b0729abe782caf9802bd97d1c68e785 100644 (file)
  */
 package org.sonar.ce.monitoring;
 
+import java.util.Optional;
 import java.util.Random;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mockito;
 import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
 import org.sonar.db.ce.CeQueueDto;
+import org.sonar.server.property.InternalProperties;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -135,8 +136,20 @@ public class CEQueueStatusImplTest {
 
   @Test
   public void count_Pending_from_database() {
-    when(dbClient.ceQueueDao().countByStatus(any(DbSession.class), eq(CeQueueDto.Status.PENDING))).thenReturn(42);
+    when(dbClient.ceQueueDao().countByStatus(any(), eq(CeQueueDto.Status.PENDING))).thenReturn(42);
 
     assertThat(underTest.getPendingCount()).isEqualTo(42);
   }
+
+  @Test
+  public void workers_pause_is_loaded_from_db() {
+    when(dbClient.internalPropertiesDao().selectByKey(any(), eq(InternalProperties.COMPUTE_ENGINE_PAUSE))).thenReturn(Optional.of("true"));
+
+    assertThat(underTest.areWorkersPaused()).isTrue();
+  }
+
+  @Test
+  public void workers_pause_is_false_by_default() {
+    assertThat(underTest.areWorkersPaused()).isFalse();
+  }
 }
index 8fae1b5b811c411519e15bfed2e7568bf1af10ba..33e3416e8a6ab80eb2d56337709ea33190604b91 100644 (file)
@@ -88,11 +88,10 @@ public class CeTasksMBeanImplTest {
   public void export_system_info() {
     ProtobufSystemInfo.Section section = underTest.toProtobuf();
     assertThat(section.getName()).isEqualTo("Compute Engine Tasks");
-    assertThat(section.getAttributesCount()).isEqualTo(7);
+    assertThat(section.getAttributesCount()).isEqualTo(8);
   }
   private static class DumbCEQueueStatus implements CEQueueStatus {
 
-
     @Override
     public long getPendingCount() {
       return PENDING_COUNT;
@@ -132,6 +131,12 @@ public class CeTasksMBeanImplTest {
     public long getProcessingTime() {
       return PROCESSING_TIME;
     }
+
+    @Override
+    public boolean areWorkersPaused() {
+      return false;
+    }
+
     private long methodNotImplemented() {
       throw new UnsupportedOperationException("Not Implemented");
     }
index 381bcfa7cc1cf3d814da1bd97ec18b8197cb9710..244d2462e53b16d3c4ebcd4bbd3fb07a38a9af80 100644 (file)
@@ -28,6 +28,7 @@ import org.sonar.db.ce.CeQueueDto;
 import org.sonar.process.systeminfo.Global;
 import org.sonar.process.systeminfo.SystemInfoSection;
 import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo;
+import org.sonar.server.property.InternalProperties;
 
 import static org.sonar.process.systeminfo.SystemInfoUtils.setAttribute;
 
@@ -57,6 +58,7 @@ public class CeQueueGlobalSection implements SystemInfoSection, Global {
       setAttribute(protobuf, "Total Pending", dbClient.ceQueueDao().countByStatus(dbSession, CeQueueDto.Status.PENDING));
       setAttribute(protobuf, "Total In Progress", dbClient.ceQueueDao().countByStatus(dbSession, CeQueueDto.Status.IN_PROGRESS));
       setAttribute(protobuf, "Max Workers per Node", workerCountProvider == null ? DEFAULT_NB_OF_WORKERS : workerCountProvider.get());
+      setAttribute(protobuf, "Workers Paused", "true".equals(dbClient.internalPropertiesDao().selectByKey(dbSession, InternalProperties.COMPUTE_ENGINE_PAUSE).orElse(null)));
     }
     return protobuf.build();
   }
index 0f375ac4a192488cbbb7f0e29de6770453dd9a19..00437ec5f2fc3d87563078618eefefef934320aa 100644 (file)
  */
 package org.sonar.server.platform.monitoring.cluster;
 
+import java.util.Optional;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.sonar.ce.configuration.WorkerCountProvider;
 import org.sonar.db.DbClient;
-import org.sonar.db.DbSession;
 import org.sonar.db.ce.CeQueueDto;
 import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo;
+import org.sonar.server.property.InternalProperties;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -36,11 +37,12 @@ import static org.sonar.server.platform.monitoring.SystemInfoTesting.assertThatA
 public class CeQueueGlobalSectionTest {
 
   private DbClient dbClient = mock(DbClient.class, Mockito.RETURNS_DEEP_STUBS);
+  private WorkerCountProvider workerCountProvider = mock(WorkerCountProvider.class);
 
   @Test
   public void test_queue_state_with_default_settings() {
-    when(dbClient.ceQueueDao().countByStatus(any(DbSession.class), eq(CeQueueDto.Status.PENDING))).thenReturn(10);
-    when(dbClient.ceQueueDao().countByStatus(any(DbSession.class), eq(CeQueueDto.Status.IN_PROGRESS))).thenReturn(1);
+    when(dbClient.ceQueueDao().countByStatus(any(), eq(CeQueueDto.Status.PENDING))).thenReturn(10);
+    when(dbClient.ceQueueDao().countByStatus(any(), eq(CeQueueDto.Status.IN_PROGRESS))).thenReturn(1);
 
     CeQueueGlobalSection underTest = new CeQueueGlobalSection(dbClient);
     ProtobufSystemInfo.Section section = underTest.toProtobuf();
@@ -52,9 +54,8 @@ public class CeQueueGlobalSectionTest {
 
   @Test
   public void test_queue_state_with_overridden_settings() {
-    when(dbClient.ceQueueDao().countByStatus(any(DbSession.class), eq(CeQueueDto.Status.PENDING))).thenReturn(10);
-    when(dbClient.ceQueueDao().countByStatus(any(DbSession.class), eq(CeQueueDto.Status.IN_PROGRESS))).thenReturn(2);
-    WorkerCountProvider workerCountProvider = mock(WorkerCountProvider.class);
+    when(dbClient.ceQueueDao().countByStatus(any(), eq(CeQueueDto.Status.PENDING))).thenReturn(10);
+    when(dbClient.ceQueueDao().countByStatus(any(), eq(CeQueueDto.Status.IN_PROGRESS))).thenReturn(2);
     when(workerCountProvider.get()).thenReturn(5);
 
     CeQueueGlobalSection underTest = new CeQueueGlobalSection(dbClient, workerCountProvider);
@@ -65,5 +66,21 @@ public class CeQueueGlobalSectionTest {
     assertThatAttributeIs(section, "Max Workers per Node", 5);
   }
 
+  @Test
+  public void test_workers_not_paused() {
+    CeQueueGlobalSection underTest = new CeQueueGlobalSection(dbClient, workerCountProvider);
+    ProtobufSystemInfo.Section section = underTest.toProtobuf();
 
+    assertThatAttributeIs(section, "Workers Paused", false);
+  }
+
+  @Test
+  public void test_workers_paused() {
+    when(dbClient.internalPropertiesDao().selectByKey(any(), eq(InternalProperties.COMPUTE_ENGINE_PAUSE))).thenReturn(Optional.of("true"));
+
+    CeQueueGlobalSection underTest = new CeQueueGlobalSection(dbClient, workerCountProvider);
+    ProtobufSystemInfo.Section section = underTest.toProtobuf();
+
+    assertThatAttributeIs(section, "Workers Paused", true);
+  }
 }