You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by dm...@apache.org on 2015/03/03 21:26:59 UTC
mesos git commit: Deprecate /stats.json endpoint and supporting code.
Repository: mesos
Updated Branches:
refs/heads/master 11c357bf0 -> d9ba9199a
Deprecate /stats.json endpoint and supporting code.
Review: https://reviews.apache.org/r/30296
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d9ba9199
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d9ba9199
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d9ba9199
Branch: refs/heads/master
Commit: d9ba9199a8c8357ab13a1b14f8ee63409c5ac310
Parents: 11c357b
Author: Dominic Hamon <dh...@twitter.com>
Authored: Mon Jan 26 15:48:01 2015 -0800
Committer: Dominic Hamon <dh...@twitter.com>
Committed: Tue Mar 3 12:26:31 2015 -0800
----------------------------------------------------------------------
src/master/http.cpp | 123 ---------------------------------
src/master/master.cpp | 34 ----------
src/master/master.hpp | 19 +-----
src/slave/http.cpp | 88 ------------------------
src/slave/slave.cpp | 35 ----------
src/slave/slave.hpp | 14 ----
src/tests/master_tests.cpp | 146 ++++++++++++++++++----------------------
src/tests/slave_tests.cpp | 79 +++++++++-------------
8 files changed, 98 insertions(+), 440 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 117c0ee..b8eef69 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -394,123 +394,6 @@ Future<Response> Master::Http::slaves(const Request& request) {
}
-// Declaration of 'stats' continuation.
-static Future<Response> _stats(
- const Request& request,
- JSON::Object object,
- const Response& response);
-
-
-// TODO(alexandra.sava): Add stats for registered and removed slaves.
-Future<Response> Master::Http::stats(const Request& request)
-{
- LOG(INFO) << "HTTP request for '" << request.path << "'";
-
- JSON::Object object;
- object.values["uptime"] = (Clock::now() - master->startTime).secs();
- object.values["elected"] = master->elected() ? 1 : 0;
- object.values["total_schedulers"] = master->frameworks.registered.size();
- object.values["active_schedulers"] = master->_frameworks_active();
- object.values["activated_slaves"] = master->_slaves_active();
- object.values["deactivated_slaves"] = master->_slaves_inactive();
- object.values["outstanding_offers"] = master->offers.size();
-
- // NOTE: These are monotonically increasing counters.
- object.values["staged_tasks"] = master->stats.tasks[TASK_STAGING];
- object.values["started_tasks"] = master->stats.tasks[TASK_STARTING];
- object.values["finished_tasks"] = master->stats.tasks[TASK_FINISHED];
- object.values["killed_tasks"] = master->stats.tasks[TASK_KILLED];
- object.values["failed_tasks"] = master->stats.tasks[TASK_FAILED];
- object.values["lost_tasks"] = master->stats.tasks[TASK_LOST];
- object.values["valid_status_updates"] = master->stats.validStatusUpdates;
- object.values["invalid_status_updates"] = master->stats.invalidStatusUpdates;
-
- // Get a count of all active tasks in the cluster i.e., the tasks
- // that are launched (TASK_STAGING, TASK_STARTING, TASK_RUNNING) but
- // haven't reached terminal state yet.
- // NOTE: This is a gauge representing an instantaneous value.
- int active_tasks = 0;
- foreachvalue (Framework* framework, master->frameworks.registered) {
- active_tasks += framework->tasks.size();
- }
- object.values["active_tasks_gauge"] = active_tasks;
-
- // Get total and used (note, not offered) resources in order to
- // compute capacity of scalar resources.
- Resources totalResources;
- Resources usedResources;
- foreachvalue (Slave* slave, master->slaves.registered) {
- // Instead of accumulating all types of resources (which is
- // not necessary), we only accumulate scalar resources. This
- // helps us bypass a performance problem caused by range
- // additions (e.g. ports).
- foreach (const Resource& resource, slave->info.resources()) {
- if (resource.type() == Value::SCALAR) {
- totalResources += resource;
- }
- }
- foreachvalue (const Resources& resources, slave->usedResources) {
- foreach (const Resource& resource, resources) {
- if (resource.type() == Value::SCALAR) {
- usedResources += resource;
- }
- }
- }
- }
-
- foreach (const Resource& resource, totalResources) {
- CHECK(resource.has_scalar());
-
- double total = resource.scalar().value();
- object.values[resource.name() + "_total"] = total;
-
- Option<Value::Scalar> _used =
- usedResources.get<Value::Scalar>(resource.name());
-
- double used = _used.isSome() ? _used.get().value() : 0.0;
- object.values[resource.name() + "_used"] = used;
-
- double percent = used / total;
- object.values[resource.name() + "_percent"] = percent;
- }
-
- // Include metrics from libprocess metrics while we sunset this
- // endpoint in favor of libprocess metrics.
- // TODO(benh): Remove this after transitioning to libprocess metrics.
- return process::http::get(MetricsProcess::instance()->self(), "snapshot")
- .then(lambda::bind(&_stats, request, object, lambda::_1));
-}
-
-
-static Future<Response> _stats(
- const Request& request,
- JSON::Object object,
- const Response& response)
-{
- if (response.status != process::http::statuses[200]) {
- return InternalServerError("Failed to get metrics: " + response.status);
- }
-
- Option<string> type = response.headers.get("Content-Type");
-
- if (type.isNone() || type.get() != "application/json") {
- return InternalServerError("Failed to get metrics: expecting JSON");
- }
-
- Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.body);
-
- if (parse.isError()) {
- return InternalServerError("Failed to parse metrics: " + parse.error());
- }
-
- // Now add all the values from metrics.
- // TODO(benh): Make sure we're not overwriting any values.
- object.values.insert(parse.get().values.begin(), parse.get().values.end());
-
- return OK(object, request.query.get("jsonp"));
-}
-
-
Future<Response> Master::Http::state(const Request& request)
{
LOG(INFO) << "HTTP request for '" << request.path << "'";
@@ -544,12 +427,6 @@ Future<Response> Master::Http::state(const Request& request)
object.values["hostname"] = master->info().hostname();
object.values["activated_slaves"] = master->_slaves_active();
object.values["deactivated_slaves"] = master->_slaves_inactive();
- object.values["staged_tasks"] = master->stats.tasks[TASK_STAGING];
- object.values["started_tasks"] = master->stats.tasks[TASK_STARTING];
- object.values["finished_tasks"] = master->stats.tasks[TASK_FINISHED];
- object.values["killed_tasks"] = master->stats.tasks[TASK_KILLED];
- object.values["failed_tasks"] = master->stats.tasks[TASK_FAILED];
- object.values["lost_tasks"] = master->stats.tasks[TASK_LOST];
if (master->flags.cluster.isSome()) {
object.values["cluster"] = master->flags.cluster.get();
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index dae0955..68ca19a 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -574,19 +574,6 @@ void Master::initialize()
nextSlaveId = 0;
nextOfferId = 0;
- // Start all the statistics at 0.
- stats.tasks[TASK_STAGING] = 0;
- stats.tasks[TASK_STARTING] = 0;
- stats.tasks[TASK_RUNNING] = 0;
- stats.tasks[TASK_FINISHED] = 0;
- stats.tasks[TASK_FAILED] = 0;
- stats.tasks[TASK_KILLED] = 0;
- stats.tasks[TASK_LOST] = 0;
- stats.validStatusUpdates = 0;
- stats.invalidStatusUpdates = 0;
- stats.validFrameworkMessages = 0;
- stats.invalidFrameworkMessages = 0;
-
startTime = Clock::now();
install<scheduler::Call>(&Master::receive);
@@ -710,9 +697,6 @@ void Master::initialize()
route("/state.json",
None(),
lambda::bind(&Http::state, http, lambda::_1));
- route("/stats.json",
- None(),
- lambda::bind(&Http::stats, http, lambda::_1));
route("/tasks.json",
Http::TASKS_HELP,
lambda::bind(&Http::tasks, http, lambda::_1));
@@ -2275,7 +2259,6 @@ void Master::accept(
TaskStatus::REASON_INVALID_OFFERS);
metrics->tasks_lost++;
- stats.tasks[TASK_LOST]++;
metrics->incrementTasksStates(
TASK_LOST,
@@ -2320,8 +2303,6 @@ void Master::accept(
if (!framework->pendingTasks.contains(task.task_id())) {
framework->pendingTasks[task.task_id()] = task;
}
-
- stats.tasks[TASK_STAGING]++;
}
}
@@ -2385,7 +2366,6 @@ void Master::_accept(
reason);
metrics->tasks_lost++;
- stats.tasks[TASK_LOST]++;
metrics->incrementTasksStates(
TASK_LOST,
@@ -2521,7 +2501,6 @@ void Master::_accept(
TaskStatus::REASON_TASK_UNAUTHORIZED);
metrics->tasks_error++;
- stats.tasks[TASK_ERROR]++;
metrics->incrementTasksStates(
TASK_ERROR,
@@ -2551,7 +2530,6 @@ void Master::_accept(
TaskStatus::REASON_TASK_INVALID);
metrics->tasks_error++;
- stats.tasks[TASK_ERROR]++;
metrics->incrementTasksStates(
TASK_ERROR,
@@ -2838,7 +2816,6 @@ void Master::schedulerMessage(
<< "Ignoring framework message for executor " << executorId
<< " of framework " << frameworkId
<< " because the framework cannot be found";
- stats.invalidFrameworkMessages++;
metrics->invalid_framework_to_executor_messages++;
return;
}
@@ -2848,7 +2825,6 @@ void Master::schedulerMessage(
<< "Ignoring framework message for executor " << executorId
<< " of framework " << *framework
<< " because it is not expected from " << from;
- stats.invalidFrameworkMessages++;
metrics->invalid_framework_to_executor_messages++;
return;
}
@@ -2858,7 +2834,6 @@ void Master::schedulerMessage(
LOG(WARNING) << "Cannot send framework message for framework "
<< *framework << " to slave " << slaveId
<< " because slave is not registered";
- stats.invalidFrameworkMessages++;
metrics->invalid_framework_to_executor_messages++;
return;
}
@@ -2867,7 +2842,6 @@ void Master::schedulerMessage(
LOG(WARNING) << "Cannot send framework message for framework "
<< *framework << " to slave " << *slave
<< " because slave is disconnected";
- stats.invalidFrameworkMessages++;
metrics->invalid_framework_to_executor_messages++;
return;
}
@@ -2882,7 +2856,6 @@ void Master::schedulerMessage(
message.set_data(data);
send(slave->pid, message);
- stats.validFrameworkMessages++;
metrics->valid_framework_to_executor_messages++;
}
@@ -3292,7 +3265,6 @@ void Master::statusUpdate(const StatusUpdate& update, const UPID& pid)
message.set_message("Status update from unknown slave");
send(pid, message);
- stats.invalidStatusUpdates++;
metrics->invalid_status_updates++;
return;
}
@@ -3303,7 +3275,6 @@ void Master::statusUpdate(const StatusUpdate& update, const UPID& pid)
LOG(WARNING) << "Ignoring status update " << update
<< " from unknown slave " << pid
<< " with id " << update.slave_id();
- stats.invalidStatusUpdates++;
metrics->invalid_status_updates++;
return;
}
@@ -3314,7 +3285,6 @@ void Master::statusUpdate(const StatusUpdate& update, const UPID& pid)
LOG(WARNING) << "Ignoring status update " << update
<< " from slave " << *slave
<< " because the framework is unknown";
- stats.invalidStatusUpdates++;
metrics->invalid_status_updates++;
return;
}
@@ -3329,7 +3299,6 @@ void Master::statusUpdate(const StatusUpdate& update, const UPID& pid)
if (task == NULL) {
LOG(WARNING) << "Could not lookup task for status update " << update
<< " from slave " << *slave;
- stats.invalidStatusUpdates++;
metrics->invalid_status_updates++;
return;
}
@@ -3342,7 +3311,6 @@ void Master::statusUpdate(const StatusUpdate& update, const UPID& pid)
removeTask(task);
}
- stats.validStatusUpdates++;
metrics->valid_status_updates++;
}
@@ -4646,8 +4614,6 @@ void Master::updateTask(Task* task, const StatusUpdate& update)
? " (status update state: " + stringify(status.state()) + ")"
: "");
- stats.tasks[status.state()]++;
-
// Once the task becomes terminal, we recover the resources.
if (terminated) {
allocator->recoverResources(
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index ce0e0b3..3c957ab 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -497,10 +497,6 @@ private:
process::Future<process::http::Response> state(
const process::http::Request& request);
- // /master/stats.json
- process::Future<process::http::Response> stats(
- const process::http::Request& request);
-
// /master/tasks.json
process::Future<process::http::Response> tasks(
const process::http::Request& request);
@@ -669,21 +665,10 @@ private:
int64_t nextOfferId; // Used to give each slot offer a unique ID.
int64_t nextSlaveId; // Used to give each slave a unique ID.
- // TODO(bmahler): These are deprecated! Please use metrics instead.
- // Statistics (initialized in Master::initialize).
- struct
- {
- uint64_t tasks[TaskState_ARRAYSIZE];
- uint64_t validStatusUpdates;
- uint64_t invalidStatusUpdates;
- uint64_t validFrameworkMessages;
- uint64_t invalidFrameworkMessages;
- } stats;
-
// NOTE: It is safe to use a 'shared_ptr' because 'Metrics' is
// thread safe.
- // TODO(dhamon): Does this need to be a shared_ptr? Metrics contains copyable
- // metric types only.
+ // TODO(dhamon): This does not need to be a shared_ptr. Metrics contains
+ // copyable metric types only.
memory::shared_ptr<Metrics> metrics;
// Gauge handlers.
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index d03d361..5f0c39a 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -244,88 +244,6 @@ Future<Response> Slave::Http::health(const Request& request)
}
-// Declaration of 'stats' continuation.
-static Future<Response> _stats(
- const Request& request,
- JSON::Object object,
- const Response& response);
-
-
-Future<Response> Slave::Http::stats(const Request& request)
-{
- LOG(INFO) << "HTTP request for '" << request.path << "'";
-
- JSON::Object object;
- object.values["uptime"] = (Clock::now() - slave->startTime).secs();
- object.values["total_frameworks"] = slave->frameworks.size();
- object.values["registered"] = slave->master.isSome() ? 1 : 0;
- object.values["recovery_errors"] = slave->recoveryErrors;
-
- // NOTE: These are monotonically increasing counters.
- object.values["staged_tasks"] = slave->stats.tasks[TASK_STAGING];
- object.values["started_tasks"] = slave->stats.tasks[TASK_STARTING];
- object.values["finished_tasks"] = slave->stats.tasks[TASK_FINISHED];
- object.values["killed_tasks"] = slave->stats.tasks[TASK_KILLED];
- object.values["failed_tasks"] = slave->stats.tasks[TASK_FAILED];
- object.values["lost_tasks"] = slave->stats.tasks[TASK_LOST];
- object.values["valid_status_updates"] = slave->stats.validStatusUpdates;
- object.values["invalid_status_updates"] = slave->stats.invalidStatusUpdates;
-
- // NOTE: These are gauges representing instantaneous values.
-
- // Queued waiting for executor to register.
- int queued_tasks = 0;
-
- // Sent to executor (TASK_STAGING, TASK_STARTING, TASK_RUNNING).
- int launched_tasks = 0;
-
- foreachvalue (Framework* framework, slave->frameworks) {
- foreachvalue (Executor* executor, framework->executors) {
- queued_tasks += executor->queuedTasks.size();
- launched_tasks += executor->launchedTasks.size();
- }
- }
-
- object.values["queued_tasks_gauge"] = queued_tasks;
- object.values["launched_tasks_gauge"] = launched_tasks;
-
- // Include metrics from libprocess metrics while we sunset this
- // endpoint in favor of libprocess metrics.
- // TODO(benh): Remove this after transitioning to libprocess metrics.
- return process::http::get(MetricsProcess::instance()->self(), "snapshot")
- .then(lambda::bind(&_stats, request, object, lambda::_1));
-}
-
-
-static Future<Response> _stats(
- const Request& request,
- JSON::Object object,
- const Response& response)
-{
- if (response.status != process::http::statuses[200]) {
- return InternalServerError("Failed to get metrics: " + response.status);
- }
-
- Option<string> type = response.headers.get("Content-Type");
-
- if (type.isNone() || type.get() != "application/json") {
- return InternalServerError("Failed to get metrics: expecting JSON");
- }
-
- Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.body);
-
- if (parse.isError()) {
- return InternalServerError("Failed to parse metrics: " + parse.error());
- }
-
- // Now add all the values from metrics.
- // TODO(benh): Make sure we're not overwriting any values.
- object.values.insert(parse.get().values.begin(), parse.get().values.end());
-
- return OK(object, request.query.get("jsonp"));
-}
-
-
Future<Response> Slave::Http::state(const Request& request)
{
LOG(INFO) << "HTTP request for '" << request.path << "'";
@@ -354,12 +272,6 @@ Future<Response> Slave::Http::state(const Request& request)
object.values["hostname"] = slave->info.hostname();
object.values["resources"] = model(slave->info.resources());
object.values["attributes"] = model(slave->info.attributes());
- object.values["staged_tasks"] = slave->stats.tasks[TASK_STAGING];
- object.values["started_tasks"] = slave->stats.tasks[TASK_STARTING];
- object.values["finished_tasks"] = slave->stats.tasks[TASK_FINISHED];
- object.values["killed_tasks"] = slave->stats.tasks[TASK_KILLED];
- object.values["failed_tasks"] = slave->stats.tasks[TASK_FAILED];
- object.values["lost_tasks"] = slave->stats.tasks[TASK_LOST];
if (slave->master.isSome()) {
Try<string> hostname = net::getHostname(slave->master.get().address.ip);
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index a06d680..2d52ea0 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -342,19 +342,6 @@ void Slave::initialize()
// a very large disk_watch_interval).
delay(flags.disk_watch_interval, self(), &Slave::checkDiskUsage);
- // Start all the statistics at 0.
- stats.tasks[TASK_STAGING] = 0;
- stats.tasks[TASK_STARTING] = 0;
- stats.tasks[TASK_RUNNING] = 0;
- stats.tasks[TASK_FINISHED] = 0;
- stats.tasks[TASK_FAILED] = 0;
- stats.tasks[TASK_KILLED] = 0;
- stats.tasks[TASK_LOST] = 0;
- stats.validStatusUpdates = 0;
- stats.invalidStatusUpdates = 0;
- stats.validFrameworkMessages = 0;
- stats.invalidFrameworkMessages = 0;
-
startTime = Clock::now();
// Install protobuf handlers.
@@ -447,7 +434,6 @@ void Slave::initialize()
route("/health",
Http::HEALTH_HELP,
lambda::bind(&Http::health, http, lambda::_1));
- route("/stats.json", None(), lambda::bind(&Http::stats, http, lambda::_1));
route("/state.json", None(), lambda::bind(&Http::state, http, lambda::_1));
// Expose the log file for the webui. Fall back to 'log_dir' if
@@ -1374,8 +1360,6 @@ void Slave::_runTask(
executor->checkpointTask(task);
}
- stats.tasks[TASK_STAGING]++;
-
// Queue task if the executor has not yet registered.
LOG(INFO) << "Queuing task '" << task.task_id()
<< "' for executor " << executorId
@@ -1389,8 +1373,6 @@ void Slave::_runTask(
executor->checkpointTask(task);
}
- stats.tasks[TASK_STAGING]++;
-
// Queue task until the containerizer is updated with new
// resource limits (MESOS-998).
LOG(INFO) << "Queuing task '" << task.task_id()
@@ -1823,7 +1805,6 @@ void Slave::schedulerMessage(
if (state != RUNNING) {
LOG(WARNING) << "Dropping message from framework "<< frameworkId
<< " because the slave is in " << state << " state";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -1833,7 +1814,6 @@ void Slave::schedulerMessage(
if (framework == NULL) {
LOG(WARNING) << "Dropping message from framework "<< frameworkId
<< " because framework does not exist";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -1845,7 +1825,6 @@ void Slave::schedulerMessage(
if (framework->state == Framework::TERMINATING) {
LOG(WARNING) << "Dropping message from framework "<< frameworkId
<< " because framework is terminating";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -1855,7 +1834,6 @@ void Slave::schedulerMessage(
LOG(WARNING) << "Dropping message for executor '"
<< executorId << "' of framework " << frameworkId
<< " because executor does not exist";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -1871,7 +1849,6 @@ void Slave::schedulerMessage(
LOG(WARNING) << "Dropping message for executor '"
<< executorId << "' of framework " << frameworkId
<< " because executor is not running";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
break;
case Executor::RUNNING: {
@@ -1881,7 +1858,6 @@ void Slave::schedulerMessage(
message.mutable_executor_id()->MergeFrom(executorId);
message.set_data(data);
send(executor->pid, message);
- stats.validFrameworkMessages++;
metrics.valid_framework_messages++;
break;
}
@@ -1903,7 +1879,6 @@ void Slave::updateFramework(const FrameworkID& frameworkId, const string& pid)
if (state != RUNNING) {
LOG(WARNING) << "Dropping updateFramework message for "<< frameworkId
<< " because the slave is in " << state << " state";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -2519,7 +2494,6 @@ void Slave::statusUpdate(const StatusUpdate& update, const UPID& pid)
if (framework == NULL) {
LOG(WARNING) << "Ignoring status update " << update
<< " for unknown framework " << update.framework_id();
- stats.invalidStatusUpdates++;
metrics.invalid_status_updates++;
return;
}
@@ -2533,7 +2507,6 @@ void Slave::statusUpdate(const StatusUpdate& update, const UPID& pid)
if (framework->state == Framework::TERMINATING) {
LOG(WARNING) << "Ignoring status update " << update
<< " for terminating framework " << framework->id;
- stats.invalidStatusUpdates++;
metrics.invalid_status_updates++;
return;
}
@@ -2542,7 +2515,6 @@ void Slave::statusUpdate(const StatusUpdate& update, const UPID& pid)
if (executor == NULL) {
LOG(WARNING) << "Could not find the executor for "
<< "status update " << update;
- stats.validStatusUpdates++;
metrics.valid_status_updates++;
// NOTE: We forward the update here because this update could be
@@ -2577,9 +2549,6 @@ void Slave::statusUpdate(const StatusUpdate& update, const UPID& pid)
<< " (" << executor->pid << ")";
}
- stats.tasks[status.state()]++;
- stats.validStatusUpdates++;
-
metrics.valid_status_updates++;
// We set the latest state of the task here so that the slave can
@@ -2782,7 +2751,6 @@ void Slave::executorMessage(
LOG(WARNING) << "Dropping framework message from executor "
<< executorId << " to framework " << frameworkId
<< " because the slave is in " << state << " state";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -2792,7 +2760,6 @@ void Slave::executorMessage(
LOG(WARNING) << "Cannot send framework message from executor "
<< executorId << " to framework " << frameworkId
<< " because framework does not exist";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -2805,7 +2772,6 @@ void Slave::executorMessage(
LOG(WARNING) << "Ignoring framework message from executor "
<< executorId << " to framework " << frameworkId
<< " because framework is terminating";
- stats.invalidFrameworkMessages++;
metrics.invalid_framework_messages++;
return;
}
@@ -2821,7 +2787,6 @@ void Slave::executorMessage(
message.set_data(data);
send(framework->pid, message);
- stats.validFrameworkMessages++;
metrics.valid_framework_messages++;
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 7b58cad..d476d85 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -370,10 +370,6 @@ private:
process::Future<process::http::Response> health(
const process::http::Request& request);
- // /slave/stats.json
- process::Future<process::http::Response> stats(
- const process::http::Request& request);
-
// /slave/state.json
process::Future<process::http::Response> state(
const process::http::Request& request);
@@ -440,16 +436,6 @@ private:
Files* files;
- // Statistics (initialized in Slave::initialize).
- struct
- {
- uint64_t tasks[TaskState_ARRAYSIZE];
- uint64_t validStatusUpdates;
- uint64_t invalidStatusUpdates;
- uint64_t validFrameworkMessages;
- uint64_t invalidFrameworkMessages;
- } stats;
-
Metrics metrics;
double _resources_total(const std::string& name);
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 3af20e9..580e1f8 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -1485,119 +1485,101 @@ TEST_F(MasterTest, LaunchDuplicateOfferTest)
}
-TEST_F(MasterTest, MetricsInStatsEndpoint)
+TEST_F(MasterTest, MetricsInMetricsEndpoint)
{
- Try<PID<Master> > master = StartMaster();
+ Try<PID<Master>> master = StartMaster();
ASSERT_SOME(master);
- Future<process::http::Response> response =
- process::http::get(master.get(), "stats.json");
+ JSON::Object snapshot = Metrics();
- AWAIT_READY(response);
+ EXPECT_EQ(1u, snapshot.values.count("master/uptime_secs"));
- EXPECT_SOME_EQ(
- "application/json",
- response.get().headers.get("Content-Type"));
+ EXPECT_EQ(1u, snapshot.values.count("master/elected"));
+ EXPECT_EQ(1, snapshot.values["master/elected"]);
- Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.get().body);
+ EXPECT_EQ(1u, snapshot.values.count("master/slaves_connected"));
+ EXPECT_EQ(1u, snapshot.values.count("master/slaves_disconnected"));
+ EXPECT_EQ(1u, snapshot.values.count("master/slaves_active"));
+ EXPECT_EQ(1u, snapshot.values.count("master/slaves_inactive"));
- ASSERT_SOME(parse);
+ EXPECT_EQ(1u, snapshot.values.count("master/frameworks_connected"));
+ EXPECT_EQ(1u, snapshot.values.count("master/frameworks_disconnected"));
+ EXPECT_EQ(1u, snapshot.values.count("master/frameworks_active"));
+ EXPECT_EQ(1u, snapshot.values.count("master/frameworks_inactive"));
- JSON::Object stats = parse.get();
-
- EXPECT_EQ(1u, stats.values.count("master/uptime_secs"));
-
- EXPECT_EQ(1u, stats.values.count("elected"));
- EXPECT_EQ(1u, stats.values.count("master/elected"));
-
- EXPECT_EQ(1, stats.values["elected"]);
- EXPECT_EQ(1, stats.values["master/elected"]);
-
- EXPECT_EQ(1u, stats.values.count("master/slaves_connected"));
- EXPECT_EQ(1u, stats.values.count("master/slaves_disconnected"));
- EXPECT_EQ(1u, stats.values.count("master/slaves_active"));
- EXPECT_EQ(1u, stats.values.count("master/slaves_inactive"));
-
- EXPECT_EQ(1u, stats.values.count("master/frameworks_connected"));
- EXPECT_EQ(1u, stats.values.count("master/frameworks_disconnected"));
- EXPECT_EQ(1u, stats.values.count("master/frameworks_active"));
- EXPECT_EQ(1u, stats.values.count("master/frameworks_inactive"));
-
- EXPECT_EQ(1u, stats.values.count("master/outstanding_offers"));
-
- EXPECT_EQ(1u, stats.values.count("master/tasks_staging"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_starting"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_running"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_finished"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_failed"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_killed"));
- EXPECT_EQ(1u, stats.values.count("master/tasks_lost"));
+ EXPECT_EQ(1u, snapshot.values.count("master/outstanding_offers"));
- // TODO(dhamon): Add expectations for task source reason metrics.
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_staging"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_starting"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_running"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_finished"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_failed"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_killed"));
+ EXPECT_EQ(1u, snapshot.values.count("master/tasks_lost"));
- EXPECT_EQ(1u, stats.values.count("master/dropped_messages"));
+ EXPECT_EQ(1u, snapshot.values.count("master/dropped_messages"));
// Messages from schedulers.
- EXPECT_EQ(1u, stats.values.count("master/messages_register_framework"));
- EXPECT_EQ(1u, stats.values.count("master/messages_reregister_framework"));
- EXPECT_EQ(1u, stats.values.count("master/messages_unregister_framework"));
- EXPECT_EQ(1u, stats.values.count("master/messages_deactivate_framework"));
- EXPECT_EQ(1u, stats.values.count("master/messages_kill_task"));
- EXPECT_EQ(1u, stats.values.count(
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_register_framework"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_reregister_framework"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_unregister_framework"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_deactivate_framework"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_kill_task"));
+ EXPECT_EQ(1u, snapshot.values.count(
"master/messages_status_update_acknowledgement"));
- EXPECT_EQ(1u, stats.values.count("master/messages_resource_request"));
- EXPECT_EQ(1u, stats.values.count("master/messages_launch_tasks"));
- EXPECT_EQ(1u, stats.values.count("master/messages_decline_offers"));
- EXPECT_EQ(1u, stats.values.count("master/messages_revive_offers"));
- EXPECT_EQ(1u, stats.values.count("master/messages_reconcile_tasks"));
- EXPECT_EQ(1u, stats.values.count("master/messages_framework_to_executor"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_resource_request"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_launch_tasks"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_decline_offers"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_revive_offers"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_reconcile_tasks"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_framework_to_executor"));
// Messages from slaves.
- EXPECT_EQ(1u, stats.values.count("master/messages_register_slave"));
- EXPECT_EQ(1u, stats.values.count("master/messages_reregister_slave"));
- EXPECT_EQ(1u, stats.values.count("master/messages_unregister_slave"));
- EXPECT_EQ(1u, stats.values.count("master/messages_status_update"));
- EXPECT_EQ(1u, stats.values.count("master/messages_exited_executor"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_register_slave"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_reregister_slave"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_unregister_slave"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_status_update"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_exited_executor"));
// Messages from both schedulers and slaves.
- EXPECT_EQ(1u, stats.values.count("master/messages_authenticate"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_authenticate"));
- EXPECT_EQ(1u, stats.values.count(
+ EXPECT_EQ(1u, snapshot.values.count(
"master/valid_framework_to_executor_messages"));
- EXPECT_EQ(1u, stats.values.count(
+ EXPECT_EQ(1u, snapshot.values.count(
"master/invalid_framework_to_executor_messages"));
- EXPECT_EQ(1u, stats.values.count("master/valid_status_updates"));
- EXPECT_EQ(1u, stats.values.count("master/invalid_status_updates"));
+ EXPECT_EQ(1u, snapshot.values.count("master/valid_status_updates"));
+ EXPECT_EQ(1u, snapshot.values.count("master/invalid_status_updates"));
- EXPECT_EQ(1u, stats.values.count(
+ EXPECT_EQ(1u, snapshot.values.count(
"master/valid_status_update_acknowledgements"));
- EXPECT_EQ(1u, stats.values.count(
+ EXPECT_EQ(1u, snapshot.values.count(
"master/invalid_status_update_acknowledgements"));
- EXPECT_EQ(1u, stats.values.count("master/recovery_slave_removals"));
+ EXPECT_EQ(1u, snapshot.values.count("master/recovery_slave_removals"));
- EXPECT_EQ(1u, stats.values.count("master/event_queue_messages"));
- EXPECT_EQ(1u, stats.values.count("master/event_queue_dispatches"));
- EXPECT_EQ(1u, stats.values.count("master/event_queue_http_requests"));
+ EXPECT_EQ(1u, snapshot.values.count("master/event_queue_messages"));
+ EXPECT_EQ(1u, snapshot.values.count("master/event_queue_dispatches"));
+ EXPECT_EQ(1u, snapshot.values.count("master/event_queue_http_requests"));
- EXPECT_EQ(1u, stats.values.count("master/cpus_total"));
- EXPECT_EQ(1u, stats.values.count("master/cpus_used"));
- EXPECT_EQ(1u, stats.values.count("master/cpus_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("master/cpus_total"));
+ EXPECT_EQ(1u, snapshot.values.count("master/cpus_used"));
+ EXPECT_EQ(1u, snapshot.values.count("master/cpus_percent"));
- EXPECT_EQ(1u, stats.values.count("master/mem_total"));
- EXPECT_EQ(1u, stats.values.count("master/mem_used"));
- EXPECT_EQ(1u, stats.values.count("master/mem_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("master/mem_total"));
+ EXPECT_EQ(1u, snapshot.values.count("master/mem_used"));
+ EXPECT_EQ(1u, snapshot.values.count("master/mem_percent"));
- EXPECT_EQ(1u, stats.values.count("master/disk_total"));
- EXPECT_EQ(1u, stats.values.count("master/disk_used"));
- EXPECT_EQ(1u, stats.values.count("master/disk_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("master/disk_total"));
+ EXPECT_EQ(1u, snapshot.values.count("master/disk_used"));
+ EXPECT_EQ(1u, snapshot.values.count("master/disk_percent"));
- EXPECT_EQ(1u, stats.values.count("registrar/queued_operations"));
- EXPECT_EQ(1u, stats.values.count("registrar/registry_size_bytes"));
+ EXPECT_EQ(1u, snapshot.values.count("registrar/queued_operations"));
+ EXPECT_EQ(1u, snapshot.values.count("registrar/registry_size_bytes"));
- EXPECT_EQ(1u, stats.values.count("registrar/state_fetch_ms"));
- EXPECT_EQ(1u, stats.values.count("registrar/state_store_ms"));
+ EXPECT_EQ(1u, snapshot.values.count("registrar/state_fetch_ms"));
+ EXPECT_EQ(1u, snapshot.values.count("registrar/state_store_ms"));
Shutdown();
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/d9ba9199/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index a74ff7b..27b3410 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -806,68 +806,53 @@ TEST_F(SlaveTest, IgnoreNonLeaderStatusUpdateAcknowledgement)
}
-TEST_F(SlaveTest, MetricsInStatsEndpoint)
+TEST_F(SlaveTest, MetricsInMetricsEndpoint)
{
- Try<PID<Master> > master = StartMaster();
+ Try<PID<Master>> master = StartMaster();
ASSERT_SOME(master);
- Try<PID<Slave> > slave = StartSlave();
+ Try<PID<Slave>> slave = StartSlave();
ASSERT_SOME(slave);
- Future<http::Response> response =
- http::get(slave.get(), "stats.json");
-
- AWAIT_READY(response);
-
- EXPECT_SOME_EQ(
- "application/json",
- response.get().headers.get("Content-Type"));
-
- Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.get().body);
-
- ASSERT_SOME(parse);
-
- JSON::Object stats = parse.get();
-
- EXPECT_EQ(1u, stats.values.count("slave/uptime_secs"));
- EXPECT_EQ(1u, stats.values.count("slave/registered"));
+ JSON::Object snapshot = Metrics();
- EXPECT_EQ(1u, stats.values.count("slave/recovery_errors"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/uptime_secs"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/registered"));
- EXPECT_EQ(1u, stats.values.count("slave/frameworks_active"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/recovery_errors"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_staging"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_starting"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_running"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_finished"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_failed"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_killed"));
- EXPECT_EQ(1u, stats.values.count("slave/tasks_lost"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/frameworks_active"));
- // TODO(dhamon): Add expectations for task source reason metrics.
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_staging"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_starting"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_running"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_finished"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_failed"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_killed"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/tasks_lost"));
- EXPECT_EQ(1u, stats.values.count("slave/executors_registering"));
- EXPECT_EQ(1u, stats.values.count("slave/executors_running"));
- EXPECT_EQ(1u, stats.values.count("slave/executors_terminating"));
- EXPECT_EQ(1u, stats.values.count("slave/executors_terminated"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/executors_registering"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/executors_running"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/executors_terminating"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/executors_terminated"));
- EXPECT_EQ(1u, stats.values.count("slave/valid_status_updates"));
- EXPECT_EQ(1u, stats.values.count("slave/invalid_status_updates"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/valid_status_updates"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/invalid_status_updates"));
- EXPECT_EQ(1u, stats.values.count("slave/valid_framework_messages"));
- EXPECT_EQ(1u, stats.values.count("slave/invalid_framework_messages"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/valid_framework_messages"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/invalid_framework_messages"));
- EXPECT_EQ(1u, stats.values.count("slave/cpus_total"));
- EXPECT_EQ(1u, stats.values.count("slave/cpus_used"));
- EXPECT_EQ(1u, stats.values.count("slave/cpus_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/cpus_total"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/cpus_used"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/cpus_percent"));
- EXPECT_EQ(1u, stats.values.count("slave/mem_total"));
- EXPECT_EQ(1u, stats.values.count("slave/mem_used"));
- EXPECT_EQ(1u, stats.values.count("slave/mem_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/mem_total"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/mem_used"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/mem_percent"));
- EXPECT_EQ(1u, stats.values.count("slave/disk_total"));
- EXPECT_EQ(1u, stats.values.count("slave/disk_used"));
- EXPECT_EQ(1u, stats.values.count("slave/disk_percent"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/disk_total"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/disk_used"));
+ EXPECT_EQ(1u, snapshot.values.count("slave/disk_percent"));
Shutdown();
}