Skip to content

Commit

Permalink
Cleanup registration of Prometheus metrics (by unregistering on close…
Browse files Browse the repository at this point in the history
…()).
  • Loading branch information
brettwooldridge committed Dec 18, 2016
1 parent 14b11c0 commit 5c1bbe6
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 17 deletions.
Expand Up @@ -44,11 +44,11 @@ public List<MetricFamilySamples> collect() {
);
}

private MetricFamilySamples createSample(String name, String helpMessage, double value) {
List<MetricFamilySamples.Sample> samples = Collections.singletonList(new MetricFamilySamples.Sample(name,
labelNames,
labelValues,
value));
private MetricFamilySamples createSample(String name, String helpMessage, double value)
{
List<MetricFamilySamples.Sample> samples = Collections.singletonList(
new MetricFamilySamples.Sample(name, labelNames, labelValues, value)
);

return new MetricFamilySamples(name, Type.GAUGE, helpMessage, samples);
}
Expand Down
Expand Up @@ -17,6 +17,9 @@
package com.zaxxer.hikari.metrics.prometheus;

import com.zaxxer.hikari.metrics.MetricsTracker;

import io.prometheus.client.Collector;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import io.prometheus.client.Summary;

Expand All @@ -27,38 +30,54 @@ class PrometheusMetricsTracker extends MetricsTracker
private final Summary.Child elapsedBorrowedSummary;
private final Summary.Child elapsedCreationSummary;

PrometheusMetricsTracker(String poolName)
private final Counter ctCounter;
private final Summary eaSummary;
private final Summary ebSummary;
private final Summary ecSummary;
private final Collector collector;

PrometheusMetricsTracker(String poolName, Collector collector)
{
super();
this.collector = collector;

Counter counter = Counter.build()
ctCounter = Counter.build()
.name("hikaricp_connection_timeout_count")
.labelNames("pool")
.help("Connection timeout count")
.register();

this.connectionTimeoutCounter = counter.labels(poolName);
this.connectionTimeoutCounter = ctCounter.labels(poolName);

Summary elapsedAcquiredSummary = Summary.build()
eaSummary = Summary.build()
.name("hikaricp_connection_acquired_nanos")
.labelNames("pool")
.help("Connection acquired time (ns)")
.register();
this.elapsedAcquiredSummary = elapsedAcquiredSummary.labels(poolName);
this.elapsedAcquiredSummary = eaSummary.labels(poolName);

Summary elapsedBorrowedSummary = Summary.build()
ebSummary = Summary.build()
.name("hikaricp_connection_usage_millis")
.labelNames("pool")
.help("Connection usage (ms)")
.register();
this.elapsedBorrowedSummary = elapsedBorrowedSummary.labels(poolName);
this.elapsedBorrowedSummary = ebSummary.labels(poolName);

Summary elapsedCreationSummary = Summary.build()
ecSummary = Summary.build()
.name("hikaricp_connection_creation_millis")
.labelNames("pool")
.help("Connection creation (ms)")
.register();
this.elapsedCreationSummary = elapsedCreationSummary.labels(poolName);
this.elapsedCreationSummary = ecSummary.labels(poolName);
}

@Override
public void close()
{
CollectorRegistry.defaultRegistry.unregister(ctCounter);
CollectorRegistry.defaultRegistry.unregister(eaSummary);
CollectorRegistry.defaultRegistry.unregister(ebSummary);
CollectorRegistry.defaultRegistry.unregister(ecSummary);
CollectorRegistry.defaultRegistry.unregister(collector);
}

@Override
Expand Down
Expand Up @@ -20,6 +20,8 @@
import com.zaxxer.hikari.metrics.MetricsTrackerFactory;
import com.zaxxer.hikari.metrics.PoolStats;

import io.prometheus.client.Collector;

/**
* <pre>{@code
* HikariConfig config = new HikariConfig();
Expand All @@ -29,7 +31,7 @@
public class PrometheusMetricsTrackerFactory implements MetricsTrackerFactory {
@Override
public MetricsTracker create(String poolName, PoolStats poolStats) {
new HikariCPCollector(poolName, poolStats).register();
return new PrometheusMetricsTracker(poolName);
Collector collector = new HikariCPCollector(poolName, poolStats).register();
return new PrometheusMetricsTracker(poolName, collector);
}
}

0 comments on commit 5c1bbe6

Please sign in to comment.