UNPKG

@dash0/sdk-web

Version:

Dash0's Web SDK to collect telemetry from end-users' web browsers

67 lines (66 loc) 1.7 kB
import { newBatcher } from "./batcher"; import { send } from "./fetch"; import { vars } from "../vars"; import { debug, error, createRateLimiter } from "../utils"; const logBatcher = newBatcher(sendLogs); const spanBatcher = newBatcher(sendSpans); let rateLimiter; function isRateLimited() { if (!rateLimiter) { rateLimiter = createRateLimiter({ maxCallsPerTenMinutes: 4096, maxCallsPerTenSeconds: 128, }); } return rateLimiter(); } export function sendLog(log) { if (isRateLimited()) { debug("Transport rate limit. Will not send item.", log); return; } logBatcher.send(log); } function sendLogs(logs) { send("/v1/logs", { resourceLogs: [ { resource: vars.resource, scopeLogs: [ { scope: vars.scope, logRecords: logs, }, ], }, ], }).catch((err) => { error("Failed to transmit logs", err); }); } export function sendSpan(span) { if (!span) return; if (isRateLimited()) { debug("Transport rate limit. Will not send item.", span); return; } spanBatcher.send(span); } function sendSpans(spans) { send("/v1/traces", { resourceSpans: [ { resource: vars.resource, scopeSpans: [ { scope: vars.scope, spans: spans, }, ], }, ], }).catch((err) => { error("Failed to transmit spans", err); }); }