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());