Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion internal/job/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,10 @@ func StartBuildLoop(deviceRepo router.DevicesRepository, reports *report.Reposit
reports.Watch(reportCh)
}()

// Start the build
reports.UpdateStatus(report.InProgress)
if devs, stats, err := RunBuild(reportCh); err != nil {
devs, stats, err := RunBuild(reportCh)
if err != nil {
metricsRegistry.BuildFailed()

reports.UpdateStatus(report.Failed)
Expand All @@ -178,6 +180,11 @@ func StartBuildLoop(deviceRepo router.DevicesRepository, reports *report.Reposit
log.Info().Msg("build successful")
}

metricsRegistry.SetBuildDataFetchingDuration(stats.Performance.DataFetchingDuration.Seconds())
metricsRegistry.SetBuildPrecomputeDuration(stats.Performance.PrecomputeDuration.Seconds())
metricsRegistry.SetBuildComputeDuration(stats.Performance.ComputeDuration.Seconds())
metricsRegistry.SetBuildTotalDuration(stats.Performance.BuildDuration.Seconds())

reports.MarkAsComplete()
close(reportCh)
wg.Wait()
Expand Down
70 changes: 58 additions & 12 deletions internal/metrics/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@ import (
)

type Registry struct {
AppInfo *prometheus.GaugeVec
BuiltDevicesNumber *prometheus.GaugeVec
lastBuildStatus *prometheus.GaugeVec
appInfo *prometheus.GaugeVec
buildTotal *prometheus.CounterVec
BuiltDevicesNumber prometheus.Gauge
lastBuildStatus prometheus.Gauge

buildTotalDuration prometheus.Gauge
buildDataFetchingDuration prometheus.Gauge
buildPrecomputeDuration prometheus.Gauge
buildComputeDuration prometheus.Gauge
}

func NewRegistry() Registry {
Expand All @@ -24,30 +29,51 @@ func NewRegistry() Registry {
appInfo.WithLabelValues(app.Info.Version, app.Info.Commit, app.Info.BuildTime, app.Info.BuildUser).Set(1)

return Registry{
AppInfo: appInfo,
BuiltDevicesNumber: promauto.NewGaugeVec(
appInfo: appInfo,
BuiltDevicesNumber: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "built_devices_number",
Help: "Number of devices built during last successful build",
},
[]string{},
),

lastBuildStatus: promauto.NewGaugeVec(
lastBuildStatus: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "build_status",
Help: "Last completed build status, 0=Failed, 1=Success",
},
[]string{},
),

buildTotal: promauto.NewCounterVec(
prometheus.CounterOpts{
Name: "completed_build_total",
Help: "Total number of completed build",
},
[]string{"success"},
),
buildTotalDuration: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "build_total_duration_seconds",
Help: "Total duration of the build",
},
),
buildDataFetchingDuration: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "build_data_fetching_duration_seconds",
Help: "Duration of the data fetching step",
},
),
buildPrecomputeDuration: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "build_precompute_duration_seconds",
Help: "Duration of the precompute step",
},
),
buildComputeDuration: promauto.NewGauge(
prometheus.GaugeOpts{
Name: "build_compute_duration_seconds",
Help: "Duration of the compute step",
},
),
}
}

Expand All @@ -56,7 +82,7 @@ func NewRegistry() Registry {
// `build_status` counter is set to 1.
// `completed_build_total` increases with success label set to true.
func (r *Registry) BuildSuccessful() {
r.lastBuildStatus.WithLabelValues().Set(1)
r.lastBuildStatus.Set(1)
r.buildTotal.WithLabelValues("true").Inc()
}

Expand All @@ -65,11 +91,31 @@ func (r *Registry) BuildSuccessful() {
// `build_status` counter is set to 0.
// `completed_build_total` increases with success label set to false.
func (r *Registry) BuildFailed() {
r.lastBuildStatus.WithLabelValues().Set(0)
r.lastBuildStatus.Set(0)
r.buildTotal.WithLabelValues("false").Inc()
}

// SetBuiltDevices updates the `built_devices` gauge.
func (r *Registry) SetBuiltDevices(count uint32) {
r.BuiltDevicesNumber.WithLabelValues().Set(float64(count))
r.BuiltDevicesNumber.Set(float64(count))
}

// SetBuildTotalDuration updates the `build_total_duration_seconds` gauge.
func (r *Registry) SetBuildTotalDuration(duration float64) {
r.buildTotalDuration.Set(duration)
}

// SetBuildDataFetchingDuration updates the `build_data_fetching_duration_seconds` gauge.
func (r *Registry) SetBuildDataFetchingDuration(duration float64) {
r.buildDataFetchingDuration.Set(duration)
}

// SetBuildPrecomputeDuration updates the `build_precompute_duration_seconds` gauge.
func (r *Registry) SetBuildPrecomputeDuration(duration float64) {
r.buildPrecomputeDuration.Set(duration)
}

// SetBuildComputeDuration updates the `build_compute_duration_seconds` gauge.
func (r *Registry) SetBuildComputeDuration(duration float64) {
r.buildComputeDuration.Set(duration)
}