Skip to content

Commit 22bd4c7

Browse files
authored
Merge pull request #19 from fiadliel/escape_chars_in_text
Escape backslash, line feed and double quotes appropriately.
2 parents a0b566b + 893033e commit 22bd4c7

File tree

13 files changed

+34
-10
lines changed

13 files changed

+34
-10
lines changed

client/shared/src/main/boilerplate/CounterN.scala.template

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ final case class Counter1 private[client] (name: MetricName, help: String, label
1010

1111
override final val metricType = MetricType.Counter
1212

13+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
14+
1315
def labelValues([#labelValue1: String#]): LabelledCounter =
1416
new LabelledCounter(name, labels, adders(Tuple1([#labelValue1#])))
1517

client/shared/src/main/boilerplate/GaugeN.scala.template

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ final case class Gauge1 private[client] (name: MetricName, help: String, labels:
1010

1111
override final val metricType = MetricType.Gauge
1212

13+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
14+
1315
def labelValues([#labelValue1: String#]): LabelledGauge =
1416
new LabelledGauge(name, labels, adders(Tuple1([#labelValue1#])), initialValue)
1517

client/shared/src/main/boilerplate/HistogramN.scala.template

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ final case class Histogram1 private[client] (name: MetricName, help: String, lab
1010

1111
override final val metricType = MetricType.Histogram
1212

13+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
14+
1315
def labelValues([#labelValue1: String#]): LabelledHistogram =
1416
new LabelledHistogram(name, labels, adders(Tuple1([#labelValue1#])))
1517

client/shared/src/main/scala/org/lyranthe/prometheus/client/DefaultRegistry.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DefaultRegistry extends Registry {
1515

1616
override def collect(): Iterator[RegistryMetrics] = {
1717
collectors.toIterator.map { c =>
18-
RegistryMetrics(c.name, c.help, c.metricType, c.collect())
18+
RegistryMetrics(c.name, c.help, c.escapedHelp, c.metricType, c.collect())
1919
}
2020
}
2121
}

client/shared/src/main/scala/org/lyranthe/prometheus/client/counter/Counter0.scala

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ final case class Counter0 private[client] (name: MetricName, help: String)
1616
with MetricFamily {
1717
override val metricType = MetricType.Counter
1818

19+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
20+
1921
override def collect(): List[Metric] =
2022
CounterMetric(List.empty, adder.sum) :: Nil
2123
}

client/shared/src/main/scala/org/lyranthe/prometheus/client/gauge/Gauge0.scala

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ final case class Gauge0 private[client] (name: MetricName,
1717
with MetricFamily {
1818
override val metricType = MetricType.Gauge
1919

20+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
21+
2022
override def collect(): List[Metric] =
2123
synchronized {
2224
GaugeMetric(List.empty, adder.sum) :: Nil

client/shared/src/main/scala/org/lyranthe/prometheus/client/histogram/Histogram0.scala

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ final case class Histogram0 private[client] (name: MetricName,
2020
with MetricFamily {
2121
override val metricType = MetricType.Histogram
2222

23+
override final val escapedHelp = help.replace("\\", "\\\\").replace("\n", "\\n")
24+
2325
override def collect(): List[HistogramMetric] = {
2426
List(
2527
HistogramMetric(List.empty,

client/shared/src/main/scala/org/lyranthe/prometheus/client/jmx.scala

+5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ object jmx {
1818
override def name: MetricName = metric"jvm_gc_stats"
1919

2020
override def help: String = "JVM Garbage Collector Statistics"
21+
override def escapedHelp: String = help
2122

2223
override def metricType = MetricType.Gauge
2324

@@ -38,6 +39,7 @@ object jmx {
3839
override def name: MetricName = metric"jvm_memory_usage"
3940

4041
override def help: String = "JVM Memory Usage"
42+
override def escapedHelp: String = help
4143

4244
override def metricType = MetricType.Gauge
4345

@@ -66,6 +68,7 @@ object jmx {
6668
override def name: MetricName = metric"jvm_classloader"
6769

6870
override def help: String = "JVM Classloader statistics"
71+
override def escapedHelp: String = help
6972

7073
override def metricType = MetricType.Gauge
7174

@@ -85,6 +88,7 @@ object jmx {
8588
override def name: MetricName = metric"jvm_start_time"
8689

8790
override def help: String = "JVM Start Time"
91+
override def escapedHelp: String = help
8892

8993
override def metricType = MetricType.Gauge
9094

@@ -97,6 +101,7 @@ object jmx {
97101
override def name: MetricName = metric"jvm_threads"
98102

99103
override def help: String = "JVM Thread Information"
104+
override def escapedHelp: String = help
100105

101106
override def metricType: MetricType = MetricType.Gauge
102107

client/shared/src/main/scala/org/lyranthe/prometheus/client/registry/Metric.scala

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ sealed trait Metric {
77
}
88

99
case class Bucket(cumulativeCount: Long, upperBound: Double)
10-
case class LabelPair(name: LabelName, value: String)
10+
case class LabelPair(name: LabelName, value: String) {
11+
final private[registry] val escapedValue: String =
12+
value.replace("\\", "\\\\").replace("\n", "\\n").replace("\"", "\\\"")
13+
}
1114

1215
case class GaugeMetric(labels: List[LabelPair], value: Double) extends Metric
1316
case class CounterMetric(labels: List[LabelPair], value: Double) extends Metric

client/shared/src/main/scala/org/lyranthe/prometheus/client/registry/MetricFamily.scala

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ trait MetricFamily {
1111
def help: String
1212
def metricType: MetricType
1313

14+
private[client] def escapedHelp: String
15+
1416
def register(implicit registry: Registry): this.type = {
1517
registry.register(this)
1618
this

client/shared/src/main/scala/org/lyranthe/prometheus/client/registry/RegistryMetrics.scala

+1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ import org.lyranthe.prometheus.client.{MetricName, MetricType}
44

55
case class RegistryMetrics(name: MetricName,
66
help: String,
7+
escapedHelp: String,
78
metricType: MetricType,
89
metrics: List[Metric])

client/shared/src/main/scala/org/lyranthe/prometheus/client/registry/TextFormat.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ object TextFormat extends RegistryFormat {
2121
def output(values: => Iterator[RegistryMetrics]): Array[Byte] = {
2222
val outputStream = new ByteArrayOutputStream(4096)
2323

24-
def labelsToString(labels: List[LabelPair]) = {
25-
if (labels.isEmpty)
24+
def labelsToString(labelPairs: List[LabelPair]) = {
25+
if (labelPairs.isEmpty)
2626
""
2727
else
28-
labels.map {
29-
case LabelPair(label, metric) => s"""${label.name}="$metric""""
28+
labelPairs.map { pair =>
29+
s"""${pair.name.name}="${pair.escapedValue}""""
3030
}.mkString("{", ",", "}")
3131
}
3232

3333
values.foreach { metric =>
3434
val sb = new StringBuilder
35-
sb.append(s"# HELP ${metric.name.name} ${metric.help}\n")
35+
sb.append(s"# HELP ${metric.name.name} ${metric.escapedHelp}\n")
3636
sb.append(s"# TYPE ${metric.name.name} ${metric.metricType.toString}\n")
3737
metric.metrics foreach { rm =>
3838
rm match {

site/src/main/tut/guide.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,12 @@ implicit val defaultRegistry = DefaultRegistry()
121121
implicit val histogramBuckets = HistogramBuckets(1, 2, 5, 10, 20, 50, 100)
122122
123123
val activeRequests = Gauge(metric"active_requests", "Active requests").labels().register
124-
val numErrors = Counter(metric"num_errors", "Total errors").labels().register
125-
val requestLatency = Histogram(metric"request_latency", "Request latency").labels(label"path").register
124+
val numErrors = Counter(metric"total_errors", "Total errors").labels().register
125+
val requestLatency = Histogram(metric"db_request_duration_seconds", "Request latency\nfrom database").labels(label"sql").register
126126
127127
activeRequests.set(50)
128128
numErrors.inc
129-
requestLatency.labelValues("/home").observe(17)
129+
requestLatency.labelValues("select \nname, age\nfrom\nusers").observe(17)
130130
implicitly[Registry].outputText
131131
```
132132

@@ -212,3 +212,4 @@ jmx.register
212212
213213
println(implicitly[Registry].outputText)
214214
```
215+

0 commit comments

Comments
 (0)