blob: 29fb79401a3618b97cce21041d9b7a3939a3efad [file] [log] [blame]
{{!
* 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">&nbsp</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>&nbsp;
{{/if}}
{{#if component.displayNameAdvanced}}
{{component.displayNameAdvanced}}
{{else}}
{{component.displayName}}
{{/if}}
&nbsp;/&nbsp;
<a href="#" {{action routeToService component.service target="controller" }}>{{component.service.displayName}}</a>
&nbsp;
{{#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}}&nbsp;/</div>
<div class="span7">
{{#each component in view.clients}}
{{component.displayName}}{{#if component.staleConfigs}} <i class="text-warning icon-refresh"></i>{{/if}}{{#unless component.isLast}},{{/unless}}
{{/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>&nbsp;{{view.content.publicHostName}}</dd>
<dt>{{t common.ipAddress}}:</dt><dd>&nbsp;{{view.content.ip}}</dd>
<dt>{{t common.os}}:</dt><dd>&nbsp;{{view.content.osType}}&nbsp;({{view.content.osArch}})</dd>
<dt>{{t common.cpu}}:</dt><dd>&nbsp;{{view.content.cpu}}</dd>
<dt>{{t common.disk}}:</dt><dd>&nbsp;{{view.content.diskInfoBar}}</dd>
<dt>{{t common.memory}}:</dt><dd>&nbsp;{{view.content.memoryFormatted}}</dd>
<dt>{{t common.loadAvg}}:</dt><dd>&nbsp;{{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>