admin page for getting latency recommendation
This commit is contained in:
parent
5cc9868f4d
commit
d4a517ab7c
|
|
@ -699,6 +699,64 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do
|
|||
|
||||
end
|
||||
|
||||
def user_latency_recommendation
|
||||
recommendation_params = params[:latency_recommendation]
|
||||
|
||||
offset = recommendation_params[:offset].blank?? 0 : recommendation_params[:offset]
|
||||
limit = recommendation_params[:limit].blank?? 20 : recommendation_params[:limit]
|
||||
|
||||
is_valid = [
|
||||
recommendation_params[:my_user_id],
|
||||
recommendation_params[:my_public_ip]
|
||||
].all?{ |param|
|
||||
param.present?
|
||||
}
|
||||
|
||||
if is_valid
|
||||
instruments = []
|
||||
instruments << recommendation_params[:instruments_beginner].reject(&:blank?).map{|i| { id: i, proficiency: 1} }
|
||||
instruments << recommendation_params[:instruments_advanced].reject(&:blank?).map{|i| { id: i, proficiency: 2} }
|
||||
instruments << recommendation_params[:instruments_expert].reject(&:blank?).map{|i| { id: i, proficiency: 3} }
|
||||
instruments.flatten!
|
||||
genres = recommendation_params[:genres].reject(&:blank?)
|
||||
wifi = recommendation_params[:wifi]
|
||||
max_latency = recommendation_params[:max_latency]
|
||||
|
||||
data = {
|
||||
my_user_id: recommendation_params[:my_user_id],
|
||||
my_public_ip: recommendation_params[:my_public_ip],
|
||||
offset: offset,
|
||||
limit: limit
|
||||
}
|
||||
|
||||
data.merge!({query: recommendation_params[:query]}) unless recommendation_params[:query].blank?
|
||||
data.merge!({instruments: instruments}) unless instruments.empty?
|
||||
data.merge!({genres: genres}) unless genres.empty?
|
||||
data.merge!({wifi: wifi}) if %w(true false).include?(wifi)
|
||||
data.merge!({max_latency: max_latency}) unless max_latency.blank?
|
||||
|
||||
latency_url = "#{Rails.application.config.latency_data_host}/recommendations"
|
||||
uri = URI(latency_url)
|
||||
|
||||
begin
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
http.read_timeout = 5
|
||||
http.use_ssl = true if Rails.application.config.latency_data_host.start_with?("https://")
|
||||
request = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
|
||||
request.body = data.to_json
|
||||
request["Authorization"] = "Basic #{Rails.application.config.latency_data_host_auth_code}"
|
||||
response = http.request(request)
|
||||
@latency_recommendation = response.body
|
||||
rescue => exception
|
||||
render text: exception.message
|
||||
end
|
||||
|
||||
else
|
||||
flash[:error] = 'Please provide all required fields'
|
||||
redirect_to admin_latency_recommendation_path
|
||||
end
|
||||
end
|
||||
|
||||
def user_latencies
|
||||
latency_params = params[:latencies]
|
||||
latency_url = "#{Rails.application.config.latency_data_host}/user_latencies"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
ActiveAdmin.register_page "Latency Recommendation" do
|
||||
menu parent: 'Users'
|
||||
|
||||
content :title => "Latency Recommentation" do
|
||||
render 'admin/users/latency_recommendation_form'
|
||||
end
|
||||
end
|
||||
|
|
@ -7,39 +7,71 @@ function intToIP(int) {
|
|||
return part4 + "." + part3 + "." + part2 + "." + part1;
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('form#user_latencies_form #latencies_my_user').on('focus', function(){
|
||||
$('#latencies_my_user_id').val('')
|
||||
function handleUserLatencyForm(){
|
||||
var $userLatenciesForm = $('form#user_latencies_form');
|
||||
var $latenciesMyUser = $userLatenciesForm.find('#latencies_my_user');
|
||||
var $latenciesMyUserId = $userLatenciesForm.find('#latencies_my_user_id');
|
||||
var $latenciesMyPublicIp = $userLatenciesForm.find('#latencies_my_public_ip');
|
||||
|
||||
$latenciesMyUser.on('focus', function(){
|
||||
$latenciesMyUserId.val('')
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_my_user').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_my_user_id').val('');
|
||||
$('#latencies_my_public_ip').val('');
|
||||
$latenciesMyUser.bind('railsAutocomplete.select', function(event, data){
|
||||
$latenciesMyUserId.val('');
|
||||
$latenciesMyPublicIp.val('');
|
||||
if(data.item.last_jam_addr){
|
||||
var ipAddr = intToIP(data.item.last_jam_addr);
|
||||
$('#latencies_my_public_ip').val(ipAddr);
|
||||
$latenciesMyPublicIp.val(ipAddr);
|
||||
}
|
||||
$('#latencies_my_user_id').val(data.item.id);
|
||||
|
||||
$latenciesMyUserId.val(data.item.id);
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_user_1').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_user_1_id').val(data.item.id);
|
||||
})
|
||||
$userLatenciesForm.find('#latencies_user_1').bind('railsAutocomplete.select', function(event, data){
|
||||
$userLatenciesForm.find('#latencies_user_1_id').val(data.item.id);
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_user_2').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_user_2_id').val(data.item.id);
|
||||
})
|
||||
$userLatenciesForm.find('#latencies_user_2').bind('railsAutocomplete.select', function(event, data){
|
||||
$userLatenciesForm.find('#latencies_user_2_id').val(data.item.id);
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_user_3').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_user_3_id').val(data.item.id);
|
||||
})
|
||||
$userLatenciesForm.find('#latencies_user_3').bind('railsAutocomplete.select', function(event, data){
|
||||
$userLatenciesForm.find('#latencies_user_3_id').val(data.item.id);
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_user_4').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_user_4_id').val(data.item.id);
|
||||
})
|
||||
$userLatenciesForm.find('#latencies_user_4').bind('railsAutocomplete.select', function(event, data){
|
||||
$userLatenciesForm.find('#latencies_user_4_id').val(data.item.id);
|
||||
});
|
||||
|
||||
$('form#user_latencies_form #latencies_user_5').bind('railsAutocomplete.select', function(event, data){
|
||||
$('#latencies_user_5_id').val(data.item.id);
|
||||
})
|
||||
$userLatenciesForm.find('#latencies_user_5').bind('railsAutocomplete.select', function(event, data){
|
||||
$userLatenciesForm.find('#latencies_user_5_id').val(data.item.id);
|
||||
});
|
||||
}
|
||||
|
||||
function handleLatencyRecommendationForm(){
|
||||
var $latencyRecommendationForm = $('form#latency_recommendation_form');
|
||||
var $latenciesMyUser = $latencyRecommendationForm.find('#latency_recommendation_my_user');
|
||||
var $latenciesMyUserId = $latencyRecommendationForm.find('#latency_recommendation_my_user_id');
|
||||
var $latenciesMyPublicIp = $latencyRecommendationForm.find('#latency_recommendation_my_public_ip');
|
||||
|
||||
$latenciesMyUser.on('focus', function(){
|
||||
$latenciesMyUserId.val('')
|
||||
});
|
||||
|
||||
$latenciesMyUser.bind('railsAutocomplete.select', function(event, data){
|
||||
$latenciesMyUserId.val('');
|
||||
$latenciesMyPublicIp.val('');
|
||||
if(data.item.last_jam_addr){
|
||||
var ipAddr = intToIP(data.item.last_jam_addr);
|
||||
$latenciesMyPublicIp.val(ipAddr);
|
||||
}
|
||||
$latenciesMyUserId.val(data.item.id);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
handleUserLatencyForm();
|
||||
handleLatencyRecommendationForm();
|
||||
});
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<%= semantic_form_for 'latency_recommendation', url: user_latency_recommendation_admin_users_path, html: {id: 'latency_recommendation_form'} do |f| %>
|
||||
<%= f.inputs :name => 'Select user', :class => 'inputs' do %>
|
||||
<%= f.input :my_user, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'My user name/email' %>
|
||||
<%= f.input :my_user_id, as: :hidden %>
|
||||
<%= f.input :my_public_ip, label: 'My user public IP' %>
|
||||
<% end %>
|
||||
<%= f.inputs :name => 'Query parameters', :class => 'inputs' do %>
|
||||
<%= f.input :query, required: false %>
|
||||
<%= f.input :instruments_beginner, collection: JamRuby::Instrument.all, input_html: { multiple: true }, required: false %>
|
||||
<%= f.input :instruments_advanced, collection: JamRuby::Instrument.all, input_html: { multiple: true }, required: false %>
|
||||
<%= f.input :instruments_expert, collection: JamRuby::Instrument.all, input_html: { multiple: true }, required: false %>
|
||||
<%= f.input :genres, as: :select, collection: JamRuby::Genre.all, input_html: { multiple: true }, required: false %>
|
||||
<%= f.input :wifi, as: :select, collection: {'Any': 'any', 'Yes': true, 'No': false }, required: false %>
|
||||
<%= f.input :max_latency, required: false %>
|
||||
<%= f.input :offset, input_html: { value: 0 } %>
|
||||
<%= f.input :limit, input_html: { value: 20 } %>
|
||||
<% end %>
|
||||
<%= f.actions do %>
|
||||
<%= f.action :submit, :as => :button, label: 'Submit' %>
|
||||
<%= f.action :cancel, :as => :link, label: 'Cancel' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
|
@ -0,0 +1 @@
|
|||
<pre><%= JSON.pretty_generate(JSON.parse(@latency_recommendation)) -%></pre>
|
||||
|
|
@ -18,6 +18,7 @@ JamAdmin::Application.routes.draw do
|
|||
post :add_school_user, on: :collection
|
||||
patch :add_school_user, on: :member
|
||||
post :user_latencies, on: :collection
|
||||
post :user_latency_recommendation, on: :collection
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue