RLOpenCatalyst/core

View on GitHub
client/cat3/src/factory/instanceServices.js

Summary

Maintainability
F
4 days
Test Coverage
/* Copyright (C) Relevance Lab Private Limited- All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
 * Written by Relevance UI Team,
 * Aug 2015
 */

(function(angular) {
    "use strict";
    angular.module('instanceServices', [
    ]).service('instanceLogs', ['$modal', '$q', 'workzoneServices', '$timeout', 'instanceSetting', function($modal, $q, workzoneServices, $timeout, instanceSetting) {
        var instanceId;
        var serviceInterface = {};
        var logList,isFullLogs=true;
        var timerObject;
        var deferred = "";
        var helper = {
            lastTimeStamp: '',
            getlastTimeStamp: function(logObj) {
                if (logObj instanceof Array && logObj.length) {
                    var lastTime = logObj[logObj.length - 1].timestamp;
                    return lastTime;
                }
            },
            logsPolling: function() {
                timerObject = $timeout(function() {
                    workzoneServices.getInstanceLogs(instanceId, '?timestamp=' + helper.lastTimeStamp)
                    .then(function(resp) {
                        if (resp.data.length) {
                            helper.lastTimeStamp = helper.getlastTimeStamp(resp.data);
                            var logData = {
                                logs : resp.data,
                                fullLogs : false
                            };
                            deferred.notify(logData);
                        }
                        helper.logsPolling();
                    });
                }, instanceSetting.logCheckTimer);
            },
            stopPolling: function() {
                $timeout.cancel(timerObject);
            }
        };
        serviceInterface.showInstanceLogs = function(instId) {
            instanceId = instId;
            //initialise new promise object for every new log flow.
            deferred = $q.defer();
            workzoneServices.getInstanceLogs(instanceId).then(function(response) {
                helper.lastTimeStamp = helper.getlastTimeStamp(response.data);
                logList = response.data;
                helper.logsPolling();
                var logData = {
                    logs : logList,
                    fullLogs : isFullLogs
                };
                deferred.notify(logData);
            },function(error) {
                deferred.reject(error);
            });
            return deferred.promise;
        };
        serviceInterface.stopLogsPolling = function() {
            helper.stopPolling();
            deferred.resolve("Resolved Logs notifier will stop now");
        };
        serviceInterface.scrollBottom = function (selector) {
            selector = selector ? selector : ".logsArea";
            $timeout(function () {
                var elm = angular.element(selector);
                elm.scrollTop(elm[0].scrollHeight);
            }, 100);
        };
        return serviceInterface;
    }]).service('instanceActions', [function() {
        //condition check for SSH
        var isSSHSupportedOS = function(inst) {
            if ((inst.hardware.os === 'linux' || inst.hardware.os === 'centos')) {
                return true;
            }
        },
        isRunning = function(inst) {
            return inst.instanceState === 'running';
        };
        //condition check for RDP
        var isRDPSupportOS = function(inst) {
            if ((inst.hardware.os === 'windows')) {
                return true;
            }
        };
        //condition check for chef
        var isChefSupported = function(inst) {
            if ((inst.chef)) {
                return true;
            }
        };
        //condition check for puppet
        var isPuppetSupported = function(inst) {
            if ((inst.puppet)) {
                return true;
            }
        };
        var serviceInterface = {};
        /*This is for show/hide different buttons in instance page*/
        serviceInterface.isChefEnabled = function(inst) {
            if ((isChefSupported(inst) && isRunning(inst))) {
                return true;
            }
        };
        serviceInterface.isChefDisabled = function(inst) {
            if ((isChefSupported(inst) && !isRunning(inst))) {
                return true;
            }
        };
        serviceInterface.isPuppetEnabled = function(inst) {
            if ((isPuppetSupported(inst) && isRunning(inst))) {
                return true;
            }
        };
        serviceInterface.isPuppetDisabled = function(inst) {
            if ((isPuppetSupported(inst) && !isRunning(inst))) {
                return true;
            }
        };
        serviceInterface.isSSHEnabled = function(inst) {
            if (isSSHSupportedOS(inst) && isRunning(inst)) {
                return true;
            }
        };
        serviceInterface.isSSHDisabled = function(inst) {
            if (isSSHSupportedOS(inst) && !isRunning(inst)) {
                return true;
            }
        };
        serviceInterface.isRDPEnabled = function(inst) {
            if (isRDPSupportOS(inst) && isRunning(inst)) {
                return true;
            }
        };
        serviceInterface.isRDPDisabled = function(inst) {
            if (isRDPSupportOS(inst) && !isRunning(inst)) {
                return true;
            }
        };
        return serviceInterface;
    }]).service('instanceOperations', ['$modal', '$q', function($modal, $q) {
        var serviceInterface = {};
        /*This is for open modal calls*/
        serviceInterface.deleteInstance = function(instanceObj) {
            var _deleteHandler = function(resolve, reject) {
                $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/deleteInstance.html',
                    controller: 'deleteInstanceCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return instanceObj;
                        }
                    }
                }).result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_deleteHandler);
        };

        serviceInterface.editInstanceName = function(instanceObj) {
            var _editNameHandler = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/instanceNameEdit.html',
                    controller: 'editNameCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return instanceObj;
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_editNameHandler);
        };

        serviceInterface.instanceSSH = function(instanceObj) {
            var _instanceSSHHandler = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/instanceSSH.html',
                    controller: 'instanceSSHCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        sshInstance: function() {
                            return instanceObj;
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_instanceSSHHandler);
        };

        serviceInterface.viewLogs = function(instanceObj) {
            var _viewLogs = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/instanceLogs.html',
                    controller: 'instanceLogsCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return instanceObj;
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_viewLogs);
        };

        serviceInterface.viewRunList = function(instanceObj) {
            var _viewRunList = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/viewRunList.html',
                    controller: 'viewRunListCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return instanceObj;
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_viewRunList);
        };

        serviceInterface.updateCookbook = function(instance) {
            console.log("instance service");
            var _viewChefRunList = function() {
                var modalInstance = $modal.open({
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/instanceUpdateChefRunlist.html',
                    controller: 'instanceUpdateChefRunlistCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        instanceChefAttribute: function() {
                            return{
                                instanceId:instance._id,
                                chefrunlist:instance.runlist,
                                attributes:instance.attributes
                            }; 
                        }
                    }
                });
                modalInstance.result.then(function() {   
                 //returning viewLogs to show Logs after success
                 return serviceInterface.viewLogs(instance);
                }, function() {
                    console.log('Dismiss time is ' + new Date());
                });
            };
            return $q(_viewChefRunList);
        };

        serviceInterface.puppetRunClient = function(instance) {
            var _puppetRunClient = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: 'src/partials/sections/dashboard/workzone/instance/popups/instanceRunPuppetClient.html',
                    controller: 'instanceRunPuppetClientCtrl',
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        instanceId: function() {
                            return instance._id;
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    console.log('Modal closed at ' + new Date());
                    resolve(modalClose);
                }, function(modalCancel) {
                    console.log('Modal dismissed at ' + new Date());
                    reject(modalCancel);
                });
            };
            return $q(_puppetRunClient);
        };

        serviceInterface.stopInstanceHandler = function(_inst, _hasPerm) {
            var _stopInst = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: "src/partials/sections/dashboard/workzone/instance/popups/stopInstance.html",
                    controller: "startStopInstanceCtrl",
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return {
                                inst: _inst,
                                hasPerm: _hasPerm
                            };
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_stopInst);
        };

        serviceInterface.startInstanceHandler = function(_inst, _hasPerm) {
            var _startInst = function(resolve, reject) {
                var modalInstance = $modal.open({
                    animation: true,
                    templateUrl: "src/partials/sections/dashboard/workzone/instance/popups/startInstance.html",
                    controller: "startStopInstanceCtrl",
                    backdrop: 'static',
                    keyboard: false,
                    resolve: {
                        items: function() {
                            return {
                                inst: _inst,
                                hasPerm: _hasPerm
                            };
                        }
                    }
                });
                modalInstance.result.then(function(modalClose) {
                    resolve(modalClose);
                }, function(modalCancel) {
                    reject(modalCancel);
                });
            };
            return $q(_startInst);
        };
        return serviceInterface;
    }]).factory('instanceSetting', [function() {
        return {
            logCheckTimer:5000
        };
    }]);
})(angular);