18
18
19
19
-import (prometheus_text_format , [escape_label_value /1 ]).
20
20
21
+ -include_lib (" stdlib/include/assert.hrl" ).
22
+ -include_lib (" kernel/include/logger.hrl" ).
21
23
-include_lib (" rabbit_common/include/rabbit.hrl" ).
22
24
23
25
-behaviour (prometheus_collector ).
@@ -303,6 +305,12 @@ deregister_cleanup(_) -> ok.
303
305
collect_mf ('detailed' , Callback ) ->
304
306
collect (true , ? DETAILED_METRIC_NAME_PREFIX , vhosts_filter_from_pdict (), enabled_mfs_from_pdict (? METRICS_RAW ), Callback ),
305
307
collect (true , ? CLUSTER_METRIC_NAME_PREFIX , vhosts_filter_from_pdict (), enabled_mfs_from_pdict (? METRICS_CLUSTER ), Callback ),
308
+ case is_mf_enabled (khepri ) of
309
+ true ->
310
+ collect_khepri_info (Callback );
311
+ false ->
312
+ ok
313
+ end ,
306
314
% % identity is here to enable filtering on a cluster name (as already happens in existing dashboards)
307
315
emit_identity_info (<<" detailed" >>, Callback ),
308
316
ok ;
@@ -339,6 +347,20 @@ totals(Callback) ->
339
347
end || {Table , Name , Type , Help } <- ? TOTALS ],
340
348
ok .
341
349
350
+ collect_khepri_info (Callback ) ->
351
+ ServerId = rabbit_khepri :get_server_id (node ()),
352
+ maps :foreach (
353
+ fun (Name , #{type := Type , help := Help , values := #{ServerId := Value }}) ->
354
+ Callback (
355
+ create_mf (
356
+ <<? DETAILED_METRIC_NAME_PREFIX /binary ,
357
+ " khepri_" ,
358
+ (prometheus_model_helpers :metric_name (Name ))/binary >>,
359
+ Help , Type , [Value ]));
360
+ (_Name , _Format ) ->
361
+ ok
362
+ end , seshat :format (ra )).
363
+
342
364
emit_identity_info (Endpoint , Callback ) ->
343
365
add_metric_family (build_info (), Callback ),
344
366
add_metric_family (identity_info (Endpoint ), Callback ),
@@ -871,12 +893,19 @@ sum('', B) ->
871
893
sum (A , B ) ->
872
894
A + B .
873
895
896
+ is_mf_enabled (MF ) ->
897
+ case get (prometheus_mf_filter ) of
898
+ undefined ->
899
+ false ;
900
+ MFNameSet ->
901
+ sets :is_element (MF , MFNameSet )
902
+ end .
903
+
874
904
enabled_mfs_from_pdict (AllMFs ) ->
875
905
case get (prometheus_mf_filter ) of
876
906
undefined ->
877
907
[];
878
- MFNames ->
879
- MFNameSet = sets :from_list (MFNames ),
908
+ MFNameSet ->
880
909
[ MF || MF = {Table , _ } <- AllMFs , sets :is_element (Table , MFNameSet ) ]
881
910
end .
882
911
@@ -890,4 +919,3 @@ vhosts_filter_from_pdict() ->
890
919
Enabled = maps :from_list ([ {VHost , true } || VHost <- L ]),
891
920
maps :merge (All , Enabled )
892
921
end .
893
-
0 commit comments