2007/01/22

[技術系]   pinghttp

at 18:41JST
8年くらい前にでっち上げたスクリプトを引っ張り出してきて、簡単なサーバモニターを設置した。

その中で他サイトのWebサーバに100kbのファイルを置き、それの所要取得時間を計測する…というのがあるのだが。@niftyにファイルを置いたら結果が異常に遅い。自宅サーバと通信させたほうがぜんぜん速いのだ。

「@niftyはダメだなあ…」

と思ったのだが、ちょっ待てよ!(キムタク) そんなわけねー! だって自分ちの接続回線も@niftyじゃねーか!

スクリプトの該当部分は、
#!/bin/sh 
URL=$1
if [ -z "$URL" ];
then
echo "Usage: $0 url_somewhere" 1>&2
exit 1
fi
WGET='wget --output-document=/dev/null --timeout=60'

RESULT=`$WGET $URL 2>&1 |grep ' saved ' |tail -1 |cut -d' ' -f 2 |tr -d '('`
if [ ! `echo "$RESULT" | grep '^[0-9.][0-9.]*$' 2>/dev/null` ] ;
then
RESULT=0
fi
echo $RESULT
# in KB/sec
となっていて、wgetの出力を利用している。

…調べてみると、wgetは回線が8年くらい前のようにKB/secで計れるときは
 (234 KB/s) - `/dev/null' saved [102400/102400]
となるのだが、昨今のように高速大容量な環境が当たり前だと
 (1.36 MB/s) - `/dev/null' saved [102400/102400]
と「MB」単位になるのだった。道理でな…_| ̄|O

perlで書けばよかったんだけど、当時はこういうスクリプトは全部shで組んでいたし、perlの標準ライブラリは秒単位の計測しかできなかったのだ。

で、書き直した。
#!/usr/bin/perl 
use LWP::UserAgent;
use Time::HiRes;

my $url = shift @ARGV;

my $sec = Time::HiRes::time;
my $ua = LWP::UserAgent->new(
agent => 'Mozilla/4.0 (compatible; MSIE 6.0)',
timeout => 60,
# max_size => 32 * 1024,
);
my $response = $ua->get( $url );
if ( $response->is_success ) {
$sec = ( Time::HiRes::time ) - $sec;
} else {
$sec = 0;
}

my $kbSec = length( $response->content ) / 1024 / $sec;
print $kbSec . "\n";


どう考えてもこっちのほうが負荷は軽そうだ。

10年前にさかのぼると、ぼくはCMSすらBourneShellオンリーで書いていたんだが。ある意味富豪プログラミング。

[雑記]   Law15

at 16:59JST
秋葉原マップ:社長自ら「セーラー服」→「スク水」で告知活動
 〜 Law15 (ロウフィフティーン) 〜
http://blog.livedoor.jp/akibabot/archives/50745353.html

++ Law15 Project ++
http://www.law15.net/

「寒いのが気のせい」という根性論は賛成できないが、
「私たちを知ってください」
にここまで賭ける想いは尊敬に値するな。かっこいい。

万世橋署のアホが捕まえたりしないことを祈るばかりだ。マジで。

[技術系]   apacheで特定リクエストをアクセスログに記録しない

at 11:11JST
忘れ。めもめも。

- CustomLog の env= 節
 http://httpd.apache.org/docs/1.3/mod/mod_log_config.html#customlog
- SetEnvIf
 http://httpd.apache.org/docs/1.3/mod/mod_setenvif.html#setenvif
- 2.x
 http://httpd.apache.org/docs/2.0/ja/logs.html#accesslog

SetEnvIf Request_URI "^/パス" dontlog
CustomLog logs/access_log usertrack env=!dontlog


みたいな。

tools:
/files/
/patrate/
/feed2list/
a:
/xslt/

[技術系]   続々・pavukでミラー

at 03:17JST
http://memo.hirosiki.jp/article/30973975.html

ということで、
「Seesaa BLOGでホストしているblogを
 pavukで定時ミラーするperlスクリプト」
をでっち上げてみた。ぐちゃぐちゃすくりぷと。

・__DATA__以降に、
 
ミラー対象ホスト名[TAB]画像アップ先を含む対象ホスト名の列記

 を羅列する
・メンテナンス検知のために、対象blogのトップページに
 
<!-- SANE:ホスト名 -->

 という文字列を挿入しておく(超アドホック)

感じ。もちろんUNIXじゃないと動きませんよ。/bin/rmとか堂々と使ってますんで。

使い物になるかどうかはともかく、バックアップしておけるのはずいぶんマシだ…。

#!/usr/bin/perl 

# smirror.pl

use FileHandle;

my $MAILTO = 'めーるあどれす';

my $TMP_DIR = '/tmp';
my $PAVUK =
join( ' ',
(
"pavuk",
"-mode mirror",
"-index_name index.html",
"-fnrules F '*' '/%d/%n'",
"-logfile pavuk.log",
"-quiet",
"-noRobots"
)
);

my $startTime = scalar( localtime() );

my @done;
while ( <DATA> ) {
s/^\s+//;
s/\s+$//;
next if ( /^$/ );
my $line = $_;
my( $target, $asite ) = split( /\s/, $line );

if ( ! -d $target ) {
mkdir $target, 0755
or die "Cannot mkdir to store site";
}
my $lockDir = "$target/.smirror";
mkdir $lockDir, 0755
or die "Another smirror is working";
my $tmpMirrorDir = "$TMP_DIR/$target.$$";
mkdir $tmpMirrorDir, 0755
or die "Cannot mkdir for mirroring";
eval {
system(
"cd $tmpMirrorDir &&" .
"$PAVUK -asite $asite http://$target"
);
};
# SANE?
# <!-- SANE:memo.hirosiki.jp -->
my $tophtml = Slurp( "$tmpMirrorDir/index.html" );
if ( $tophtml =~ /-- SANE:$target --/ ) {
system( "/bin/mv -f $tmpMirrorDir/* $target" );
push( @done, $target );
} else {
push( @done, "$target ... INSANE!!" );
}
system( "/bin/rm -rf $tmpMirrorDir" );
rmdir $lockDir;
}

my $endTime = scalar( localtime() );

my $mail = <<"_EOF_";
SMIRROR WITH PAVUK RESULT REPORT
================================

start time: $startTime
end time: $endTime

- Processed sites -
@{[ do {
join( "\n", @done );
} ]}
_EOF_

open( MAIL, "|/bin/mail -s 'SMIRROR RESULT REPORT' $MAILTO" );
print MAIL $mail;
close( MAIL );

sub Slurp {
my $fn = shift @_;
my $cnt = do {
local $/;
my $fh = FileHandle->new( $fn, 'r' );
local $_ = <$fh>;
$_;
};
return $cnt;
}

__DATA__
memo.hirosiki.jp memo.hirosiki.jp,hirosiki.up.seesaa.net

[技術系]   ヒアドキュメント中で任意の処理結果を挿入する

at 02:55JST
perlのヒアドキュメントで。なんかいっつも忘れるのでメモ。
こんな感じ。

my $mail = <<"_EOF_"; 
SMIRROR WITH PAVUK RESULT REPORT
================================

start time: $startTime
end time: $endTime

- Processed sites -
@{[ do {
join( "\n", @done );
} ]}
_EOF_


do { } の中で最後に評価した値が挿入される。便利。…これを便利と言い切ってやまないのはぼくくらい(悪い意味で)だと思うが。
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。