Skip to content

Commit 1930110

Browse files
committed
Support PROMETHEUS_DISABLE_CREATED_SERIES env var to suppress _created time series
Signed-off-by: Gabi Davar <[email protected]>
1 parent 2be241c commit 1930110

File tree

6 files changed

+157
-34
lines changed

6 files changed

+157
-34
lines changed

simpleclient/pom.xml

+18
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,24 @@
5454
<version>4.13.2</version>
5555
<scope>test</scope>
5656
</dependency>
57+
<dependency>
58+
<groupId>org.mockito</groupId>
59+
<artifactId>mockito-inline</artifactId>
60+
<version>3.12.4</version>
61+
<scope>test</scope>
62+
</dependency>
63+
<dependency>
64+
<groupId>uk.org.webcompere</groupId>
65+
<artifactId>system-stubs-core</artifactId>
66+
<version>2.0.1</version>
67+
<scope>test</scope>
68+
</dependency>
69+
<dependency>
70+
<groupId>uk.org.webcompere</groupId>
71+
<artifactId>system-stubs-junit4</artifactId>
72+
<version>2.0.1</version>
73+
<scope>test</scope>
74+
</dependency>
5775
<dependency>
5876
<groupId>org.apache.commons</groupId>
5977
<artifactId>commons-math3</artifactId>

simpleclient/src/main/java/io/prometheus/client/Collector.java

+40-31
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33

44
import io.prometheus.client.exemplars.Exemplar;
55

6-
import java.util.ArrayList;
7-
import java.util.List;
6+
import java.util.*;
87
import java.util.regex.Pattern;
98

109
/**
@@ -151,43 +150,42 @@ public MetricFamilySamples filter(Predicate<String> sampleNameFilter) {
151150
* we include the name without suffix here as well.
152151
*/
153152
public String[] getNames() {
153+
List<String> names = new ArrayList<String>();
154154
switch (type) {
155155
case COUNTER:
156-
return new String[]{
157-
name + "_total",
158-
name + "_created",
159-
name
160-
};
156+
names.add(name + "_total");
157+
if (getUseCreated()) {
158+
names.add(name + "_created");
159+
}
160+
break;
161161
case SUMMARY:
162-
return new String[]{
163-
name + "_count",
164-
name + "_sum",
165-
name + "_created",
166-
name
167-
};
162+
names.add(name + "_count");
163+
names.add(name + "_sum");
164+
if (getUseCreated()) {
165+
names.add(name + "_created");
166+
}
167+
break;
168168
case HISTOGRAM:
169-
return new String[]{
170-
name + "_count",
171-
name + "_sum",
172-
name + "_bucket",
173-
name + "_created",
174-
name
175-
};
169+
names.add(name + "_count");
170+
names.add(name + "_sum");
171+
names.add(name + "_bucket");
172+
if (getUseCreated()) {
173+
names.add(name + "_created");
174+
}
175+
break;
176176
case GAUGE_HISTOGRAM:
177-
return new String[]{
178-
name + "_gcount",
179-
name + "_gsum",
180-
name + "_bucket",
181-
name
182-
};
177+
names.add(name + "_gcount");
178+
names.add(name + "_gsum");
179+
names.add(name + "_bucket");
180+
break;
183181
case INFO:
184-
return new String[]{
185-
name + "_info",
186-
name
187-
};
182+
names.add(name + "_info");
183+
break;
188184
default:
189-
return new String[]{name};
185+
// NOP - `name` is added to all
190186
}
187+
names.add(name);
188+
return names.toArray(new String[0]);
191189
}
192190

193191

@@ -396,4 +394,15 @@ public static String doubleToGoString(double d) {
396394
}
397395
return Double.toString(d);
398396
}
397+
398+
protected static final String DISABLE_CREATED_SERIES = "PROMETHEUS_DISABLE_CREATED_SERIES";
399+
private static final List<String> TRUTHS = Arrays.asList("true", "1", "t");
400+
401+
protected static boolean getUseCreated() {
402+
String disable_series = System.getenv(DISABLE_CREATED_SERIES);
403+
if (disable_series != null) {
404+
return !TRUTHS.contains(disable_series.toLowerCase());
405+
}
406+
return true;
407+
}
399408
}

simpleclient/src/main/java/io/prometheus/client/Counter.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,9 @@ public List<MetricFamilySamples> collect() {
355355
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>(children.size());
356356
for(Map.Entry<List<String>, Child> c: children.entrySet()) {
357357
samples.add(new MetricFamilySamples.Sample(fullname + "_total", labelNames, c.getKey(), c.getValue().get(), c.getValue().getExemplar()));
358-
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), c.getValue().created() / 1000.0));
358+
if (getUseCreated()) {
359+
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), c.getValue().created() / 1000.0));
360+
}
359361
}
360362
return familySamplesList(Type.COUNTER, samples);
361363
}

