@@ -14,20 +14,13 @@ use crate::{get_config, Config, Error, KupoPort, State};
1414
1515#[ derive( Clone ) ]
1616pub struct Metrics {
17- pub dcu : IntCounterVec ,
1817 pub usage : IntCounterVec ,
1918 pub reconcile_failures : IntCounterVec ,
2019 pub metrics_failures : IntCounterVec ,
2120}
2221
2322impl Default for Metrics {
2423 fn default ( ) -> Self {
25- let dcu = IntCounterVec :: new (
26- opts ! ( "dmtr_consumed_dcus" , "quantity of dcu consumed" , ) ,
27- & [ "project" , "service" , "service_type" , "tenancy" ] ,
28- )
29- . unwrap ( ) ;
30-
3124 let usage = IntCounterVec :: new (
3225 opts ! ( "usage" , "Feature usage" , ) ,
3326 & [ "feature" , "project" , "resource_name" , "tier" ] ,
@@ -53,7 +46,6 @@ impl Default for Metrics {
5346 . unwrap ( ) ;
5447
5548 Metrics {
56- dcu,
5749 usage,
5850 reconcile_failures,
5951 metrics_failures,
@@ -65,7 +57,6 @@ impl Metrics {
6557 pub fn register ( self , registry : & Registry ) -> Result < Self , prometheus:: Error > {
6658 registry. register ( Box :: new ( self . reconcile_failures . clone ( ) ) ) ?;
6759 registry. register ( Box :: new ( self . metrics_failures . clone ( ) ) ) ?;
68- registry. register ( Box :: new ( self . dcu . clone ( ) ) ) ?;
6960 registry. register ( Box :: new ( self . usage . clone ( ) ) ) ?;
7061
7162 Ok ( self )
@@ -83,18 +74,6 @@ impl Metrics {
8374 . inc ( )
8475 }
8576
86- pub fn count_dcu_consumed ( & self , project : & str , network : & str , dcu : f64 ) {
87- let service = format ! ( "{}-{}" , KupoPort :: kind( & ( ) ) , network) ;
88- let service_type = format ! ( "{}.{}" , KupoPort :: plural( & ( ) ) , KupoPort :: group( & ( ) ) ) ;
89- let tenancy = "proxy" ;
90-
91- let dcu: u64 = dcu. ceil ( ) as u64 ;
92-
93- self . dcu
94- . with_label_values ( & [ project, & service, & service_type, tenancy] )
95- . inc_by ( dcu) ;
96- }
97-
9877 pub fn count_usage ( & self , project : & str , resource_name : & str , tier : & str , value : f64 ) {
9978 let feature = & KupoPort :: kind ( & ( ) ) ;
10079 let value: u64 = value. ceil ( ) as u64 ;
@@ -248,24 +227,8 @@ pub fn run_metrics_collector(state: Arc<State>) {
248227 warn ! ( instance, "invalid network to the regex" ) ;
249228 continue ;
250229 }
251- let network_captures = network_captures. unwrap ( ) ;
252- let network = network_captures. get ( 1 ) . unwrap ( ) . as_str ( ) ;
253230 let tier = result. metric . tier . unwrap ( ) ;
254231
255- let dcu_per_request = config. dcu_per_request . get ( network) ;
256- if dcu_per_request. is_none ( ) {
257- let error = Error :: ConfigError ( format ! (
258- "dcu_per_request not configured to {} network" ,
259- network
260- ) ) ;
261- error ! ( error = error. to_string( ) ) ;
262- state. metrics . metrics_failure ( & error) ;
263- continue ;
264- }
265- let dcu_per_request = dcu_per_request. unwrap ( ) ;
266-
267- let dcu = result. value * dcu_per_request;
268- state. metrics . count_dcu_consumed ( project, network, dcu) ;
269232 state
270233 . metrics
271234 . count_usage ( project, resource_name, & tier, result. value ) ;
@@ -274,74 +237,6 @@ pub fn run_metrics_collector(state: Arc<State>) {
274237 } ) ;
275238}
276239
277- #[ instrument( "kong metrics collector run" , skip_all) ]
278- pub fn run_kong_metrics_collector ( state : Arc < State > ) {
279- tokio:: spawn ( async move {
280- info ! ( "collecting kong metrics running" ) ;
281-
282- let config = get_config ( ) ;
283- let regex = Regex :: new ( r"(.+)\.(\w+)-.+" ) . unwrap ( ) ;
284- let mut last_execution = Utc :: now ( ) ;
285-
286- loop {
287- tokio:: time:: sleep ( config. metrics_delay ) . await ;
288-
289- let end = Utc :: now ( ) ;
290- let start = ( end - last_execution) . num_seconds ( ) ;
291-
292- last_execution = end;
293-
294- let query = format ! (
295- "sum by (consumer) (increase(kong_http_requests_total{{service='kupo-v1-ingress-kong-proxy', code!~\" 429|401|503\" }}[{start}s] @ {}))" ,
296- end. timestamp_millis( ) / 1000
297- ) ;
298-
299- let response = collect_prometheus_metrics ( config, query) . await ;
300- if let Err ( err) = response {
301- error ! ( error = err. to_string( ) , "error to make prometheus request" ) ;
302- state. metrics . metrics_failure ( & err) ;
303- continue ;
304- }
305- let response = response. unwrap ( ) ;
306-
307- for result in response. data . result {
308- if result. value == 0.0 || result. metric . consumer . is_none ( ) {
309- continue ;
310- }
311-
312- let consumer = result. metric . consumer . unwrap ( ) ;
313-
314- let captures = regex. captures ( & consumer) ;
315- if captures. is_none ( ) {
316- warn ! ( consumer, "invalid consumer to the regex" ) ;
317- continue ;
318- }
319-
320- let captures = captures. unwrap ( ) ;
321- let namespace = captures. get ( 1 ) . unwrap ( ) . as_str ( ) ;
322- let network = captures. get ( 2 ) . unwrap ( ) . as_str ( ) ;
323-
324- let dcu_per_request = config. dcu_per_request . get ( network) ;
325- if dcu_per_request. is_none ( ) {
326- let error = Error :: ConfigError ( format ! (
327- "dcu_per_request not configured to {} network" ,
328- network
329- ) ) ;
330- error ! ( error = error. to_string( ) ) ;
331- state. metrics . metrics_failure ( & error) ;
332- continue ;
333- }
334- let dcu_per_request = dcu_per_request. unwrap ( ) ;
335-
336- let dcu = result. value * dcu_per_request;
337-
338- let project = namespace. split_once ( "prj-" ) . unwrap ( ) . 1 ;
339- state. metrics . count_dcu_consumed ( project, network, dcu) ;
340- }
341- }
342- } ) ;
343- }
344-
345240#[ derive( Debug , Deserialize ) ]
346241struct PrometheusDataResultMetric {
347242 consumer : Option < String > ,
0 commit comments