...

Source file src/edge-infra.dev/pkg/edge/controllers/sequel/internal/metrics.go

Documentation: edge-infra.dev/pkg/edge/controllers/sequel/internal

     1  package internal
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/prometheus/client_golang/prometheus"
     7  
     8  	"edge-infra.dev/pkg/k8s/runtime/controller/metrics"
     9  )
    10  
    11  type MetricsRecorder struct{}
    12  
    13  var (
    14  	// DatabaseUserSuccessMetric metric for total database user successes.
    15  	DatabaseUserSuccessMetric prometheus.CounterVec = *prometheus.NewCounterVec(
    16  		prometheus.CounterOpts{
    17  			Name: metrics.Name("sequel", "database_user_success"),
    18  			Help: "Database User Success metrics for sequel",
    19  		},
    20  		[]string{"name", "type"})
    21  
    22  	// DatabasePingFailedMetric metric for total database ping failures.
    23  	DatabasePingFailedMetric prometheus.CounterVec = *prometheus.NewCounterVec(
    24  		prometheus.CounterOpts{
    25  			Name: metrics.Name("sequel", "database_ping_failed"),
    26  			Help: "Database Ping failed metrics for sequel",
    27  		},
    28  		[]string{"instance", "error"})
    29  
    30  	// DatabaseRevokeSQLPermissionsFailedMetric metric for total database revoke sql permissions failures.
    31  	DatabaseRevokeSQLPermissionsFailedMetric = *prometheus.NewCounterVec(
    32  		prometheus.CounterOpts{
    33  			Name: metrics.Name("sequel", "database_revoke_sql_permissions_failed"),
    34  			Help: "Database Revoke SQL Permissions failed metrics for sequel",
    35  		},
    36  		[]string{"instance", "user", "type", "error"})
    37  
    38  	// DatabaseRevokeSequencePermissionsFailedMetric metric for total database revoke sequence permissions failures.
    39  	DatabaseRevokeSequencePermissionsFailedMetric = *prometheus.NewCounterVec(
    40  		prometheus.CounterOpts{
    41  			Name: metrics.Name("sequel", "database_revoke_sequence_permissions_failed"),
    42  			Help: "Database Revoke Sequence Permissions failed metrics for sequel",
    43  		},
    44  		[]string{"instance", "user", "type", "error"})
    45  
    46  	// DatabaseSetSQLPermissionsFailedMetric metric for total database set sql permissions failures.
    47  	DatabaseSetSQLPermissionsFailedMetric = *prometheus.NewCounterVec(
    48  		prometheus.CounterOpts{
    49  			Name: metrics.Name("sequel", "database_set_sql_permissions_failed"),
    50  			Help: "Database Set SQL Permissions failed metrics for sequel",
    51  		},
    52  		[]string{"instance", "user", "type", "error"})
    53  
    54  	// DatabaseSetSequencePermissionsFailedMetric metric for total database set sequence permissions failures.
    55  	DatabaseSetSequencePermissionsFailedMetric = *prometheus.NewCounterVec(
    56  		prometheus.CounterOpts{
    57  			Name: metrics.Name("sequel", "database_set_sequence_permissions_failed"),
    58  			Help: "Database Set Sequence Permissions failed metrics for sequel",
    59  		},
    60  		[]string{"instance", "user", "type", "error"})
    61  
    62  	// DatabaseBuiltInUserSecretDeletionFailedMetric metric for total failures for database builtin secret deletion failures.
    63  	DatabaseBuiltInUserSecretDeletionFailedMetric = *prometheus.NewCounterVec(
    64  		prometheus.CounterOpts{
    65  			Name: metrics.Name("sequel", "database_builtin_user_secret_deletion_failed"),
    66  			Help: "Database Builtin User Secret Deletion failed metrics for sequel",
    67  		},
    68  		[]string{"instance", "user", "secret", "error"})
    69  
    70  	// DatabaseUserSpecValidationFailedMetric metric for total failures for database user spec validation failures.
    71  	DatabaseUserSpecValidationFailedMetric = *prometheus.NewCounterVec(
    72  		prometheus.CounterOpts{
    73  			Name: metrics.Name("sequel", "database_user_spec_validation_failed"),
    74  			Help: "Database User Spec Validation failed metrics for sequel",
    75  		},
    76  		[]string{"instance", "user", "type", "error"})
    77  
    78  	// DatabaseUserDependencyMetric metric for total dependency for database user.
    79  	DatabaseUserDependencyMetric = *prometheus.NewCounterVec(
    80  		prometheus.CounterOpts{
    81  			Name: metrics.Name("sequel", "database_user_dependency"),
    82  			Help: "Database User Dependency not ready metrics for sequel",
    83  		},
    84  		[]string{"instance", "user", "type", "unready_dependencies", "ready_dependencies"})
    85  
    86  	// DatabaseUserExistsInDatabaseSQLFailedMetric metric for total user selection sql failures.
    87  	DatabaseUserExistsInDatabaseSQLFailedMetric = *prometheus.NewCounterVec(
    88  		prometheus.CounterOpts{
    89  			Name: metrics.Name("sequel", "database_user_exists_in_database_sql_failed"),
    90  			Help: "Database User Exists In Database SQL failed metrics for sequel",
    91  		},
    92  		[]string{"instance", "user", "error"})
    93  )
    94  
    95  func NewMetricsRecorder() *MetricsRecorder {
    96  	return &MetricsRecorder{}
    97  }
    98  
    99  func (m *MetricsRecorder) InitMetrics() {
   100  	m.RecordDatabaseUserSuccess("", "")
   101  	m.RecordDatabasePingFail("", "")
   102  	m.RecordDatabaseRevokeSQLPermissionsFail("", "", "", "")
   103  	m.RecordDatabaseSetSQLPermissionsFail("", "", "", "")
   104  	m.RecordDatabaseBuiltInUserSecretDeletionFail("", "", "", "")
   105  	m.RecordDatabaseUserSpecValidationFail("", "", "", "")
   106  	m.RecordDatabaseUserExistsInDatabaseSQLFail("", "", "")
   107  	m.RecordDatabaseSetSequencePermissionsFail("", "", "", "")
   108  	m.RecordDatabaseRevokeSequencePermissionsFail("", "", "", "")
   109  }
   110  
   111  func (m MetricsRecorder) RecordDatabaseUserSuccess(name, databaseUserType string) {
   112  	DatabaseUserSuccessMetric.WithLabelValues(name, databaseUserType).Inc()
   113  }
   114  
   115  func (m MetricsRecorder) RecordDatabasePingFail(instance, err string) {
   116  	DatabasePingFailedMetric.WithLabelValues(instance, err).Inc()
   117  }
   118  
   119  func (m MetricsRecorder) RecordDatabaseRevokeSQLPermissionsFail(instance, user, _type, err string) {
   120  	DatabaseRevokeSQLPermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc()
   121  }
   122  
   123  func (m MetricsRecorder) RecordDatabaseRevokeSequencePermissionsFail(instance, user, _type, err string) {
   124  	DatabaseRevokeSequencePermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc()
   125  }
   126  
   127  func (m MetricsRecorder) RecordDatabaseSetSQLPermissionsFail(instance, user, _type, err string) {
   128  	DatabaseSetSQLPermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc()
   129  }
   130  
   131  func (m MetricsRecorder) RecordDatabaseSetSequencePermissionsFail(instance, user, _type, err string) {
   132  	DatabaseSetSequencePermissionsFailedMetric.WithLabelValues(instance, user, _type, err).Inc()
   133  }
   134  
   135  func (m MetricsRecorder) RecordDatabaseBuiltInUserSecretDeletionFail(instance, user, secret, err string) {
   136  	DatabaseBuiltInUserSecretDeletionFailedMetric.WithLabelValues(instance, user, secret, err).Inc()
   137  }
   138  
   139  func (m MetricsRecorder) RecordDatabaseUserSpecValidationFail(instance, user, _type, err string) {
   140  	DatabaseUserSpecValidationFailedMetric.WithLabelValues(instance, user, _type, err).Inc()
   141  }
   142  
   143  func (m MetricsRecorder) RecordDatabaseUserExistsInDatabaseSQLFail(instance, user, err string) {
   144  	DatabaseUserExistsInDatabaseSQLFailedMetric.WithLabelValues(instance, user, err).Inc()
   145  }
   146  
   147  func (m MetricsRecorder) RecordDatabaseUserDependencyNotReady(instance, user, _type string, unreadyDependencies, readyDependencies []string) {
   148  	unready := ""
   149  	ready := ""
   150  	for i, dependency := range unreadyDependencies {
   151  		switch {
   152  		case i > 0:
   153  			unready = fmt.Sprintf("%s, %s", unready, dependency)
   154  		default:
   155  			unready = dependency
   156  		}
   157  	}
   158  	for i, dependency := range readyDependencies {
   159  		switch {
   160  		case i > 0:
   161  			ready = fmt.Sprintf("%s, %s", ready, dependency)
   162  		default:
   163  			ready = dependency
   164  		}
   165  	}
   166  	DatabaseUserDependencyMetric.WithLabelValues(instance, user, _type, unready, ready).Inc()
   167  }
   168  

View as plain text