18
18
monitored = #{} :: #{pid () => ok }
19
19
}).
20
20
21
+ -define (STATIC_KEYS , [name ,
22
+ durable ,
23
+ auto_delete ,
24
+ arguments ,
25
+ pid ,
26
+ leader ,
27
+ members ,
28
+ owner_pid ,
29
+ exclusive ,
30
+ policy ,
31
+ operator_policy ,
32
+ effective_policy_definition ,
33
+ type ]).
21
34
22
35
-opaque state () :: #? STATE {}.
23
36
@@ -491,6 +504,16 @@ state_info(_State) ->
491
504
-spec info (amqqueue :amqqueue (), all_keys | rabbit_types :info_keys ()) ->
492
505
rabbit_types :infos ().
493
506
info (Q , Items ) ->
507
+ AllStaticItems = is_list (Items ) andalso
508
+ lists :all (fun (I ) -> lists :member (I , ? STATIC_KEYS ) end , Items ),
509
+ case AllStaticItems of
510
+ true ->
511
+ static_info (Q , Items );
512
+ false ->
513
+ info_call (Q , Items )
514
+ end .
515
+
516
+ info_call (Q , Items ) ->
494
517
QPid = amqqueue :get_pid (Q ),
495
518
Req = case Items of
496
519
all_keys -> info ;
@@ -506,6 +529,48 @@ info(Q, Items) ->
506
529
Result
507
530
end .
508
531
532
+ static_info (Q , Items ) ->
533
+ [{I , i (I , Q )} || I <- Items ].
534
+
535
+ i (name , Q ) ->
536
+ amqqueue :get_name (Q );
537
+ i (durable , Q ) ->
538
+ amqqueue :is_durable (Q );
539
+ i (auto_delete , Q ) ->
540
+ amqqueue :is_auto_delete (Q );
541
+ i (arguments , Q ) ->
542
+ amqqueue :get_arguments (Q );
543
+ i (pid , Q ) ->
544
+ amqqueue :get_pid (Q );
545
+ i (leader , Q ) ->
546
+ node (i (pid , Q ));
547
+ i (members , Q ) ->
548
+ [i (leader , Q )];
549
+ i (owner_pid , Q ) when ? amqqueue_exclusive_owner_is (Q , none ) ->
550
+ '' ;
551
+ i (owner_pid , Q ) ->
552
+ amqqueue :get_exclusive_owner (Q );
553
+ i (exclusive , Q ) ->
554
+ ExclusiveOwner = amqqueue :get_exclusive_owner (Q ),
555
+ is_pid (ExclusiveOwner );
556
+ i (policy , Q ) ->
557
+ case rabbit_policy :name (Q ) of
558
+ none -> '' ;
559
+ Policy -> Policy
560
+ end ;
561
+ i (operator_policy , Q ) ->
562
+ case rabbit_policy :name_op (Q ) of
563
+ none -> '' ;
564
+ Policy -> Policy
565
+ end ;
566
+ i (effective_policy_definition , Q ) ->
567
+ case rabbit_policy :effective_definition (Q ) of
568
+ undefined -> [];
569
+ Def -> Def
570
+ end ;
571
+ i (type , _ ) ->
572
+ classic .
573
+
509
574
-spec purge (amqqueue :amqqueue ()) ->
510
575
{ok , non_neg_integer ()}.
511
576
purge (Q ) when ? is_amqqueue (Q ) ->
0 commit comments