/** * 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.HostComponent = DS.Model.extend({ workStatus: DS.attr('string'), componentName: DS.attr('string'), haStatus: DS.attr('string'), host: DS.belongsTo('App.Host'), service: DS.belongsTo('App.Service'), actualConfigs: null, isClient:function () { if(['PIG', 'SQOOP', 'HCAT', 'MAPREDUCE2_CLIENT'].contains(this.get('componentName'))){ return true; } return Boolean(this.get('componentName').match(/_client/gi)); }.property('componentName'), isRunning: function(){ return (this.get('workStatus') == 'STARTED' || this.get('workStatus') == 'STARTING'); }.property('workStatus'), displayName: function () { return App.format.role(this.get('componentName')); }.property('componentName'), isMaster: function () { switch (this.get('componentName')) { case 'NAMENODE': case 'SECONDARY_NAMENODE': case 'SNAMENODE': case 'JOURNALNODE': case 'JOBTRACKER': case 'ZOOKEEPER_SERVER': case 'HIVE_SERVER': case 'HIVE_METASTORE': case 'MYSQL_SERVER': case 'HBASE_MASTER': case 'NAGIOS_SERVER': case 'GANGLIA_SERVER': case 'OOZIE_SERVER': case 'WEBHCAT_SERVER': case 'HUE_SERVER': case 'HISTORYSERVER': case 'FLUME_SERVER': case 'RESOURCEMANAGER': return true; default: return false; } }.property('componentName'), isSlave: function(){ switch (this.get('componentName')) { case 'DATANODE': case 'TASKTRACKER': case 'HBASE_REGIONSERVER': case 'GANGLIA_MONITOR': case 'NODEMANAGER': case 'ZKFC': return true; default: return false; } }.property('componentName'), /** * A host-component is decommissioning when it is in HDFS service's list of * decomNodes. */ isDecommissioning: function () { var decommissioning = false; var hostName = this.get('host.hostName'); var componentName = this.get('componentName'); var hdfsSvc = App.HDFSService.find().objectAt(0); if (componentName === 'DATANODE' && hdfsSvc) { var decomNodes = hdfsSvc.get('decommissionDataNodes'); var decomNode = decomNodes != null ? decomNodes.findProperty("hostName", hostName) : null; decommissioning = decomNode != null; } return decommissioning; }.property('componentName', 'host.hostName', 'App.router.clusterController.isLoaded', 'App.router.updateController.isUpdated'), /** * User friendly host component status */ componentTextStatus: function () { var value = this.get("workStatus"); switch(value){ case "INSTALLING": return 'Installing...'; case "INSTALL_FAILED": return 'Install Failed'; case "INSTALLED": return 'Stopped'; case "STARTED": return 'Started'; case "STARTING": return 'Starting...'; case "STOPPING": return 'Stopping...'; case "UNKNOWN": return 'Heartbeat lost...'; case "UPGRADE_FAILED": return 'Upgrade Failed'; } return 'Unknown'; }.property('workStatus','isDecommissioning') }); App.HostComponent.FIXTURES = []; App.HostComponentStatus = { started: "STARTED", starting: "STARTING", stopped: "INSTALLED", stopping: "STOPPING", install_failed: "INSTALL_FAILED", installing: "INSTALLING", upgrade_failed: "UPGRADE_FAILED", maintenance: "MAINTENANCE", unknown: "UNKNOWN", getKeyName:function(value){ switch(value){ case this.started: return 'started'; case this.starting: return 'starting'; case this.stopped: return 'installed'; case this.stopping: return 'stopping'; case this.install_failed: return 'install_failed'; case this.installing: return 'installing'; case this.upgrade_failed: return 'upgrade_failed'; case this.maintenance: return 'maintenance'; case this.unknown: return 'unknown'; } return 'none'; } };