X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/28d25177e72f84408c99072fbe6cf05b4fc556fb..8a1337cda8055ff06e54c1def4b13eea133c7672:/keyd.c diff --git a/keyd.c b/keyd.c index c2d8349..5d5b7ba 100644 --- a/keyd.c +++ b/keyd.c @@ -17,9 +17,9 @@ #include #include #include +#include #include -#include "config.h" #include "charfuncs.h" #include "cleanup.h" #include "keyd.h" @@ -30,6 +30,9 @@ #include "mem.h" #include "onak-conf.h" #include "parsekey.h" +#include "version.h" + +static struct keyd_stats *stats; void daemonize(void) { @@ -150,6 +153,11 @@ int sock_do(int fd) } if (ret == 0) { + if (cmd < KEYD_CMD_LAST) { + stats->command_stats[cmd]++; + } else { + stats->command_stats[KEYD_CMD_UNKNOWN]++; + } switch (cmd) { case KEYD_CMD_VERSION: cmd = KEYD_REPLY_OK; @@ -341,6 +349,14 @@ int sock_do(int fd) ret = 1; trytocleanup(); break; + case KEYD_CMD_STATS: + cmd = KEYD_REPLY_OK; + write(fd, &cmd, sizeof(cmd)); + cmd = sizeof(*stats); + write(fd, &cmd, sizeof(cmd)); + write(fd, stats, + sizeof(*stats)); + break; default: logthing(LOGTHING_ERROR, "Got unknown command: %d", cmd); @@ -372,6 +388,7 @@ int sock_accept(int fd) } if (ret != -1) { + stats->connects++; while (!sock_do(srv)) ; sock_close(srv); } @@ -381,7 +398,7 @@ int sock_accept(int fd) static void usage(void) { - puts("keyd " PACKAGE_VERSION " - backend key serving daemon for the " + puts("keyd " ONAK_VERSION " - backend key serving daemon for the " "onak PGP keyserver.\n"); puts("Usage:\n"); puts("\tkeyd [options]\n"); @@ -429,6 +446,15 @@ int main(int argc, char *argv[]) catchsignals(); signal(SIGPIPE, SIG_IGN); + + stats = calloc(1, sizeof(*stats)); + if (!stats) { + logthing(LOGTHING_ERROR, + "Couldn't allocate memory for stats structure."); + exit(EXIT_FAILURE); + } + stats->started = time(NULL); + snprintf(sockname, 1023, "%s/%s", config.db_dir, KEYD_SOCKET); fd = sock_init(sockname); @@ -449,6 +475,8 @@ int main(int argc, char *argv[]) unlink(sockname); } + free(stats); + cleanuplogthing(); cleanupconfig();