package internal import ( "fmt" "github.com/prometheus/client_golang/prometheus" "edge-infra.dev/pkg/k8s/runtime/controller/metrics" ) type MetricsRecorder struct{} var ( // DatabaseUserSuccessMetric metric for total database user successes. DatabaseUserSuccessMetric prometheus.CounterVec = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_user_success"), Help: "Database User Success metrics for sequel", }, []string{"name", "type"}) // DatabasePingFailedMetric metric for total database ping failures. DatabasePingFailedMetric prometheus.CounterVec = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_ping_failed"), Help: "Database Ping failed metrics for sequel", }, []string{"instance", "error"}) // DatabaseRevokeSQLPermissionsFailedMetric metric for total database revoke sql permissions failures. DatabaseRevokeSQLPermissionsFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_revoke_sql_permissions_failed"), Help: "Database Revoke SQL Permissions failed metrics for sequel", }, []string{"instance", "user", "type", "error"}) // DatabaseRevokeSequencePermissionsFailedMetric metric for total database revoke sequence permissions failures. DatabaseRevokeSequencePermissionsFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_revoke_sequence_permissions_failed"), Help: "Database Revoke Sequence Permissions failed metrics for sequel", }, []string{"instance", "user", "type", "error"}) // DatabaseSetSQLPermissionsFailedMetric metric for total database set sql permissions failures. DatabaseSetSQLPermissionsFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_set_sql_permissions_failed"), Help: "Database Set SQL Permissions failed metrics for sequel", }, []string{"instance", "user", "type", "error"}) // DatabaseSetSequencePermissionsFailedMetric metric for total database set sequence permissions failures. DatabaseSetSequencePermissionsFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_set_sequence_permissions_failed"), Help: "Database Set Sequence Permissions failed metrics for sequel", }, []string{"instance", "user", "type", "error"}) // DatabaseBuiltInUserSecretDeletionFailedMetric metric for total failures for database builtin secret deletion failures. DatabaseBuiltInUserSecretDeletionFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_builtin_user_secret_deletion_failed"), Help: "Database Builtin User Secret Deletion failed metrics for sequel", }, []string{"instance", "user", "secret", "error"}) // DatabaseUserSpecValidationFailedMetric metric for total failures for database user spec validation failures. DatabaseUserSpecValidationFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_user_spec_validation_failed"), Help: "Database User Spec Validation failed metrics for sequel", }, []string{"instance", "user", "type", "error"}) // DatabaseUserDependencyMetric metric for total dependency for database user. DatabaseUserDependencyMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_user_dependency"), Help: "Database User Dependency not ready metrics for sequel", }, []string{"instance", "user", "type", "unready_dependencies", "ready_dependencies"}) // DatabaseUserExistsInDatabaseSQLFailedMetric metric for total user selection sql failures. DatabaseUserExistsInDatabaseSQLFailedMetric = *prometheus.NewCounterVec( prometheus.CounterOpts{ Name: metrics.Name("sequel", "database_user_exists_in_database_sql_failed"), Help: "Database User Exists In Database SQL failed metrics for sequel", }, []string{"instance", "user", "error"}) ) func NewMetricsRecorder() *MetricsRecorder { return &MetricsRecorder{} } func (m *MetricsRecorder) InitMetrics() { m.RecordDatabaseUserSuccess("", "") m.RecordDatabasePingFail("", "") m.RecordDatabaseRevokeSQLPermissionsFail("", "", "", "") m.RecordDatabaseSetSQLPermissionsFail("", "", "", "") m.RecordDatabaseBuiltInUserSecretDeletionFail("", "", "", "") m.RecordDatabaseUserSpecValidationFail("", "", "", "") m.RecordDatabaseUserExistsInDatabaseSQLFail("", "", "") m.RecordDatabaseSetSequencePermissionsFail("", "", "", "") m.RecordDatabaseRevokeSequencePermissionsFail("", "", "", "") } func (m MetricsRecorder) RecordDatabaseUserSuccess(name, databaseUserType string) { DatabaseUserSuccessMetric.WithLabelValues(name, databaseUserType).Inc() } func (m MetricsRecorder) RecordDatabasePingFail(instance, err string) { DatabasePingFailedMetric.WithLabelValues(instance, err).Inc() } func (m MetricsRecorder) RecordDatabaseRevokeSQLPermissionsFail(instance, user, _type, err string) { DatabaseRevokeSQLPermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc() } func (m MetricsRecorder) RecordDatabaseRevokeSequencePermissionsFail(instance, user, _type, err string) { DatabaseRevokeSequencePermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc() } func (m MetricsRecorder) RecordDatabaseSetSQLPermissionsFail(instance, user, _type, err string) { DatabaseSetSQLPermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc() } func (m MetricsRecorder) RecordDatabaseSetSequencePermissionsFail(instance, user, _type, err string) { DatabaseSetSequencePermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc() } func (m MetricsRecorder) RecordDatabaseBuiltInUserSecretDeletionFail(instance, user, secret, err string) { DatabaseBuiltInUserSecretDeletionFailedMetric.WithLabelValues(instance, user, secret, err).Inc() } func (m MetricsRecorder) RecordDatabaseUserSpecValidationFail(instance, user, _type, err string) { DatabaseUserSpecValidationFailedMetric.WithLabelValues(instance, user, _type, err).Inc() } func (m MetricsRecorder) RecordDatabaseUserExistsInDatabaseSQLFail(instance, user, err string) { DatabaseUserExistsInDatabaseSQLFailedMetric.WithLabelValues(instance, user, err).Inc() } func (m MetricsRecorder) RecordDatabaseUserDependencyNotReady(instance, user, _type string, unreadyDependencies, readyDependencies []string) { unready := "" ready := "" for i, dependency := range unreadyDependencies { switch { case i > 0: unready = fmt.Sprintf("%s, %s", unready, dependency) default: unready = dependency } } for i, dependency := range readyDependencies { switch { case i > 0: ready = fmt.Sprintf("%s, %s", ready, dependency) default: ready = dependency } } DatabaseUserDependencyMetric.WithLabelValues(instance, user, _type, unready, ready).Inc() }