Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(core): Merge event bus controllers and remove dead code (no-changelog) #9688

Merged
merged 5 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions packages/@n8n/permissions/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ export type Resource =
| 'credential'
| 'externalSecretsProvider'
| 'externalSecret'
| 'eventBusEvent'
| 'eventBusDestination'
| 'ldap'
| 'license'
Expand Down Expand Up @@ -45,7 +44,6 @@ export type EventBusDestinationScope = ResourceScope<
'eventBusDestination',
DefaultOperations | 'test'
>;
export type EventBusEventScope = ResourceScope<'eventBusEvent', DefaultOperations | 'query'>;
export type LdapScope = ResourceScope<'ldap', 'manage' | 'sync'>;
export type LicenseScope = ResourceScope<'license', 'manage'>;
export type LogStreamingScope = ResourceScope<'logStreaming', 'manage'>;
Expand All @@ -70,7 +68,6 @@ export type Scope =
| CredentialScope
| ExternalSecretProviderScope
| ExternalSecretScope
| EventBusEventScope
| EventBusDestinationScope
| LdapScope
| LicenseScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,6 @@ export class MessageEventBusLogWriter {
}
}

/**
* Pauses all logging. Events are still received by the worker, they just are not logged any more
*/
async pauseLogging() {
if (this.worker) {
this.worker.postMessage({ command: 'pauseLogging', data: {} });
}
}

