Changeset 24752

Show
Ignore:
Timestamp:
11/24/08 22:30:35 (4 years ago)
Author:
tokuhirom
Message:

added stopwatch

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/MENTA/trunk/bin/cgi-server.pl

    r24233 r24752  
    4141} 
    4242 
     43sub HTTP::Response::cgish_filter { 
     44    my $self = shift; 
     45    if (my $status = $self->header('Status')) { 
     46        $self->code($status); 
     47        $self->message(HTTP::Status::status_message($status)); 
     48    } 
     49    $self; 
     50} 
     51 
     52 
    4353{ 
    4454    package MENTA::Server; 
    4555    use base qw/HTTP::Server::Simple::CGI/; 
     56    use Time::HiRes (); 
    4657 
    4758    sub bind_stdout { 
     
    5566    } 
    5667 
     68    sub stopwatch { 
     69        my $code = shift; 
     70        my $start = [Time::HiRes::gettimeofday()]; 
     71        $code->(); 
     72        my $elapsed = Time::HiRes::tv_interval($start); 
     73        if ($elapsed > 0.3) { 
     74            print STDERR "TOO SLOW: $ENV{PATH_INFO}: $elapsed\n"; 
     75        } 
     76    } 
     77 
    5778    sub handler { 
    5879        my $pid = fork(); 
     
    6081            waitpid($pid, POSIX::WNOHANG); 
    6182        } elsif ($pid == 0) { 
    62             my $out = bind_stdout(sub { 
    63                 package main; 
    64                 do './menta.cgi'; 
    65                 die $@ if $@; 
     83            stopwatch(sub { 
     84                my $out = bind_stdout(sub { 
     85                    package main; 
     86                    do './menta.cgi'; 
     87                    die $@ if $@; 
     88                }); 
     89                print HTTP::Response->parse("HTTP/1.0 200 OK\r\n$out") 
     90                                    ->cgish_filter() 
     91                                    ->as_string(); 
    6692            }); 
    67             my $res = HTTP::Response->parse("HTTP/1.0 200 OK\r\n$out"); 
    68             if (my $status = $res->header('Status')) { 
    69                 $res->code($status); 
    70                 $res->message(HTTP::Status::status_message($status)); 
    71             } 
    72             print $res->as_string; 
    7393            exit; 
    74         } elsif (defined $pid) { 
    75             die $!; 
     94        } else { 
     95            die "cannot fork : $!"; 
    7696        } 
    7797    }