#!/usr/bin/env perl =pod =head1 NAME commandlog-log - show commandlog history =head1 SYNOPSIS # Get most recent log entries: commandlog log # Get the 100 most recent log entries: commandlog log -n 100 # Get all log entries: commandlog log -n 0 # Get entries for January 1st (this is crap and needs work): commandlog log --after="2019-01-01 00:00:00" --before="2019-01-02 00:00:00" # Get entries for the current directory: commandlog log --path . # Run some query with debugging output enabled: commandlog log --debug [...] =head1 AUTHOR Brennen Bearnes =cut use warnings; use strict; use 5.10.0; use Cwd; use Data::Dumper; use DBI; use File::Spec; use Getopt::Long; use Pod::Usage; use SQL::Abstract; use Sys::Hostname; use App::CommandLog; # Handle options, including help generated from the POD above. my $debug = 0; my $limit; my $before_date; my $after_date; my $path; GetOptions( 'debug' => \$debug, 'number=s' => \$limit, 'before=s' => \$before_date, 'after=s' => \$after_date, 'path=s' => \$path, 'help' => sub { pod2usage(0) }, ) or pod2usage(2); unless (defined $limit) { unless ($before_date || $after_date) { $limit = 10; } } my %where = (); if (length($after_date) && length($before_date)) { # We have both a start and an endpoint. $where{datetime} = [ '-and' => { '>', $after_date }, { '<', $before_date } ]; } elsif (length($after_date)) { # Just a starting point. $where{datetime} = { '>', $after_date }; } elsif (length($before_date)) { # Just an ending point. $where{datetime} = { '<', $before_date }; } if (defined $path) { # Resolve stuff like ".", "..", etc.: my $abs_path = File::Spec->rel2abs($path); $where{path} = { '=', $abs_path }; } my $limit_clause = ''; if ($limit) { $limit_clause = sprintf(' LIMIT %d', $limit); } my $dbfile = $ENV{HOME} . "/cli.db"; my $dbh = App::CommandLog::get_dbh($dbfile); my $sql = SQL::Abstract->new; my ($query, @bind) = $sql->select( 'commands', '*', \%where, {-desc => 'datetime'} ); if ($debug) { say STDERR $query . $limit_clause; say STDERR Dumper(%where); say STDERR Dumper(@bind); } my $sth = $dbh->prepare($query . $limit_clause); $sth->execute(@bind); while (my $data = $sth->fetchrow_hashref()) { say join "\t", $data->{id}, $data->{datetime}, $data->{command}; } $sth->execute();