package com.soundcloud.prometheus.hystrix;

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Gauge;

import java.util.concurrent.ConcurrentHashMap;

public class GaugeRegistry {

    private final ConcurrentHashMap<String, Gauge> gauges = new ConcurrentHashMap<String, Gauge>();

    private final CollectorRegistry registry;
    private final String namespace;

    public GaugeRegistry(CollectorRegistry registry, String namespace) {
        this.namespace = namespace;
        this.registry = registry;
    }

    /**
     * Register a Gauge for the given subsystem and metric, and return the metricName to be used to lookup the Gauge.
     *
     * @see #getGauge(String)
     */
    public String registerGauge(String subsystem, String metric, String documentation, String... labelNames) {
        String metricName = subsystem + ":" + metric;
        Gauge gauge = Gauge.build()
                .namespace(namespace)
                .subsystem(subsystem)
                .name(metric)
                .help(documentation)
                .labelNames(labelNames)
                .create();
        Gauge existing = gauges.putIfAbsent(metricName, gauge);
        if (existing == null) {
            registry.register(gauge);
        }
        return metricName;
    }

    /**
     * Returns a Gauge for the given metricName.
     *
     * @see #registerGauge(String, String, String, String...)
     */
    public Gauge getGauge(String metricName) {
        return gauges.get(metricName);
    }
}

@@ -1,8 +1,577 @@
+/**%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A * %3Cp/%3E%0A * http://www.apache.org/licenses/LICENSE-2.0%0A * %3Cp/%3E%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0A
 package 

add license