App-JsonLogUtils
view release on metacpan or search on metacpan
lib/App/JsonLogUtils.pm view on Meta::CPAN
package App::JsonLogUtils;
# ABSTRACT: Command line utilities for dealing with JSON-formatted log files
$App::JsonLogUtils::VERSION = '0.03';
use strict;
use warnings;
use Fcntl qw(:seek);
use Iterator::Simple qw(iterator iter igrep imap ichain);
use JSON::XS qw(decode_json encode_json);
use Time::HiRes qw(sleep);
use Term::SimpleColor;
use parent 'Exporter';
our @EXPORT_OK = qw(
lines
tail
json_log
json_cols
json_cut
json_grep
);
#-------------------------------------------------------------------------------
# Internal utilities
#-------------------------------------------------------------------------------
sub log_warn { warn red, @_, default, "\n" }
sub log_info { warn yellow, @_, default, "\n" }
sub _open {
my $path = shift || return;
return $path if ref $path;
open(my $fh, '<', $path) || return do{
log_warn $!;
return;
};
return $fh;
}
sub lines ($) {
my $path = shift;
my $fh = _open($path) || return iter([]);
imap{ chomp $_; $_ } iter $fh;
}
sub tail ($) {
my $path = shift;
my $fh = _open($path) || return iter([]);
my $pos = 0;
my $stop = 0;
seek $fh, 0, SEEK_END;
$pos = tell $fh;
$SIG{INT} = sub{
log_info 'Stopped';
$stop = 1;
};
iterator{
LINE:do{
# Check for control-c
( run in 0.613 second using v1.01-cache-2.11-cpan-39bf76dae61 )