diff --git a/meta_request/lib/meta_request.rb b/meta_request/lib/meta_request.rb index b211e90..ccf212a 100644 --- a/meta_request/lib/meta_request.rb +++ b/meta_request/lib/meta_request.rb @@ -7,6 +7,7 @@ module MetaRequest autoload :AppRequest, 'meta_request/app_request' autoload :Storage, 'meta_request/storage' autoload :Middlewares, 'meta_request/middlewares' + autoload :Subscribers, 'meta_request/subscribers' autoload :LogInterceptor, 'meta_request/log_interceptor' autoload :AppNotifications, 'meta_request/app_notifications' autoload :Utils, 'meta_request/utils' diff --git a/meta_request/lib/meta_request/app_notifications.rb b/meta_request/lib/meta_request/app_notifications.rb index 2eb0f49..0578d44 100644 --- a/meta_request/lib/meta_request/app_notifications.rb +++ b/meta_request/lib/meta_request/app_notifications.rb @@ -57,6 +57,10 @@ class AppNotifications # Subscribe to all events relevant to RailsPanel # def self.subscribe + if Mongo and Mongo::Monitoring and Mongo::Monitoring::Global + Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::COMMAND, MetaRequest::Subscribers::MongoCommandSubscriber.new) + end + new .subscribe('meta_request.log') .subscribe('sql.active_record', &SQL_BLOCK) diff --git a/meta_request/lib/meta_request/subscribers.rb b/meta_request/lib/meta_request/subscribers.rb new file mode 100644 index 0000000..7bc9daa --- /dev/null +++ b/meta_request/lib/meta_request/subscribers.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module MetaRequest + module Subscribers + autoload :MongoCommandSubscriber, 'meta_request/subscribers/mongo_command_subscriber' + end +end diff --git a/meta_request/lib/meta_request/subscribers/mongo_command_subscriber.rb b/meta_request/lib/meta_request/subscribers/mongo_command_subscriber.rb new file mode 100644 index 0000000..ad05417 --- /dev/null +++ b/meta_request/lib/meta_request/subscribers/mongo_command_subscriber.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module MetaRequest + module Subscribers + class MongoCommandSubscriber + def started(event) + # puts "Started #{event.command_name}: #{event.command}" + end + + def failed(event) + # puts "Failed #{event.command_name}: #{event.message}" + end + + def succeeded(event) + start_time = Time.now - event.duration + end_time = Time.now + transaction_id = event.request_id + command = event.started_event.command.to_json + payload = { name: event.command_name, sql: command } + ActiveSupport::Notifications.publish('sql.active_record', start_time, end_time, transaction_id, payload) + end + end + end +end