blob: acb5734eed15996660a2d67cb594844a5dae29f3 [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">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
Logs {{collapsible-panel targetId="logFilesCollapsablePanel"}}
</div>
<div class="panel-body" id="logFilesCollapsablePanel">
<label>Log aggregation status:</label>&nbsp;
<span class={{model.app.logAggregationStatusStyle}}>
{{model.app.logAggregationStatus}}
</span>
{{#if _isLoadingTopPanel}}
<div class="text-center" style="z-index: 100; position: absolute; left: 46%; top: 45px;">
<img src="assets/images/spinner.gif" alt="Loading...">
</div>
{{/if}}
{{#if areJHSandATSUnhealthy}}
<div class="row">
<div class="col-md-8 col-md-offset-2 alert alert-warning text-center">
<span class="glyphicon glyphicon-warning-sign" style="padding-right: 10px"></span>
<span>Logs are unavailable because Application Timeline Service seems unhealthy and could not connect to the JobHistory server.</span>
</div>
</div>
{{else}}
{{#if attemptList}}
<div class="row">
<div class="col-md-6">
<label>Choose attempt to fetch containers</label>
<div>
<select class="js-fetch-attempt-containers" onchange={{action "showContainersForAttemptId" value="target.value"}} style="max-width:350px;">
<option value="" selected={{eq selectedAttemptId ''}}>None</option>
{{#each attemptList as |attempt|}}
<option value="{{attempt.id}}" selected={{eq selectedAttemptId attempt.id}}>{{attempt.id}}</option>
{{/each}}
</select>
</div>
</div>
{{#if attemptContainerList}}
<div class="col-md-6">
<label>Choose container to fetch logs</label>
<div>
<select class="js-fetch-logs-containers" onchange={{action "showLogFilesForContainerId" value="target.value"}} style="max-width:350px">
<option value="" selected={{eq selectedContainerId ''}}>None</option>
{{#each attemptContainerList as |container|}}
<option value="{{container.id}}" selected={{eq selectedContainerId container.id}}>{{container.id}}</option>
{{/each}}
</select>
</div>
</div>
{{else}}
{{#if (and selectedAttemptId (not _isLoadingTopPanel))}}
<div class="col-md-4">
<h4 class="text-center" style="margin-top:25px;">No container data available!</h4>
</div>
{{/if}}
{{/if}}
</div>
{{else}}
<div class="col-md-12">
<h4 class="text-center">No data available!</h4>
</div>
{{/if}}
{{/if}}
</div>
</div>
</div>
</div>
{{#if selectedContainerId}}
<div class="row">
<div class="col-md-12">
<div class="panel panel-default" style="min-height:150px;">
<div class="panel-heading">
Log: {{selectedLogFileName}} [ {{selectedContainerId}} &amp; {{selectedAttemptId}} ]
{{collapsible-panel targetId="logContentCollapsablePanel"}}
</div>
<div class="panel-body" id="logContentCollapsablePanel">
{{#if _isLoadingBottomPanel}}
<div class="text-center" style="z-index: 100; position: absolute; left: 46%;">
<img src="assets/images/spinner.gif" alt="Loading...">
</div>
{{/if}}
{{#if containerLogFiles}}
<div class="row">
<div class="col-md-6" style="margin-bottom:20px;">
<label>Choose log for {{selectedContainerId}}</label>
<div>
<select class="js-fetch-log-for-container" onchange={{action "showContentForLogFile" value="target.value"}} style="max-width:350px">
<option value="" selected={{eq selectedLogFileName ''}}>None</option>
{{#each containerLogFiles as |file|}}
<option value="{{file.fileName}}" selected={{eq selectedLogFileName file.fileName}}>{{file.fileName}} - {{file.fileSize}} bytes</option>
{{/each}}
</select>
</div>
</div>
{{#if selectedLogFileName}}
<div class="col-md-6">
<label>Find in log</label>
<div class="input-group" style="max-width:350px;">
{{input
class="form-control"
value=""
enter="searchTextInLogContent"
id="logSeachInput98765"
}}
<span class="input-group-btn">
<button class="btn btn-default" {{action "findNextTextInLogContent"}}>Find</button>
</span>
</div>
</div>
{{/if}}
</div>
<div>
{{#if selectedLogFileContent}}
{{#unless showFullLog}}
<div>
<strong>Showing last 10 lines of log. Click <a href="#" {{action "showFullLogFileContent"}}>here</a> for full log.</strong>
</div>
{{/unless}}
<pre id="logContentTextArea1234554321" class="log-content-area">{{showLastFewLinesOfLogContent}}</pre>
{{/if}}
</div>
{{else}}
{{#unless _isLoadingBottomPanel}}
<div class="col-md-12" style="margin-top:20px;">
<h4 class="text-center">Logs are not available!</h4>
{{#if isLogAggregationNotSucceeded}}
<h4 class="text-center">Log aggregation may not be complete, check back later!</h4>
{{/if}}
</div>
{{/unless}}
{{/if}}
</div>
</div>
</div>
</div>
{{/if}}