STDIN経由で入力を受け取って1秒あたりのスループットを取れるpersecというのを書いた
表題のやつです.便利っぽかったのと書きたかったという理由からgoで書いています.
例えばアクセスログのようなものがあった時,「1秒間に何行ログに書き込まれているか」が分かれば秒間のアクセス数を求めることが可能となります.これはそういうことをする為のツールとなります.
persecを一言で言うと,「1秒間に何行やってくるか」をカウントするコマンドです.
$ tail -F nankano.log | persec
という風に使ってやると,persecはtee
の様にtail -F
の内容をそのまま出力しつつ,行数をカウントして一定周期ごとにそのスループットを出力します.末尾に雑に噛ませておくとスループットが取れる.
デフォルトだと,persecは60秒ごとのインターバルでスループットをSTDOUTに吐き出します.この場合は60秒間分の行数をカウントしておいて,それを60で割ったものを1秒間あたりのスループットとして扱います.
インターバルは--delta
,スループットの出力先は--out
というオプションでそれぞれ指定することが可能です.また,--notee
オプションを指定すると,受け取った内容をtee
の様にフォワードしなくなります.
加えて--pattern
というオプションによって,カウントの対象とする行を絞り込むことが出来ます.ここにはgoで利用可能な正規表現を突っ込むことが出来ます.例えば,yyyy-mm-dd
から始まる行だけをカウント対象にしたい場合は--pattern="^[0-9]{4}-[0-9]{2}-[0-9]{2}"
というふうに指定してやるとそのような感じになります.
--help
で詳細が見れますから,そちらもご確認ください.
シェルスクリプトでも頑張ればこういうことが出来るような気もしたんですが僕にはその力が足りなかった!
というわけでどうぞ御利用ください.
余談ですがテストをどう書けば良いかわからなくて,結局シェルスクリプトによるE2Eテストになってしまった……