summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohann Latocha2012-02-15 22:16:56 +0100
committerJohann Latocha2012-02-15 22:16:56 +0100
commit45954af5e3f56ac8c97b871b86f6b97485a52dcc (patch)
treede083a650cf62ff6fb412e3e2d8d2bcdae50adef /src
parent[KERNEL] Kernel panic while server is gone fixed (diff)
downloaddnbd3-45954af5e3f56ac8c97b871b86f6b97485a52dcc.tar.gz
dnbd3-45954af5e3f56ac8c97b871b86f6b97485a52dcc.tar.xz
dnbd3-45954af5e3f56ac8c97b871b86f6b97485a52dcc.zip
[SERVER] Print more statistics (exported images, atime,...)
Diffstat (limited to 'src')
-rw-r--r--src/server/ipc.c34
-rw-r--r--src/server/net.c3
-rw-r--r--src/server/server.c6
-rw-r--r--src/server/server.h1
-rw-r--r--src/server/utils.c1
5 files changed, 37 insertions, 8 deletions
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);