func initAutoDeployMetrics()

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
}