The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

XAS::Lib::App - The base class to write procedures within the XAS environment

SYNOPSIS

 use XAS::Lib::App;

 my $app = XAS::Lib::App->new();

 $app->run();

DESCRIPTION

This module defines a base class for writing procedures. It provides signal handling, options processing, along with a exit handler.

METHODS

new

This method initializes the module. It inherits from XAS::Base and takes these additional parameters:

-throws

This changes the default error message from "changeme" to something useful.

-facility

This will change the facility of the alert. The default is 'systems'.

-priority

This will change the priority of the alert. The default is 'low'.

run

This method sets up a global exception handler and calls main(). The main() method will be passed one parameter: an initialized handle to this class.

Example

    sub main {
        my $self = shift;

        $self->log->debug('in main');

    }
Exception Handling

If an exception is caught, the global exception handler will send an alert, write the exception to the log and returns an exit code of 1.

Normal Completion

When the procedure completes successfully, it will return an exit code of 0.

To change this behavior you would need to override the exit_handler() method.

main

This is where your main line logic starts.

options

This method sets up additional cli options. Option handling is provided by Getopt::Long. To access these options you need to define accessors for them.

  Example

    use XAS::Class
      version   => '0.01',
      base      => 'XAS::Lib::App',
      accessors => 'widget'
    ;

    sub main {
        my $self = shift;

        $self->log->info('starting up');
        sleep(60);
        $self->log->info('shutting down');

    }

    sub options {
        my $self = shift;

        return {
            'widget=s' => sub {
                $self->{widget} = uc($_[1]);
            }
        };

    }

define_signals

This method sets up basic signal handling. By default this is only for the INT and QUIT signals.

Example

    sub define_signals {
        my $self = shift;

        $SIG{INT}  = \&signal_handler;
        $SIG{QUIT} = \&singal_handler;

    }

define_pidfile

This is an entry point to define a pid file.

define_daemon

This is an entry point so the procedure can daemonize.

signal_handler($signal)

This method is a default signal handler. By default it throws an exception. It takes one parameter.

$signal

The signal that was captured.

OPTIONS

This module handles the following command line options.

--facility

Defines the facility to use. Defaults to 'systems'. This will override the class parameter.

--priority

Defines the priority to use. Defaults to 'low'. This will override the class parameter.

--debug

This toggles debugging output.

--[no]alerts

This toggles sending alerts. They are on by default.

--help

This prints out a short help message based on the procedures pod.

--manual

This displaces the procedures manual in the defined pager.

--version

This prints out the version of the module.

--log-type

What type of log to use. By default the log is displayed on the console. Log types can be one of the following "console", "file", "json" or "syslog".

--log-facility

What log facility class to use. This follows syslog convention. By default the facility is "local6".

--log-file

The name of the log file. When --logfile is specified, it implies a log type of "file".

SEE ALSO

XAS::Lib::App::Daemon
XAS::Lib::App::Service
XAS::Lib::App::Service::Unix
XAS::Lib::App::Service::Win32
XAS

AUTHOR

Kevin L. Esteb, <kevin@kesteb.us>

COPYRIGHT AND LICENSE

Copyright (c) 2012-2015 Kevin L. Esteb

This is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0. For details, see the full text of the license at http://www.perlfoundation.org/artistic_license_2_0.