}
# Unicode::Collate is seemingly slow, so add a cache for each name part
-# (which, of course, only works for equality).
-# Doesn't seem to help the initial one, though; I guess not enough people
-# have the same names.
+# (which, of course, only works for equality). Helps especially in
+# --daemon mode, where even the first request gets a warm cache.
my %sort_key_cache = ();
my $sort_key_sp = $uca->getSortKey(' ');
if (scalar @$ap >= 2 && scalar @bp >= 2 && $ap->[0] eq $bp[0]) {
# First name matches, try to match some surname
my $found = 0;
- for my $ai (1..(scalar @$ap)) {
+ for my $ai (1..(scalar @$ap - 1)) {
for my $bi (1..$#bp) {
$found = 1 if ($ap->[$ai] eq $bp[$bi]);
}
}
}
}
- log_timing($start, "Fuzzy-searching for Slack name “$slack_name”");
+ log_timing($start, "Fuzzy-searching for Slack name $slack_name");
if ($#candidates == -1) {
skv_log("$slack_name ($userid) er påmeldt på Slack, men fant ikke et regneark-navn for dem.");
possibly_nag_user($dbh, $ua, $userid, $invitation_ts, undef, \%slack_userid_to_slack_name);
my $elapsed = Time::HiRes::tv_interval($total_start);
printf "Tok %.0f ms.\n", 1e3 * $elapsed;
+ print "\n";
}
# Initialize the handles we need for communication.
run($dbh, $ua);
while (1) {
- while (!defined($dbh)) {
+ while (!defined($dbh) || !$dbh->ping) {
print STDERR "Database connection lost, reconnecting...\n";
sleep 1;
$dbh = db_connect();
}
my $s = IO::Select->new($dbh->{pg_socket});
- my @ready = $s->can_read(10.0);
+ my @ready = $s->can_read(150.0); # slack.com HTTP timeout is ~3 minutes, sheets.googleapis.com is ~4 minutes.
my @exceptions = $s->has_exception(0.0);
if (scalar @exceptions > 0) {
warn "Died with: $@";
$dbh = undef;
}
+ } else {
+ # Keep the connections alive and the token in the database fresh.
+ # (The two URLs we use don't really exist. Note that the first time,
+ # we might be making the initial connection to slack.com, since it's
+ # not a given that run() needed to talk to them.)
+ get_oauth_bearer_token($dbh, $ua);
+ $dbh->commit;
+ #my $start = [Time::HiRes::gettimeofday];
+ $ua->get('https://sheets.googleapis.com/ping');
+ #log_timing($start, 'sheets.googleapis.com (keepalive)');
+ #$start = [Time::HiRes::gettimeofday];
+ $ua->get('https://slack.com/api/ping');
+ #log_timing($start, 'slack.com (keepalive)');
+ #print STDERR "\n";
}
}
} elsif ($#ARGV >= 0 && $ARGV[0] eq '--benchmark') {