forked from AkkomaGang/akkoma
moved Pleroma.Stats to Oban Periodic jobs
This commit is contained in:
parent
0e9be6bafa
commit
ac3abb5414
4 changed files with 48 additions and 11 deletions
|
@ -507,7 +507,8 @@
|
||||||
background: 5
|
background: 5
|
||||||
],
|
],
|
||||||
crontab: [
|
crontab: [
|
||||||
{"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker}
|
{"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker},
|
||||||
|
{"0 * * * *", Pleroma.Workers.Cron.StatsWorker}
|
||||||
]
|
]
|
||||||
|
|
||||||
config :pleroma, :workers,
|
config :pleroma, :workers,
|
||||||
|
|
|
@ -9,22 +9,43 @@ defmodule Pleroma.Stats do
|
||||||
|
|
||||||
use GenServer
|
use GenServer
|
||||||
|
|
||||||
@interval 1000 * 60 * 60
|
@init_state %{
|
||||||
|
peers: [],
|
||||||
|
stats: %{
|
||||||
|
domain_count: 0,
|
||||||
|
status_count: 0,
|
||||||
|
user_count: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def start_link(_) do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, initial_data(), name: __MODULE__)
|
GenServer.start_link(
|
||||||
|
__MODULE__,
|
||||||
|
@init_state,
|
||||||
|
name: __MODULE__
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc "Performs update stats"
|
||||||
def force_update do
|
def force_update do
|
||||||
GenServer.call(__MODULE__, :force_update)
|
GenServer.call(__MODULE__, :force_update)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc "Performs collect stats"
|
||||||
|
def do_collect do
|
||||||
|
GenServer.cast(__MODULE__, :run_update)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc "Returns stats data"
|
||||||
|
@spec get_stats() :: %{domain_count: integer(), status_count: integer(), user_count: integer()}
|
||||||
def get_stats do
|
def get_stats do
|
||||||
%{stats: stats} = GenServer.call(__MODULE__, :get_state)
|
%{stats: stats} = GenServer.call(__MODULE__, :get_state)
|
||||||
|
|
||||||
stats
|
stats
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc "Returns list peers"
|
||||||
|
@spec get_peers() :: list(String.t())
|
||||||
def get_peers do
|
def get_peers do
|
||||||
%{peers: peers} = GenServer.call(__MODULE__, :get_state)
|
%{peers: peers} = GenServer.call(__MODULE__, :get_state)
|
||||||
|
|
||||||
|
@ -32,7 +53,6 @@ def get_peers do
|
||||||
end
|
end
|
||||||
|
|
||||||
def init(args) do
|
def init(args) do
|
||||||
Process.send(self(), :run_update, [])
|
|
||||||
{:ok, args}
|
{:ok, args}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -45,17 +65,12 @@ def handle_call(:get_state, _from, state) do
|
||||||
{:reply, state, state}
|
{:reply, state, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info(:run_update, _state) do
|
def handle_cast(:run_update, _state) do
|
||||||
new_stats = get_stat_data()
|
new_stats = get_stat_data()
|
||||||
|
|
||||||
Process.send_after(self(), :run_update, @interval)
|
|
||||||
{:noreply, new_stats}
|
{:noreply, new_stats}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp initial_data do
|
|
||||||
%{peers: [], stats: %{}}
|
|
||||||
end
|
|
||||||
|
|
||||||
defp get_stat_data do
|
defp get_stat_data do
|
||||||
peers =
|
peers =
|
||||||
from(
|
from(
|
||||||
|
@ -74,7 +89,11 @@ defp get_stat_data do
|
||||||
|
|
||||||
%{
|
%{
|
||||||
peers: peers,
|
peers: peers,
|
||||||
stats: %{domain_count: domain_count, status_count: status_count, user_count: user_count}
|
stats: %{
|
||||||
|
domain_count: domain_count,
|
||||||
|
status_count: status_count,
|
||||||
|
user_count: user_count
|
||||||
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
16
lib/pleroma/workers/cron/stats_worker.ex
Normal file
16
lib/pleroma/workers/cron/stats_worker.ex
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Workers.Cron.StatsWorker do
|
||||||
|
@moduledoc """
|
||||||
|
The worker to update peers statistics.
|
||||||
|
"""
|
||||||
|
|
||||||
|
use Oban.Worker, queue: "background"
|
||||||
|
|
||||||
|
@impl Oban.Worker
|
||||||
|
def perform(_opts, _job) do
|
||||||
|
Pleroma.Stats.do_collect()
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.NodeInfoTest do
|
||||||
use Pleroma.Web.ConnCase
|
use Pleroma.Web.ConnCase
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
clear_config([:mrf_simple])
|
||||||
|
|
||||||
test "GET /.well-known/nodeinfo", %{conn: conn} do
|
test "GET /.well-known/nodeinfo", %{conn: conn} do
|
||||||
links =
|
links =
|
||||||
|
|
Loading…
Reference in a new issue