Harden production workflows and agent admission
This commit is contained in:
@@ -26,7 +26,7 @@ import { usePolling } from "@/lib/usePolling";
|
||||
import type { InventoryData } from "@/lib/view-types";
|
||||
|
||||
type StoredEvent = components["schemas"]["StoredCheckResultEvent"];
|
||||
type EventsPageData = { items: StoredEvent[]; next_cursor?: string | null };
|
||||
type EventsPageData = { items: StoredEvent[]; next_cursor?: string | null; prev_cursor?: string | null };
|
||||
type TabKey = "agents" | "events";
|
||||
|
||||
export function CheckDetailBrowser({
|
||||
@@ -36,6 +36,8 @@ export function CheckDetailBrowser({
|
||||
tab,
|
||||
eventsLimit,
|
||||
eventsCursor,
|
||||
eventsBack,
|
||||
eventsPage,
|
||||
}: {
|
||||
checkId: string;
|
||||
initialData: InventoryData;
|
||||
@@ -43,6 +45,8 @@ export function CheckDetailBrowser({
|
||||
tab: TabKey;
|
||||
eventsLimit: PageSize;
|
||||
eventsCursor?: string;
|
||||
eventsBack: boolean;
|
||||
eventsPage: number;
|
||||
}) {
|
||||
const { data } = usePolling(initialData, "/api/poll/inventory");
|
||||
const agentsById = useMemo(
|
||||
@@ -110,6 +114,8 @@ export function CheckDetailBrowser({
|
||||
agentsById={agentsById}
|
||||
eventsLimit={eventsLimit}
|
||||
eventsCursor={eventsCursor}
|
||||
eventsBack={eventsBack}
|
||||
eventsPage={eventsPage}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
@@ -177,12 +183,16 @@ function EventsForCheck({
|
||||
agentsById,
|
||||
eventsLimit,
|
||||
eventsCursor,
|
||||
eventsBack,
|
||||
eventsPage,
|
||||
}: {
|
||||
checkId: string;
|
||||
initialData: EventsPageData;
|
||||
agentsById: Map<string, Agent>;
|
||||
eventsLimit: PageSize;
|
||||
eventsCursor?: string;
|
||||
eventsBack: boolean;
|
||||
eventsPage: number;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const pollUrl = useMemo(() => {
|
||||
@@ -191,8 +201,9 @@ function EventsForCheck({
|
||||
limit: String(eventsLimit),
|
||||
});
|
||||
if (eventsCursor) qs.set("cursor", eventsCursor);
|
||||
if (eventsBack) qs.set("back", "1");
|
||||
return `/api/poll/events?${qs.toString()}`;
|
||||
}, [checkId, eventsCursor, eventsLimit]);
|
||||
}, [checkId, eventsCursor, eventsBack, eventsLimit]);
|
||||
const { data } = usePolling(initialData, pollUrl);
|
||||
|
||||
const onLimitChange = (next: PageSize) => {
|
||||
@@ -245,8 +256,9 @@ function EventsForCheck({
|
||||
)}
|
||||
<Pager
|
||||
basePath={`/checks/${encodeURIComponent(checkId)}`}
|
||||
cursor={eventsCursor}
|
||||
prevCursor={data.prev_cursor}
|
||||
nextCursor={data.next_cursor}
|
||||
page={eventsPage}
|
||||
extra={{ tab: "events", events_limit: String(eventsLimit) }}
|
||||
/>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user