App-JsonLogUtils

 view release on metacpan or  search on metacpan

bin/jshell  view on Meta::CPAN

#!perl
# ABSTRACT: an interactive shell for monitoring JSON log files
# PODNAME: jshell

use strict;
use warnings;

$0 = 'jshell';

use Getopt::Long;
use Pod::Usage;
use List::Util qw(max);
use Term::SimpleColor;
use Term::SimpleColor qw(:background);
use Term::ReadLine;
use Iterator::Simple qw(iterator igrep imap);
use App::JsonLogUtils qw(lines tail json_log);

#-------------------------------------------------------------------------------
# Parse command line options
#-------------------------------------------------------------------------------
my $help = 0;
my $path;

GetOptions(
  'help'   => \$help,
  'path=s' => \$path,
) or pod2usage(2);

do{ pod2usage 1; exit 0; } if $help;

#-------------------------------------------------------------------------------
# Set up global environment
#-------------------------------------------------------------------------------
my $default_prompt = green . '$ ' . default ;
my $prompt = $default_prompt;
my $term = Term::ReadLine->new('jshell');
my (@fields, %match, %skip);

#-------------------------------------------------------------------------------
# Utilities
#-------------------------------------------------------------------------------
sub out { print { $term->OUT } @_, default, "\n" }
sub set_prompt { $prompt = shift || $default_prompt }

#-------------------------------------------------------------------------------
# Iterators
#-------------------------------------------------------------------------------
sub filtered {
  my $json = shift;

  return igrep{
    my ($obj, $line) = @$_;

    foreach my $key (keys %match) {
      foreach my $pattern (@{ $match{$key} }) {
        return unless ($obj->{$key} || '') =~ /$pattern/;
      }
    }

    foreach my $key (keys %skip) {
      foreach my $pattern (@{ $skip{$key} }) {
        return unless ($obj->{$key} || '') !~ /$pattern/;
      }
    }

    return 1;
  } $json;
}

sub formatted {
  my $filtered = shift;

  imap{



( run in 2.501 seconds using v1.01-cache-2.11-cpan-d8267643d1d )