class MeterGaugeInterceptor extends BaseMeterInterceptor<MeterGauge, AtomicReference<Double>> {

    @Override
    protected MeterGauge getAnno(Invocation inv) {
        MeterGauge anno = inv.getMethodAnnotation(MeterGauge.class);
        if (anno == null) {
            anno = inv.getTargetAnnotation(MeterGauge.class);
        }

        return anno;
    }

    @Override
    protected String getAnnoName(MeterGauge anno) {
        return Utils.annoAlias(anno.value(), anno.name());
    }

    @Override
    protected Object metering(Invocation inv, MeterGauge anno) throws Throwable {<FILL_FUNCTION_BODY>}
}

        String meterName = getMeterName(inv, anno);
        AtomicReference<Double> meter = getMeter(meterName, () -> {
            AtomicReference<Double> numberReference = new AtomicReference<>();

            Gauge.builder(meterName, numberReference, AtomicReference<Double>::get)
                    .tags(getMeterTags(inv, anno.tags()))
                    .description(anno.description())
                    .register(Metrics.globalRegistry);

            return numberReference;
        });

        Object rst = inv.invoke();

        //计变数
        if (rst instanceof Number) {
            meter.set(((Number) rst).doubleValue());
        }

        return rst;
    
<methods>public non-sealed void <init>() ,public java.lang.Object doIntercept(org.noear.solon.core.aspect.Invocation) throws java.lang.Throwable<variables>private final Map<java.lang.String,AtomicReference<java.lang.Double>> meterCached