feat: show elapsed time on running builds

This commit is contained in:
Andras Bacsai 2022-09-01 12:13:54 +02:00
parent d002ec72ad
commit 4e2dad7720
2 changed files with 91 additions and 88 deletions

View File

@ -6,7 +6,6 @@
import { page } from '$app/stores'; import { page } from '$app/stores';
import Loading from '$lib/components/Loading.svelte';
import { get, post } from '$lib/api'; import { get, post } from '$lib/api';
import { t } from '$lib/translations'; import { t } from '$lib/translations';
import LoadingLogs from '$lib/components/LoadingLogs.svelte'; import LoadingLogs from '$lib/components/LoadingLogs.svelte';
@ -14,7 +13,6 @@
import Tooltip from '$lib/components/Tooltip.svelte'; import Tooltip from '$lib/components/Tooltip.svelte';
let logs: any = []; let logs: any = [];
let loading = true;
let currentStatus: any; let currentStatus: any;
let streamInterval: any; let streamInterval: any;
let followingBuild: any; let followingBuild: any;
@ -47,7 +45,6 @@
logs = logs.concat( logs = logs.concat(
responseLogs.map((log: any) => ({ ...log, line: cleanAnsiCodes(log.line) })) responseLogs.map((log: any) => ({ ...log, line: cleanAnsiCodes(log.line) }))
); );
loading = false;
streamInterval = setInterval(async () => { streamInterval = setInterval(async () => {
if (status !== 'running' && status !== 'queued') { if (status !== 'running' && status !== 'queued') {
clearInterval(streamInterval); clearInterval(streamInterval);
@ -64,7 +61,7 @@
logs = logs.concat( logs = logs.concat(
data.logs.map((log: any) => ({ ...log, line: cleanAnsiCodes(log.line) })) data.logs.map((log: any) => ({ ...log, line: cleanAnsiCodes(log.line) }))
); );
dispatch('updateBuildStatus', { status }); dispatch('updateBuildStatus', { status, took: data.took });
} catch (error) { } catch (error) {
return errorNotification(error); return errorNotification(error);
} }
@ -97,9 +94,6 @@
}); });
</script> </script>
{#if loading}
<Loading />
{:else}
<div class="relative "> <div class="relative ">
{#if currentStatus === 'running'} {#if currentStatus === 'running'}
<LoadingLogs /> <LoadingLogs />
@ -179,4 +173,3 @@
{/if} {/if}
{/if} {/if}
</div> </div>
{/if}

View File

@ -28,17 +28,20 @@
import { get } from '$lib/api'; import { get } from '$lib/api';
import { t } from '$lib/translations'; import { t } from '$lib/translations';
import { changeQueryParams, dateOptions, errorNotification } from '$lib/common'; import { changeQueryParams, dateOptions, errorNotification } from '$lib/common';
import Tooltip from '$lib/components/Tooltip.svelte';
let buildId: any; let buildId: any;
let skip = 0; let skip = 0;
let noMoreBuilds = buildCount < 5 || buildCount <= skip; let noMoreBuilds = buildCount < 5 || buildCount <= skip;
let buildTook = 0;
const { id } = $page.params; const { id } = $page.params;
let preselectedBuildId = $page.url.searchParams.get('buildId'); let preselectedBuildId = $page.url.searchParams.get('buildId');
if (preselectedBuildId) buildId = preselectedBuildId; if (preselectedBuildId) buildId = preselectedBuildId;
async function updateBuildStatus({ detail }: { detail: any }) { async function updateBuildStatus({ detail }: { detail: any }) {
const { status } = detail; const { status, took } = detail;
if (status !== 'running') { if (status !== 'running') {
try { try {
const data = await get(`/applications/${id}/logs/build?buildId=${buildId}`); const data = await get(`/applications/${id}/logs/build?buildId=${buildId}`);
@ -58,6 +61,7 @@
if (build.id === buildId) build.status = status; if (build.id === buildId) build.status = status;
return build; return build;
}); });
buildTook = took;
} }
} }
async function loadMoreBuilds() { async function loadMoreBuilds() {
@ -137,20 +141,18 @@
<div class="top-4 md:sticky"> <div class="top-4 md:sticky">
{#each builds as build, index (build.id)} {#each builds as build, index (build.id)}
<div <div
data-tip={new Intl.DateTimeFormat('default', dateOptions).format( id={`building-${build.id}`}
new Date(build.createdAt)
) + `\n${build.status}`}
on:click={() => loadBuild(build.id)} on:click={() => loadBuild(build.id)}
class:rounded-tr={index === 0} class:rounded-tr={index === 0}
class:rounded-br={index === builds.length - 1} class:rounded-br={index === builds.length - 1}
class="tooltip tooltip-primary tooltip-top flex cursor-pointer items-center justify-center border-l-2 py-4 no-underline transition-all duration-100 hover:bg-coolgray-400 hover:shadow-xl" class="flex cursor-pointer items-center justify-center border-l-2 py-4 no-underline transition-all duration-100 hover:bg-coolgray-400 hover:shadow-xl"
class:bg-coolgray-400={buildId === build.id} class:bg-coolgray-400={buildId === build.id}
class:border-red-500={build.status === 'failed'} class:border-red-500={build.status === 'failed'}
class:border-orange-500={build.status === 'canceled'} class:border-orange-500={build.status === 'canceled'}
class:border-green-500={build.status === 'success'} class:border-green-500={build.status === 'success'}
class:border-yellow-500={build.status === 'running'} class:border-yellow-500={build.status === 'running'}
> >
<div class="flex-col px-2"> <div class="flex-col px-2 text-center min-w-[10rem]">
<div class="text-sm font-bold"> <div class="text-sm font-bold">
{build.branch || application.branch} {build.branch || application.branch}
</div> </div>
@ -162,6 +164,10 @@
<div class="w-48 text-center text-xs"> <div class="w-48 text-center text-xs">
{#if build.status === 'running'} {#if build.status === 'running'}
<div class="font-bold">{$t('application.build.running')}</div> <div class="font-bold">{$t('application.build.running')}</div>
<div>
Elapsed
<span class="font-bold">{buildTook}s</span>
</div>
{:else if build.status === 'queued'} {:else if build.status === 'queued'}
<div class="font-bold">{$t('application.build.queued')}</div> <div class="font-bold">{$t('application.build.queued')}</div>
{:else} {:else}
@ -172,6 +178,10 @@
{/if} {/if}
</div> </div>
</div> </div>
<Tooltip triggeredBy={`#building-${build.id}`}
>{new Intl.DateTimeFormat('default', dateOptions).format(new Date(build.createdAt)) +
`\n${build.status}`}</Tooltip
>
{/each} {/each}
</div> </div>
{#if !noMoreBuilds} {#if !noMoreBuilds}