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 )