@@ -59,6 +59,11 @@ export const enum TelemetryService {
5959export interface Telemetry {
6060 stop : ( ) => void
6161 enabled : boolean
62+ enabledMetrics : { [ metricName : string ] : boolean }
63+ }
64+
65+ export interface SampleRateByMetric {
66+ [ metricName : string ] : number
6267}
6368
6469const TELEMETRY_EXCLUDED_SITES : string [ ] = [ INTAKE_SITE_US1_FED ]
@@ -78,25 +83,34 @@ export function startTelemetry(
7883 hooks : AbstractHooks ,
7984 reportError : ( error : RawError ) => void ,
8085 pageMayExitObservable : Observable < PageMayExitEvent > ,
81- createEncoder : ( streamId : DeflateEncoderStreamId ) => Encoder
86+ createEncoder : ( streamId : DeflateEncoderStreamId ) => Encoder ,
87+ sampleRateByMetric : SampleRateByMetric = { }
8288) : Telemetry {
8389 const observable = new Observable < TelemetryEvent & Context > ( )
8490
8591 const { stop } = startTelemetryTransport ( configuration , reportError , pageMayExitObservable , createEncoder , observable )
8692
87- const { enabled } = startTelemetryCollection ( telemetryService , configuration , hooks , observable )
93+ const { enabled, enabledMetrics } = startTelemetryCollection (
94+ telemetryService ,
95+ configuration ,
96+ hooks ,
97+ observable ,
98+ sampleRateByMetric
99+ )
88100
89101 return {
90102 stop,
91103 enabled,
104+ enabledMetrics,
92105 }
93106}
94107
95108export function startTelemetryCollection (
96109 telemetryService : TelemetryService ,
97110 configuration : Configuration ,
98111 hooks : AbstractHooks ,
99- observable : Observable < TelemetryEvent & Context >
112+ observable : Observable < TelemetryEvent & Context > ,
113+ sampleRateByMetric : SampleRateByMetric
100114) {
101115 const alreadySentEventsByKind : Record < string , Set < string > > = { }
102116
@@ -109,10 +123,18 @@ export function startTelemetryCollection(
109123 [ TelemetryType . USAGE ] : telemetryEnabled && performDraw ( configuration . telemetryUsageSampleRate ) ,
110124 }
111125
126+ const telemetryEnabledPerMetrics : { [ metricName : string ] : boolean } = { }
127+ Object . keys ( sampleRateByMetric ) . forEach ( ( metricName ) => {
128+ telemetryEnabledPerMetrics [ metricName ] = telemetryEnabled && performDraw ( sampleRateByMetric [ metricName ] )
129+ } )
130+
112131 const runtimeEnvInfo = getRuntimeEnvInfo ( )
113132 const telemetryObservable = getTelemetryObservable ( )
114133 telemetryObservable . subscribe ( ( { rawEvent, kind } ) => {
115- if ( ! telemetryEnabledPerType [ rawEvent . type ! ] ) {
134+ if (
135+ ! telemetryEnabledPerType [ rawEvent . type ! ] ||
136+ ( kind in telemetryEnabledPerMetrics && ! telemetryEnabledPerMetrics [ kind ] )
137+ ) {
116138 return
117139 }
118140
@@ -154,6 +176,7 @@ export function startTelemetryCollection(
154176
155177 return {
156178 enabled : telemetryEnabled ,
179+ enabledMetrics : telemetryEnabledPerMetrics ,
157180 }
158181
159182 function toTelemetryEvent (
0 commit comments