* VRFS-1372 resolved, and not requiring local only until figure out some deployment issues

This commit is contained in:
Seth Call 2014-03-07 14:20:34 -06:00
parent adb37e06a6
commit faed48271b
21 changed files with 123 additions and 57 deletions

View File

@ -222,7 +222,7 @@ ActiveAdmin.register_page "Bootstrap" do
elsif IcecastMountTemplate.count == 0
semantic_form_for IcecastMountTemplate.new, :url => admin_bootstrap_create_mount_template_path, :builder => ActiveAdmin::FormBuilder do |f|
f.inputs "New Mount Template" do
f.input :hostname, :label => "UNUSED?? jam-web public hostname:port (such that icecast can reach it)"
f.input :hostname, :label => "jam-web public hostname:port (such that icecast can reach it)"
f.input :default_mime_type, :as => :select, :collection => ["ogg", "mp3"]
end
f.actions

View File

@ -127,4 +127,4 @@ scores_mod_users2.sql
user_bio.sql
track_changes_counter.sql
scores_better_test_data.sql
connection_client_type.sql

View File

@ -0,0 +1 @@
ALTER TABLE connections ADD COLUMN client_type VARCHAR(256) NOT NULL;

View File

@ -164,7 +164,7 @@ message Login {
optional string token = 3; // a token/cookie from previous successful login attempt or from 'token' field in .music file
optional string client_id = 4; // if supplied, the server will accept this client_id as the unique Id of this client instance
optional string reconnect_music_session_id = 5; // if supplied, the server will attempt to log the client into this session (designed for reconnect scenarios while in-session)
optional string client_type = 6; // 'client', 'browser'
}
// route_to: client

View File

@ -204,7 +204,11 @@ SQL
# this number is used by notification logic elsewhere to know
# 'oh the user joined for the 1st time, so send a friend update', or
# 'don't bother because the user has connected somewhere else already'
def create_connection(user_id, client_id, ip_address, &blk)
def create_connection(user_id, client_id, ip_address, client_type, &blk)
# validate client_type
raise "invalid client_type: #{client_type}" if client_type != 'client' && client_type != 'browser'
count = 0
ConnectionManager.active_record_transaction do |connection_manager|
conn = connection_manager.pg_conn
@ -242,8 +246,8 @@ SQL
lock_connections(conn)
conn.exec("INSERT INTO connections (user_id, client_id, ip_address, addr, locidispid, latitude, longitude, countrycode, region, city, aasm_state) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
[user_id, client_id, ip_address, addr, locidispid, latitude, longitude, countrycode, region, city, Connection::CONNECT_STATE.to_s]).clear
conn.exec("INSERT INTO connections (user_id, client_id, ip_address, client_type, addr, locidispid, latitude, longitude, countrycode, region, city, aasm_state) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)",
[user_id, client_id, ip_address, client_type, addr, locidispid, latitude, longitude, countrycode, region, city, Connection::CONNECT_STATE.to_s]).clear
# we just created a new connection-if this is the first time the user has shown up, we need to send out a message to his friends
conn.exec("SELECT count(user_id) FROM connections WHERE user_id = $1", [user_id]) do |result|

View File

@ -14,6 +14,7 @@ module JamRuby
validates :as_musician, :inclusion => {:in => [true, false]}
validates :client_type, :inclusion => {:in => ['client', 'browser']}
validate :can_join_music_session, :if => :joining_session?
after_save :require_at_least_one_track_when_in_session, :if => :joining_session?
after_create :did_create

View File

@ -96,6 +96,7 @@ FactoryGirl.define do
countrycode 'US'
region 'TX'
city 'Austin'
client_type 'client'
end
factory :invitation, :class => JamRuby::Invitation do

View File

