Skip to content

Commit

Permalink
feat: mark measurement as failed in case of result validation error
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-yarmosh committed Feb 5, 2025
1 parent 70b1494 commit 35671d4
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 28 deletions.
13 changes: 11 additions & 2 deletions src/measurement/handler/result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ const httpResultSchema = Joi.object<HttpResult>({
const schema = Joi.object<MeasurementResultMessage>({
testId: Joi.string().required(),
measurementId: Joi.string().required(),
overwrite: Joi.boolean(),
result: Joi.alternatives([
pingResultSchema,
tracerouteResultSchema,
Expand All @@ -158,12 +157,22 @@ const schema = Joi.object<MeasurementResultMessage>({
const runner = getMeasurementRunner();

export const handleMeasurementResult = (probe: Probe) => async (data: MeasurementResultMessage): Promise<void> => {
await getProbeValidator().validateProbe(data.measurementId, data.testId, probe.uuid);

const validation = schema.validate(data);

if (validation.error) {
(data.measurementId && data.testId) && await runner.recordResult({
measurementId: data.measurementId,
testId: data.testId,
result: {
status: 'failed',
rawOutput: 'Measurement result validation failed',
},
});

throw validation.error;
}

await getProbeValidator().validateProbe(data.measurementId, data.testId, probe.uuid);
await runner.recordResult(data);
};
51 changes: 25 additions & 26 deletions src/measurement/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ type PingTiming = {
};

export type PingResult = TestResult & {
resolvedAddress: string | null;
resolvedHostname: string | null;
timings: PingTiming[];
stats: {
resolvedAddress?: string | null;
resolvedHostname?: string | null;
timings?: PingTiming[];
stats?: {
min: number | null;
max: number | null;
avg: number | null;
Expand Down Expand Up @@ -51,9 +51,9 @@ type TraceHopResult = {
};

export type TracerouteResult = TestResult & {
resolvedHostname: string | null;
resolvedAddress: string | null;
hops: TraceHopResult[];
resolvedHostname?: string | null;
resolvedAddress?: string | null;
hops?: TraceHopResult[];
};

type MtrTest = {
Expand Down Expand Up @@ -88,9 +88,9 @@ type MtrResultHop = {
};

export type MtrResult = TestResult & {
resolvedAddress: string;
resolvedHostname: string;
hops: MtrResultHop[];
resolvedAddress?: string;
resolvedHostname?: string;
hops?: MtrResultHop[];
};

type DnsQueryTypes = 'A' | 'AAAA' | 'ANY' | 'CNAME' | 'DNSKEY' | 'DS' | 'HTTPS' | 'MX' | 'NS' | 'NSEC' | 'PTR' | 'RRSIG' | 'SOA' | 'TXT' | 'SRV';
Expand All @@ -115,17 +115,17 @@ type DnsAnswer = {
};

export type DnsRegularResult = {
statusCodeName: string;
statusCode: number | null;
answers: DnsAnswer[];
timings: {
statusCodeName?: string;
statusCode?: number | null;
answers?: DnsAnswer[];
resolver?: string | null;
timings?: {
total: number | null;
};
resolver: string | null;
};

export type DnsTraceResult = {
hops: DnsRegularResult;
hops?: DnsRegularResult;
};

export type DnsResult = TestResult & (DnsRegularResult | DnsTraceResult);
Expand All @@ -150,15 +150,15 @@ export type HttpProgress = TestProgress & {
};

export type HttpResult = TestResult & {
resolvedAddress: string | null;
headers: Record<string, string>;
rawHeaders: string | null;
rawBody: string | null;
truncated: boolean;
statusCode: number | null;
statusCodeName: string | null;
timings: Record<string, number>;
tls: {
resolvedAddress?: string | null;
headers?: Record<string, string>;
rawHeaders?: string | null;
rawBody?: string | null;
truncated?: boolean;
statusCode?: number | null;
statusCodeName?: string | null;
timings?: Record<string, number>;
tls?: {
authorized: boolean;
createdAt: string;
expiresAt: string;
Expand Down Expand Up @@ -262,6 +262,5 @@ export type MeasurementProgressMessage = {
export type MeasurementResultMessage = {
testId: string;
measurementId: string;
overwrite?: boolean;
result: PingResult | TracerouteResult | DnsResult | MtrResult | HttpResult;
};

0 comments on commit 35671d4

Please sign in to comment.