mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[Infrastructure UI] Telemetry: Host view flyout - Add / Remove filter (#155511)
Closes [#155415](https://github.com/elastic/kibana/issues/155415) ## Summary This PR adds telemetry for the flyout add/remove filter events # Testing - Open the hosts view flyout, select the metadata tab and add/remove a filter from there - Check in the network tab - there should be a request to the telemetry cluster including the events: <img width="2126" alt="image" src="https://user-images.githubusercontent.com/14139027/233965729-58fd6266-7851-48e5-acf0-e395b4fd7ebe.png"> - It should be also visible in [FS](https://app.fullstory.com/ui/1397FY/home) under API events (for some reason I don't see the events made from my machine in FS at all so I couldn't check it there)
This commit is contained in:
parent
65a4ae6a7f
commit
460e9a707c
7 changed files with 125 additions and 4 deletions
|
@ -22,6 +22,8 @@ const configSchema = schema.object({
|
|||
'Loaded Kibana', // Sent once per page refresh (potentially, once per session)
|
||||
'Hosts View Query Submitted', // Worst-case scenario 1 every 2 seconds
|
||||
'Host Entry Clicked', // Worst-case scenario once per second - AT RISK,
|
||||
'Host Flyout Filter Removed', // Worst-case scenario once per second - AT RISK,
|
||||
'Host Flyout Filter Added', // Worst-case scenario once per second - AT RISK,
|
||||
],
|
||||
}),
|
||||
});
|
||||
|
|
|
@ -37,6 +37,7 @@ export const AddMetadataFilterButton = ({ item }: AddMetadataFilterButtonProps)
|
|||
query: { filterManager: filterManagerService },
|
||||
},
|
||||
notifications: { toasts: toastsService },
|
||||
telemetry,
|
||||
},
|
||||
} = useKibanaContextForPlugin();
|
||||
|
||||
|
@ -53,6 +54,9 @@ export const AddMetadataFilterButton = ({ item }: AddMetadataFilterButtonProps)
|
|||
negate: false,
|
||||
});
|
||||
if (newFilter) {
|
||||
telemetry.reportHostFlyoutFilterAdded({
|
||||
field_name: item.name,
|
||||
});
|
||||
filterManagerService.addFilters(newFilter);
|
||||
toastsService.addSuccess({
|
||||
title: filterAddedToastTitle,
|
||||
|
@ -84,7 +88,12 @@ export const AddMetadataFilterButton = ({ item }: AddMetadataFilterButtonProps)
|
|||
defaultMessage: 'Filter',
|
||||
}
|
||||
)}
|
||||
onClick={() => filterManagerService.removeFilter(existingFilter)}
|
||||
onClick={() => {
|
||||
telemetry.reportHostFlyoutFilterRemoved({
|
||||
field_name: existingFilter.meta.key!,
|
||||
});
|
||||
filterManagerService.removeFilter(existingFilter);
|
||||
}}
|
||||
/>
|
||||
</EuiToolTip>
|
||||
</span>
|
||||
|
|
|
@ -10,4 +10,6 @@ import { ITelemetryClient } from './types';
|
|||
export const createTelemetryClientMock = (): jest.Mocked<ITelemetryClient> => ({
|
||||
reportHostEntryClicked: jest.fn(),
|
||||
reportHostsViewQuerySubmitted: jest.fn(),
|
||||
reportHostFlyoutFilterRemoved: jest.fn(),
|
||||
reportHostFlyoutFilterAdded: jest.fn(),
|
||||
});
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
import { AnalyticsServiceSetup } from '@kbn/core-analytics-server';
|
||||
import {
|
||||
HostEntryClickedParams,
|
||||
HostFlyoutFilterActionParams,
|
||||
HostsViewQuerySubmittedParams,
|
||||
InfraTelemetryEventTypes,
|
||||
ITelemetryClient,
|
||||
|
@ -30,6 +31,22 @@ export class TelemetryClient implements ITelemetryClient {
|
|||
});
|
||||
};
|
||||
|
||||
public reportHostFlyoutFilterRemoved = ({
|
||||
field_name: fieldName,
|
||||
}: HostFlyoutFilterActionParams) => {
|
||||
this.analytics.reportEvent(InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_REMOVED, {
|
||||
field_name: fieldName,
|
||||
});
|
||||
};
|
||||
|
||||
public reportHostFlyoutFilterAdded = ({
|
||||
field_name: fieldName,
|
||||
}: HostFlyoutFilterActionParams) => {
|
||||
this.analytics.reportEvent(InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_ADDED, {
|
||||
field_name: fieldName,
|
||||
});
|
||||
};
|
||||
|
||||
public reportHostsViewQuerySubmitted = (params: HostsViewQuerySubmittedParams) => {
|
||||
this.analytics.reportEvent(InfraTelemetryEventTypes.HOSTS_VIEW_QUERY_SUBMITTED, params);
|
||||
};
|
||||
|
|
|
@ -66,4 +66,34 @@ const hostsEntryClickedEvent: InfraTelemetryEvent = {
|
|||
},
|
||||
};
|
||||
|
||||
export const infraTelemetryEvents = [hostsViewQuerySubmittedEvent, hostsEntryClickedEvent];
|
||||
const hostFlyoutRemoveFilter: InfraTelemetryEvent = {
|
||||
eventType: InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_REMOVED,
|
||||
schema: {
|
||||
field_name: {
|
||||
type: 'keyword',
|
||||
_meta: {
|
||||
description: 'Removed filter field name for the selected host.',
|
||||
optional: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
const hostFlyoutAddFilter: InfraTelemetryEvent = {
|
||||
eventType: InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_ADDED,
|
||||
schema: {
|
||||
field_name: {
|
||||
type: 'keyword',
|
||||
_meta: {
|
||||
description: 'Added filter field name for the selected host.',
|
||||
optional: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const infraTelemetryEvents = [
|
||||
hostsViewQuerySubmittedEvent,
|
||||
hostsEntryClickedEvent,
|
||||
hostFlyoutRemoveFilter,
|
||||
hostFlyoutAddFilter,
|
||||
];
|
||||
|
|
|
@ -49,6 +49,8 @@ describe('TelemetryService', () => {
|
|||
const telemetry = service.start();
|
||||
|
||||
expect(telemetry).toHaveProperty('reportHostEntryClicked');
|
||||
expect(telemetry).toHaveProperty('reportHostFlyoutFilterRemoved');
|
||||
expect(telemetry).toHaveProperty('reportHostFlyoutFilterAdded');
|
||||
expect(telemetry).toHaveProperty('reportHostsViewQuerySubmitted');
|
||||
});
|
||||
});
|
||||
|
@ -74,7 +76,7 @@ describe('TelemetryService', () => {
|
|||
);
|
||||
});
|
||||
|
||||
it('should report hosts entry click with cloud provider equal to "unknow" if not exist', async () => {
|
||||
it('should report hosts entry click with cloud provider equal to "unknown" if not exist', async () => {
|
||||
const setupParams = getSetupParams();
|
||||
service.setup(setupParams);
|
||||
const telemetry = service.start();
|
||||
|
@ -119,4 +121,44 @@ describe('TelemetryService', () => {
|
|||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#reportHostFlyoutFilterRemoved', () => {
|
||||
it('should report Host Flyout Filter Removed click with field name', async () => {
|
||||
const setupParams = getSetupParams();
|
||||
service.setup(setupParams);
|
||||
const telemetry = service.start();
|
||||
|
||||
telemetry.reportHostFlyoutFilterRemoved({
|
||||
field_name: 'agent.version',
|
||||
});
|
||||
|
||||
expect(setupParams.analytics.reportEvent).toHaveBeenCalledTimes(1);
|
||||
expect(setupParams.analytics.reportEvent).toHaveBeenCalledWith(
|
||||
InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_REMOVED,
|
||||
{
|
||||
field_name: 'agent.version',
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#reportHostFlyoutFilterAdded', () => {
|
||||
it('should report Host Flyout Filter Added click with field name', async () => {
|
||||
const setupParams = getSetupParams();
|
||||
service.setup(setupParams);
|
||||
const telemetry = service.start();
|
||||
|
||||
telemetry.reportHostFlyoutFilterAdded({
|
||||
field_name: 'agent.version',
|
||||
});
|
||||
|
||||
expect(setupParams.analytics.reportEvent).toHaveBeenCalledTimes(1);
|
||||
expect(setupParams.analytics.reportEvent).toHaveBeenCalledWith(
|
||||
InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_ADDED,
|
||||
{
|
||||
field_name: 'agent.version',
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -15,6 +15,8 @@ export interface TelemetryServiceSetupParams {
|
|||
export enum InfraTelemetryEventTypes {
|
||||
HOSTS_VIEW_QUERY_SUBMITTED = 'Hosts View Query Submitted',
|
||||
HOSTS_ENTRY_CLICKED = 'Host Entry Clicked',
|
||||
HOST_FLYOUT_FILTER_REMOVED = 'Host Flyout Filter Removed',
|
||||
HOST_FLYOUT_FILTER_ADDED = 'Host Flyout Filter Added',
|
||||
}
|
||||
|
||||
export interface HostsViewQuerySubmittedParams {
|
||||
|
@ -29,10 +31,19 @@ export interface HostEntryClickedParams {
|
|||
cloud_provider?: string | null;
|
||||
}
|
||||
|
||||
export type InfraTelemetryEventParams = HostsViewQuerySubmittedParams | HostEntryClickedParams;
|
||||
export interface HostFlyoutFilterActionParams {
|
||||
field_name: string;
|
||||
}
|
||||
|
||||
export type InfraTelemetryEventParams =
|
||||
| HostsViewQuerySubmittedParams
|
||||
| HostEntryClickedParams
|
||||
| HostFlyoutFilterActionParams;
|
||||
|
||||
export interface ITelemetryClient {
|
||||
reportHostEntryClicked(params: HostEntryClickedParams): void;
|
||||
reportHostFlyoutFilterRemoved(params: HostFlyoutFilterActionParams): void;
|
||||
reportHostFlyoutFilterAdded(params: HostFlyoutFilterActionParams): void;
|
||||
reportHostsViewQuerySubmitted(params: HostsViewQuerySubmittedParams): void;
|
||||
}
|
||||
|
||||
|
@ -41,6 +52,14 @@ export type InfraTelemetryEvent =
|
|||
eventType: InfraTelemetryEventTypes.HOSTS_VIEW_QUERY_SUBMITTED;
|
||||
schema: RootSchema<HostsViewQuerySubmittedParams>;
|
||||
}
|
||||
| {
|
||||
eventType: InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_ADDED;
|
||||
schema: RootSchema<HostFlyoutFilterActionParams>;
|
||||
}
|
||||
| {
|
||||
eventType: InfraTelemetryEventTypes.HOST_FLYOUT_FILTER_REMOVED;
|
||||
schema: RootSchema<HostFlyoutFilterActionParams>;
|
||||
}
|
||||
| {
|
||||
eventType: InfraTelemetryEventTypes.HOSTS_ENTRY_CLICKED;
|
||||
schema: RootSchema<HostEntryClickedParams>;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue