##// END OF EJS Templates
Harden whitespace in log messages to show newlines, tabs, and spaces....
Harden whitespace in log messages to show newlines, tabs, and spaces. Due to the additional and inconsistent height of log messages, the other columns are vertically aligned to the top rather than the middle.

File last commit:

r25:37cdc54a
r45:5967ee78
Show More
view.html
482 lines | 22.1 KiB | text/html | HtmlLexer
<script type="text/ng-template" id="slow_call.html">
<table class="report-table">
<tr>
<td class="table-label">Type</td>
<td class="data"><strong>{{call.type}}
({{call.subtype}})
</strong></td>
</tr>
<tr>
<td class="table-label">Duration</td>
<td class="data"><strong class="textColor_1">{{call.duration}}</strong></td>
</tr>
<tr>
<td class="table-label">Start Time</td>
<td class="data">{{call.timestamp}}</td>
</tr>
<tr>
<td class="table-label">Statement</td>
<td class="data">
<pre class="word-wrap">{{call.statement}}</pre>
</td>
</tr>
<tr ng-if="call.location">
<td class="table-label">Location</td>
<td class="data">{{call.location}}</td>
</tr>
<tr>
<td class="table-label">Parameters</td>
<td class="">
<div class="var-listing" human-format vars="call.parameters"></div>
</td>
</tr>
</table>
<div ng-if="call.children.length > 0" class="subcalls p-l-8">
<p><strong>
<small>Sub-calls</small>
</strong></p>
<div class="panel panel-default">
<div ng-repeat="call in call.children" ng-include="'slow_call.html'" class="panel-body"/>
</div>
</div>
</div>
</script>
<script type="text/ng-template" id="AssignReportCtrl.html">
<div class="modal-header">
<h3>Assign users to report</h3>
</div>
<div class="modal-body">
<ng-include src="'templates/loader.html'" ng-if="ctrl.loading"></ng-include>
<div class="row" ng-if="!ctrl.loading">
<div class="col-sm-6">
<strong>Unassigned</strong>
<div class="user-assignment" ng-repeat="user in ctrl.unAssignedUsers"
ng-click="ctrl.reassignUser(user)">
<img ng-src="{{user.gravatar_url}}"/>
<strong>{{user.user_name}}</strong><br/>
{{user.name}}
<div class="clear"></div>
</div>
</div>
<div class="col-sm-6">
<strong>Assigned</strong>
<div class="user-assignment" ng-repeat="user in ctrl.assignedUsers" ng-click="ctrl.reassignUser(user)">
<img ng-src="{{user.gravatar_url}}"/>
{{user.user_name}}<br/>
{{user.name}}
<div class="clear"></div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="ctrl.ok()">OK</button>
<button class="btn btn-warning" ng-click="ctrl.cancel()">Cancel</button>
</div>
</script>
<ng-include src="'templates/loader.html'" ng-if="report.is_loading.report"></ng-include>
<div ng-if="!report.is_loading.report && report.report === null">
<strong>OOPS something went wrong :(</strong>
</div>
<div ng-if="report.report !== null && !report.is_loading.report">
<div ng-if="AeUser.id" class="row">
<div class="col-lg-12">
<a onclick="window.history.back()" class="btn btn-default" ng-if="report.window.history.length > 2"><span class="fa fa-arrow-circle-o-left"></span>
Go back</a>
<a class="btn btn-default" ng-click="report.assignUsersModal()" ng-if="report.reportType == 'report'"><span
class="fa fa-flag"></span> Assign report
to user</a>
<a class="btn {{ report.report.group.fixed ? 'btn-success' : 'btn-default'}}" ng-click="report.markFixed()"
ng-if="report.reportType == 'report'">
<span class="fa fa-check"></span> Mark fixed</a>
<span class="dropdown" ng-if="report.report.application.integrations.length" data-uib-dropdown on-toggle="toggled(open)">
<a class="dropdown-toggle btn btn-default" data-uib-dropdown-toggle>
<span class="fa fa-send"></span> Integrations
</a>
<ul class="dropdown-menu">
<li ng-repeat="choice in report.report.application.integrations">
<a ng-click="report.runIntegration(choice.name)">{{choice.action}}</a>
</li>
</ul>
</span>
<a class="btn btn-default" ng-click="report.markPublic()">Make {{report.group.public ? 'private' : 'public'}}</a>
<span class="dropdown" data-uib-dropdown on-toggle="toggled(open)">
<a class="btn btn-danger" data-uib-dropdown-toggle><span class="fa fa-trash-o"></span> Delete</a>
<ul class="dropdown-menu">
<li><a>No</a></li>
<li><a ng-click="report.delete()">Yes</a></li>
</ul>
</span>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="panel panel-default m-t-1">
<div class="panel-body">
<h3 class="m-t-0">Report Information</h3>
<table class="report-table with-ellipsis">
<tr>
<td class="table-label">Occurences</td>
<td class="data">{{report.report.group.occurences}}</td>
</tr>
<tr ng-if="report.report.http_status">
<td class="table-label">HTTP status</td>
<td class="data">{{report.report.http_status}}</td>
</tr>
<tr ng-if="report.report.group.priority">
<td class="table-label">Priority</td>
<td class="data">{{report.report.group.priority}}</td>
</tr>
<tr ng-if="report.report.group.public">
<td class="table-label">Public URL</td>
<td class="data">
<form>
<textarea class="TextAreaField form-control" id="public-url" onclick="this.select()">{{$state.href($state.current.name, $state.params, {absolute: true})}}</textarea>
</form>
</td>
</tr>
<tr data-uib-tooltip="{{report.report.url}}">
<td class="table-label">URL</td>
<td class="data ellipsis"><a href="{{report.report.url}}">{{report.report.url}}</a></td>
</tr>
<tr ng-if="report.report.ip">
<td class="table-label">Remote IP</td>
<td class="data">{{report.report.ip}}</td>
</tr>
<tr ng-if="report.report.user_agent" data-uib-tooltip="{{report.report.user_agent}}">
<td class="table-label">User Agent</td>
<td class="data ellipsis">{{report.report.user_agent}}</td>
</tr>
<tr ng-if="report.report.message">
<td class="table-label">Message</td>
<td class="data">{{report.report.message}}</td>
</tr>
<tr ng-if="report.report.duration > 0">
<td class="table-label">Duration</td>
<td class="data">
<span>{{report.report.duration}}s</span>
</td>
</tr>
<tr>
<td class="table-label">First occured</td>
<td class="data">
<span uib-tooltip="{{report.report.group.first_timestamp}}"><iso-to-relative-time
time="{{report.report.group.first_timestamp}}"/></span>
</td>
</tr>
<tr>
<td class="table-label">Last occured</td>
<td class="data">
<span uib-tooltip="{{report.report.group.last_timestamp}}"><iso-to-relative-time
time="{{report.report.group.last_timestamp}}"/></span>
</td>
</tr>
</table>
<div ng-if="report.requestStats">
<h3>Performance stats</h3>
<div class="perf_stats">
<span class="stat" ng-repeat="stat in report.requestStats"
ng-if="stat.calls > 0 || stat.value > 0"><strong>
<span class="{{stat.name}} bar" style="width:10px"></span> {{stat.calls}}
<span ng-if="stat.name!='main'"><small>{{stat.name}} calls</small></span>
<span ng-if="stat.name=='main'">
<span class="fa fa-question-circle"
data-uib-tooltip="Execution time that didnt get assigned to other layers"></span> Other</span>
</strong>
</span>
<div style="width: 100%; overflow:hidden">
<div class="{{stat.name}} bar" style="width:{{stat.percent}}%; height: 25px"
ng-repeat="stat in report.requestStats"
data-uib-tooltip="{{stat.value}}s - Cumulative time spent in this request on all {{ stat.name }} calls"></div>
<div class="row">
<div class="col-xs-6 text-left">
<small>0s</small>
</div>
<div class="col-xs-6 text-right">
<small>{{report.report.duration.toFixed(3)}}s</small>
</div>
</div>
</div>
</div>
</div>
<h3>Tags</h3>
<table class="report-table with-tags">
<tr ng-repeat="(tag, value) in report.report.tags">
<td class="table-label" ng-switch="tag"><!--
--><span ng-switch-when="user_name">Username/UID</span><!--
--><span ng-switch-when="view_name">View Name</span><!--
--><span ng-switch-when="server_name">Server Name</span><!--
--><span ng-switch-default>{{ tag }}</span>
</td>
<td class="data"><a ng-click="report.searchTag(tag, value)">{{ value }}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-lg-8">
<div class="frames">
<p class="text-center">Report history</p>
<div class="panel" ng-if="!report.is_loading.history">
<div class="panel-body">
<c3chart data-domid="report_history_chart" data-data="report.reportHistoryData" data-config="report.reportHistoryConfig">
</c3chart>
</div>
</div>
<div class="row m-b-1">
<div class="col-sm-2 text-left">
<a class="switch_detail btn btn-sm btn-default {{report.report.group.previous_report ? '' : 'disabled'}}"
ng-click="report.previousDetail()">
<span class="fa fa-arrow-left"></span>
Prev. detail</a>
</div>
<div class="col-sm-8 text-center">
<small>
<span uib-tooltip="{{report.report.start_time|isoToRelativeTime}}" class="m-r-1">
{{report.report.start_time.replace('T', ' ')}} UTC</span>
<span class="text-muted">ID: {{report.report.request_id}}</span>
</small>
</div>
<div class="col-sm-2 text-right">
<a class="switch_detail btn btn-sm btn-default {{report.report.group.next_report ? '' : 'disabled'}}"
ng-click="report.nextDetail()">
Next detail <span class="fa fa-arrow-right"></span></a>
</div>
</div>
<h3 class="word-wrap">{{report.report.error}}</h3>
<div ng-if="report.report.traceback">
<h3><strong>Traceback</strong></h3>
<div class="btn-group">
<a ng-if="report.traceback.length-10 > 0 " ng-click="report.showLong = !report.showLong"
class="btn btn-default {{report.showLong ? 'active' : ''}}">
<span class="fa fa-align-left"></span>
<small>Show {{report.traceback.length-10}} remaining frames</small>
</a>
<a class="btn btn-default {{report.showRaw ? 'active' : ''}}" ng-click="report.showRaw = !report.showRaw">
<span class="fa fa-list"></span>
<small>Raw version</small>
</a>
</div>
<div ng-if="report.showRaw" class="m-t-1">
<pre>{{report.rawTraceback}}</pre>
</div>
<div ng-if="!report.showRaw" class="m-t-1">
<div ng-repeat="frame in report.traceback" class="frame {{$odd ? 'odd' : 'even'}}"
ng-if="$index >= report.traceback.length-10 || report.traceback.length <= 10 || report.showLong">
<div class="frameline" ng-if="frame.line">
<a class="inspect_vars" ng-click="frame.showVars = !frame.showVars" ng-if="frame.vars">
<span class="fa fa-search dim btn btn-default"
uib-tooltip="Show local vars"> </span>
</a>
<span class="no-vars" ng-if="frame.vars.length == 0"></span>
<span ng-if="frame.file">
<span class="mono">File</span> <span class="file mono">{{frame.file || 'Unknown file'}}</span>,
</span>
<span ng-if="frame.module && !frame.file">
<span class="mono">Module</span> <span class="file mono">{{frame.module || 'Unknown module'}}</span>,
</span>
<span class="mono">line</span> <span class="line mono">{{frame.line || 'Unknown line'}}</span>
<span ng-if="frame.fn"><span class="mono">in</span> <strong
class="fn mono">{{frame.fn || 'Unknown function'}}</strong></span>
</div>
<div class="cline mono" ng-if="frame.cline">{{frame.cline || 'Unknown context'}}</div>
<div class="vars" ng-if="frame.showVars">
<table class="var-listing small">
<tr ng-repeat="fvar in frame.vars track by $index" class="frame {{$odd ? 'odd' : 'even'}}">
<td class="var-label">{{ fvar[0] }}</td>
<td>
<span human-format vars="fvar[1]"></span>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<uib-tabset>
<uib-tab select="report.selectedTab('slow_calls')" active="report.tabs.slow_calls">
<uib-tab-heading>
Slow Calls
</uib-tab-heading>
<h3><strong>Slow Calls</strong></h3>
<div ng-if="report.report.slow_calls.length > 0">
<div ng-repeat="call in report.report.slow_calls" ng-include="'slow_call.html'"></div>
</div>
<div ng-if="report.report.slow_calls.length == 0">
No slow calls reported
</div>
</uib-tab>
<uib-tab select="report.selectedTab('request_details')" active="report.tabs.request_details">
<uib-tab-heading>
Request details
</uib-tab-heading>
<h3><strong>Extra</strong></h3>
<div class="var-listing" human-format vars="report.report.extra"></div>
<h3><strong>Request details</strong></h3>
<div class="var-listing" human-format vars="report.report.request"></div>
</uib-tab>
<uib-tab select="report.selectedTab('logs')" active="report.tabs.logs">
<uib-tab-heading>
Logs
</uib-tab-heading>
<div ng-if="report.is_loading.logs!=false" class="text-center">
<span class="fa fa-cog fa-spin fa-3x loader"></span>
</div>
<p ng-if="report.reportLogs.length == 0"> No logs found</p>
<table class="table table-striped log-list" ng-if="report.reportLogs.length > 0">
<caption>Logs</caption>
<thead>
<tr>
<th class="message">Message</th>
<th class="when">When</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="log in report.reportLogs track by log.log_id">
<td>
<a class="tag {{log.log_level|lowercase}}">
<span class="name">level:</span> {{log.log_level}}</a>
<a class="tag">
<span class="name">namespace:</span> {{log.namespace}}</a>
<a ng-repeat="(tag, value) in log.tags" class="tag">
<span class="name">{{tag}}:</span> {{value}}</a>
<div class="log">
{{log.message}}
</div>
</td>
<td class="when">
<a data-uib-tooltip="{{log.timestamp}}">
<iso-to-relative-time time="{{log.timestamp}}"/>
</a>
</td>
</tr>
</tbody>
</table>
</uib-tab>
<uib-tab select="report.selectedTab('comments')" active="report.tabs.comments">
<uib-tab-heading>
Comments
<span class="label label-info">{{report.report.comments.length}}</span>
</uib-tab-heading>
<h3><strong>Comments</strong></h3>
<p ng-if="report.report.comments.length == 0">No comments yet - be first to add one!</p>
<div class="comment" ng-repeat="comment in report.report.comments">
<p name="comment-{{comment.comment_id}}"><span class="fa fa-comment"></span>
<strong>{{comment.user_name}}</strong>
<iso-to-relative-time time="{{comment.created_timestamp}}"/>
</p>
<p class="well">{{comment.body}}</p>
</div>
<form name="commentForm" ng-submit="report.addComment()">
<div class="form-group">
<textarea type="text" class="form-control" id="report.commentForm" ng-model="report.comment" required
mentio mentio-search="report.searchMentionedPeople(term)" mentio-items="report.mentionedPeople| filter:label:typedTerm" class="form-control"></textarea>
</div>
<div class="form-group">
<button class="btn btn-info" ng-disabled="report.commentForm.$invalid">Comment</button>
</div>
</form>
<div ng-repeat="comment in report.report.comments" class="{{$odd ? 'odd' : 'even'}}" class="repeat-animate">
</div>
</uib-tab>
<uib-tab select="report.selectedTab('affected_users')" active="report.tabs.affected_users">
<uib-tab-heading>
Affected users
<span class="label label-warning">{{report.report.affected_users_count}}</span>
</uib-tab-heading>
<h3><strong>50 most affected users ID's by this issue:</strong></h3>
<ul class="affected-user-list">
<li ng-repeat="user in report.report.top_affected_users">
<strong>{{user.username}}</strong> <span class="badge" uib-tooltip="occurences">{{user.count}}</span>
</li>
</ul>
</uib-tab>
</uib-tabset>
</div>
</div>
</div>
</div>