diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c index 8404b914353f59339070f662081c95aec772c589..6bdba1cd2a5f125e6c7a2a0b8dbd6560bd0bc353 100644 --- a/src/managesieve/managesieve-client.c +++ b/src/managesieve/managesieve-client.c @@ -378,9 +378,15 @@ void client_send_response(struct client *client, const char *oknobye, struct event_passthrough * client_command_create_finish_event(struct client_command_context *cmd) { + uint64_t bytes_in = i_stream_get_absolute_offset(cmd->client->input) - + cmd->stats.bytes_in; + uint64_t bytes_out = cmd->client->output->offset - cmd->stats.bytes_out; + struct event_passthrough *e = event_create_passthrough(cmd->event)-> - set_name("managesieve_command_finished"); + set_name("managesieve_command_finished")-> + add_int("net_in_bytes", bytes_in)-> + add_int("net_out_bytes", bytes_out); return e; } @@ -683,6 +689,8 @@ static bool client_handle_input(struct client_command_context *cmd) i_assert(!client->disconnected); event_add_str(cmd->event, "cmd_name", t_str_ucase(cmd->name)); + cmd->stats.bytes_in = i_stream_get_absolute_offset(client->input); + cmd->stats.bytes_out = client->output->offset; client_handle_input(cmd); } diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h index f674aa61820237f888fec3d03dd1a845a549e75d..a4032419a90cd40d4dec1bd5deb173531bd4757b 100644 --- a/src/managesieve/managesieve-client.h +++ b/src/managesieve/managesieve-client.h @@ -21,6 +21,10 @@ struct client_command_context { client sent them. */ const char *args; + struct { + uint64_t bytes_in; + uint64_t bytes_out; + } stats; command_func_t *func; void *context;