github.com/nilium/gitlab-runner@v12.5.0+incompatible/helpers/prometheus/failures_collector.go (about)

     1  package prometheus
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/prometheus/client_golang/prometheus"
     7  
     8  	"gitlab.com/gitlab-org/gitlab-runner/common"
     9  )
    10  
    11  var numJobFailuresDesc = prometheus.NewDesc(
    12  	"gitlab_runner_failed_jobs_total",
    13  	"Total number of failed jobs",
    14  	[]string{"runner", "failure_reason"},
    15  	nil,
    16  )
    17  
    18  type failurePermutation struct {
    19  	runnerDescription string
    20  	reason            common.JobFailureReason
    21  }
    22  
    23  type FailuresCollector struct {
    24  	lock sync.RWMutex
    25  
    26  	failures map[failurePermutation]int64
    27  }
    28  
    29  func (fc *FailuresCollector) RecordFailure(reason common.JobFailureReason, runnerDescription string) {
    30  	failure := failurePermutation{
    31  		runnerDescription: runnerDescription,
    32  		reason:            reason,
    33  	}
    34  
    35  	fc.lock.Lock()
    36  	defer fc.lock.Unlock()
    37  
    38  	if _, ok := fc.failures[failure]; ok {
    39  		fc.failures[failure]++
    40  	} else {
    41  		fc.failures[failure] = 1
    42  	}
    43  }
    44  
    45  func (fc *FailuresCollector) Describe(ch chan<- *prometheus.Desc) {
    46  	ch <- numJobFailuresDesc
    47  }
    48  
    49  func (fc *FailuresCollector) Collect(ch chan<- prometheus.Metric) {
    50  	fc.lock.RLock()
    51  	defer fc.lock.RUnlock()
    52  
    53  	for failure, number := range fc.failures {
    54  		ch <- prometheus.MustNewConstMetric(
    55  			numJobFailuresDesc,
    56  			prometheus.CounterValue,
    57  			float64(number),
    58  			failure.runnerDescription,
    59  			string(failure.reason),
    60  		)
    61  	}
    62  }
    63  
    64  func NewFailuresCollector() *FailuresCollector {
    65  	return &FailuresCollector{
    66  		failures: make(map[failurePermutation]int64),
    67  	}
    68  }