11 open my $fh, "-|", "varnishncsa -F '%{%s}t %U %q tffb=%{Varnish:time_firstbyte}x' -q 'ReqURL ~ \"^/analysis.pl\"'"
12 or die "varnishncsa: $!";
15 my $ev = AnyEvent->io(
19 chomp (my $input = <$fh>);
23 my $ev2 = AnyEvent->timer(
31 $line =~ m#(\d+) /analysis.pl \?ims=\d+&unique=(.*) tffb=(.*)# or return;
37 print "[$now] $1 $2 $3\n";
41 my $mtime = (stat($remoteglotconf::json_output))[9] - 1; # Compensate for subsecond issues.
44 while (my ($unique, $hash) = each %uniques) {
45 my $last_seen = $hash->{'last_seen'};
46 if ($now - $last_seen <= 5) {
47 # We've seen this user in the last five seconds;
51 if ($last_seen >= $mtime) {
52 # This user has the latest version;
53 # they are probably just hanging.
56 if (!defined($hash->{'grace'})) {
57 # They have five seconds after a new JSON has been
58 # provided to get get it, or they're out.
59 # We don't simply use $mtime, since we don't want to
60 # reset the grace timer just because a new JSON is
62 $hash->{'grace'} = $mtime;
64 if ($now - $hash->{'grace'} > 5) {
65 printf "Timing out %s (last_seen=%d, now=%d, mtime=%d, grace=%d)\n",
66 $unique, $last_seen, $now, $mtime, $hash->{'grace'};
67 delete $uniques{$unique};
71 my $num_viewers = scalar keys %uniques;
72 printf "%d entries in hash, mtime=$mtime\n", scalar keys %uniques;
73 LWP::Simple::get('http://127.0.0.1:5000/override-num-viewers?num=' . $num_viewers);