Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
fanout
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Gerhard Gonter
fanout
Commits
282c093d
Commit
282c093d
authored
13 years ago
by
Travis Glenn Hansen
Browse files
Options
Downloads
Patches
Plain Diff
adding many statistics
parent
207b1cb2
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
README
+1
-1
1 addition, 1 deletion
README
fanout.c
+96
-8
96 additions, 8 deletions
fanout.c
with
97 additions
and
9 deletions
README
+
1
−
1
View file @
282c093d
...
...
@@ -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>
...
...
This diff is collapsed.
Click to expand it.
fanout.c
+
96
−
8
View file @
282c093d
...
...
@@ -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
\n
current connections: %d
\n
\
current channels: %d
\n
current 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
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment