today_ai_weather/app/admin/sidekiq_jobs.rb
songtianlun ce5d09b621 feat: add admin management for various entities
- 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.
2025-01-28 01:15:29 +08:00

79 lines
2.2 KiB
Ruby

# app/admin/sidekiq_jobs.rb
ActiveAdmin.register_page "Sidekiq Jobs" do
menu priority: 1, label: "Sidekiq 任务管理"
content title: "Sidekiq 任务管理" do
columns do
column do
panel "任务统计" do
stats = Sidekiq::Stats.new
table_for [ "统计数据" ] do
column "处理的任务总数" do
stats.processed
end
column "失败的任务总数" do
stats.failed
end
column "等待中的任务数" do
stats.enqueued
end
end
end
end
end
columns do
column do
panel "计划任务列表" do
table_for Sidekiq::ScheduledSet.new.to_a do
column "任务名称" do |job|
job.item["class"]
end
column "执行时间" do |job|
Time.at(job.at)
end
column "参数" do |job|
job.item["args"].to_s
end
column "操作" do |job|
links = []
links << link_to("立即执行", execute_admin_sidekiq_jobs_path(jid: job.jid), method: :post)
links << link_to("删除", delete_admin_sidekiq_jobs_path(jid: job.jid), method: :delete)
links.join(" | ").html_safe
end
end
end
end
end
end
action_item :refresh do
link_to "刷新", admin_sidekiq_jobs_path
end
# 将 collection_action 改为 page_action
page_action :execute, method: :post do
jid = params[:jid]
job = Sidekiq::ScheduledSet.new.find_job(jid)
if job
job.delete
klass = job.item["class"].constantize
klass.perform_async(*job.item["args"])
redirect_to admin_sidekiq_jobs_path, notice: "任务已立即执行"
else
redirect_to admin_sidekiq_jobs_path, alert: "任务未找到"
end
end
page_action :delete, method: :delete do
jid = params[:jid]
job = Sidekiq::ScheduledSet.new.find_job(jid)
if job
job.delete
redirect_to admin_sidekiq_jobs_path, notice: "任务已删除"
else
redirect_to admin_sidekiq_jobs_path, alert: "任务未找到"
end
end
end