upgle closed pull request #3324: For contirubution review
URL: https://github.com/apache/incubator-openwhisk/pull/3324
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 83567337e7..36cd2b88ec 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -302,5 +302,8 @@ metrics:
     enabled: "{{ metrics_log | default(true) }}"
   kamon:
     enabled: "{{ metrics_kamon | default(false) }}"
+    tags: "{{ metrics_kamon_tags | default(false) }}"
+    granular_metric: "{{ metrics_granular_metric | default(false) }}"
     host: "{{ metrics_kamon_statsd_host | default('') }}"
     port: "{{ metrics_kamon_statsd_port | default('8125') }}"
+
diff --git a/ansible/roles/controller/tasks/deploy.yml 
b/ansible/roles/controller/tasks/deploy.yml
index 52dbc807e6..258afa8900 100644
--- a/ansible/roles/controller/tasks/deploy.yml
+++ b/ansible/roles/controller/tasks/deploy.yml
@@ -152,8 +152,9 @@
       "AKKA_CLUSTER_SEED_NODES": "{{seed_nodes_list | join(' ') }}"
 
       "METRICS_KAMON": "{{ metrics.kamon.enabled }}"
+      "METRICS_KAMON_TAGS": "{{ metrics.kamon.tags }}"
+      "METRICS_GRANULAR_METRIC": "{{ metrics.kamon.granular_metric }}"
       "METRICS_LOG": "{{ metrics.log.enabled }}"
-
       "CONFIG_whisk_loadbalancer_invokerBusyThreshold": "{{ 
invoker.busyThreshold }}"
       "CONFIG_whisk_loadbalancer_blackboxFraction": "{{ 
controller.blackboxFraction }}"
 
diff --git a/ansible/roles/invoker/tasks/deploy.yml 
b/ansible/roles/invoker/tasks/deploy.yml
index 0f3bdc6972..56fafcd5a8 100644
--- a/ansible/roles/invoker/tasks/deploy.yml
+++ b/ansible/roles/invoker/tasks/deploy.yml
@@ -194,6 +194,8 @@
         -e INVOKER_NAME='{{ groups['invokers'].index(inventory_hostname) }}'
         -e WHISK_LOGS_DIR='{{ whisk_logs_dir }}'
         -e METRICS_KAMON='{{ metrics.kamon.enabled }}'
+        -e METRICS_KAMON_TAGS='{{ metrics.kamon.tags }}'
+        -e METRICS_GRANULAR_METRIC='{{ metrics.kamon.granular_metric }}'
         -e METRICS_LOG='{{ metrics.log.enabled }}'
         -e CONFIG_kamon_statsd_hostname='{{ metrics.kamon.host }}'
         -e CONFIG_kamon_statsd_port='{{ metrics.kamon.port }}'
diff --git a/common/scala/src/main/scala/whisk/common/Logging.scala 
b/common/scala/src/main/scala/whisk/common/Logging.scala
index 4f4a80115b..543bd5610c 100644
--- a/common/scala/src/main/scala/whisk/common/Logging.scala
+++ b/common/scala/src/main/scala/whisk/common/Logging.scala
@@ -164,14 +164,14 @@ private object Logging {
     if (simpleName.endsWith("$")) simpleName.dropRight(1)
     else simpleName
   }
-
 }
 
 private object Emitter {
   val timeFormat = 
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("UTC"))
 }
 
