diff --git a/app/jobs/batch_generate_weather_arts_job.rb b/app/jobs/batch_generate_weather_arts_job.rb deleted file mode 100644 index 3e2158f..0000000 --- a/app/jobs/batch_generate_weather_arts_job.rb +++ /dev/null @@ -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 diff --git a/app/jobs/clean_ahoy_data_job.rb b/app/jobs/clean_ahoy_data_job.rb deleted file mode 100644 index 330105e..0000000 --- a/app/jobs/clean_ahoy_data_job.rb +++ /dev/null @@ -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 diff --git a/app/jobs/generate_weather_art_job.rb b/app/jobs/generate_weather_art_job.rb deleted file mode 100644 index f9eb2fb..0000000 --- a/app/jobs/generate_weather_art_job.rb +++ /dev/null @@ -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 diff --git a/app/jobs/refresh_sitemap_job.rb b/app/jobs/refresh_sitemap_job.rb deleted file mode 100644 index 43ea4d2..0000000 --- a/app/jobs/refresh_sitemap_job.rb +++ /dev/null @@ -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