Initial commit
This commit is contained in:
121
app/models/pending_analysis.rb
Normal file
121
app/models/pending_analysis.rb
Normal file
@@ -0,0 +1,121 @@
|
||||
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
|
||||
Reference in New Issue
Block a user