First commit!
This commit is contained in:
87
app/jobs/event_normalization_job.rb
Normal file
87
app/jobs/event_normalization_job.rb
Normal file
@@ -0,0 +1,87 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class EventNormalizationJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
# Normalize all existing events
|
||||
def perform_all_events(batch_size: 1000)
|
||||
total_events = Event.where(request_host_id: nil).count
|
||||
Rails.logger.info "Starting normalization of #{total_events} events"
|
||||
|
||||
offset = 0
|
||||
processed = 0
|
||||
|
||||
loop do
|
||||
events = Event.where(request_host_id: nil)
|
||||
.limit(batch_size)
|
||||
.offset(offset)
|
||||
.includes(:project)
|
||||
|
||||
break if events.empty?
|
||||
|
||||
events.each do |event|
|
||||
begin
|
||||
EventNormalizer.normalize_event!(event)
|
||||
event.save!
|
||||
processed += 1
|
||||
rescue => e
|
||||
Rails.logger.error "Failed to normalize event #{event.id}: #{e.message}"
|
||||
end
|
||||
end
|
||||
|
||||
Rails.logger.info "Processed #{processed}/#{total_events} events"
|
||||
offset += batch_size
|
||||
end
|
||||
|
||||
Rails.logger.info "Completed normalization of #{processed} events"
|
||||
end
|
||||
|
||||
# Normalize a specific event
|
||||
def perform(event_id)
|
||||
event = Event.find(event_id)
|
||||
|
||||
EventNormalizer.normalize_event!(event)
|
||||
event.save!
|
||||
|
||||
Rails.logger.info "Successfully normalized event #{event_id}"
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
Rails.logger.error "Event #{event_id} not found for normalization"
|
||||
rescue => e
|
||||
Rails.logger.error "Failed to normalize event #{event_id}: #{e.message}"
|
||||
raise
|
||||
end
|
||||
|
||||
# Normalize events for a specific project
|
||||
def perform_for_project(project_id, batch_size: 1000)
|
||||
project = Project.find(project_id)
|
||||
total_events = project.events.where(request_host_id: nil).count
|
||||
Rails.logger.info "Starting normalization of #{total_events} events for project #{project.name}"
|
||||
|
||||
offset = 0
|
||||
processed = 0
|
||||
|
||||
loop do
|
||||
events = project.events
|
||||
.where(request_host_id: nil)
|
||||
.limit(batch_size)
|
||||
.offset(offset)
|
||||
|
||||
break if events.empty?
|
||||
|
||||
events.each do |event|
|
||||
begin
|
||||
EventNormalizer.normalize_event!(event)
|
||||
event.save!
|
||||
processed += 1
|
||||
rescue => e
|
||||
Rails.logger.error "Failed to normalize event #{event.id}: #{e.message}"
|
||||
end
|
||||
end
|
||||
|
||||
Rails.logger.info "Processed #{processed}/#{total_events} events for project #{project.name}"
|
||||
offset += batch_size
|
||||
end
|
||||
|
||||
Rails.logger.info "Completed normalization of #{processed} events for project #{project.name}"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user