mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-17 17:36:44 +00:00
erpt: add automatic report cleanup mechanism on boot (closes #1795)
This commit is contained in:
parent
9545cbb4cb
commit
9a38be201a
5 changed files with 43 additions and 0 deletions
|
@ -17,6 +17,9 @@
|
||||||
; Note that this setting does nothing when log manager is not enabled/sd card logging is not enabled.
|
; Note that this setting does nothing when log manager is not enabled/sd card logging is not enabled.
|
||||||
; sd_card_log_output_directory = str!atmosphere/binlogs
|
; sd_card_log_output_directory = str!atmosphere/binlogs
|
||||||
; Atmosphere custom settings
|
; Atmosphere custom settings
|
||||||
|
[erpt]
|
||||||
|
; Control whether erpt reports should always be preserved, instead of automatically cleaning periodically.
|
||||||
|
; disable_automatic_report_cleanup = u8!0x0
|
||||||
[atmosphere]
|
[atmosphere]
|
||||||
; Reboot from fatal automatically after some number of milliseconds.
|
; Reboot from fatal automatically after some number of milliseconds.
|
||||||
; If field is not present or 0, fatal will wait indefinitely for user input.
|
; If field is not present or 0, fatal will wait indefinitely for user input.
|
||||||
|
|
|
@ -27,6 +27,7 @@ namespace ams::erpt::srv {
|
||||||
|
|
||||||
/* Atmosphere extension. */
|
/* Atmosphere extension. */
|
||||||
Result SetRedirectNewReportsToSdCard(bool redirect);
|
Result SetRedirectNewReportsToSdCard(bool redirect);
|
||||||
|
Result SetEnabledAutomaticReportCleanup(bool redirect);
|
||||||
|
|
||||||
void Wait();
|
void Wait();
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,8 @@ namespace ams::erpt::srv {
|
||||||
constexpr s64 SystemSaveDataSize = 11_MB;
|
constexpr s64 SystemSaveDataSize = 11_MB;
|
||||||
constexpr s64 SystemSaveDataJournalSize = 2720_KB;
|
constexpr s64 SystemSaveDataJournalSize = 2720_KB;
|
||||||
|
|
||||||
|
constinit bool g_automatic_report_cleanup_enabled = true;
|
||||||
|
|
||||||
Result ExtendSystemSaveData() {
|
Result ExtendSystemSaveData() {
|
||||||
s64 cur_journal_size;
|
s64 cur_journal_size;
|
||||||
s64 cur_savedata_size;
|
s64 cur_savedata_size;
|
||||||
|
@ -81,6 +83,24 @@ namespace ams::erpt::srv {
|
||||||
|
|
||||||
R_ABORT_UNLESS(fs::MountSdCardErrorReportDirectoryForAtmosphere(ReportOnSdStoragePath));
|
R_ABORT_UNLESS(fs::MountSdCardErrorReportDirectoryForAtmosphere(ReportOnSdStoragePath));
|
||||||
|
|
||||||
|
if (g_automatic_report_cleanup_enabled) {
|
||||||
|
constexpr s64 MinimumReportCountForCleanup = 1000;
|
||||||
|
s64 report_count = MinimumReportCountForCleanup;
|
||||||
|
|
||||||
|
fs::DirectoryHandle dir;
|
||||||
|
if (R_SUCCEEDED(fs::OpenDirectory(std::addressof(dir), ReportOnSdStoragePath, fs::OpenDirectoryMode_All))) {
|
||||||
|
ON_SCOPE_EXIT { fs::CloseDirectory(dir); };
|
||||||
|
|
||||||
|
if (R_FAILED(fs::GetDirectoryEntryCount(std::addressof(report_count), dir))) {
|
||||||
|
report_count = MinimumReportCountForCleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (report_count >= MinimumReportCountForCleanup) {
|
||||||
|
fs::CleanDirectoryRecursively(ReportOnSdStoragePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
R_ABORT_UNLESS(MountSystemSaveData());
|
R_ABORT_UNLESS(MountSystemSaveData());
|
||||||
|
|
||||||
g_sf_allocator.Attach(g_heap_handle);
|
g_sf_allocator.Attach(g_heap_handle);
|
||||||
|
@ -137,6 +157,11 @@ namespace ams::erpt::srv {
|
||||||
return ResultSuccess();
|
return ResultSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result SetEnabledAutomaticReportCleanup(bool en) {
|
||||||
|
g_automatic_report_cleanup_enabled = en;
|
||||||
|
return ResultSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
void Wait() {
|
void Wait() {
|
||||||
/* Get the update event. */
|
/* Get the update event. */
|
||||||
os::Event *event = GetForcedShutdownUpdateEvent();
|
os::Event *event = GetForcedShutdownUpdateEvent();
|
||||||
|
|
|
@ -325,6 +325,10 @@ namespace ams::settings::fwdbg {
|
||||||
/* Note that this setting does nothing when log manager is not enabled/sd card logging is not enabled. */
|
/* Note that this setting does nothing when log manager is not enabled/sd card logging is not enabled. */
|
||||||
R_ABORT_UNLESS(ParseSettingsItemValue("lm", "sd_card_log_output_directory", "str!atmosphere/binlogs"));
|
R_ABORT_UNLESS(ParseSettingsItemValue("lm", "sd_card_log_output_directory", "str!atmosphere/binlogs"));
|
||||||
|
|
||||||
|
/* Control whether erpt reports should always be preserved, instead of automatically cleaning periodically. */
|
||||||
|
/* 0 = Disabled, 1 = Enabled */
|
||||||
|
R_ABORT_UNLESS(ParseSettingsItemValue("erpt", "disable_automatic_report_cleanup", "u8!0x0"));
|
||||||
|
|
||||||
/* Atmosphere custom settings. */
|
/* Atmosphere custom settings. */
|
||||||
|
|
||||||
/* Reboot from fatal automatically after some number of milliseconds. */
|
/* Reboot from fatal automatically after some number of milliseconds. */
|
||||||
|
|
|
@ -84,6 +84,16 @@ namespace ams {
|
||||||
/* Atmosphere always wants to redirect new reports to the SD card, to prevent them from being logged. */
|
/* Atmosphere always wants to redirect new reports to the SD card, to prevent them from being logged. */
|
||||||
erpt::srv::SetRedirectNewReportsToSdCard(true);
|
erpt::srv::SetRedirectNewReportsToSdCard(true);
|
||||||
|
|
||||||
|
/* Decide whether or not to clean up reports periodically. */
|
||||||
|
{
|
||||||
|
u8 disable_report_cleanup = 0;
|
||||||
|
if (settings::fwdbg::GetSettingsItemValue(std::addressof(disable_report_cleanup), sizeof(disable_report_cleanup), "erpt", "disable_automatic_report_cleanup") == sizeof(disable_report_cleanup)) {
|
||||||
|
erpt::srv::SetEnabledAutomaticReportCleanup(disable_report_cleanup == 0);
|
||||||
|
} else {
|
||||||
|
erpt::srv::SetEnabledAutomaticReportCleanup(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Configure the OS version. */
|
/* Configure the OS version. */
|
||||||
{
|
{
|
||||||
settings::system::FirmwareVersion firmware_version = {};
|
settings::system::FirmwareVersion firmware_version = {};
|
||||||
|
|
Loading…
Reference in a new issue