feat: add duration display

This commit is contained in:
BennyKok 2024-01-20 17:46:15 +08:00
parent 1a0d73ff8b
commit c98a16a2dd
6 changed files with 39 additions and 11 deletions

View File

@ -1,4 +1,3 @@
import million from 'million/compiler';
import { recmaPlugins } from "./src/mdx/recma.mjs";
import { rehypePlugins } from "./src/mdx/rehype.mjs";
import { remarkPlugins } from "./src/mdx/remark.mjs";
@ -21,6 +20,8 @@ const nextConfig = {
},
};
export default million.next(
withSearch(withMDX(nextConfig)), { auto: { rsc: true } }
);
export default withSearch(withMDX(nextConfig));
// export default million.next(
// withSearch(withMDX(nextConfig)), { auto: { rsc: true } }
// );

View File

@ -11,7 +11,7 @@ import {
DialogTrigger,
} from "@/components/ui/dialog";
import { TableCell, TableRow } from "@/components/ui/table";
import { getRelativeTime } from "@/lib/getRelativeTime";
import { getDuration, getRelativeTime } from "@/lib/getRelativeTime";
import { type findAllRuns } from "@/server/findAllRuns";
import { Suspense } from "react";
@ -37,6 +37,9 @@ export async function RunDisplay({
{run.origin}
</Badge>
</TableCell>
<TableCell className="truncate">
{getDuration(run.duration)}
</TableCell>
<LiveStatus run={run} />
</TableRow>
</DialogTrigger>

View File

@ -41,11 +41,12 @@ export async function RunsTable(props: {
)}
<TableHeader className="bg-background top-0 sticky">
<TableRow>
<TableHead className="w-[100px]">Number</TableHead>
<TableHead className="">Machine</TableHead>
<TableHead className="">Time</TableHead>
<TableHead className="w-[100px]">Version</TableHead>
<TableHead className="truncate">Number</TableHead>
<TableHead className="truncate">Machine</TableHead>
<TableHead className="truncate">Time</TableHead>
<TableHead className="truncate">Version</TableHead>
<TableHead className="truncate">Origin</TableHead>
<TableHead className="truncate">Duration</TableHead>
<TableHead className="truncate">Live Status</TableHead>
<TableHead className="text-right">Status</TableHead>
</TableRow>

View File

@ -79,6 +79,11 @@ export function SharePageSettings({
description="Edit share page details."
serverAction={updateSharePageInfo}
formSchema={publicShareDeployment}
fieldConfig={{
description: {
fieldType: "textarea",
},
}}
/>
</>
);

View File

@ -1,12 +1,26 @@
import dayjs from "dayjs";
import duration from "dayjs/plugin/duration";
import relativeTime from "dayjs/plugin/relativeTime";
import React from "react";
dayjs.extend(relativeTime);
dayjs.extend(duration);
export function getRelativeTime(time: string | Date | null | undefined) {
if (typeof time === "string" || time instanceof Date) {
return dayjs().to(time);
}
return null;
}
function formatDuration(seconds: number) {
const minutes = Math.floor(seconds / 60);
const remainingSeconds = seconds % 60;
if (minutes > 0) {
return `${minutes}.${remainingSeconds} mins`;
} else {
return `${remainingSeconds.toFixed(1)} secs`;
}
}
export function getDuration(durationInSecs: number) {
return `${formatDuration(durationInSecs)}`;
}

View File

@ -23,6 +23,10 @@ export async function findAllRuns({
extras: {
number: sql<number>`row_number() over (order by created_at)`.as("number"),
total: sql<number>`count(*) over ()`.as("total"),
duration:
sql<number>`(extract(epoch from ended_at) - extract(epoch from created_at))`.as(
"duration"
),
},
with: {
machine: {