App-Spoor
view release on metacpan or search on metacpan
bin/spoor_log_follower view on Meta::CPAN
my $file = File::Tail->new(
name=> $follower_config->{name},
tail=> $follower_config->{tail},
maxinterval=> $follower_config->{maxinterval},
debug=> $follower_config->{debug}
);
while (defined(my $entry=$file->read)) {
print("$entry\n");
# TODO This is tainted
if ($log_type eq 'login') {
$parsed_entry_ref = App::Spoor::LoginEntryParser::parse($entry);
} elsif ($log_type eq 'access') {
$parsed_entry_ref = App::Spoor::AccessEntryParser::parse($entry);
} elsif ($log_type eq 'error') {
$parsed_entry_ref = App::Spoor::ErrorEntryParser::parse($entry);
}
App::Spoor::ParsedEntryWriter::write_parsed_entry(
$parsed_entry_ref,
lib/App/Spoor/ParsedFileManager.pm view on Meta::CPAN
my $config = shift;
my $file_security_check = shift;
my $transmitter = shift;
my ($source_file_path, $file_contents);
opendir my $parsed_entries_dir, $config->{parsed_entries_path};
my @file_names = grep { /\A((error|access|login)\.\d+\.\d+\.json)\z/ } readdir $parsed_entries_dir;
foreach my $file_name (@file_names) {
# Untaint
if ($file_name =~ /\A((error|access|login)\.\d+\.\d+\.json)\z/) {
my $sanitised_file_name = $1;
$source_file_path = File::Spec->catfile($config->{parsed_entries_path}, $sanitised_file_name);
if ($file_security_check->($source_file_path)) {
$file_contents = from_json(path($source_file_path)->slurp_utf8());
if ($transmitter->($file_contents)) {
move($source_file_path, $config->{transmitted_entries_path});
} else {
move($source_file_path, $config->{transmission_failed_entries_path});
( run in 1.250 second using v1.01-cache-2.11-cpan-d6f9594c0a5 )