]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
indexer: If verbose_proctitle=yes, show how many clients/requests there are.
authorTimo Sirainen <tss@iki.fi>
Tue, 9 Aug 2011 16:42:23 +0000 (19:42 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 9 Aug 2011 16:42:23 +0000 (19:42 +0300)
src/indexer/indexer-client.c
src/indexer/indexer-client.h
src/indexer/indexer-queue.c
src/indexer/indexer-queue.h
src/indexer/indexer.c
src/indexer/indexer.h

index 443a4a1aaa3d91e865c3696fa32ed1de18210b8f..cc44a6447d23cf4409fd509554091070759d4c1b 100644 (file)
@@ -39,6 +39,7 @@ struct indexer_client_request {
 };
 
 struct indexer_client *clients = NULL;
+static unsigned int clients_count = 0;
 
 static void indexer_client_destroy(struct indexer_client *client);
 static void indexer_client_ref(struct indexer_client *client);
@@ -173,7 +174,10 @@ indexer_client_create(int fd, struct indexer_queue *queue)
        client->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE);
        client->output = o_stream_create_fd(fd, (size_t)-1, FALSE);
        client->io = io_add(fd, IO_READ, indexer_client_input, client);
+
        DLLIST_PREPEND(&clients, client);
+       clients_count++;
+       indexer_refresh_proctitle();
        return client;
 }
 
@@ -193,7 +197,9 @@ static void indexer_client_destroy(struct indexer_client *client)
        client->fd = -1;
        indexer_client_unref(client);
 
+       clients_count--;
        master_service_client_connection_destroyed(master_service);
+       indexer_refresh_proctitle();
 }
 
 static void indexer_client_ref(struct indexer_client *client)
@@ -214,6 +220,11 @@ static void indexer_client_unref(struct indexer_client *client)
        i_free(client);
 }
 
+unsigned int indexer_clients_get_count(void)
+{
+       return clients_count;
+}
+
 void indexer_clients_destroy_all(void)
 {
        while (clients != NULL)
index b08e5c6f914a5e2a5fa5a17e32e20ef8a31dea39..a3638a737423f7bd2959b384c54c33a0fe24c72f 100644 (file)
@@ -6,6 +6,8 @@ struct indexer_queue;
 struct indexer_client *
 indexer_client_create(int fd, struct indexer_queue *queue);
 void indexer_client_status_callback(int percentage, void *context);
+
+unsigned int indexer_clients_get_count(void);
 void indexer_clients_destroy_all(void);
 
 #endif
index 913189b87a7396bacbc4cd93c9a25be0b9b5360b..8d8893858eae5f004727add10797cf110f324e56 100644 (file)
@@ -121,6 +121,7 @@ void indexer_queue_append(struct indexer_queue *queue, bool append,
 
        if (queue->listen_callback != NULL)
                queue->listen_callback(queue);
+       indexer_refresh_proctitle();
 }
 
 struct indexer_request *indexer_queue_request_peek(struct indexer_queue *queue)
@@ -136,6 +137,7 @@ void indexer_queue_request_remove(struct indexer_queue *queue)
 
        DLLIST2_REMOVE(&queue->head, &queue->tail, request);
        hash_table_remove(queue->requests, request);
+       indexer_refresh_proctitle();
 }
 
 static void indexer_queue_request_status_int(struct indexer_queue *queue,
@@ -188,3 +190,8 @@ bool indexer_queue_is_empty(struct indexer_queue *queue)
 {
        return queue->head == NULL;
 }
+
+unsigned int indexer_queue_count(struct indexer_queue *queue)
+{
+       return hash_table_count(queue->requests);
+}
index a9adca8943f3eddfa25dabdcf61b0525437f5b7b..b54db3c049b9dcbefb9755b90c319a170ca9294d 100644 (file)
@@ -24,6 +24,7 @@ void indexer_queue_append(struct indexer_queue *queue, bool append,
 void indexer_queue_cancel_all(struct indexer_queue *queue);
 
 bool indexer_queue_is_empty(struct indexer_queue *queue);
+unsigned int indexer_queue_count(struct indexer_queue *queue);
 
 /* Return the next request from the queue, without removing it. */
 struct indexer_request *indexer_queue_request_peek(struct indexer_queue *queue);
index 21fe66a1554599538bcf4759294a2416a90f30b2..4c742e738bd876eab6917f00d0f17b23744e2ec0 100644 (file)
@@ -2,7 +2,9 @@
 
 #include "lib.h"
 #include "restrict-access.h"
+#include "process-title.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "indexer-client.h"
 #include "indexer-queue.h"
 #include "worker-pool.h"
@@ -13,9 +15,20 @@ struct worker_request {
        struct indexer_request *request;
 };
 
+static const struct master_service_settings *set;
 static struct indexer_queue *queue;
 static struct worker_pool *worker_pool;
 
+void indexer_refresh_proctitle(void)
+{
+       if (!set->verbose_proctitle)
+               return;
+
+       process_title_set(t_strdup_printf("[%u clients, %u requests]",
+                                         indexer_clients_get_count(),
+                                         indexer_queue_count(queue)));
+}
+
 static bool idle_die(void)
 {
        return indexer_queue_is_empty(queue);
@@ -104,6 +117,8 @@ static void worker_status_callback(int percentage, void *context)
 
 int main(int argc, char *argv[])
 {
+       const char *error;
+
        master_service = master_service_init("indexer", 0, &argc, &argv, NULL);
        if (master_getopt(master_service) > 0)
                return FATAL_DEFAULT;
@@ -113,6 +128,10 @@ int main(int argc, char *argv[])
        restrict_access_allow_coredumps(TRUE);
        master_service_set_idle_die_callback(master_service, idle_die);
 
+       if (master_service_settings_read_simple(master_service, NULL, &error) < 0)
+               i_fatal("Error reading configuration: %s", error);
+       set = master_service_settings_get(master_service);
+
        master_service_init_finish(master_service);
        worker_pool = worker_pool_init("indexer-worker",
                                       worker_status_callback);
index 6880f815c0e78784ae318d556d468907b7143f92..417a433cd975b0f62ff10b01979ca68294ad3385 100644 (file)
@@ -4,4 +4,6 @@
 /* percentage: -1 = failed, 0..99 = indexing in progress, 100 = done */
 typedef void indexer_status_callback_t(int percentage, void *context);
 
+void indexer_refresh_proctitle(void);
+
 #endif