#!/usr/bin/perl
#
# fslog
#
# colorizes output according to FS console log colors
#

use strict;
use warnings;
use Term::ANSIColor qw(:constants);;
$|++;

if ( $ARGV[0] && $ARGV[0] =~ m/--?h/i ) {
    &usage;
    exit(0);
} elsif ( $ARGV[0] && ! -f $ARGV[0] ) {
    die "File not found: $ARGV[0]\n";
}

my $color_map = {
    '[DEBUG]'   => YELLOW,
    '[INFO]'    => GREEN,
    '[NOTICE]'  => CYAN,
    '[WARNING]' => MAGENTA,
    '[ERR]'     => RED,
    '[CRIT]'    => RED,
    '[ALERT]'   => RED,
};

$SIG{INT} = sub { print RESET; };

while(<>) {
    #print "Current line is: '$_'\n";
    if ( m/(\[(DEBUG|INFO|NOTICE|WARNING|ERR|CRIT|ALERT)\])/ ) {
        print $color_map->{"$1"},$_,RESET;
    } else {
        print YELLOW,$_,RESET;
    }
}

print RESET;

sub usage {
  print <<EOT

  fslog reader

  Feed me a FreeSWITCH log file and I will colorize the output
    fslog freeswitch.log
    -OR-
    grep foo freeswitch.log | fslog | more

  NOTE: some versions of more and less do not support colorized text.

EOT
}