Skip to content

Commit

Permalink
refactor: enhance error handling and logging in TelemetryIngest middl…
Browse files Browse the repository at this point in the history
…eware
  • Loading branch information
simlarsen committed Jan 30, 2025
1 parent 3163deb commit e305284
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion Common/Server/Middleware/TelemetryIngest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import {
} from "../../Server/Utils/Express";
import TelemetryIngestionKeyService from "../../Server/Services/TelemetryIngestionKeyService";
import TelemetryIngestionKey from "../../Models/DatabaseModels/TelemetryIngestionKey";
import Response from "../Utils/Response";
import logger from "../Utils/Logger";

export interface TelemetryRequest extends ExpressRequest {
projectId: ObjectID; // Project ID
Expand All @@ -17,12 +19,14 @@ export interface TelemetryRequest extends ExpressRequest {
export default class TelemetryIngest {
public static async isAuthorizedServiceMiddleware(
req: ExpressRequest,
_res: ExpressResponse,
res: ExpressResponse,
next: NextFunction,
): Promise<void> {
try {
// check header.

const isOpenTelemetryAPI: boolean = req.path.includes("/otlp/v1");

let oneuptimeToken: string | undefined = req.headers[
"x-oneuptime-token"
] as string | undefined;
Expand All @@ -35,6 +39,14 @@ export default class TelemetryIngest {
}

if (!oneuptimeToken) {
logger.error("Missing header: x-oneuptime-token");

if (isOpenTelemetryAPI) {
// then accept the response and return success.
// do not return error because it causes Otel to retry the request.
return Response.sendEmptySuccessResponse(req, res);
}

throw new BadRequestException("Missing header: x-oneuptime-token");
}

Expand All @@ -54,6 +66,14 @@ export default class TelemetryIngest {
});

if (!token) {
logger.error("Invalid service token: " + oneuptimeToken);

if (isOpenTelemetryAPI) {
// then accept the response and return success.
// do not return error because it causes Otel to retry the request.
return Response.sendEmptySuccessResponse(req, res);
}

throw new BadRequestException(
"Invalid service token: " + oneuptimeToken,
);
Expand All @@ -62,6 +82,16 @@ export default class TelemetryIngest {
projectId = token.projectId as ObjectID;

if (!projectId) {
logger.error(
"Project ID not found for service token: " + oneuptimeToken,
);

if (isOpenTelemetryAPI) {
// then accept the response and return success.
// do not return error because it causes Otel to retry the request.
return Response.sendEmptySuccessResponse(req, res);
}

throw new BadRequestException(
"Project ID not found for service token: " + oneuptimeToken,
);
Expand Down

0 comments on commit e305284

Please sign in to comment.