@ -53,8 +53,8 @@ describe ConnectionManager do
user.save!
user = nil
@connman.create_connection(user_id, client_id, "1.1.1.1")
expect { @connman.create_connection(user_id, client_id, "1.1.1.1") }.to raise_error(PG::Error)
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
expect { @connman.create_connection(user_id, client_id, "1.1.1.1", 'client') }.to raise_error(PG::Error)
end
it "create connection then delete it" do
@ -63,7 +63,7 @@ describe ConnectionManager do
#user_id = create_user("test", "user2", "user2@jamkazam.com")
user = FactoryGirl.create(:user)
count = @connman.create_connection(user.id, client_id, "1.1.1.1")
count = @connman.create_connection(user.id, client_id, "1.1.1.1", 'client')
count.should == 1
@ -98,7 +98,7 @@ describe ConnectionManager do
#user_id = create_user("test", "user2", "user2@jamkazam.com")
user = FactoryGirl.create(:user)
count = @connman.create_connection(user.id, client_id, "1.1.1.1")
count = @connman.create_connection(user.id, client_id, "1.1.1.1", 'client')
count.should == 1
@ -151,12 +151,12 @@ describe ConnectionManager do
# friend_update = @message_factory.friend_update(user_id, true)
# @connman.mq_router.should_receive(:publish_to_friends).with([], friend_update, user_id)
# @connman.create_connection(user_id, client_id, "1.1.1.1")
# @connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
# # but a second connection from the same user should cause no such message
# @connman.should_receive(:publish_to_friends).exactly(0).times
# @connman.create_connection(user_id, client_id2, "1.1.1.1")
# @connman.create_connection(user_id, client_id2, "1.1.1.1", 'client')
# end
@ -170,8 +170,8 @@ describe ConnectionManager do
# # we should get a message saying that this user is online
# @connman.create_connection(user_id, client_id, "1.1.1.1")
# @connman.create_connection(user_id, client_id2, "1.1.1.1")
# @connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
# @connman.create_connection(user_id, client_id2, "1.1.1.1", 'client')
# # deleting one of the two connections should cause no messages
# @connman.should_receive(:publish_to_friends).exactly(0).times
@ -237,7 +237,7 @@ describe ConnectionManager do
it "flag stale connection" do
client_id = "client_id8"
user_id = create_user("test", "user8", "user8@jamkazam.com")
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
num = JamRuby::Connection.count(:conditions => ['aasm_state = ?','connected'])
num.should == 1
@ -271,7 +271,7 @@ describe ConnectionManager do
it "expires stale connection" do
client_id = "client_id8"
user_id = create_user("test", "user8", "user8@jamkazam.com")
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
sleep(1)
@connman.flag_stale_connections(1)
@ -296,7 +296,7 @@ describe ConnectionManager do
user = User.find(user_id)
music_session = MusicSession.find(music_session_id)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
connection.errors.any?.should be_false
@ -332,8 +332,8 @@ describe ConnectionManager do
client_id2 = "client_id10.12"
user_id = create_user("test", "user10.11", "user10.11@jamkazam.com", :musician => true)
user_id2 = create_user("test", "user10.12", "user10.12@jamkazam.com", :musician => false)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id2, client_id2, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
@connman.create_connection(user_id2, client_id2, "1.1.1.1", 'client')
music_session_id = create_music_session(user_id)
@ -352,7 +352,7 @@ describe ConnectionManager do
it "as_musician is coerced to boolean" do
client_id = "client_id10.2"
user_id = create_user("test", "user10.2", "user10.2@jamkazam.com", :musician => false)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
music_session_id = create_music_session(user_id)
@ -370,8 +370,8 @@ describe ConnectionManager do
fan_client_id = "client_id10.4"
musician_id = create_user("test", "user10.3", "user10.3@jamkazam.com")
fan_id = create_user("test", "user10.4", "user10.4@jamkazam.com", :musician => false)
@connman.create_connection(musician_id, musician_client_id, "1.1.1.1")
@connman.create_connection(fan_id, fan_client_id, "1.1.1.1")
@connman.create_connection(musician_id, musician_client_id, "1.1.1.1", 'client')
@connman.create_connection(fan_id, fan_client_id, "1.1.1.1", 'client')
music_session_id = create_music_session(musician_id, :fan_access => false)
@ -396,7 +396,7 @@ describe ConnectionManager do
user = User.find(user_id2)
music_session = MusicSession.find(music_session_id)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
# specify real user id, but not associated with this session
expect { @connman.join_music_session(user, client_id, music_session, true, TRACKS) } .to raise_error(ActiveRecord::RecordNotFound)
end
@ -408,7 +408,7 @@ describe ConnectionManager do
user = User.find(user_id)
music_session = MusicSession.new
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
connection.errors.size.should == 1
connection.errors.get(:music_session).should == [ValidationMessages::MUSIC_SESSION_MUST_BE_SPECIFIED]
@ -423,7 +423,7 @@ describe ConnectionManager do
user = User.find(user_id2)
music_session = MusicSession.find(music_session_id)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
# specify real user id, but not associated with this session
expect { @connman.join_music_session(user, client_id, music_session, true, TRACKS) } .to raise_error(ActiveRecord::RecordNotFound)
end
@ -437,7 +437,7 @@ describe ConnectionManager do
user = User.find(user_id)
dummy_music_session = MusicSession.new
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
expect { @connman.leave_music_session(user, Connection.find_by_client_id(client_id), dummy_music_session) }.to raise_error(JamRuby::StateError)
end
@ -453,7 +453,7 @@ describe ConnectionManager do
dummy_music_session = MusicSession.new
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
@connman.join_music_session(user, client_id, music_session, true, TRACKS)
expect { @connman.leave_music_session(user, Connection.find_by_client_id(client_id), dummy_music_session) }.to raise_error(JamRuby::StateError)
end
@ -467,7 +467,7 @@ describe ConnectionManager do
user = User.find(user_id)
music_session = MusicSession.find(music_session_id)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
@connman.join_music_session(user, client_id, music_session, true, TRACKS)
assert_session_exists(music_session_id, true)
@ -497,11 +497,11 @@ describe ConnectionManager do
music_session = MusicSession.find(create_music_session(user_id))
client_id = Faker::Number.number(20)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
client_id = Faker::Number.number(20)
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address)
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address, 'client')
music_session = MusicSession.find(create_music_session(user_id))
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
@ -510,11 +510,11 @@ describe ConnectionManager do
user.update_attribute(:admin, true)
client_id = Faker::Number.number(20)
@connman.create_connection(user_id, client_id, "1.1.1.1")
@connman.create_connection(user_id, client_id, "1.1.1.1", 'client')
music_session = MusicSession.find(create_music_session(user_id))
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
client_id = Faker::Number.number(20)
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address)
@connman.create_connection(user_id, client_id, Faker::Internet.ip_v4_address, 'client')
music_session = MusicSession.find(create_music_session(user_id))
connection = @connman.join_music_session(user, client_id, music_session, true, TRACKS)
connection.errors.size.should == 0

