Introduce incidenti con dedup, job Sidekiq ogni 3 min, scan log cron, /up/deep, dashboard /admin/ops e push ntfy; include Sentry opzionale e fix test suite. Co-authored-by: Cursor <cursoragent@cursor.com>
38 lines
1.0 KiB
Ruby
38 lines
1.0 KiB
Ruby
module Admin
|
|
class OpsController < Admin::BaseController
|
|
def index
|
|
@open_incidents = Ops::Incident.open.recent.limit(50)
|
|
@resolved_incidents = Ops::Incident.where(status: "resolved").since(30.days.ago).recent.limit(30)
|
|
@summary = ops_summary
|
|
end
|
|
|
|
def acknowledge
|
|
incident = Ops::Incident.find(params[:id])
|
|
incident.acknowledge!
|
|
redirect_to admin_ops_path, notice: "Incidente preso in carico"
|
|
end
|
|
|
|
def resolve
|
|
incident = Ops::Incident.find(params[:id])
|
|
incident.resolve!
|
|
redirect_to admin_ops_path, notice: "Incidente risolto"
|
|
end
|
|
|
|
def mute
|
|
incident = Ops::Incident.find(params[:id])
|
|
incident.mute!(duration: 24.hours)
|
|
redirect_to admin_ops_path, notice: "Notifiche sospese per 24 ore"
|
|
end
|
|
|
|
private
|
|
|
|
def ops_summary
|
|
{
|
|
open_critical: Ops::Incident.critical_open.count,
|
|
open_warning: Ops::Incident.open.where(severity: "warning").count,
|
|
open_total: Ops::Incident.open.count
|
|
}
|
|
end
|
|
end
|
|
end
|