Skip to content
This repository was archived by the owner on Mar 7, 2018. It is now read-only.

Commit ff467e2

Browse files
author
David Underwood
committed
Merge remote-tracking branch 'cjolly/cjolly-application-messages'
* cjolly/cjolly-application-messages: only fire dashboard events when target is current dashboard dashboard events - use SSE event names Adding application messaging. Conflicts: test/app_test.rb
2 parents c2fad09 + 60dcd73 commit ff467e2

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

javascripts/dashing.coffee

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Batman.Filters.shortenedNumber = (num) ->
2525
num
2626

2727
class window.Dashing extends Batman.App
28+
@on 'reload', (data) ->
29+
window.location.reload(true)
30+
2831
@root ->
2932
Dashing.params = Batman.URI.paramsFromQuery(window.location.search.slice(1));
3033

@@ -98,7 +101,7 @@ source.addEventListener 'error', (e)->
98101
if (e.readyState == EventSource.CLOSED)
99102
console.log("Connection closed")
100103

101-
source.addEventListener 'message', (e) =>
104+
source.addEventListener 'message', (e) ->
102105
data = JSON.parse(e.data)
103106
if lastEvents[data.id]?.updatedAt != data.updatedAt
104107
if Dashing.debugMode
@@ -108,6 +111,12 @@ source.addEventListener 'message', (e) =>
108111
for widget in widgets[data.id]
109112
widget.receiveData(data)
110113

114+
source.addEventListener 'dashboards', (e) ->
115+
data = JSON.parse(e.data)
116+
if Dashing.debugMode
117+
console.log("Received data for dashboards", data)
118+
if data.dashboard is '*' or window.location.pathname is "/#{data.dashboard}"
119+
Dashing.fire data.event, data
111120

112121
$(document).ready ->
113122
Dashing.run()

lib/dashing.rb

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,23 @@ def protected!
8181
end
8282
end
8383

84+
post '/dashboards/:id' do
85+
request.body.rewind
86+
body = JSON.parse(request.body.read)
87+
body['dashboard'] ||= params['id']
88+
auth_token = body.delete("auth_token")
89+
if !settings.auth_token || settings.auth_token == auth_token
90+
send_event(params['id'], body, 'dashboards')
91+
204 # response without entity body
92+
else
93+
status 401
94+
"Invalid API key\n"
95+
end
96+
end
97+
8498
post '/widgets/:id' do
8599
request.body.rewind
86-
body = JSON.parse(request.body.read)
100+
body = JSON.parse(request.body.read)
87101
auth_token = body.delete("auth_token")
88102
if !settings.auth_token || settings.auth_token == auth_token
89103
send_event(params['id'], body)
@@ -106,16 +120,18 @@ def production?
106120
ENV['RACK_ENV'] == 'production'
107121
end
108122

109-
def send_event(id, body)
123+
def send_event(id, body, target=nil)
110124
body[:id] = id
111125
body[:updatedAt] ||= Time.now.to_i
112-
event = format_event(body.to_json)
113-
Sinatra::Application.settings.history[id] = event
126+
event = format_event(body.to_json, target)
127+
Sinatra::Application.settings.history[id] = event unless target == 'dashboards'
114128
Sinatra::Application.settings.connections.each { |out| out << event }
115129
end
116130

117-
def format_event(body)
118-
"data: #{body}\n\n"
131+
def format_event(body, name=nil)
132+
str = ""
133+
str << "event: #{name}\n" if name
134+
str << "data: #{body}\n\n"
119135
end
120136

121137
def latest_events

test/app_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ def test_get_events
4242
assert_equal 8, parse_data(@connection[0])['value']
4343
end
4444

45+
def test_dashboard_events
46+
post '/dashboards/my_super_sweet_dashboard', JSON.generate({event: 'reload'})
47+
assert_equal 204, last_response.status
48+
49+
get '/events'
50+
assert_equal 200, last_response.status
51+
assert_equal 'dashboards', parse_event(@connection[0])
52+
assert_equal 'reload', parse_data(@connection[0])['event']
53+
end
54+
4555
def test_redirect_to_default_dashboard
4656
with_generated_project do
4757
Sinatra::Application.settings.default_dashboard = 'test1'
@@ -142,4 +152,8 @@ def app
142152
def parse_data(string)
143153
JSON.parse string[/data: (.+)/, 1]
144154
end
155+
156+
def parse_event(string)
157+
string[/event: (.+)/, 1]
158+
end
145159
end

0 commit comments

Comments
 (0)