module MessageBus::DiagnosticsHelper
  def publish(channel, data, opts = nil)
    id = super(channel, data, opts)
    if @tracking && (@channel.nil? || @channel == channel)
      m = MessageBus::Message.new(-1, id, channel, data)
      m.user_ids = opts[:user_ids] if opts
      m.group_ids = opts[:group_ids] if opts
      @tracking << m
    end
    id
  end

  def track_publish(channel = nil)
    @channel = channel
    @tracking = tracking = []
    yield
    tracking
  ensure
    @tracking = nil
  end
end

module MessageBus
  extend MessageBus::DiagnosticsHelper
end
