Catalyst で setup にかかった時間を表示する

Catalyst はデフォルトでリクエスト毎の処理時間をログ出力してくれますが、setup() 時の処理時間は表示してくれません。チューニングの目安として見たいので実装してみました。

Upgrading to Catalyst 5.80 で紹介されている、setup の hook point を使います。

package MyApp;

use Moose;
use Catalyst::Runtime 5.80;
use Catalyst;
use Time::HiRes;
extends 'Catalyst';                                                                                 

our $StartedOn;

BEGIN {
    $StartedOn = Time::HiRes::time;
}

after setup_finalize => sub {
    my $c = shift;
    $c->log->info(sprintf 'Setup took %0.6fs', Time::HiRes::time - $StartedOn );
    $c->log->_flush; # これがないと1回目のリクエストまで出力されない
};

__PACKAGE__->setup(qw/
    -Debug
/);

__PACKAGE__->meta->make_immutable;

こんな感じで表示されます。本家でも表示してくれるといいですね。

[info] MyApp powered by Catalyst 5.80007
[info] Setup took 0.656298s
FastCGI: manager (pid 23210): initialized
FastCGI: manager (pid 23210): server (pid 23211) started
FastCGI: server (pid 23211): initialized