simpleclient/src/main/java/io/prometheus/client/Histogram.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,9 @@ public List<MetricFamilySamples> collect() {
574574
}
575575
samples.add(new MetricFamilySamples.Sample(fullname + "_count", labelNames, c.getKey(), v.buckets[buckets.length-1]));
576576
samples.add(new MetricFamilySamples.Sample(fullname + "_sum", labelNames, c.getKey(), v.sum));
577-
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), v.created / 1000.0));
577+
if (getUseCreated()) {
578+
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), v.created / 1000.0));
579+
}
578580
}
579581

580582
return familySamplesList(Type.HISTOGRAM, samples);

simpleclient/src/main/java/io/prometheus/client/Summary.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,9 @@ public List<MetricFamilySamples> collect() {
404404
}
405405
samples.add(new MetricFamilySamples.Sample(fullname + "_count", labelNames, c.getKey(), v.count));
406406
samples.add(new MetricFamilySamples.Sample(fullname + "_sum", labelNames, c.getKey(), v.sum));
407-
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), v.created / 1000.0));
407+
if (getUseCreated()) {
408+
samples.add(new MetricFamilySamples.Sample(fullname + "_created", labelNames, c.getKey(), v.created / 1000.0));
409+
}
408410
}
409411

410412
return familySamplesList(Type.SUMMARY, samples);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package io.prometheus.client;
2+
3+
import org.junit.Assert;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
7+
8+
import java.util.Collections;
9+
import java.util.List;
10+
11+
public class DisableCreatedTest {
12+
13+
private CollectorRegistry registry;
14+
15+
@Before
16+
public void setUp() {
17+
registry = new CollectorRegistry(true);
18+
}
19+
20+
@Test
21+
public void testDisableCreatedAll() {
22+
EnvironmentVariables env = new EnvironmentVariables(Collector.DISABLE_CREATED_SERIES, "true");
23+
Counter counter1 = Counter.build()
24+
.name("counter1")
25+
.help("test counter 1")
26+
.labelNames("path")
27+
.register(registry);
28+
counter1.labels("/hello").inc();
29+
counter1.labels("/goodbye").inc();
30+
Counter counter2 = Counter.build()
31+
.name("counter2")
32+
.help("test counter 2")
33+
.register(registry);
34+
counter2.inc();
35+
36+
Histogram histogram = Histogram.build()
37+
.name("test_histogram")
38+
.help("test histogram")
39+
.create();
40+
histogram.observe(100);
41+
histogram.observe(200);
42+
registry.register(histogram);
43+
44+
Summary noLabels = Summary.build().name("test_summary").help("test summary").register(registry);
45+
noLabels.observe(2);
46+
47+
List<Collector.MetricFamilySamples> mfsList;
48+
try {
49+
env.setup();
50+
mfsList = Collections.list(registry.metricFamilySamples());
51+
String extracted = System.getenv(Collector.DISABLE_CREATED_SERIES);
52+
Assert.assertEquals("Env isn't set", "true", extracted);
53+
env.teardown();
54+
} catch (Exception e) {
55+
throw new RuntimeException(e);
56+
}
57+
assertSamplesInclude(mfsList, "counter1_total", 2);
58+
assertSamplesInclude(mfsList, "counter1_created", 0);
59+
assertSamplesInclude(mfsList, "counter2_total", 1);
60+
assertSamplesInclude(mfsList, "counter2_created", 0);
61+
assertSamplesInclude(mfsList, "test_histogram_bucket", 15);
62+
assertSamplesInclude(mfsList, "test_histogram_count", 1);
63+
assertSamplesInclude(mfsList, "test_histogram_sum", 1);
64+
assertSamplesInclude(mfsList, "test_histogram_created", 0);
65+
assertSamplesInclude(mfsList, "test_summary_count", 1);
66+
assertSamplesInclude(mfsList, "test_summary_sum", 1);
67+
assertSamplesInclude(mfsList, "test_summary_created", 0);
68+
assertTotalNumberOfSamples(mfsList, 22);
69+
}
70+
71+
private void assertSamplesInclude(List<Collector.MetricFamilySamples> mfsList, String name, int times) {
72+
int count = 0;
73+
for (Collector.MetricFamilySamples mfs : mfsList) {
74+
for (Collector.MetricFamilySamples.Sample sample : mfs.samples) {
75+
if (sample.name.equals(name)) {
76+
count++;
77+
}
78+
}
79+
}
80+
Assert.assertEquals("Wrong number of samples for " + name, times, count);
81+
}
82+
83+
private void assertTotalNumberOfSamples(List<Collector.MetricFamilySamples> mfsList, int n) {
84+
int count = 0;
85+
for (Collector.MetricFamilySamples mfs : mfsList) {
86+
count += mfs.samples.size();
87+
}
88+
Assert.assertEquals("Wrong total number of samples", n, count);
89+
}
90+
}

0 commit comments

Comments
 (0)