mirror of
https://github.com/Unleash/unleash.git
synced 2025-10-13 11:17:26 +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:
parent
67f81d5d0b
commit
0f9774800e
2
.github/workflows/build_prs_jest_report.yaml
vendored
2
.github/workflows/build_prs_jest_report.yaml
vendored
@ -14,7 +14,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull_requests: write
|
pull-requests: write
|
||||||
name: build # temporary solution to trick branch protection rules
|
name: build # temporary solution to trick branch protection rules
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import EventStore from '../features/events/event-store.js';
|
import { EventStore } from '../features/events/event-store.js';
|
||||||
// For backward compatibility
|
// For backward compatibility
|
||||||
export * from '../features/events/event-store.js';
|
export * from '../features/events/event-store.js';
|
||||||
export default EventStore;
|
export default EventStore;
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
ReleasePlanTemplateStore,
|
ReleasePlanTemplateStore,
|
||||||
} from '../types/index.js';
|
} 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 FeatureToggleStore from '../features/feature-toggle/feature-toggle-store.js';
|
||||||
import FeatureTypeStore from './feature-type-store.js';
|
import FeatureTypeStore from './feature-type-store.js';
|
||||||
import StrategyStore from './strategy-store.js';
|
import StrategyStore from './strategy-store.js';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ClientFeatureToggleDelta } from './client-feature-toggle-delta.js';
|
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 ConfigurationRevisionService from '../../feature-toggle/configuration-revision-service.js';
|
||||||
import type { IUnleashConfig } from '../../../types/index.js';
|
import type { IUnleashConfig } from '../../../types/index.js';
|
||||||
import type { Db } from '../../../db/db.js';
|
import type { Db } from '../../../db/db.js';
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
|
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
|
||||||
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store.js';
|
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store.js';
|
||||||
import type { Db } from '../../db/db.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 FeatureTagStore from '../../db/feature-tag-store.js';
|
||||||
import { EventService } from '../../services/index.js';
|
import { EventService } from '../../services/index.js';
|
||||||
import type {
|
import type {
|
||||||
|
@ -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 getLogger from '../../../test/fixtures/no-logger.js';
|
||||||
import dbInit, {
|
import dbInit, {
|
||||||
type ITestDb,
|
type ITestDb,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import knex from 'knex';
|
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 getLogger from '../../../test/fixtures/no-logger.js';
|
||||||
import { subHours, formatRFC3339 } from 'date-fns';
|
import { subHours, formatRFC3339 } from 'date-fns';
|
||||||
import dbInit from '../../../test/e2e/helpers/database-init.js';
|
import dbInit from '../../../test/e2e/helpers/database-init.js';
|
||||||
|
@ -101,7 +101,7 @@ export interface IEventTable {
|
|||||||
|
|
||||||
const TABLE = 'events';
|
const TABLE = 'events';
|
||||||
|
|
||||||
class EventStore implements IEventStore {
|
export class EventStore implements IEventStore {
|
||||||
private db: Db;
|
private db: Db;
|
||||||
|
|
||||||
// only one shared event emitter should exist across all event store instances
|
// only one shared event emitter should exist across all event store instances
|
||||||
@ -375,7 +375,7 @@ class EventStore implements IEventStore {
|
|||||||
): Promise<IEvent[]> {
|
): Promise<IEvent[]> {
|
||||||
const query = this.buildSearchQuery(queryParams, params.query)
|
const query = this.buildSearchQuery(queryParams, params.query)
|
||||||
.select(options?.withIp ? [...EVENT_COLUMNS, 'ip'] : EVENT_COLUMNS)
|
.select(options?.withIp ? [...EVENT_COLUMNS, 'ip'] : EVENT_COLUMNS)
|
||||||
.orderBy('created_at', 'desc')
|
.orderBy('created_at', params.order || 'desc')
|
||||||
.limit(Number(params.limit) ?? 100)
|
.limit(Number(params.limit) ?? 100)
|
||||||
.offset(Number(params.offset) ?? 0);
|
.offset(Number(params.offset) ?? 0);
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { FakeFeatureLifecycleStore } from './fake-feature-lifecycle-store.js';
|
|||||||
import { FeatureLifecycleService } from './feature-lifecycle-service.js';
|
import { FeatureLifecycleService } from './feature-lifecycle-service.js';
|
||||||
import FakeEnvironmentStore from '../project-environments/fake-environment-store.js';
|
import FakeEnvironmentStore from '../project-environments/fake-environment-store.js';
|
||||||
import type { IUnleashConfig } from '../../types/index.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 type { Db } from '../../db/db.js';
|
||||||
import { FeatureLifecycleStore } from './feature-lifecycle-store.js';
|
import { FeatureLifecycleStore } from './feature-lifecycle-store.js';
|
||||||
import EnvironmentStore from '../project-environments/environment-store.js';
|
import EnvironmentStore from '../project-environments/environment-store.js';
|
||||||
|
@ -20,7 +20,7 @@ import SegmentStore from '../segment/segment-store.js';
|
|||||||
import RoleStore from '../../db/role-store.js';
|
import RoleStore from '../../db/role-store.js';
|
||||||
import SettingStore from '../../db/setting-store.js';
|
import SettingStore from '../../db/setting-store.js';
|
||||||
import ClientInstanceStore from '../../db/client-instance-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 { ApiTokenStore } from '../../db/api-token-store.js';
|
||||||
import { ClientMetricsStoreV2 } from '../metrics/client-metrics/client-metrics-store-v2.js';
|
import { ClientMetricsStoreV2 } from '../metrics/client-metrics/client-metrics-store-v2.js';
|
||||||
import VersionService from '../../services/version-service.js';
|
import VersionService from '../../services/version-service.js';
|
||||||
|
@ -7,7 +7,7 @@ import { ProjectOwnersReadModel } from '../project/project-owners-read-model.js'
|
|||||||
import { FakeProjectOwnersReadModel } from '../project/fake-project-owners-read-model.js';
|
import { FakeProjectOwnersReadModel } from '../project/fake-project-owners-read-model.js';
|
||||||
import { ProjectReadModel } from '../project/project-read-model.js';
|
import { ProjectReadModel } from '../project/project-read-model.js';
|
||||||
import { FakeProjectReadModel } from '../project/fake-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 { FeatureEventFormatterMd } from '../../addons/feature-event-formatter-md.js';
|
||||||
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
|
import FakeEventStore from '../../../test/fixtures/fake-event-store.js';
|
||||||
import { FakePrivateProjectChecker } from '../private-project/fakePrivateProjectChecker.js';
|
import { FakePrivateProjectChecker } from '../private-project/fakePrivateProjectChecker.js';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import type { Db, IUnleashConfig } from '../../types/index.js';
|
import type { Db, IUnleashConfig } from '../../types/index.js';
|
||||||
import { ProjectStatusService } from './project-status-service.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 FakeEventStore from '../../../test/fixtures/fake-event-store.js';
|
||||||
import ProjectStore from '../project/project-store.js';
|
import ProjectStore from '../project/project-store.js';
|
||||||
import FakeProjectStore from '../../../test/fixtures/fake-project-store.js';
|
import FakeProjectStore from '../../../test/fixtures/fake-project-store.js';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { Db, IUnleashConfig } from '../../types/index.js';
|
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 GroupStore from '../../db/group-store.js';
|
||||||
import { AccountStore } from '../../db/account-store.js';
|
import { AccountStore } from '../../db/account-store.js';
|
||||||
import EnvironmentStore from '../project-environments/environment-store.js';
|
import EnvironmentStore from '../project-environments/environment-store.js';
|
||||||
|
@ -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 { 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 { 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 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 RoleStore from './db/role-store.js';
|
||||||
import { AccessStore } from './db/access-store.js';
|
import { AccessStore } from './db/access-store.js';
|
||||||
import {
|
import {
|
||||||
|
@ -15,6 +15,7 @@ export interface IEventSearchParams {
|
|||||||
createdBy?: string;
|
createdBy?: string;
|
||||||
type?: string;
|
type?: string;
|
||||||
environment?: string;
|
environment?: string;
|
||||||
|
order?: 'asc' | 'desc'; // desc by default
|
||||||
offset: number;
|
offset: number;
|
||||||
limit: number;
|
limit: number;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user