結果として面倒だったので、「表示を変えた箇所を調べておけばバージョン変わってもなんとかなるかな?」くらいに考えている人は参考にならないとだけ言っておく。
AWStatsはログ解析ツールとしては結構有名どころらしく、普通にパッケージ管理ソフトで入るため、単に使いたいと言う場合にはあまり苦労することもなく導入できる。
また、使い方も調べればそれなりにでてくるため、さほど問題は起こらない。(少なくともここに来るような人にはすぐ見つけられるはず)
しかし、インターフェースは微妙なところもあり、変更したいと思ったりもする。
もっとも、やってみた感想は「やめた方がいい」なのだけど。
変更内容は、一年前の情報も同時に表示すること。
自分の所属が大学であるため、webサーバーの負荷などは大体月と曜日に依存している。
そのため、何か変化や異常があると、昨年と比較できれば割と簡単に見えるのである。
しかし、AWStatsのインターフェースはなぜかその年の情報しか出さないので、比較が難しい。
(また、その年しか出さないので、1-3月あたりでは表示される情報がなさすぎて使いづらい)
じゃあ並べるようにすればいいんじゃないかといじり始めたが、どうにもこうにも・・・
起こった問題(怒った問題)を挙げていこうと思う。
1)月ごとの情報を表示する箇所は割と簡単に見つけられて、HTMLMainMonthlyという関数になっている。
この中に前の年のデータを表示するルーチンを無理矢理書き込めばいいはずなのだが、全く部品化されていないので、今見ている年の処理をコピペするしかない。やれやれ。
2)よく見るとところどころにコメントアウトされたあからさまに不要とおぼしきコードが見える。バージョン管理してるだろうが。消せ。
3)無理矢理表示を追加してるうちに、月ごとの関数から移って日ごとの情報を表示する関数が目に入るが、インデントが少し壊れてる。直せ。(もっとも、自分が見たバージョンは現在のバージョンよりさらにひどかったので、少しずつ直しているのだろうか。全部直せよとは思うが。)
4)表示させるように変更したので、一年分の情報は読んでいるが全てのログを見ているわけではないということにすぐ気づく。サーバーによってはログがすごい量なのだから当たり前ではあるが、どこで読んでるのか分かりづらい。表示に使っているデータの変更箇所を追うと、どうやら3330行くらいからのRead_History_With_TmpUpdateという関数で読んでるらしい。呼び出し箇所を見ると月ごとに読むようにしている。ただし、選択した月とそれ以外で月以外にもう一つ引数が異なっている。意味はさっぱりわからず。中を見れば分かるかと関数の範囲を見ると3800行ある。読めるかこんなもの。
5)とりあえず選択していない月と同じように読ませればなんとかなるかとやってみたところ、前の年の表示に成功。一安心かと思ったら明らかに「時間毎の通信量」が増加している。何が起こってるのかと調べると昨年の同月分を単純に足している様子(1年後を表示させて気づいた)。変数から当たりを付けてRead_History云々を見ると「選択した月の情報なら計算対象にして、他の月だったら無視する」という状態になっている。月だけ??年のチェックは???
6)努力の甲斐あって表示に成功。ただ日本語表示になっているのにところどころ「日 月」の順になっていてもやもやする。かと思ったら一箇所だけ「〜年〜月〜」(日付はあるが「日」がない)になっていたりする。さらに気持ち悪い。何かと思って表示部を見たら順番がハードコーディングされている。一箇所だけ別ファイルからフォーマットを読んで出力している(ただし微妙に不足している)。だからその中途半端なのをやめろというのに。というか多言語対応やってるんならハードコーディングするなよ。
とまあこんな感じである。
全部手で直したので、当然のことながらバージョンアップしたらおじゃん。
全体的に思うのは、
1)全体のメンテナンスに気を遣っているか若干怪しい。
2)細かい引数指定があるのに、普通に出てくるはずの組み合わせを想定していない。
3)大域変数だらけで関数毎に想定している状態がさっぱりわからない。
4)関数がでかすぎる。
全体のテスト以外してないよねこれ、という感じである。
2017年07月06日
AWStatsのインターフェースをいじろう(というのはお薦めできない)
posted by chiguri at 01:30| Comment(0)
| 雑多
この記事へのコメント
コメントを書く