]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Keep track of session's PIDs.
authorTimo Sirainen <tss@iki.fi>
Thu, 1 Sep 2011 07:58:41 +0000 (10:58 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 1 Sep 2011 07:58:41 +0000 (10:58 +0300)
src/plugins/stats/stats-connection.c
src/stats/client-export.c
src/stats/mail-session.c
src/stats/mail-stats.h

index c03a9ea4dfd1bafb761f7c474eb0243769ff74a9..61a22e1122447b4923fa8b17a045e99bebeebb5e 100644 (file)
@@ -1,6 +1,7 @@
 /* Copyright (c) 2011 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "hostpid.h"
 #include "network.h"
 #include "str.h"
 #include "strescape.h"
@@ -92,6 +93,7 @@ void stats_connection_connect(struct stats_connection *conn,
        str_tabescape_write(str, user->username);
        str_append_c(str, '\t');
        str_tabescape_write(str, user->service);
+       str_printfa(str, "\t%s", my_pid);
 
        /* optional fields */
        if (user->local_ip != NULL) {
index 0a28e6c9218ae7664a3223d39ee6e324d8eff7ac..924b6f3dc944df881afe62c40b1b6d9f801ed200 100644 (file)
@@ -296,7 +296,7 @@ static int client_export_iter_session(struct client *client)
 
        if (!cmd->header_sent) {
                o_stream_send_str(client->output,
-                       "session\tuser\tip\tservice\tconnected"
+                       "session\tuser\tip\tservice\tpid\tconnected"
                        "\tlast_update\tnum_cmds"
                        MAIL_STATS_HEADER);
                cmd->header_sent = TRUE;
@@ -321,6 +321,7 @@ static int client_export_iter_session(struct client *client)
                        str_append_c(cmd->str, '\t');
                        str_tabescape_write(cmd->str, session->service);
                } T_END;
+               str_printfa(cmd->str, "\t%ld", (long)session->pid);
                str_printfa(cmd->str, "\t%d", !session->disconnected);
                client_export_timeval(cmd->str, &session->last_update);
                str_printfa(cmd->str, "\t%u", session->num_cmds);
index 92361a9d903639fa7c13de831788ac2e5eccc1ae..9a48e540807e3654ae8b4378d55730bca217dffb 100644 (file)
@@ -46,11 +46,12 @@ int mail_session_connect_parse(const char *const *args, const char **error_r)
 {
        struct mail_session *session;
        guid_128_t session_guid;
+       pid_t pid;
        struct ip_addr ip;
        unsigned int i;
 
-       /* <session guid> <username> <service> [key=value ..] */
-       if (str_array_length(args) < 3) {
+       /* <session guid> <username> <service> <pid> [key=value ..] */
+       if (str_array_length(args) < 4) {
                *error_r = "CONNECT: Too few parameters";
                return -1;
        }
@@ -58,6 +59,11 @@ int mail_session_connect_parse(const char *const *args, const char **error_r)
                *error_r = "CONNECT: Invalid GUID";
                return -1;
        }
+       if (str_to_pid(args[3], &pid) < 0) {
+               *error_r = "CONNECT: Invalid pid";
+               return -1;
+       }
+
        session = hash_table_lookup(mail_sessions_hash, session_guid);
        if (session != NULL) {
                *error_r = "CONNECT: Duplicate session GUID";
@@ -67,6 +73,7 @@ int mail_session_connect_parse(const char *const *args, const char **error_r)
        session->refcount = 1; /* unrefed at disconnect */
        session->service = i_strdup(args[2]);
        memcpy(session->guid, session_guid, sizeof(session->guid));
+       session->pid = pid;
        session->last_update = ioloop_timeval;
        session->to_idle = timeout_add(MAIL_SESSION_IDLE_TIMEOUT_MSECS,
                                       mail_session_idle_timeout, session);
index 9d8c52b57aae55d28f94e7e1867a36d65191d655..2961881856a7dfca94b01b8ba6a9d7a7be9e5456 100644 (file)
@@ -39,6 +39,7 @@ struct mail_session {
        guid_128_t guid;
        struct mail_user *user;
        char *service;
+       pid_t pid;
        /* ip address may be NULL if there's none */
        struct mail_ip *ip;
        struct timeout *to_idle;