InspectErrorTab.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React from 'react';
  2. import { DataQueryError } from '@grafana/data';
  3. import { JSONFormatter } from '@grafana/ui';
  4. interface InspectErrorTabProps {
  5. error?: DataQueryError;
  6. }
  7. const parseErrorMessage = (message: string): { msg: string; json?: any } => {
  8. try {
  9. const [msg, json] = message.split(/(\{.+)/);
  10. const jsonError = JSON.parse(json);
  11. return {
  12. msg,
  13. json: jsonError,
  14. };
  15. } catch {
  16. return { msg: message };
  17. }
  18. };
  19. export const InspectErrorTab: React.FC<InspectErrorTabProps> = ({ error }) => {
  20. if (!error) {
  21. return null;
  22. }
  23. if (error.data) {
  24. return (
  25. <>
  26. <h4>{error.data.message}</h4>
  27. <JSONFormatter json={error} open={2} />
  28. </>
  29. );
  30. }
  31. if (error.message) {
  32. const { msg, json } = parseErrorMessage(error.message);
  33. if (!json) {
  34. return <div>{msg}</div>;
  35. } else {
  36. return (
  37. <>
  38. {msg !== '' && <h3>{msg}</h3>}
  39. <JSONFormatter json={json} open={5} />
  40. </>
  41. );
  42. }
  43. }
  44. return <JSONFormatter json={error} open={2} />;
  45. };