Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Watchlists with unsupported metrics analysis

watchlist-with-unsupported-metrics.livemd

Watchlists with unsupported metrics analysis

Section

watchlists = Sanbase.Repo.all(Sanbase.UserList)
watchlists = watchlists |> Enum.reject(& &1.is_deleted)
metrics = Sanbase.Metric.available_metrics() |> MapSet.new()
list =
  watchlists
  |> Enum.map(&Map.take(&1, [:id, :function, :name, :user_id]))
  |> Enum.filter(&(&1.function.name == "selector"))
list_with_metrics =
  list
  |> Enum.map(fn %{function: f, id: id, name: name, user_id: user_id} ->
    filters_metrics =
      Enum.map(f.args["filters"] || [], fn ff ->
        ff["args"]["metric"]
      end)
      |> List.flatten()
      |> Enum.reject(&is_nil/1)

    order_metrics = []

    metrics = (filters_metrics ++ order_metrics) |> Enum.uniq()
    %{id: id, metrics: metrics, name: name, user_id: user_id}
  end)
list_with_deprecated_metrics =
  Enum.filter(list_with_metrics, fn l ->
    Enum.any?(l.metrics, &(&1 not in metrics))
  end)
length(list_with_deprecated_metrics)
group_by_user =
  Enum.group_by(list_with_deprecated_metrics, & &1.user_id)
  |> Enum.map(fn {k, v} -> {k, length(v)} end)
  |> Enum.sort_by(&elem(&1, 1), :desc)
Enum.map(list_with_deprecated_metrics, & &1.metrics)
|> List.flatten()
|> Enum.uniq()
|> Enum.filter(&(&1 not in metrics))
watchlists |> Enum.map(& &1.function.args) |> Enum.reject(&(&1 == []))
import Ecto.Query
# Soft-deleted these watchlists
ids = Enum.map(list_with_deprecated_metrics, & &1.id)
# data =ids |> Enum.join("\n")
# File.write!("/Users/ivanivanov/Downloads/updated_ids.csv", data)
from(p in Sanbase.UserList, where: p.id in ^ids, update: [set: [is_deleted: true]])
|> Sanbase.Repo.update_all([])