Accepts incoming events and correctly parses them into events. GeoLite2 integration complete"
This commit is contained in:
66
app/jobs/update_geo_ip_database_job.rb
Normal file
66
app/jobs/update_geo_ip_database_job.rb
Normal file
@@ -0,0 +1,66 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UpdateGeoIpDatabaseJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
# Schedule this job to run weekly to keep the GeoIP database updated
|
||||
# Use: UpdateGeoIpDatabaseJob.set(wait: 1.week).perform_later
|
||||
# Or set up in config/schedule.rb for recurring execution
|
||||
|
||||
def perform(force_update: false)
|
||||
return unless auto_update_enabled?
|
||||
|
||||
Rails.logger.info "Starting GeoIP database update check"
|
||||
|
||||
if should_update_database? || force_update
|
||||
success = GeoIpService.update_database!
|
||||
|
||||
if success
|
||||
Rails.logger.info "GeoIP database successfully updated"
|
||||
else
|
||||
Rails.logger.error "Failed to update GeoIP database"
|
||||
end
|
||||
else
|
||||
Rails.logger.info "GeoIP database is up to date, no update needed"
|
||||
end
|
||||
|
||||
# No cleanup needed with file-system approach
|
||||
rescue => e
|
||||
Rails.logger.error "Error in UpdateGeoIpDatabaseJob: #{e.message}"
|
||||
Rails.logger.error e.backtrace.join("\n")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def auto_update_enabled?
|
||||
Rails.application.config.maxmind.auto_update_enabled
|
||||
end
|
||||
|
||||
def should_update_database?
|
||||
config = Rails.application.config.maxmind
|
||||
database_path = default_database_path
|
||||
|
||||
# Check if database file exists
|
||||
return true unless File.exist?(database_path)
|
||||
|
||||
# Check if database is outdated
|
||||
max_age_days = config.max_age_days
|
||||
file_mtime = File.mtime(database_path)
|
||||
return true if file_mtime < max_age_days.days.ago
|
||||
|
||||
# Check if database file is readable and valid
|
||||
begin
|
||||
# Try to open the database to verify it's valid
|
||||
MaxMind::DB.new(database_path)
|
||||
false
|
||||
rescue => e
|
||||
Rails.logger.warn "GeoIP database file appears to be corrupted: #{e.message}"
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
def default_database_path
|
||||
config = Rails.application.config.maxmind
|
||||
File.join(config.storage_path, config.database_filename)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user