9 $SIG{ALRM} = sub { output(); };
10 Time::HiRes::alarm(1.0, 1.0);
12 open my $fh, "-|", "varnishncsa -F '%{%s}t %U %q tffb=%{Varnish:time_firstbyte}x' -q 'ReqURL ~ \"^/analysis.pl\"'"
13 or die "varnishncsa: $!";
18 m#(\d+) /analysis.pl \?ims=\d+&unique=(.*) tffb=(.*)# or next;
24 print "[$now] $1 $2 $3\n";
28 my $mtime = (stat($remoteglotconf::json_output))[9] - 1; # Compensate for subsecond issues.
31 while (my ($unique, $hash) = each %uniques) {
32 my $last_seen = $hash->{'last_seen'};
33 if ($now - $last_seen <= 5) {
34 # We've seen this user in the last five seconds;
38 if ($last_seen >= $mtime) {
39 # This user has the latest version;
40 # they are probably just hanging.
43 if (!defined($hash->{'grace'})) {
44 # They have five seconds after a new JSON has been
45 # provided to get get it, or they're out.
46 # We don't simply use $mtime, since we don't want to
47 # reset the grace timer just because a new JSON is
49 $hash->{'grace'} = $mtime;
51 if ($now - $hash->{'grace'} > 5) {
52 printf "Timing out %s (last_seen=%d, now=%d, mtime=%d, grace=%d)\n",
53 $unique, $last_seen, $now, $mtime, $hash->{'grace'};
54 delete $uniques{$unique};
58 my $num_viewers = scalar keys %uniques;
59 printf "%d entries in hash, mtime=$mtime\n", scalar keys %uniques;
60 LWP::Simple::get('http://127.0.0.1:5000/override-num-viewers?num=' . $num_viewers);