This is an automated email from the ASF dual-hosted git repository.

ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git

commit 998414f3c717b6b5e60fb7bb94145c9aee1f799e
Author: ning.yougang <[email protected]>
AuthorDate: Tue May 10 15:49:49 2022 +0800

    Add namespace and action tags for container metric
---
 .../src/main/scala/org/apache/openwhisk/common/Logging.scala | 12 ++++++++++--
 .../core/containerpool/v2/FunctionPullingContainerPool.scala | 10 +++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala 
b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
index 53adfe23e..48230ee6a 100644
--- a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
+++ b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
@@ -412,8 +412,16 @@ object LoggingMarkers {
     LogMarkerToken(invoker, "sharedPackage", counter, None, Map("path" -> 
path))(MeasurementUnit.none)
   def INVOKER_CONTAINERPOOL_MEMORY(state: String) =
     LogMarkerToken(invoker, "containerPoolMemory", counter, Some(state), 
Map("state" -> state))(MeasurementUnit.none)
-  def INVOKER_CONTAINERPOOL_CONTAINER(state: String) =
-    LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), 
Map("state" -> state))(MeasurementUnit.none)
+  def INVOKER_CONTAINERPOOL_CONTAINER(state: String, tags: Option[Map[String, 
String]] = None) = {
+    var map = Map("state" -> state)
+    tags.foreach { mapTags =>
+      for ((k, v) <- mapTags) {
+        map += (k -> v)
+      }
+    }
+    LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), 
map)(MeasurementUnit.none)
+  }
+
   // System overload and random invoker assignment
   val MANAGED_SYSTEM_OVERLOAD =
     LogMarkerToken(controller, "managedInvokerSystemOverload", 
counter)(MeasurementUnit.none)
diff --git 
a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
 
b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
index bfc65d33d..a1396b7a0 100644
--- 
a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
+++ 
b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
@@ -110,14 +110,22 @@ class FunctionPullingContainerPool(
       
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("busy"), 
memoryConsumptionOf(busyPool))
     MetricEmitter
       
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("prewarmed"), 
memoryConsumptionOf(prewarmedPool))
+    MetricEmitter
+      
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("warmed"), 
memoryConsumptionOf(warmedPool))
     
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("max"),
 poolConfig.userMemory.toMB)
     val prewarmedSize = prewarmedPool.size
     val busySize = busyPool.size
     val warmedSize = warmedPool.size
+    val warmedPoolMap: Map[(String, String), Int] = warmedPool groupBy {
+      case (_, warmedData) => (warmedData.invocationNamespace, 
warmedData.action.toString)
+    } mapValues (_.size)
+    for((data, size) <- warmedPoolMap) {
+      val tags: Option[Map[String, String]] = Some(Map("namespace" -> data._1, 
"action" -> data._2))
+      
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed",
 tags), size)
+    }
     val allSize = prewarmedSize + busySize + warmedSize
     
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("prewarmed"),
 prewarmedSize)
     
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("busy"),
 busySize)
-    
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed"),
 warmedSize)
     
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("all"),
 allSize)
   })
 

Reply via email to