You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2016/06/28 22:56:46 UTC

aurora git commit: AURORA-1725 Expose tier configurations as a debug page

Repository: aurora
Updated Branches:
  refs/heads/master 499b11bde -> 102f5f0a9


AURORA-1725 Expose tier configurations as a debug page

Reviewed at https://reviews.apache.org/r/49334/


Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/102f5f0a
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/102f5f0a
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/102f5f0a

Branch: refs/heads/master
Commit: 102f5f0a98ee38b9637d1962d4e5d6a2171fb75f
Parents: 499b11b
Author: Mehrdad Nurolahzade <me...@nurolahzade.com>
Authored: Tue Jun 28 15:56:38 2016 -0700
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Tue Jun 28 15:56:38 2016 -0700

----------------------------------------------------------------------
 .../aurora/scheduler/base/TaskTestUtil.java     |  9 +++
 .../scheduler/http/JettyServerModule.java       |  2 +
 .../org/apache/aurora/scheduler/http/Tiers.java | 54 ++++++++++++++++++
 src/main/resources/scheduler/assets/index.html  |  1 +
 .../aurora/scheduler/TierManagerTest.java       |  8 +--
 .../scheduler/http/AbstractJettyTest.java       |  2 +
 .../apache/aurora/scheduler/http/TiersTest.java | 60 ++++++++++++++++++++
 7 files changed, 130 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/main/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/base/TaskTestUtil.java b/src/main/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
index 4089b79..8103163 100644
--- a/src/main/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
+++ b/src/main/java/org/apache/aurora/scheduler/base/TaskTestUtil.java
@@ -160,6 +160,15 @@ public final class TaskTestUtil {
     return IScheduledTask.build(builder);
   }
 
