Add filters option to ftr_helper api (#196886)

This commit is contained in:
Sebastián Zaffarano 2024-10-23 14:18:05 -03:00 committed by GitHub
parent d6465c749a
commit 48fe299d5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 52 additions and 7 deletions

View file

@ -14,7 +14,7 @@ import { fetchEvents } from '../common/fetch_events';
import { CustomShipper } from './custom_shipper';
export class AnalyticsFTRHelpers implements Plugin {
public setup({ analytics, http }: CoreSetup, deps: {}) {
public setup({ analytics, http }: CoreSetup, _deps: {}) {
const { optIn, registerShipper } = analytics;
const events$ = new ReplaySubject<Event>();
@ -31,7 +31,7 @@ export class AnalyticsFTRHelpers implements Plugin {
}),
},
},
(context, req, res) => {
(_context, req, res) => {
const { consent } = req.query;
optIn({ global: { enabled: consent } });
@ -67,7 +67,7 @@ export class AnalyticsFTRHelpers implements Plugin {
}),
},
},
async (context, req, res) => {
async (_context, req, res) => {
const { takeNumberOfEvents, ...options } = req.query;
const events = await fetchEvents(events$, takeNumberOfEvents, options);
return res.ok({ body: events });
@ -82,10 +82,25 @@ export class AnalyticsFTRHelpers implements Plugin {
eventTypes: schema.arrayOf(schema.string()),
withTimeoutMs: schema.number(),
fromTimestamp: schema.maybe(schema.string()),
filters: schema.maybe(
schema.recordOf(
schema.string(),
schema.recordOf(
schema.oneOf([
schema.literal('eq'),
schema.literal('gte'),
schema.literal('gt'),
schema.literal('lte'),
schema.literal('lt'),
]),
schema.any()
)
)
),
}),
},
},
async (context, req, res) => {
async (_context, req, res) => {
const events = await fetchEvents(events$, Number.MAX_SAFE_INTEGER, req.query);
return res.ok({ body: { count: events.length } });
}

View file

@ -28,7 +28,7 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT
setOptIn,
getEvents: async (
takeNumberOfEvents,
{ eventTypes = [], withTimeoutMs, fromTimestamp } = {}
{ eventTypes = [], withTimeoutMs, fromTimestamp, filters } = {}
) => {
await setOptIn(true);
const resp = await supertest
@ -38,6 +38,7 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT
eventTypes: JSON.stringify(eventTypes),
withTimeoutMs,
fromTimestamp,
filters: JSON.stringify(filters),
})
.set('kbn-xsrf', 'xxx')
.set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
@ -45,11 +46,16 @@ export function KibanaEBTServerProvider({ getService }: FtrProviderContext): EBT
return resp.body;
},
getEventCount: async ({ eventTypes = [], withTimeoutMs, fromTimestamp }) => {
getEventCount: async ({ eventTypes = [], withTimeoutMs, fromTimestamp, filters }) => {
await setOptIn(true);
const resp = await supertest
.get(`/internal/analytics_ftr_helpers/count_events`)
.query({ eventTypes: JSON.stringify(eventTypes), withTimeoutMs, fromTimestamp })
.query({
eventTypes: JSON.stringify(eventTypes),
withTimeoutMs,
fromTimestamp,
filters: JSON.stringify(filters),
})
.set('kbn-xsrf', 'xxx')
.set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana')
.expect(200);

View file

@ -203,6 +203,30 @@ export default function ({ getService }: FtrProviderContext) {
});
expect(eventCount).to.be(1);
});
it('should return 0 events when filtering by invalid properties', async () => {
const eventCount = await ebtServerHelper.getEventCount({
withTimeoutMs: 500,
eventTypes: ['test-plugin-lifecycle'],
filters: {
'properties.plugin': {
eq: 'analyticsPluginB',
},
},
});
expect(eventCount).to.be(0);
});
it('should return 1 event when filtering by valid properties', async () => {
const eventCount = await ebtServerHelper.getEventCount({
withTimeoutMs: 500,
eventTypes: ['test-plugin-lifecycle'],
filters: {
'properties.step': {
eq: 'start',
},
},
});
expect(eventCount).to.be(1);
});
});
});
});