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/03/24 22:04:33 UTC
[1/2] mesos git commit: Updated `/state` agent endpoint to use
jsonify.
Repository: mesos
Updated Branches:
refs/heads/master 09b31633a -> 829481a73
Updated `/state` agent endpoint to use jsonify.
Review: https://reviews.apache.org/r/43911/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5bf23345
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5bf23345
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5bf23345
Branch: refs/heads/master
Commit: 5bf23345b7aed3d34a77437703d2641a85651d80
Parents: 09b3163
Author: Neil Conway <ne...@gmail.com>
Authored: Thu Mar 24 16:55:29 2016 -0400
Committer: Michael Park <mp...@apache.org>
Committed: Thu Mar 24 16:55:29 2016 -0400
----------------------------------------------------------------------
src/common/http.cpp | 2 +-
src/common/http.hpp | 1 +
src/slave/http.cpp | 253 ++++++++++++++++++++++-------------------------
3 files changed, 122 insertions(+), 134 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5bf23345/src/common/http.cpp
----------------------------------------------------------------------
diff --git a/src/common/http.cpp b/src/common/http.cpp
index 538dd36..3748c71 100644
--- a/src/common/http.cpp
+++ b/src/common/http.cpp
@@ -406,7 +406,7 @@ void json(JSON::ObjectWriter* writer, const Attributes& attributes)
}
-static void json(JSON::ObjectWriter* writer, const CommandInfo& command)
+void json(JSON::ObjectWriter* writer, const CommandInfo& command)
{
if (command.has_shell()) {
writer->field("shell", command.shell());
http://git-wip-us.apache.org/repos/asf/mesos/blob/5bf23345/src/common/http.hpp
----------------------------------------------------------------------
diff --git a/src/common/http.hpp b/src/common/http.hpp
index d5433e9..6c6f284 100644
--- a/src/common/http.hpp
+++ b/src/common/http.hpp
@@ -86,6 +86,7 @@ void json(JSON::ObjectWriter* writer, const Task& task);
} // namespace internal {
void json(JSON::ObjectWriter* writer, const Attributes& attributes);
+void json(JSON::ObjectWriter* writer, const CommandInfo& command);
void json(JSON::ObjectWriter* writer, const ExecutorInfo& executorInfo);
void json(JSON::ArrayWriter* writer, const Labels& labels);
void json(JSON::ObjectWriter* writer, const Resources& resources);
http://git-wip-us.apache.org/repos/asf/mesos/blob/5bf23345/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index 072f7e6..9f2878d 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -14,11 +14,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include <map>
#include <memory>
#include <sstream>
#include <string>
-#include <vector>
#include <mesos/executor/executor.hpp>
@@ -34,6 +32,7 @@
#include <stout/foreach.hpp>
#include <stout/json.hpp>
+#include <stout/jsonify.hpp>
#include <stout/lambda.hpp>
#include <stout/net.hpp>
#include <stout/numify.hpp>
@@ -74,111 +73,95 @@ using process::http::UnsupportedMediaType;
using process::metrics::internal::MetricsProcess;
-using std::map;
using std::string;
-using std::vector;
namespace mesos {
-namespace internal {
-namespace slave {
-
-
-// Pull in defnitions from common.
-using mesos::internal::model;
-
-// Pull in the process definitions.
-using process::http::Response;
-using process::http::Request;
-
-JSON::Object model(const TaskInfo& task)
+void json(JSON::ObjectWriter* writer, const TaskInfo& task)
{
- JSON::Object object;
- object.values["id"] = task.task_id().value();
- object.values["name"] = task.name();
- object.values["slave_id"] = task.slave_id().value();
- object.values["resources"] = model(task.resources());
+ writer->field("id", task.task_id().value());
+ writer->field("name", task.name());
+ writer->field("slave_id", task.slave_id().value());
+ writer->field("resources", Resources(task.resources()));
if (task.has_command()) {
- object.values["command"] = model(task.command());
+ writer->field("command", task.command());
}
if (task.has_executor()) {
- object.values["executor_id"] = task.executor().executor_id().value();
+ writer->field("executor_id", task.executor().executor_id().value());
}
if (task.has_discovery()) {
- object.values["discovery"] = JSON::protobuf(task.discovery());
+ writer->field("discovery", JSON::Protobuf(task.discovery()));
}
-
- return object;
}
+namespace internal {
+namespace slave {
-JSON::Object model(const Executor& executor)
-{
- JSON::Object object;
- object.values["id"] = executor.id.value();
- object.values["name"] = executor.info.name();
- object.values["source"] = executor.info.source();
- object.values["container"] = executor.containerId.value();
- object.values["directory"] = executor.directory;
- object.values["resources"] = model(executor.resources);
-
- JSON::Array tasks;
- foreach (Task* task, executor.launchedTasks.values()) {
- tasks.values.push_back(model(*task));
- }
- object.values["tasks"] = tasks;
+// Pull in the process definitions.
+using process::http::Response;
+using process::http::Request;
- JSON::Array queued;
- foreach (const TaskInfo& task, executor.queuedTasks.values()) {
- queued.values.push_back(model(task));
- }
- object.values["queued_tasks"] = queued;
- JSON::Array completed;
- foreach (const std::shared_ptr<Task>& task, executor.completedTasks) {
- completed.values.push_back(model(*task));
- }
+void json(JSON::ObjectWriter* writer, const Executor& executor)
+{
+ writer->field("id", executor.id.value());
+ writer->field("name", executor.info.name());
+ writer->field("source", executor.info.source());
+ writer->field("container", executor.containerId.value());
+ writer->field("directory", executor.directory);
+ writer->field("resources", executor.resources);
+
+ writer->field("tasks", [&executor](JSON::ArrayWriter* writer) {
+ foreach (Task* task, executor.launchedTasks.values()) {
+ writer->element(*task);
+ }
+ });
- // NOTE: We add 'terminatedTasks' to 'completed_tasks' for
- // simplicity.
- // TODO(vinod): Use foreachvalue instead once LinkedHashmap
- // supports it.
- foreach (Task* task, executor.terminatedTasks.values()) {
- completed.values.push_back(model(*task));
- }
- object.values["completed_tasks"] = completed;
+ writer->field("queued_tasks", [&executor](JSON::ArrayWriter* writer) {
+ foreach (const TaskInfo& task, executor.queuedTasks.values()) {
+ writer->element(task);
+ }
+ });
- return object;
+ writer->field("completed_tasks", [&executor](JSON::ArrayWriter* writer) {
+ foreach (const std::shared_ptr<Task>& task, executor.completedTasks) {
+ writer->element(*task);
+ }
+
+ // NOTE: We add 'terminatedTasks' to 'completed_tasks' for
+ // simplicity.
+ // TODO(vinod): Use foreachvalue instead once LinkedHashmap
+ // supports it.
+ foreach (Task* task, executor.terminatedTasks.values()) {
+ writer->element(*task);
+ }
+ });
}
-// Returns a JSON object modeled after a Framework.
-JSON::Object model(const Framework& framework)
+void json(JSON::ObjectWriter* writer, const Framework& framework)
{
- JSON::Object object;
- object.values["id"] = framework.id().value();
- object.values["name"] = framework.info.name();
- object.values["user"] = framework.info.user();
- object.values["failover_timeout"] = framework.info.failover_timeout();
- object.values["checkpoint"] = framework.info.checkpoint();
- object.values["role"] = framework.info.role();
- object.values["hostname"] = framework.info.hostname();
-
- JSON::Array executors;
- foreachvalue (Executor* executor, framework.executors) {
- executors.values.push_back(model(*executor));
- }
- object.values["executors"] = executors;
-
- JSON::Array completedExecutors;
- foreach (const Owned<Executor>& executor, framework.completedExecutors) {
- completedExecutors.values.push_back(model(*executor));
- }
- object.values["completed_executors"] = completedExecutors;
+ writer->field("id", framework.id().value());
+ writer->field("name", framework.info.name());
+ writer->field("user", framework.info.user());
+ writer->field("failover_timeout", framework.info.failover_timeout());
+ writer->field("checkpoint", framework.info.checkpoint());
+ writer->field("role", framework.info.role());
+ writer->field("hostname", framework.info.hostname());
+
+ writer->field("executors", [&framework](JSON::ArrayWriter* writer) {
+ foreachvalue (Executor* executor, framework.executors) {
+ writer->element(*executor);
+ }
+ });
- return object;
+ writer->field("completed_executors", [&framework](JSON::ArrayWriter* writer) {
+ foreach (const Owned<Executor>& executor, framework.completedExecutors) {
+ writer->element(*executor);
+ }
+ });
}
@@ -497,68 +480,72 @@ Future<Response> Slave::Http::state(
return ServiceUnavailable("Agent has not finished recovery");
}
- JSON::Object object;
- object.values["version"] = MESOS_VERSION;
-
- if (build::GIT_SHA.isSome()) {
- object.values["git_sha"] = build::GIT_SHA.get();
- }
+ auto state = [this](JSON::ObjectWriter* writer) {
+ writer->field("version", MESOS_VERSION);
- if (build::GIT_BRANCH.isSome()) {
- object.values["git_branch"] = build::GIT_BRANCH.get();
- }
+ if (build::GIT_SHA.isSome()) {
+ writer->field("git_sha", build::GIT_SHA.get());
+ }
- if (build::GIT_TAG.isSome()) {
- object.values["git_tag"] = build::GIT_TAG.get();
- }
+ if (build::GIT_BRANCH.isSome()) {
+ writer->field("git_branch", build::GIT_BRANCH.get());
+ }
- object.values["build_date"] = build::DATE;
- object.values["build_time"] = build::TIME;
- object.values["build_user"] = build::USER;
- object.values["start_time"] = slave->startTime.secs();
- object.values["id"] = slave->info.id().value();
- object.values["pid"] = string(slave->self());
- object.values["hostname"] = slave->info.hostname();
- object.values["resources"] = model(slave->info.resources());
- object.values["attributes"] = model(slave->info.attributes());
-
- if (slave->master.isSome()) {
- Try<string> hostname = net::getHostname(slave->master.get().address.ip);
- if (hostname.isSome()) {
- object.values["master_hostname"] = hostname.get();
+ if (build::GIT_TAG.isSome()) {
+ writer->field("git_tag", build::GIT_TAG.get());
}
- }
- if (slave->flags.log_dir.isSome()) {
- object.values["log_dir"] = slave->flags.log_dir.get();
- }
+ writer->field("build_date", build::DATE);
+ writer->field("build_time", build::TIME);
+ writer->field("build_user", build::USER);
+ writer->field("start_time", slave->startTime.secs());
- if (slave->flags.external_log_file.isSome()) {
- object.values["external_log_file"] = slave->flags.external_log_file.get();
- }
+ writer->field("id", slave->info.id().value());
+ writer->field("pid", string(slave->self()));
+ writer->field("hostname", slave->info.hostname());
- JSON::Array frameworks;
- foreachvalue (Framework* framework, slave->frameworks) {
- frameworks.values.push_back(model(*framework));
- }
- object.values["frameworks"] = frameworks;
+ writer->field("resources", Resources(slave->info.resources()));
+ writer->field("attributes", Attributes(slave->info.attributes()));
- JSON::Array completedFrameworks;
- foreach (const Owned<Framework>& framework, slave->completedFrameworks) {
- completedFrameworks.values.push_back(model(*framework));
- }
- object.values["completed_frameworks"] = completedFrameworks;
+ if (slave->master.isSome()) {
+ Try<string> hostname = net::getHostname(slave->master.get().address.ip);
+ if (hostname.isSome()) {
+ writer->field("master_hostname", hostname.get());
+ }
+ }
- JSON::Object flags;
- foreachpair (const string& name, const flags::Flag& flag, slave->flags) {
- Option<string> value = flag.stringify(slave->flags);
- if (value.isSome()) {
- flags.values[name] = value.get();
+ if (slave->flags.log_dir.isSome()) {
+ writer->field("log_dir", slave->flags.log_dir.get());
}
- }
- object.values["flags"] = flags;
- return OK(object, request.url.query.get("jsonp"));
+ if (slave->flags.external_log_file.isSome()) {
+ writer->field("external_log_file", slave->flags.external_log_file.get());
+ }
+
+ writer->field("frameworks", [this](JSON::ArrayWriter* writer) {
+ foreachvalue (Framework* framework, slave->frameworks) {
+ writer->element(*framework);
+ }
+ });
+
+ // Model all of the completed frameworks.
+ writer->field("completed_frameworks", [this](JSON::ArrayWriter* writer) {
+ foreach (const Owned<Framework>& framework, slave->completedFrameworks) {
+ writer->element(*framework);
+ }
+ });
+
+ writer->field("flags", [this](JSON::ObjectWriter* writer) {
+ foreachpair (const string& name, const flags::Flag& flag, slave->flags) {
+ Option<string> value = flag.stringify(slave->flags);
+ if (value.isSome()) {
+ writer->field(name, value.get());
+ }
+ }
+ });
+ };
+
+ return OK(jsonify(state), request.url.query.get("jsonp"));
}
} // namespace slave {
[2/2] mesos git commit: Marked some private `json` functions as
`static`.
Posted by mp...@apache.org.
Marked some private `json` functions as `static`.
Review: https://reviews.apache.org/r/44981/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/829481a7
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/829481a7
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/829481a7
Branch: refs/heads/master
Commit: 829481a73a3cc4c0a06d5f0db314a96df60c340b
Parents: 5bf2334
Author: Neil Conway <ne...@gmail.com>
Authored: Thu Mar 24 16:55:43 2016 -0400
Committer: Michael Park <mp...@apache.org>
Committed: Thu Mar 24 16:55:43 2016 -0400
----------------------------------------------------------------------
src/master/http.cpp | 12 ++++++------
src/slave/http.cpp | 6 +++---
2 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/829481a7/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 97e4b0c..2e42dd8 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -107,14 +107,14 @@ using std::vector;
namespace mesos {
-void json(
+static void json(
JSON::StringWriter* writer, const FrameworkInfo::Capability& capability)
{
writer->append(FrameworkInfo::Capability::Type_Name(capability.type()));
}
-void json(JSON::ObjectWriter* writer, const Offer& offer)
+static void json(JSON::ObjectWriter* writer, const Offer& offer)
{
writer->field("id", offer.id().value());
writer->field("framework_id", offer.framework_id().value());
@@ -152,7 +152,7 @@ struct Full : Representation<T>
};
-void json(JSON::ObjectWriter* writer, const Summary<Slave>& summary)
+static void json(JSON::ObjectWriter* writer, const Summary<Slave>& summary)
{
const Slave& slave = summary;
@@ -178,7 +178,7 @@ void json(JSON::ObjectWriter* writer, const Summary<Slave>& summary)
}
-void json(JSON::ObjectWriter* writer, const Full<Slave>& full)
+static void json(JSON::ObjectWriter* writer, const Full<Slave>& full)
{
const Slave& slave = full;
@@ -186,7 +186,7 @@ void json(JSON::ObjectWriter* writer, const Full<Slave>& full)
}
-void json(JSON::ObjectWriter* writer, const Summary<Framework>& summary)
+static void json(JSON::ObjectWriter* writer, const Summary<Framework>& summary)
{
const Framework& framework = summary;
@@ -208,7 +208,7 @@ void json(JSON::ObjectWriter* writer, const Summary<Framework>& summary)
}
-void json(JSON::ObjectWriter* writer, const Full<Framework>& full)
+static void json(JSON::ObjectWriter* writer, const Full<Framework>& full)
{
const Framework& framework = full;
http://git-wip-us.apache.org/repos/asf/mesos/blob/829481a7/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index 9f2878d..7a872c6 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -78,7 +78,7 @@ using std::string;
namespace mesos {
-void json(JSON::ObjectWriter* writer, const TaskInfo& task)
+static void json(JSON::ObjectWriter* writer, const TaskInfo& task)
{
writer->field("id", task.task_id().value());
writer->field("name", task.name());
@@ -104,7 +104,7 @@ using process::http::Response;
using process::http::Request;
-void json(JSON::ObjectWriter* writer, const Executor& executor)
+static void json(JSON::ObjectWriter* writer, const Executor& executor)
{
writer->field("id", executor.id.value());
writer->field("name", executor.info.name());
@@ -141,7 +141,7 @@ void json(JSON::ObjectWriter* writer, const Executor& executor)
}
-void json(JSON::ObjectWriter* writer, const Framework& framework)
+static void json(JSON::ObjectWriter* writer, const Framework& framework)
{
writer->field("id", framework.id().value());
writer->field("name", framework.info.name());