Permalink
Browse files

adding many statistics

  • Loading branch information...
1 parent 207b1cb commit 282c093dad3b9975aa2f60b29c36773e2d8ef3b4 @travisghansen committed May 17, 2012
Showing with 97 additions and 9 deletions.
  1. +1 −1 README
  2. +96 −8 fanout.c
View
@@ -4,7 +4,7 @@ receiving messages on different channels.
Protocol:
ping - replies with current timestamp on the server
-stats - replies with some basic info about the server
+info - replies with some basic info about the server
subcribe <channel>
unsubscribe <channel>
announce <channel> <message>
View
@@ -14,7 +14,7 @@
#include <time.h>
#include <getopt.h>
#include <stdarg.h>
-
+#include <limits.h>
struct client
{
@@ -81,6 +81,32 @@ void unsubscribe (struct client *c, const char *channel_name);
// GLOBAL VARS
fd_set readset, tempset;
u_int max;
+long server_start_time;
+
+//announcement stats
+unsigned long long announcements_count =0;
+unsigned long long announcements_count_multiplier = 0;
+
+//messages stats
+unsigned long long messages_count =0;
+unsigned long long messages_count_multiplier = 0;
+
+//subscription stats
+unsigned long long subscriptions_count =0;
+unsigned long long subscriptions_count_multiplier = 0;
+
+//unsubscription stats
+unsigned long long unsubscriptions_count =0;
+unsigned long long unsubscriptions_count_multiplier = 0;
+
+//ping stats
+unsigned long long pings_count =0;
+unsigned long long pings_count_multiplier = 0;
+
+//connection/client stats
+unsigned long long clients_count =0;
+unsigned long long clients_count_multiplier = 0;
+
static int daemonize = 0;
FILE *logfile;
@@ -103,6 +129,7 @@ int main (int argc, char *argv[])
u_int yes = 1;
u_int listen_backlog = 25;
FILE *pidfile;
+ server_start_time = (long)time (NULL);
char buffer[1025];
struct client *client_i = NULL;
@@ -292,6 +319,13 @@ int main (int argc, char *argv[])
fanout_debug (2, "client socket connected\n");
client_write (client_i, "debug!connected...\n");
subscribe (client_i, "all");
+
+ //stats
+ if (clients_count == ULLONG_MAX) {
+ clients_count_multiplier++;
+ clients_count = 0;
+ }
+ clients_count++;
}
// Process events of other sockets...
@@ -598,7 +632,12 @@ void client_process_input_buffer (struct client *c)
client_write (c, message);
free (message);
message = NULL;
- } else if ( ! strcmp (line, "stats")) {
+ if (pings_count == ULLONG_MAX) {
+ pings_count_multiplier++;
+ pings_count = 0;
+ }
+ pings_count++;
+ } else if ( ! strcmp (line, "info")) {
//max connections
u_int max_connection_count = max;
if (daemonize) {
@@ -615,13 +654,39 @@ void client_process_input_buffer (struct client *c)
//subscriptions
u_int current_subscription_count = subscription_count ();
- //client
- //messages
-
- asprintf (&message, "max connections: %d\ncurrent connections: %d\n\
-current channels: %d\ncurrent subscriptions: %d\n", max_connection_count,
+ u_int current_requested_subscriptions = (current_subscription_count
+ - current_client_count);
+ //uptime
+ long uptime = (long)time (NULL) - server_start_time;
+
+ asprintf (&message,
+"uptime: %ldd %ldh %ldm %lds\n\
+max connections: %d\n\
+current connections: %d\n\
+current channels: %d\n\
+current subscriptions: %d\n\
+user-requested subscriptions: %d\n\
+total connections: %llu + (%llu * %llu)\n\
+total announcements: %llu + (%llu * %llu)\n\
+total messages: %llu + (%llu * %llu)\n\
+total subscribes: %llu + (%llu * %llu)\n\
+total unsubscribes: %llu + (%llu * %llu)\n\
+total pings: %llu + (%llu * %llu)\
+\n", uptime/3600/24, uptime/3600%24,
+ uptime/60%60, uptime%60,
+ max_connection_count,
current_client_count, current_channel_count,
- current_subscription_count);
+ current_subscription_count,
+ current_requested_subscriptions, clients_count,
+ ULLONG_MAX, clients_count_multiplier,
+ announcements_count, ULLONG_MAX,
+ announcements_count_multiplier,
+ messages_count, ULLONG_MAX, messages_count_multiplier,
+ subscriptions_count, ULLONG_MAX,
+ subscriptions_count_multiplier,
+ unsubscriptions_count, ULLONG_MAX,
+ unsubscriptions_count_multiplier, pings_count,
+ ULLONG_MAX, pings_count_multiplier);
client_write (c, message);
free (message);
message = NULL;
@@ -736,10 +801,21 @@ void announce (const char *channel, const char *message)
fanout_debug (3, "announcing message %s to %d on channel %s\n",
message, subscription_i->client->fd, channel);
client_write (subscription_i->client, s);
+ //message stats
+ if (messages_count == ULLONG_MAX) {
+ messages_count_multiplier++;
+ messages_count = 0;
+ }
+ messages_count++;
}
subscription_i = subscription_i->next;
}
fanout_debug (2, "announced messge %s", s);
+ if (announcements_count == ULLONG_MAX) {
+ announcements_count_multiplier++;
+ announcements_count = 0;
+ }
+ announcements_count++;
free (s);
}
@@ -766,6 +842,12 @@ void subscribe (struct client *c, const char *channel_name)
fanout_debug (2, "subscribed client %d to channel %s\n", c->fd,
subscription_i->channel->name);
+ if (subscriptions_count == ULLONG_MAX) {
+ subscriptions_count_multiplier++;
+ subscriptions_count = 0;
+ }
+ subscriptions_count++;
+
subscription_i->next = subscription_head;
if (subscription_head != NULL)
subscription_head->previous = subscription_i;
@@ -790,6 +872,12 @@ void unsubscribe (struct client *c, const char *channel_name)
channel->subscription_count--;
+ if (unsubscriptions_count == ULLONG_MAX) {
+ unsubscriptions_count_multiplier++;
+ unsubscriptions_count = 0;
+ }
+ unsubscriptions_count++;
+
if ( ! channel_has_subscription (channel)) {
remove_channel (channel);
destroy_channel (channel);

0 comments on commit 282c093

Please sign in to comment.