You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gr...@apache.org on 2018/08/01 20:24:22 UTC

[05/16] mesos git commit: Added per-framework metrics for scheduler events.

Added per-framework metrics for scheduler events.

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


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

Branch: refs/heads/master
Commit: 96dea3659599f8165d159ca6b4e83bb8ae65effb
Parents: 133669a
Author: Greg Mann <gr...@mesosphere.io>
Authored: Wed Aug 1 07:58:22 2018 -0700
Committer: Greg Mann <gr...@gmail.com>
Committed: Wed Aug 1 13:07:54 2018 -0700

----------------------------------------------------------------------
 src/master/master.hpp  | 22 +++++++++++++++++++---
 src/master/metrics.cpp | 41 ++++++++++++++++++++++++++++++++++++++++-
 src/master/metrics.hpp |  5 +++++
 3 files changed, 64 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/96dea365/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 6c92d33..5875640 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -380,13 +380,16 @@ public:
               const Message& _heartbeatMessage,
               const HttpConnection& _http,
               const Duration& _interval,
-              const Option<Duration>& _delay = None())
+              const Option<Duration>& _delay = None(),
+              const Option<lambda::function<void(const Message&)>>&
+                _callback = None())
     : process::ProcessBase(process::ID::generate("heartbeater")),
       logMessage(_logMessage),
       heartbeatMessage(_heartbeatMessage),
       http(_http),
       interval(_interval),
-      delay(_delay) {}
+      delay(_delay),
+      callback(_callback) {}
 
 protected:
   void initialize() override
@@ -408,6 +411,10 @@ private:
     if (http.closed().isPending()) {
       VLOG(2) << "Sending heartbeat to " << logMessage;
 
+      if (callback.isSome()) {
+        callback.get()(heartbeatMessage);
+      }
+
       Message message(heartbeatMessage);
       http.send<Message, Event>(message);
     }
@@ -420,6 +427,7 @@ private:
   HttpConnection http;
   const Duration interval;
   const Option<Duration> delay;
+  const Option<lambda::function<void(const Message&)>> callback;
 };
 
 
@@ -2420,6 +2428,10 @@ struct Framework
                    << " framework " << *this;
     }
 
+    // TODO(gilbert): add a helper to transform `SchedulerDriver` API messages
+    // directly to v0 events.
+    metrics.incrementEvent(devolve(evolve(message)));
+
     if (http.isSome()) {
       if (!http->send(message)) {
         LOG(WARNING) << "Unable to send event to framework " << *this << ":"
@@ -2905,7 +2917,11 @@ struct Framework
           "framework " + stringify(info.id()),
           event,
           http.get(),
-          DEFAULT_HEARTBEAT_INTERVAL);
+          DEFAULT_HEARTBEAT_INTERVAL,
+          None(),
+          [this](const scheduler::Event& event) {
+            this->metrics.incrementEvent(event);
+          });
 
     process::spawn(heartbeater->get());
   }

http://git-wip-us.apache.org/repos/asf/mesos/blob/96dea365/src/master/metrics.cpp
----------------------------------------------------------------------
diff --git a/src/master/metrics.cpp b/src/master/metrics.cpp
index c4252e0..8dbe1e9 100644
--- a/src/master/metrics.cpp
+++ b/src/master/metrics.cpp
@@ -555,7 +555,9 @@ FrameworkMetrics::FrameworkMetrics(const FrameworkInfo& _frameworkInfo)
     subscribed(
         getFrameworkMetricPrefix(frameworkInfo) + "subscribed"),
     calls(
-        getFrameworkMetricPrefix(frameworkInfo) + "calls")
+        getFrameworkMetricPrefix(frameworkInfo) + "calls"),
+    events(
+        getFrameworkMetricPrefix(frameworkInfo) + "events")
 {
   process::metrics::add(subscribed);
 
@@ -581,6 +583,29 @@ FrameworkMetrics::FrameworkMetrics(const FrameworkInfo& _frameworkInfo)
     call_types.put(type, counter);
     process::metrics::add(counter);
   }
+
+  // Add metrics for scheduler events.
+  process::metrics::add(events);
+  for (int index = 0;
+       index < scheduler::Event::Type_descriptor()->value_count();
+       index++) {
+    const google::protobuf::EnumValueDescriptor* descriptor =
+      scheduler::Event::Type_descriptor()->value(index);
+
+    const scheduler::Event::Type type =
+      static_cast<scheduler::Event::Type>(descriptor->number());
+
+    if (type == scheduler::Event::UNKNOWN) {
+      continue;
+    }
+
+    Counter counter = Counter(
+        getFrameworkMetricPrefix(frameworkInfo) + "events/" +
+        strings::lower(descriptor->name()));
+
+    event_types.put(type, counter);
+    process::metrics::add(counter);
+  }
 }
 
 
@@ -592,6 +617,11 @@ FrameworkMetrics::~FrameworkMetrics()
   foreachvalue (const Counter& counter, call_types) {
     process::metrics::remove(counter);
   }
+
+  process::metrics::remove(events);
+  foreachvalue (const Counter& counter, event_types) {
+    process::metrics::remove(counter);
+  }
 }
 
 
@@ -611,6 +641,15 @@ string getFrameworkMetricPrefix(const FrameworkInfo& frameworkInfo)
     "/" + stringify(frameworkInfo.id()) + "/";
 }
 
+
+void FrameworkMetrics::incrementEvent(const scheduler::Event& event)
+{
+  CHECK(event_types.contains(event.type()));
+
+  event_types.get(event.type()).get()++;
+  events++;
+}
+
 } // namespace master {
 } // namespace internal {
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/96dea365/src/master/metrics.hpp
----------------------------------------------------------------------
diff --git a/src/master/metrics.hpp b/src/master/metrics.hpp
index ae4c703..abc6a7c 100644
--- a/src/master/metrics.hpp
+++ b/src/master/metrics.hpp
@@ -226,12 +226,17 @@ struct FrameworkMetrics
 
   void incrementCall(const scheduler::Call::Type& callType);
 
+  void incrementEvent(const scheduler::Event& event);
+
   const FrameworkInfo frameworkInfo;
 
   process::metrics::PushGauge subscribed;
 
   process::metrics::Counter calls;
   hashmap<scheduler::Call::Type, process::metrics::Counter> call_types;
+
+  process::metrics::Counter events;
+  hashmap<scheduler::Event::Type, process::metrics::Counter> event_types;
 };