@@ -275,6 +275,46 @@ typedef struct oidc_metrics_timing_t {
275
275
json_int_t count ;
276
276
} oidc_metrics_timing_t ;
277
277
278
+ typedef struct oidc_metrics_add_classname_ctx_t {
279
+ apr_pool_t * pool ;
280
+ char * * valid_names ;
281
+ } oidc_metrics_add_classname_ctx_t ;
282
+
283
+ static int _oidc_metrics_add_classnames (void * rec , const char * key , const char * value ) {
284
+ oidc_metrics_add_classname_ctx_t * ctx = (oidc_metrics_add_classname_ctx_t * )rec ;
285
+ * ctx -> valid_names = apr_psprintf (ctx -> pool , "%s%s%s" , * ctx -> valid_names ? * ctx -> valid_names : "" ,
286
+ * ctx -> valid_names ? " | " : "" , value );
287
+ return 1 ;
288
+ }
289
+
290
+ apr_byte_t oidc_metrics_is_valid_classname (apr_pool_t * pool , const char * name , char * * valid_names ) {
291
+ int i = 0 ;
292
+ int n = 0 ;
293
+ int rv = FALSE;
294
+ apr_table_t * names = apr_table_make (pool , 1 );
295
+ oidc_metrics_add_classname_ctx_t ctx = {pool , valid_names };
296
+
297
+ n = sizeof (_oidc_metrics_timings_info ) / sizeof (oidc_metrics_timing_info_t );
298
+ for (i = 0 ; i < n ; i ++ ) {
299
+ if (_oidc_strcmp (_oidc_metrics_timings_info [i ].class_name , name ) == 0 )
300
+ rv = TRUE;
301
+ apr_table_set (names , _oidc_metrics_timings_info [i ].class_name ,
302
+ _oidc_metrics_timings_info [i ].class_name );
303
+ }
304
+ n = sizeof (_oidc_metrics_counters_info ) / sizeof (oidc_metrics_counter_info_t );
305
+ for (i = 0 ; i < n ; i ++ ) {
306
+ if (_oidc_strcmp (_oidc_metrics_counters_info [i ].class_name , name ) == 0 )
307
+ rv = TRUE;
308
+ apr_table_set (names , _oidc_metrics_counters_info [i ].class_name ,
309
+ _oidc_metrics_counters_info [i ].class_name );
310
+ }
311
+
312
+ * valid_names = NULL ;
313
+ apr_table_do (_oidc_metrics_add_classnames , & ctx , names , NULL );
314
+
315
+ return rv ;
316
+ }
317
+
278
318
/*
279
319
* collection thread
280
320
*/
0 commit comments