-case class LogMarkerToken(component: String, action: String, state: String) {
+case class LogMarkerToken(component: String, action: String, state: String, 
tags: Option[Map[String, String]] = None) {
+
   override def toString() = component + "_" + action + "_" + state
 
   def asFinish = copy(state = LoggingMarkers.finish)
@@ -185,6 +185,15 @@ object LogMarkerToken {
     val Array(component, action, state) = s.split("_")
     LogMarkerToken(component, action, state)
   }
+
+  def makeGranularToken(logMarkerToken: LogMarkerToken, namespaceName: String, 
actionName: String) = {
+    if (TransactionId.granularMetric)
+      if (TransactionId.metricsKamonTags)
+        logMarkerToken.copy(tags = Some(logMarkerToken.tags.get + ("namespace" 
-> namespaceName, "action" -> actionName)))
+      else
+        logMarkerToken.copy(action = 
s"${logMarkerToken.action}.$namespaceName.$actionName")
+    else logMarkerToken
+  }
 }
 
 object MetricEmitter {
@@ -192,17 +201,14 @@ object MetricEmitter {
   val metrics = Kamon.metrics
 
   def emitCounterMetric(token: LogMarkerToken): Unit = {
-    metrics
-      .counter(token.toString)
-      .increment(1)
+    if (token.tags.nonEmpty) metrics.counter(token.toString, 
token.tags.get).increment(1)
+    else metrics.counter(token.toString).increment(1)
   }
 
   def emitHistogramMetric(token: LogMarkerToken, value: Long): Unit = {
-    metrics
-      .histogram(token.toString)
-      .record(value)
+    if (token.tags.nonEmpty) metrics.counter(token.toString, 
token.tags.get).increment(1)
+    else metrics.histogram(token.toString).record(value)
   }
-
 }
 
 object LoggingMarkers {
@@ -257,8 +263,12 @@ object LoggingMarkers {
   val INVOKER_ACTIVATION = LogMarkerToken(invoker, activation, start)
   def INVOKER_DOCKER_CMD(cmd: String) = LogMarkerToken(invoker, 
s"docker.$cmd", start)
   def INVOKER_RUNC_CMD(cmd: String) = LogMarkerToken(invoker, s"runc.$cmd", 
start)
-  def INVOKER_CONTAINER_START(containerState: String) =
-    LogMarkerToken(invoker, s"container_start_${containerState}", count)
+  def INVOKER_CONTAINER_START(containerState: String, namespaceName: String, 
actionName: String) = {
+    val logMarkerToken =
+      if (TransactionId.metricsKamonTags) LogMarkerToken(invoker, 
s"containerStart", count, Some(Map("containerState" ? containerState)))
+      else LogMarkerToken(invoker, s"containerStart.$containerState", count)
+    LogMarkerToken.makeGranularToken(logMarkerToken, namespaceName, actionName)
+  }
 
   /*
    * General markers
diff --git a/common/scala/src/main/scala/whisk/common/TransactionId.scala 
b/common/scala/src/main/scala/whisk/common/TransactionId.scala
index 09ca1fd894..5256d172ae 100644
--- a/common/scala/src/main/scala/whisk/common/TransactionId.scala
+++ b/common/scala/src/main/scala/whisk/common/TransactionId.scala
@@ -206,6 +206,8 @@ object TransactionId {
 
   // get the metric parameters directly from the environment since WhiskConfig 
can not be instantiated here
   val metricsKamon: Boolean = 
sys.env.get("METRICS_KAMON").getOrElse("False").toBoolean
+  val metricsKamonTags: Boolean = 
sys.env.get("METRICS_KAMON_TAGS").getOrElse("False").toBoolean
+  val granularMetric: Boolean = 
sys.env.get("METRICS_GRANULAR_METRIC").getOrElse("False").toBoolean
   val metricsLog: Boolean = 
sys.env.get("METRICS_LOG").getOrElse("True").toBoolean
 
   val unknown = TransactionId(0)
diff --git 
a/core/invoker/src/main/scala/whisk/core/containerpool/ContainerPool.scala 
b/core/invoker/src/main/scala/whisk/core/containerpool/ContainerPool.scala
index 801fc09273..b1bdc2fa9f 100644
--- a/core/invoker/src/main/scala/whisk/core/containerpool/ContainerPool.scala
+++ b/core/invoker/src/main/scala/whisk/core/containerpool/ContainerPool.scala
@@ -86,7 +86,7 @@ class ContainerPool(childFactory: ActorRefFactory => ActorRef,
 
     r.msg.transid.mark(
       this,
-      LoggingMarkers.INVOKER_CONTAINER_START(containerState),
+      LoggingMarkers.INVOKER_CONTAINER_START(containerState, namespaceName, 
actionName),
       s"containerStart containerState: $containerState action: $actionName 
namespace: $namespaceName activationId: $activationId",
       akka.event.Logging.InfoLevel)
   }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to