shakemurasan/okuribito_rails

MethodCallSituationから called_num を引き剥がす

Closed this issue · 2 comments

現状、MethodCallSituationでメソッドの呼び出し回数(called_num)を持ってしまっているため、
呼び出し検出時にSELECT文を発行する作りになってしまっており、プロダクションコードのオーバーヘッドが増えている。

module OkuribitoRails
  class ObserveMethod
    def patch_okuribito
      Okuribito::OkuribitoPatch.new(
        once_detect: config_once_detect
      ) do |method_name, _obj_name, caller_info, class_name, method_symbol|
        situation = MethodCallSituation.find_by(class_name: class_name,
                                                method_symbol: method_symbol,
                                                method_name: method_name)
        if situation.present?
          situation.increment!(:called_num)
          MethodCallLog.create(method_call_situation: situation,
                               class_name: class_name,
                               method_symbol: method_symbol,
                               method_name: method_name,
                               back_trace: caller_info[0])
        end
      end
    end

    private

    def config_once_detect
      OkuribitoRails.config.once_detect
    end
  end
end

そこで、

  • MethodCallSituationから called_num を引き剥がす
  • MethodCallLogから MethodCallSituation への関連を引き剥がす
  • MethodCallSituationsControllerMethodCallLogからメソッド呼び出し回数を導出するようにする

という修正を行う

called_numが入っていないと(キャッシュされていないと)、未呼出のメソッド検索機能が実装できなくなってしまうため、今の作りのままにした方がいい

本issueは対応しない