agneta-platform
Version:
Agneta Platform - Integrate and customize business applications
154 lines (127 loc) • 3.91 kB
JavaScript
/* Copyright 2017 Agneta Network Applications, LLC.
*
* Source file: portal/website/source/utility.js
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function() {
var app = angular.module('MainApp');
var logLimit = 3000;
app.controller('UtilityCtrl', function($scope, $rootScope, $mdToast, Utility, SocketIO, $parse) {
$scope.logLines = [];
$scope.progressBars = {};
$scope.runOptions = {};
var socket = SocketIO.connect('utilities');
var utilityName = $rootScope.viewData.extra.name;
$scope.checkCondition = function(parameter) {
if (parameter.if) {
if (angular.isObject(parameter.if)) {
return $parse(parameter.if.prop)($scope.runOptions) == parameter.if.equals;
}
return $parse(parameter.if)($scope.runOptions);
}
return true;
};
function socketOn(name, cb) {
socket.on(utilityName + ':' + name, cb);
}
Utility.state({
name: utilityName
})
.$promise
.then(function(options) {
$scope.parameters = options.parameters;
});
socketOn('notify', $rootScope.notify);
socketOn('init', function(options) {
$scope.parameters = options.parameters;
$scope.$apply();
});
socketOn('status', function(data) {
$scope.status = data;
$scope.$apply();
});
socketOn('addLine', function(options) {
options[options.type] = true;
$scope.addLine(options);
$scope.$apply();
});
socketOn('progress:new', function(data) {
console.log(data);
$scope.progressBars[data.id] = {
value: 0,
count: 0,
length: data.length,
title: data.options.title
};
$scope.$apply();
});
socketOn('progress:update', function(data) {
var progressBar = $scope.progressBars[data.id];
progressBar.length = data.length;
onProgressUpdate(progressBar);
$scope.$apply();
});
socketOn('progress:tick', function(data) {
var progressBar = $scope.progressBars[data.id];
if (!progressBar) {
return;
}
if (progressBar.complete) {
console.error('Ticking on a complete progress bar');
return;
}
progressBar.current = data.options;
progressBar.count++;
onProgressUpdate(progressBar);
$scope.$apply();
});
function onProgressUpdate(progressBar) {
progressBar.value = progressBar.count / progressBar.length * 100;
if (progressBar.count == progressBar.length) {
progressBar.complete = true;
progressBar.current = {
title: 'Complete'
};
} else {
progressBar.complete = false;
}
}
$scope.run = function() {
$scope.clear();
$scope.log('Starting...');
Utility.start({
name: utilityName,
options: $scope.runOptions
});
};
$scope.clear = function() {
$scope.logLines = [];
$scope.progressBars = {};
};
$scope.log = function(message) {
$scope.addLine({
log: true,
message: message
});
};
$scope.addLine = function(line) {
$scope.logLines.unshift(line);
while ($scope.logLines.length > logLimit) {
$scope.logLines.pop();
}
};
$scope.socket = socket;
$scope.log('Click "start" to run the utility...');
});
})();