VRFS-2782 : Support multiple bitrates throughout models, managers, up loaders and builders.
This commit is contained in:
parent
ef287187ba
commit
bd08b40e71
|
|
@ -23,6 +23,12 @@ class JamTrackTrackUploader < CarrierWave::Uploader::Base
|
|||
end
|
||||
|
||||
def filename
|
||||
"#{model.store_dir}/#{model.filename}" if model.id
|
||||
if model.id
|
||||
if mounted_as==:url_48
|
||||
"#{model.store_dir}/#{model.filename}"
|
||||
else
|
||||
"#{model.store_dir}/#{mounted_as}/#{model.filename}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@ module JamRuby
|
|||
@@log = Logging.logger[JamTracksManager]
|
||||
|
||||
class << self
|
||||
def save_jam_track_jkz(user, jam_track)
|
||||
def save_jam_track_jkz(user, jam_track, bitrate=48)
|
||||
jam_track_right = jam_track.right_for_user(user)
|
||||
raise ArgumentError if jam_track_right.nil?
|
||||
save_jam_track_right_jkz(jam_track_right)
|
||||
save_jam_track_right_jkz(jam_track_right, bitrate)
|
||||
end
|
||||
|
||||
def save_jam_track_right_jkz(jam_track_right)
|
||||
def save_jam_track_right_jkz(jam_track_right, bitrate=48)
|
||||
jam_track = jam_track_right.jam_track
|
||||
#py_root = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "jamtracks"))
|
||||
py_root = APP_CONFIG.jamtracks_dir
|
||||
|
|
@ -31,7 +31,7 @@ module JamRuby
|
|||
# use the jam_track_track ID as the filename.ogg/.wav, because it's important metadata
|
||||
nm = jam_track_track.id + File.extname(jam_track_track.filename)
|
||||
track_filename = File.join(tmp_dir, nm)
|
||||
track_url = jam_track_track.sign_url
|
||||
track_url = jam_track_track.sign_url(120, bitrate)
|
||||
copy_url_to_file(track_url, track_filename)
|
||||
copy_url_to_file(track_url, File.join(".", nm))
|
||||
jam_file_opts << " -i '#{track_filename}+#{jam_track_track.part}'"
|
||||
|
|
@ -54,11 +54,14 @@ module JamRuby
|
|||
#puts "stdout: #{out}, stderr: #{err}"
|
||||
raise ArgumentError, "Error calling python script: #{err}" if err.present?
|
||||
raise ArgumentError, "Error calling python script: #{out}" if out && (out.index("No track files specified") || out.index("Cannot find file"))
|
||||
jam_track_right[:url]
|
||||
|
||||
|
||||
#raise ArgumentError, "output_jkz is empty #{output_jkz}" unless File.exists?(output_jkz)
|
||||
|
||||
jam_track_right.url_48.store!(File.open(output_jkz, "rb"))
|
||||
if bitrate==48
|
||||
jam_track_right.url_48.store!(File.open(output_jkz, "rb"))
|
||||
else
|
||||
jam_track_right.url_44.store!(File.open(output_jkz, "rb"))
|
||||
end
|
||||
|
||||
jam_track_right.signed=true
|
||||
jam_track_right.downloaded_since_sign=false
|
||||
jam_track_right.private_key=File.read("#{tmp_dir}/skey.pem")
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ module JamRuby
|
|||
jam_track_rights.where("user_id=?", user).first
|
||||
end
|
||||
|
||||
def self.list_downloads(user, limit = 100, since = 0)
|
||||
def self.list_downloads(user, limit = 100, since = 0, bitrate = 48)
|
||||
since = 0 unless since || since == '' # guard against nil
|
||||
downloads = []
|
||||
|
||||
|
|
@ -122,16 +122,23 @@ module JamRuby
|
|||
.limit(limit)
|
||||
.where('jam_track_rights.id > ?', since)
|
||||
.each do |jam_track_right|
|
||||
downloads << {
|
||||
download = {
|
||||
:type => "jam_track",
|
||||
:id => jam_track_right.id.to_s,
|
||||
:jam_track_id => jam_track_right.jam_track_id,
|
||||
:length => jam_track_right.length_48,
|
||||
:md5 => jam_track_right.md5_48,
|
||||
:url => jam_track_right.url_48,
|
||||
:created_at => jam_track_right.created_at,
|
||||
:next => jam_track_right.id
|
||||
}
|
||||
if(bitrate==48)
|
||||
download[:length] = jam_track_right.length_48
|
||||
download[:md5] = jam_track_right.md5_48
|
||||
download[:url] = jam_track_right.url_48
|
||||
else
|
||||
download[:length] = jam_track_right.length_44
|
||||
download[:md5] = jam_track_right.md5_44
|
||||
download[:url] = jam_track_right.url_44
|
||||
end
|
||||
downloads << download
|
||||
end
|
||||
|
||||
next_id = downloads[-1][:next] if downloads.length > 0
|
||||
|
|
|
|||
|
|
@ -62,12 +62,17 @@ module JamRuby
|
|||
else
|
||||
raise "Error sending notification #{self.errors}"
|
||||
end
|
||||
|
||||
end
|
||||
def finish_sign(length, md5)
|
||||
|
||||
def finish_sign(length, md5, bitrate)
|
||||
self.last_signed_at = Time.now
|
||||
self.length = length
|
||||
self.md5 = md5
|
||||
if bitrate==48
|
||||
self.length_48 = length
|
||||
self.md5_48 = md5
|
||||
else
|
||||
self.length_44 = length
|
||||
self.md5_44 = md5
|
||||
end
|
||||
self.signed = true
|
||||
self.error_count = 0
|
||||
self.error_reason = nil
|
||||
|
|
@ -91,30 +96,41 @@ module JamRuby
|
|||
|
||||
def delete_s3_files
|
||||
remove_url_48!
|
||||
remove_url_44!
|
||||
end
|
||||
|
||||
def enqueue
|
||||
def enqueue(bitrate=48)
|
||||
begin
|
||||
JamTrackRight.where(:id => self.id).update_all(:signing_queued_at => Time.now, :signing_started_at => nil, :last_signed_at => nil)
|
||||
Resque.enqueue(JamTracksBuilder, self.id)
|
||||
Resque.enqueue(JamTracksBuilder, self.id, bitrate: bitrate)
|
||||
true
|
||||
rescue Exception => e
|
||||
puts "e: #{e}"
|
||||
# implies redis is down. we don't update started_at by bailing out here
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
# if the job is already signed, just queued up for signing, or currently signing, then don't enqueue... otherwise fire it off
|
||||
def enqueue_if_needed
|
||||
def enqueue_if_needed(bitrate=48)
|
||||
state = signing_state
|
||||
|
||||
if state == 'SIGNED' || state == 'SIGNING' || state == 'QUEUED'
|
||||
false
|
||||
else
|
||||
enqueue
|
||||
enqueue(bitrate)
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
# @return true if signed && file exists for the bitrate specifed:
|
||||
def ready?(bitrate=48)
|
||||
if bitrate==48
|
||||
self.signed && self.url_48.present? && self.url_48.file.exists?
|
||||
else
|
||||
self.signed && self.url_44.present? && self.url_44.file.exists?
|
||||
end
|
||||
end
|
||||
|
||||
# returns easy to digest state field
|
||||
# SIGNED - the package is ready to be downloaded
|
||||
# ERROR - the package was built unsuccessfully
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ require 'digest/md5'
|
|||
module JamRuby
|
||||
class JamTracksBuilder
|
||||
extend JamRuby::ResqueStats
|
||||
|
||||
attr_accessor :bitrate
|
||||
@queue = :jam_tracks_builder
|
||||
|
||||
def log
|
||||
|
|
@ -16,9 +16,10 @@ module JamRuby
|
|||
|
||||
attr_accessor :jam_track_right_id
|
||||
|
||||
def self.perform(jam_track_right_id)
|
||||
def self.perform(jam_track_right_id, bitrate)
|
||||
jam_track_builder = JamTracksBuilder.new()
|
||||
jam_track_builder.jam_track_right_id = jam_track_right_id
|
||||
jam_track_builder.bitrate=bitrate
|
||||
jam_track_builder.run
|
||||
end
|
||||
|
||||
|
|
@ -38,12 +39,11 @@ module JamRuby
|
|||
# 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)
|
||||
|
||||
JamRuby::JamTracksManager.save_jam_track_right_jkz(@jam_track_right)
|
||||
JamRuby::JamTracksManager.save_jam_track_right_jkz(@jam_track_right, bitrate)
|
||||
|
||||
length = @jam_track_right.url_48.size()
|
||||
length = bitrate==48 ? @jam_track_right.url_48.size() : @jam_track_right.url_44.size()
|
||||
md5 = Digest::MD5.new
|
||||
|
||||
@jam_track_right.finish_sign(length, md5.to_s)
|
||||
@jam_track_right.finish_sign(length, md5.to_s, bitrate)
|
||||
|
||||
log.info "Signed jamtrack to #{@jam_track_right[:url]}"
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ describe JamTrackRight do
|
|||
jam_track_track = FactoryGirl.create(:jam_track_track)
|
||||
jam_track = jam_track_track.jam_track
|
||||
|
||||
uploader = JamTrackTrackUploader.new(jam_track_track, :url)
|
||||
uploader = JamTrackTrackUploader.new(jam_track_track, :url_48)
|
||||
uploader.store!(File.open(ogg_path, 'rb'))
|
||||
jam_track_track.save!
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ describe JamTrackTrack do
|
|||
|
||||
it "uploads to s3 with correct name, and then downloads via signed URL" do
|
||||
jam_track_track = FactoryGirl.create(:jam_track_track)
|
||||
uploader = JamTrackTrackUploader.new(jam_track_track, :url)
|
||||
uploader = JamTrackTrackUploader.new(jam_track_track, :url_48)
|
||||
uploader.store!(File.open(TRACK_NAME)) # uploads file
|
||||
jam_track_track.save!
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue