Skip to content

Commit

Permalink
[Search] remove as & ws telemetry usage (elastic#206974)
Browse files Browse the repository at this point in the history
## Summary

Removing usage of telemetry for AppSearch & Workplace Search

### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
  • Loading branch information
TattdCodeMonkey authored Jan 21, 2025
1 parent 1e688f2 commit b8f9778
Show file tree
Hide file tree
Showing 8 changed files with 12 additions and 120 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
export const mockTelemetryActions = {
sendTelemetry: jest.fn(),
sendEnterpriseSearchTelemetry: jest.fn(),
sendAppSearchTelemetry: jest.fn(),
sendWorkplaceSearchTelemetry: jest.fn(),
};

jest.mock('../../shared/telemetry', () => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,4 @@
*/

export { TelemetryLogic } from './telemetry_logic';
export {
SendEnterpriseSearchTelemetry,
SendAppSearchTelemetry,
SendWorkplaceSearchTelemetry,
} from './send_telemetry';
export { SendEnterpriseSearchTelemetry } from './send_telemetry';
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,7 @@ import React from 'react';

import { shallow } from 'enzyme';

import {
SendEnterpriseSearchTelemetry,
SendAppSearchTelemetry,
SendWorkplaceSearchTelemetry,
} from '.';
import { SendEnterpriseSearchTelemetry } from '.';

describe('Telemetry component helpers', () => {
beforeEach(() => {
Expand All @@ -32,24 +28,4 @@ describe('Telemetry component helpers', () => {
product: 'enterprise_search',
});
});

it('SendAppSearchTelemetry', () => {
shallow(<SendAppSearchTelemetry action="clicked" metric="button" />);

expect(mockTelemetryActions.sendTelemetry).toHaveBeenCalledWith({
action: 'clicked',
metric: 'button',
product: 'app_search',
});
});

it('SendWorkplaceSearchTelemetry', () => {
shallow(<SendWorkplaceSearchTelemetry action="error" metric="not_found" />);

expect(mockTelemetryActions.sendTelemetry).toHaveBeenCalledWith({
action: 'error',
metric: 'not_found',
product: 'workplace_search',
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,3 @@ export const SendEnterpriseSearchTelemetry: React.FC<SendTelemetryHelper> = ({

return null;
};

export const SendAppSearchTelemetry: React.FC<SendTelemetryHelper> = ({ action, metric }) => {
const { sendTelemetry } = useActions(TelemetryLogic);

useEffect(() => {
sendTelemetry({ action, metric, product: 'app_search' });
}, [action, metric]);

return null;
};

export const SendWorkplaceSearchTelemetry: React.FC<SendTelemetryHelper> = ({ action, metric }) => {
const { sendTelemetry } = useActions(TelemetryLogic);

useEffect(() => {
sendTelemetry({ action, metric, product: 'workplace_search' });
}, [action, metric]);

return null;
};
Original file line number Diff line number Diff line change
Expand Up @@ -61,27 +61,5 @@ describe('Telemetry logic', () => {
});
});
});

describe('sendAppSearchTelemetry', () => {
it('calls sendTelemetry with the product populated', () => {
TelemetryLogic.actions.sendAppSearchTelemetry(telemetryEvent);

expect(TelemetryLogic.actions.sendTelemetry).toHaveBeenCalledWith({
...telemetryEvent,
product: 'app_search',
});
});
});

describe('sendWorkplaceSearchTelemetry', () => {
it('calls sendTelemetry with the product populated', () => {
TelemetryLogic.actions.sendWorkplaceSearchTelemetry(telemetryEvent);

expect(TelemetryLogic.actions.sendTelemetry).toHaveBeenCalledWith({
...telemetryEvent,
product: 'workplace_search',
});
});
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,20 @@ import { HttpLogic } from '../http';
interface SendTelemetry {
action: 'viewed' | 'error' | 'clicked';
metric: string; // e.g., 'setup_guide'
product: 'enterprise_search' | 'app_search' | 'workplace_search';
product: 'enterprise_search';
}
export type SendTelemetryHelper = Omit<SendTelemetry, 'product'>;

interface TelemetryActions {
sendTelemetry(args: SendTelemetry): SendTelemetry;
sendEnterpriseSearchTelemetry(args: SendTelemetryHelper): SendTelemetryHelper;
sendAppSearchTelemetry(args: SendTelemetryHelper): SendTelemetryHelper;
sendWorkplaceSearchTelemetry(args: SendTelemetryHelper): SendTelemetryHelper;
}

export const TelemetryLogic = kea<MakeLogicType<TelemetryActions>>({
path: ['enterprise_search', 'telemetry_logic'],
actions: {
sendTelemetry: ({ action, metric, product }) => ({ action, metric, product }),
sendEnterpriseSearchTelemetry: ({ action, metric }) => ({ action, metric }),
sendAppSearchTelemetry: ({ action, metric }) => ({ action, metric }),
sendWorkplaceSearchTelemetry: ({ action, metric }) => ({ action, metric }),
},
listeners: ({ actions }) => ({
sendTelemetry: async ({ action, metric, product }: SendTelemetry) => {
Expand All @@ -44,9 +40,5 @@ export const TelemetryLogic = kea<MakeLogicType<TelemetryActions>>({
},
sendEnterpriseSearchTelemetry: ({ action, metric }: SendTelemetryHelper) =>
actions.sendTelemetry({ action, metric, product: 'enterprise_search' }),
sendAppSearchTelemetry: ({ action, metric }: SendTelemetryHelper) =>
actions.sendTelemetry({ action, metric, product: 'app_search' }),
sendWorkplaceSearchTelemetry: ({ action, metric }: SendTelemetryHelper) =>
actions.sendTelemetry({ action, metric, product: 'workplace_search' }),
}),
});
Original file line number Diff line number Diff line change
Expand Up @@ -41,46 +41,26 @@ describe('Enterprise Search Telemetry API', () => {
});

describe('PUT /internal/enterprise_search/stats', () => {
it('increments the saved objects counter for App Search', async () => {
it('increments the saved objects counter for Enterprise Search', async () => {
(incrementUICounter as jest.Mock).mockImplementation(jest.fn(() => successResponse));

await mockRouter.callRoute({
body: {
product: 'app_search',
product: 'enterprise_search',
action: 'viewed',
metric: 'setup_guide',
},
});

expect(incrementUICounter).toHaveBeenCalledWith({
id: 'app_search_telemetry',
id: 'enterprise_search_telemetry',
savedObjects: expect.any(Object),
uiAction: 'ui_viewed',
metric: 'setup_guide',
});
expect(mockRouter.response.ok).toHaveBeenCalledWith({ body: successResponse });
});

it('increments the saved objects counter for Workplace Search', async () => {
(incrementUICounter as jest.Mock).mockImplementation(jest.fn(() => successResponse));

await mockRouter.callRoute({
body: {
product: 'workplace_search',
action: 'clicked',
metric: 'onboarding_card_button',
},
});

expect(incrementUICounter).toHaveBeenCalledWith({
id: 'workplace_search_telemetry',
savedObjects: expect.any(Object),
uiAction: 'ui_clicked',
metric: 'onboarding_card_button',
});
expect(mockRouter.response.ok).toHaveBeenCalledWith({ body: successResponse });
});

it('throws an error when incrementing fails', async () => {
(incrementUICounter as jest.Mock).mockImplementation(jest.fn(() => Promise.reject('Failed')));

Expand Down Expand Up @@ -112,21 +92,21 @@ describe('Enterprise Search Telemetry API', () => {
describe('validates', () => {
it('correctly', () => {
const request = {
body: { product: 'workplace_search', action: 'viewed', metric: 'setup_guide' },
body: { product: 'enterprise_search', action: 'viewed', metric: 'setup_guide' },
};
mockRouter.shouldValidate(request);
});

it('wrong product string', () => {
const request = {
body: { product: 'workspace_space_search', action: 'viewed', metric: 'setup_guide' },
body: { product: 'enterprise_space_search', action: 'viewed', metric: 'setup_guide' },
};
mockRouter.shouldThrow(request);
});

it('wrong action string', () => {
const request = {
body: { product: 'app_search', action: 'invalid', metric: 'setup_guide' },
body: { product: 'enterprise_search', action: 'invalid', metric: 'setup_guide' },
};
mockRouter.shouldThrow(request);
});
Expand All @@ -142,12 +122,12 @@ describe('Enterprise Search Telemetry API', () => {
});

it('action is missing', () => {
const request = { body: { product: 'app_search', metric: 'engines_overview' } };
const request = { body: { product: 'enterprise_search', metric: 'setup_guide' } };
mockRouter.shouldThrow(request);
});

it('metric is missing', () => {
const request = { body: { product: 'app_search', action: 'error' } };
const request = { body: { product: 'enterprise_search', action: 'error' } };
mockRouter.shouldThrow(request);
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,13 @@

import { schema } from '@kbn/config-schema';

import { AS_TELEMETRY_NAME } from '../../collectors/app_search/telemetry';
import { ES_TELEMETRY_NAME } from '../../collectors/enterprise_search/telemetry';
import { incrementUICounter } from '../../collectors/lib/telemetry';
import { WS_TELEMETRY_NAME } from '../../collectors/workplace_search/telemetry';

import { RouteDependencies } from '../../plugin';

const productToTelemetryMap = {
enterprise_search: ES_TELEMETRY_NAME,
app_search: AS_TELEMETRY_NAME,
workplace_search: WS_TELEMETRY_NAME,
};

export function registerTelemetryRoute({ router, getSavedObjectsService }: RouteDependencies) {
Expand All @@ -26,11 +22,7 @@ export function registerTelemetryRoute({ router, getSavedObjectsService }: Route
path: '/internal/enterprise_search/stats',
validate: {
body: schema.object({
product: schema.oneOf([
schema.literal('app_search'),
schema.literal('workplace_search'),
schema.literal('enterprise_search'),
]),
product: schema.oneOf([schema.literal('enterprise_search')]),
action: schema.oneOf([
schema.literal('viewed'),
schema.literal('clicked'),
Expand Down

0 comments on commit b8f9778

Please sign in to comment.