DEV: Improve the button-disabling logic
This commit is contained in:
parent
d6d47ef849
commit
3d165222b0
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -13,7 +13,6 @@ export default class UpgradeIndex extends Controller {
|
|||
}
|
||||
|
||||
get outdated() {
|
||||
// TODO: move to service?
|
||||
return needsImageUpgrade;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 ?? [];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue