admin page for getting latency recommendation

This commit is contained in:
Nuwan 2021-11-04 19:26:13 +05:30
parent 5cc9868f4d
commit d4a517ab7c
6 changed files with 145 additions and 24 deletions

View File

@ -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"

View File

@ -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

View File

@ -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();
});

View File

@ -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 %>

View File

@ -0,0 +1 @@
<pre><%= JSON.pretty_generate(JSON.parse(@latency_recommendation)) -%></pre>

View File

@ -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