忍者ブログ

Home > > Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに)

[PR]

  • 2016-12-11

Share on Tumblr このエントリーをはてなブックマークに追加

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Comments:

Trackback+Pingback:

Listed below are links to weblogs that reference
[PR] from Born Neet

Home > > Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに)

Home > Apache > Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに)

Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに)

Share on Tumblr このエントリーをはてなブックマークに追加

Apacheのお勉強継続中。

Cとかわからなすぎて、Apacheのソース読むどころか、
モジュール作ってみるのさえいつになることやら。

なんて愚痴ってばかりもいられないので、
今日は既存のモジュールを弄ってみる。

ターゲットはmod_status。
?autoで形式変えれるんだから、
?extendでExtendedStatus ONの変わりができないかという発想。

参考書がパンダ本なので、Apacheのバージョンは1.3です。


# prototype作成
cd /home/t/module
apxs -g -n status2
cd status2

# mod_statusで上書き
cp -pi mod_status2.c mod_status2.c.org
cp -pi /home/t/apache_1.3.41/src/modules/standard/mod_status.c mod_status2.c

# statusをstatus2に置換
$perl -i.bk -p -w -e 's/status/status2/g' mod_status2.c

# やりすぎた。定義済みのがあるらしい
$ perl -i -p -w -e 's/extended_status2/extended_status/g' mod_status2.c
$ perl -i -p -w -e 's/score_record\.status2/score_record\.status/g' mod_status2.c

# そのまま動かしてみる
make
make install

# 自動で設定される
LoadModule status2_module     libexec/mod_status2.so

# 手動設定するやつ
vi /home/t/apache/conf/module.conf

<Location /status>
        SetHandler server-status
</Location>

<Location /status2>
        SetHandler server-status2
</Location>


# 再起動
apachectl restart

# 動作確認⇒OK
firefox localhost:8080/status &
firefox localhost:8080/status2 &

すでに行き当たりばったり感がガンガン漂ってますが、
気にせずカスタマイズしていきましょう。


# 動いた状態を保存しとく
cp -pi mod_status2.c mod_status2.c.ok

クエリに応じた処理を追加。
vi mod_status2.c

160行目付近
/* ID values for command table */

#define STAT_OPT_END		-1
#define STAT_OPT_REFRESH	0
#define STAT_OPT_NOTABLE	1
#define STAT_OPT_AUTO		2
#define STAT_OPT_EXTEND		3

170行目付近
ENDまでループしてるっぽいので4個目に挿入。
static const struct stat_opt status2_options[] =	/* see #defines above */
{
    {STAT_OPT_REFRESH, "refresh", "Refresh"},
    {STAT_OPT_NOTABLE, "notable", NULL},
    {STAT_OPT_AUTO, "auto", NULL},
    {STAT_OPT_EXTEND, "extend", NULL},
    {STAT_OPT_END, NULL, NULL}
};

250行目付近
		case STAT_OPT_AUTO:
		    r->content_type = "text/plain; charset=ISO-8859-1";
		    short_report = 1;
		    break;
		case STAT_OPT_EXTEND:
		    break;
		}

# とりあえず、ここまででテスト⇒OK

make
make install
apachectl restart
firefox localhost:8080/status2 &


# さて、いよいよExtendedStatusをONに

#  ap_extended_statusが怪しい
# /home/t/apache_1.3.41/src/include/http_conf_globals.h
# で定義されてるやつ↓
# extern API_VAR_EXPORT int ap_extended_status;

vi mod_status2.c

250行目付近
		case STAT_OPT_EXTEND:
                 ap_extended_status = 1;
		    break;
		}
としてみる。

# 動いた・・・けど、ずっとExtendedStatus Onになっちゃう。
# 保存しといてメソッドから出る前に戻せばいいのか?

180行目付近
static int status2_handler(request_rec *r)
{
    int extend_by_query = 0;
    int temp_ap_extended_status = ap_extended_status;

:
:

250行目付近
		case STAT_OPT_EXTEND:
                 ap_extended_status = 1;
                 extend_by_query = 1;
		    break;
		}

:
:
720行目付近
    if (extend_by_query) {
        ap_extended_status = temp_ap_extended_status;
     }
    ap_kill_timeout(r);
    return 0;
}

おぉ!一応要件通りの結果に!!
/status2で概要を目で見つつ、
/status2?auto&extendで詳細情報を機械的に取得、
とか、需要ないか;

・・・っていうか何か絶対ダメだな、このコード。
素直に設定ファイルで変更した方が良さそうだ。
(Cがわからなすぎて、何が危ないかもわからない・・・)

というわけでソース全体を公開するのは止めときます。

まぁそこそこ勉強になったのでめでたしめでたし。

PR

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
Listed below are links to weblogs that reference
Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに) from Born Neet

Home > Apache > Apache&Cのお勉強:mod_statusをちょっと変えてみる(クエリでExtendedStatus ONに)

Search
Loading
Feeds
Links
スポンサードリンク
Ad
デル株式会社
Ad

Page Top