Files
old-holivud2/app/models/pending_analysis.rb
2020-05-31 22:38:19 +02:00

122 lines
2.6 KiB
Ruby

class PendingAnalysis
def self.poll
PendingVideoAnalysis.poll
PendingAudioAnalysis.poll
end
def self.expire(age_threshold)
PendingAudioAnalysis.expire(age_threshold)
PendingVideoAnalysis.expire(age_threshold)
end
class PendingVideoAnalysis
def initialize(analysis_uid)
@analysis_uid = analysis_uid
end
def self.poll
Video.
analysis_pending.
pluck(:analysis_uid).
each { |uid| new(uid).poll }
end
def self.expire(age)
Video.
analysis_pending.
video_analysis_started_before(age).
pluck(:analysis_uid).
each { |video| new(video).expire }
end
def poll
if results_available?
notification.success!
end
end
def expire
if results_available?
notification.success!
else
notification.failure!
end
end
private
attr_reader :analysis_uid
def notification
@notification ||= AnalysisNotification.build(:video, analysis_uid)
end
def results_available?
facial_recognition = BrayniacAI::FacialRecognition.find(analysis_uid)
facial_recognition.respond_to?(:results)
rescue ActiveResource::ResourceNotFound => e
false
rescue ActiveResource::ServerError => e
message = "-- Video Analysis polling for #{analysis_uid} failed due to: #{e}"
puts message
Rails.logger.error(message)
false
end
end
class PendingAudioAnalysis
def self.poll
Video.
audio_analysis_pending.
pluck(:audio_analysis_uid).
each { |uid| new(uid).poll }
end
def self.expire(age)
Video.
audio_analysis_pending.
audio_analysis_started_before(age).
pluck(:audio_analysis_uid).
each { |uid| new(uid).expire }
end
def initialize(analysis_uid)
@analysis_uid = analysis_uid
end
def poll
if results_available?
notification.success!
end
end
def expire
if results_available?
notification.success!
else
notification.failure!
end
end
private
attr_reader :analysis_uid
def notification
@notification ||= AnalysisNotification.build(:audio, analysis_uid)
end
def results_available?
audio_recognition = BrayniacAI::AudioRecognition.find(analysis_uid)
audio_recognition.respond_to?(:results)
rescue ActiveResource::ResourceNotFound => e
false
rescue ActiveResource::ServerError => e
message = "-- Audio Analysis polling for #{analysis_uid} failed due to: #{e}"
puts message
Rails.logger.error(message)
false
end
end
end