/// <summary> /// Adds a <see cref="MetricRegistryListener"/> to a collection of listeners that will be notified on /// metric creation.Listeners will be notified in the order in which they are added. /// <para /> /// The listener will be notified of all existing metrics when it first registers. /// </summary> /// <param name="listener"></param> public void AddListener(MetricRegistryListener listener) { handler.RegisterListener(listener); // TODO: Figure out how to notify listener of existing metrics efficiently foreach (KeyValuePair <MetricName, IMetric> entry in this._metrics) { MetricName name = entry.Key; IMetric metric = entry.Value; Type metricType = metric.GetType(); if (metricType.IsSubclassOf(typeof(Gauge))) { handler.onGaugeAdded(name, (Gauge)metric); } else if (metric is Counter) { handler.onCounterAdded(name, (Counter)metric); } else if (metric is Histogram) { handler.onHistogramAdded(name, (Histogram)metric); } else if (metric is Meter) { handler.onMeterAdded(name, (Meter)metric); } else if (metric is Timer) { handler.onTimerAdded(name, (Timer)metric); } else { continue; } } }
internal void RemoveListener(MetricRegistryListener listener) { onGaugeAdded -= listener.onGaugeAdded; onGaugeRemoved -= listener.onGaugeRemoved; onCounterAdded -= listener.onCounterAdded; onCounterRemoved -= listener.onCounterRemoved; onHistogramAdded -= listener.onHistogramAdded; onHistogramRemoved -= listener.onHistogramRemoved; onMeterAdded -= listener.onMeterAdded; onMeterRemoved -= listener.onMeterRemoved; onTimerAdded -= listener.onTimerAdded; onTimerRemoved -= listener.onTimerRemoved; }
/// <summary> /// Removes a <see cref="MetricRegistryListener"/> from this registry's collection of listeners. /// </summary> /// <param name="listener">the listener that will be removed</param> public void RemoveListener(MetricRegistryListener listener) { handler.RemoveListener(listener); }