songtianlun
ce5d09b621
- Add menu labels and parents for AdminUser, City, Country, Region, WeatherArt, Ahoy::Event, and Ahoy::Visit. - Introduce a new page for managing Sidekiq jobs, providing functionality to execute or delete scheduled jobs. - Adjust batch job for generating weather art by using Sidekiq for improved performance. - Implement clean-up worker for old Ahoy data and functionalities for refreshing the sitemap. These changes enhance the administration interface by providing better organization and management tools for backend entities. The addition of Sidekiq jobs management further improves system maintenance capabilities.
37 lines
973 B
Ruby
37 lines
973 B
Ruby
class BatchGenerateWeatherArtsWorker
|
|
include Sidekiq::Worker
|
|
|
|
GENERATION_INTERVAL = 24.hours
|
|
MAX_DURATION = 50.minutes
|
|
SLEEP_DURATION = 120.seconds
|
|
|
|
def perform(*args)
|
|
start_time = Time.current
|
|
|
|
cities_to_process = get_eligible_cities
|
|
|
|
cities_to_process.each do |city|
|
|
break if Time.current - start_time > MAX_DURATION
|
|
Rails.logger.info "Generating weather art for #{city.name}"
|
|
|
|
GenerateWeatherArtWorker.perform_async(city.id)
|
|
sleep SLEEP_DURATION
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def get_eligible_cities
|
|
cutoff_time = Time.current - GENERATION_INTERVAL
|
|
|
|
City.active
|
|
.joins("LEFT JOIN (
|
|
SELECT city_id, MAX(created_at) as last_generation_time
|
|
FROM weather_arts
|
|
GROUP BY city_id
|
|
) latest_arts ON cities.id = latest_arts.city_id")
|
|
.where("latest_arts.last_generation_time IS NULL OR latest_arts.last_generation_time < ?", cutoff_time)
|
|
.order(:priority)
|
|
end
|
|
end
|