fix: address Code Reviewer findings for Datadog/Sentry integration FRE-4806

P1: Load dd-trace before other modules via datadog-init.ts entry point
P1: Batch all CloudWatch metrics into single PutMetricDataCommand per request
P2: Deduplicate warning logs with else-if for high latency vs error
P3: Add response.ok check to Datadog log forwarding fetch
P3: Update getSentryHub() to use getCurrentScope() for Sentry SDK 8.x

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-10 16:02:18 -04:00
parent a653c77959
commit 31e0b39794
9 changed files with 168 additions and 20 deletions

View File

@@ -62,6 +62,35 @@ export async function emitMetric(
}
}
export async function emitBatchMetrics(metrics: {
serviceName: string;
data: { metricName: string; value: number; unit: StandardUnit; dimensions?: Record<string, string> }[];
}) {
const cw = getClient();
if (!cw) return;
const metricData = metrics.data.map((m) => ({
MetricName: m.metricName,
Dimensions: [
{ Name: 'service', Value: metrics.serviceName },
...(m.dimensions ? Object.entries(m.dimensions).map(([n, v]) => ({ Name: n, Value: v })) : []),
],
Value: m.value,
Unit: m.unit,
}));
const command = new PutMetricDataCommand({
Namespace: NAMESPACE,
MetricData: metricData,
});
try {
await cw.send(command);
} catch (err) {
console.warn('[CloudWatch] Batch metric emit failed:', (err as Error).message);
}
}
export async function emitLatency(
serviceName: string,
latencyMs: number,