[Asterisk-code-review] stasis: Store subscriber uniqueids with topic statistics. (asterisk[16])

Friendly Automation asteriskteam at digium.com
Thu Feb 21 09:59:45 CST 2019


Friendly Automation has submitted this change and it was merged. ( https://gerrit.asterisk.org/11018 )

Change subject: stasis: Store subscriber uniqueids with topic statistics.
......................................................................

stasis: Store subscriber uniqueids with topic statistics.

This change provides an easier mechanism to determine which
subscribers are subscribed to a topic. Using this you can
inspect the specific subscribers for further details.

Change-Id: I8deea21703cd5c5357b85593b46c3eaf24e18c0c
---
M main/stasis.c
1 file changed, 29 insertions(+), 6 deletions(-)

Approvals:
  Kevin Harwell: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved
  Friendly Automation: Approved for Submit



diff --git a/main/stasis.c b/main/stasis.c
index fea9ac5..95c0c3d 100644
--- a/main/stasis.c
+++ b/main/stasis.c
@@ -347,8 +347,8 @@
 	int messages_not_dispatched;
 	/*! \brief The number of messages that were dispatched to at least 1 subscriber */
 	int messages_dispatched;
-	/*! \brief The number of subscribers to this topic */
-	int subscriber_count;
+	/*! \brief The ids of the subscribers to this topic */
+	struct ao2_container *subscribers;
 	/*! \brief Name of the topic */
 	char name[0];
 };
@@ -405,15 +405,28 @@
 }
 
 #ifdef AST_DEVMODE
+static void topic_statistics_destroy(void *obj)
+{
+	struct stasis_topic_statistics *statistics = obj;
+
+	ao2_cleanup(statistics->subscribers);
+}
+
 static struct stasis_topic_statistics *stasis_topic_statistics_create(const char *name)
 {
 	struct stasis_topic_statistics *statistics;
 
-	statistics = ao2_alloc(sizeof(*statistics) + strlen(name) + 1, NULL);
+	statistics = ao2_alloc(sizeof(*statistics) + strlen(name) + 1, topic_statistics_destroy);
 	if (!statistics) {
 		return NULL;
 	}
 
+	statistics->subscribers = ast_str_container_alloc(1);
+	if (!statistics->subscribers) {
+		ao2_ref(statistics, -1);
+		return NULL;
+	}
+
 	strcpy(statistics->name, name); /* SAFE */
 	ao2_link(topic_statistics, statistics);
 
@@ -998,7 +1011,7 @@
 	}
 
 #ifdef AST_DEVMODE
-	topic->statistics->subscriber_count += 1;
+	ast_str_container_add(topic->statistics->subscribers, stasis_subscription_uniqueid(sub));
 #endif
 
 	ao2_unlock(topic);
@@ -1021,7 +1034,7 @@
 
 #ifdef AST_DEVMODE
 	if (!res) {
-		topic->statistics->subscriber_count -= 1;
+		ast_str_container_remove(topic->statistics->subscribers, stasis_subscription_uniqueid(sub));
 	}
 #endif
 
@@ -2292,6 +2305,8 @@
 static char *statistics_show_topic(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
 	struct stasis_topic_statistics *statistics;
+	struct ao2_iterator i;
+	char *uniqueid;
 
 	switch (cmd) {
 	case CLI_INIT:
@@ -2323,7 +2338,15 @@
 	ast_cli(a->fd, "Number of messages that went to at least one subscriber: %d\n", statistics->messages_dispatched);
 	ast_cli(a->fd, "Lowest amount of time (in milliseconds) spent dispatching message: %ld\n", statistics->lowest_time_dispatched);
 	ast_cli(a->fd, "Highest amount of time (in milliseconds) spent dispatching messages: %ld\n", statistics->highest_time_dispatched);
-	ast_cli(a->fd, "Number of subscribers: %d\n", statistics->subscriber_count);
+	ast_cli(a->fd, "Number of subscribers: %d\n", ao2_container_count(statistics->subscribers));
+
+	ast_cli(a->fd, "Subscribers:\n");
+	i = ao2_iterator_init(statistics->subscribers, 0);
+	while ((uniqueid = ao2_iterator_next(&i))) {
+		ast_cli(a->fd, "\t%s\n", uniqueid);
+		ao2_ref(uniqueid, -1);
+	}
+	ao2_iterator_destroy(&i);
 
 	ao2_ref(statistics, -1);
 

-- 
To view, visit https://gerrit.asterisk.org/11018
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-MessageType: merged
Gerrit-Change-Id: I8deea21703cd5c5357b85593b46c3eaf24e18c0c
Gerrit-Change-Number: 11018
Gerrit-PatchSet: 1
Gerrit-Owner: Joshua C. Colp <jcolp at digium.com>
Gerrit-Reviewer: Friendly Automation (1000185)
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20190221/17e54753/attachment.html>


More information about the asterisk-code-review mailing list