feat: add duration display
This commit is contained in:
parent
1a0d73ff8b
commit
c98a16a2dd
@ -1,4 +1,3 @@
|
|||||||
import million from 'million/compiler';
|
|
||||||
import { recmaPlugins } from "./src/mdx/recma.mjs";
|
import { recmaPlugins } from "./src/mdx/recma.mjs";
|
||||||
import { rehypePlugins } from "./src/mdx/rehype.mjs";
|
import { rehypePlugins } from "./src/mdx/rehype.mjs";
|
||||||
import { remarkPlugins } from "./src/mdx/remark.mjs";
|
import { remarkPlugins } from "./src/mdx/remark.mjs";
|
||||||
@ -21,6 +20,8 @@ const nextConfig = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default million.next(
|
export default withSearch(withMDX(nextConfig));
|
||||||
withSearch(withMDX(nextConfig)), { auto: { rsc: true } }
|
|
||||||
);
|
// export default million.next(
|
||||||
|
// withSearch(withMDX(nextConfig)), { auto: { rsc: true } }
|
||||||
|
// );
|
||||||
|
@ -11,7 +11,7 @@ import {
|
|||||||
DialogTrigger,
|
DialogTrigger,
|
||||||
} from "@/components/ui/dialog";
|
} from "@/components/ui/dialog";
|
||||||
import { TableCell, TableRow } from "@/components/ui/table";
|
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 { type findAllRuns } from "@/server/findAllRuns";
|
||||||
import { Suspense } from "react";
|
import { Suspense } from "react";
|
||||||
|
|
||||||
@ -37,6 +37,9 @@ export async function RunDisplay({
|
|||||||
{run.origin}
|
{run.origin}
|
||||||
</Badge>
|
</Badge>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
<TableCell className="truncate">
|
||||||
|
{getDuration(run.duration)}
|
||||||
|
</TableCell>
|
||||||
<LiveStatus run={run} />
|
<LiveStatus run={run} />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</DialogTrigger>
|
</DialogTrigger>
|
||||||
|
@ -41,11 +41,12 @@ export async function RunsTable(props: {
|
|||||||
)}
|
)}
|
||||||
<TableHeader className="bg-background top-0 sticky">
|
<TableHeader className="bg-background top-0 sticky">
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableHead className="w-[100px]">Number</TableHead>
|
<TableHead className="truncate">Number</TableHead>
|
||||||
<TableHead className="">Machine</TableHead>
|
<TableHead className="truncate">Machine</TableHead>
|
||||||
<TableHead className="">Time</TableHead>
|
<TableHead className="truncate">Time</TableHead>
|
||||||
<TableHead className="w-[100px]">Version</TableHead>
|
<TableHead className="truncate">Version</TableHead>
|
||||||
<TableHead className="truncate">Origin</TableHead>
|
<TableHead className="truncate">Origin</TableHead>
|
||||||
|
<TableHead className="truncate">Duration</TableHead>
|
||||||
<TableHead className="truncate">Live Status</TableHead>
|
<TableHead className="truncate">Live Status</TableHead>
|
||||||
<TableHead className="text-right">Status</TableHead>
|
<TableHead className="text-right">Status</TableHead>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
@ -79,6 +79,11 @@ export function SharePageSettings({
|
|||||||
description="Edit share page details."
|
description="Edit share page details."
|
||||||
serverAction={updateSharePageInfo}
|
serverAction={updateSharePageInfo}
|
||||||
formSchema={publicShareDeployment}
|
formSchema={publicShareDeployment}
|
||||||
|
fieldConfig={{
|
||||||
|
description: {
|
||||||
|
fieldType: "textarea",
|
||||||
|
},
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -1,12 +1,26 @@
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
import duration from "dayjs/plugin/duration";
|
||||||
import relativeTime from "dayjs/plugin/relativeTime";
|
import relativeTime from "dayjs/plugin/relativeTime";
|
||||||
import React from "react";
|
|
||||||
|
|
||||||
dayjs.extend(relativeTime);
|
dayjs.extend(relativeTime);
|
||||||
|
dayjs.extend(duration);
|
||||||
export function getRelativeTime(time: string | Date | null | undefined) {
|
export function getRelativeTime(time: string | Date | null | undefined) {
|
||||||
if (typeof time === "string" || time instanceof Date) {
|
if (typeof time === "string" || time instanceof Date) {
|
||||||
return dayjs().to(time);
|
return dayjs().to(time);
|
||||||
}
|
}
|
||||||
return null;
|
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)}`;
|
||||||
|
}
|
||||||
|
@ -23,6 +23,10 @@ export async function findAllRuns({
|
|||||||
extras: {
|
extras: {
|
||||||
number: sql<number>`row_number() over (order by created_at)`.as("number"),
|
number: sql<number>`row_number() over (order by created_at)`.as("number"),
|
||||||
total: sql<number>`count(*) over ()`.as("total"),
|
total: sql<number>`count(*) over ()`.as("total"),
|
||||||
|
duration:
|
||||||
|
sql<number>`(extract(epoch from ended_at) - extract(epoch from created_at))`.as(
|
||||||
|
"duration"
|
||||||
|
),
|
||||||
},
|
},
|
||||||
with: {
|
with: {
|
||||||
machine: {
|
machine: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user