Skip to content

Commit

Permalink
feat: add dns result schema
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-yarmosh committed Feb 4, 2025
1 parent 3bea17e commit a5d2a10
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 17 deletions.
14 changes: 8 additions & 6 deletions src/lib/ws/helper/subscribe-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@ export const subscribeWithHandler = (socket: ServerSocket, event: string, method
} catch (error: unknown) {
const probe = socket.data.probe;
const clientIp = probe.ipAddress;
let details = 'unknown';
const metadata: Record<string, unknown> = {
client: { id: socket.id, ip: clientIp },
details: 'unknown',
};

if (isError(error)) {
details = error.message;
metadata['details'] = error.message;
}

if (Joi.isError(error)) {
details = formatJoiError(error);
metadata['details'] = formatJoiError(error);
metadata['validationInput'] = error._original;
}

logger.info(`Event "${event}" failed to handle for (${details})`, {
client: { id: socket.id, ip: clientIp },
});
logger.info(`Event "${event}" failed to handle`, metadata);

logger.debug(`Details:`, error);
}
Expand Down
50 changes: 47 additions & 3 deletions src/measurement/handler/result.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import Joi from 'joi';
import type { Probe } from '../../probe/types.js';
import type { MeasurementResultMessage, PingResult, TracerouteResult } from '../types.js';
import type { DnsRegularResult, DnsTraceResult, MeasurementResultMessage, PingResult, TestResult, TracerouteResult } from '../types.js';
import { getMeasurementRunner } from '../runner.js';
import { getProbeValidator } from '../../lib/probe-validator.js';

const pingResultSchema = Joi.object<PingResult>({
status: Joi.string().required(),
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().required(),
resolvedAddress: Joi.string().allow(null),
resolvedHostname: Joi.string().allow(null),
Expand All @@ -25,7 +25,7 @@ const pingResultSchema = Joi.object<PingResult>({
});

const tracerouteResultSchema = Joi.object<TracerouteResult>({
status: Joi.string().required(),
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().required(),
resolvedAddress: Joi.string().allow(null),
resolvedHostname: Joi.string().allow(null),
Expand All @@ -38,13 +38,57 @@ const tracerouteResultSchema = Joi.object<TracerouteResult>({
})),
});

const dnsResultSchema = Joi.alternatives([
Joi.object<TestResult & DnsRegularResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().required(),
statusCodeName: Joi.string().required(),
statusCode: Joi.number().allow(null).required(),
resolver: Joi.string().allow(null).required(),
timings: Joi.object({
total: Joi.number().allow(null),
}).required(),
answers: Joi.array().items(Joi.alternatives([
Joi.object({
name: Joi.string().allow(null),
type: Joi.string().allow(null),
ttl: Joi.number(),
class: Joi.string().allow(null),
value: Joi.string(),
}),
Joi.object({}),
])).required(),
}),
Joi.object<TestResult & DnsTraceResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().required(),
hops: Joi.array().items(Joi.object({
resolver: Joi.string().allow(null).required(),
timings: Joi.object({
total: Joi.number().allow(null),
}).required(),
answers: Joi.array().items(Joi.alternatives([
Joi.object({
name: Joi.string().allow(null),
type: Joi.string().allow(null),
ttl: Joi.number(),
class: Joi.string().allow(null),
value: Joi.string(),
}),
Joi.object({}),
])).required(),
})),
}),
]);

const schema = Joi.object<MeasurementResultMessage>({
testId: Joi.string().required(),
measurementId: Joi.string().required(),
overwrite: Joi.boolean(),
result: Joi.alternatives([
pingResultSchema,
tracerouteResultSchema,
dnsResultSchema,
]).required(),
}).required();

Expand Down
18 changes: 10 additions & 8 deletions src/measurement/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { Location } from '../lib/location/types.js';
* Network Tests
*/

type TestResult = {
export type TestResult = {
rawOutput: string;
status: 'in-progress' | 'finished' | 'failed' | 'offline';
};
Expand Down Expand Up @@ -107,22 +107,24 @@ type DnsTest = {
};

type DnsAnswer = {
name: string;
type: DnsQueryTypes;
name: string | null;
type: DnsQueryTypes | null;
ttl: number;
class: string;
class: string | null;
value: string;
};

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

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

Expand Down

0 comments on commit a5d2a10

Please sign in to comment.