@@ -12,7 +12,8 @@ use crate::{
12
12
pub struct Metrics {
13
13
pub users_created : IntCounterVec ,
14
14
pub users_deactivated : IntCounterVec ,
15
- pub failures : IntCounterVec ,
15
+ pub reconcile_failures : IntCounterVec ,
16
+ pub metrics_failures : IntCounterVec ,
16
17
pub dcu : IntCounterVec ,
17
18
}
18
19
@@ -36,7 +37,7 @@ impl Default for Metrics {
36
37
)
37
38
. unwrap ( ) ;
38
39
39
- let failures = IntCounterVec :: new (
40
+ let reconcile_failures = IntCounterVec :: new (
40
41
opts ! (
41
42
"crd_controller_reconciliation_errors_total" ,
42
43
"reconciliation errors" ,
@@ -45,6 +46,15 @@ impl Default for Metrics {
45
46
)
46
47
. unwrap ( ) ;
47
48
49
+ let metrics_failures = IntCounterVec :: new (
50
+ opts ! (
51
+ "metrics_controller_errors_total" ,
52
+ "errors to calculation metrics" ,
53
+ ) ,
54
+ & [ "error" ] ,
55
+ )
56
+ . unwrap ( ) ;
57
+
48
58
let dcu = IntCounterVec :: new (
49
59
opts ! ( "dmtr_consumed_dcus" , "quantity of dcu consumed" , ) ,
50
60
& [ "project" , "service" , "service_type" , "tenancy" ] ,
@@ -54,27 +64,34 @@ impl Default for Metrics {
54
64
Metrics {
55
65
users_created,
56
66
users_deactivated,
57
- failures,
67
+ reconcile_failures,
68
+ metrics_failures,
58
69
dcu,
59
70
}
60
71
}
61
72
}
62
73
63
74
impl Metrics {
64
75
pub fn register ( self , registry : & Registry ) -> Result < Self , prometheus:: Error > {
65
- registry. register ( Box :: new ( self . failures . clone ( ) ) ) ?;
76
+ registry. register ( Box :: new ( self . reconcile_failures . clone ( ) ) ) ?;
66
77
registry. register ( Box :: new ( self . users_created . clone ( ) ) ) ?;
67
78
registry. register ( Box :: new ( self . users_deactivated . clone ( ) ) ) ?;
68
79
registry. register ( Box :: new ( self . dcu . clone ( ) ) ) ?;
69
80
Ok ( self )
70
81
}
71
82
72
83
pub fn reconcile_failure ( & self , crd : & DbSyncPort , e : & Error ) {
73
- self . failures
84
+ self . reconcile_failures
74
85
. with_label_values ( & [ crd. name_any ( ) . as_ref ( ) , e. metric_label ( ) . as_ref ( ) ] )
75
86
. inc ( )
76
87
}
77
88
89
+ pub fn metrics_failure ( & self , e : & Error ) {
90
+ self . metrics_failures
91
+ . with_label_values ( & [ e. metric_label ( ) . as_ref ( ) ] )
92
+ . inc ( )
93
+ }
94
+
78
95
pub fn count_user_created ( & self , username : & str ) {
79
96
self . users_created . with_label_values ( & [ username] ) . inc ( ) ;
80
97
}
@@ -124,13 +141,15 @@ pub async fn run_metrics_collector(state: Arc<State>, config: Config) -> Result<
124
141
let postgres_result = Postgres :: new ( url) . await ;
125
142
if let Err ( err) = postgres_result {
126
143
error ! ( "Error to connect postgres: {err}" ) ;
144
+ state. metrics . metrics_failure ( & err) ;
127
145
continue ;
128
146
}
129
147
let postgres = postgres_result. unwrap ( ) ;
130
148
131
149
let user_statements_result = postgres. user_metrics ( ) . await ;
132
150
if let Err ( err) = user_statements_result {
133
151
error ! ( "Error get user statements: {err}" ) ;
152
+ state. metrics . metrics_failure ( & err) ;
134
153
continue ;
135
154
}
136
155
0 commit comments