Rendering: Add metrics (#23827)
* Rendering: base metrics * Rendering: rendering_queue_size metric * Chore: fix linter error * Rendering metrics: refactoring * Apply suggestions from code review Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com> * Rendering metrics: handle DeadlineExceeded errors * Rendering metrics: don't measure canceled request time * Rendering metrics: revert deleting summary for canceled requests * Update pkg/services/rendering/rendering.go Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com> * Rendering: return ErrTimeout if context deadline exceeded Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
co-authored by
Marcus Efraimsson
parent
830e8dc5fd
commit
fa710a3172
@@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/metrics"
|
||||
"github.com/grafana/grafana/pkg/infra/remotecache"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
@@ -130,6 +131,23 @@ func (rs *RenderingService) renderUnavailableImage() *RenderResult {
|
||||
}
|
||||
|
||||
func (rs *RenderingService) Render(ctx context.Context, opts Opts) (*RenderResult, error) {
|
||||
startTime := time.Now()
|
||||
result, err := rs.render(ctx, opts)
|
||||
elapsedTime := time.Since(startTime).Milliseconds()
|
||||
if err == ErrTimeout {
|
||||
metrics.MRenderingRequestTotal.WithLabelValues("timeout").Inc()
|
||||
metrics.MRenderingSummary.WithLabelValues("timeout").Observe(float64(elapsedTime))
|
||||
} else if err != nil {
|
||||
metrics.MRenderingRequestTotal.WithLabelValues("failure").Inc()
|
||||
metrics.MRenderingSummary.WithLabelValues("failure").Observe(float64(elapsedTime))
|
||||
} else {
|
||||
metrics.MRenderingRequestTotal.WithLabelValues("success").Inc()
|
||||
metrics.MRenderingSummary.WithLabelValues("success").Observe(float64(elapsedTime))
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (rs *RenderingService) render(ctx context.Context, opts Opts) (*RenderResult, error) {
|
||||
if rs.inProgressCount > opts.ConcurrentLimit {
|
||||
return &RenderResult{
|
||||
FilePath: filepath.Join(setting.HomePath, "public/img/rendering_limit.png"),
|
||||
@@ -156,9 +174,11 @@ func (rs *RenderingService) Render(ctx context.Context, opts Opts) (*RenderResul
|
||||
|
||||
defer func() {
|
||||
rs.inProgressCount--
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
}()
|
||||
|
||||
rs.inProgressCount++
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
return rs.renderAction(ctx, renderKey, opts)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user