You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2014/11/08 01:46:08 UTC

mesos git commit: Added slave metrics for total and used resources.

Repository: mesos
Updated Branches:
  refs/heads/master ce82e81c1 -> 084b0b700


Added slave metrics for total and used resources.

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


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

Branch: refs/heads/master
Commit: 084b0b700b62f1a786ccb8d2df2ec86784edf353
Parents: ce82e81
Author: Vinod Kone <vi...@gmail.com>
Authored: Fri Nov 7 16:22:39 2014 -0800
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Nov 7 16:45:06 2014 -0800

----------------------------------------------------------------------
 src/master/master.cpp     |  5 ++-
 src/slave/slave.cpp       | 84 ++++++++++++++++++++++++++++++++++++++++++
 src/slave/slave.hpp       |  9 +++++
 src/tests/slave_tests.cpp | 12 ++++++
 4 files changed, 108 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/084b0b70/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 5712b17..0e182a6 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -5253,8 +5253,8 @@ Master::Metrics::Metrics(const Master& master)
   process::metrics::add(slave_removals);
 
   // Create resource gauges.
-  // TODO(dhamon): Set these up dynamically when adding a slave based on the
-  // resources the slave exposes.
+  // TODO(dhamon): Set these up dynamically when adding a slave based
+  // on the resources the slave exposes.
   const string resources[] = {"cpus", "mem", "disk"};
 
   foreach (const string& resource, resources) {
@@ -5400,6 +5400,7 @@ double Master::_resources_used(const std::string& name)
   return used;
 }
 
+
 double Master::_resources_percent(const std::string& name)
 {
   double total = _resources_total(name);

http://git-wip-us.apache.org/repos/asf/mesos/blob/084b0b70/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 81e0c4b..ba00bf5 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -3802,6 +3802,31 @@ Slave::Metrics::Metrics(const Slave& slave)
 
   process::metrics::add(valid_framework_messages);
   process::metrics::add(invalid_framework_messages);
+
+  // Create resource gauges.
+  // TODO(dhamon): Set these up dynamically when creating a slave
+  // based on the resources it exposes.
+  const string resources[] = {"cpus", "mem", "disk"};
+
+  foreach (const string& resource, resources) {
+    process::metrics::Gauge totalGauge(
+        "slave/" + resource + "_total",
+        defer(slave, &Slave::_resources_total, resource));
+    resources_total.push_back(totalGauge);
+    process::metrics::add(totalGauge);
+
+    process::metrics::Gauge usedGauge(
+        "slave/" + resource + "_used",
+        defer(slave, &Slave::_resources_used, resource));
+    resources_used.push_back(usedGauge);
+    process::metrics::add(usedGauge);
+
+    process::metrics::Gauge percentGauge(
+        "slave/" + resource + "_percent",
+        defer(slave, &Slave::_resources_percent, resource));
+    resources_percent.push_back(percentGauge);
+    process::metrics::add(percentGauge);
+  }
 }
 
 
@@ -3833,6 +3858,65 @@ Slave::Metrics::~Metrics()
 
   process::metrics::remove(valid_framework_messages);
   process::metrics::remove(invalid_framework_messages);
+
+  foreach (const process::metrics::Gauge& gauge, resources_total) {
+    process::metrics::remove(gauge);
+  }
+  resources_total.clear();
+
+  foreach (const process::metrics::Gauge& gauge, resources_used) {
+    process::metrics::remove(gauge);
+  }
+  resources_used.clear();
+
+  foreach (const process::metrics::Gauge& gauge, resources_percent) {
+    process::metrics::remove(gauge);
+  }
+  resources_percent.clear();
+}
+
+
+double Slave::_resources_total(const std::string& name)
+{
+  double total = 0.0;
+
+  foreach (const Resource& resource, info.resources()) {
+    if (resource.name() == name && resource.type() == Value::SCALAR) {
+      total += resource.scalar().value();
+    }
+  }
+
+  return total;
+}
+
+
+double Slave::_resources_used(const std::string& name)
+{
+  double used = 0.0;
+
+  foreachvalue (Framework* framework, frameworks) {
+    foreachvalue (Executor* executor, framework->executors) {
+      foreach (const Resource& resource, executor->resources) {
+        if (resource.name() == name && resource.type() == Value::SCALAR) {
+          used += resource.scalar().value();
+        }
+      }
+    }
+  }
+
+  return used;
+}
+
+
+double Slave::_resources_percent(const std::string& name)
+{
+  double total = _resources_total(name);
+
+  if (total == 0.0) {
+    return total;
+  } else {
+    return _resources_used(name) / total;
+  }
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/084b0b70/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 72bbec9..d9f9d2e 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -459,8 +459,17 @@ private:
 
     process::metrics::Counter valid_framework_messages;
     process::metrics::Counter invalid_framework_messages;
+
+    // Resource metrics.
+    std::vector<process::metrics::Gauge> resources_total;
+    std::vector<process::metrics::Gauge> resources_used;
+    std::vector<process::metrics::Gauge> resources_percent;
   } metrics;
 
+  double _resources_total(const std::string& name);
+  double _resources_used(const std::string& name);
+  double _resources_percent(const std::string& name);
+
   process::Time startTime;
 
   GarbageCollector* gc;

http://git-wip-us.apache.org/repos/asf/mesos/blob/084b0b70/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index d2cbaf8..18ff8fe 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -836,6 +836,18 @@ TEST_F(SlaveTest, MetricsInStatsEndpoint)
   EXPECT_EQ(1u, stats.values.count("slave/valid_framework_messages"));
   EXPECT_EQ(1u, stats.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, 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, stats.values.count("slave/disk_total"));
+  EXPECT_EQ(1u, stats.values.count("slave/disk_used"));
+  EXPECT_EQ(1u, stats.values.count("slave/disk_percent"));
+
   Shutdown();
 }