ビルドに要した時間を知りたい奇特な人がいるってさ

OmoiKondara でパッケージのビルドに要した時間を知りたい人はいるでしょうね。なんだか DB を作ろうだとかめんどくさい方向へ話が進んでいたので、完全に無視させてもらいました。まあ、以下は数分で書いたスクリプトですけど、こんなんで充分かと。この程度のハックはさっと書いてもらいたいもんです。いちいち提案するくらいであれば、コード出したほうが説得力が違うんじゃないの。

まあ、エラー処理はしてないし、構造化もしてないんで、アホコード丸出しですけどね。

#!/usr/bin/env ruby

pkgname = ARGV[0]

IO.popen("egrep ^--real: #{pkgname}/OmoiKondara.log | sort") { |io|
  real = utime = stime = 0.0
  io.each { |l|
    if /^--real:([0-9\.]+) utime:([0-9\.]+) stime:([0-9\.]+)$/ =~ l
      real += $1.to_f
      utime += $2.to_f
      stime += $3.to_f
    end
  }
  real_sec = sprintf("%.1f", real).to_f
  real_min = sprintf("%d", real_sec / 60).to_i
  real_mod = sprintf("%d", real_sec - real_min * 60)

  utime_sec = sprintf("%.1f", utime).to_f
  utime_min = sprintf("%d", utime_sec / 60).to_i
  utime_mod = sprintf("%d", utime_sec - utime_min * 60)

  stime_sec = sprintf("%.1f", stime).to_f
  stime_min = sprintf("%d", stime_sec / 60).to_i
  stime_mod = sprintf("%d", stime_sec - stime_min * 60)

  puts("real time      : #{real_sec}sec.\t(#{real_min}:#{real_mod})")
  puts("user CPU time  : #{utime_sec}sec.\t(#{utime_min}:#{utime_mod})")
  puts("system CPU time: #{stime_sec}sec.\t(#{stime_min}:#{stime_mod})")
}

# [2010-09-04 Sat] This program is under Public Domain written by toshiharu.

ちなみに、上のコードを実行すると次のような結果が出ます。

$ pwd
/opt/trunk-x86_64/pkgs
$ elapsedtime.rb openoffice.org
real time      : 9404.0sec.	(156:44)
user CPU time  : 16306.7sec.	(271:46)
system CPU time: 1477.5sec.	(24:37)