From: Steinar H. Gunderson Date: Sun, 16 Nov 2014 12:55:11 +0000 (+0100) Subject: Use AnyEvent instead of signals in varnishcount.pl as well, since it seems signals... X-Git-Url: https://git.sesse.net/?p=remoteglot;a=commitdiff_plain;h=7341e76ca62acf3b1d33a3d12cd4aefd1471fec9 Use AnyEvent instead of signals in varnishcount.pl as well, since it seems signals cause Perl segfaults. --- diff --git a/varnishcount.pl b/varnishcount.pl index 82356d6..1aa0e6f 100755 --- a/varnishcount.pl +++ b/varnishcount.pl @@ -1,21 +1,34 @@ #! /usr/bin/perl -use Time::HiRes; +use AnyEvent; +use AnyEvent::Handle; +use EV; use LWP::Simple; require 'config.pm'; use strict; use warnings; no warnings qw(once); -$SIG{ALRM} = sub { output(); }; -Time::HiRes::alarm(1.0, 1.0); - open my $fh, "-|", "varnishncsa -F '%{%s}t %U %q tffb=%{Varnish:time_firstbyte}x' -q 'ReqURL ~ \"^/analysis.pl\"'" or die "varnishncsa: $!"; my %uniques = (); -while (<$fh>) { - chomp; - m#(\d+) /analysis.pl \?ims=\d+&unique=(.*) tffb=(.*)# or next; +my $ev = AnyEvent->io( + fh => $fh, + poll => 'r', + cb => sub { + chomp (my $input = <$fh>); + handle_line($input); + } +); +my $ev2 = AnyEvent->timer( + interval => 1.0, + cb => \&output +); +EV::run; + +sub handle_line { + my $line = shift; + $line =~ m#(\d+) /analysis.pl \?ims=\d+&unique=(.*) tffb=(.*)# or return; $uniques{$2} = { last_seen => $1 + $3, grace => undef,