today_ai_weather/app/controllers/application_controller.rb
songtianlun 2e438166ee feat: implement sidekiq task management
- Add manual task execution buttons for BatchGenerateWeatherArtsWorker, RefreshSitemapWorker, and CleanAhoyDataWorker
- Improve browser blocking functionality in ApplicationController
- Refactor Sidekiq jobs management to include statistics and task execution
- Update various jobs to conform to new standards

This feature allows for more fine-grained control over Sidekiq tasks and improves the overall user experience.
2025-01-28 01:24:49 +08:00

75 lines
2.5 KiB
Ruby

class ApplicationController < ActionController::Base
include SeoConcern
# Only allow modern browsers supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has.
before_action :log_browser_info
# allow_browser versions: :modern
allow_browser versions: :modern,
patterns: [
# 鸿蒙系统相关
/OpenHarmony/, # 鸿蒙系统标识
/ArkWeb\/[\d.]+/, # 鸿蒙浏览器内核
/Mobile HuaweiBrowser/, # 华为浏览器(新格式)
/HuaweiBrowser\/[\d.]+/, # 华为浏览器(旧格式)
# 夸克浏览器(更宽松的匹配)
/Quark[\s\/][\d.]+/, # 匹配 "Quark/7.4.6.681" 或 "Quark 7.4.6.681"
/Mobile Safari/,
/Chrome\/[\d.]+/,
/Quark\/[\d.]+/,
/HuaweiBrowser\/[\d.]+/,
/MiuiBrowser\/[\d.]+/,
/VivoBrowser\/[\d.]+/,
/OppoBrowser\/[\d.]+/,
/UCBrowser\/[\d.]+/,
/QQBrowser\/[\d.]+/,
/MicroMessenger\/[\d.]+/,
/Alipay/,
/BaiduBoxApp/,
/baiduboxapp/i,
/SogouMobile/,
/Weibo/,
/DingTalk/,
/ToutiaoMicroApp/,
/BytedanceWebview/,
/ArkWeb/
],
on_failure: ->(browser) {
Rails.logger.warn <<~BROWSER_INFO
Browser Blocked:
User Agent: #{browser.ua}
Name: #{browser.name}
Version: #{browser.version}
Platform: #{browser.platform.name}
Device: #{browser.device.name}
Mobile: #{browser.mobile?}
Modern: #{browser.modern?}
Bot: #{browser.bot?}
BROWSER_INFO
}
before_action :set_locale
after_action :track_action
def log_browser_info
# 构建详细的浏览器信息
Rails.logger.info "User Agent: #{request.user_agent}"
# 如果是被拦截的浏览器,记录额外信息
# unless browser_allowed?
# Rails.logger.warn "Browser Blocked: #{browser_info.to_json}"
# end
end
protected
def track_action
ahoy.track "Viewed Application", request.path_parameters
end
private
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end