@SuppressWarnings("unchecked") @Override protected <T> io.micrometer.core.instrument.Gauge newGauge(Meter.Id id, T obj, ToDoubleFunction<T> f) { final WeakReference<T> ref = new WeakReference<>(obj); io.prometheus.client.Gauge gauge = collectorByName(Gauge.class, id.getConventionName(), i -> buildCollector(id, io.prometheus.client.Gauge.build())); String[] labelValues = id.getConventionTags().stream() .map(Tag::getValue) .collect(Collectors.toList()) .toArray(new String[]{}); Gauge.Child child = new Gauge.Child() { @Override public double get() { final T obj2 = ref.get(); return (obj2 == null) ? Double.NaN : f.applyAsDouble(obj2); } }; gauge.setChild(child, labelValues); return new PrometheusGauge(id, child); }
@SuppressWarnings("unchecked") @Override public <T> T gauge(String name, Iterable<Tag> tags, T obj, ToDoubleFunction<T> f) { final WeakReference<T> ref = new WeakReference<>(obj); MeterId id = new MeterId(name, tags); io.prometheus.client.Gauge gauge = collectorByName(Gauge.class, name, i -> buildCollector(id, io.prometheus.client.Gauge.build())); computeIfAbsent(meterMap, id, g -> { String[] labelValues = id.getTags().stream() .map(Tag::getValue) .collect(Collectors.toList()) .toArray(new String[]{}); Gauge.Child child = new Gauge.Child() { @Override public double get() { final T obj = ref.get(); return (obj == null) ? Double.NaN : f.applyAsDouble(obj); } }; gauge.setChild(child, labelValues); return new PrometheusGauge(id, child); }); return obj; }
.setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() {
.setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() { .setChild(new Gauge.Child() { @Override public double get() {