{{!
 * 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="row container-fluid">

  <div class="col-md-12">
    <div class="row container-fluid">
      {{#if model.attempt}}
        <div class="panel panel-default">
          <div class="panel-body">
            <div class="flex">
              <div>
                <h3 class="top-2">{{model.attempt.id}}</h3>
                <div class="muted-text">{{model.attempt.appMasterContainerId}}</div>
                {{#if model.attempt.attemptState}}
                  {{em-table-simple-status-cell class="top-1" content=model.attempt.attemptState}}
                {{/if}}
                {{#if (or model.attempt.attemptStartedTime model.attempt.validatedFinishedTs)}}
                <div class="flex yarn-tooltip" title="Elapsed Time: {{model.attempt.elapsedTime}}">
                  {{#if model.attempt.attemptStartedTime}}
                  <div class="top-1 tail-2" >
                    <i class="glyphicon glyphicon-time glyphicon-gray" />
                    Started at {{model.attempt.attemptStartedTime}}
                  </div>
                  {{/if}}
                  {{#if model.attempt.validatedFinishedTs}}
                  <div class="top-1">
                    <i class="glyphicon glyphicon-time glyphicon-gray" />
                    Finished at {{model.attempt.validatedFinishedTs}}
                  </div>
                  {{/if}}
                </div>
                {{/if}}
              </div>
              <div class="flex-right">
                <div class="top-2">
                  <span>AM Host: </span>
                  <strong class="yarn-tooltip" title="{{model.attempt.amNodeId}}">{{model.attempt.amNodeId}}</strong>
                </div>
                {{#if model.attempt.nodeHttpAddress}}
                 <div class="top-1">
                  <span>AM Node WebUI: </span>
                  <strong class="yarn-tooltip" title="{{model.attempt.nodeHttpAddress}}">
                    <a href="{{model.attempt.masterNodeURL}}">{{model.attempt.nodeHttpAddress}}</a>
                  </strong>
                </div>
                {{/if}}
                {{#if model.attempt.logsLink}}
                <div class="top-1">
                  <span>Log: </span>
                  <strong>
                    <a href="{{prepend-protocol model.attempt.logsLink}}" target="_blank">{{model.attempt.logsLink}}</a>
                  </strong>
                </div>
                {{/if}}
              </div>
            </div>
            {{#if model.attempt.diagnosticsInfo}}
            <div class="panel panel-default top-3">
              <div class="panel-heading">
                Diagnostic Info for {{model.attempt.id}}
              </div>
              <div class="diagnostic-info">
                <pre>{{model.attempt.diagnosticsInfo}}</pre>
              </div>
            </div>
            {{/if}}
          </div>
        </div>
      {{/if}}
    </div>
    <div class="row">
      {{#if (or model.rmContainers model.tsContainers)}}
        {{timeline-view
          parent-id="containers-timeline-div"
          my-id="timeline-view"
          height="400"
          rmModel=model.rmContainers
          tsModel=model.tsContainers
          label="shortAppAttemptId"
          attemptModel=false
          changeViewType="changeViewType"
          viewType=viewType
          userInfo=model.userInfo
        }}
      {{else}}
        <div class="col-md-12 container-fluid">
          <div class="panel panel-default">
            <div class="panel-heading">
               Containers
            </div>
            <div class="panel-body">
              <h4 class="text-center">No data available!</h4>
            </div>
          </div>
        </div>
      {{/if}}
    </div>
  </div>
</div>
