<!--
   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.
-->
<h1>OzoneManager Metrics</h1>

<div ng-repeat="(type,numbers) in $ctrl.metrics.nums">
    <h2>{{type}}</h2>
    <div class="container">
        <div class="col-md-6">
            <h3>Requests ({{numbers.ops || numbers.total}} ops)</h3>
            <nvd3 options="$ctrl.graphOptions"
                  data="numbers.all"></nvd3>
        </div>
        <div class="col-md-6">
            <h3>Failures</h3>
            <nvd3 options="$ctrl.graphOptions"
                  data="numbers.failures"></nvd3>
        </div>
    </div>
</div>

<div ng-show="$ctrl.metrics.others.length > 0">
    <h2>Other JMX properties</h2>

    <table class="table">
        <tr ng-repeat="metric in $ctrl.metrics.others">
            <td>{{metric.key}}</td>
            <td>{{metric.value}}</td>
        </tr>
    </table>
</div>
