From 19905de4eefbc7b904ed50df4ce8c368e51d25f4 Mon Sep 17 00:00:00 2001 From: Petr Heinz Date: Tue, 26 Nov 2024 14:05:16 +0100 Subject: [PATCH 1/4] Send logs timestamp in "dt" attribute as well --- src/logger.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/logger.ts b/src/logger.ts index 25f0d6c..28d083c 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -88,7 +88,7 @@ export class Logger { } const logEvent: LogEvent = { level, message, _time: new Date(Date.now()).toISOString(), fields: this.args || {} }; - // check if passed args is an object, if its not an object, add it to fields.args + // check if passed args is an object, if it's not an object, add it to fields.args if (args instanceof Error) { logEvent.fields = { ...logEvent.fields, message: args.message, stack: args.stack, name: args.name }; } else if (typeof args === 'object' && args !== null && Object.keys(args).length > 0) { @@ -139,7 +139,7 @@ export class Logger { const method = 'POST'; const keepalive = true; - const body = JSON.stringify(this.logEvents); + const body = JSON.stringify(this.logEvents.map((event) => ({ dt: event._time, ...event }))); // clear pending logs this.logEvents = []; const headers = { From 6294b66c84d2c9fb77256c35c61390d56e60dcde Mon Sep 17 00:00:00 2001 From: Petr Heinz Date: Tue, 26 Nov 2024 14:05:25 +0100 Subject: [PATCH 2/4] Send metrics timestamp in "dt" attribute as well --- src/platform/generic.ts | 14 ++++++++------ src/platform/netlify.ts | 22 ++++++++++++---------- src/platform/vercel.ts | 2 ++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/platform/generic.ts b/src/platform/generic.ts index a7d2f33..bbdca99 100644 --- a/src/platform/generic.ts +++ b/src/platform/generic.ts @@ -43,13 +43,15 @@ export default class GenericConfig implements Provider { } wrapWebVitalsObject(metrics: any[]): any { + const time = new Date().getTime(); return metrics.map(m => ({ - webVital: m, - _time: new Date().getTime(), - platform: { - environment: this.environment, - source: 'web-vital', - }, + webVital: m, + dt: time, + _time: time, + platform: { + environment: this.environment, + source: 'web-vital', + }, })) } diff --git a/src/platform/netlify.ts b/src/platform/netlify.ts index 4da69f8..36cc943 100644 --- a/src/platform/netlify.ts +++ b/src/platform/netlify.ts @@ -19,18 +19,20 @@ export interface NetlifyInfo extends PlatformInfo { export default class NetlifyConfig extends GenericConfig implements Provider { wrapWebVitalsObject(metrics: any[]): any { + const time = new Date().getTime(); return metrics.map(m => ({ webVital: m, - _time: new Date().getTime(), - netlify: { - environment: this.environment, - source: 'web-vital', - siteId: netlifySiteId, - buildId: netlifyBuildId, - context: netlifyContext, - deploymentUrl: netlifyDeploymentUrl, - deploymentId: netlifyDeploymentId, - }, + dt: time, + _time: time, + netlify: { + environment: this.environment, + source: 'web-vital', + siteId: netlifySiteId, + buildId: netlifyBuildId, + context: netlifyContext, + deploymentUrl: netlifyDeploymentUrl, + deploymentId: netlifyDeploymentId, + }, })) } diff --git a/src/platform/vercel.ts b/src/platform/vercel.ts index d770ae1..34c4fd0 100644 --- a/src/platform/vercel.ts +++ b/src/platform/vercel.ts @@ -25,7 +25,9 @@ export default class VercelConfig extends GenericConfig implements Provider { // } wrapWebVitalsObject(metrics: any[]) { + const time = new Date().getTime(); return { + dt: time, webVitals: metrics, environment: this.environment, }; From cc42bce246d7ca6253ea63a2be6cc937c76a99e4 Mon Sep 17 00:00:00 2001 From: Petr Heinz Date: Tue, 26 Nov 2024 14:08:11 +0100 Subject: [PATCH 3/4] Update default endpoint to in.logs.betterstack.com --- src/platform/generic.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/generic.ts b/src/platform/generic.ts index bbdca99..9dec026 100644 --- a/src/platform/generic.ts +++ b/src/platform/generic.ts @@ -13,7 +13,7 @@ export default class GenericConfig implements Provider { shouldSendEdgeReport = false; token = process.env.LOGTAIL_SOURCE_TOKEN; environment: string = process.env.NODE_ENV; - logtailUrl = process.env.LOGTAIL_URL || 'https://in.logtail.com'; + logtailUrl = process.env.LOGTAIL_URL || 'https://in.logs.betterstack.com'; region = process.env.REGION || undefined; isEnvVarsSet(): boolean { From e9164d41f7e551a7348d7823019fc68dcf76d200 Mon Sep 17 00:00:00 2001 From: Petr Heinz Date: Tue, 26 Nov 2024 14:20:00 +0100 Subject: [PATCH 4/4] Vercel is expected to send all web vitals at once to /_logtail endpoint, removing the "dt" field there, as it doesn't seem to be directly intended for Better Stack ingesting --- src/platform/vercel.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/platform/vercel.ts b/src/platform/vercel.ts index 34c4fd0..d770ae1 100644 --- a/src/platform/vercel.ts +++ b/src/platform/vercel.ts @@ -25,9 +25,7 @@ export default class VercelConfig extends GenericConfig implements Provider { // } wrapWebVitalsObject(metrics: any[]) { - const time = new Date().getTime(); return { - dt: time, webVitals: metrics, environment: this.environment, };