App-FastishCGI

 view release on metacpan or  search on metacpan

lib/App/FastishCGI.pm  view on Meta::CPAN

package App::FastishCGI;
{
    $App::FastishCGI::VERSION = '0.002';
}

use strict;
use warnings;

# ABSTRACT: provide CGI support to webservers which don't have it

use AnyEvent;
use AnyEvent::Handle;
use AnyEvent::FCGI;

use Data::Dumper;
use File::Basename;
use IPC::Open3 qw//;
use IO::Handle;
use Sys::Syslog;
use Carp;

# TODO optionally use an existing CPAN mod to daemonise for
# systems that don't use systemd or upstart

sub shutdown_signal {
    my ( $self, $SIG ) = @_;
    $self->log_info( sprintf 'Received SIG%s. Shutting down after handling %d requests',
        $SIG, $self->{requests_total} );
    exit;
}

sub set_signal_handlers {
    my ($self) = @_;

    $self->{sigint} =
      AnyEvent->signal( signal => "INT", cb => sub { $self->shutdown_signal('INT') } );
    $self->{sigterm} =
      AnyEvent->signal( signal => "TERM", cb => sub { $self->shutdown_signal('TERM') } );
}

sub log_error {
    my ( $self, $err_str, $req ) = @_;

    if ( $self->{stderr} && defined $req ) {
        $req->print_stderr($err_str);
    }

    syslog( 'err', $err_str );
    return;
}

sub log_info {
    syslog( 'info', $_[1] );
    return;
}

sub log_die {
    syslog( 'crit', $_[0] );
    croak $_[0];
}

sub log_debug {
    my ( $self, $err_str ) = @_;
    if ( $self->{debug} ) {
        printf STDERR "[%s] %s - %s\n", $$, time, $err_str;
    }
    return;
}

sub html_error {
    my ( $self, $req, $err_str, $output ) = @_;

    $self->log_error( $err_str, $req );

    my $html_str = <<HTML;
<html>
<head>
<title>CGI Error:: %s</title>
%s
<head>
<body>
<h1>CGI Error</h2>
<h2>Filename: %s</h2>
<h3>Error</h3>
<blockquote class="err_msg">%s</blockquote>
<h3>Output</h3>
<blockquote class="err_msg">%s</blockquote>
<h3>Script Environment</h3>
<pre class="err_dump">
%s
</pre>
</body>
</html>

HTML

    my $html = sprintf $html_str, $req->param('SCRIPT_FILENAME'), $self->{css},
      $req->param('SCRIPT_FILENAME'),
      $err_str, $output, Dumper( $req->params );

    $req->respond(
        $html,
        'Content-Type' => 'text/html',
        'Status'       => 500
    );



( run in 2.380 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )