mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 01:53:33 -06:00
* wrap a bunch of errors * wrap more things! * fix up some unit tests * wrap more errors * tiny bit of tidy up
28 lines
1.0 KiB
TypeScript
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;
|
|
}
|