]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Track connections' last ping time
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 26 Oct 2017 11:07:56 +0000 (14:07 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 7 Nov 2017 19:12:49 +0000 (21:12 +0200)
src/director/director-connection.c
src/director/director-connection.h

index 600bbb9df4142dcc009c82b5381123102fb98aba..af8e8dcc0db879820bc839d6b98b47bf2e18e22e 100644 (file)
@@ -106,6 +106,9 @@ struct director_connection {
        struct timeval last_input, last_output;
        size_t peak_bytes_buffered;
 
+       struct timeval ping_sent_time;
+       unsigned int last_ping_msecs;
+
        /* for incoming connections the director host isn't known until
           ME-line is received */
        struct director_host *host;
@@ -1703,6 +1706,10 @@ static bool director_cmd_pong(struct director_connection *conn)
        conn->ping_waiting = FALSE;
        timeout_remove(&conn->to_pong);
 
+       int ping_msecs = timeval_diff_msecs(&ioloop_timeval, &conn->ping_sent_time);
+       if (ping_msecs >= 0)
+               conn->last_ping_msecs = ping_msecs;
+
        if (conn->verifying_left) {
                conn->verifying_left = FALSE;
                if (conn == conn->dir->left) {
@@ -2343,6 +2350,7 @@ void director_connection_ping(struct director_connection *conn)
                                    director_connection_pong_timeout, conn);
        director_connection_send(conn, "PING\n");
        conn->ping_waiting = TRUE;
+       conn->ping_sent_time = ioloop_timeval;
 }
 
 const char *director_connection_get_name(struct director_connection *conn)
@@ -2411,4 +2419,5 @@ void director_connection_get_status(struct director_connection *conn,
        status_r->peak_bytes_buffered = conn->peak_bytes_buffered;
        status_r->last_input = conn->last_input;
        status_r->last_output = conn->last_output;
+       status_r->last_ping_msecs = conn->last_ping_msecs;
 }
index b76a2e1bdc45ce57e182d9c0573c8f71ba7c722d..35a14b55436027824e8bb8872742aa8660bbc7d5 100644 (file)
@@ -5,6 +5,7 @@ struct director_connection_status {
        uoff_t bytes_read, bytes_sent;
        size_t bytes_buffered, peak_bytes_buffered;
        struct timeval last_input, last_output;
+       unsigned int last_ping_msecs;
 };
 
 struct director_host;