Refactoring and various enhancements

This commit is contained in:
Osama Sayegh 2018-06-29 00:16:54 +03:00
parent 59a829839b
commit 4ee8ccf93c
5 changed files with 60 additions and 62 deletions

View File

@ -49,17 +49,10 @@ module DockerManager
def progress def progress
repo = find_repos(params[:path], upgrading: true) repo = find_repos(params[:path], upgrading: true)
repo = find_repos(params[:path], all: true) if all_repos? && repo.blank? return respond_progress if repo.blank?
raise Discourse::NotFound unless repo.present?
upgrader = Upgrader.new(current_user.id, repo, repo_version(repo)) upgrader = Upgrader.new(current_user.id, repo, repo_version(repo))
render json: { respond_progress(logs: upgrader.find_logs, percentage: upgrader.last_percentage)
progress: {
logs: upgrader.find_logs,
percentage: upgrader.last_percentage
}
}
end end
def latest def latest
@ -119,6 +112,15 @@ module DockerManager
private private
def respond_progress(logs: nil, percentage: nil)
render json: {
progress: {
logs: logs,
percentage: percentage
}
}
end
def all_repos? def all_repos?
params[:path] == "all" params[:path] == "all"
end end
@ -132,12 +134,16 @@ module DockerManager
return repos if all return repos if all
repos.select do |repo| repos.select do |repo|
(upgrading || !repo.upgrading?) && (repo.latest_local_commit != repo.latest_origin_commit) if upgrading
repo.upgrading?
else
!repo.upgrading? && (repo.latest_local_commit != repo.latest_origin_commit)
end
end end
end end
def repo_version(repo) def repo_version(repo)
return repo.is_a?(Array) ? concat_repos_versions(repo) : params[:version] return repo.is_a?(Array) && params[:version].blank? ? concat_repos_versions(repo) : params[:version]
end end
def concat_repos_versions(repos) def concat_repos_versions(repos)

File diff suppressed because one or more lines are too long

View File

