Skip to content

Commit

Permalink
ut
Browse files Browse the repository at this point in the history
  • Loading branch information
turboFei committed Dec 26, 2024
1 parent b8f227f commit 4894784
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,14 @@ class PrometheusReporterService(registry: MetricRegistry)
val metricsSnapshotWriter = new java.io.StringWriter
val contentType = TextFormat.chooseContentType(null)
TextFormat.writeFormat(contentType, metricsSnapshotWriter, bridgeRegistry.metricFamilySamples())
val labelStr = labels.map { case (k, v) => s"""$k="$v"""" }.toArray.sorted.mkString(",")
metricsSnapshotWriter.toString.split("\n").map { line =>
if (line.startsWith("#")) {
line
} else {
line.split("\\s+", 2) match {
case Array(metrics, rest) =>
val metricsWithNewLabels = PrometheusReporterService.applyExtraLabels(metrics, labels)
val metricsWithNewLabels = PrometheusReporterService.applyExtraLabels(metrics, labelStr)
s"""$metricsWithNewLabels $rest"""
case _ => line
}
Expand All @@ -156,19 +157,16 @@ class PrometheusReporterService(registry: MetricRegistry)
}

object PrometheusReporterService {
def applyExtraLabels(metrics: String, labels: Map[String, String]): String = {
if (labels.isEmpty) return metrics

val labelString = labels.map { case (k, v) => s"""$k="$v"""" }.toArray.sorted.mkString(",")
def applyExtraLabels(metrics: String, labelStr: String): String = {
val labelStartIdx = metrics.indexOf("{")
val labelEndIdx = metrics.indexOf("}")
if (labelStartIdx > 0 && labelEndIdx > 0) {
metrics.substring(0, labelEndIdx).stripSuffix(",") +
"," +
labelString +
labelStr +
metrics.substring(labelEndIdx)
} else {
s"$metrics{${labelString}}"
s"$metrics{${labelStr}}"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.kyuubi.metrics

import org.apache.kyuubi.KyuubiFunSuite

class PrometheusReporterServiceSuite extends KyuubiFunSuite {
test("apply extra labels on metrics") {
val labels = Map("instance" -> "kyuubi-0")
val labelStr = labels.map { case (k, v) => s"""$k="$v"""" }.toArray.sorted.mkString(",")
val metrics1 = "kyuubi_backend_service_close_operation{quantile=\"0.5\",}"
assert(PrometheusReporterService.applyExtraLabels(metrics1, labelStr) ==
"kyuubi_backend_service_close_operation{quantile=\"0.5\",instance=\"kyuubi-0\"}")
val metrics2 = "kyuubi_backend_service_close_operation"
assert(PrometheusReporterService.applyExtraLabels(metrics2, labelStr) ==
"kyuubi_backend_service_close_operation{instance=\"kyuubi-0\"}")
}
}

0 comments on commit 4894784

Please sign in to comment.