3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-20 02:49:49 +01:00

lagchecker: include elapsed time from last ping sent in average if no pong yet received

This commit is contained in:
Pragmatic Software 2011-12-11 23:33:01 +00:00
parent 44ba3001cb
commit 60ad02c9af
2 changed files with 18 additions and 2 deletions

View File

@ -47,6 +47,7 @@ sub initialize {
$self->{lag_average} = undef; # average of entries in lag history, in seconds $self->{lag_average} = undef; # average of entries in lag history, in seconds
$self->{lag_string} = undef; # string representation of lag history and lag average $self->{lag_string} = undef; # string representation of lag history and lag average
$self->{lag_history} = []; # history of previous PING/PONG timings $self->{lag_history} = []; # history of previous PING/PONG timings
$self->{pong_received} = undef; # tracks pong replies; undef if no ping sent; 0 if ping sent but no pong reply yet; 1 if ping/pong completed
$pbot->timer->register(sub { $self->send_ping }, $self->{LAG_HISTORY_INTERVAL}); $pbot->timer->register(sub { $self->send_ping }, $self->{LAG_HISTORY_INTERVAL});
@ -59,13 +60,15 @@ sub send_ping {
return unless defined $self->{pbot}->conn; return unless defined $self->{pbot}->conn;
$self->{ping_send_time} = [gettimeofday]; $self->{ping_send_time} = [gettimeofday];
$self->{pong_received} = 0;
$self->{pbot}->conn->sl("PING :lagcheck"); $self->{pbot}->conn->sl("PING :lagcheck");
# $self->{pbot}->logger->log("sent lagcheck PING\n");
} }
sub on_pong { sub on_pong {
my $self = shift; my $self = shift;
$self->{pong_received} = 1;
my $elapsed = tv_interval($self->{ping_send_time}); my $elapsed = tv_interval($self->{ping_send_time});
push @{ $self->{lag_history} }, [ $self->{ping_send_time}[0], $elapsed ]; push @{ $self->{lag_history} }, [ $self->{ping_send_time}[0], $elapsed ];
@ -96,6 +99,19 @@ sub on_pong {
sub lagging { sub lagging {
my $self = shift; my $self = shift;
if(defined $self->{pong_received} and $self->{pong_received} == 0) {
# a ping has been sent (pong_received is not undef) and no pong has been received yet
my $elapsed = tv_interval($self->{ping_send_time});
my $lag_total = $elapsed;
my $len = @{ $self->{lag_history} };
foreach my $entry (@{ $self->{lag_history} }) {
my ($send_time, $lag_result) = @{ $entry };
$lag_total += $lag_result;
}
my $average = $lag_total / ($len + 1);
return $average >= $self->{LAG_THRESHOLD};
}
return 0 if not defined $self->{lag_average}; return 0 if not defined $self->{lag_average};
return $self->{lag_average} >= $self->{LAG_THRESHOLD}; return $self->{lag_average} >= $self->{LAG_THRESHOLD};
} }

View File

@ -13,7 +13,7 @@ use warnings;
# These are set automatically by the build/commit script # These are set automatically by the build/commit script
use constant { use constant {
BUILD_NAME => "PBot", BUILD_NAME => "PBot",
BUILD_REVISION => 326, BUILD_REVISION => 327,
BUILD_DATE => "2011-12-11", BUILD_DATE => "2011-12-11",
}; };