changeset 22628:8623737c0129

director: Track connections' last ping time
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 26 Oct 2017 14:07:56 +0300
parents bcb064465b54
children 0281041d5067
files src/director/director-connection.c src/director/director-connection.h
diffstat 2 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/director/director-connection.c	Thu Oct 26 13:07:30 2017 +0300
+++ b/src/director/director-connection.c	Thu Oct 26 14:07:56 2017 +0300
@@ -106,6 +106,9 @@
 	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 @@
 	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 @@
 				    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 @@
 	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;
 }
--- a/src/director/director-connection.h	Thu Oct 26 13:07:30 2017 +0300
+++ b/src/director/director-connection.h	Thu Oct 26 14:07:56 2017 +0300
@@ -5,6 +5,7 @@
 	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;