admin page for getting latencies between users

This commit is contained in:
Nuwan 2021-11-02 18:49:29 +05:30
parent 690219e60e
commit 5cc9868f4d
8 changed files with 116 additions and 2 deletions

View File

@ -637,10 +637,10 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do
controller do
# this actually searches on first name, last name, and email, because of get_autocomplete_items defined below
autocomplete :user, :email, :full => true, :display_value => :autocomplete_display_name
autocomplete :user, :email, :full => true, :display_value => :autocomplete_display_name, extra_data: [:last_jam_addr]
def get_autocomplete_items(parameters)
User.select("email, first_name, last_name, id").where(["email ILIKE ? OR first_name ILIKE ? OR last_name ILIKE ?", "%#{parameters[:term]}%", "%#{parameters[:term]}%", "%#{parameters[:term]}%"])
User.select("email, first_name, last_name, id, last_jam_addr").where(["email ILIKE ? OR first_name ILIKE ? OR last_name ILIKE ?", "%#{parameters[:term]}%", "%#{parameters[:term]}%", "%#{parameters[:term]}%"])
end
@ -698,6 +698,39 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do
redirect_to edit_admin_user_path(@user)
end
def user_latencies
latency_params = params[:latencies]
latency_url = "#{Rails.application.config.latency_data_host}/user_latencies"
uri = URI(latency_url)
if not ([latency_params[:my_user_id], latency_params[:my_public_ip], latency_params[:user_1_id]]).any?{|param| param.blank? }
user_ids = [latency_params[:user_1_id]]
user_ids.push(latency_params[:user_2_id]) unless latency_params[:user_2_id].blank?
user_ids.push(latency_params[:user_3_id]) unless latency_params[:user_3_id].blank?
user_ids.push(latency_params[:user_4_id]) unless latency_params[:user_4_id].blank?
user_ids.push(latency_params[:user_5_id]) unless latency_params[:user_5_id].blank?
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 = {
my_user_id: latency_params[:my_user_id],
my_public_ip: latency_params[:my_public_ip],
users: user_ids
}.to_json
request["Authorization"] = "Basic #{Rails.application.config.latency_data_host_auth_code}"
response = http.request(request)
@user_latencies = response.body
#render text: JSON.pretty_generate(@user_latencies)
rescue => e
render text: e.message
end
else
flash[:error] = 'Please provide all required fields'
redirect_to admin_latency_between_users_path
end
end
end
end

View File

@ -0,0 +1,7 @@
ActiveAdmin.register_page "Latency Between Users" do
menu parent: 'Users'
content :title => "Latency Between Users" do
render 'admin/users/users_latency_form'
end
end

View File

@ -0,0 +1,45 @@
function intToIP(int) {
var part1 = int & 255;
var part2 = ((int >> 8) & 255);
var part3 = ((int >> 16) & 255);
var part4 = ((int >> 24) & 255);
return part4 + "." + part3 + "." + part2 + "." + part1;
}
$(document).ready(function() {
$('form#user_latencies_form #latencies_my_user').on('focus', function(){
$('#latencies_my_user_id').val('')
});
$('form#user_latencies_form #latencies_my_user').bind('railsAutocomplete.select', function(event, data){
$('#latencies_my_user_id').val('');
$('#latencies_my_public_ip').val('');
if(data.item.last_jam_addr){
var ipAddr = intToIP(data.item.last_jam_addr);
$('#latencies_my_public_ip').val(ipAddr);
}
$('#latencies_my_user_id').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);
})
$('form#user_latencies_form #latencies_user_2').bind('railsAutocomplete.select', function(event, data){
$('#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);
})
$('form#user_latencies_form #latencies_user_4').bind('railsAutocomplete.select', function(event, data){
$('#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);
})
});

View File

@ -0,0 +1,23 @@
<%= semantic_form_for 'latencies', url: user_latencies_admin_users_path, html: {id: 'user_latencies_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 => 'Select other users', :class => 'inputs' do %>
<%= f.input :user_1, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'Other user 1' %>
<%= f.input :user_1_id, as: :hidden %>
<%= f.input :user_2, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'Other user 2', required: false %>
<%= f.input :user_2_id, as: :hidden %>
<%= f.input :user_3, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'Other user 3', required: false %>
<%= f.input :user_3_id, as: :hidden %>
<%= f.input :user_4, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'Other user 4', required: false %>
<%= f.input :user_4_id, as: :hidden %>
<%= f.input :user_5, :as => :autocomplete, url: autocomplete_user_email_admin_users_path, label: 'Other user 5', required: false %>
<%= f.input :user_5_id, as: :hidden %>
<% 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(@user_latencies)) -%></pre>

View File

@ -46,4 +46,7 @@ JamAdmin::Application.configure do
config.email_generic_from = 'nobody-dev@jamkazam.com'
config.email_alerts_alias = 'alerts-dev@jamkazam.com'
config.email_social_alias = 'social-dev@jamkazam.com'
config.latency_data_host = "http://localhost:4001/local"
config.latency_data_host_auth_code = "c2VydmVyOnBhc3N3b3Jk"
end

View File

@ -17,6 +17,7 @@ JamAdmin::Application.routes.draw do
get :add_school_user, on: :collection
post :add_school_user, on: :collection
patch :add_school_user, on: :member
post :user_latencies, on: :collection
end
end

1
ruby/.gitignore vendored
View File

@ -23,3 +23,4 @@ vendor
*.swp
*.iml
.byebug_history
.ruby-version