#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;

# pt-query-digest --no-report --sample=1 --filter
# date -d '2016-03-30 17:40' +%s
# my $evt_ok = 0; if ($event->{Lock_time} > 10.0 && $event->{timestamp} > 1458138600 && $event->{timestamp} < 1458139200) { print Dumper $event; print "\n"; $evt_ok = 1 }; $evt_ok

if (scalar @ARGV == 0 || $ARGV[0] =~ /help/) {
    print "Usage: $0 --start <start_time>, --stop <stop_time> --filter <perl filter code> --printer <perl printer code> -- <other pt-query-digest options>\n";
    print "Example:\n" . q(pt-query-filter --start 16:10 --stop 16:30 --filter '$event->{Query_time} && $event->{Query_time} > 10.0 && $event->{arg} =~ /^DELETE/i' --printer 'print join " ", map { $_ ? $_ : "undef" } $event->{ts}, $event->{Query_time}, $event->{Lock_time}, $event->{fingerprint}; print "\n"' -- --no-report --sample=1 mysql-slow.log | cut -c1-100) . "\n";
    exit 1;
}

my ($start, $stop, $filter, $printer);
GetOptions('start=s' => \$start, # a little easier than pt-query-digest --since
           'stop=s' => \$stop,
           'filter=s' => \$filter,
           'printer=s' => \$printer);

(my $start_ts = qx(date -d '$start' +%s)) =~ s/\D+//g;
(my $stop_ts = qx(date -d '$stop' +%s)) =~ s/\D+//g;

my $filter_filename = "/tmp/pt-query-filter.$$";
open(my $fh, '>', $filter_filename);
printf $fh 'my $evt_ok = 0; if ( (%s) && $event->{timestamp} > %d && $event->{timestamp} < %d) { %s; $evt_ok = 1 }; $evt_ok', ($filter, $start_ts, $stop_ts, $printer);
close($fh);

my $cmd = join " ", "pt-query-digest --filter $filter_filename", @ARGV;
system($cmd);

unlink $filter_filename;
