Automator.jsx
2.4 kB · jsx · 49 lines
1import { Code, Rows, Waiting, ago, useMirror, when } from "../components/Mirror.jsx";2import { ProductGrid } from "../components/ProductGrid.jsx";34function Tick({ data }) {5 const task = data.task;6 const waiting = task?.metadata?.waiting_since;7 return (8 <Rows9 list={[10 ["Last tick", `${ago(data.at)} (${when(data.at)}), ${data.seconds} s${data.error ? `, ${data.error}` : ""}`],11 ["Design", data.design ? `${data.design.key}, ${data.design.group} ${data.design.edition} ${data.design.scheme}, with ${data.design.secondary.join(", ")}, ${ago(data.design.created_at)}` : "none"],12 ["Task", task ? `${task.key} at ${task.step}, ${task.mockups} mockups, ${task.variants} variants, started ${ago(task.created_at)}${waiting ? `, waiting ${ago(waiting).replace(" ago", "")}` : ""}` : "idle"],13 ["Counters", task ? JSON.stringify(task.metadata) : ""],14 ["Batch", data.batch ? `${data.batch.open} open, ${data.batch.used} used, ${data.batch.dropped} dropped, tiles ${Object.keys(data.batch.tiles ?? {}).join(" ") || "none"}${Object.keys(data.batch.strikes ?? {}).length ? `, strikes ${Object.entries(data.batch.strikes ?? {}).map(([id, n]) => `${id}x${n}`).join(" ")}` : ""}` : "no batch"],15 ["Live", `${data.live.products} products in ${data.live.batches} batches, ${data.live.expiring} expiring within a day, newest ${ago(data.live.newest)}, oldest ${ago(data.live.oldest)}`],16 ]}17 />18 );19}2021export function Automator({ pending = [], now }) {22 const seen = useMirror("/automator/automator.json");23 const data = seen?.data ?? null;2425 return (26 <div className="wrap">27 {pending.length ? (28 <section className="batch">29 <h2>{`Batch ${pending[0].design}: ${pending.length} of the pairs so far`}</h2>30 <ProductGrid products={pending} now={now} />31 </section>32 ) : null}33 <article className="doc status narrow">34 <h1>Automator</h1>35 <p className="lead">36 The automator, read from the bucket every minute. Raw: <a href="/automator/automator.json">automator.json</a>. The cloud numbers live on <a href="/stats/">stats</a>.37 </p>38 <section>39 <h2>Tick</h2>40 {data ? <Tick data={data} /> : <Waiting seen={seen} />}41 </section>42 <section>43 <h2>Log</h2>44 {data?.log?.length ? <Code lines={data.log.slice(-120)} /> : <Waiting seen={seen} />}45 </section>46 </article>47 </div>48 );49}