mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
refactor: Unify severity and level for all application errors for Sentry (no-changelog) (#7956)
## Summary Unify `severity` and `level` for all backend application errors for Sentry Follow-up to: https://github.com/n8n-io/n8n/pull/7914#issuecomment-1840433542 ... #### How to test the change: 1. ... ## Issues fixed Include links to Github issue or Community forum post or **Linear ticket**: > Important in order to close automatically and provide context to reviewers ... ## Review / Merge checklist - [ ] PR title and summary are descriptive. **Remember, the title automatically goes into the changelog. Use `(no-changelog)` otherwise.** ([conventions](https://github.com/n8n-io/n8n/blob/master/.github/pull_request_title_conventions.md)) - [ ] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up ticket created. - [ ] Tests included. > A bug is not considered fixed, unless a test is added to prevent it from happening again. A feature is not complete without tests. > > *(internal)* You can use Slack commands to trigger [e2e tests](https://www.notion.so/n8n/How-to-use-Test-Instances-d65f49dfc51f441ea44367fb6f67eb0a?pvs=4#a39f9e5ba64a48b58a71d81c837e8227) or [deploy test instance](https://www.notion.so/n8n/How-to-use-Test-Instances-d65f49dfc51f441ea44367fb6f67eb0a?pvs=4#f6a177d32bde4b57ae2da0b8e454bfce) or [deploy early access version on Cloud](https://www.notion.so/n8n/Cloudbot-3dbe779836004972b7057bc989526998?pvs=4#fef2d36ab02247e1a0f65a74f6fb534e).
This commit is contained in:
@@ -2381,5 +2381,4 @@ export type BannerName =
|
||||
| 'NON_PRODUCTION_LICENSE'
|
||||
| 'EMAIL_CONFIRMATION';
|
||||
|
||||
export type Severity = 'warning' | 'error';
|
||||
export type Functionality = 'regular' | 'configuration-node';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { Functionality, IDataObject, JsonObject, Severity } from '../../Interfaces';
|
||||
import type { Functionality, IDataObject, JsonObject } from '../../Interfaces';
|
||||
import { ApplicationError } from '../application.error';
|
||||
|
||||
interface ExecutionBaseErrorOptions {
|
||||
@@ -19,8 +19,6 @@ export abstract class ExecutionBaseError extends ApplicationError {
|
||||
|
||||
lineNumber: number | undefined;
|
||||
|
||||
severity: Severity = 'error';
|
||||
|
||||
functionality: Functionality = 'regular';
|
||||
|
||||
constructor(message: string, { cause, errorResponse }: ExecutionBaseErrorOptions = {}) {
|
||||
|
||||
@@ -7,7 +7,7 @@ export type ReportingOptions = {
|
||||
} & Pick<Event, 'tags' | 'extra'>;
|
||||
|
||||
export class ApplicationError extends Error {
|
||||
readonly level: Level;
|
||||
level: Level;
|
||||
|
||||
readonly tags?: Event['tags'];
|
||||
|
||||
|
||||
@@ -9,18 +9,18 @@ import type {
|
||||
JsonObject,
|
||||
IDataObject,
|
||||
IStatusCodeMessages,
|
||||
Severity,
|
||||
Functionality,
|
||||
} from '../Interfaces';
|
||||
import { NodeError } from './abstract/node.error';
|
||||
import { removeCircularRefs } from '../utils';
|
||||
import type { ReportingOptions } from './application.error';
|
||||
|
||||
export interface NodeOperationErrorOptions {
|
||||
message?: string;
|
||||
description?: string;
|
||||
runIndex?: number;
|
||||
itemIndex?: number;
|
||||
severity?: Severity;
|
||||
level?: ReportingOptions['level'];
|
||||
messageMapping?: { [key: string]: string }; // allows to pass custom mapping for error messages scoped to a node
|
||||
functionality?: Functionality;
|
||||
}
|
||||
@@ -120,7 +120,7 @@ export class NodeApiError extends NodeError {
|
||||
parseXml,
|
||||
runIndex,
|
||||
itemIndex,
|
||||
severity,
|
||||
level,
|
||||
functionality,
|
||||
messageMapping,
|
||||
}: NodeApiErrorOptions = {},
|
||||
@@ -174,10 +174,10 @@ export class NodeApiError extends NodeError {
|
||||
this.findProperty(errorResponse, ERROR_STATUS_PROPERTIES, ERROR_NESTING_PROPERTIES) ?? null;
|
||||
}
|
||||
|
||||
if (severity) {
|
||||
this.severity = severity;
|
||||
if (level) {
|
||||
this.level = level;
|
||||
} else if (this.httpCode?.charAt(0) !== '5') {
|
||||
this.severity = 'warning';
|
||||
this.level = 'warning';
|
||||
}
|
||||
|
||||
// set description of this error
|
||||
|
||||
@@ -19,7 +19,7 @@ export class NodeOperationError extends NodeError {
|
||||
super(node, error);
|
||||
|
||||
if (options.message) this.message = options.message;
|
||||
if (options.severity) this.severity = options.severity;
|
||||
if (options.level) this.level = options.level;
|
||||
if (options.functionality) this.functionality = options.functionality;
|
||||
this.description = options.description;
|
||||
this.context.runIndex = options.runIndex;
|
||||
|
||||
@@ -4,7 +4,7 @@ export class WebhookPathTakenError extends WorkflowActivationError {
|
||||
constructor(nodeName: string, cause?: Error) {
|
||||
super(
|
||||
`The URL path that the "${nodeName}" node uses is already taken. Please change it to something else.`,
|
||||
{ severity: 'warning', cause },
|
||||
{ level: 'warning', cause },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import type { INode, Severity } from '../Interfaces';
|
||||
import type { INode } from '../Interfaces';
|
||||
import { ExecutionBaseError } from './abstract/execution-base.error';
|
||||
import type { ApplicationError } from './application.error';
|
||||
|
||||
interface WorkflowActivationErrorOptions {
|
||||
cause?: Error;
|
||||
node?: INode;
|
||||
severity?: Severity;
|
||||
level?: ApplicationError['level'];
|
||||
workflowId?: string;
|
||||
}
|
||||
|
||||
@@ -18,7 +19,7 @@ export class WorkflowActivationError extends ExecutionBaseError {
|
||||
|
||||
constructor(
|
||||
message: string,
|
||||
{ cause, node, severity, workflowId }: WorkflowActivationErrorOptions = {},
|
||||
{ cause, node, level, workflowId }: WorkflowActivationErrorOptions = {},
|
||||
) {
|
||||
let error = cause as Error;
|
||||
if (cause instanceof ExecutionBaseError) {
|
||||
@@ -31,6 +32,6 @@ export class WorkflowActivationError extends ExecutionBaseError {
|
||||
this.node = node;
|
||||
this.workflowId = workflowId;
|
||||
this.message = message;
|
||||
if (severity) this.severity = severity;
|
||||
if (level) this.level = level;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ export class WorkflowOperationError extends ExecutionBaseError {
|
||||
|
||||
constructor(message: string, node?: INode, description?: string) {
|
||||
super(message, { cause: undefined });
|
||||
this.severity = 'warning';
|
||||
this.level = 'warning';
|
||||
this.name = this.constructor.name;
|
||||
if (description) this.description = description;
|
||||
this.node = node;
|
||||
|
||||
Reference in New Issue
Block a user