perf,feat(events),ops: third optimization pass
Overview cold start: - InstanceResourceService persists every live fetch into status_snapshots (category 'resources') and serves a snapshot younger than 2 minutes before calling upstream, so the first fleet overview after a restart costs zero device requests; instance deletion cleans up via FK cascade Bounded retention for the four fastest-growing tables (15-minute sweep): - connection_logs: one row per probe per beat had no automatic cleanup - audit_events: new pruneBefore (90d) - operation_preparations: every prepare/retry attempt inserted a row, terminal rows now expire after 7 days - notification_queue: terminal rows pruned after 30 days SSE events now cover instance lifecycle: - create/update emit instance envelopes from the routes; the two-phase delete emits a job envelope on every terminal transition plus an instance envelope when the node actually disappears, so fleet and instance views invalidate in real time Linux ops: - 'install.sh unit' writes systemd user units for API and gateway with Restart=on-failure, 0600 secret injection, and MULTI_SIMADMIN_SYSTEMD_UNIT wired so console self-update restarts via systemctl -- closing the self-update loop on Linux
This commit is contained in:
@@ -449,6 +449,24 @@ export class SecureOperationExecution {
|
||||
return this.job(ids.job);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retention for consumed/expired/invalidated preparations. Every prepare
|
||||
* (manual or a scheduled retry attempt) inserts a row, so without this the
|
||||
* table grows one row per attempt forever.
|
||||
*/
|
||||
pruneTerminalPreparations(olderThanMs: number): number {
|
||||
if (!Number.isSafeInteger(olderThanMs) || olderThanMs < 0)
|
||||
throw new RangeError('olderThanMs must be a non-negative integer');
|
||||
const cutoff = new Date(this.clock().getTime() - olderThanMs).toISOString();
|
||||
return Number(
|
||||
this.options.db
|
||||
.prepare(
|
||||
"DELETE FROM operation_preparations WHERE status IN ('consumed','expired','invalidated') AND updated_at <= ?",
|
||||
)
|
||||
.run(cutoff).changes,
|
||||
);
|
||||
}
|
||||
|
||||
reconcileInterruptedJobs(): number {
|
||||
const now = this.clock().toISOString();
|
||||
return this.options.db.transaction(() => {
|
||||
|
||||
Reference in New Issue
Block a user