RSS Git Download  Clone
Raw Blame History
package LogReport;

=begin # from:
http://search.cpan.org/~markov/Log-Report-1.12/lib/Log/Report.pod#The_Reason_for_the_report

program keywords----------------------------------------------------------------
. trace (debug, program)
    The message will be used when some logger has debugging enabled. The messages
	show steps taken by the program, which are of interest to the developers and
	maintainers of the code, but not for end-users.

. assert (program)
    Shows an unexpected condition, but continues to run. When you want the program
	to abort in such situation, use panic.

. info (verbose, program)
    These messages show larger steps in the execution of the program. Experienced
	users of the program usually do not want to see all these intermediate steps.
	Most programs will display info messages (and higher) when some verbose flag
	is given on the command-line.

. notice (program)
    An user may need to be aware of the program's accidental smart behavior, for
	instance, that it initializes a lasting Desktop directory in your home directory.
	Notices should be sparse.

. warning (program)
    The program encountered some problems, but was able to work around it by smart
	behavior. For instance, the program does not understand a line from a log-file,
	but simply skips the line.

. panic (program)
    All other report classes are expected: some predictable situation is encountered,
	and therefore a message is produced. However, programs often do some internal
	checking. Of course, these conditions should never be triggered, but if they
	do... then we can only stop. For instance, in an OO perl module, the base
	class requires all sub-classes to implement a certain method. The base class
	will produce a stub method which triggers a panic when called. The non-dieing
	version of this test is assert.

user keywords-------------------------------------------------------------------
. mistake (user)
    When a user does something wrong, but is correctable by smart behavior of
	the program. For instance, in some configuration file, you can fill-in "yes" or
	"no", but the user wrote "yeah". The program interprets this as "yes", producing
	a mistake message as warning. It is much nicer to tell someone that he/she made
	a mistake, than to call that an error.

. error (user)
    The user did something wrong, which is not automatically correctable or the
	program is not willing to correct it automatically for reasons of code quality.
	For instance, an unknown option flag is given on the command-line. These are
	configuration issues, and have no useful value in $!. The program will be
	stopped, usually before taken off (??).

system keywords-----------------------------------------------------------------
. fault (system)
    The program encountered a situation where it has no work-around. For instance,
	a file cannot be opened to be written. The cause of that problem can be some
	user error (i.e. wrong filename), or external (you accidentally removed a
	directory yesterday). In any case, the $! ($ERRNO) variable is set here.

. alert (system)
    Some external cause disturbs the execution of the program, but the program
	stays alive and will try to continue operation. For instance, the connection
	to the database is lost. After a few attempts, the database can be reached
	and the program continues as if nothing happened. The cause is external, so $!
	is set. Usually, a system administrator needs to be informed about the problem.

. failure (system)
    Some external cause makes it impossible for this program to continue. $! is
	set, and usually the system administrator wants to be informed. The program
	will die. The difference with fault is subtle and not always clear. A fault
	reports an error returned by an operating system call, where the failure would
	report an operational problem, like a failing mount.
=cut

use Log::Report ();

use Data::Dumper;
use Data::Printer colored => 1; # for np() output

use Dancer2;
use Dancer2::Plugin::LogReport;
use Model;

our $VERSION = '0.1';

hook before => sub { # trace 'before hook';
	my $vars = params; # p $vars if setting('environment') eq 'development';
	trace np($vars); # does same as above - uses LogReport 'mode' config setting

};
hook before_template => sub { # trace 'before_template hook';
	# p session;
};

get '/' => sub { template 'index', {}, { layout => 'index' } };

get '/test' => sub { template 'test' };

get '/update' => sub {
	# Log a debug message (console only):
	trace 'started function update()';

    my %values = (
		description => param('description'),
		title       => param('title'),
    );
    # if ( Model->update(\%values) ) { # relies on return value; error redirects to '/'
    if ( process sub { Model->update(\%values) } ) { # doesn't need return value & avoids redirect
	    success 'Success: update OK'; # console and tt output
	}
    else { # only get here if process() used above, otherwise error in update redirects to '/'
        # warning "update failed"; # don't need this - it's set in update()
    }

    notice 'about to render template ....';
  	template 'test';
};

get '/success' => sub { # console and tt output
    # Send a routine notice to the end user
	my $msg = Model->messages('success');
    success $msg;
  	template 'test';
};

get '/notice' => sub { # console and tt output
    # Send a routine notice to the end user
	my $msg = Model->messages('notice');
    notice $msg; # p config;
  	template 'test';
};

get '/mistake' => sub { # console and tt output
	# Warn the user (not fatal)
	my $msg = Model->messages('mistake');
	mistake $msg;
  	template 'test';
};

get '/assert' => sub { # console only, no tt output
	my $msg = Model->messages('assert');
	# assert $msg; # reports wrong line
    report ASSERT => $msg; # reports *this* line,
  	template 'test';
};

get '/info' => sub { # console only, no tt output
	my $msg = Model->messages('info');
    info $msg;
  	template 'test';
};

get '/warning' => sub { # console and tt output
	my $msg = Model->messages('warning');
    warning $msg;
  	template 'test';
};

# 'FAULT', 'ALERT', 'FAILURE', 'PANIC' all fatal errors:
get '/error' => sub { # redirects to '/'
	my $msg = Model->messages('error');
	error $msg; template 'test';
};
get '/alert' => sub { # redirects to '/'
	my $msg = Model->messages('alert');
    alert $msg; template 'test';
};
get '/panic' => sub { # redirects to '/'
	my $msg = Model->messages('panic');
	panic $msg; template 'test';
};
get '/fault' => sub { # redirects to '/'
	my $msg = Model->messages('fault');
    fault $msg; template 'test';
};
get '/failure' => sub { # redirects to '/'
	my $msg = Model->messages('failure');
    failure $msg; template 'test';
};

true;