You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2016/02/01 05:34:48 UTC

[2/2] mesos git commit: Updated `Master::Http::stateSummary` to use `jsonify`.

Updated `Master::Http::stateSummary` to use `jsonify`.

Review: https://reviews.apache.org/r/42546


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

Branch: refs/heads/master
Commit: 8ca4efc1518c50fbeba45a9f729cc7b354f091b3
Parents: b224995
Author: Michael Park <mp...@apache.org>
Authored: Tue Jan 19 20:10:02 2016 -0800
Committer: Michael Park <mp...@apache.org>
Committed: Sun Jan 31 20:06:16 2016 -0800

----------------------------------------------------------------------
 src/master/http.cpp | 184 +++++++++++++++++++++++------------------------
 1 file changed, 90 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/8ca4efc1/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 0422536..3d7a624 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -1569,109 +1569,105 @@ string Master::Http::STATESUMMARY_HELP()
 
 Future<Response> Master::Http::stateSummary(const Request& request) const
 {
-  JSON::Object object;
-
-  object.values["hostname"] = master->info().hostname();
-
-  if (master->flags.cluster.isSome()) {
-    object.values["cluster"] = master->flags.cluster.get();
-  }
-
-  // We use the tasks in the 'Frameworks' struct to compute summaries
-  // for this endpoint. This is done 1) for consistency between the
-  // 'slaves' and 'frameworks' subsections below 2) because we want to
-  // provide summary information for frameworks that are currently
-  // registered 3) the frameworks keep a circular buffer of completed
-  // tasks that we can use to keep a limited view on the history of
-  // recent completed / failed tasks.
-
-  // Generate mappings from 'slave' to 'framework' and reverse.
-  SlaveFrameworkMapping slaveFrameworkMapping(master->frameworks.registered);
-
-  // Generate 'TaskState' summaries for all framework and slave ids.
-  TaskStateSummaries taskStateSummaries(master->frameworks.registered);
-
-  // Model all of the slaves.
-  {
-    JSON::Array array;
-    array.values.reserve(master->slaves.registered.size()); // MESOS-2353.
-
-    foreachvalue (Slave* slave, master->slaves.registered) {
-      JSON::Object json = summarize(*slave);
+  auto stateSummary = [this](JSON::ObjectWriter* writer) {
+    writer->field("hostname", master->info().hostname());
 
-      // Add the 'TaskState' summary for this slave.
-      const TaskStateSummary& summary = taskStateSummaries.slave(slave->id);
+    if (master->flags.cluster.isSome()) {
+      writer->field("cluster", master->flags.cluster.get());
+    }
 
-      json.values["TASK_STAGING"] = summary.staging;
-      json.values["TASK_STARTING"] = summary.starting;
-      json.values["TASK_RUNNING"] = summary.running;
-      json.values["TASK_FINISHED"] = summary.finished;
-      json.values["TASK_KILLED"] = summary.killed;
-      json.values["TASK_FAILED"] = summary.failed;
-      json.values["TASK_LOST"] = summary.lost;
-      json.values["TASK_ERROR"] = summary.error;
+    // We use the tasks in the 'Frameworks' struct to compute summaries
+    // for this endpoint. This is done 1) for consistency between the
+    // 'slaves' and 'frameworks' subsections below 2) because we want to
+    // provide summary information for frameworks that are currently
+    // registered 3) the frameworks keep a circular buffer of completed
+    // tasks that we can use to keep a limited view on the history of
+    // recent completed / failed tasks.
 
-      // Add the ids of all the frameworks running on this slave.
-      const hashset<FrameworkID>& frameworks =
-        slaveFrameworkMapping.frameworks(slave->id);
+    // Generate mappings from 'slave' to 'framework' and reverse.
+    SlaveFrameworkMapping slaveFrameworkMapping(master->frameworks.registered);
 
-      JSON::Array frameworkIdArray;
-      frameworkIdArray.values.reserve(frameworks.size()); // MESOS-2353.
+    // Generate 'TaskState' summaries for all framework and slave ids.
+    TaskStateSummaries taskStateSummaries(master->frameworks.registered);
 
-      foreach (const FrameworkID& frameworkId, frameworks) {
-        frameworkIdArray.values.push_back(frameworkId.value());
+    // Model all of the slaves.
+    writer->field("slaves", [this,
+                             &slaveFrameworkMapping,
+                             &taskStateSummaries](JSON::ArrayWriter* writer) {
+      foreachvalue (Slave* slave, master->slaves.registered) {
+        writer->element([&slave,
+                         &slaveFrameworkMapping,
+                         &taskStateSummaries](JSON::ObjectWriter* writer) {
+          json(writer, Summary<Slave>(*slave));
+
+          // Add the 'TaskState' summary for this slave.
+          const TaskStateSummary& summary = taskStateSummaries.slave(slave->id);
+
+          writer->field("TASK_STAGING", summary.staging);
+          writer->field("TASK_STARTING", summary.starting);
+          writer->field("TASK_RUNNING", summary.running);
+          writer->field("TASK_FINISHED", summary.finished);
+          writer->field("TASK_KILLED", summary.killed);
+          writer->field("TASK_FAILED", summary.failed);
+          writer->field("TASK_LOST", summary.lost);
+          writer->field("TASK_ERROR", summary.error);
+
+          // Add the ids of all the frameworks running on this slave.
+          const hashset<FrameworkID>& frameworks =
+            slaveFrameworkMapping.frameworks(slave->id);
+
+          writer->field("framework_ids",
+                        [&frameworks](JSON::ArrayWriter* writer) {
+            foreach (const FrameworkID& frameworkId, frameworks) {
+              writer->element(frameworkId.value());
+            }
+          });
+        });
       }
+    });
 
-      json.values["framework_ids"] = std::move(frameworkIdArray);
-
-      array.values.push_back(std::move(json));
-    }
-
-    object.values["slaves"] = std::move(array);
-  }
-
-  // Model all of the frameworks.
-  {
-    JSON::Array array;
-    array.values.reserve(master->frameworks.registered.size()); // MESOS-2353.
-
-    foreachpair (const FrameworkID& frameworkId,
-                 Framework* framework,
-                 master->frameworks.registered) {
-      JSON::Object json = summarize(*framework);
-
-      // Add the 'TaskState' summary for this framework.
-      const TaskStateSummary& summary =
-        taskStateSummaries.framework(frameworkId);
-      json.values["TASK_STAGING"] = summary.staging;
-      json.values["TASK_STARTING"] = summary.starting;
-      json.values["TASK_RUNNING"] = summary.running;
-      json.values["TASK_FINISHED"] = summary.finished;
-      json.values["TASK_KILLED"] = summary.killed;
-      json.values["TASK_FAILED"] = summary.failed;
-      json.values["TASK_LOST"] = summary.lost;
-      json.values["TASK_ERROR"] = summary.error;
-
-      // Add the ids of all the slaves running this framework.
-      const hashset<SlaveID>& slaves =
-        slaveFrameworkMapping.slaves(frameworkId);
-
-      JSON::Array slaveIdArray;
-      slaveIdArray.values.reserve(slaves.size()); // MESOS-2353.
-
-      foreach (const SlaveID& slaveId, slaves) {
-        slaveIdArray.values.push_back(slaveId.value());
+    // Model all of the frameworks.
+    writer->field("frameworks",
+                  [this,
+                   &slaveFrameworkMapping,
+                   &taskStateSummaries](JSON::ArrayWriter* writer) {
+      foreachpair (const FrameworkID& frameworkId,
+                   Framework* framework,
+                   master->frameworks.registered) {
+        writer->element([&frameworkId,
+                         &framework,
+                         &slaveFrameworkMapping,
+                         &taskStateSummaries](JSON::ObjectWriter* writer) {
+          json(writer, Summary<Framework>(*framework));
+
+          // Add the 'TaskState' summary for this framework.
+          const TaskStateSummary& summary =
+            taskStateSummaries.framework(frameworkId);
+
+          writer->field("TASK_STAGING", summary.staging);
+          writer->field("TASK_STARTING", summary.starting);
+          writer->field("TASK_RUNNING", summary.running);
+          writer->field("TASK_FINISHED", summary.finished);
+          writer->field("TASK_KILLED", summary.killed);
+          writer->field("TASK_FAILED", summary.failed);
+          writer->field("TASK_LOST", summary.lost);
+          writer->field("TASK_ERROR", summary.error);
+
+          // Add the ids of all the slaves running this framework.
+          const hashset<SlaveID>& slaves =
+            slaveFrameworkMapping.slaves(frameworkId);
+
+          writer->field("slave_ids", [&slaves](JSON::ArrayWriter* writer) {
+            foreach (const SlaveID& slaveId, slaves) {
+              writer->element(slaveId.value());
+            }
+          });
+        });
       }
+    });
+  };
 
-      json.values["slave_ids"] = std::move(slaveIdArray);
-
-      array.values.push_back(std::move(json));
-    }
-
-    object.values["frameworks"] = std::move(array);
-  }
-
-  return OK(object, request.url.query.get("jsonp"));
+  return OK(jsonify(stateSummary), request.url.query.get("jsonp"));
 }