chore: remove unused job classes
- Delete BatchGenerateWeatherArtsJob which queued jobs for generating weather art for eligible cities. - Remove CleanAhoyDataJob responsible for cleaning up old Ahoy events and visits. - Eliminate GenerateWeatherArtJob that managed the generation and attachment of weather art images. - Drop RefreshSitemapJob which created and uploaded XML sitemaps. These removals suggest a shift in how these functionalities will be handled, possibly indicating a move towards a different architecture or integration with another service.
This commit is contained in:
parent
c332230709
commit
138d610c3a
@ -1,37 +0,0 @@
|
|||||||
# app/jobs/batch_generate_weather_arts_job.rb
|
|
||||||
class BatchGenerateWeatherArtsJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
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}"
|
|
||||||
|
|
||||||
GenerateWeatherArtJob.perform_later(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
|
|
@ -1,30 +0,0 @@
|
|||||||
# app/jobs/clean_ahoy_data_job.rb
|
|
||||||
class CleanAhoyDataJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform
|
|
||||||
cleanup_old_events
|
|
||||||
cleanup_old_visits
|
|
||||||
log_cleanup_results
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def cleanup_old_events
|
|
||||||
cutoff_date = 3.months.ago
|
|
||||||
deleted_events_count = Ahoy::Event.where("time < ?", cutoff_date).delete_all
|
|
||||||
Rails.logger.info "Deleted #{deleted_events_count} old Ahoy events"
|
|
||||||
end
|
|
||||||
|
|
||||||
def cleanup_old_visits
|
|
||||||
cutoff_date = 3.months.ago
|
|
||||||
deleted_visits_count = Ahoy::Visit.where("started_at < ?", cutoff_date).delete_all
|
|
||||||
Rails.logger.info "Deleted #{deleted_visits_count} old Ahoy visits"
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_cleanup_results
|
|
||||||
Rails.logger.info "Ahoy cleanup completed at #{Time.current}"
|
|
||||||
Rails.logger.info "Remaining events: #{Ahoy::Event.count}"
|
|
||||||
Rails.logger.info "Remaining visits: #{Ahoy::Visit.count}"
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,68 +0,0 @@
|
|||||||
class GenerateWeatherArtJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform(city_id)
|
|
||||||
@city = City.find(city_id)
|
|
||||||
|
|
||||||
weather_data = fetch_weather_data
|
|
||||||
return unless weather_data
|
|
||||||
|
|
||||||
prompt = generate_prompt(weather_data)
|
|
||||||
return unless prompt
|
|
||||||
|
|
||||||
image_url = generate_image(prompt)
|
|
||||||
return unless image_url
|
|
||||||
|
|
||||||
create_weather_art(weather_data, prompt, image_url)
|
|
||||||
rescue StandardError => e
|
|
||||||
Rails.logger.error "Error generating weather art for city #{city_id}: #{e.message}"
|
|
||||||
Rails.logger.error e.backtrace.join("\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
attr_reader :city
|
|
||||||
|
|
||||||
def fetch_weather_data
|
|
||||||
WeatherService.new.get_weather(city.latitude, city.longitude)
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_prompt(weather_data)
|
|
||||||
AiService.new.generate_prompt(city, weather_data)
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_image(prompt)
|
|
||||||
AiService.new.generate_image(prompt)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_weather_art(weather_data, prompt, image_url)
|
|
||||||
tempfile = nil
|
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
|
||||||
weather_art = city.weather_arts.create!(
|
|
||||||
weather_date: Date.today,
|
|
||||||
prompt: prompt,
|
|
||||||
**weather_data
|
|
||||||
)
|
|
||||||
|
|
||||||
tempfile = Down.download(image_url)
|
|
||||||
|
|
||||||
weather_art.image.attach(
|
|
||||||
io: File.open(tempfile.path),
|
|
||||||
filename: generate_filename,
|
|
||||||
content_type: "image/png"
|
|
||||||
)
|
|
||||||
|
|
||||||
weather_art
|
|
||||||
end
|
|
||||||
ensure
|
|
||||||
if tempfile
|
|
||||||
tempfile.close
|
|
||||||
tempfile.unlink
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_filename
|
|
||||||
"#{city.country.name}-#{city.name.parameterize}-#{Time.current.strftime('%Y%m%d-%H%M%S')}.png"
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,58 +0,0 @@
|
|||||||
class RefreshSitemapJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform
|
|
||||||
host = Rails.env.production? ? "https://todayaiweather.com" : "http://127.0.0.1:3000"
|
|
||||||
Rails.application.routes.default_url_options[:host] = host
|
|
||||||
SitemapGenerator::Sitemap.default_host = host
|
|
||||||
if Rails.env.production?
|
|
||||||
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
|
|
||||||
ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)),
|
|
||||||
aws_access_key_id: ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :access_key_id)),
|
|
||||||
aws_secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :secret_access_key)),
|
|
||||||
aws_region: ENV.fetch("AWS_REGION", "wnam"),
|
|
||||||
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:aws, :endpoint)),
|
|
||||||
)
|
|
||||||
else
|
|
||||||
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
|
|
||||||
ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket)),
|
|
||||||
aws_access_key_id: ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :access_key_id)),
|
|
||||||
aws_secret_access_key: ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :secret_access_key)),
|
|
||||||
aws_region: ENV.fetch("AWS_DEV_REGION", "wnam"),
|
|
||||||
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:aws_dev, :endpoint)),
|
|
||||||
)
|
|
||||||
end
|
|
||||||
SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/"
|
|
||||||
|
|
||||||
SitemapGenerator::Sitemap.create do
|
|
||||||
add root_path, changefreq: "daily", priority: 1.0
|
|
||||||
add cities_path, changefreq: "daily", priority: 0.9
|
|
||||||
add arts_path, changefreq: "daily", priority: 0.9
|
|
||||||
|
|
||||||
City.find_each do |city|
|
|
||||||
add city_path(city),
|
|
||||||
changefreq: "daily",
|
|
||||||
priority: 0.8,
|
|
||||||
lastmod: city.updated_at
|
|
||||||
end
|
|
||||||
|
|
||||||
WeatherArt.includes(:city).find_each do |art|
|
|
||||||
if art.image.attached?
|
|
||||||
add city_weather_art_path(art.city, art),
|
|
||||||
changefreq: "daily",
|
|
||||||
priority: 0.7,
|
|
||||||
lastmod: art.updated_at,
|
|
||||||
images: [ {
|
|
||||||
loc: url_for(art.image),
|
|
||||||
title: "#{art.city.name} Weather Art - #{art.weather_date.strftime('%B %d, %Y')}"
|
|
||||||
} ]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# SitemapGenerator::Sitemap.ping_search_engines if Rails.env.production?
|
|
||||||
Rails.logger.info "Sitemap has been generated and uploaded to S3 successfully"
|
|
||||||
rescue => e
|
|
||||||
Rails.logger.error "Error refreshing sitemap: #{e.message}"
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue
Block a user