Repository: aurora
Updated Branches:
  refs/heads/master f6146eb5e -> 8a5dcacdc


Added ExclusionStrategy to Gson formatter in structdump

This hides thrift metadata fields such as "__isset_bitfield"
and the "optionals" enum.
Added a FieldNamingStrategy to rename "value_" and "setName_"
fields to "value" and "key" on map formatting.

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


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

Branch: refs/heads/master
Commit: 8a5dcacdc73ab0468e1097d549bbf4e77d0096db
Parents: f6146eb
Author: Juan Manuel Fresia <jfre...@medallia.com>
Authored: Wed Jan 17 15:02:26 2018 -0800
Committer: Bill Farner <wfar...@apache.org>
Committed: Wed Jan 17 15:02:26 2018 -0800

----------------------------------------------------------------------
 .../aurora/scheduler/http/StructDump.java       | 27 +++++-
 .../aurora/scheduler/http/StructDumpTest.java   | 91 ++++++++++++++++++++
 2 files changed, 117 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/8a5dcacd/src/main/java/org/apache/aurora/scheduler/http/StructDump.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/StructDump.java 
b/src/main/java/org/apache/aurora/scheduler/http/StructDump.java
index 1710e39..9e74301 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/StructDump.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/StructDump.java
@@ -24,6 +24,8 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
@@ -100,7 +102,30 @@ public class StructDump extends JerseyTemplateServlet {
             .map(IJobConfiguration::newBuilder));
   }
 
-  private static final Gson GSON = new 
GsonBuilder().setPrettyPrinting().create();
+  private static final Gson GSON = new GsonBuilder()
+      .setPrettyPrinting()
+      .setExclusionStrategies(new ExclusionStrategy() {
+        @Override
+        public boolean shouldSkipField(FieldAttributes f) {
+          if (f.getName().startsWith("_")) {
+            return true;
+          }
+          return f.getDeclaredClass().getName().contains("$_Fields");
+        }
+
+        @Override
+        public boolean shouldSkipClass(Class<?> clazz) {
+          return false;
+        }
+      })
+      .setFieldNamingStrategy(f -> {
+        switch (f.getName()) {
+          case "setField_": return "key";
+          case "value_": return "value";
+          default: return f.getName();
+        }
+      })
+      .create();
 
   private Response dumpEntity(String id, Quiet<Optional<? extends TBase<?, 
?>>> work) {
     return fillTemplate(template -> {

http://git-wip-us.apache.org/repos/asf/aurora/blob/8a5dcacd/src/test/java/org/apache/aurora/scheduler/http/StructDumpTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/http/StructDumpTest.java 
b/src/test/java/org/apache/aurora/scheduler/http/StructDumpTest.java
new file mode 100644
index 0000000..8bd8319
--- /dev/null
+++ b/src/test/java/org/apache/aurora/scheduler/http/StructDumpTest.java
@@ -0,0 +1,91 @@
+/**
+ * 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 com.google.common.collect.ImmutableSet;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.ClientResponse.Status;
+
+import org.apache.aurora.gen.AssignedTask;
+import org.apache.aurora.gen.Resource;
+import org.apache.aurora.gen.ScheduleStatus;
+import org.apache.aurora.gen.ScheduledTask;
+import org.apache.aurora.gen.TaskConfig;
+import org.apache.aurora.scheduler.storage.entities.IScheduledTask;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+public class StructDumpTest extends AbstractJettyTest {
+
+  private static final String SLAVE_HOST = "fakehost";
+  private static final String FAKE_TASKID = "fake-task-id";
+
+  private static final IScheduledTask TASK = IScheduledTask.build(
+      new ScheduledTask()
+          .setStatus(ScheduleStatus.RUNNING)
+          .setAssignedTask(
+              new AssignedTask()
+                  .setTaskId(FAKE_TASKID)
+                  .setTask(new TaskConfig()
+                      .setResources(ImmutableSet.of(
+                          Resource.numCpus(1),
+                          Resource.ramMb(4000),
+                          Resource.diskMb(10000)
+                          )))
+                  .setSlaveHost(SLAVE_HOST)));
+
+  @Test
+  public void testGetUsage() {
+    replayAndStart();
+
+    ClientResponse response = getPlainRequestBuilder("/structdump")
+        .get(ClientResponse.class);
+
+    assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+  }
+
+  @Test
+  public void testTaskConfigDoesNotIncludeMetadata() {
+    storage.expectOperations();
+    storage.expectTaskFetch(FAKE_TASKID, TASK);
+
+    replayAndStart();
+
+    ClientResponse response = getPlainRequestBuilder("/structdump/task/" + 
FAKE_TASKID)
+            .get(ClientResponse.class);
+
+    String htmlResponse = response.getEntity(String.class);
+    assertEquals(Status.OK.getStatusCode(), response.getStatus());
+    assertFalse(htmlResponse.contains("__isset_bitfield"));
+  }
+
+  @Test
+  public void testTaskConfigFieldRename() {
+    storage.expectOperations();
+    storage.expectTaskFetch(FAKE_TASKID, TASK);
+
+    replayAndStart();
+
+    ClientResponse response = getPlainRequestBuilder("/structdump/task/" + 
FAKE_TASKID)
+            .get(ClientResponse.class);
+
+    String htmlResponse = response.getEntity(String.class);
+
+    assertEquals(Status.OK.getStatusCode(), response.getStatus());
+    assertFalse(htmlResponse.contains("setField_"));
+    assertFalse(htmlResponse.contains("value_"));
+  }
+}

Reply via email to