Merge pull request #2569 from Computroniks/bug/2565-negative-retention-value

Fixed negative retention time values
This commit is contained in:
Louis Lam 2023-01-09 13:08:35 +08:00 committed by GitHub
commit 439f963749
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 16 deletions

View file

@ -25,15 +25,20 @@ const DEFAULT_KEEP_PERIOD = 180;
parsedPeriod = DEFAULT_KEEP_PERIOD; parsedPeriod = DEFAULT_KEEP_PERIOD;
} }
log(`Clearing Data older than ${parsedPeriod} days...`); if (parsedPeriod < 1) {
log(`Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`);
} else {
try { log(`Clearing Data older than ${parsedPeriod} days...`);
await R.exec(
"DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", try {
[ parsedPeriod ] await R.exec(
); "DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ",
} catch (e) { [ parsedPeriod ]
log(`Failed to clear old data: ${e.message}`); );
} catch (e) {
log(`Failed to clear old data: ${e.message}`);
}
} }
exit(); exit();

View file

@ -7,6 +7,7 @@
settings.keepDataPeriodDays, settings.keepDataPeriodDays,
]) ])
}} }}
{{ $t("infiniteRetention") }}
</label> </label>
<input <input
id="keepDataPeriodDays" id="keepDataPeriodDays"
@ -14,9 +15,12 @@
type="number" type="number"
class="form-control" class="form-control"
required required
min="1" min="0"
step="1" step="1"
/> />
<div v-if="settings.keepDataPeriodDays < 0" class="form-text">
{{ $t("dataRetentionTimeError") }}
</div>
</div> </div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-primary" type="button" @click="saveSettings()"> <button class="btn btn-primary" type="button" @click="saveSettings()">

View file

@ -675,4 +675,6 @@ export default {
"General Monitor Type": "General Monitor Type", "General Monitor Type": "General Monitor Type",
"Passive Monitor Type": "Passive Monitor Type", "Passive Monitor Type": "Passive Monitor Type",
"Specific Monitor Type": "Specific Monitor Type", "Specific Monitor Type": "Specific Monitor Type",
dataRetentionTimeError: "Retention period must be 0 or greater",
infiniteRetention: "Set to 0 for infinite retention.",
}; };

View file

@ -189,14 +189,36 @@ export default {
* @param {string} [currentPassword] Only need for disableAuth to true * @param {string} [currentPassword] Only need for disableAuth to true
*/ */
saveSettings(callback, currentPassword) { saveSettings(callback, currentPassword) {
this.$root.getSocket().emit("setSettings", this.settings, currentPassword, (res) => { let valid = this.validateSettings();
this.$root.toastRes(res); if (valid.success) {
this.loadSettings(); this.$root.getSocket().emit("setSettings", this.settings, currentPassword, (res) => {
this.$root.toastRes(res);
this.loadSettings();
if (callback) { if (callback) {
callback(); callback();
} }
}); });
} else {
this.$root.toastError(valid.msg);
}
},
/**
* Ensure settings are valid
* @returns {Object} Contains success state and error msg
*/
validateSettings() {
if (this.settings.keepDataPeriodDays < 0) {
return {
success: false,
msg: this.$t("dataRetentionTimeError"),
};
}
return {
success: true,
msg: "",
};
}, },
} }
}; };