Skip to content

Commit dc4e2cb

Browse files
mykolaharmashniros1
authored andcommitted
[Streams] Add EBT browser events (#234777)
Partially resolves elastic/streams-program#186 This adds EBT browser events for these actions in the UI: * Processing saved * Stream's retention config changed * Child stream created * Schema changed (field is mapped or unmapped) * Failure store config changed * Significant event suggestions generated * Significant events created Some events also include additional metadata. See their schema definitions for details. ## How to test Go through the mentioned UI actions and make sure you see corresponding events sent via `kibana-browser` endpoint.
1 parent 0d47ffe commit dc4e2cb

File tree

29 files changed

+517
-46
lines changed

29 files changed

+517
-46
lines changed

packages/kbn-optimizer/limits.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ pageLoadAssetSize:
163163
stackAlerts: 31499
164164
stackConnectors: 67939
165165
streams: 8494
166-
streamsApp: 12431
166+
streamsApp: 15200
167167
streamsAppWrapper: 5787
168168
synthetics: 31571
169169
telemetry: 25755

x-pack/platform/plugins/shared/dataset_quality/public/plugin.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export class DatasetQualityPlugin
4545

4646
const dataStreamDetailsService = new DataStreamDetailsService().start({
4747
http: core.http,
48+
telemetryClient,
4849
});
4950

5051
const DatasetQuality = createDatasetQuality({

x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,13 @@ import type {
5757
UpdateFieldLimitParams,
5858
} from '../../../common/data_stream_details/types';
5959
import { DatasetQualityError } from '../../../common/errors';
60+
import type { ITelemetryClient } from '../telemetry';
6061

6162
export class DataStreamDetailsClient implements IDataStreamDetailsClient {
62-
constructor(private readonly http: HttpStart) {}
63+
constructor(
64+
private readonly http: HttpStart,
65+
private readonly telemetryClient: ITelemetryClient
66+
) {}
6367

6468
public async getDataStreamSettings({ dataStream }: GetDataStreamSettingsParams) {
6569
const response = await this.http
@@ -338,6 +342,12 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient {
338342
throw new DatasetQualityError(`Failed to update failure store": ${error}`, error);
339343
});
340344

345+
this.telemetryClient.trackFailureStoreUpdated({
346+
data_stream_name: dataStream,
347+
failure_store_enabled: failureStoreEnabled,
348+
custom_retention_period: customRetentionPeriod,
349+
});
350+
341351
return decodeOrThrow(
342352
updateFailureStoreResponseRt,
343353
(message: string) =>

x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/data_stream_details_service.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ export class DataStreamDetailsService {
1717

1818
public setup(): DataStreamDetailsServiceSetup {}
1919

20-
public start({ http }: DataStreamDetailsServiceStartDeps): DataStreamDetailsServiceStart {
20+
public start({
21+
http,
22+
telemetryClient,
23+
}: DataStreamDetailsServiceStartDeps): DataStreamDetailsServiceStart {
2124
return {
22-
getClient: () => this.getClient({ http }),
25+
getClient: () => this.getClient({ http, telemetryClient }),
2326
};
2427
}
2528

26-
private async getClient({ http }: DataStreamDetailsServiceStartDeps) {
29+
private async getClient({ http, telemetryClient }: DataStreamDetailsServiceStartDeps) {
2730
if (!this.client) {
2831
const { DataStreamDetailsClient } = await import('./data_stream_details_client');
29-
const client = new DataStreamDetailsClient(http);
32+
const client = new DataStreamDetailsClient(http, telemetryClient);
3033
this.client = client;
3134
}
3235

x-pack/platform/plugins/shared/dataset_quality/public/services/data_stream_details/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import type {
3737
UpdateFailureStoreResponse,
3838
NonAggregatableDatasets,
3939
} from '../../../common/api_types';
40+
import type { ITelemetryClient } from '../telemetry';
4041

4142
export type DataStreamDetailsServiceSetup = void;
4243

@@ -46,6 +47,7 @@ export interface DataStreamDetailsServiceStart {
4647

4748
export interface DataStreamDetailsServiceStartDeps {
4849
http: HttpStart;
50+
telemetryClient: ITelemetryClient;
4951
}
5052

5153
export interface IDataStreamDetailsClient {

x-pack/platform/plugins/shared/dataset_quality/public/services/telemetry/telemetry_client.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type {
1313
DatasetDetailsNavigatedEbtProps,
1414
DatasetDetailsTrackingState,
1515
DatasetNavigatedEbtProps,
16+
FailureStoreUpdateEbtProps,
1617
} from './types';
1718
import { DatasetQualityTelemetryEventTypes } from './types';
1819

@@ -62,4 +63,8 @@ export class TelemetryClient implements ITelemetryClient {
6263
tracking_id: this.datasetDetailsTrackingId,
6364
});
6465
};
66+
67+
public trackFailureStoreUpdated = (eventProps: FailureStoreUpdateEbtProps) => {
68+
this.analytics.reportEvent(DatasetQualityTelemetryEventTypes.FAILURE_STORE_UPDATED, eventProps);
69+
};
6570
}

x-pack/platform/plugins/shared/dataset_quality/public/services/telemetry/telemetry_events.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,35 @@ const datasetDetailsBreakdownFieldChangedEventType: DatasetQualityTelemetryEvent
288288
},
289289
};
290290

291+
const failureStoreUpdatedEventType: DatasetQualityTelemetryEvent = {
292+
eventType: DatasetQualityTelemetryEventTypes.FAILURE_STORE_UPDATED,
293+
schema: {
294+
data_stream_name: {
295+
type: 'keyword',
296+
_meta: {
297+
description: 'Name of the data stream',
298+
},
299+
},
300+
failure_store_enabled: {
301+
type: 'boolean',
302+
_meta: {
303+
description: 'Whether failure store is enabled for the datastream',
304+
},
305+
},
306+
custom_retention_period: {
307+
type: 'keyword',
308+
_meta: {
309+
description: 'Custom retention period if set, otherwise system default applies',
310+
optional: true,
311+
},
312+
},
313+
},
314+
};
315+
291316
export const datasetQualityEbtEvents = {
292317
datasetNavigatedEventType,
293318
datasetDetailsOpenedEventType,
294319
datasetDetailsNavigatedEventType,
295320
datasetDetailsBreakdownFieldChangedEventType,
321+
failureStoreUpdatedEventType,
296322
};

x-pack/platform/plugins/shared/dataset_quality/public/services/telemetry/telemetry_service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export class TelemetryService {
2525
analytics.registerEventType(
2626
datasetQualityEbtEvents.datasetDetailsBreakdownFieldChangedEventType
2727
);
28+
analytics.registerEventType(datasetQualityEbtEvents.failureStoreUpdatedEventType);
2829
}
2930

3031
public start(): ITelemetryClient {

x-pack/platform/plugins/shared/dataset_quality/public/services/telemetry/types.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,20 +100,28 @@ export interface DatasetDetailsNavigatedEbtProps extends DatasetDetailsEbtProps
100100
source: NavigationSource;
101101
}
102102

103+
export interface FailureStoreUpdateEbtProps {
104+
data_stream_name: string;
105+
failure_store_enabled: boolean;
106+
custom_retention_period?: string;
107+
}
108+
103109
export interface ITelemetryClient {
104110
trackDatasetNavigated: (eventProps: DatasetNavigatedEbtProps) => void;
105111
startDatasetDetailsTracking: () => void;
106112
getDatasetDetailsTrackingState: () => DatasetDetailsTrackingState;
107113
trackDatasetDetailsOpened: (eventProps: DatasetDetailsEbtProps) => void;
108114
trackDatasetDetailsNavigated: (eventProps: DatasetDetailsNavigatedEbtProps) => void;
109115
trackDatasetDetailsBreakdownFieldChanged: (eventProps: DatasetDetailsEbtProps) => void;
116+
trackFailureStoreUpdated: (eventProps: FailureStoreUpdateEbtProps) => void;
110117
}
111118

112119
export enum DatasetQualityTelemetryEventTypes {
113120
NAVIGATED = 'Dataset Quality Navigated',
114121
DETAILS_OPENED = 'Dataset Quality Dataset Details Opened',
115122
DETAILS_NAVIGATED = 'Dataset Quality Dataset Details Navigated',
116123
BREAKDOWN_FIELD_CHANGED = 'Dataset Quality Dataset Details Breakdown Field Changed',
124+
FAILURE_STORE_UPDATED = 'Failure Store Status Updated For A dataStream',
117125
}
118126

119127
export type DatasetQualityTelemetryEvent =
@@ -132,4 +140,8 @@ export type DatasetQualityTelemetryEvent =
132140
| {
133141
eventType: DatasetQualityTelemetryEventTypes.BREAKDOWN_FIELD_CHANGED;
134142
schema: RootSchema<DatasetDetailsEbtProps & WithTrackingId>;
143+
}
144+
| {
145+
eventType: DatasetQualityTelemetryEventTypes.FAILURE_STORE_UPDATED;
146+
schema: RootSchema<FailureStoreUpdateEbtProps>;
135147
};

x-pack/platform/plugins/shared/streams_app/public/components/data_management/schema_editor/hooks/use_schema_fields.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { getAdvancedParameters } from '@kbn/streams-schema';
1212
import { isEqual } from 'lodash';
1313
import { useMemo, useCallback, useState } from 'react';
1414
import { useAbortController, useAbortableAsync } from '@kbn/react-hooks';
15+
import { getStreamTypeFromDefinition } from '../../../../util/get_stream_type_from_definition';
1516
import { useStreamsAppFetch } from '../../../../hooks/use_streams_app_fetch';
1617
import { useKibana } from '../../../../hooks/use_kibana';
1718
import type { MappedSchemaField, SchemaField } from '../types';
@@ -35,6 +36,7 @@ export const useSchemaFields = ({
3536
core: {
3637
notifications: { toasts },
3738
},
39+
services: { telemetryClient },
3840
} = useKibana();
3941

4042
const abortController = useAbortController();
@@ -218,6 +220,10 @@ export const useSchemaFields = ({
218220
},
219221
});
220222

223+
telemetryClient.trackSchemaUpdated({
224+
stream_type: getStreamTypeFromDefinition(definition.stream),
225+
});
226+
221227
toasts.addSuccess(
222228
i18n.translate('xpack.streams.streamDetailSchemaEditorEditSuccessToast', {
223229
defaultMessage: 'Schema was successfully modified',
@@ -234,7 +240,15 @@ export const useSchemaFields = ({
234240
toastLifeTimeMs: 5000,
235241
});
236242
}
237-
}, [fields, streamsRepositoryClient, abortController.signal, definition, toasts, refreshFields]);
243+
}, [
244+
fields,
245+
streamsRepositoryClient,
246+
abortController.signal,
247+
definition,
248+
telemetryClient,
249+
toasts,
250+
refreshFields,
251+
]);
238252

239253
return {
240254
fields,

0 commit comments

Comments
 (0)