ObservableCounter<T>
Represents a metrics-observable instrument that reports monotonically increasing values when the instrument is being observed, for example, CPU time (for different processes, threads, user mode, or kernel mode). Call CreateObservableCounter to create the observable counter object.
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace System.Diagnostics.Metrics
{
public sealed class ObservableCounter<T> : ObservableInstrument<T> where T : struct
{
private readonly object _callback;
internal ObservableCounter(Meter meter, string name, Func<T> observeValue, string unit, string description)
: this(meter, name, observeValue, unit, description, (IEnumerable<KeyValuePair<string, object>>)null)
{
}
internal ObservableCounter(Meter meter, string name, Func<T> observeValue, string unit, string description, IEnumerable<KeyValuePair<string, object>> tags)
: base(meter, name, unit, description, tags)
{
if (observeValue == null)
throw new ArgumentNullException("observeValue");
_callback = observeValue;
Publish();
}
internal ObservableCounter(Meter meter, string name, Func<Measurement<T>> observeValue, string unit, string description)
: this(meter, name, observeValue, unit, description, (IEnumerable<KeyValuePair<string, object>>)null)
{
}
internal ObservableCounter(Meter meter, string name, Func<Measurement<T>> observeValue, string unit, string description, IEnumerable<KeyValuePair<string, object>> tags)
: base(meter, name, unit, description, tags)
{
if (observeValue == null)
throw new ArgumentNullException("observeValue");
_callback = observeValue;
Publish();
}
internal ObservableCounter(Meter meter, string name, Func<IEnumerable<Measurement<T>>> observeValues, string unit, string description)
: this(meter, name, observeValues, unit, description, (IEnumerable<KeyValuePair<string, object>>)null)
{
}
internal ObservableCounter(Meter meter, string name, Func<IEnumerable<Measurement<T>>> observeValues, string unit, string description, IEnumerable<KeyValuePair<string, object>> tags)
: base(meter, name, unit, description, tags)
{
if (observeValues == null)
throw new ArgumentNullException("observeValues");
_callback = observeValues;
Publish();
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
0
})]
protected override IEnumerable<Measurement<T>> Observe()
{
return ObservableInstrument<T>.Observe(_callback);
}
}
}