in metrics/metrics.go [397:505]
func initAutoDeployMetrics(pluggables *[]handlers.Pluggable, logger *logrus.Logger, consulHost string, consulPort int) error {
subsystem := "auto_deploy"
roles := []string{"gstg-cny", "gprd-cny", "gstg", "gprd"}
pressureGauge, err := metrics.NewGaugeVec(
metrics.WithName("pressure"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp("Number of commits not yet deployed to an environment"),
metrics.WithLabel(labels.FromValues("role", roles)),
metrics.WithCartesianProductLabelReset(),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewGauge(pressureGauge))
pickCounter, err := metrics.NewCounterVec(
metrics.WithName("picks_total"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp("Number of merge requests picked into auto-deploy branch"),
metrics.WithLabel(labels.SuccessOrFailed("status")),
metrics.WithCartesianProductLabelReset(),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewCounter(pickCounter))
pipelineStatusCounter, err := metrics.NewCounterVec(
metrics.WithName("gitlab_pipeline_total"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp("Number of gitlab pipelines in a given status at the time of rollout"),
metrics.WithLabel(labels.PipelineStatus("status")),
metrics.WithCartesianProductLabelReset(),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewCounter(pipelineStatusCounter))
packageStatusGauge, err := metrics.NewGaugeVec(
metrics.WithName("package_state"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp(
"Tracks states of auto deploy packages'"),
metrics.WithLabel(labels.PackagerProjects("project_path")),
metrics.WithLabel(labels.FromValues("pkg_state", []string{"missing", "pending", "building", "ready", "failed"})),
metrics.WithLabel(labels.FullDeployVersion("version")),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewGauge(packageStatusGauge))
newPackageGauge, err := metrics.NewGaugeVec(
metrics.WithName("building_package_state"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp(
"Tracks new auto deploy packages (newer than what's on gstg-cny) being built"),
metrics.WithLabel(labels.FromValues("pkg_state", []string{"running", "success", "failed"})),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewGauge(newPackageGauge))
envStatuses := []string{"ready", "locked", "baking_time", "awaiting_promotion"}
envDeployState, err := metrics.NewGaugeVec(
metrics.WithName("environment_state"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp("Tracks deployment-related state of each environment"),
metrics.WithLabel(labels.FromValues("env_state", envStatuses)),
metrics.WithLabel(labels.Environment("target_env")),
metrics.WithLabel(labels.Stage("target_stage")),
metrics.WithConsulMemory(consulHost, consulPort, logger),
metrics.WithCartesianProductLabelReset(),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewGauge(envDeployState))
lockReasons := []string{"locked_deployment", "locked_deployment_failed", "locked_qa", "locked_qa_failed", "locked_post_deploy_migration", "locked_post_deploy_migration_failed"}
envLockState, err := metrics.NewGaugeVec(
metrics.WithName("lock_state"),
metrics.WithSubsystem(subsystem),
metrics.WithHelp("Tracks deployment lock states and lock reasons of each environment"),
metrics.WithLabel(labels.FromValues("lock_reason", lockReasons)),
metrics.WithLabel(labels.Environment("target_env")),
metrics.WithLabel(labels.Stage("target_stage")),
metrics.WithCartesianProductLabelReset(),
)
if err != nil {
return err
}
*pluggables = append(*pluggables, handlers.NewGauge(envLockState))
return nil
}