Skip to content
Snippets Groups Projects
errorReporting.ts 1.94 KiB
Newer Older
import { ErrorData } from '@/utils/error-report/ErrorData';
import { SerializedError } from '@reduxjs/toolkit';
Piotr Gawron's avatar
Piotr Gawron committed
import { ONE_THOUSAND } from '@/constants/common';
  GENERIC_AXIOS_ERROR_CODE,
  NOT_FOUND_AXIOS_ERROR_CODE,
  UNKNOWN_AXIOS_ERROR_CODE,
  UNKNOWN_ERROR,
} from '@/utils/getErrorMessage/getErrorMessage.constants';
import { axiosInstance } from '@/services/api/utils/axiosInstance';
import { JavaStacktrace } from '@/types/models';
import { apiPath } from '@/redux/apiPath';
import type { RootState } from '@/redux/store';
export const createErrorData = async (
  error: Error | SerializedError | undefined,
  state: RootState,
): Promise<ErrorData> => {
  let stacktrace = 'N/A';
  if (error !== undefined) {
    stacktrace = error.stack !== undefined ? error.stack : 'N/A';
  let login = null;
  let userData = null;

  if (state.user) {
    login = state.user.login;
    userData = state.user.userData;
  }
Piotr Gawron's avatar
Piotr Gawron committed
  if (!login) {
    login = 'anonymous';
  }

  let email = null;
  if (userData) {
    email = userData.email;
  }

  const configuration = state?.configuration?.main?.data;
  const version = configuration ? configuration.version : null;
  let javaStacktrace = null;
  if (error !== undefined && 'code' in error) {
    const { code } = error;
    if (
      code &&
      code !== UNKNOWN_ERROR &&
      code !== UNKNOWN_AXIOS_ERROR_CODE &&
      code !== GENERIC_AXIOS_ERROR_CODE &&
      code !== NOT_FOUND_AXIOS_ERROR_CODE
      try {
        javaStacktrace = (await axiosInstance.get<JavaStacktrace>(apiPath.getStacktrace(code))).data
          .content;
      } catch (e) {
        // eslint-disable-next-line no-console
        console.log('Problem with fetching javaStacktrace', e);
      }
    }
  }

Piotr Gawron's avatar
Piotr Gawron committed
  return {
    url: window?.location?.href,
Piotr Gawron's avatar
Piotr Gawron committed
    login,
Piotr Gawron's avatar
Piotr Gawron committed
    browser: navigator.userAgent,
    comment: null,
    stacktrace,
Piotr Gawron's avatar
Piotr Gawron committed
    timestamp: Math.floor(+new Date() / ONE_THOUSAND),