Skip to content

Commit 221e47d

Browse files
committed
emit_queue_info - report non-running leaders
1 parent c606437 commit 221e47d

File tree

1 file changed

+39
-19
lines changed

1 file changed

+39
-19
lines changed

deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -417,12 +417,34 @@ identity_info(Endpoint) ->
417417
}]
418418
}.
419419

420-
has_leader_running_locally(Q) when is_pid(Q) ->
421-
node(Q) =:= node() andalso is_process_alive(Q);
422-
has_leader_running_locally({Name, Node}) when Node =:= node() ->
423-
is_process_alive(whereis(Name));
424-
has_leader_running_locally(_) ->
425-
false.
420+
membership(Pid, Members) when is_pid(Pid) ->
421+
case node(Pid) =:= node() of
422+
true ->
423+
case is_process_alive(Pid) of
424+
true -> leader;
425+
false -> undefined
426+
end;
427+
false ->
428+
case lists:member(node(), Members) of
429+
true -> follower;
430+
false -> not_a_member
431+
end
432+
end;
433+
membership({Name, Node}, Members) ->
434+
case Node =:= node() of
435+
true ->
436+
case is_process_alive(whereis(Name)) of
437+
true -> leader;
438+
false -> undefined
439+
end;
440+
false ->
441+
case lists:member(node(), Members) of
442+
true -> follower;
443+
false -> not_a_member
444+
end
445+
end;
446+
membership(_, _Members) ->
447+
undefined.
426448

427449
emit_queue_info(Prefix, VHostsFilter, Callback) ->
428450
Help = <<"A metric with a constant '1' value and labels that provide some queue details">>,
@@ -434,20 +456,18 @@ emit_queue_info(Prefix, VHostsFilter, Callback) ->
434456
false ->
435457
Type = amqqueue:get_type(Q),
436458
TypeState = amqqueue:get_type_state(Q),
437-
QInfo0 = [{vhost, VHost}, {queue, Name}, {queue_type, Type}],
438459
Members = maps:get(nodes, TypeState, []),
439-
case {has_leader_running_locally(amqqueue:get_pid(Q)),
440-
lists:member(node(), Members)} of
441-
{true, _} ->
442-
QInfo = [{membership, leader} | QInfo0],
443-
[{QInfo, 1}|Acc];
444-
{false, true} ->
445-
%% replicated queue with a non-leader member on this node
446-
QInfo = [{membership, follower} | QInfo0],
447-
[{QInfo, 1}|Acc];
448-
_ ->
449-
%% ignore queues with no local members
450-
Acc
460+
case membership(amqqueue:get_pid(Q), Members) of
461+
not_a_member ->
462+
Acc;
463+
Membership ->
464+
QInfo = [
465+
{vhost, VHost},
466+
{queue, Name},
467+
{queue_type, Type},
468+
{membership, Membership}
469+
],
470+
[{QInfo, 1}|Acc]
451471
end
452472
end
453473
end, [], rabbit_amqqueue:list()),

0 commit comments

Comments
 (0)