View File

@ -110,10 +110,12 @@
// create a login message using token (a cookie or similiar)
// reconnect_music_session_id is an optional argument that allows the session to be immediately associated
// with a music session.
factory.login_with_token = function(token, reconnect_music_session_id) {
factory.login_with_token = function(token, reconnect_music_session_id, client_type) {
//context.JK.logger.debug("*** login_with_token: client_id = "+$.cookie("client_id"));
var login = { token : token,
client_id : $.cookie("client_id")
var login = {
token : token,
client_id : $.cookie("client_id"),
client_type : client_type
};
return client_container(msg.LOGIN, route_to.SERVER, login);
};

View File

@ -89,7 +89,8 @@
server.rememberLogin = function() {
var token, loginMessage;
token = $.cookie("remember_token");
loginMessage = msg_factory.login_with_token(token, null);
var clientType = context.jamClient.IsNativeClient() ? 'client' : 'browser';
loginMessage = msg_factory.login_with_token(token, null, clientType);
server.send(loginMessage);
};

View File

@ -607,7 +607,7 @@
function CloseRecording() {}
function OnDownloadAvailable() {}
function SaveToClipboard(text) {}
function IsNativeClient() { return false; }
function IsNativeClient() { /* must always return false in all scenarios due to not ruin scoring !*/ return false; }
function SessionLiveBroadcastStart(host, port, mount, sourceUser, sourcePass, preferredClientId, bitrate)
{

View File

@ -11,6 +11,7 @@
};
var logger = context.JK.logger;
var rest = context.JK.Rest();
var sessionLatency;
var sessions = {};
var invitationSessionGroup = {};
@ -42,13 +43,19 @@
// squelch nulls and undefines
queryString = !!queryString ? queryString : "";
$.ajax({
type: "GET",
url: "/api/sessions?" + queryString,
success: afterLoadSessions,
complete: removeSpinner,
error: app.ajaxError
});
if(gon.use_cached_session_scores) {
rest.findScoredSessions(app.clientId, queryString)
.done(afterLoadScoredSessions)
.always(removeSpinner)
.fail(app.ajaxError)
}
else {
rest.findSessions(queryString)
.done(afterLoadSessions)
.fail(app.ajaxError)
.always(removeSpinner)
}
}
function search() {
@ -122,7 +129,31 @@
}
}
function afterLoadSessions(sessionList) {
function afterLoadScoredSessions(sessionList) {
// display the 'no sessions' banner if appropriate
var $noSessionsFound = $('#sessions-none-found');
if(sessionList.length == 0) {
$noSessionsFound.show();
}
else {
$noSessionsFound.hide();
}
$.each(sessionList, function(i, session) {
sessions[session.id] = session;
session.latencyInfo
});
$.each(sessionList, function(i, session) {
renderSession(session.id);
})
context.JK.GA.trackFindSessions(sessionList.length);
}
function afterLoadSessions(sessionList) {
// display the 'no sessions' banner if appropriate
var $noSessionsFound = $('#sessions-none-found');

View File

@ -34,6 +34,20 @@
});
}
function findSessions(queryString) {
return $.ajax({
type: "GET",
url: "/api/sessions?" + queryString
});
}
function findScoredSessions(clientId, queryString) {
return $.ajax({
type: "GET",
url: "/api/sessions/nindex/" + clientId + "?" + queryString
});
}
function updateSession(id, newSession) {
return $.ajax('/api/sessions/' + id, {
type: "PUT",
@ -897,6 +911,8 @@
this.getFollowers = getFollowers;
this.getBands = getBands;
this.getBandFollowers = getBandFollowers;
this.findSessions = findSessions;
this.findScoredSessions = findScoredSessions;
this.updateSession = updateSession;
this.getSessionHistory = getSessionHistory;
this.addSessionComment = addSessionComment;

View File

@ -34,6 +34,11 @@
var gearLatency = context.jamClient.SessionGetDeviceLatency();
var showJoinLink = true;
// quick dance to make the new scoring find sessions API work
if(session.max_score) {
latencyInfo = {averageLatency: session.max_score}
}
var totalLatency = (latencyInfo.averageLatency / 2) + gearLatency;
logger.debug("latencyInfo.averageLatency=" + latencyInfo.averageLatency);

View File

@ -1,5 +1,5 @@
class ApiIcecastController < ApiController
before_filter :local_only
#before_filter :local_only
before_filter :parse_mount
# each request will have this in it, if it's icecast.

View File

@ -25,6 +25,8 @@ class ClientsController < ApplicationController
# let javascript have access to the server's opinion if this is a native client
gon.isNativeClient = @nativeClient
gon.use_cached_session_scores = Rails.application.config.use_cached_session_scores
if current_user
render :layout => 'client'
else

View File

@ -207,11 +207,6 @@
var ftueWizard = new JK.FtueWizard(JK.app);
ftueWizard.initialize();
/* Commenting Out while reworking
var ftueAudioTestingScreen = new JK.FtueAudioTestingScreen(JK.app);
ftueAudioTestingScreen.initialize();
*/
var testBridgeScreen = new JK.TestBridgeScreen(JK.app);
testBridgeScreen.initialize();
@ -242,7 +237,7 @@
var start = new Date();
var returnVal = original.apply(originalJamClient, arguments)
var time = new Date().getTime() - start.getTime();
if(time > 0) {
if(time > 0) { // if 0, you'll see ALL bridge calls. If you set it to a higher value, you'll only see calls that are beyond that threshold
console.error(time + "ms jamClient." + jsKey);
}

View File

@ -214,5 +214,8 @@ if defined?(Bundler)
config.send_join_session_email_notifications = true
config.use_promos_on_homepage = false
# should we use the new FindSessions API that has server-side scores
config.use_cached_session_scores = false
end
end

View File

@ -67,5 +67,7 @@ SampleApp::Application.configure do
config.twitter_app_secret = 'PfG1jAUMnyrimPcDooUVQaJrG1IuDjUyGg5KciOo'
config.use_promos_on_homepage = false
config.use_cached_session_scores = false
end

View File

@ -80,6 +80,7 @@ FactoryGirl.define do
countrycode 'US'
region 'TX'
city 'Austin'
client_type 'client'
end
factory :friendship, :class => JamRuby::Friendship do

View File

@ -448,8 +448,9 @@ module JamWebsockets
token = login.token if login.value_for_tag(3)
client_id = login.client_id if login.value_for_tag(4)
reconnect_music_session_id = login.reconnect_music_session_id if login.value_for_tag(5)
client_type = login.client_type if login.value_for_tag(6)
@log.info("*** handle_login: token=#{token}; client_id=#{client_id}")
@log.info("*** handle_login: token=#{token}; client_id=#{client_id}, client_type=#{client_type}")
reconnected = false
# you don't have to supply client_id in login--if you don't, we'll generate one
@ -529,7 +530,7 @@ module JamWebsockets
unless connection
# log this connection in the database
ConnectionManager.active_record_transaction do |connection_manager|
connection_manager.create_connection(user.id, client.client_id, remote_ip) do |conn, count|
connection_manager.create_connection(user.id, client.client_id, remote_ip, client_type) do |conn, count|
if count == 1
Notification.send_friend_update(user.id, true, conn)
end