<!--
  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="box box-primary">
	<div class="box-header with-border">
		<span class="fa fa-television"></span>
		<h3 class="box-title">
			Summary
		</h3>
	</div>
	<div class="box-body">
		<table class="table table-striped">
			<tbody ng-if="(regionstatus || []).length !== 0">
			<tr>
				<th>Status</th>
				<td class="text-break">
					<span ng-if="regionstatus[0].status==='live'" class="label label-success">Healthy</span>
					<span ng-if="regionstatus[0].status!=='live'" class="label label-danger">UnHealthy</span>
				</td>
			</tr>
			<tr>
				<th>Rack</th>
				<td class="text-break">{{regionstatus[0].tags.rack}}</td>
			</tr>
			<tr>
				<th>MaxHeap</th>
				<td class="text-break">{{regionstatus[0].maxHeapMB}} MB</td>
			</tr>
			<tr>
				<th>UsedHeap</th>
				<td class="text-break">{{regionstatus[0].usedHeapMB}} MB</td>
			</tr>
			<tr>
				<th>NumRegions</th>
				<td class="text-break">{{regionstatus[0].numRegions}}</td>
			</tr>
			<tr>
				<th>NumRequests</th>
				<td class="text-break">{{regionstatus[0].numRequests}}</td>
			</tr>
			</tbody>
			<tbody ng-if="regionstatus.length === 0">
			<tr>
				<th>Status</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			<tr>
				<th>Rack</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			<tr>
				<th>MaxHeap</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			<tr>
				<th>UsedHeap</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			<tr>
				<th>NumRegions</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			<tr>
				<th>NumRequests</th>
				<td class="text-break"><span class="label label-danger">Unknow</span></td>
			</tr>
			</tbody>
		</table>
	</div>
</div>

<div class="box box-primary">
	<div class="box-header with-border">
		<span class="fa fa-line-chart"></span>
		<h3 class="box-title">
			Metrics
		</h3>
	</div>
	<div class="box-body no-padding">
		<div class="row border-split">
			<div class="col-sm-6 hadoopMetric-col-md-6 col-lg-3" ng-repeat="metric in metricList track by $index">
				<div class="hadoopMetric-chart">
					<h3>{{metric.title}}</h3>
					<div ng-show="metric.series.length" chart class="hadoopMetric-chart-container"
						 series="metric.series"
						 option="metric.option"></div>
					<div ng-show="!metric.series.length" class="hadoopMetric-chart-container">
						<div class="hadoopMetric-no-chart-data">
							<span class="fa fa-question-circle"></span><span> NO DATA</span>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
</div>
