2023-10-11 02:38:59 +08:00
|
|
|
import Component from "@ember/component";
|
|
|
|
import { scheduleOnce } from "@ember/runloop";
|
2023-02-23 23:32:53 +08:00
|
|
|
import { classNames } from "@ember-decorators/component";
|
2023-02-24 17:50:52 +08:00
|
|
|
import { observes, on } from "@ember-decorators/object";
|
2020-12-18 21:18:52 +08:00
|
|
|
import discourseDebounce from "discourse-common/lib/debounce";
|
2023-10-11 02:38:59 +08:00
|
|
|
import I18n from "I18n";
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2023-02-23 23:32:53 +08:00
|
|
|
@classNames("admin-backups-logs")
|
|
|
|
export default class AdminBackupsLogs extends Component {
|
|
|
|
showLoadingSpinner = false;
|
|
|
|
hasFormattedLogs = false;
|
|
|
|
noLogsMessage = I18n.t("admin.backups.logs.none");
|
|
|
|
formattedLogs = "";
|
|
|
|
index = 0;
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
_reset() {
|
|
|
|
this.setProperties({ formattedLogs: "", index: 0 });
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
_scrollDown() {
|
|
|
|
const div = this.element;
|
|
|
|
div.scrollTop = div.scrollHeight;
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
2016-10-27 23:57:33 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
@on("init")
|
|
|
|
@observes("logs.[]")
|
|
|
|
_resetFormattedLogs() {
|
|
|
|
if (this.logs.length === 0) {
|
|
|
|
this._reset(); // reset the cached logs whenever the model is reset
|
|
|
|
this.renderLogs();
|
|
|
|
}
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
2018-09-20 02:00:03 +08:00
|
|
|
|
2021-11-13 21:01:55 +08:00
|
|
|
_updateFormattedLogsFunc() {
|
2019-12-10 05:42:08 +08:00
|
|
|
const logs = this.logs;
|
2020-09-22 22:28:28 +08:00
|
|
|
if (logs.length === 0) {
|
|
|
|
return;
|
|
|
|
}
|
2018-09-20 02:00:03 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
// do the log formatting only once for HELLish performance
|
|
|
|
let formattedLogs = this.formattedLogs;
|
|
|
|
for (let i = this.index, length = logs.length; i < length; i++) {
|
|
|
|
const date = logs[i].get("timestamp"),
|
|
|
|
message = logs[i].get("message");
|
|
|
|
formattedLogs += "[" + date + "] " + message + "\n";
|
|
|
|
}
|
|
|
|
// update the formatted logs & cache index
|
|
|
|
this.setProperties({
|
2021-11-10 07:31:41 +08:00
|
|
|
formattedLogs,
|
2019-12-10 05:42:08 +08:00
|
|
|
index: logs.length,
|
|
|
|
});
|
|
|
|
// force rerender
|
|
|
|
this.renderLogs();
|
2018-09-20 02:00:03 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
scheduleOnce("afterRender", this, this._scrollDown);
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
2020-12-18 21:18:52 +08:00
|
|
|
|
|
|
|
@on("init")
|
|
|
|
@observes("logs.[]")
|
|
|
|
_updateFormattedLogs() {
|
|
|
|
discourseDebounce(this, this._updateFormattedLogsFunc, 150);
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2019-12-10 05:42:08 +08:00
|
|
|
renderLogs() {
|
|
|
|
const formattedLogs = this.formattedLogs;
|
|
|
|
if (formattedLogs && formattedLogs.length > 0) {
|
|
|
|
this.set("hasFormattedLogs", true);
|
|
|
|
} else {
|
|
|
|
this.set("hasFormattedLogs", false);
|
|
|
|
}
|
|
|
|
// add a loading indicator
|
|
|
|
if (this.get("status.isOperationRunning")) {
|
|
|
|
this.set("showLoadingSpinner", true);
|
|
|
|
} else {
|
|
|
|
this.set("showLoadingSpinner", false);
|
2014-02-13 12:35:46 +08:00
|
|
|
}
|
2023-02-23 23:32:53 +08:00
|
|
|
}
|
|
|
|
}
|