Skip to content

Instantly share code, notes, and snippets.

@akagisho
Created June 16, 2020 00:01
Show Gist options
  • Save akagisho/e97eddcea37c6715f9866680ab6371ab to your computer and use it in GitHub Desktop.
Save akagisho/e97eddcea37c6715f9866680ab6371ab to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use warnings;
use strict;
my $msg = {};
my $delivery = {};
while (<>) {
if ($_ =~ /^([^\s]+) info msg ([\d]+): bytes [\d]+ from ([^\s]+)/) {
my $time = $1;
my $msg_id = $2;
my $from = $3;
$from =~ s/[<>]//g;
$msg->{$msg_id}->{time} = $time;
$msg->{$msg_id}->{from} = $from;
$msg->{$msg_id}->{delivery_id} = [];
}
elsif ($_ =~ /^([^\s]+) starting delivery ([\d]+): msg ([\d]+) to (local|remote) ([^\s]+)$/) {
my $delivery_id = $2;
my $msg_id = $3;
my $type = $4;
my $to = $5;
$delivery->{$delivery_id}->{msg_id} = $msg_id;
$delivery->{$delivery_id}->{type} = $type;
$delivery->{$delivery_id}->{to} = $to;
push(@{$msg->{$msg_id}->{delivery_id}}, $delivery_id);
}
elsif ($_ =~ /^([^\s]+) delivery ([\d]+): ([^\s]+): (.*)$/) {
my $time = $1;
my $delivery_id = $2;
my $status = $3;
my $detail = $4;
if (!defined $delivery->{$delivery_id}) { next; }
my $msg_id = $delivery->{$delivery_id}->{msg_id};
my @data = (
$time,
$msg_id,
$msg->{$msg_id}->{from},
$delivery_id,
$delivery->{$delivery_id}->{type},
$delivery->{$delivery_id}->{to},
$status,
$detail
);
print join("\t", @data) . "\n";
}
elsif ($_ =~ /^([^\s]+) end msg ([\d]+)$/) {
my $msg_id = $2;
if (!defined $msg->{$msg_id}) { next; }
foreach my $delivery_id (@{$msg->{$msg_id}->{delivery_id}}) {
undef $delivery->{$delivery_id};
}
undef $msg->{$msg_id};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment