#!/usr/bin/perl

use v5.10;
use strict;
use Term::ANSIColor qw(:constants);
no warnings;

# Enable hot-piping
$|=1;

my $hostname=`hostname`;
chomp $hostname;

while (<>) {
    # Avoid hostname from logged message
    s#$hostname ##;

    # Avoid binary(pid) from logged message
    s#^(.*)\s+\S+kamailio\[\d+\]:\s+(.*)#[$1] $2#;

    # When printing $mb, kamailio logs this characters instead of \n
    s!#015!!g;
    s!#012!\n!g;

    # If '[<null>]', remove
    s!\[<null>\] !!g;

    # Print each message with its colour
    given ($_) {
        when (/(.*) ALERT: (.*)/) { say RED "$1 $2"; }
        when (/(.*) BUG: (.*)/) { say RED "$1 $2"; }
        when (/(.*) CRITICAL: (.*)/) { say RED "$1 $2"; }
        when (/(.*) ERROR: (.*)/) { say RED "$1 $2"; }
        when (/(.*) WARNING: (.*)/) { say YELLOW "$1 $2"; }
        when (/(.*) NOTICE: (.*log_write_cdr.*)/) { say BRIGHT_BLACK "$1 $2"; }
        when (/(.*) NOTICE: (.*acc_log_request.*)/) { say BRIGHT_BLUE "$1 $2"; }
        when (/(.*) NOTICE: (.*Related leg:.*)/) { say BLUE "$1 $2"; }
        when (/(.*) NOTICE: (\[\w+\] Request: .*)/) { say MAGENTA "$1 $2"; }
        when (/(.*) NOTICE: (\[\w+\] Response: .*)/) { say MAGENTA "$1 $2"; }
        when (/(.*) NOTICE: (.*)/) { say GREEN "$1 $2"; }
        when (/(.*) INFO: (.*)/) { say BRIGHT_BLACK "$1 $2"; }
        when (/(.*) DEBUG: (.*)/) { say CYAN "$1 $2"; }
        default { print WHITE $_; }
    }
}
