docker_manager/manager-client/app/models/repo.js

104 lines
2.6 KiB
JavaScript

/* global Discourse */
import request from 'ember-ajax/request';
import Ember from 'ember';
var loaded = [];
var Repo = Ember.Object.extend({
upToDate: function() {
return !this.get('upgrading') & (this.get('version') === this.get('latest.version'));
}.property('upgrading', 'version', 'latest.version'),
shouldCheck: function() {
if (Ember.isNone(this.get('version'))) { return false; }
if (this.get('checking')) { return false; }
// Only check once every minute
var lastCheckedAt = this.get('lastCheckedAt');
if (lastCheckedAt) {
var ago = new Date().getTime() - lastCheckedAt;
return ago > 60 * 1000;
}
return true;
}.property().volatile(),
repoAjax: function(url, args) {
args = args || {};
args.data = this.getProperties('path', 'version', 'branch');
return request(Discourse.getURL(url), args);
},
findLatest: function() {
var self = this;
return new Ember.RSVP.Promise(function(resolve) {
if (!self.get('shouldCheck')) { return resolve(); }
self.set('checking', true);
self.repoAjax(Discourse.getURL('/admin/docker/latest')).then(function(result) {
self.setProperties({
checking: false,
lastCheckedAt: new Date().getTime(),
latest: Ember.Object.create(result.latest)
});
resolve();
});
});
},
findProgress: function() {
return this.repoAjax(Discourse.getURL('/admin/docker/progress')).then(function(result) {
return result.progress;
});
},
resetUpgrade: function() {
var self = this;
return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'DELETE' }).then(function() {
self.set('upgrading', false);
});
},
startUpgrade: function() {
var self = this;
this.set('upgrading', true);
return this.repoAjax(Discourse.getURL('/admin/docker/upgrade'), { dataType: 'text', type: 'POST' }).catch(function(e) {
self.set('upgrading', false);
});
}
});
Repo.reopenClass({
findAll() {
return new Ember.RSVP.Promise(function (resolve) {
if (loaded.length) { return resolve(loaded); }
request(Discourse.getURL("/admin/docker/repos")).then(function(result) {
loaded = result.repos.map(function(r) {
return Repo.create(r);
});
resolve(loaded);
});
});
},
findUpgrading: function() {
return this.findAll().then(function(result) {
return result.findBy('upgrading', true);
});
},
find: function(id) {
return this.findAll().then(function(result) {
return result.findBy('id', id);
});
},
});
export default Repo;