* VRFS-2938 - packaging phase now shows % indicator
This commit is contained in:
parent
005dfdaa91
commit
4cf4e21552
|
|
@ -276,4 +276,5 @@ jam_track_duration.sql
|
|||
sales.sql
|
||||
show_whats_next_count.sql
|
||||
recurly_adjustments.sql
|
||||
signup_hints.sql
|
||||
signup_hints.sql
|
||||
packaging_notices.sql
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
ALTER TABLE jam_track_rights ADD COLUMN packaging_steps INTEGER;
|
||||
ALTER TABLE jam_track_rights ADD COLUMN current_packaging_step INTEGER;
|
||||
ALTER TABLE jam_track_rights ADD COLUMN last_step_at TIMESTAMP;
|
||||
|
|
@ -22,9 +22,21 @@ module JamRuby
|
|||
save_jam_track_right_jkz(jam_track_right, sample_rate)
|
||||
end
|
||||
|
||||
# increment the step, which causes a notification to be sent to the client so it can keep the UI fresh as the packaging step goes on
|
||||
def bump_step(jam_track_right, step)
|
||||
last_step_at = Time.now
|
||||
jam_track_right.current_packaging_step = step
|
||||
jam_track_right.last_step_at = Time.now
|
||||
JamTrackRight.where(:id => jam_track_right.id).update_all(last_step_at: last_step_at, current_packaging_step: step)
|
||||
SubscriptionMessage.jam_track_signing_job_change(jam_track_right)
|
||||
step = step + 1
|
||||
step
|
||||
end
|
||||
|
||||
def save_jam_track_right_jkz(jam_track_right, sample_rate=48)
|
||||
jam_track = jam_track_right.jam_track
|
||||
py_root = APP_CONFIG.jamtracks_dir
|
||||
step = 0
|
||||
Dir.mktmpdir do |tmp_dir|
|
||||
jam_file_opts=""
|
||||
jam_track.jam_track_tracks.each do |jam_track_track|
|
||||
|
|
@ -36,6 +48,9 @@ module JamRuby
|
|||
track_filename = File.join(tmp_dir, nm)
|
||||
track_url = jam_track_track.sign_url(120, sample_rate)
|
||||
@@log.info("downloading #{track_url} to #{track_filename}")
|
||||
|
||||
step = bump_step(jam_track_right, step)
|
||||
|
||||
copy_url_to_file(track_url, track_filename)
|
||||
jam_file_opts << " -i #{Shellwords.escape("#{track_filename}+#{jam_track_track.part}")}"
|
||||
end
|
||||
|
|
@ -48,6 +63,8 @@ module JamRuby
|
|||
version = jam_track.version
|
||||
@@log.info "Executing python source in #{py_file}, outputting to #{tmp_dir} (#{output_jkz})"
|
||||
|
||||
step = bump_step(jam_track_right, step)
|
||||
|
||||
# From http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby/5970819#5970819:
|
||||
cli = "python #{py_file} -D -k #{sku} -p #{Shellwords.escape(tmp_dir)}/pkey.pem -s #{Shellwords.escape(tmp_dir)}/skey.pem #{jam_file_opts} -o #{Shellwords.escape(output_jkz)} -t #{Shellwords.escape(title)} -V #{Shellwords.escape(version)}"
|
||||
Open3.popen3(cli) do |stdin, stdout, stderr, wait_thr|
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def self.jam_track_signing_job_change(jam_track_right)
|
||||
Notification.send_subscription_message('jam_track_right', jam_track_right.id.to_s, {signing_state: jam_track_right.signing_state}.to_json )
|
||||
Notification.send_subscription_message('jam_track_right', jam_track_right.id.to_s, {signing_state: jam_track_right.signing_state, current_packaging_step: jam_track_right.current_packaging_step, packaging_steps: jam_track_right.packaging_steps}.to_json )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -195,6 +195,10 @@ module JamRuby
|
|||
JamTrackTrack.where(jam_track_id: self.id).where(track_type: 'Master').first
|
||||
end
|
||||
|
||||
def stem_tracks
|
||||
JamTrackTrack.where(jam_track_id: self.id).where(track_type: 'Track')
|
||||
end
|
||||
|
||||
def can_download?(user)
|
||||
owners.include?(user)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ module JamRuby
|
|||
# try to catch major transitions:
|
||||
|
||||
# if just queue time changes, start time changes, or signed time changes, send out a notice
|
||||
if signing_queued_at_was != signing_queued_at || signing_started_at_was != signing_started_at || last_signed_at_was != last_signed_at
|
||||
if signing_queued_at_was != signing_queued_at || signing_started_at_was != signing_started_at || last_signed_at_was != last_signed_at || current_packaging_step != current_packaging_step_was || packaging_steps != packaging_steps_was
|
||||
SubscriptionMessage.jam_track_signing_job_change(self)
|
||||
end
|
||||
end
|
||||
|
|
@ -148,7 +148,11 @@ module JamRuby
|
|||
if signed
|
||||
state = 'SIGNED'
|
||||
elsif signing_started_at
|
||||
if Time.now - signing_started_at > APP_CONFIG.signing_job_run_max_time
|
||||
# the maximum amount of time the packaging job can take is 10 seconds * num steps. For a 10 track song, this will be 110 seconds. It's a bit long.
|
||||
signing_job_run_max_time = packaging_steps * 10
|
||||
if Time.now - signing_started_at > signing_job_run_max_time
|
||||
state = 'SIGNING_TIMEOUT'
|
||||
elsif Time.now - last_step_at > APP_CONFIG.signing_step_max_time
|
||||
state = 'SIGNING_TIMEOUT'
|
||||
else
|
||||
state = 'SIGNING'
|
||||
|
|
|
|||
|
|
@ -34,8 +34,20 @@ module JamRuby
|
|||
return
|
||||
end
|
||||
|
||||
# compute the step count
|
||||
total_steps = @jam_track_right.jam_track.stem_tracks.count + 1 # the '1' represents the jkz.py invocation
|
||||
|
||||
# track that it's started ( and avoid db validations )
|
||||
JamTrackRight.where(:id => @jam_track_right.id).update_all(:signing_started_at => Time.now, :should_retry => false)
|
||||
signing_started_at = Time.now
|
||||
last_step_at = Time.now
|
||||
JamTrackRight.where(:id => @jam_track_right.id).update_all(:signing_started_at => signing_started_at, :should_retry => false, packaging_steps: total_steps, current_packaging_step: 0, last_step_at: last_step_at)
|
||||
# because we are skiping after_save, we have to keep the model current for the notification. A bit ugly...
|
||||
@jam_track_right.current_packaging_step = 0
|
||||
@jam_track_right.packaging_steps = total_steps
|
||||
@jam_track_right.signing_started_at = signing_started_at
|
||||
@jam_track_right.should_retry = false
|
||||
@jam_track_right.last_step_at = Time.now
|
||||
SubscriptionMessage.jam_track_signing_job_change(@jam_track_right)
|
||||
JamRuby::JamTracksManager.save_jam_track_right_jkz(@jam_track_right, self.bitrate)
|
||||
|
||||
# If bitrate is 48 (the default), use that URL. Otherwise, use 44kHz:
|
||||
|
|
|
|||
|
|
@ -134,12 +134,12 @@ describe JamTrackRight do
|
|||
end
|
||||
|
||||
it "signing" do
|
||||
right = FactoryGirl.create(:jam_track_right, signing_started_at: Time.now)
|
||||
right = FactoryGirl.create(:jam_track_right, signing_started_at: Time.now, packaging_steps: 3, current_packaging_step:0, last_step_at:Time.now)
|
||||
right.signing_state.should eq('SIGNING')
|
||||
end
|
||||
|
||||
it "signing timeout" do
|
||||
right = FactoryGirl.create(:jam_track_right, signing_started_at: Time.now - (APP_CONFIG.signing_job_run_max_time + 1))
|
||||
right = FactoryGirl.create(:jam_track_right, signing_started_at: Time.now - 100, packaging_steps: 3, current_packaging_step:0, last_step_at:Time.now)
|
||||
right.signing_state.should eq('SIGNING_TIMEOUT')
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -166,8 +166,8 @@ def app_config
|
|||
false
|
||||
end
|
||||
|
||||
def signing_job_run_max_time
|
||||
60 # 1 minute
|
||||
def signing_step_max_time
|
||||
40 # 40 seconds
|
||||
end
|
||||
|
||||
def signing_job_queue_max_time
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
}
|
||||
|
||||
function beforeShowOrder() {
|
||||
$purchasedJamTracks.empty()
|
||||
$orderPrompt.addClass('hidden')
|
||||
$emptyCartPrompt.addClass('hidden')
|
||||
$noAccountInfoPrompt.addClass('hidden')
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
|
|||
@tracked = false
|
||||
@ajaxEnqueueAborted = false
|
||||
@ajaxGetJamTrackRightAborted = false
|
||||
@currentPackagingStep = null
|
||||
@totalSteps = null
|
||||
|
||||
throw "no JamTrack specified" unless @jamTrack?
|
||||
throw "invalid size" if @size != 'large' && @size != 'small'
|
||||
|
|
@ -374,8 +376,22 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
|
|||
.done(this.processJamTrackRight)
|
||||
.fail(this.processJamTrackRightFail)
|
||||
|
||||
# update progress indicator for packaging step
|
||||
updateSteps: () =>
|
||||
if @currentPackagingStep? and @totalSteps?
|
||||
progress = "#{Math.round(@currentPackagingStep/@totalSteps * 100)}%"
|
||||
else
|
||||
progress = '...'
|
||||
|
||||
@root.find('.progress').text(progress)
|
||||
|
||||
processSigningState: (jamTrackRight) =>
|
||||
signingState = jamTrackRight.signing_state
|
||||
@totalSteps = jamTrackRight.packaging_steps
|
||||
@currentPackagingStep = jamTrackRight.current_packaging_step
|
||||
|
||||
@updateSteps()
|
||||
|
||||
processSigningState: (signingState) =>
|
||||
@logger.debug("DownloadJamTrack: processSigningState: " + signingState)
|
||||
|
||||
switch signingState
|
||||
|
|
@ -435,8 +451,9 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
|
|||
|
||||
|
||||
processJamTrackRight: (myJamTrack) =>
|
||||
@logger.debug("processJamTrackRight", myJamTrack)
|
||||
unless @ajaxGetJamTrackRightAborted
|
||||
this.processSigningState(myJamTrack.signing_state)
|
||||
this.processSigningState(myJamTrack)
|
||||
else
|
||||
@logger.debug("DownloadJamTrack: ignoring processJamTrackRight response")
|
||||
|
||||
|
|
@ -459,9 +476,9 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
|
|||
@logger.debug("DownloadJamTrack: ignoring processEnqueueJamTrackFail response")
|
||||
|
||||
onJamTrackRightEvent: (e, data) =>
|
||||
@logger.debug("DownloadJamTrack: subscription notification received: type:" + data.type)
|
||||
@logger.debug("DownloadJamTrack: subscription notification received: type:" + data.type, data)
|
||||
this.expectTransition()
|
||||
this.processSigningState(data.body.signing_state)
|
||||
this.processSigningState(data.body)
|
||||
|
||||
downloadProgressCallback: (bytesReceived, bytesTotal, downloadSpeedMegSec, timeRemaining) =>
|
||||
bytesReceived = Number(bytesReceived)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
object @jam_track_right
|
||||
|
||||
attributes :id, :signing_state, :error_count, :error_reason, :error_detail
|
||||
attributes :id, :error_count, :error_reason, :error_detail, :signing_state, :packaging_steps, :current_packaging_step
|
||||
|
|
@ -24,11 +24,15 @@ script type="text/template" id="template-download-jamtrack-state-packaging"
|
|||
.state-packaging
|
||||
.large.hidden
|
||||
.msg
|
||||
| Your JamTrack is currently being created on the JamKazam server.
|
||||
| Your JamTrack is currently being created on the JamKazam server. (
|
||||
span.progress
|
||||
| )
|
||||
.spinner-large
|
||||
.small.hidden
|
||||
.msg
|
||||
| {{data.name}} (packaging)
|
||||
| {{data.name}} (packaging -
|
||||
span.progress
|
||||
| )
|
||||
.spinner-small
|
||||
|
||||
script type="text/template" id="template-download-jamtrack-state-downloading"
|
||||
|
|
|
|||
|
|
@ -215,10 +215,10 @@ if defined?(Bundler)
|
|||
config.jamtracks_dir = ENV['JAMTRACKS_DIR'] || File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "jamtracks"))
|
||||
config.jmep_dir = ENV['JMEP_DIR'] || File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "jmep"))
|
||||
|
||||
# amount of time before we think packaging job is broken
|
||||
config.signing_job_run_max_time = 60 # 1 minute
|
||||
# amount of time before we think the queue is stuck
|
||||
config.signing_job_queue_max_time = 20 # 20 seconds
|
||||
# amount of time to allow before giving up on a single step in packaging job
|
||||
config.signing_step_max_time = 40; # 40 seconds
|
||||
|
||||
config.email_alerts_alias = 'alerts@jamkazam.com' # should be used for 'oh no' server down/service down sorts of emails
|
||||
config.email_generic_from = 'nobody@jamkazam.com'
|
||||
|
|
|
|||
|
|
@ -71,8 +71,8 @@ def web_config
|
|||
100
|
||||
end
|
||||
|
||||
def signing_job_run_max_time
|
||||
60 # 1 minute
|
||||
def signing_step_max_time
|
||||
40 # 40 seconds
|
||||
end
|
||||
|
||||
def signing_job_queue_max_time
|
||||
|
|
|
|||
Loading…
Reference in New Issue