startRecoveryProcess() {
if (this.worker) {
this.worker.postMessage({ command: 'startRecoveryProcess', data: {} });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,6 @@ if (!isMainThread) {
appendMessageSync(data);
parentPort?.postMessage({ command, data: true });
break;
case 'pauseLogging':
loggingPaused = true;
clearInterval(fileStatTimer);
break;
case 'initialize':
const settings: MessageEventBusLogWriterOptions = {
logFullBasePath: (data as MessageEventBusLogWriterOptions).logFullBasePath ?? '',
Expand Down
103 changes: 1 addition & 102 deletions packages/cli/src/eventbus/eventBus.controller.ts
Original file line number Diff line number Diff line change
@@ -1,110 +1,9 @@
import express from 'express';
import { EventMessageTypeNames } from 'n8n-workflow';
import { RestController, Get } from '@/decorators';

import { RestController, Get, Post, GlobalScope } from '@/decorators';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';

import { isEventMessageOptions } from './EventMessageClasses/AbstractEventMessage';
import { EventMessageGeneric } from './EventMessageClasses/EventMessageGeneric';
import type { EventMessageWorkflowOptions } from './EventMessageClasses/EventMessageWorkflow';
import { EventMessageWorkflow } from './EventMessageClasses/EventMessageWorkflow';
import type { EventMessageReturnMode } from './MessageEventBus/MessageEventBus';
import { MessageEventBus } from './MessageEventBus/MessageEventBus';
import type { EventMessageTypes } from './EventMessageClasses';
import { eventNamesAll } from './EventMessageClasses';
import type { EventMessageAuditOptions } from './EventMessageClasses/EventMessageAudit';
import { EventMessageAudit } from './EventMessageClasses/EventMessageAudit';
import type { EventMessageNodeOptions } from './EventMessageClasses/EventMessageNode';
import { EventMessageNode } from './EventMessageClasses/EventMessageNode';

// ----------------------------------------
// TypeGuards
// ----------------------------------------

const isWithQueryString = (candidate: unknown): candidate is { query: string } => {
const o = candidate as { query: string };
if (!o) return false;
return o.query !== undefined;
};

// ----------------------------------------
// Controller
// ----------------------------------------

@RestController('/eventbus')
export class EventBusController {
constructor(private readonly eventBus: MessageEventBus) {}

// ----------------------------------------
// Events
// ----------------------------------------
@Get('/event')
@GlobalScope('eventBusEvent:query')
async getEvents(
req: express.Request,
): Promise<EventMessageTypes[] | Record<string, EventMessageTypes[]>> {
if (isWithQueryString(req.query)) {
switch (req.query.query as EventMessageReturnMode) {
case 'sent':
return await this.eventBus.getEventsSent();
case 'unsent':
return await this.eventBus.getEventsUnsent();
case 'unfinished':
return await this.eventBus.getUnfinishedExecutions();
case 'all':
default:
return await this.eventBus.getEventsAll();
}
} else {
return await this.eventBus.getEventsAll();
}
}

@Get('/execution/:id')
@GlobalScope('eventBusEvent:read')
async getEventForExecutionId(req: express.Request): Promise<EventMessageTypes[] | undefined> {
if (req.params?.id) {
let logHistory;
if (req.query?.logHistory) {
logHistory = parseInt(req.query.logHistory as string, 10);
}
return await this.eventBus.getEventsByExecutionId(req.params.id, logHistory);
}
return;
}

@Post('/event')
@GlobalScope('eventBusEvent:create')
async postEvent(req: express.Request): Promise<EventMessageTypes | undefined> {
let msg: EventMessageTypes | undefined;
if (isEventMessageOptions(req.body)) {
switch (req.body.__type) {
case EventMessageTypeNames.workflow:
msg = new EventMessageWorkflow(req.body as EventMessageWorkflowOptions);
break;
case EventMessageTypeNames.audit:
msg = new EventMessageAudit(req.body as EventMessageAuditOptions);
break;
case EventMessageTypeNames.node:
msg = new EventMessageNode(req.body as EventMessageNodeOptions);
break;
case EventMessageTypeNames.generic:
default:
msg = new EventMessageGeneric(req.body);
}
await this.eventBus.send(msg);
} else {
throw new BadRequestError(
'Body is not a serialized EventMessage or eventName does not match format {namespace}.{domain}.{event}',
);
}
return msg;
}

// ----------------------------------------
// Utilities
// ----------------------------------------

@Get('/eventnames')
async getEventNames(): Promise<string[]> {
return eventNamesAll;
Expand Down
7 changes: 0 additions & 7 deletions packages/cli/src/permissions/global-roles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,6 @@ export const GLOBAL_OWNER_SCOPES: Scope[] = [
'communityPackage:uninstall',
'communityPackage:update',
'communityPackage:list',
'eventBusEvent:create',
'eventBusEvent:read',
'eventBusEvent:update',
'eventBusEvent:delete',
'eventBusEvent:query',
'eventBusEvent:create',
'eventBusDestination:create',
'eventBusDestination:read',
'eventBusDestination:update',
Expand Down Expand Up @@ -81,7 +75,6 @@ export const GLOBAL_OWNER_SCOPES: Scope[] = [
export const GLOBAL_ADMIN_SCOPES = GLOBAL_OWNER_SCOPES.concat();

export const GLOBAL_MEMBER_SCOPES: Scope[] = [
'eventBusEvent:read',
'eventBusDestination:list',
'eventBusDestination:test',
'tag:create',
Expand Down
4 changes: 0 additions & 4 deletions packages/editor-ui/src/api/eventbus.ee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,3 @@ export async function getDestinationsFromBackend(
): Promise<MessageEventBusDestinationOptions[]> {
return await makeRestApiRequest(context, 'GET', '/eventbus/destination');
}

export async function getExecutionEvents(context: IRestApiContext, executionId: string) {
return await makeRestApiRequest(context, 'GET', `/eventbus/execution/${executionId}`);
}
1 change: 0 additions & 1 deletion packages/editor-ui/src/stores/rbac.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ export const useRBACStore = defineStore(STORES.RBAC, () => {
orchestration: {},
workersView: {},
eventBusDestination: {},
eventBusEvent: {},
auditLogs: {},
banner: {},
communityPackage: {},
Expand Down
10 changes: 0 additions & 10 deletions packages/editor-ui/src/stores/workflows.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
} from '@/Interface';
import { defineStore } from 'pinia';
import type {
IAbstractEventMessage,

Check failure on line 37 in packages/editor-ui/src/stores/workflows.store.ts

View workflow job for this annotation

GitHub Actions / Lint changes

'IAbstractEventMessage' is defined but never used
IConnection,
IConnections,
IDataObject,
Expand Down Expand Up @@ -1432,15 +1432,6 @@
});
}

async function getExecutionEvents(id: string): Promise<IAbstractEventMessage[]> {
const rootStore = useRootStore();
return await makeRestApiRequest(
rootStore.getRestApiContext,
'GET',
`/eventbus/execution/${id}`,
);
}

function getBinaryUrl(
binaryDataId: string,
action: 'view' | 'download',
Expand Down Expand Up @@ -1651,7 +1642,6 @@
fetchExecutionDataById,
deleteExecution,
addToCurrentExecutions,
getExecutionEvents,
getBinaryUrl,
setNodePristine,
resetChatMessages,
Expand Down
Loading