YOSHINO日記

プログラミングに関すること

activerecord-causeをforkして、クエリ実行時間が長いものを保存できるようにしてみた

activerecord-cause

RailsActiveRecordのログを見やすくするgemです。

GitHub - joker1007/activerecord-cause: This gem logs where ActiveRecord actually loads record

クエリの実行時間が遅いものをデータベースに保存

activerecord-causeのログがキレイなので、このログをクエリ実行時間が長いものだけ保存して、Railsアプリをモニターしたいなと思ったのがきっかけです。

GitHub - chamao/activerecord-cause: This gem logs where ActiveRecord actually loads record

使い方は簡単です。 まず、rake taskでNeck modelを自動生成します。

$ rails cause:setup  

Neckモデルのschema はこんな感じになっています。

+----+-------------+--------------+--------------+--------------+--------------+
| id | cause       | query        | duration     | created_at   | updated_at   |
+----+-------------+--------------+--------------+--------------+--------------+

例えば、User.createを、top_controller.rbのindexメソッドの3行目で行った場合、 以下のようなデータがNeckに自動的に保存されます。

Neck.first.cause
#=> "  User Create (ActiveRecord::Cause)  caused by /home/chamao/gems/cause_test/app/controllers/top_controller.rb:3:in `index'"

Neck.first.query
#=> "INSERT INTO users (age, created_at, updated_at) VALUES (?, ?, ?)"

Neck.first.duration
#=> 0.8834850000000001

保存されるクエリの実行時間はapp/models/neck.rbで定義されているので、 自由に変更可能です。

デフォルトは 1000 msです。

@duration_min_ms = 1000