fix: auto-resolve Gaiia reconciliation insights when issues are fixed

This commit is contained in:
Graham McIntire 2026-03-04 16:31:08 -06:00
parent 11d976531b
commit daf66038c6
No known key found for this signature in database

View file

@ -26,11 +26,46 @@ defmodule Towerops.Workers.GaiiaInsightWorker do
defp process_reconciliation(organization_id) do
result = Reconciliation.reconcile(organization_id)
# Auto-resolve insights when issues are fixed
maybe_dismiss_resolved_insights(organization_id, "untracked", result.untracked_devices)
maybe_dismiss_resolved_insights(organization_id, "ghost", result.ghost_devices)
maybe_dismiss_resolved_insights(organization_id, "mismatch", result.data_mismatches)
generate_untracked_insights(organization_id, result.untracked_devices)
generate_ghost_insights(organization_id, result.ghost_devices)
generate_mismatch_insights(organization_id, result.data_mismatches)
end
defp maybe_dismiss_resolved_insights(organization_id, dedup_key, current_items) do
# If the issue is resolved (no items), dismiss any active insights
if Enum.empty?(current_items) do
import Ecto.Query
alias Towerops.Preseem.Insight
alias Towerops.Repo
now = DateTime.truncate(DateTime.utc_now(), :second)
{count, _} =
Insight
|> where(
organization_id: ^organization_id,
type: "reconciliation_finding",
status: "active"
)
|> where([i], fragment("?->>'dedup_key' = ?", i.metadata, ^dedup_key))
|> Repo.update_all(set: [status: "dismissed", dismissed_at: now])
if count > 0 do
require Logger
Logger.info(
"Auto-dismissed #{count} reconciliation_finding insight(s) for #{dedup_key} in org #{organization_id}"
)
end
end
end
defp generate_untracked_insights(organization_id, untracked_devices) do
count = length(untracked_devices)