10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/ey-core/subscribable.rb', line 10
def subscribe(&block)
return false unless read_channel_uri
gem 'faye', '~> 1.1'
require 'faye'
uri = read_channel_uri
resource = self
url = uri.omit(:query).to_s
token = uri.query_values["token"]
subscription = uri.query_values["subscription"]
EM.run do
client = Faye::Client.new(url)
client.("Authorization", "Token #{token}")
deferred = client.subscribe(subscription) do |message|
block.call(JSON.load(message))
end
deferred.callback do
block.call({"meta" => true, "created_at" => Time.now,"message" => "successfully connected to log streaming service\n"})
end
deferred.errback do |error|
block.call({"meta" => true, "created_at" => Time.now, "message" => "failed to stream output: #{error.inspect}\n"})
EM.stop_event_loop
end
EventMachine::PeriodicTimer.new(5) do
if resource.reload.ready?
block.call({"meta" => true, "created_at" => Time.now, "message" => "#{resource} finished"})
EM.stop_event_loop
end
end
end
end
|