From: sergey.kitov Date: Wed, 1 Dec 2021 11:35:12 +0000 (+0200) Subject: lib-storage: Emit event with process stat in mail_user_deinit(). X-Git-Tag: 2.4.0~4632 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b9faa80118fc0fdbe12cb1b3b8c6661cc2c40ec4;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Emit event with process stat in mail_user_deinit(). --- diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index c67ca97e53..9cf60424a5 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -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); } diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 20f297105b..ef833d1bd1 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -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;