僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

PhantomJSでレスポンスタイムを取得しGrowthForecastに投げるときのShellScript

PhantomJSは前回の記事のようにインストールしている前提。Pathは適宜書き換えて下さい。

                        • 追記(2013/02/28)

PhantomJSを素で使うとサイトなどが重すぎるときにそのままプロセスを保持し続けて、次のcronのときと被って被ってプロセスが膨張してサーバーごと死ぬとかあるので、タイムアウトを導入しました。

ちなみにPhantomJS自体にはまだtimeoutの概念がなかったようなのと、自分のJS力が低かったのもあってphantomjsコマンドを実行するShellScript側でtimeoutしたら殺すようにしました。

実装とは言っても単純にtimeoutコマンドを使うだけです。
もし入ってない場合は以下より入ります。

yum install netatalk

そしてphantomjsを叩くときに以下のようにすればOKです。

timeout 10 phantomjs loadspeed.js {URL}
                        • 追記終わり

/root/phantomjs/phantom_batch.sh

#!/bin/sh
SERVICE_NAME=(hateblo google facebook)

URL_hoteblo=http://kazuph.hateblo.jp
URL_google=https://www.google.co.jp
URL_facebook=https://www.facebook.com

for key in ${SERVICE_NAME[@]}; do
    echo $key
    url=$(eval 'echo $URL_'$key)
    echo $url
    # 30秒でタイムアウトするようにする
    msec=`timeout 30 /usr/local/bin/phantomjs /root/phantomjs/loadspeed.js $url`
    echo $msec
    curl -F number=$msec http://example.growthforecast.com/api/orega_tukatteiru_service/${key}/response_time
done


/etc/crontab

# test phantomjs batch
*/5 * * * * root /bin/bash /root/phantomjs/phantom_batch.sh >>/var/log/phantomjs/batch.log 2>>/var/log/phantomjs/errlog.log

なんだろう、このだめだめな感じは・・・。
まずShellでの配列の使い方全然あれな感じで。

追記(2013/02/20)

あれ、そういえば
/root/phantomjs/loadspeed.js
の内容を書いてなかった(汗

基本的にはexampleにあるソースとほぼ一緒です。

var page = require('webpage').create(),
    system = require('system'),
    t, address;

if (system.args.length === 1) {
    console.log('Usage: loadspeed.js <some URL>');
    phantom.exit(1);
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log(t);
        }
        phantom.exit();
    });
    page.onError = function(msg, trace) {
    };
}