aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2019-05-21 01:21:28 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2019-05-21 21:38:56 +0000
commit16b260fb19cca02463766c2e36a41bfcc823af9b (patch)
tree108aa2a1daf502d11f25535dcfe728e2ba3c07a9
parent73df9d690d5c1a9c11f0f04b8d877c0677022591 (diff)
downloadpleroma-16b260fb19cca02463766c2e36a41bfcc823af9b.tar.gz
add mix task to prune the object database using a configured retention period
-rw-r--r--config/config.exs3
-rw-r--r--docs/config.md1
-rw-r--r--lib/mix/tasks/pleroma/database.ex40
3 files changed, 43 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs
index 72908266d..466a6e9b7 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -239,7 +239,8 @@ config :pleroma, :instance,
welcome_message: nil,
max_report_comment_size: 1000,
safe_dm_mentions: false,
- healthcheck: false
+ healthcheck: false,
+ remote_post_retention_days: 90
config :pleroma, :app_account_creation, enabled: true, max_requests: 25, interval: 1800
diff --git a/docs/config.md b/docs/config.md
index 197326bbd..a050068f4 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -104,6 +104,7 @@ config :pleroma, Pleroma.Emails.Mailer,
* `max_report_comment_size`: The maximum size of the report comment (Default: `1000`)
* `safe_dm_mentions`: If set to true, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. "@friend hey i really don't like @enemy"). (Default: `false`)
* `healthcheck`: if set to true, system data will be shown on ``/api/pleroma/healthcheck``.
+* `remote_post_retention_days`: the default amount of days to retain remote posts when pruning the database
## :app_account_creation
REST API for creating an account settings
diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex
index f650b447d..fdb216037 100644
--- a/lib/mix/tasks/pleroma/database.ex
+++ b/lib/mix/tasks/pleroma/database.ex
@@ -23,6 +23,10 @@ defmodule Mix.Tasks.Pleroma.Database do
Options:
- `--vacuum` - run `VACUUM FULL` after the embedded objects are replaced with their references
+ ## Prune old objects from the database
+
+ mix pleroma.database prune_objects
+
## Create a conversation for all existing DMs. Can be safely re-run.
mix pleroma.database bump_all_conversations
@@ -72,4 +76,40 @@ defmodule Mix.Tasks.Pleroma.Database do
Enum.each(users, &User.remove_duplicated_following/1)
Enum.each(users, &User.update_follower_count/1)
end
+
+ def run(["prune_objects" | args]) do
+ {options, [], []} =
+ OptionParser.parse(
+ args,
+ strict: [
+ vacuum: :boolean
+ ]
+ )
+
+ Common.start_pleroma()
+
+ deadline = Pleroma.Config.get([:instance, :remote_post_retention_days])
+
+ Logger.info("Pruning objects older than #{deadline} days")
+
+ time_deadline =
+ NaiveDateTime.utc_now()
+ |> NaiveDateTime.add(-(deadline * 86_400))
+
+ Repo.query!(
+ "DELETE FROM objects WHERE inserted_at < $1 AND split_part(data->>'actor', '/', 3) != $2",
+ [time_deadline, Pleroma.Web.Endpoint.host()],
+ timeout: :infinity
+ )
+
+ if Keyword.get(options, :vacuum) do
+ Logger.info("Runnning VACUUM FULL")
+
+ Repo.query!(
+ "vacuum full;",
+ [],
+ timeout: :infinity
+ )
+ end
+ end
end