From: Timo Sirainen Date: Thu, 1 Sep 2011 07:58:41 +0000 (+0300) Subject: stats: Keep track of session's PIDs. X-Git-Tag: 2.1.alpha1~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d011467f6e39ac7f3653e65a0abff105accd204;p=thirdparty%2Fdovecot%2Fcore.git stats: Keep track of session's PIDs. --- diff --git a/src/plugins/stats/stats-connection.c b/src/plugins/stats/stats-connection.c index c03a9ea4df..61a22e1122 100644 --- a/src/plugins/stats/stats-connection.c +++ b/src/plugins/stats/stats-connection.c @@ -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) { diff --git a/src/stats/client-export.c b/src/stats/client-export.c index 0a28e6c921..924b6f3dc9 100644 --- a/src/stats/client-export.c +++ b/src/stats/client-export.c @@ -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); diff --git a/src/stats/mail-session.c b/src/stats/mail-session.c index 92361a9d90..9a48e54080 100644 --- a/src/stats/mail-session.c +++ b/src/stats/mail-session.c @@ -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; - /* [key=value ..] */ - if (str_array_length(args) < 3) { + /* [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); diff --git a/src/stats/mail-stats.h b/src/stats/mail-stats.h index 9d8c52b57a..2961881856 100644 --- a/src/stats/mail-stats.h +++ b/src/stats/mail-stats.h @@ -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;