Refactoring and various enhancements
This commit is contained in:
parent
59a829839b
commit
4ee8ccf93c
|
|
@ -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
|
|
@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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) } });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue