1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-08-23 13:46:45 +02:00

feat: ability to search events by type with pagination (#10217)

This helps us to use this feature to implement partial user sync by
observing the changes in the audit log
This commit is contained in:
Gastón Fournier 2025-06-26 14:42:29 +02:00 committed by GitHub
parent 67f81d5d0b
commit 0f9774800e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 16 additions and 15 deletions

View File

@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
permissions:
contents: read
pull_requests: write
pull-requests: write
name: build # temporary solution to trick branch protection rules
services:

View File

@ -1,4 +1,4 @@
import EventStore from '../features/events/event-store.js';
import { EventStore } from '../features/events/event-store.js';
// For backward compatibility
export * from '../features/events/event-store.js';
export default EventStore;

View File

@ -7,7 +7,7 @@ import {
ReleasePlanTemplateStore,
} from '../types/index.js';
import EventStore from '../features/events/event-store.js';
import { EventStore } from '../features/events/event-store.js';
import FeatureToggleStore from '../features/feature-toggle/feature-toggle-store.js';
import FeatureTypeStore from './feature-type-store.js';
import StrategyStore from './strategy-store.js';

View File

@ -1,5 +1,5 @@
import { ClientFeatureToggleDelta } from './client-feature-toggle-delta.js';
import EventStore from '../../events/event-store.js';
import { EventStore } from '../../events/event-store.js';
import ConfigurationRevisionService from '../../feature-toggle/configuration-revision-service.js';
import type { IUnleashConfig } from '../../../types/index.js';
import type { Db } from '../../../db/db.js';

View File

@ -1,7 +1,7 @@
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store.js';
import type { Db } from '../../db/db.js';
import EventStore from './event-store.js';
import { EventStore } from './event-store.js';
import FeatureTagStore from '../../db/feature-tag-store.js';
import { EventService } from '../../services/index.js';
import type {

View File

@ -1,4 +1,4 @@
import EventStore from './event-store.js';
import { EventStore } from './event-store.js';
import getLogger from '../../../test/fixtures/no-logger.js';
import dbInit, {
type ITestDb,

View File

@ -1,5 +1,5 @@
import knex from 'knex';
import EventStore from './event-store.js';
import { EventStore } from './event-store.js';
import getLogger from '../../../test/fixtures/no-logger.js';
import { subHours, formatRFC3339 } from 'date-fns';
import dbInit from '../../../test/e2e/helpers/database-init.js';

View File

@ -101,7 +101,7 @@ export interface IEventTable {
const TABLE = 'events';
class EventStore implements IEventStore {
export class EventStore implements IEventStore {
private db: Db;
// only one shared event emitter should exist across all event store instances
@ -375,7 +375,7 @@ class EventStore implements IEventStore {
): Promise<IEvent[]> {
const query = this.buildSearchQuery(queryParams, params.query)
.select(options?.withIp ? [...EVENT_COLUMNS, 'ip'] : EVENT_COLUMNS)
.orderBy('created_at', 'desc')
.orderBy('created_at', params.order || 'desc')
.limit(Number(params.limit) ?? 100)
.offset(Number(params.offset) ?? 0);

View File

@ -3,7 +3,7 @@ import { FakeFeatureLifecycleStore } from './fake-feature-lifecycle-store.js';
import { FeatureLifecycleService } from './feature-lifecycle-service.js';
import FakeEnvironmentStore from '../project-environments/fake-environment-store.js';
import type { IUnleashConfig } from '../../types/index.js';
import EventStore from '../../db/event-store.js';
import { EventStore } from '../../db/event-store.js';
import type { Db } from '../../db/db.js';
import { FeatureLifecycleStore } from './feature-lifecycle-store.js';
import EnvironmentStore from '../project-environments/environment-store.js';

View File

@ -20,7 +20,7 @@ import SegmentStore from '../segment/segment-store.js';
import RoleStore from '../../db/role-store.js';
import SettingStore from '../../db/setting-store.js';
import ClientInstanceStore from '../../db/client-instance-store.js';
import EventStore from '../events/event-store.js';
import { EventStore } from '../events/event-store.js';
import { ApiTokenStore } from '../../db/api-token-store.js';
import { ClientMetricsStoreV2 } from '../metrics/client-metrics/client-metrics-store-v2.js';
import VersionService from '../../services/version-service.js';

View File

@ -7,7 +7,7 @@ import { ProjectOwnersReadModel } from '../project/project-owners-read-model.js'
import { FakeProjectOwnersReadModel } from '../project/fake-project-owners-read-model.js';
import { ProjectReadModel } from '../project/project-read-model.js';
import { FakeProjectReadModel } from '../project/fake-project-read-model.js';
import EventStore from '../../db/event-store.js';
import { EventStore } from '../../db/event-store.js';
import { FeatureEventFormatterMd } from '../../addons/feature-event-formatter-md.js';
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
import { FakePrivateProjectChecker } from '../private-project/fakePrivateProjectChecker.js';

View File

@ -1,6 +1,6 @@
import type { Db, IUnleashConfig } from '../../types/index.js';
import { ProjectStatusService } from './project-status-service.js';
import EventStore from '../events/event-store.js';
import { EventStore } from '../events/event-store.js';
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
import ProjectStore from '../project/project-store.js';
import FakeProjectStore from '../../../test/fixtures/fake-project-store.js';

View File

@ -1,5 +1,5 @@
import type { Db, IUnleashConfig } from '../../types/index.js';
import EventStore from '../events/event-store.js';
import { EventStore } from '../events/event-store.js';
import GroupStore from '../../db/group-store.js';
import { AccountStore } from '../../db/account-store.js';
import EnvironmentStore from '../project-environments/environment-store.js';

View File

@ -126,7 +126,7 @@ import metricsHelper from './util/metrics-helper.js';
import type { ReleasePlanMilestoneWriteModel } from './features/release-plans/release-plan-milestone-store.js';
import type { ReleasePlanMilestoneStrategyWriteModel } from './features/release-plans/release-plan-milestone-strategy-store.js';
import type { IChangeRequestAccessReadModel } from './features/change-request-access-service/change-request-access-read-model.js';
import EventStore from './db/event-store.js';
import { EventStore } from './db/event-store.js';
import RoleStore from './db/role-store.js';
import { AccessStore } from './db/access-store.js';
import {

View File

@ -15,6 +15,7 @@ export interface IEventSearchParams {
createdBy?: string;
type?: string;
environment?: string;
order?: 'asc' | 'desc'; // desc by default
offset: number;
limit: number;
}