{{!--
  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.
--}}

{{!
 * 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.
}}

{{breadcrumb-bar breadcrumbs=breadcrumbs}}

<div class="col-md-12 container-fluid">
  <div class="row">

    <div class="col-md-2 container-fluid">
      <div class="panel panel-default">
        <div class="panel-heading">
          <h4>Tools</h4>
        </div>
        <div class="panel-body">
          <ul class="nav nav-pills nav-stacked" id="stacked-menu">
            <ul class="nav nav-pills nav-stacked collapse in">
              {{#link-to 'yarn-tools.yarn-conf' tagName="li"}}
                {{#link-to 'yarn-tools.yarn-conf'}}YARN Configuration
                {{/link-to}}
              {{/link-to}}
              {{#link-to 'yarn-tools.yarn-rm-log' tagName="li"}}
                {{#link-to 'yarn-tools.yarn-rm-log'}}YARN Daemon Logs
                {{/link-to}}
              {{/link-to}}
            </ul>
          </ul>
        </div>
      </div>
    </div>

    <div class="col-md-10 container-fluid">
      {{#if model.clusterMetrics}}
        <div class="row">
          <div class="col-lg-4 container-fluid">
            <div class="panel panel-default">
              <div class="panel-heading">
                Finished Apps From All Users
              </div>
              <div class="container-fluid" id="finishedapps-donut-chart">
                {{donut-chart data=model.clusterMetrics.firstObject.getFinishedAppsDataForDonutChart
                showLabels=true
                parentId="finishedapps-donut-chart"
                ratio=0.6
                maxHeight=350
                colorTargets="good warn error"
                }}
              </div>
            </div>
          </div>

          <div class="col-lg-4 container-fluid">
            <div class="panel panel-default">
              <div class="panel-heading">
                Running Apps From All Users
              </div>
              <div class="container-fluid" id="runningapps-donut-chart">
                {{donut-chart data=model.clusterMetrics.firstObject.getRunningAppsDataForDonutChart
                showLabels=true
                parentId="runningapps-donut-chart"
                ratio=0.6
                maxHeight=350
                colorTargets="warn good"
                }}
              </div>
            </div>
          </div>
        </div>
      {{/if}}

      <div class="row">
        {{outlet}}
      </div>
    </div>
  </div>
</div>
