diff --git a/web/app/assets/javascripts/hoverMusician.js b/web/app/assets/javascripts/hoverMusician.js
index c8b927cee..eff5a8713 100644
--- a/web/app/assets/javascripts/hoverMusician.js
+++ b/web/app/assets/javascripts/hoverMusician.js
@@ -7,6 +7,7 @@
var logger = context.JK.logger;
var rest = context.JK.Rest();
var hoverSelector = "#musician-hover";
+ var latencyBadgeSelector = '#musician-latency-badge';
var $templateLatency = null;
var sessionUtils = context.JK.SessionUtils;
@@ -130,6 +131,9 @@
$(hoverSelector).css(css);
$(hoverSelector).fadeIn(500);
+
+ bindUserLatencyUpdate(userId);
+ LatencyActions.resolve([userId])
})
.fail(function(xhr) {
if(xhr.status >= 500) {
@@ -180,8 +184,36 @@
}
+ function bindUserLatencyUpdate(userId){
+ var latency;
+ $(document).one('user_latency_update', function(e, latencyData){
+ logger.debug("bindUserLatencyUpdate", latencyData)
+ //latency = latencyData[0]
+ latency = latencyData
+ if(latency['id'] === userId){
+ showLatencyBadge(latency)
+ }
+ });
+ }
+
+ function showLatencyBadge(latency){
+ $templateLatency = $("#template-account-session-latency");
+ var latencyBadge = context._.template(
+ $templateLatency.html(),
+ $.extend(latency, sessionUtils.createLatency(latency)),
+ { variable: 'data' }
+ );
+ //logger.debug('BADGE', latencyBadge)
+ $(latencyBadgeSelector).html(latencyBadge)
+ }
+
+ function unbindUserLatencyUpdate(){
+ $(document).off('user_latency_update');
+ }
+
this.hideBubble = function() {
- $(hoverSelector).hide();
+ unbindUserLatencyUpdate();
+ $(hoverSelector).hide();
};
this.id = function() {
diff --git a/web/app/assets/javascripts/jam_rest.js b/web/app/assets/javascripts/jam_rest.js
index a1094a440..8ffef1c61 100644
--- a/web/app/assets/javascripts/jam_rest.js
+++ b/web/app/assets/javascripts/jam_rest.js
@@ -1775,14 +1775,13 @@
function getLatencyToUsers(options) {
var id = getId(options);
- var user_ids = options['user_ids'];
- var data = { user_ids: user_ids };
+ logger.debug(">>> getLatencyToUsers", options)
return $.ajax({
type: "GET",
url: '/api/users/' + id + '/latencies',
dataType: "json",
contentType: 'application/json',
- data: JSON.stringify(options)
+ data: options
});
}
diff --git a/web/app/assets/javascripts/react-components/stores/LatencyStore.js.coffee b/web/app/assets/javascripts/react-components/stores/LatencyStore.js.coffee
index e019261a3..b42563e02 100644
--- a/web/app/assets/javascripts/react-components/stores/LatencyStore.js.coffee
+++ b/web/app/assets/javascripts/react-components/stores/LatencyStore.js.coffee
@@ -13,22 +13,23 @@ rest = new context.JK.Rest()
this.listenTo(context.AppStore, this.onAppInit)
onAppInit: (@app) ->
- logger.debug("LatencyStore.onAppInit")
changed: () ->
+ $(document).trigger("user_latency_update", @latencies)
@trigger(@latencies)
onResolve: (user_ids) ->
- rest.getLatencyToUsers(user_ids).done((response) => @onLoaded(response)).fail((jqXHR) => @onUserFail(jqXHR))
-
+ # rest.getLatencyToUsers({user_ids: user_ids}).done((response) => @onLoaded(response)).fail((jqXHR) => @onUserFail(jqXHR))
+ @latencies.push({ id: '6337dc99-5023-477f-8781-3a810bb35b61', audio_latency: 3, full_score: 5, internet_score:2 })
+ @changed()
+
onLoaded: (response) ->
logger.debug("LatencyStore.onLoaded", response);
- @latencies.push([{ user_id: '12345', score: 5 }])
+ @latencies.push(response)
onUserFail:(jqXHR) ->
logger.debug("LatencyStore.onFail", jqXHR);
- #@app.layout.notify({title: 'Unable to Update User Info', text: "We recommend you refresh the page."})
-
+
getState:() ->
{ latencies: @latencies }
}
diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb
index 2e78eb826..c5b9afb5a 100644
--- a/web/app/controllers/api_users_controller.rb
+++ b/web/app/controllers/api_users_controller.rb
@@ -937,15 +937,32 @@ class ApiUsersController < ApiController
#fetch latency information from latency-graph serverless
def get_latencies
- query_str = params[:user_ids].split(',').inject(""){|q, id| q.concat("id=#{id}&")}
- latency_url = "#{Rails.application.config.latency_data_host}/dev/user_latencies/#{current_user.id}?#{query_str}"
- url = URI(latency_url)
+
+ user_ids = params[:user_ids]
+ #query_str = user_ids.inject(""){|q, id| q.concat("id=#{id}&")}
+ #latency_url = "#{Rails.application.config.latency_data_host}/dev/user_latencies/#{current_user.id}?#{query_str}"
+ latency_url = "#{Rails.application.config.latency_data_host}/dev/user_latencies"
+ uri = URI(latency_url)
begin
- http = Net::HTTP.new(url.host, url.port)
+ header = {
+ 'Content-Type': 'text/json',
+ 'Authorization': "Basic #{Rails.application.config.latency_data_host_auth_code}"
+ }
+ http = Net::HTTP.new(uri.host, uri.port, read_timeout: 5, open_timeout: 5)
http.use_ssl = true if Rails.application.config.latency_data_host.start_with?("https://")
- request = Net::HTTP::Get.new(url)
- request["Authorization"] = "Basic #{Rails.application.config.latency_data_host_auth_code}"
- response = http.request(request)
+ req = Net::HTTP::Post.new(uri.path, header)
+ req["Authorization"] = "Basic #{Rails.application.config.latency_data_host_auth_code}"
+ data = {
+ my_user_id: current_user.id,
+ my_public_ip: request.remote_ip,
+ my_device_id: "unknown",
+ my_client_id: "unknown",
+ users: user_ids
+ }
+ req.body = data.to_json
+
+ response = http.request(req)
+
if response.is_a?(Net::HTTPOK) || response.is_a?(Net::HTTPSuccess)
render json: response.body, status: 200
else
@@ -962,7 +979,7 @@ class ApiUsersController < ApiController
render json: {}, status: 422
end
rescue
- Bugsnag.notify("Latency server returned code: #{response.code}")
+ Bugsnag.notify("Latency server returned code: #{response.code}") if response
render json: {}, status: 500
end
end
diff --git a/web/app/views/clients/_hoverMusician.html.erb b/web/app/views/clients/_hoverMusician.html.erb
index bc88742b8..39b8277c5 100644
--- a/web/app/views/clients/_hoverMusician.html.erb
+++ b/web/app/views/clients/_hoverMusician.html.erb
@@ -117,7 +117,8 @@