2018-11-15 19:59:24 +01:00
|
|
|
'use strict';
|
|
|
|
|
|
2018-11-16 17:21:57 +01:00
|
|
|
/* global angular */
|
|
|
|
|
|
2018-11-20 14:47:39 +01:00
|
|
|
angular.module('Application').controller('AddonsController', ['$scope', '$location', '$interval', 'Client', function ($scope, $location, $interval, Client) {
|
2018-11-15 19:59:24 +01:00
|
|
|
Client.onReady(function () { if (!Client.getUserInfo().admin) $location.path('/'); });
|
|
|
|
|
|
2018-11-20 16:53:42 +01:00
|
|
|
$scope.config = Client.getConfig();
|
2018-11-15 19:59:24 +01:00
|
|
|
$scope.ready = false;
|
2018-11-18 20:01:53 +01:00
|
|
|
$scope.addons = {};
|
2018-11-15 19:59:24 +01:00
|
|
|
|
2018-11-18 20:01:53 +01:00
|
|
|
function refresh(addonName) {
|
|
|
|
|
Client.getAddon(addonName, function (error, result) {
|
2018-11-15 19:59:24 +01:00
|
|
|
if (error) return Client.error(error);
|
|
|
|
|
|
2018-11-18 20:01:53 +01:00
|
|
|
$scope.addons[addonName] = result;
|
2018-11-15 19:59:24 +01:00
|
|
|
});
|
2018-11-16 17:21:57 +01:00
|
|
|
}
|
|
|
|
|
|
2018-11-20 14:47:39 +01:00
|
|
|
function refreshAll() {
|
|
|
|
|
Object.keys($scope.addons).forEach(function (a) {
|
|
|
|
|
refresh(a);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-21 16:14:02 +01:00
|
|
|
$scope.restartAddon = function (addonName) {
|
|
|
|
|
Client.restartAddon(addonName, function (error) {
|
2018-11-16 17:21:57 +01:00
|
|
|
if (error) return Client.error(error);
|
|
|
|
|
|
2018-11-18 20:01:53 +01:00
|
|
|
refresh(addonName);
|
2018-11-16 17:21:57 +01:00
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2018-11-20 16:53:42 +01:00
|
|
|
$scope.addonConfigure = {
|
|
|
|
|
error: null,
|
|
|
|
|
busy: false,
|
|
|
|
|
addon: null,
|
|
|
|
|
|
|
|
|
|
// form model
|
|
|
|
|
memoryLimit: 0,
|
|
|
|
|
memoryTicks: [],
|
|
|
|
|
|
|
|
|
|
show: function (addon) {
|
|
|
|
|
$scope.addonConfigure.reset();
|
|
|
|
|
|
|
|
|
|
$scope.addonConfigure.addon = addon;
|
|
|
|
|
$scope.addonConfigure.memoryLimit = addon.config.memory;
|
|
|
|
|
|
|
|
|
|
// TODO improve those
|
|
|
|
|
$scope.addonConfigure.memoryTicks = [];
|
|
|
|
|
|
|
|
|
|
// create ticks starting from manifest memory limit. the memory limit here is currently split into ram+swap (and thus *2 below)
|
|
|
|
|
// TODO: the *2 will overallocate since 4GB is max swap that cloudron itself allocates
|
|
|
|
|
$scope.addonConfigure.memoryTicks = [];
|
|
|
|
|
var npow2 = Math.pow(2, Math.ceil(Math.log($scope.config.memory)/Math.log(2)));
|
|
|
|
|
for (var i = 256; i <= (npow2*2/1024/1024); i *= 2) {
|
2018-11-21 15:57:26 +01:00
|
|
|
$scope.addonConfigure.memoryTicks.push(i * 1024 * 1024);
|
2018-11-20 16:53:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$('#addonConfigureModal').modal('show');
|
|
|
|
|
},
|
|
|
|
|
|
2018-11-21 17:06:01 +01:00
|
|
|
submit: function (memoryLimit) {
|
2018-11-20 16:53:42 +01:00
|
|
|
$scope.addonConfigure.busy = true;
|
|
|
|
|
$scope.addonConfigure.error = null;
|
|
|
|
|
|
2018-11-21 17:06:01 +01:00
|
|
|
Client.configureAddon($scope.addonConfigure.addon.name, memoryLimit, function (error) {
|
2018-11-20 16:53:42 +01:00
|
|
|
$scope.addonConfigure.busy = false;
|
|
|
|
|
if (error) {
|
|
|
|
|
$scope.addonConfigure.error = error.message;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// reload the addon
|
|
|
|
|
refresh($scope.addonConfigure.addon.name);
|
2018-11-21 15:57:26 +01:00
|
|
|
|
|
|
|
|
$('#addonConfigureModal').modal('hide');
|
|
|
|
|
$scope.addonConfigure.reset();
|
2018-11-20 16:53:42 +01:00
|
|
|
});
|
2018-11-21 17:06:01 +01:00
|
|
|
}
|
2018-11-20 16:53:42 +01:00
|
|
|
|
|
|
|
|
reset: function () {
|
|
|
|
|
$scope.addonConfigure.busy = false;
|
|
|
|
|
$scope.addonConfigure.error = null;
|
|
|
|
|
$scope.addonConfigure.addon = null;
|
|
|
|
|
|
|
|
|
|
$scope.addonConfigure.memoryLimit = 0;
|
|
|
|
|
$scope.addonConfigure.memoryTicks = [];
|
|
|
|
|
|
|
|
|
|
$scope.addonConfigureForm.$setPristine();
|
|
|
|
|
$scope.addonConfigureForm.$setUntouched();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2018-11-18 20:01:53 +01:00
|
|
|
Client.onReady(function () {
|
|
|
|
|
Client.getAddons(function (error, result) {
|
|
|
|
|
if (error) return Client.error(error);
|
|
|
|
|
|
|
|
|
|
result.forEach(function (a) {
|
|
|
|
|
$scope.addons[a] = { name: a };
|
|
|
|
|
});
|
|
|
|
|
|
2018-11-20 14:47:39 +01:00
|
|
|
// just kick off the status fetching
|
|
|
|
|
refreshAll();
|
|
|
|
|
|
|
|
|
|
$interval(refreshAll, 5000);
|
|
|
|
|
|
2018-11-18 20:01:53 +01:00
|
|
|
$scope.ready = true;
|
|
|
|
|
});
|
|
|
|
|
});
|
2018-11-15 19:59:24 +01:00
|
|
|
}]);
|