‘Analog’ でアクセスログ解析tips|ブラウザレポートを ‘platform.js’ でみやすくする

みんなつかってる ‘Analog’ で ‘Apache’ の生ログのアクセスログ解析(本家? ‘Analog 6.0: Introduction’ は2004.12が最終更新。 ‘Analog CE’ ってのは2021.07時点で継続中)。でも「ブラウザレポート」の ‘Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1’ とかって何となく判るけど見づらいっしょ。そこで ‘platform.js’ を使ってすこし見やすくしてみました。

まず ‘analog.cfg’ にtxtファイルからjsを読んでもらう

‘Analog’ の書き出す ‘ウェブサーバの統計 [my organisation]’ にjsを読み込むため下記のtxtファイルのパスを ‘analog.cfg’ に記入。 ‘FOOTERFILE’ で出力ファイルの ‘<div class="footer">’ のあとにこのファイルの内容を付け加えられる?のでtxtファイルを読ませるとイイみたい。パスは適当に…。

analog.cfg
FOOTERFILE C:\Users\[UserName]\Documents\js\analog_platform_js.txt

指定した ‘analog_platform_js.txt’ に ‘jQuery’ と読み込みたいjsファイルを指定

‘jQuery’ はGoogleのCDN経由で読み込み。 ‘platform.js’ はダウンロード。 ‘platform.js’ とjsファイルは ‘Analog’ のデフォルトの出力場所 ‘OUTFILE Report.html’ と同じ階層におくときのパスの例。

analog_platform_js.txt
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js'></script>
<script src='platform.js'></script>
<script src='analog_platform.js'></script>

今回のメインのつくった ‘analog_platform.js’ でユーザーエージェント(UA)を書き換える

‘div.browrep table tbody tr’ とか ‘<td class="xl">’ は ‘Analog6.0’ がベース。 ‘Analog’ のバージョンによって違うときは適当に…。プラットフォーム情報は ‘platform.js > README.md’ のオブジェクト定義でいろいろ指定もできるので適当に…。

analog_ipinfo.js
jQuery(function () {//jQuery予約
//==================================================
function brow_rep_list() {
//browrep_list+++++++++++++++++++++++++++++++
    let brl_length = $("div.browrep table tbody tr").length;
    let brl_html_org = $("div.browrep").html();//ブラウザレポート部分全体のhtmlを取得
    let brl_html_tbody = $("div.browrep table tbody").html();//UA取り出し用にテーブル部分のhtmlを取得
    let brl_list = brl_html_tbody.split('<tr>');//<tr>で区切って配列に
    for (let i = 1; i < brl_length; i++) {//0番目は円グラフとその色分けなのでとばす
        let brl_user_a = brl_list[i];//順に取得
        let br_class_xl = brl_user_a.split('<td class="xl">')[1];//<td class="xl">の後ろ
        let br_class_xl_rep = br_class_xl.split('</td></tr>')[0];//</td></tr>の前→Mozilla/5.0…とかのUA取り出し
        let brl_info = platform.parse(br_class_xl_rep);//UA文字列を'platform.js'で解析
        let brl_brow_OS = brl_info.toString();//'.toString()'でobjectから文字列に
        let brl_result = brl_html_org.replace(br_class_xl_rep, brl_brow_OS).replace(br_class_xl_rep, brl_brow_OS);//正規表現で全部置き換えしたかったけどUA文字列がクセもの?でうまくいかないのでグラフ下と表の重複分を2回強引に置き換え
        brl_html_org = brl_result;//brl_html_orgに順に入れとく
    }
    $("div.browrep").html(brl_html_org);//ブラウザレポート部分全体のhtml書き換え
}
//もとのUAと見比べるため?にボタンで実行するようにする
$('div.browrep').append('<button id="brow_rep">browser_report platform.js</button>');
$('#brow_rep').on('click', function () {
    brow_rep_list();
});
//==================================================
});

結果はこんなかんじ

analog_brow_org analog_brow_analyze

←ボタン押す前・ボタン押した後→
いつかのこのサイトの集計。ちょっとスッキリ(^_^);
htmlのコードを整形しちゃうとタブとかスペースが入ってうまくいかないことがあるのでご注意を…。
‘Analog’ でアクセスログ解析tips|ホストレポートのIPから ‘ipinfo.io’ で情報を取得するも使うとイイかも→ ‘Analog’ は ‘FOOTERFILE’ をひとつしか書き出さないみたいなので ‘analog_ipinfo_js.txt’ と ‘analog_platform_js.txt’ の内容をまとめたtxtファイルにしてね