feat(go): expose async sink publish latency histogram
This commit is contained in:
@@ -40,6 +40,8 @@ type asyncJob struct {
|
||||
|
||||
var ErrAsyncSinkClosed = errors.New("async sink is closed")
|
||||
|
||||
var asyncSinkPublishDurationBucketsMS = []float64{1, 5, 10, 25, 50, 100, 250, 500, 1000, 5000}
|
||||
|
||||
func NewAsyncSink(delegate Sink, cfg AsyncConfig) *AsyncSink {
|
||||
if delegate == nil {
|
||||
panic("async delegate sink must not be nil")
|
||||
@@ -169,7 +171,9 @@ func (s *AsyncSink) recordPublish(kind string, status string, elapsed time.Durat
|
||||
"status": status,
|
||||
}
|
||||
s.metrics.IncCounter("vehicle_async_sink_publish_total", labels)
|
||||
s.metrics.SetGauge("vehicle_async_sink_publish_duration_ms", labels, float64(elapsed.Milliseconds()))
|
||||
elapsedMS := float64(elapsed.Milliseconds())
|
||||
s.metrics.SetGauge("vehicle_async_sink_publish_duration_ms", labels, elapsedMS)
|
||||
s.metrics.ObserveHistogram("vehicle_async_sink_publish_duration_ms_histogram", labels, asyncSinkPublishDurationBucketsMS, elapsedMS)
|
||||
}
|
||||
|
||||
func (s *AsyncSink) recordQueueDepth() {
|
||||
|
||||
@@ -83,6 +83,9 @@ func TestAsyncSinkRecordsQueueMetrics(t *testing.T) {
|
||||
`vehicle_async_sink_queue_depth{sink="nats"}`,
|
||||
`vehicle_async_sink_publish_total{kind="raw",sink="nats",status="ok"} 1`,
|
||||
`vehicle_async_sink_publish_total{kind="fields",sink="nats",status="ok"} 1`,
|
||||
`vehicle_async_sink_publish_duration_ms_histogram_bucket{le="+Inf",kind="raw",sink="nats",status="ok"} 1`,
|
||||
`vehicle_async_sink_publish_duration_ms_histogram_count{kind="raw",sink="nats",status="ok"} 1`,
|
||||
`vehicle_async_sink_publish_duration_ms_histogram_sum{kind="raw",sink="nats",status="ok"}`,
|
||||
} {
|
||||
if !strings.Contains(text, want) {
|
||||
t.Fatalf("async sink metric missing %s:\n%s", want, text)
|
||||
|
||||
Reference in New Issue
Block a user