Expose backup status via Pleroma API
This commit is contained in:
parent
e4ac2a7cd6
commit
bdd63d2a3a
|
@ -64,7 +64,9 @@ defp backup do
|
||||||
content_type: %Schema{type: :string},
|
content_type: %Schema{type: :string},
|
||||||
file_name: %Schema{type: :string},
|
file_name: %Schema{type: :string},
|
||||||
file_size: %Schema{type: :integer},
|
file_size: %Schema{type: :integer},
|
||||||
processed: %Schema{type: :boolean}
|
processed: %Schema{type: :boolean, description: "whether this backup has succeeded"},
|
||||||
|
state: %Schema{type: :string, description: "the state of the backup", enum: ["pending", "running", "complete", "failed"]},
|
||||||
|
processed_number: %Schema{type: :integer, description: "the number of records processed"}
|
||||||
},
|
},
|
||||||
example: %{
|
example: %{
|
||||||
"content_type" => "application/zip",
|
"content_type" => "application/zip",
|
||||||
|
@ -72,7 +74,9 @@ defp backup do
|
||||||
"https://cofe.fe:4000/media/backups/archive-foobar-20200908T164207-Yr7vuT5Wycv-sN3kSN2iJ0k-9pMo60j9qmvRCdDqIew.zip",
|
"https://cofe.fe:4000/media/backups/archive-foobar-20200908T164207-Yr7vuT5Wycv-sN3kSN2iJ0k-9pMo60j9qmvRCdDqIew.zip",
|
||||||
"file_size" => 4105,
|
"file_size" => 4105,
|
||||||
"inserted_at" => "2020-09-08T16:42:07.000Z",
|
"inserted_at" => "2020-09-08T16:42:07.000Z",
|
||||||
"processed" => true
|
"processed" => true,
|
||||||
|
"state" => "complete",
|
||||||
|
"processed_number": 20
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,12 +9,22 @@ defmodule Pleroma.Web.PleromaAPI.BackupView do
|
||||||
alias Pleroma.Web.CommonAPI.Utils
|
alias Pleroma.Web.CommonAPI.Utils
|
||||||
|
|
||||||
def render("show.json", %{backup: %Backup{} = backup}) do
|
def render("show.json", %{backup: %Backup{} = backup}) do
|
||||||
|
# To deal with records before the migration
|
||||||
|
state =
|
||||||
|
if backup.state == :invalid do
|
||||||
|
if backup.processed, do: :complete, else: :failed
|
||||||
|
else
|
||||||
|
backup.state
|
||||||
|
end
|
||||||
|
|
||||||
%{
|
%{
|
||||||
id: backup.id,
|
id: backup.id,
|
||||||
content_type: backup.content_type,
|
content_type: backup.content_type,
|
||||||
url: download_url(backup),
|
url: download_url(backup),
|
||||||
file_size: backup.file_size,
|
file_size: backup.file_size,
|
||||||
processed: backup.processed,
|
processed: backup.processed,
|
||||||
|
state: to_string(state),
|
||||||
|
processed_number: backup.processed_number,
|
||||||
inserted_at: Utils.to_masto_date(backup.inserted_at)
|
inserted_at: Utils.to_masto_date(backup.inserted_at)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,4 +15,43 @@ test "it renders the ID" do
|
||||||
result = BackupView.render("show.json", backup: backup)
|
result = BackupView.render("show.json", backup: backup)
|
||||||
assert result.id == backup.id
|
assert result.id == backup.id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it renders the state and processed_number" do
|
||||||
|
user = insert(:user)
|
||||||
|
backup = Backup.new(user)
|
||||||
|
|
||||||
|
result = BackupView.render("show.json", backup: backup)
|
||||||
|
assert result.state == to_string(backup.state)
|
||||||
|
assert result.processed_number == backup.processed_number
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it renders failed state with legacy records" do
|
||||||
|
backup = %Backup{
|
||||||
|
id: 0,
|
||||||
|
content_type: "application/zip",
|
||||||
|
file_name: "dummy",
|
||||||
|
file_size: 1,
|
||||||
|
state: :invalid,
|
||||||
|
processed: true,
|
||||||
|
processed_number: 1,
|
||||||
|
inserted_at: NaiveDateTime.utc_now()
|
||||||
|
}
|
||||||
|
|
||||||
|
result = BackupView.render("show.json", backup: backup)
|
||||||
|
assert result.state == "complete"
|
||||||
|
|
||||||
|
backup = %Backup{
|
||||||
|
id: 0,
|
||||||
|
content_type: "application/zip",
|
||||||
|
file_name: "dummy",
|
||||||
|
file_size: 1,
|
||||||
|
state: :invalid,
|
||||||
|
processed: false,
|
||||||
|
processed_number: 1,
|
||||||
|
inserted_at: NaiveDateTime.utc_now()
|
||||||
|
}
|
||||||
|
|
||||||
|
result = BackupView.render("show.json", backup: backup)
|
||||||
|
assert result.state == "failed"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue