以前「StarmanやStarletでmod_statusっぽい情報を得る簡易版Plack::Middleware::ServerStatus」で書いていたPlack::Middleware::ServerStatus::LIteをCPANにリリースしました。

http://search.cpan.org/dist/Plack-Middleware-ServerStatus-LIte/

前回と大きく実装が異なっている箇所があります。1つはプロセスの状態を保持するためにParallel::Scoreboardを使うようになり、$0(PROGRAM_NAME)の書き換えを行わないようになったこと。2つ目はロケタッチを開発しているhideokiさんからの指摘で、アプリケーションが例外を起こしたときにステータスが戻らないという問題への対応をTry::Tinyを使って行っていることが大きな変更点です。

依存は増えましたが、実装は以下のようにシンプル

sub call {
    my ($self, $env) = @_;
    $self->set_state("A", $env);
    try {
        if( $self->path && $env->{PATH_INFO} eq $self->path ) {
            $self->_handle_server_status($env);
        }
        else {
            $self->app->($env);
        }
    } catch {
        die $_;
    } finally {
        $self->set_state("_");
    };
}

ただし、これだけだと一度もリクエストをさばいていないプロセスはステータス情報が全くなく、Parallel::Scoreboard->read_all()では取得できないので、子プロセスのPID収集のためにpsコマンドだけはそのまま使っています

psコマンドのオプションに方言があったり、Windowsで動かないとか問題はあると思いますので、パッチお待ちしています。

ServerStatus::Liteによるステータス情報は以下のようにとれます

 % curl http://server:port/server-status
 Uptime: 1234567789
 BusyWorkers: 2
 IdleWorkers: 3
 --
 pid status remote_addr host method uri protocol
 20060 A 127.0.0.1 localhost:10001 GET / HTTP/1.1
 20061 .
 20062 A 127.0.0.1 localhost:10001 GET /server-status HTTP/1.1
 20063 .
 20064 .
 

CloudForecastでは、 Apacheで使うHTTPのリソース定義をそのまま使うことができますょ。

このブログ記事について

このページは、Masahiro Naganoが2010年7月30日 23:39に書いたブログ記事です。

ひとつ前のブログ記事は「Yokohama.pm #6でcloudforecastについて喋って来た」です。

次のブログ記事は「CloudForecastでqmailのキュー数を監視する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja