mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add ActiveSupport::Notifications hook to Broadcaster#broadcast
This addition of this notification hook will give users better visibility into the messages being sent over the PubSub adapter.
This commit is contained in:
parent
537a342a83
commit
f3ba0c1dd3
3 changed files with 58 additions and 6 deletions
|
@ -1,2 +1,5 @@
|
||||||
|
* Add ActiveSupport::Notifications hook to Broadcaster#broadcast
|
||||||
|
|
||||||
|
*Matthew Wear*
|
||||||
|
|
||||||
Please check [5-0-stable](https://github.com/rails/rails/blob/5-0-stable/actioncable/CHANGELOG.md) for previous changes.
|
Please check [5-0-stable](https://github.com/rails/rails/blob/5-0-stable/actioncable/CHANGELOG.md) for previous changes.
|
||||||
|
|
|
@ -39,10 +39,14 @@ module ActionCable
|
||||||
|
|
||||||
def broadcast(message)
|
def broadcast(message)
|
||||||
server.logger.info "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}"
|
server.logger.info "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}"
|
||||||
|
|
||||||
|
payload = { broadcasting: broadcasting, message: message, coder: coder }
|
||||||
|
ActiveSupport::Notifications.instrument("broadcast.action_cable", payload) do
|
||||||
encoded = coder ? coder.encode(message) : message
|
encoded = coder ? coder.encode(message) : message
|
||||||
server.pubsub.broadcast broadcasting, encoded
|
server.pubsub.broadcast broadcasting, encoded
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
require "test_helper"
|
require "test_helper"
|
||||||
|
require "stubs/test_server"
|
||||||
|
|
||||||
class BroadcastingTest < ActiveSupport::TestCase
|
class BroadcastingTest < ActiveSupport::TestCase
|
||||||
class TestServer
|
|
||||||
include ActionCable::Server::Broadcasting
|
|
||||||
end
|
|
||||||
|
|
||||||
test "fetching a broadcaster converts the broadcasting queue to a string" do
|
test "fetching a broadcaster converts the broadcasting queue to a string" do
|
||||||
broadcasting = :test_queue
|
broadcasting = :test_queue
|
||||||
server = TestServer.new
|
server = TestServer.new
|
||||||
|
@ -12,4 +9,52 @@ class BroadcastingTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert_equal "test_queue", broadcaster.broadcasting
|
assert_equal "test_queue", broadcaster.broadcasting
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "broadcast generates notification" do
|
||||||
|
begin
|
||||||
|
server = TestServer.new
|
||||||
|
|
||||||
|
events = []
|
||||||
|
ActiveSupport::Notifications.subscribe "broadcast.action_cable" do |*args|
|
||||||
|
events << ActiveSupport::Notifications::Event.new(*args)
|
||||||
|
end
|
||||||
|
|
||||||
|
broadcasting = "test_queue"
|
||||||
|
message = { body: "test message" }
|
||||||
|
server.broadcast(broadcasting, message)
|
||||||
|
|
||||||
|
assert_equal 1, events.length
|
||||||
|
assert_equal "broadcast.action_cable", events[0].name
|
||||||
|
assert_equal broadcasting, events[0].payload[:broadcasting]
|
||||||
|
assert_equal message, events[0].payload[:message]
|
||||||
|
assert_equal ActiveSupport::JSON, events[0].payload[:coder]
|
||||||
|
ensure
|
||||||
|
ActiveSupport::Notifications.unsubscribe "broadcast.action_cable"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "broadcaster from broadcaster_for generates notification" do
|
||||||
|
begin
|
||||||
|
server = TestServer.new
|
||||||
|
|
||||||
|
events = []
|
||||||
|
ActiveSupport::Notifications.subscribe "broadcast.action_cable" do |*args|
|
||||||
|
events << ActiveSupport::Notifications::Event.new(*args)
|
||||||
|
end
|
||||||
|
|
||||||
|
broadcasting = "test_queue"
|
||||||
|
message = { body: "test message" }
|
||||||
|
|
||||||
|
broadcaster = server.broadcaster_for(broadcasting)
|
||||||
|
broadcaster.broadcast(message)
|
||||||
|
|
||||||
|
assert_equal 1, events.length
|
||||||
|
assert_equal "broadcast.action_cable", events[0].name
|
||||||
|
assert_equal broadcasting, events[0].payload[:broadcasting]
|
||||||
|
assert_equal message, events[0].payload[:message]
|
||||||
|
assert_equal ActiveSupport::JSON, events[0].payload[:coder]
|
||||||
|
ensure
|
||||||
|
ActiveSupport::Notifications.unsubscribe "broadcast.action_cable"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue