| {{! |
| * 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. |
| }} |
| |
| <div class="row-fluid host-block"> |
| <div class="span12"> |
| <div class="span6"> |
| {{!components}} |
| <div class="box"> |
| <div class="box-header"> |
| <h4>{{t common.components}}</h4> |
| </div> |
| <div class="host-components"> |
| {{#if view.sortedComponents.length}} |
| |
| {{#if view.needToRestartComponentsCount}} |
| <div class="alert alert-warning clearfix"> |
| <i class="icon-refresh"></i> {{view.needToRestartMessage}} |
| <br/> |
| <button {{bindAttr class=":btn :restart-components :pull-left view.stopComponentsIsDisabled::btn-danger view.stopComponentsIsDisabled:disabled" }} {{action restartComponents view.isStopCommand target="controller"}}> |
| {{t hosts.host.details.needToRestart.stopButton}} |
| </button> |
| <span class="restart-components pull-left"> </span> |
| <button {{bindAttr class=":btn :restart-components :pull-left view.startComponentsIsDisabled::btn-success view.startComponentsIsDisabled:disabled" }} {{action restartComponents target="controller"}}> |
| {{t hosts.host.details.needToRestart.startButton}} |
| </button> |
| </div> |
| {{/if}} |
| |
| {{#each component in view.sortedComponents}} |
| <div class="row-fluid"> |
| {{#view view.ComponentView contentBinding="component" decommissionDataNodeHostNamesBinding="view.decommissionDataNodeHostNames"}} |
| <div class="span7"> |
| {{#if view.isUpgradeFailed}} |
| {{#if App.isAdmin}} |
| <a href="#" {{action "upgradeComponent" view.content target="controller"}} > |
| <i title="Component upgrade failed" class="components-health icon-arrow-up"></i> |
| </a> |
| {{/if}} |
| {{else}} |
| <span {{bindAttr class="view.statusClass :components-health"}}></span> |
| {{/if}} |
| {{#if component.displayNameAdvanced}} |
| {{component.displayNameAdvanced}} |
| {{else}} |
| {{component.displayName}} |
| {{/if}} |
| / |
| <a href="#" {{action routeToService component.service target="controller" }}>{{component.service.displayName}}</a> |
| |
| {{#if component.staleConfigs}} |
| <i class="text-warning icon-refresh"></i> |
| {{/if}} |
| </div> |
| <div class="span5 pull-right"> |
| {{#if App.isAdmin}} |
| <div class="btn-group pull-right"> |
| <a {{ bindAttr class="view.disabled :btn :dropdown-toggle"}} data-toggle="dropdown"> |
| {{t hosts.host.summary.action}} |
| <span class="caret pull-right"></span> |
| </a> |
| <ul class="dropdown-menu"> |
| <li> |
| <div class="component-text-status"> |
| {{view.componentTextStatus}} |
| </div> |
| </li> |
| {{#if view.isDataNode}} |
| {{#if view.isDataNodeDecommissionAvailable}} |
| <li {{bindAttr class="view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}> |
| {{t common.decommission}} |
| </a> |
| </li> |
| {{/if}} |
| {{#if view.isDataNodeRecommissionAvailable}} |
| <li {{bindAttr class="view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}> |
| {{t common.recommission}} |
| </a> |
| </li> |
| {{/if}} |
| {{/if}} |
| {{#if view.isHBaseMaster}} |
| <li {{bindAttr class="view.isDeleteHBaseMasterDisabled:disabled"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "deleteComponent" view.content target="controller"}}> |
| {{t common.delete}} |
| </a> |
| </li> |
| {{/if}} |
| {{#unless view.isInstalling}} |
| {{#if view.isStart}} |
| <li {{bindAttr class=" view.isDecommissioning:hidden view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "stopComponent" view.content target="controller"}}> |
| {{t common.stop}} |
| </a> |
| </li> |
| {{/if}} |
| {{#unless view.isStart}} |
| <li {{bindAttr class="view.isUpgradeFailed:hidden view.isInstallFailed:hidden view.isDecommissioning:hidden view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "startComponent" view.content target="controller"}}> |
| {{t common.start}} |
| </a> |
| </li> |
| {{/unless}} |
| {{#if view.isUpgradeFailed}} |
| <li {{bindAttr class="view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "upgradeComponent" view.content target="controller"}}> |
| {{t common.reUpgrade}} |
| </a> |
| </li> |
| {{/if}} |
| {{#if view.isInstallFailed}} |
| <li {{bindAttr class="view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "installComponent" view.content target="controller"}}> |
| {{t common.reinstall}} |
| </a> |
| </li> |
| {{/if}} |
| {{#if view.isReassignable}} |
| <li {{bindAttr class="view.noActionAvailable"}}> |
| <a href="javascript:void(null)" data-toggle="modal" {{action "moveComponent" view.content target="controller"}}> |
| {{t common.move}} |
| </a> |
| </li> |
| {{/if}} |
| {{/unless}} |
| </ul> |
| </div> |
| {{/if}} |
| </div> |
| {{/view}} |
| </div> |
| {{/each}} |
| {{/if}} |
| {{!clients and add component button}} |
| <div class="clients row-fluid"> |
| <div class="span7 row"> |
| {{#if view.clients.length}} |
| <div class="span3 align-right">{{t common.clients}} /</div> |
| <div class="span7"> |
| {{#each component in view.clients}} |
| {{#if component.isLast}} |
| {{component.displayName}} |
| {{else}} |
| {{component.displayName}}, |
| {{/if}} |
| {{/each}} |
| </div> |
| {{/if}} |
| </div> |
| <div class="span5 row"> |
| {{#if App.isAdmin}} |
| <div class="btn-group pull-right"> |
| <button id="add_component" data-toggle="dropdown" {{bindAttr class="view.addComponentDisabled:disabled :btn :btn-info :dropdown-toggle"}}> |
| {{t hosts.host.summary.addComponent}} |
| <span class="caret pull-right"></span> |
| </button> |
| <ul class="dropdown-menu"> |
| {{#each component in view.addableComponents}} |
| <li> |
| <a href="javascript:void(null)" data-toggle="modal" {{action addComponent component target="controller"}}> |
| {{component.displayName}} |
| </a> |
| </li> |
| {{/each}} |
| </ul> |
| </div> |
| {{/if}} |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="host-configuration"> |
| <div class="box"> |
| <div class="box-header"> |
| <h4>{{t hosts.host.summary.header}}</h4> |
| </div> |
| <div class="host-summary-content"> |
| <dl class="dl-horizontal"> |
| <dt>{{t hosts.host.summary.hostname}}:</dt><dd> {{view.content.publicHostName}}</dd> |
| <dt>{{t common.ipAddress}}:</dt><dd> {{view.content.ip}}</dd> |
| <dt>{{t common.os}}:</dt><dd> {{view.content.osType}} ({{view.content.osArch}})</dd> |
| <dt>{{t common.cpu}}:</dt><dd> {{view.content.cpu}}</dd> |
| <dt>{{t common.disk}}:</dt><dd> {{view.content.diskInfoBar}}</dd> |
| <dt>{{t common.memory}}:</dt><dd> {{view.content.memoryFormatted}}</dd> |
| <dt>{{t common.loadAvg}}:</dt><dd> {{view.content.loadAvg}}</dd> |
| <dt>{{t hosts.host.summary.agentHeartbeat}}:</dt><dd>{{view.timeSinceHeartBeat}}</dd> |
| </dl> |
| </div> |
| </div> |
| </div> |
| </div> |
| {{!metrics}} |
| <div class="span6"> |
| <div class="box"> |
| <div class="box-header"> |
| <h4>{{t hosts.host.summary.hostMetrics}}</h4> |
| <div class="btn-group"> |
| <a class="btn" rel="tooltip" title="Go to Ganglia" {{action "showGangliaCharts" target="view"}}><i class="icon-link"></i></a> |
| </div> |
| </div> |
| <div> |
| {{view App.MainHostMetricsView contentBinding="view.content"}} |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |