/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ var App = require('app'); App.MainServiceController = Em.ArrayController.extend({ name: 'mainServiceController', /** * @type {Ember.Object[]} */ content: function () { if (!App.router.get('clusterController.isLoaded')) { return []; } return App.Service.find(); }.property('App.router.clusterController.isLoaded').volatile(), /** * Current cluster * @type {Ember.Object} */ cluster: function () { if (!App.router.get('clusterController.isLoaded')) { return null; } return App.Cluster.find().objectAt(0); }.property('App.router.clusterController.isLoaded'), /** * Check if all services are installed * true - all installed, false - not all * @type {bool} */ isAllServicesInstalled: function () { if (!this.get('content.content')) return false; var availableServices = App.StackService.find().mapProperty('serviceName'); return this.get('content.content').length == availableServices.length; }.property('content.content.@each', 'content.content.length'), /** * Should "Start All"-button be disabled * @type {bool} */ isStartAllDisabled: function () { if (this.get('isStartStopAllClicked') == true) { return true; } var stoppedServices = this.get('content').filter(function (_service) { return (_service.get('healthStatus') === 'red' && !App.get('services.clientOnly').contains(_service.get('serviceName'))); }); return (stoppedServices.length === 0); // all green status }.property('isStartStopAllClicked', 'content.@each.healthStatus'), /** * Should "Stop All"-button be disabled * @type {bool} */ isStopAllDisabled: function () { if (this.get('isStartStopAllClicked') == true) { return true; } var startedServiceLength = this.get('content').filterProperty('healthStatus', 'green').length; return (startedServiceLength === 0); }.property('isStartStopAllClicked', 'content.@each.healthStatus'), /** * @type {bool} */ isStartStopAllClicked: function () { return (App.router.get('backgroundOperationsController').get('allOperationsCount') !== 0); }.property('App.router.backgroundOperationsController.allOperationsCount'), /** * Callback for start all service button * @return {App.ModalPopup|null} * @method startAllService */ startAllService: function (event) { return this.startStopAllService(event, 'STARTED'); }, /** * Callback for stop all service button * @return {App.ModalPopup|null} * @method stopAllService */ stopAllService: function (event) { return this.startStopAllService(event, 'INSTALLED'); }, /** * Common method for "start-all", "stop-all" calls * @param {object} event * @param {string} state 'STARTED|INSTALLED' * @returns {App.ModalPopup|null} * @method startStopAllService */ startStopAllService: function(event, state) { if ($(event.target).hasClass('disabled') || $(event.target.parentElement).hasClass('disabled')) { return null; } var self = this; var bodyMessage = Em.Object.create({ confirmMsg: state == 'INSTALLED' ? Em.I18n.t('services.service.stopAll.confirmMsg') : Em.I18n.t('services.service.startAll.confirmMsg'), confirmButton: state == 'INSTALLED' ? Em.I18n.t('services.service.stop.confirmButton') : Em.I18n.t('services.service.start.confirmButton') }); return App.showConfirmationFeedBackPopup(function (query) { self.allServicesCall(state, query); }, bodyMessage); }, /** * Do request to server for "start|stop" all services * @param {string} state "STARTED|INSTALLED" * @param {object} query * @method allServicesCall * @return {$.ajax} */ allServicesCall: function (state, query) { var context = (state == 'INSTALLED') ? App.BackgroundOperationsController.CommandContexts.STOP_ALL_SERVICES : App.BackgroundOperationsController.CommandContexts.START_ALL_SERVICES; return App.ajax.send({ name: 'common.services.update', sender: this, data: { context: context, ServiceInfo: { state: state }, query: query }, success: 'allServicesCallSuccessCallback', error: 'allServicesCallErrorCallback' }); }, /** * Success-callback for all-services request * @param {object} data * @param {object} xhr * @param {object} params * @method allServicesCallSuccessCallback */ allServicesCallSuccessCallback: function (data, xhr, params) { params.query.set('status', 'SUCCESS'); // load data (if we need to show this background operations popup) from persist App.router.get('applicationController').dataLoading().done(function (initValue) { if (initValue) { App.router.get('backgroundOperationsController').showPopup(); } }); }, /** * Error-callback for all-services request * @param {object} request * @param {object} ajaxOptions * @param {string} error * @param {object} opt * @param {object} params * @method allServicesCallErrorCallback */ allServicesCallErrorCallback: function (request, ajaxOptions, error, opt, params) { params.query.set('status', 'FAIL'); }, /** * "Add-service"-click handler * @method gotoAddService */ gotoAddService: function () { if (this.get('isAllServicesInstalled')) { return; } App.router.transitionTo('main.serviceAdd'); } });