0

現在、モペット クエリのランタイムを監視するために、モペット ログ パーサーを作成しています。実行時パラメーターを使用する QUERY コマンドではうまく機能しますが、INSERT と UPDATE には実行時パラメーターがありません。すべての INSERT と UPDATE の後には、ランタイムを含むgetLastError COMMAND が続きます。

原付ログのサンプルを次に示します。

ランタイムを使用したクエリ

MOPED: 127.0.0.1:27017 QUERY        database=X collection=X selector=X
flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 0.6950ms

ランタイムなしの INSERT で COMMAND あり

MOPED: 127.0.0.1:27017 INSERT       database=X collection=X documents=X flags=[]
                       COMMAND      database=X command={:getlasterror=>1, :w=>1}
runtime: 0.4750ms

COMMAND ランタイムは getlasterror 呼び出し用であり、INSERT 呼び出し用ではないと確信しています。INSERT クエリのこのランタイム情報を取得する方法はありますか?

4

1 に答える 1

0

ログ パーサーを使用する代わりに、次のようなものを使用すると、うまく機能します。

ActiveSupport::Notifications.subscribe('query.moped') do |name, start, finish, id, payload|
    runtime = (finish - start)*1000
    moped_ops = payload[:ops]
    moped_ops.each do |op|
      unless op.collection == '$cmd'
        query = op.class.name.split('::').last.downcase
        query = op.selector.first[0].to_s.gsub(/\$/, '') if query == 'command'
        DO SOMETHING WITH #{op.database}.#{op.collection}.#{query}
      end
    end

  end
于 2015-12-11T16:53:22.367 に答える