@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
261 lines (256 loc) • 10.8 kB
HTML
<div class="canary-details" ng-controller="acaTaskExecutionDetailsCtrl as canaryDetailsCtrl">
<execution-details-section-nav sections="configSections"></execution-details-section-nav>
<div class="step-section-details" ng-if="detailsSection === 'canarySummary'">
<div class="row">
<div class="col-md-2 canary-summary">
<div class="score score-large">
<canary-score
health="canary.health.health"
result="canary.canaryResult.overallResult"
score="canary.canaryResult.overallScore"
></canary-score>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<tbody>
<tr>
<td style="border-top: none !important"><strong>Canary Result</strong></td>
<td style="border-top: none !important"><strong>Duration</strong></td>
<td style="border-top: none !important"><strong>Report</strong></td>
<td style="border-top: none !important"><strong>Last Updated</strong></td>
</tr>
<tr ng-repeat="canaryDeployment in canaryDeployments">
<td>
<canary-score
result="canaryDeployment.canaryAnalysisResult.result"
score="canaryDeployment.canaryAnalysisResult.score"
health="canaryDeployment.health.health"
></canary-score>
</td>
<td>
<span ng-if="canaryDeployment.canaryAnalysisResult.timeDuration.durationString">
{{ canaryDeployment.canaryAnalysisResult.timeDuration.durationString }}
</span>
<span ng-if="!canaryDeployment.canaryAnalysisResult.timeDuration.durationString"> - </span>
</td>
<td>
<a
ng-if="canaryDeployment.canaryAnalysisResult.canaryReportURL"
target="_blank"
ng-href="{{canaryDeployment.canaryAnalysisResult.canaryReportURL}}"
>
Canary Report
</a>
</td>
<td>
<span ng-if="canaryDeployment.canaryAnalysisResult.lastUpdated">
{{ canaryDeployment.canaryAnalysisResult.lastUpdated | timestamp}}
</span>
<span ng-if="!canaryDeployment.canaryAnalysisResult.lastUpdated"> - </span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="well alert alert-info">
<div class="row" ng-if="canary.launchedDate">
<div class="col-md-2">
<strong>Launched</strong>
</div>
<div class="col-md-9">
<span>{{ canary.launchedDate | timestamp }}</span>
</div>
</div>
<div class="row" ng-if="canary.endDate" style="margin-top: 6px">
<div class="col-md-2">
<strong>Ended</strong>
</div>
<div class="col-md-9">
<span>{{ canary.endDate | timestamp }}</span>
</div>
</div>
<div class="row" style="margin-top: 6px">
<div class="col-md-2">
<strong>Status</strong>
</div>
<div class="col-md-9">
<h5><canary-status status="canary.status.status"></canary-status></h5>
</div>
</div>
<div class="row" ng-if="canary.status.reason">
<div class="col-md-2">
<strong>Message</strong>
</div>
<div class="col-md-9">
<span>{{ canary.status.reason }}</span>
</div>
</div>
<div class="row" ng-if="canary.canaryResult.manual" style="margin-top: 6px">
<div class="col-md-2">
<strong>Result</strong>
</div>
<div class="col-md-6">
<div class="alert canary-summary-alert alert-danger">
<strong>Canary result has been manually set</strong>
</div>
</div>
</div>
<div
class="row"
ng-if="!canary.canaryResult.manual
&& canary.status.complete
&& canary.canaryResult.overallResult === 'failure'
&& canary.canaryResult.message"
style="margin-top: 6px"
>
<div class="col-md-2">
<strong>Result</strong>
</div>
<div class="col-md-10">
<div class="alert canary-summary-alert alert-danger">
<strong>{{ canary.canaryResult.message }}</strong>
</div>
</div>
</div>
</div>
<stage-failure-message
stage="stage"
is-failed="stage.exceptions.length > 0"
messages="stage.exceptions"
></stage-failure-message>
</div>
</div>
</div>
<div class="step-section-details" ng-if="detailsSection === 'canaryConfig'">
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-4"><h5>Name</h5></div>
<div class="col-md-6"><h5 ng-bind="canaryConfig.name"></h5></div>
</div>
<div class="horizontal-rule"></div>
</div>
</div>
<div class="row">
<div class="col-md-12 canary-config-section">
<div class="row" ng-if="canary.canaryDeployments.length > 0">
<div class="col-md-4 sm-label-right compact">Account</div>
<div class="col-md-6">
<account-tag account="canary.canaryDeployments[0].accountName" pad="right"></account-tag>
</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Duration</div>
<div class="col-md-6">{{canaryConfig.lifetimeHours}} hours</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Success Criteria</div>
<div class="col-md-6">{{canaryConfig.canarySuccessCriteria.canaryResultScore}}</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Result Strategy</div>
<div class="col-md-6">{{canaryConfig.combinedCanaryResultStrategy | lowercase}}</div>
</div>
<div class="row" ng-if="canary.canaryDeployments.length > 0">
<div class="col-md-4 sm-label-right compact">Scope Type</div>
<div class="col-md-6">{{canary.canaryDeployments[0].type}}</div>
</div>
<div class="row" ng-if="canary.canaryDeployments.length > 0">
<div class="col-md-4 sm-label-right compact">Baseline</div>
<div class="col-md-8" style="word-wrap: break-word">{{canary.canaryDeployments[0].baseline}}</div>
</div>
<div class="row" ng-if="canary.canaryDeployments.length > 0">
<div class="col-md-4 sm-label-right compact">Canary</div>
<div class="col-md-8" style="word-wrap: break-word">{{canary.canaryDeployments[0].canary}}</div>
</div>
</div>
<div class="col-md-12 canary-config-section">
<h5>Analysis Config</h5>
<div class="horizontal-rule"></div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Config Name</div>
<div class="col-md-8" style="word-wrap: break-word">
<a
ng-if="queryListUrl"
href="{{queryListUrl}}/{{canaryConfig.canaryAnalysisConfig.name}}/edit"
target="_blank"
>
{{canaryConfig.canaryAnalysisConfig.name}}
</a>
<span ng-if="!queryListUrl"> {{canaryConfig.canaryAnalysisConfig.name}} </span>
</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Warmup Period</div>
<div class="col-md-6">{{canaryConfig.canaryAnalysisConfig.beginCanaryAnalysisAfterMins}} minutes</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Interval</div>
<div class="col-md-6">{{canaryConfig.canaryAnalysisConfig.canaryAnalysisIntervalMins}} minutes</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Notification Hours</div>
<div class="col-md-6">{{canaryConfig.canaryAnalysisConfig.notificationHours.join(', ')}}</div>
</div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Canary Report Recipients</div>
<div class="col-md-6">{{canary.recipients.join(', ')}}</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 canary-config-section">
<h5>Health Check</h5>
<div class="horizontal-rule"></div>
<div class="row">
<div class="col-md-4 sm-label-right compact">Minimum Canary Score</div>
<div class="col-md-6">{{canaryConfig.canaryHealthCheckHandler.minimumCanaryResultScore}}</div>
</div>
</div>
</div>
</div>
<div class="step-section-details" ng-if="detailsSection === 'canaryAnalysisHistory'">
<div class="row">
<div class="col-md-12">
<p class="text-center" ng-if="viewState.loadingHistory">Loading...</p>
<p class="text-center" ng-if="!viewState.loadingHistory && viewState.loadingHistoryError">
Canary analysis history could not be loaded. <br />
<a href ng-click="loadHistory()">Reload score history</a>
</p>
<table class="table" ng-if="!viewState.loadingHistory && !viewState.loadingHistoryError">
<thead>
<tr>
<th>Score</th>
<th>Score Duration</th>
<th>Generated On</th>
<th>Report</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="scoreReport in analysisHistory | orderBy: '-lastUpdated'">
<td>
<canary-score
result="scoreReport.result"
score="scoreReport.score"
health="scoreReport.health"
></canary-score>
</td>
<td>{{ scoreReport.timeDuration.durationString }}</td>
<td>{{ scoreReport.lastUpdated | timestamp }}</td>
<td><a target="_blank" ng-href="{{scoreReport.canaryReportURL}}">Canary Report</a></td>
</tr>
</tbody>
</table>
<p class="text-center" ng-if="!viewState.loadingHistory && !analysisHistory.length">
No canary analysis history available
</p>
</div>
</div>
</div>
</div>