refactor: Improve error logging/reporting for cli (#4691)

* use response error classes instead of `ResponseError` everywhere

* improve error logging in dev mode or when telemetry is disabled
This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2022-11-22 14:00:36 +01:00
committed by GitHub
parent 5364e7fc92
commit 0b754a4f85
29 changed files with 253 additions and 393 deletions

View File

@@ -172,10 +172,8 @@ executionsController.get(
userId: req.user.id,
filter: req.query.filter,
});
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.InternalServerError(
`Parameter "filter" contained invalid JSON string.`,
500,
500,
);
}
}
@@ -363,10 +361,8 @@ executionsController.post(
executionId,
},
);
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.NotFoundError(
`The execution with the ID "${executionId}" does not exist.`,
404,
404,
);
}
@@ -485,10 +481,8 @@ executionsController.post(
requestFilters = requestFiltersRaw as IGetExecutionsQueryFilter;
}
} catch (error) {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.InternalServerError(
`Parameter "filter" contained invalid JSON string.`,
500,
500,
);
}
}

View File

@@ -71,7 +71,7 @@ nodesController.post(
const { name } = req.body;
if (!name) {
throw new ResponseHelper.ResponseError(PACKAGE_NAME_NOT_PROVIDED, undefined, 400);
throw new ResponseHelper.BadRequestError(PACKAGE_NAME_NOT_PROVIDED);
}
let parsed: CommunityPackages.ParsedPackageName;
@@ -79,21 +79,17 @@ nodesController.post(
try {
parsed = parseNpmPackageName(name);
} catch (error) {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.BadRequestError(
error instanceof Error ? error.message : 'Failed to parse package name',
undefined,
400,
);
}
if (parsed.packageName === STARTER_TEMPLATE_NAME) {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.BadRequestError(
[
`Package "${parsed.packageName}" is only a template`,
'Please enter an actual package to install',
].join('.'),
undefined,
400,
);
}
@@ -101,23 +97,19 @@ nodesController.post(
const hasLoaded = hasPackageLoaded(name);
if (isInstalled && hasLoaded) {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.BadRequestError(
[
`Package "${parsed.packageName}" is already installed`,
'To update it, click the corresponding button in the UI',
].join('.'),
undefined,
400,
);
}
const packageStatus = await checkNpmPackageStatus(name);
if (packageStatus.status !== 'OK') {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.BadRequestError(
`Package "${name}" is banned so it cannot be installed`,
undefined,
400,
);
}
@@ -144,7 +136,7 @@ nodesController.post(
const clientError = error instanceof Error ? isClientError(error) : false;
throw new ResponseHelper.ResponseError(message, undefined, clientError ? 400 : 500);
throw new ResponseHelper[clientError ? 'BadRequestError' : 'InternalServerError'](message);
}
if (!hasLoaded) removePackageFromMissingList(name);
@@ -228,7 +220,7 @@ nodesController.delete(
const { name } = req.query;
if (!name) {
throw new ResponseHelper.ResponseError(PACKAGE_NAME_NOT_PROVIDED, undefined, 400);
throw new ResponseHelper.BadRequestError(PACKAGE_NAME_NOT_PROVIDED);
}
try {
@@ -236,13 +228,13 @@ nodesController.delete(
} catch (error) {
const message = error instanceof Error ? error.message : UNKNOWN_FAILURE_REASON;
throw new ResponseHelper.ResponseError(message, undefined, 400);
throw new ResponseHelper.BadRequestError(message);
}
const installedPackage = await findInstalledPackage(name);
if (!installedPackage) {
throw new ResponseHelper.ResponseError(PACKAGE_NOT_INSTALLED, undefined, 400);
throw new ResponseHelper.BadRequestError(PACKAGE_NOT_INSTALLED);
}
try {
@@ -253,7 +245,7 @@ nodesController.delete(
error instanceof Error ? error.message : UNKNOWN_FAILURE_REASON,
].join(':');
throw new ResponseHelper.ResponseError(message, undefined, 500);
throw new ResponseHelper.InternalServerError(message);
}
const pushInstance = Push.getInstance();
@@ -288,13 +280,13 @@ nodesController.patch(
const { name } = req.body;
if (!name) {
throw new ResponseHelper.ResponseError(PACKAGE_NAME_NOT_PROVIDED, undefined, 400);
throw new ResponseHelper.BadRequestError(PACKAGE_NAME_NOT_PROVIDED);
}
const previouslyInstalledPackage = await findInstalledPackage(name);
if (!previouslyInstalledPackage) {
throw new ResponseHelper.ResponseError(PACKAGE_NOT_INSTALLED, undefined, 400);
throw new ResponseHelper.BadRequestError(PACKAGE_NOT_INSTALLED);
}
try {
@@ -345,7 +337,7 @@ nodesController.patch(
error instanceof Error ? error.message : UNKNOWN_FAILURE_REASON,
].join(':');
throw new ResponseHelper.ResponseError(message, undefined, 500);
throw new ResponseHelper.InternalServerError(message);
}
}),
);

View File

@@ -21,13 +21,18 @@ export const externalHooks: IExternalHooksClass = ExternalHooks();
export const tagsController = express.Router();
const workflowsEnabledMiddleware: express.RequestHandler = (req, res, next) => {
if (config.getEnv('workflowTagsDisabled')) {
throw new ResponseHelper.BadRequestError('Workflow tags are disabled');
}
next();
};
// Retrieves all tags, with or without usage count
tagsController.get(
'/',
workflowsEnabledMiddleware,
ResponseHelper.send(async (req: express.Request): Promise<TagEntity[] | ITagWithCountDb[]> => {
if (config.getEnv('workflowTagsDisabled')) {
throw new ResponseHelper.ResponseError('Workflow tags are disabled');
}
if (req.query.withUsageCount === 'true') {
const tablePrefix = config.getEnv('database.tablePrefix');
return TagHelpers.getTagsWithCountDb(tablePrefix);
@@ -40,10 +45,8 @@ tagsController.get(
// Creates a tag
tagsController.post(
'/',
workflowsEnabledMiddleware,
ResponseHelper.send(async (req: express.Request): Promise<TagEntity | void> => {
if (config.getEnv('workflowTagsDisabled')) {
throw new ResponseHelper.ResponseError('Workflow tags are disabled');
}
const newTag = new TagEntity();
newTag.name = req.body.name.trim();
@@ -61,11 +64,8 @@ tagsController.post(
// Updates a tag
tagsController.patch(
'/:id',
workflowsEnabledMiddleware,
ResponseHelper.send(async (req: express.Request): Promise<TagEntity | void> => {
if (config.getEnv('workflowTagsDisabled')) {
throw new ResponseHelper.ResponseError('Workflow tags are disabled');
}
const { name } = req.body;
const { id } = req.params;
@@ -87,18 +87,14 @@ tagsController.patch(
tagsController.delete(
'/:id',
workflowsEnabledMiddleware,
ResponseHelper.send(async (req: TagsRequest.Delete): Promise<boolean> => {
if (config.getEnv('workflowTagsDisabled')) {
throw new ResponseHelper.ResponseError('Workflow tags are disabled');
}
if (
config.getEnv('userManagement.isInstanceOwnerSetUp') === true &&
req.user.globalRole.name !== 'owner'
) {
throw new ResponseHelper.ResponseError(
throw new ResponseHelper.UnauthorizedError(
'You are not allowed to perform this action',
undefined,
403,
'Only owners can remove tags',
);
}