+  public static String tierConfigFile() {
+    return "{\"default\": \"preemptible\","
+        + "\"tiers\":{"
+        + "\"preferred\": {\"revocable\": false, \"preemptible\": false},"
+        + "\"preemptible\": {\"revocable\": false, \"preemptible\": true},"
+        + "\"revocable\": {\"revocable\": true, \"preemptible\": true}"
+        + "}}";
+  }
+
   public static Map<String, TierInfo> tierInfos() {
     return ImmutableMap.of(
         "preferred", PREFERRED_TIER,

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java b/src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java
index 496cd55..12185ec 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java
@@ -212,6 +212,7 @@ public class JettyServerModule extends AbstractModule {
       "pendingtasks",
       "quotas",
       "slaves",
+      "tiers",
       "utilization"
   );
 
@@ -233,6 +234,7 @@ public class JettyServerModule extends AbstractModule {
           .put(Services.class, "services")
           .put(StructDump.class, "structdump")
           .put(ThreadStackPrinter.class, "threads")
+          .put(Tiers.class, "tiers")
           .put(TimeSeriesDataSource.class, "graphdata")
           .put(Utilization.class, "utilization")
           .put(VarsHandler.class, "vars")

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/main/java/org/apache/aurora/scheduler/http/Tiers.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/Tiers.java b/src/main/java/org/apache/aurora/scheduler/http/Tiers.java
new file mode 100644
index 0000000..8a587ed
--- /dev/null
+++ b/src/main/java/org/apache/aurora/scheduler/http/Tiers.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aurora.scheduler.http;
+
+import java.util.Objects;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Inject;
+
+import org.apache.aurora.scheduler.TierManager;
+
+/*
+ * HTTP interface that exposes tier configurations of scheduler.
+ */
+@Path("/tiers")
+public class Tiers {
+
+  private final TierManager tierManager;
+
+  @Inject
+  Tiers(TierManager tierManager) {
+    this.tierManager = Objects.requireNonNull(tierManager);
+  }
+
+  /**
+   * Dumps tier configuration file (tiers.json).
+   *
+   * @return HTTP response.
+   */
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  public Response getTiers() {
+    ImmutableMap<String, Object> tierConfigurations = ImmutableMap.of(
+        "default", tierManager.getDefaultTierName(),
+        "tiers", tierManager.getTiers());
+    return Response.ok(tierConfigurations).build();
+  }
+}

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/main/resources/scheduler/assets/index.html
----------------------------------------------------------------------
diff --git a/src/main/resources/scheduler/assets/index.html b/src/main/resources/scheduler/assets/index.html
index eca27e0..9bd22a8 100644
--- a/src/main/resources/scheduler/assets/index.html
+++ b/src/main/resources/scheduler/assets/index.html
@@ -64,6 +64,7 @@
       <li><a href='/offers'>/offers</a></li>
       <li><a href='/pendingtasks'>/pendingtasks</a></li>
       <li><a href='/quotas'>/quotas</a></li>
+      <li><a href='/tiers'>/tiers</a></li>
       <li><a href='/utilization'>/utilization</a></li>
     </ul>
 

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java b/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
index 7d9b333..82e40d5 100644
--- a/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/TierManagerTest.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableMap;
 
 import org.apache.aurora.gen.TaskConfig;
 import org.apache.aurora.scheduler.TierManager.TierManagerImpl;
+import org.apache.aurora.scheduler.base.TaskTestUtil;
 import org.apache.aurora.scheduler.storage.entities.ITaskConfig;
 import org.junit.Test;
 
@@ -37,12 +38,7 @@ public class TierManagerTest {
       PREEMPTIBLE_TIER_NAME, DEV_TIER,
       REVOCABLE_TIER_NAME, REVOCABLE_TIER);
   private static final TierManager TIER_MANAGER = new TierManagerImpl(
-      parseTierConfig("{\"default\": \"preemptible\","
-          + "\"tiers\":{"
-          + "\"preferred\": {\"revocable\": false, \"preemptible\": false},"
-          + "\"preemptible\": {\"revocable\": false, \"preemptible\": true},"
-          + "\"revocable\": {\"revocable\": true, \"preemptible\": true}"
-          + "}}"));
+      parseTierConfig(TaskTestUtil.tierConfigFile()));
 
   @Test
   public void testGetTierRevocable() {

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/test/java/org/apache/aurora/scheduler/http/AbstractJettyTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/http/AbstractJettyTest.java b/src/test/java/org/apache/aurora/scheduler/http/AbstractJettyTest.java
index 561b134..7dbe48b 100644
--- a/src/test/java/org/apache/aurora/scheduler/http/AbstractJettyTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/http/AbstractJettyTest.java
@@ -46,6 +46,7 @@ import org.apache.aurora.common.util.BackoffStrategy;
 import org.apache.aurora.gen.ServerInfo;
 import org.apache.aurora.scheduler.AppStartup;
 import org.apache.aurora.scheduler.SchedulerServicesModule;
+import org.apache.aurora.scheduler.TierManager;
 import org.apache.aurora.scheduler.app.LifecycleModule;
 import org.apache.aurora.scheduler.app.ServiceGroupMonitor;
 import org.apache.aurora.scheduler.async.AsyncModule;
@@ -125,6 +126,7 @@ public abstract class AbstractJettyTest extends EasyMockTest {
             bindMock(OfferManager.class);
             bindMock(RescheduleCalculator.class);
             bindMock(TaskScheduler.class);
+            bindMock(TierManager.class);
             bindMock(Thread.UncaughtExceptionHandler.class);
 
             bind(ServletContextListener.class).toProvider(() -> {

http://git-wip-us.apache.org/repos/asf/aurora/blob/102f5f0a/src/test/java/org/apache/aurora/scheduler/http/TiersTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/http/TiersTest.java b/src/test/java/org/apache/aurora/scheduler/http/TiersTest.java
new file mode 100644
index 0000000..23371fc
--- /dev/null
+++ b/src/test/java/org/apache/aurora/scheduler/http/TiersTest.java
@@ -0,0 +1,60 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.aurora.scheduler.http;
+
+import java.io.IOException;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.Response;
+
+import com.google.gson.Gson;
+
+import org.apache.aurora.common.testing.easymock.EasyMockTest;
+import org.apache.aurora.scheduler.TierManager;
+import org.apache.aurora.scheduler.base.TaskTestUtil;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertEquals;
+
+public class TiersTest extends EasyMockTest {
+
+  private TierManager tierManager;
+  private Tiers tiers;
+
+  @Before
+  public void setUp() {
+    tierManager = createMock(TierManager.class);
+    tiers = new Tiers(tierManager);
+  }
+
+  @Test
+  public void testGetTiers() throws IOException {
+    expect(tierManager.getDefaultTierName()).andReturn("preemptible");
+    expect(tierManager.getTiers()).andReturn(TaskTestUtil.tierInfos());
+
+    control.replay();
+
+    Response response = tiers.getTiers();
+    assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+    String responseAsString = new ObjectMapper().writeValueAsString(response.getEntity());
+    assertEquals(toMap(TaskTestUtil.tierConfigFile()), toMap(responseAsString));
+  }
+
+  private static Map toMap(String json) {
+    return new Gson().fromJson(json, Map.class);
+  }
+}