package AN::Tools::System; # # This module contains methods used to handle common system tasks. # use strict; use warnings; use Data::Dumper; our $VERSION = "3.0.0"; my $THIS_FILE = "System.pm"; ### Methods; # call =pod =encoding utf8 =head1 NAME AN::Tools::System Provides all methods related to storage on a system. =head1 SYNOPSIS use AN::Tools; # Get a common object handle on all AN::Tools modules. my $an = AN::Tools->new(); # Access to methods using '$an->System->X'. # # Example using 'system_call()'; my $hostname = $an->System->call({shell_call => $an->data->{path}{exe}{hostname}}); =head1 METHODS Methods in this module; =cut sub new { my $class = shift; my $self = {}; bless $self, $class; return ($self); } # Get a handle on the AN::Tools object. I know that technically that is a sibling module, but it makes more # sense in this case to think of it as a parent. sub parent { my $self = shift; my $parent = shift; $self->{HANDLE}{TOOLS} = $parent if $parent; return ($self->{HANDLE}{TOOLS}); } ############################################################################################################# # Public methods # ############################################################################################################# =head2 call This method makes a system call and returns the output (with the last new-line removed). If there is a problem, 'C<< #!error!# >>' is returned and the error will be logged. =cut sub call { my $self = shift; my $parameter = shift; my $an = $self->parent; my $shell_call = defined $parameter->{shell_call} ? $parameter->{shell_call} : ""; $an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { shell_call => $shell_call }}); my $output = "#!error!#"; if (not $shell_call) { # wat? $an->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0043"}); } else { # Make the system call $an->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0011", variables => { shell_call => $shell_call }}); open (my $file_handle, $shell_call." 2>&1 |") or $an->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0014", variables => { shell_call => $shell_call, error => $! }}); while(<$file_handle>) { chomp; my $line = $_; if ($output eq "#!error!#") { $output = ""; } $an->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0017", variables => { line => $line }}); $output .= $line."\n"; } close $file_handle; $output =~ s/\n$//s; } $an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { output => $output }}); return($output); } # =head3 # # Private Functions; # # =cut ############################################################################################################# # Private functions # ############################################################################################################# 1;