...
Code Block | ||||
---|---|---|---|---|
| ||||
public class MetricSample : BaseDevice<MetricSampleConfiguration>
{
private IHistogram m_SendDurationHistogram; // measure the time taken to send the payload
public override void Start()
{
// make sure you call InitializeMetrics
InitializeMetrics();
}
protected override void InitializeMetrics()
{
// construct your metrics here
m_SendDurationHistogram = GetOrCreateHistogram("MyDevice.send_duration_in_s", // name of your metric. See notes about X.y syntax
"The duration (in seconds) to send to the foo service", // description
new HistogramConfiguration // configuration
{
LabelNames = new[] { "Group", "Tab", "Channel", "ChannelKey" }, // associate this metric with the owner channel
Buckets = new double[] { 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10 } // buckets (in seconds)
}).WithLabels(MessageChannel.GroupName, MessageChannel.TabName, MessageChannel.ChannelName, MessageChannel.ChannelKeyString);
}
public override Task ProcessMessageAsync(IMessageContext context, CancellationToken cancellationToken)
{
// ...your code
using (m_SendDurationHistogram.NewTimer()) // the Histogram.NewTimer() method is used to measure the wrapped methods duration.
{
await SendToFooServiceAsync(...).ConfigureAwait(false);
}
// ... your code
}
} |
...