98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
package pullrequest
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
var (
|
|
pullRequestMetricsOnce sync.Once
|
|
pullRequestMetricsInstance pullRequestMetrics
|
|
)
|
|
|
|
type pullRequestMetrics struct {
|
|
registry prometheus.Registerer
|
|
processingDuration *prometheus.HistogramVec
|
|
commentsPosted *prometheus.CounterVec
|
|
}
|
|
|
|
func registerPullRequestMetrics(registry prometheus.Registerer) pullRequestMetrics {
|
|
// called by both ProvidePullRequestWorker and ProvideWebhooksWithImages
|
|
// this ensures we only register the metric once
|
|
pullRequestMetricsOnce.Do(func() {
|
|
processingDuration := prometheus.NewHistogramVec(
|
|
prometheus.HistogramOpts{
|
|
Name: "grafana_provisioning_pullrequest_processing_duration_seconds",
|
|
Help: "Duration of pull request processing",
|
|
Buckets: []float64{0.5, 1.0, 2.0, 5.0, 10.0, 30.0},
|
|
},
|
|
[]string{"outcome"},
|
|
)
|
|
registry.MustRegister(processingDuration)
|
|
|
|
commentsPosted := prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "grafana_provisioning_pullrequest_comments_posted_total",
|
|
Help: "Total number of comments posted to pull requests",
|
|
},
|
|
[]string{"outcome"},
|
|
)
|
|
registry.MustRegister(commentsPosted)
|
|
|
|
pullRequestMetricsInstance = pullRequestMetrics{
|
|
registry: registry,
|
|
processingDuration: processingDuration,
|
|
commentsPosted: commentsPosted,
|
|
}
|
|
})
|
|
|
|
return pullRequestMetricsInstance
|
|
}
|
|
|
|
func (m *pullRequestMetrics) recordProcessed(outcome string, duration time.Duration) {
|
|
m.processingDuration.WithLabelValues(outcome).Observe(duration.Seconds())
|
|
}
|
|
|
|
func (m *pullRequestMetrics) recordCommentPosted(outcome string) {
|
|
m.commentsPosted.WithLabelValues(outcome).Inc()
|
|
}
|
|
|
|
type screenshotMetrics struct {
|
|
registry prometheus.Registerer
|
|
screenshotDuration *prometheus.HistogramVec
|
|
}
|
|
|
|
var (
|
|
screenshotMetricsOnce sync.Once
|
|
screenshotMetricsInstance screenshotMetrics
|
|
)
|
|
|
|
func registerScreenshotMetrics(registry prometheus.Registerer) screenshotMetrics {
|
|
// called by both ProvidePullRequestWorker and ProvideWebhooksWithImages
|
|
// this ensures we only register the metric once
|
|
screenshotMetricsOnce.Do(func() {
|
|
screenshotDuration := prometheus.NewHistogramVec(
|
|
prometheus.HistogramOpts{
|
|
Name: "grafana_provisioning_pullrequest_screenshot_duration_seconds",
|
|
Help: "Duration of screenshot generation",
|
|
Buckets: []float64{1.0, 2.0, 5.0, 10.0, 30.0, 60.0},
|
|
},
|
|
[]string{"outcome"},
|
|
)
|
|
registry.MustRegister(screenshotDuration)
|
|
|
|
screenshotMetricsInstance = screenshotMetrics{
|
|
registry: registry,
|
|
screenshotDuration: screenshotDuration,
|
|
}
|
|
})
|
|
|
|
return screenshotMetricsInstance
|
|
}
|
|
|
|
func (m *screenshotMetrics) recordScreenshotDuration(outcome string, duration time.Duration) {
|
|
m.screenshotDuration.WithLabelValues(outcome).Observe(duration.Seconds())
|
|
}
|