DEV: Improve the button-disabling logic

This commit is contained in:
Jarek Radosz 2023-02-12 21:22:20 +01:00
parent d6d47ef849
commit 3d165222b0
8 changed files with 47 additions and 24 deletions

View File

@ -76,6 +76,7 @@ module DockerManager
respond_progress(
logs: upgrader.find_logs || "",
percentage: upgrader.last_percentage || 0,
status: upgrader.last_status || nil,
repos: Array.wrap(repo).map(&:name)
)
end
@ -170,14 +171,15 @@ module DockerManager
private
def respond_progress(logs: "", percentage: 0, repos: nil)
render json: {
progress: {
logs: logs,
percentage: percentage,
repos: repos
}
}
def respond_progress(logs: "", percentage: 0, status: nil, repos: nil)
progress = {
logs: logs,
percentage: percentage,
status: status,
repos: repos
}
render json: { progress: progress }
end
def repo_version(repo)

View File

@ -5,17 +5,20 @@ import I18n from "I18n";
export default class RepoStatus extends Component {
@service router;
@service upgradeStore;
get upgradeDisabled() {
// Allow to see the currently running upgrade
if (this.args.upgradingRepo) {
// Allow to visit the upgrade page while it's running
return false;
}
if (!this.args.managerRepo) {
return false;
// Disable other buttons when an upgrade is running
if (this.upgradeStore.running) {
return true;
}
// docker_manager has to be upgraded before other plugins
return (
!this.args.managerRepo.upToDate &&
this.args.managerRepo !== this.args.repo

View File

@ -13,7 +13,6 @@ export default class UpgradeIndex extends Controller {
}
get outdated() {
// TODO: move to service?
return needsImageUpgrade;
}

View File

@ -6,10 +6,6 @@ export default class UpgradeIndex extends Route {
}
async loadRepos(list) {
if (list.length === 0) {
return;
}
for (const repo of list) {
await repo.findLatest();
}

View File

@ -37,7 +37,8 @@ export default class UpgradeShow extends Route {
this.upgradeStore.reset({
consoleOutput: progress.logs,
progressPercentage: progress.percentage,
// repos,
upgradeStatus: progress.status,
repos,
});
return;
@ -50,7 +51,8 @@ export default class UpgradeShow extends Route {
this.upgradeStore.reset({
consoleOutput: progress.logs,
progressPercentage: progress.percentage,
// repos,
upgradeStatus: progress.status,
repos: [model.id],
});
}
}

View File

@ -25,7 +25,6 @@ export default class Upgrade extends Route {
if (discourse?.branch === "origin/main") {
// Special case: If the branch is "main" warn user
// TODO: move the new service?
controller.appendBannerHtml(I18n.t("admin.docker.main_branch_warning"));
}
}

View File

@ -5,10 +5,16 @@ export default class UpgradeStore extends Service {
@tracked consoleOutput = "";
@tracked progressPercentage = 0;
@tracked upgradeStatus = null;
@tracked repos = [];
reset({ consoleOutput, progressPercentage, upgradeStatus } = {}) {
get running() {
return this.upgradeStatus === "running";
}
reset({ consoleOutput, progressPercentage, upgradeStatus, repos } = {}) {
this.consoleOutput = consoleOutput ?? "";
this.progressPercentage = progressPercentage ?? 0;
this.upgradeStatus = upgradeStatus ?? null;
this.repos = repos ?? [];
}
}

View File

@ -11,6 +11,7 @@ class DockerManager::Upgrader
@repos.each(&:stop_upgrading)
clear_logs
percent(0)
status(nil)
end
def min_workers
@ -21,6 +22,7 @@ class DockerManager::Upgrader
@repos.each { |repo| return unless repo.start_upgrading }
percent(0)
status("running")
clear_logs
@ -134,9 +136,9 @@ class DockerManager::Upgrader
log_version_upgrade
percent(100)
log("DONE")
publish("status", "complete")
status("complete")
rescue => ex
publish("status", "failed")
status("failed")
[
"Docker Manager: FAILED TO UPGRADE",
@ -242,9 +244,23 @@ class DockerManager::Upgrader
end
def log(message)
Discourse.redis.append logs_key, message + "\n"
Discourse.redis.append(logs_key, message + "\n")
Discourse.redis.expire(logs_key, 30.minutes)
publish "log", message
publish("log", message)
end
def status_key
"status:#{@repos.map(&:path).join(", ")}:#{@from_version}"
end
def last_status
Discourse.redis.get(status_key)
end
def status(val)
Discourse.redis.set(status_key, val)
Discourse.redis.expire(status_key, 30.minutes)
publish("status", val)
end
def log_version_upgrade