Keep native collection launches responsive
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { pendingHostOperations, waitForHostWork } from '$lib/server/hosts/index.js';
|
||||
import { pendingHostOperationRows, waitForHostWork } from '$lib/server/hosts/index.js';
|
||||
import { authenticateAgent } from '$lib/server/hosts/http.js';
|
||||
import { reconcileHostPreparation } from '$lib/server/hosts/preparation.js';
|
||||
import { hostOperationsResponse } from '$lib/server/hosts/delivery.js';
|
||||
export async function GET({ request }: { request: Request }) {
|
||||
const host = authenticateAgent(request);
|
||||
reconcileHostPreparation(host.id);
|
||||
const params = new URL(request.url).searchParams;
|
||||
const lane = params.get('lane') === 'health' ? 'health' : params.get('lane') === 'read' ? 'read' : params.get('lane') === 'write' ? 'write' : 'all';
|
||||
let operations = pendingHostOperations(host.id, lane);
|
||||
let operations = pendingHostOperationRows(host.id, lane, false);
|
||||
if (!operations.length && params.get('wait') === '20') {
|
||||
await waitForHostWork(host.id, request.signal);
|
||||
authenticateAgent(request); // Revocation still applies after waiting.
|
||||
operations = pendingHostOperations(host.id, lane);
|
||||
operations = pendingHostOperationRows(host.id, lane, false);
|
||||
}
|
||||
return json({ operations, serverTime: new Date().toISOString() }, { headers: { 'Cache-Control': 'no-store' } });
|
||||
return hostOperationsResponse(operations);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { reportHostOperation } from '$lib/server/hosts/index.js';
|
||||
import { reportHostOperationStatus } from '$lib/server/hosts/index.js';
|
||||
import { authenticateAgent, hostApiError, objectBody } from '$lib/server/hosts/http.js';
|
||||
import { kickProvisioning } from '$lib/server/pipeline/worker.js';
|
||||
export async function POST({ request, params }: { request: Request; params: { id: string } }) {
|
||||
const host = authenticateAgent(request);
|
||||
try {
|
||||
const body = await objectBody(request, 128 * 1024 * 1024);
|
||||
const operation = reportHostOperation(host.id, params.id, { state: body.state, result: body.result, error: body.error });
|
||||
const operation = reportHostOperationStatus(host.id, params.id, { state: body.state, result: body.result, error: body.error });
|
||||
if (['completed', 'failed', 'unknown'].includes(operation.state)
|
||||
&& (operation.kind.startsWith('instance.') && operation.kind !== 'instance.inspect' || operation.kind === 'files.stage')) {
|
||||
void kickProvisioning().catch(error => console.error('[agent] provisioning wake failed:', error));
|
||||
|
||||
Reference in New Issue
Block a user