UNPKG

@datadog/mobile-react-native

Version:

A client-side React Native module to interact with Datadog

54 lines (53 loc) 2.39 kB
/* * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. * This product includes software developed at Datadog (https://www.datadoghq.com/). * Copyright 2016-Present Datadog, Inc. */ import { DdRum } from '../../../../../DdRum'; import { TracingIdFormat } from '../../../distributedTracing/TracingIdentifier'; import { createTimings } from './resourceTiming'; export class ResourceReporter { constructor(resourceMappers) { this.mappers = resourceMappers; } reportResource = resource => { let modifiedResource = resource; for (const mapper of this.mappers) { modifiedResource = mapper(resource); if (modifiedResource === null) { return; } } reportResource(modifiedResource); }; } const formatResourceStartContext = tracingAttributes => { const attributes = {}; if (tracingAttributes.samplingPriorityHeader !== '0') { attributes['_dd.span_id'] = tracingAttributes.spanId.toString(TracingIdFormat.decimal); attributes['_dd.trace_id'] = tracingAttributes.traceId.toString(TracingIdFormat.paddedHex); attributes['_dd.rule_psr'] = tracingAttributes.rulePsr; } return attributes; }; const formatResourceStopContext = (timings, graphqlAttributes) => { const attributes = {}; if (timings.responseStartTime !== undefined) { attributes['_dd.resource_timings'] = createTimings(timings.startTime, timings.responseStartTime, timings.stopTime); } if (graphqlAttributes?.operationType) { attributes['_dd.graphql.operation_type'] = graphqlAttributes.operationType; if (graphqlAttributes.operationName) { attributes['_dd.graphql.operation_name'] = graphqlAttributes.operationName; } if (graphqlAttributes.variables) { attributes['_dd.graphql.variables'] = graphqlAttributes.variables; } } return attributes; }; const reportResource = async resource => { await DdRum.startResource(resource.key, resource.request.method, resource.request.url, formatResourceStartContext(resource.tracingAttributes), resource.timings.startTime); DdRum.stopResource(resource.key, resource.response.statusCode, resource.request.kind, resource.response.size, formatResourceStopContext(resource.timings, resource.graphqlAttributes), resource.timings.stopTime, resource.resourceContext); }; //# sourceMappingURL=ResourceReporter.js.map