Format provisioning check values with units (Refs #90)
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import RelativeTime from '$ui/components/RelativeTime.svelte';
|
import RelativeTime from '$ui/components/RelativeTime.svelte';
|
||||||
import type { ProvisioningDetail } from '$lib/provisioning-detail.js';
|
import type { ProvisioningDetail } from '$lib/provisioning-detail.js';
|
||||||
import { provisioningGroups, progressIcons, progressStateLabels } from '$ui/provisioning-presentation.js';
|
import { provisioningCheckValue, provisioningGroups, progressIcons, progressStateLabels } from '$ui/provisioning-presentation.js';
|
||||||
import Badge from './primitives/Badge.svelte';
|
import Badge from './primitives/Badge.svelte';
|
||||||
|
|
||||||
let { detail }: { detail: ProvisioningDetail } = $props();
|
let { detail }: { detail: ProvisioningDetail } = $props();
|
||||||
@@ -66,8 +66,8 @@
|
|||||||
<article class="check">
|
<article class="check">
|
||||||
<div class="check-heading"><strong>{check.label}</strong><Badge variant={check.result === 'pass' ? 'online' : check.result === 'fail' ? 'danger' : check.result === 'waiting' ? 'warning' : 'neutral'}>{evidenceLabels[check.result]}</Badge></div>
|
<div class="check-heading"><strong>{check.label}</strong><Badge variant={check.result === 'pass' ? 'online' : check.result === 'fail' ? 'danger' : check.result === 'waiting' ? 'warning' : 'neutral'}>{evidenceLabels[check.result]}</Badge></div>
|
||||||
{#if check.expected !== null || check.actual !== null}<dl>
|
{#if check.expected !== null || check.actual !== null}<dl>
|
||||||
{#if check.expected !== null}<div><dt>Expected</dt><dd>{check.expected}</dd></div>{/if}
|
{#if check.expected !== null}<div><dt>Expected</dt><dd>{provisioningCheckValue(check.key, check.expected)}</dd></div>{/if}
|
||||||
<div><dt>Observed</dt><dd>{check.actual ?? 'Unknown'}</dd></div>
|
<div><dt>Observed</dt><dd>{provisioningCheckValue(check.key, check.actual)}</dd></div>
|
||||||
</dl>{/if}
|
</dl>{/if}
|
||||||
{#if check.message}<p>{check.message}</p>{/if}
|
{#if check.message}<p>{check.message}</p>{/if}
|
||||||
<div class="evidence-meta"><span>{check.source ? sources[check.source] : 'Source not recorded'}</span><span>Checked <span class="time"><RelativeTime value={check.checkedAt} /></span></span>{#if check.receivedAt}<span>Evidence received <span class="time"><RelativeTime value={check.receivedAt} /></span></span>{/if}</div>
|
<div class="evidence-meta"><span>{check.source ? sources[check.source] : 'Source not recorded'}</span><span>Checked <span class="time"><RelativeTime value={check.checkedAt} /></span></span>{#if check.receivedAt}<span>Evidence received <span class="time"><RelativeTime value={check.receivedAt} /></span></span>{/if}</div>
|
||||||
|
|||||||
@@ -1,6 +1,14 @@
|
|||||||
import { provisioningPhases, type ProvisioningDeployment, type ProvisioningDetail, type ProvisioningEvent, type ProvisioningEventPage, type ProvisioningPhase } from '$lib/provisioning-detail.js';
|
import { provisioningPhases, type ProvisioningCheck, type ProvisioningDeployment, type ProvisioningDetail, type ProvisioningEvent, type ProvisioningEventPage, type ProvisioningPhase } from '$lib/provisioning-detail.js';
|
||||||
import { actionCompleted, actionLabels, provisioningActions, type ProvisioningAction } from '$lib/provisioning.js';
|
import { actionCompleted, actionLabels, provisioningActions, type ProvisioningAction } from '$lib/provisioning.js';
|
||||||
import { systemUsername } from '$lib/auth.js';
|
import { systemUsername } from '$lib/auth.js';
|
||||||
|
import { countLabel } from './plural.js';
|
||||||
|
|
||||||
|
export function provisioningCheckValue(key: ProvisioningCheck['key'], value: ProvisioningCheck['actual']): string {
|
||||||
|
if (typeof value !== 'number') return value ?? 'Unknown';
|
||||||
|
if (key === 'game') return countLabel(value, 'player');
|
||||||
|
if (key === 'plutonium-release' || key === 'plutonium-version') return `r${value}`;
|
||||||
|
return String(value);
|
||||||
|
}
|
||||||
|
|
||||||
export function provisioningRequester(operation: Pick<ProvisioningDeployment, 'requested_by' | 'triggered_by'>): string {
|
export function provisioningRequester(operation: Pick<ProvisioningDeployment, 'requested_by' | 'triggered_by'>): string {
|
||||||
return operation.requested_by ?? (operation.triggered_by === 'ui' ? 'Not recorded' : systemUsername);
|
return operation.requested_by ?? (operation.triggered_by === 'ui' ? 'Not recorded' : systemUsername);
|
||||||
|
|||||||
Reference in New Issue
Block a user