# HG changeset patch # User Timo Sirainen # Date 1509012450 -10800 # Node ID bcb064465b5458ce7ac8f28fa096b7c8ce5e233d # Parent 989dcf906522f9195ec505eb4fa9717c846fadda director: Add director_connection_get_status() Can be used to access connection-specific status information. diff -r 989dcf906522 -r bcb064465b54 src/director/director-connection.c --- a/src/director/director-connection.c Thu Oct 26 13:02:32 2017 +0300 +++ b/src/director/director-connection.c Thu Oct 26 13:07:30 2017 +0300 @@ -104,6 +104,7 @@ unsigned int minor_version; struct timeval last_input, last_output; + size_t peak_bytes_buffered; /* for incoming connections the director host isn't known until ME-line is received */ @@ -2300,6 +2301,9 @@ } else { conn->dir->ring_traffic_output += len; conn->last_output = ioloop_timeval; + conn->peak_bytes_buffered = + I_MAX(conn->peak_bytes_buffered, + o_stream_get_buffer_used_size(conn->output)); } } @@ -2396,3 +2400,15 @@ director_connection_set_ping_timeout(conn); } + +void director_connection_get_status(struct director_connection *conn, + struct director_connection_status *status_r) +{ + i_zero(status_r); + status_r->bytes_read = conn->input->v_offset; + status_r->bytes_sent = conn->output->offset; + status_r->bytes_buffered = o_stream_get_buffer_used_size(conn->output); + status_r->peak_bytes_buffered = conn->peak_bytes_buffered; + status_r->last_input = conn->last_input; + status_r->last_output = conn->last_output; +} diff -r 989dcf906522 -r bcb064465b54 src/director/director-connection.h --- a/src/director/director-connection.h Thu Oct 26 13:02:32 2017 +0300 +++ b/src/director/director-connection.h Thu Oct 26 13:07:30 2017 +0300 @@ -1,6 +1,12 @@ #ifndef DIRECTOR_CONNECTION_H #define DIRECTOR_CONNECTION_H +struct director_connection_status { + uoff_t bytes_read, bytes_sent; + size_t bytes_buffered, peak_bytes_buffered; + struct timeval last_input, last_output; +}; + struct director_host; struct director; @@ -31,4 +37,7 @@ void director_connection_cork(struct director_connection *conn); void director_connection_uncork(struct director_connection *conn); +void director_connection_get_status(struct director_connection *conn, + struct director_connection_status *status_r); + #endif