diff --git a/backend/src/services/traffic-flow-engine.ts b/backend/src/services/traffic-flow-engine.ts index e7f83a7..65df9e9 100644 --- a/backend/src/services/traffic-flow-engine.ts +++ b/backend/src/services/traffic-flow-engine.ts @@ -1,5 +1,5 @@ import type Database from "better-sqlite3" -import { normalizeParsedFlow, parseFlowPacket, protoName, type ParsedFlow } from "./traffic-flow-parse.js" +import { normalizeParsedFlow, parseFlowPacket, protoName, type ParsedFlow, type ParsedFlowInput } from "./traffic-flow-parse.js" import { classifyFlowPlaneLite } from "./traffic-flow-planes.js" import { pickServerIdForExporter, type OverlayPeerRef } from "./traffic-flow-map-exporter.js" import { applicationName } from "./traffic-flow-apps.js" @@ -232,7 +232,7 @@ export function getEngineStats(): EngineStats { } } -export function queueParsedFlows(serverId: number, flows: ParsedFlow[]): void { +export function queueParsedFlows(serverId: number, flows: ParsedFlowInput[]): void { const bucketAt = minuteBucketIso() const ripeMisses: string[] = [] for (const raw of flows) { @@ -714,7 +714,7 @@ export function onEngineTick(): void { flushPending() } -export function ingestParsedFlowsForServerForTests(serverId: number, flows: ParsedFlow[]): void { +export function ingestParsedFlowsForServerForTests(serverId: number, flows: ParsedFlowInput[]): void { queueParsedFlows(serverId, flows) rollFlowRings() } diff --git a/backend/src/services/traffic-flow-ingest.ts b/backend/src/services/traffic-flow-ingest.ts index fdb1e5f..905453b 100644 --- a/backend/src/services/traffic-flow-ingest.ts +++ b/backend/src/services/traffic-flow-ingest.ts @@ -6,7 +6,7 @@ import { beginSqliteExclusiveOp, db, endSqliteExclusiveOp, sqliteDatabase } from import { env } from "../config.js" import { flowBuckets, servers } from "../db/schema.js" import type { FlowPurgeDto, FlowStatsDto, FlowTalkerDto } from "@mmapp/contracts/traffic-flow" -import { protoName, type ParsedFlow } from "./traffic-flow-parse.js" +import { protoName, type ParsedFlowInput } from "./traffic-flow-parse.js" import type { CollectorHeartbeat, ExporterMapPayload, MainToWorker, WorkerToMain } from "./traffic-flow-collector-ipc.js" import { attachEngineSqlite, @@ -404,7 +404,7 @@ export function listFlowTalkers(minutes = 5): FlowStatsDto { } } -export function ingestParsedFlowsForTests(exporterIp: string, flows: ParsedFlow[]) { +export function ingestParsedFlowsForTests(exporterIp: string, flows: ParsedFlowInput[]) { applyExporterCtxFromDb() const serverId = resolveServerId(exporterIp) if (serverId == null) return @@ -413,7 +413,7 @@ export function ingestParsedFlowsForTests(exporterIp: string, flows: ParsedFlow[ flushPending() } -export function ingestParsedFlowsForServerForTests(serverId: number, flows: ParsedFlow[]) { +export function ingestParsedFlowsForServerForTests(serverId: number, flows: ParsedFlowInput[]) { engineIngestForServer(serverId, flows) } diff --git a/backend/src/services/traffic-flow-parse.ts b/backend/src/services/traffic-flow-parse.ts index f2a9462..b281b8b 100644 --- a/backend/src/services/traffic-flow-parse.ts +++ b/backend/src/services/traffic-flow-parse.ts @@ -15,6 +15,8 @@ export interface ParsedFlow { natDst: string } +export type ParsedFlowInput = Partial & Pick + export function emptyParsedFlow(): ParsedFlow { return { src: "", @@ -34,7 +36,7 @@ export function emptyParsedFlow(): ParsedFlow { } } -export function normalizeParsedFlow(flow: Partial & Pick): ParsedFlow { +export function normalizeParsedFlow(flow: ParsedFlowInput): ParsedFlow { return { ...emptyParsedFlow(), ...flow, diff --git a/backend/tsconfig.json b/backend/tsconfig.json index dabe2fc..ad44a8f 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -15,5 +15,5 @@ "sourceMap": true }, "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "src/**/*.test.ts"] }