1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-27 11:02:16 +01:00

hack: external events

This commit is contained in:
Nuno Góis 2023-12-05 18:50:27 +00:00
parent fa9d38fc22
commit 419a8c51fe
No known key found for this signature in database
GPG Key ID: 71ECC689F1091765
8 changed files with 90 additions and 7 deletions

View File

@ -85,12 +85,12 @@ export interface IEventTable {
const TABLE = 'events';
class EventStore implements IEventStore {
private db: Db;
protected db: Db;
// only one shared event emitter should exist across all event store instances
private eventEmitter: EventEmitter = sharedEventEmitter;
private logger: Logger;
protected logger: Logger;
// a new DB has to be injected per transaction
constructor(db: Db, getLogger: LogProvider) {

View File

@ -1,6 +1,5 @@
import { FromSchema } from 'json-schema-to-ts';
import { tagSchema } from './tag-schema';
import { IEventTypes } from '../../types';
import { variantSchema } from './variant-schema';
const eventDataSchema = {
@ -44,7 +43,6 @@ export const eventSchema = {
type: 'string',
description:
'What [type](https://docs.getunleash.io/reference/api/legacy/unleash/admin/events#event-type-description) of event this is',
enum: IEventTypes,
example: 'feature-created',
},
createdBy: {

View File

@ -10,7 +10,7 @@ import { ITag } from '../types';
export default class EventService {
private logger: Logger;
private eventStore: IEventStore;
protected eventStore: IEventStore;
private featureTagStore: IFeatureTagStore;
@ -51,7 +51,7 @@ export default class EventService {
return this.eventStore.on(eventName, listener);
}
private async enhanceEventsWithTags(
protected async enhanceEventsWithTags(
events: IBaseEvent[],
): Promise<IBaseEvent[]> {
const featureNamesSet = new Set<string>();

View File

@ -173,6 +173,14 @@ export const BANNER_CREATED = 'banner-created' as const;
export const BANNER_UPDATED = 'banner-updated' as const;
export const BANNER_DELETED = 'banner-deleted' as const;
export const EVENT_WEBHOOK_CREATED = 'event-webhook-created' as const;
export const EVENT_WEBHOOK_UPDATED = 'event-webhook-updated' as const;
export const EVENT_WEBHOOK_DELETED = 'event-webhook-deleted' as const;
export const EVENT_ACTION_CREATED = 'event-action-created' as const;
export const EVENT_ACTION_UPDATED = 'event-action-updated' as const;
export const EVENT_ACTION_DELETED = 'event-action-deleted' as const;
export const IEventTypes = [
APPLICATION_CREATED,
FEATURE_CREATED,
@ -306,6 +314,12 @@ export const IEventTypes = [
PROJECT_ENVIRONMENT_ADDED,
PROJECT_ENVIRONMENT_REMOVED,
DEFAULT_STRATEGY_UPDATED,
EVENT_WEBHOOK_CREATED,
EVENT_WEBHOOK_UPDATED,
EVENT_WEBHOOK_DELETED,
EVENT_ACTION_CREATED,
EVENT_ACTION_UPDATED,
EVENT_ACTION_DELETED,
] as const;
export type IEventType = (typeof IEventTypes)[number];

View File

@ -0,0 +1,19 @@
exports.up = function (db, cb) {
db.runSql(
`
ALTER table events
ADD COLUMN IF NOT EXISTS is_external boolean DEFAULT false
`,
cb,
);
};
exports.down = function (db, cb) {
db.runSql(
`
ALTER table events
DROP COLUMN is_external
`,
cb,
);
};

View File

@ -0,0 +1,27 @@
'use strict';
exports.up = function (db, cb) {
db.runSql(
`
CREATE TABLE IF NOT EXISTS event_webhooks
(
id SERIAL PRIMARY KEY NOT NULL,
enabled BOOLEAN DEFAULT true NOT NULL,
name TEXT NOT NULL,
event TEXT NOT NULL,
url TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
`,
cb,
);
};
exports.down = function (db, cb) {
db.runSql(
`
DROP TABLE IF EXISTS event_webhooks;
`,
cb,
);
};

View File

@ -0,0 +1,25 @@
'use strict';
exports.up = function (db, cb) {
db.runSql(
`
CREATE TABLE IF NOT EXISTS event_actions
(
id SERIAL PRIMARY KEY NOT NULL,
event TEXT NOT NULL,
action TEXT NOT NULL,
parameters JSONB NOT NULL DEFAULT '{}'::jsonb
);
`,
cb,
);
};
exports.down = function (db, cb) {
db.runSql(
`
DROP TABLE IF EXISTS event_actions;
`,
cb,
);
};

View File

@ -8,7 +8,7 @@ import EventEmitter from 'events';
class FakeEventStore implements IEventStore {
events: IEvent[];
private eventEmitter: EventEmitter = sharedEventEmitter;
protected eventEmitter: EventEmitter = sharedEventEmitter;
constructor() {
this.eventEmitter.setMaxListeners(0);