diff --git a/packages/apollo-engine-reporting/src/agent.ts b/packages/apollo-engine-reporting/src/agent.ts index 17ff47895da..ca8cd43c46c 100644 --- a/packages/apollo-engine-reporting/src/agent.ts +++ b/packages/apollo-engine-reporting/src/agent.ts @@ -185,6 +185,10 @@ export interface EngineReportingOptions { * Creates the client information for operation traces. */ generateClientInfo?: GenerateClientInfo; + /** + * If non-zero, sample traces at the given rate, e.g. 0.5 = half of all traces + */ + sampleRate?: number; } export interface AddTraceArgs { diff --git a/packages/apollo-engine-reporting/src/extension.ts b/packages/apollo-engine-reporting/src/extension.ts index 0fd804df7f7..b7d14d5e0ac 100644 --- a/packages/apollo-engine-reporting/src/extension.ts +++ b/packages/apollo-engine-reporting/src/extension.ts @@ -156,14 +156,16 @@ export class EngineReportingExtension o.requestContext.metrics.queryPlanTrace; } - this.addTrace({ - operationName, - queryHash, - documentAST, - queryString: this.queryString || '', - trace: this.treeBuilder.trace, - schemaHash: this.schemaHash, - }); + if (!this.options.sampleRate || this.options.sampleRate >= Math.random()) { + this.addTrace({ + operationName, + queryHash, + documentAST, + queryString: this.queryString || '', + trace: this.treeBuilder.trace, + schemaHash: this.schemaHash, + }); + } }; }