Add stream subscription properties to metrics
This commit is contained in:
parent
f6d4c4f55d
commit
77b99a2efd
|
|
@ -20,8 +20,8 @@
|
|||
|
||||
%% API
|
||||
-export([init/0]).
|
||||
-export([consumer_created/6,
|
||||
consumer_updated/6,
|
||||
-export([consumer_created/7,
|
||||
consumer_updated/7,
|
||||
consumer_cancelled/3]).
|
||||
-export([publisher_created/4,
|
||||
publisher_updated/7,
|
||||
|
|
@ -39,9 +39,13 @@ consumer_created(Connection,
|
|||
SubscriptionId,
|
||||
Credits,
|
||||
MessageCount,
|
||||
Offset) ->
|
||||
Offset,
|
||||
Properties) ->
|
||||
Values =
|
||||
[{credits, Credits}, {consumed, MessageCount}, {offset, Offset}],
|
||||
[{credits, Credits},
|
||||
{consumed, MessageCount},
|
||||
{offset, Offset},
|
||||
{properties, Properties}],
|
||||
ets:insert(?TABLE_CONSUMER,
|
||||
{{StreamResource, Connection, SubscriptionId}, Values}),
|
||||
rabbit_core_metrics:consumer_created(Connection,
|
||||
|
|
@ -52,7 +56,7 @@ consumer_created(Connection,
|
|||
0,
|
||||
true,
|
||||
up,
|
||||
[]),
|
||||
rabbit_misc:to_amqp_table(Properties)),
|
||||
ok.
|
||||
|
||||
consumer_tag(SubscriptionId) ->
|
||||
|
|
@ -64,9 +68,13 @@ consumer_updated(Connection,
|
|||
SubscriptionId,
|
||||
Credits,
|
||||
MessageCount,
|
||||
Offset) ->
|
||||
Offset,
|
||||
Properties) ->
|
||||
Values =
|
||||
[{credits, Credits}, {consumed, MessageCount}, {offset, Offset}],
|
||||
[{credits, Credits},
|
||||
{consumed, MessageCount},
|
||||
{offset, Offset},
|
||||
{properties, Properties}],
|
||||
ets:insert(?TABLE_CONSUMER,
|
||||
{{StreamResource, Connection, SubscriptionId}, Values}),
|
||||
ok.
|
||||
|
|
@ -77,6 +85,11 @@ consumer_cancelled(Connection, StreamResource, SubscriptionId) ->
|
|||
rabbit_core_metrics:consumer_deleted(Connection,
|
||||
consumer_tag(SubscriptionId),
|
||||
StreamResource),
|
||||
%% FIXME send consumer_deleted event when this function is called
|
||||
%% otherwise the consumer is not fully cleaned up and can still show up in the REST API
|
||||
%% rabbit_event:notify(consumer_deleted, [{consumer_tag, consumer_tag(SubscriptionId)},
|
||||
%% {channel, self()},
|
||||
%% {queue, StreamResource}]),
|
||||
ok.
|
||||
|
||||
publisher_created(Connection,
|
||||
|
|
|
|||
|
|
@ -1467,7 +1467,8 @@ handle_frame_post_auth(Transport,
|
|||
SubscriptionId,
|
||||
Credit1,
|
||||
messages_consumed(ConsumerCounters1),
|
||||
ConsumerOffset),
|
||||
ConsumerOffset,
|
||||
Properties),
|
||||
{Connection1#stream_connection{stream_subscriptions
|
||||
=
|
||||
StreamSubscriptions1},
|
||||
|
|
@ -2276,11 +2277,13 @@ emit_stats(#stream_connection{publishers = Publishers} = Connection,
|
|||
Id,
|
||||
Credit,
|
||||
messages_consumed(Counters),
|
||||
consumer_offset(Counters))
|
||||
consumer_offset(Counters),
|
||||
Properties)
|
||||
|| #consumer{stream = S,
|
||||
subscription_id = Id,
|
||||
credit = Credit,
|
||||
counters = Counters}
|
||||
counters = Counters,
|
||||
properties = Properties}
|
||||
<- maps:values(Consumers)],
|
||||
[rabbit_stream_metrics:publisher_updated(self(),
|
||||
stream_r(S, Connection),
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ import org.assertj.core.api.Condition;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.junit.jupiter.params.provider.NullSource;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
|
||||
|
|
@ -224,7 +225,9 @@ public class HttpTest {
|
|||
assertThat(consumers).hasSize(2);
|
||||
consumers.forEach(
|
||||
c -> {
|
||||
assertThat(c).containsKeys("subscription_id", "credits", "connection_details", "queue");
|
||||
assertThat(c)
|
||||
.containsKeys(
|
||||
"subscription_id", "credits", "connection_details", "queue", "properties");
|
||||
assertThat(c)
|
||||
.extractingByKey("connection_details", as(MAP))
|
||||
.containsValue(connectionName(c1));
|
||||
|
|
@ -434,8 +437,20 @@ public class HttpTest {
|
|||
waitUntil(() -> request.call().size() == initialCount);
|
||||
}
|
||||
|
||||
@Test
|
||||
void consumers() throws Exception {
|
||||
static Stream<Map<String, String>> subscriptionProperties() {
|
||||
return Stream.of(Collections.emptyMap(), map());
|
||||
}
|
||||
|
||||
static Map<String, String> map() {
|
||||
Map<String, String> map = new LinkedHashMap<>();
|
||||
map.put("key1", "value1");
|
||||
map.put("key2", "value2");
|
||||
return map;
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("subscriptionProperties")
|
||||
void consumers(Map<String, String> subscriptionProperties) throws Exception {
|
||||
Callable<List<Map<String, Object>>> request = () -> toMaps(get("/stream/consumers"));
|
||||
int initialCount = request.call().size();
|
||||
String connectionProvidedName = UUID.randomUUID().toString();
|
||||
|
|
@ -449,7 +464,7 @@ public class HttpTest {
|
|||
client1.credit(subscriptionId, 1))
|
||||
.shutdownListener(shutdownContext -> closed.set(true)));
|
||||
|
||||
client.subscribe((byte) 0, stream, OffsetSpecification.first(), 10);
|
||||
client.subscribe((byte) 0, stream, OffsetSpecification.first(), 10, subscriptionProperties);
|
||||
waitUntil(() -> request.call().size() == initialCount + 1);
|
||||
waitUntil(() -> entities(request.call(), client).size() == 1);
|
||||
|
||||
|
|
@ -458,6 +473,8 @@ public class HttpTest {
|
|||
assertThat(((Number) consumer.get("consumed")).intValue()).isEqualTo(0);
|
||||
assertThat(((Number) consumer.get("offset")).intValue()).isEqualTo(0);
|
||||
assertThat(((Number) consumer.get("subscription_id")).intValue()).isEqualTo(0);
|
||||
assertThat(consumer.get("properties")).isNotNull().isEqualTo(subscriptionProperties);
|
||||
|
||||
assertThat(connectionDetails(consumer))
|
||||
.containsEntry("name", connectionName(client))
|
||||
.containsEntry("user", "guest")
|
||||
|
|
|
|||
Loading…
Reference in New Issue