87 lines
2.4 KiB
Ruby
87 lines
2.4 KiB
Ruby
# 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 |