]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Add director_connection_get_status()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 26 Oct 2017 10:07:30 +0000 (13:07 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 7 Nov 2017 19:12:42 +0000 (21:12 +0200)
Can be used to access connection-specific status information.

src/director/director-connection.c
src/director/director-connection.h

index 461cf0388bfbf32d8a15c9b6ee179c58bac4971f..600bbb9df4142dcc009c82b5381123102fb98aba 100644 (file)
@@ -104,6 +104,7 @@ struct director_connection {
        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 @@ void director_connection_send(struct director_connection *conn,
        } 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 @@ void director_connection_set_synced(struct director_connection *conn,
 
        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;
+}
index 03c954a88a2ee2cd6563ef68ffff4bda23b6111a..b76a2e1bdc45ce57e182d9c0573c8f71ba7c722d 100644 (file)
@@ -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 @@ director_connection_get_minor_version(struct director_connection *conn);
 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