grafana/public/app/plugins/datasource/graphite/utils.ts
Ashley Harrison 803473f479
Chore: Enable useUnknownInCatchVariables for stricter type checking in catch blocks (#50591)
* wrap a bunch of errors

* wrap more things!

* fix up some unit tests

* wrap more errors

* tiny bit of tidy up
2022-06-15 08:59:29 +01:00

28 lines
1.0 KiB
TypeScript

import { last } from 'lodash';
import { GraphiteParserError } from './types';
/**
* Graphite-web before v1.6 returns HTTP 500 with full stack traces in an HTML page
* when a query fails. It results in massive error alerts with HTML tags in the UI.
* This function removes all HTML tags and keeps only the last line from the stack
* trace which should be the most meaningful.
*/
export function reduceError(error: any): any {
if (error && error.status === 500 && error.data?.message?.startsWith('<body')) {
// Remove all HTML tags and take the last line from the stack trace
const newMessage = last<string>(
error.data.message
.replace(/(<([^>]+)>)/gi, '')
.trim()
.split(/\n/)
)!.replace(/u?&#[^;]+;/g, '');
error.data.message = `Graphite encountered an unexpected error while handling your request. ${newMessage}`;
}
return error;
}
export function isGraphiteParserError(e: unknown): e is GraphiteParserError {
return typeof e === 'object' && e !== null && 'message' in e && 'pos' in e;
}