diff --git a/server/include/path.h b/server/include/path.h index d711b178e..586ab2509 100644 --- a/server/include/path.h +++ b/server/include/path.h @@ -81,4 +81,10 @@ int path_start(struct path *p); */ int path_stop(struct path *p); +/** Show some basic statistics for a path + * + * @param p A pointer to the path struct + */ +void path_stats(struct path *p); + #endif /* _PATH_H_ */ diff --git a/server/src/path.c b/server/src/path.c index 67f4515f3..50d2cc5ea 100644 --- a/server/src/path.c +++ b/server/src/path.c @@ -123,3 +123,11 @@ int path_stop(struct path *p) return 0; } + +void path_stats(struct path *p) +{ + info("%12s " MAG("=>") " %-12s: %-8u %-8u %-8u", + p->in->name, p->out->name, + p->received, p->delayed, + p->duplicated); +} diff --git a/server/src/server.c b/server/src/server.c index 9e412e7eb..a6342fdd3 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -75,8 +75,8 @@ static void start() for (struct path *p = paths; p; p = p->next) { path_start(p); - info("Starting path: %12s " GRN("=>") " %s " GRN("=>") " %-12s", - p->in->name, settings.name, p->out->name); + info("Starting path: %12s " GRN("=>") " %-12s", + p->in->name, p->out->name); } } @@ -85,13 +85,10 @@ static void stop() /* Join all threads and print statistics */ for (struct path *p = paths; p; p = p->next) { path_stop(p); + path_stats(p); - info("Stopping path: %12s " RED("=>") " %s " RED("=>") " %-12s", - p->in->name, settings.name, p->out->name); - - info(" %u messages received", p->received); - info(" %u messages duplicated", p->duplicated); - info(" %u messages delayed", p->delayed); + info("Stopping path: %12s " RED("=>") " %-12s", + p->in->name, p->out->name); } /* Close all sockets we listen on */ @@ -178,8 +175,24 @@ int main(int argc, char *argv[]) /* Connect all nodes and start one thread per path */ start(); - /* Main thread is sleeping */ - pause(); + if (V >= 5) { + struct path *p = paths; + + info(""); + info("Runtime Statistics:"); + info("%12s " MAG("=>") " %-12s: %-8s %-8s %-8s", + "Source", "Destination", "#Recv", "#Delay", "#Duplicated"); + info("--------------------------------------------------------------"); + + while (1) { + sleep(5); + path_stats(p); + + p = (p->next) ? p->next : paths; + } + } + else + pause(); return 0; }