app/views/showUsage.scala.html (95 lines of code) (raw):
@import data.Roles
@import prism.BakeUsage
@import prism.Prism.AWSAccount
@(
recipe: Recipe,
bakeUsage: Seq[BakeUsage],
accounts: Seq[AWSAccount],
prismBaseUrl: String
)(implicit flash: Flash)
@simpleLayout("AMIgo"){
<h1>Usages of @recipe.id.value</h1>
@if(bakeUsage.isEmpty) {
<h4>No usages of this recipe found</h4>
} else {
<table class="table table-striped table-hover">
<thead>
<th>Build</th>
<th>Encrypted copy?</th>
<th>Usages</th>
<th>AMI</th>
</thead>
<tbody>
@bakeUsage.sortBy(bu => (bu.bake.startedAt.getMillis, bu.viaCopy.map(_.imageId.value))).map { usage =>
<tr>
<td class="has-block-link">
<a class="block-link" href="@routes.BakeController.showBake(usage.bake.recipe.id, usage.bake.buildNumber)">
<ul class="list-unstyled">
<li>@usage.bake.buildNumber</li>
<li>@usage.bake.startedAt.toString("yyyy-MM-dd HH:mm:ss")</li>
</ul>
</a>
</td>
<td>
@usage.viaCopy.map { viaCopy =>
<ul class="list-unstyled">
<li>Acc: @defining(accounts.find(_.accountNumber == viaCopy.ownerId)){ maybeOwnerAcc =>
@maybeOwnerAcc.map{ ownerAcc => @ownerAcc.accountName (@ownerAcc.accountNumber) }.getOrElse(viaCopy.ownerId)
}</li>
@viaCopy.encrypted.map{e =>
<li>Encrypted tag: @e</li>
}
</ul>
}
</td>
<td>
<ul>
@usage.instances.map { instance =>
<li class="list-unstyled">
<img src="@routes.Assets.versioned("images/computer.svg")" width="16" alt="Instance" />
<a href="@prismBaseUrl/instances?instanceName=@instance.name">@instance.name</a>
(in @instance.awsAccount.accountName)
</li>
}
@usage.launchConfigurations.map { launchConfiguration =>
<li class="list-unstyled">
<img src="@routes.Assets.versioned("images/spanner.svg")" width="14" alt="Launch Configurations" />
<a href="@prismBaseUrl/launch-configurations?name=@launchConfiguration.name">@launchConfiguration.name</a>
(in @launchConfiguration.awsAccount.accountName)
</li>
}
@usage.launchTemplates.map { launchTemplate =>
<li class="list-unstyled">
<img src="@routes.Assets.versioned("images/spanner.svg")" width="14" alt="Launch Configurations" />
<a href="@prismBaseUrl/asg-launch-templates?name=@launchTemplate.name">@launchTemplate.name</a>
(in @launchTemplate.awsAccount.accountName)
</li>
}
</ul>
</td>
<td class="absolute-container">
@if(usage.bake.amiId.isDefined) {
<a href="@routes.BakeController.showBake(usage.bake.recipe.id, usage.bake.buildNumber)"><code>@usage.bake.amiId</code></a>
<button class="btn btn-primary btn-xs copy-button" title="Copy to clipboard" data-clipboard-text="@usage.bake.amiId">
<img src="@routes.Assets.versioned("images/clippy.svg")" width="13" alt="Copy to clipboard">
</button>
}
</td>
</tr>
}
</tbody>
</table>
}
<script src="@routes.Assets.versioned("javascripts/clipboard.min.js")"></script>
<script>
var clipboard = new Clipboard('.copy-button');
clipboard.on('success', function(e) {
console.log(e);
e.trigger.classList.add('btn--success');
});
clipboard.on('error', function(e) {
console.log(e);
//TODO: Add tooltip
});
</script>
<!-- TODO listen to bake events and update the bakes list accordingly -->
}