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"));
}