]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Emit event with process stat in mail_user_deinit().
authorsergey.kitov <sergey.kitov@open-xchange.com>
Wed, 1 Dec 2021 11:35:12 +0000 (13:35 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Mon, 24 Jan 2022 09:50:20 +0000 (09:50 +0000)
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index c67ca97e536c97488d2804990daef9d9f53b195d..9cf60424a5c34b1da619af474fed98b6296d05e3 100644 (file)
@@ -192,6 +192,7 @@ int mail_user_init(struct mail_user *user, const char **error_r)
                *error_r = t_strdup(user->error);
                return -1;
        }
+       process_stat_read_start(&user->proc_stat, user->event);
        return 0;
 }
 
@@ -227,8 +228,33 @@ void mail_user_unref(struct mail_user **_user)
        pool_unref(&user->pool);
 }
 
+static void mail_user_session_finished(struct mail_user *user)
+{
+       struct event *ev = user->event;
+       struct process_stat *stat = &user->proc_stat;
+
+       process_stat_read_finish(stat, ev);
+
+       struct event_passthrough *e = event_create_passthrough(ev)->
+               set_name("mail_user_session_finished")->
+               add_int_nonzero("utime", stat->utime)->
+               add_int_nonzero("stime", stat->stime)->
+               add_int_nonzero("minor_faults", stat->minor_faults)->
+               add_int_nonzero("major_faults", stat->major_faults)->
+               add_int_nonzero("vol_cs", stat->vol_cs)->
+               add_int_nonzero("invol_cs", stat->invol_cs)->
+               add_int_nonzero("rss", stat->rss)->
+               add_int_nonzero("vsz", stat->vsz)->
+               add_int_nonzero("rchar", stat->rchar)->
+               add_int_nonzero("wchar", stat->wchar)->
+               add_int_nonzero("syscr", stat->syscr)->
+               add_int_nonzero("syscw", stat->syscw);
+       e_debug(e->event(), "User session is finished");
+}
+
 void mail_user_deinit(struct mail_user **user)
 {
+       mail_user_session_finished(*user);
        i_assert((*user)->refcount == 1);
        mail_user_unref(user);
 }
index 20f297105b76f740e58e716df3613d32e0b1b74c..ef833d1bd101af47c5a91ce7f89104dbc0fe6574 100644 (file)
@@ -4,6 +4,7 @@
 #include "net.h"
 #include "unichar.h"
 #include "mail-storage-settings.h"
+#include "process-stat.h"
 
 struct module;
 struct stats;
@@ -73,6 +74,8 @@ struct mail_user {
        /* Module-specific contexts. See mail_storage_module_id. */
        ARRAY(union mail_user_module_context *) module_contexts;
 
+       struct process_stat proc_stat;
+
        /* User doesn't exist (as reported by userdb lookup when looking
           up home) */
        bool nonexistent:1;