From 45954af5e3f56ac8c97b871b86f6b97485a52dcc Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Wed, 15 Feb 2012 22:16:56 +0100 Subject: [SERVER] Print more statistics (exported images, atime,...) --- src/server/ipc.c | 34 +++++++++++++++++++++++++++++----- src/server/net.c | 3 +++ src/server/server.c | 6 +++--- src/server/server.h | 1 + src/server/utils.c | 1 + 5 files changed, 37 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/ipc.c b/src/server/ipc.c index 1ae401b..9aeca5d 100644 --- a/src/server/ipc.c +++ b/src/server/ipc.c @@ -40,6 +40,9 @@ void* dnbd3_ipc_receive() GSList *iterator = NULL; + struct tm * timeinfo; + char time_buff[64]; + // Create socket if ((server_sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { @@ -67,7 +70,7 @@ void* dnbd3_ipc_receive() while (1) { - int cmd, num = 0; + int cmd, num, i = 0; char buf[4096]; // Accept connection @@ -92,8 +95,26 @@ void* dnbd3_ipc_receive() break; case IPC_INFO: - num = g_slist_length(_dnbd3_clients); - send(client_sock, &num, sizeof(int), MSG_WAITALL); // send number of clients + num = g_slist_length(_dnbd3_clients) + _num_images +4; + send(client_sock, &num, sizeof(int), MSG_WAITALL); // send number of lines to print + + sprintf(buf, "Exported images (atime, vid, rid, file):\n"); + strcat( buf, "========================================\n"); + send(client_sock, buf, sizeof(buf), MSG_WAITALL); + for (i = 0; i < _num_images; i++) + { + timeinfo = localtime(&_images[i].atime); + strftime (time_buff,64,"%d.%m.%y %H:%M:%S",timeinfo); + sprintf(buf, "%s\t%i\t%i\t%s\n", time_buff, _images[i].vid, _images[i].rid,_images[i].file); + send(client_sock, buf, sizeof(buf), MSG_WAITALL); + } + + sprintf(buf, "\nNumber images: %i\n\n", _num_images); + send(client_sock, buf, sizeof(buf), MSG_WAITALL); + + sprintf(buf, "Connected clients (ip, file):\n"); + strcat( buf, "=============================\n"); + send(client_sock, buf, sizeof(buf), MSG_WAITALL); for (iterator = _dnbd3_clients; iterator; iterator = iterator->next) { dnbd3_client_t *client = iterator->data; @@ -103,6 +124,10 @@ void* dnbd3_ipc_receive() send(client_sock, buf, sizeof(buf), MSG_WAITALL); } } + + sprintf(buf, "\nNumber clients: %i\n\n", g_slist_length(_dnbd3_clients)); + send(client_sock, buf, sizeof(buf), MSG_WAITALL); + close(client_sock); break; @@ -152,11 +177,10 @@ void dnbd3_ipc_send(int cmd) case IPC_INFO: send(client_sock, &cmd, sizeof(int), MSG_WAITALL); recv(client_sock, &num, sizeof(int), MSG_WAITALL); - printf("INFO: Number clients connected: %i\n", num); for (i = 0; i < num; i++) { if (recv(client_sock, &buf, sizeof(buf), MSG_WAITALL) > 0) - printf("INFO: %s", buf); + printf("%s", buf); } break; diff --git a/src/server/net.c b/src/server/net.c index ab01f70..2c231ba 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -97,6 +97,7 @@ void *dnbd3_handle_query(void *dnbd3_client) client->image = image; send(client->sock, (char *) &reply, sizeof(dnbd3_reply_t), 0); send(client->sock, &image->filesize, sizeof(uint64_t), 0); + image->atime = time(NULL); continue; case CMD_GET_BLOCK: @@ -109,6 +110,8 @@ void *dnbd3_handle_query(void *dnbd3_client) if (sendfile(client->sock, image_file, (off_t *) &request.offset, request.size) < 0) printf("ERROR: sendfile returned -1\n"); + image->atime = time(NULL); + continue; default: diff --git a/src/server/server.c b/src/server/server.c index bc37019..d6db52d 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -109,15 +109,15 @@ int main(int argc, char* argv[]) demonize = 0; break; case 'r': - printf("INFO: Reloading configuration file...\n"); + printf("INFO: Reloading configuration file...\n\n"); dnbd3_ipc_send(IPC_RELOAD); return EXIT_SUCCESS; case 's': - printf("INFO: Stopping running server...\n"); + printf("INFO: Stopping running server...\n\n"); dnbd3_ipc_send(IPC_EXIT); return EXIT_SUCCESS; case 'i': - printf("INFO: Requesting information...\n"); + printf("INFO: Requesting information...\n\n"); dnbd3_ipc_send(IPC_INFO); return EXIT_SUCCESS; case 'H': diff --git a/src/server/server.h b/src/server/server.h index de9eccb..00a04e8 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -36,6 +36,7 @@ typedef struct char **servers; int vid; int rid; + time_t atime; } dnbd3_image_t; typedef struct diff --git a/src/server/utils.c b/src/server/utils.c index be0b584..891d0b9 100644 --- a/src/server/utils.c +++ b/src/server/utils.c @@ -49,6 +49,7 @@ void dnbd3_load_config(char *file) _images[i].servers = g_key_file_get_string_list(gkf, groups[i], "servers", &_images[i].num_servers, NULL); _images[i].vid = g_key_file_get_integer(gkf, groups[i], "vid", NULL); _images[i].rid = g_key_file_get_integer(gkf, groups[i], "rid", NULL); + _images[i].atime = 0; if (_images[i].num_servers > MAX_NUMBER_SERVERS) printf("WARN: Max allowed servers %i\n", MAX_NUMBER_SERVERS); -- cgit v1.2.3-55-g7522