fix(traffic): починить сборку tsc для частичных IPFIX-фикстур
Docker images / prepare-release (push) Successful in 6s
Docker images / backend-image (push) Successful in 1m50s
Docker images / frontend-image (push) Successful in 3m15s
Docker images / notify-webhook (push) Skipped
Docker images / updater-image (push) Successful in 47s
Docker images / publish-release (push) Successful in 11s

Тесты не должны попадать в Docker tsc; ingest принимает ParsedFlowInput и нормализует поля.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-09-07 11:45:22 +07:00
co-authored by Cursor
parent 90c8c393e5
commit 3834c40aa8
4 changed files with 10 additions and 8 deletions
+3 -3
View File
@@ -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()
}
+3 -3
View File
@@ -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)
}
+3 -1
View File
@@ -15,6 +15,8 @@ export interface ParsedFlow {
natDst: string
}
export type ParsedFlowInput = Partial<ParsedFlow> & Pick<ParsedFlow, "src" | "dst" | "proto" | "bytes">
export function emptyParsedFlow(): ParsedFlow {
return {
src: "",
@@ -34,7 +36,7 @@ export function emptyParsedFlow(): ParsedFlow {
}
}
export function normalizeParsedFlow(flow: Partial<ParsedFlow> & Pick<ParsedFlow, "src" | "dst" | "proto" | "bytes">): ParsedFlow {
export function normalizeParsedFlow(flow: ParsedFlowInput): ParsedFlow {
return {
...emptyParsedFlow(),
...flow,
+1 -1
View File
@@ -15,5 +15,5 @@
"sourceMap": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
"exclude": ["node_modules", "dist", "src/**/*.test.ts"]
}