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
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
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
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
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
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
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
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
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
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
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