Blockchain explorer for Ethereum based network and a tool for inspecting and analyzing EVM based blockchains.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
blockscout/lib/explorer/workers/refresh_balance.ex

33 lines
814 B

defmodule Explorer.Workers.RefreshBalance do
@moduledoc """
Refreshes the Credit and Debit balance views.
"""
alias Ecto.Adapters.SQL
alias Explorer.Credit
alias Explorer.Debit
alias Explorer.Repo
def perform("credit"), do: unless refreshing("credits"), do: Credit.refresh()
def perform("debit"), do: unless refreshing("debits"), do: Debit.refresh()
def perform do
perform_later(["credit"])
perform_later(["debit"])
end
def perform_later(args \\ []) do
Exq.enqueue(Exq.Enqueuer, "default", __MODULE__, args)
end
def refreshing(table) do
query = "REFRESH MATERIALIZED VIEW CONCURRENTLY #{table}%"
result = SQL.query!(
Repo,
"SELECT TRUE FROM pg_stat_activity WHERE query ILIKE '$#{query}'",
[]
)
Enum.count(result.rows) > 0
end
end