Как измерить время выполнения вставки мопеда в приложении ruby mongoid?
В настоящее время я пишу парсер журнала мопеда, чтобы отслеживать время выполнения запросов мопеда. Это прекрасно работает для команды QUERY, использующей параметр времени выполнения, но INSERT и UPDATE не имеют параметра времени выполнения. Все INSERT и UPDATE сопровождаются командой getLastError, которая содержит среду выполнения.
Вот несколько примеров мопедов:
QUERY со временем выполнения
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
Вставить без времени выполнения, но с командой
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?
1 ответ
Вместо использования парсера логов я использую что-то вроде этого, и оно прекрасно работает:
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