| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package executor
- import (
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/client_golang/prometheus/promauto"
- )
- const (
- executionResultSuccess = "success"
- executionResultFailed = "failed"
- executionResultBlocked = "blocked"
- executionResultTimeout = "timeout"
- executionResultError = "error"
- )
- var (
- metricActionsRequested = promauto.NewCounter(prometheus.CounterOpts{
- Name: "olivetin_actions_requested_count",
- Help: "The actions requested count",
- })
- metricActionExecutionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
- Name: "olivetin_action_executions_total",
- Help: "Total number of finished action executions grouped by result.",
- }, []string{"result"})
- metricActionExecutionDuration = promauto.NewHistogram(prometheus.HistogramOpts{
- Name: "olivetin_action_execution_duration_seconds",
- Help: "Action execution duration in seconds from start to finish.",
- Buckets: []float64{0.1, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 600},
- })
- executionResultLabels = []string{
- executionResultSuccess,
- executionResultFailed,
- executionResultBlocked,
- executionResultTimeout,
- executionResultError,
- }
- )
- func init() {
- for _, result := range executionResultLabels {
- metricActionExecutionsTotal.WithLabelValues(result)
- }
- }
- func executionResultLabel(entry *InternalLogEntry) string {
- if entry.Blocked {
- return executionResultBlocked
- }
- return finishedExecutionResultLabel(entry)
- }
- func finishedExecutionResultLabel(entry *InternalLogEntry) string {
- if entry.TimedOut {
- return executionResultTimeout
- }
- switch {
- case entry.ExitCode == 0:
- return executionResultSuccess
- case isPreExecutionError(entry):
- return executionResultError
- default:
- return executionResultFailed
- }
- }
- func isPreExecutionError(entry *InternalLogEntry) bool {
- return entry.ExitCode == DefaultExitCodeNotExecuted || !entry.ExecutionStarted
- }
- func recordExecutionMetrics(entry *InternalLogEntry) {
- if entry == nil || entry.Queued {
- return
- }
- metricActionExecutionsTotal.WithLabelValues(executionResultLabel(entry)).Inc()
- recordExecutionDuration(entry)
- }
- func recordExecutionDuration(entry *InternalLogEntry) {
- if entry.DatetimeFinished.IsZero() || entry.DatetimeStarted.IsZero() {
- return
- }
- duration := entry.DatetimeFinished.Sub(entry.DatetimeStarted).Seconds()
- if duration < 0 {
- return
- }
- metricActionExecutionDuration.Observe(duration)
- }
|