@ -52,13 +52,16 @@ export default Ember.Controller.extend({
case "status": case "status":
this.set('status', msg.value); this.set('status', msg.value);
if (msg.value === "complete") {
this.get("model").filter(repo => repo.get("upgrading")).forEach(repo => {
repo.set("version", repo.get("latest.version"));
});
}
if (msg.value === 'complete' || msg.value === 'failed') { if (msg.value === 'complete' || msg.value === 'failed') {
this.updateAttribute('upgrading', false); this.updateAttribute('upgrading', false);
} }
if (msg.value === 'complete') {
this.updateAttribute('version', "latest.version", true);
}
break; break;
} }
}, },
@ -72,9 +75,8 @@ export default Ember.Controller.extend({
}.property("upgrading"), }.property("upgrading"),
startBus() { startBus() {
const self = this; MessageBus.subscribe("/docker/upgrade", msg => {
MessageBus.subscribe("/docker/upgrade", function(msg) { this.messageReceived(msg);
self.messageReceived(msg);
}); });
}, },
@ -91,7 +93,7 @@ export default Ember.Controller.extend({
this.reset(); this.reset();
if (this.get("multiUpgrade")) { if (this.get("multiUpgrade")) {
this.updateAttribute("upgrading", true); this.get("model").filter(repo => !repo.get("upToDate")).forEach(repo => repo.set("upgrading", true));
return Repo.upgradeAll(); return Repo.upgradeAll();
} }
@ -101,21 +103,19 @@ export default Ember.Controller.extend({
}, },
resetUpgrade() { resetUpgrade() {
const self = this;
bootbox.confirm("WARNING: You should only reset upgrades that have failed and are not running.\n\n"+ bootbox.confirm("WARNING: You should only reset upgrades that have failed and are not running.\n\n"+
"This will NOT cancel currently running builds and should only be used as a last resort.", function(result) { "This will NOT cancel currently running builds and should only be used as a last resort.", result => {
if (result) { if (result) {
if (self.get("multiUpgrade")) { if (this.get("multiUpgrade")) {
return Repo.resetAll().finally(() => { return Repo.resetAll(this.get("model").filter(repo => !repo.get("upToDate"))).finally(() => {
self.reset(); this.reset();
this.updateAttribute("upgrading", false); this.updateAttribute("upgrading", false);
}); });
} }
const repo = self.get('model')[0]; const repo = this.get('model')[0];
repo.resetUpgrade().then(function() { repo.resetUpgrade().then(function() {
self.reset(); this.reset();
}); });
} }
}); });

View File

@ -3,9 +3,13 @@
import request from 'ember-ajax/request'; import request from 'ember-ajax/request';
import Ember from 'ember'; import Ember from 'ember';
var loaded = []; let loaded = [];
var Repo = Ember.Object.extend({ function concatVersions(repos) {
return repos.map(repo => repo.get("version")).join(", ");
}
const Repo = Ember.Object.extend({
unloaded: true, unloaded: true,
checking: false, checking: false,
@ -35,17 +39,15 @@ var Repo = Ember.Object.extend({
}, },
findLatest: function() { findLatest: function() {
var self = this; return new Ember.RSVP.Promise(resolve => {
if (!this.get('shouldCheck')) {
return new Ember.RSVP.Promise(function(resolve) { this.set('unloaded', false);
if (!self.get('shouldCheck')) {
self.set('unloaded', false);
return resolve(); return resolve();
} }
self.set('checking', true); this.set('checking', true);
self.repoAjax(Discourse.getURL('/admin/docker/latest')).then(function(result) { this.repoAjax(Discourse.getURL('/admin/docker/latest')).then(result => {
self.setProperties({ this.setProperties({
unloaded: false, unloaded: false,
checking: false, checking: false,
lastCheckedAt: new Date().getTime(), lastCheckedAt: new Date().getTime(),
@ -57,24 +59,20 @@ var Repo = Ember.Object.extend({
}, },
findProgress: function() { findProgress: function() {
return this.repoAjax(Discourse.getURL('/admin/docker/progress')).then(function(result) { return this.repoAjax(Discourse.getURL('/admin/docker/progress')).then(result => result.progress);
return result.progress;
});
}, },
resetUpgrade: function() { resetUpgrade: function() {
var self = this; return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'DELETE' }).then(() => {
return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'DELETE' }).then(function() { this.set('upgrading', false);
self.set('upgrading', false);
}); });
}, },
startUpgrade: function() { startUpgrade: function() {
var self = this;
this.set('upgrading', true); this.set('upgrading', true);
return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'POST' }).catch(function() { return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'POST' }).catch(() => {
self.set('upgrading', false); this.set('upgrading', false);
}); });
} }
}); });
@ -84,41 +82,35 @@ Repo.reopenClass({
return new Ember.RSVP.Promise(function (resolve) { return new Ember.RSVP.Promise(function (resolve) {
if (loaded.length) { return resolve(loaded); } if (loaded.length) { return resolve(loaded); }
request(Discourse.getURL("/admin/docker/repos")).then(function(result) { request(Discourse.getURL("/admin/docker/repos")).then(result => {
loaded = result.repos.map(function(r) { loaded = result.repos.map(r => Repo.create(r));
return Repo.create(r);
});
resolve(loaded); resolve(loaded);
}); });
}); });
}, },
findUpgrading: function() { findUpgrading: function() {
return this.findAll().then(function(result) { return this.findAll().then(result => result.findBy('upgrading', true));
return result.findBy('upgrading', true);
});
}, },
find: function(id) { find: function(id) {
return this.findAll().then(function(result) { return this.findAll().then(result => result.findBy('id', id));
return result.findBy('id', id);
});
}, },
upgradeAll() { upgradeAll() {
return request(Discourse.getURL("/admin/docker/upgrade"), { dataType: "text", type: "POST", data: { path: "all" } }); return request(Discourse.getURL("/admin/docker/upgrade"), { dataType: "text", type: "POST", data: { path: "all" } });
}, },
resetAll() { resetAll(repos) {
return request(Discourse.getURL("/admin/docker/upgrade"), { dataType: "text", type: "DELETE", data: { path: "all" } }); return request(Discourse.getURL("/admin/docker/upgrade"), { dataType: "text", type: "DELETE", data: { path: "all", version: concatVersions(repos) } });
}, },
findLatestAll() { findLatestAll() {
return request(Discourse.getURL("/admin/docker/latest"), { dataType: "text", type: "GET", data: { path: "all" } }); return request(Discourse.getURL("/admin/docker/latest"), { dataType: "text", type: "GET", data: { path: "all" } });
}, },
findAllProgress() { findAllProgress(repos) {
return request(Discourse.getURL("/admin/docker/progress"), { dataType: "text", type: "GET", data: { path: "all" } }); return request(Discourse.getURL("/admin/docker/progress"), { dataType: "text", type: "GET", data: { path: "all", version: concatVersions(repos) } });
}, },
}); });

View File

@ -20,7 +20,7 @@ export default Ember.Route.extend({
repo.set("latest", Ember.Object.create(_repo)); repo.set("latest", Ember.Object.create(_repo));
}); });
return Repo.findAllProgress().then(progress => { return Repo.findAllProgress(model.filter(repo => !repo.get("upToDate"))).then(progress => {
this.set("progress", JSON.parse(progress).progress); this.set("progress", JSON.parse(progress).progress);
}); });
}); });