GaugeMetricsRegistrator.java

package com.github.jonasrutishauser.transactional.event.quarkus.micrometer;


import java.util.Map;

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.quarkus.arc.Arc;
import jakarta.enterprise.invoke.Invoker;

class GaugeMetricsRegistrator {

    private GaugeMetricsRegistrator() {
    }

    public static void register(Map<String, Object> params) {
        var builder = Gauge.builder((String) params.get("name"), (Invoker<?, ?>) params.get("invoker"), invoker -> {
            try {
                return ((Number) invoker.invoke(null, null)).doubleValue();
            } catch (Exception e) {
                throw new IllegalStateException("Failed to invoke gauge method", e);
            }
        }).description((String) params.get("description"));
        if (!"none".equals(params.get("unit"))) {
            builder = builder.baseUnit((String) params.get("unit"));
        }
        builder.strongReference(true).register(Arc.container().instance(MeterRegistry.class).get());
    }

}