mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-15 08:35:54 +08:00
chore: error details is updated (#1090)
* chore: error details is updated
This commit is contained in:
parent
41b9129145
commit
10ab057e29
@ -19,7 +19,7 @@ const ROUTES = {
|
|||||||
CHANNELS_NEW: '/setting/channels/new',
|
CHANNELS_NEW: '/setting/channels/new',
|
||||||
CHANNELS_EDIT: '/setting/channels/edit/:id',
|
CHANNELS_EDIT: '/setting/channels/edit/:id',
|
||||||
ALL_ERROR: '/errors',
|
ALL_ERROR: '/errors',
|
||||||
ERROR_DETAIL: '/errors/:serviceName/:errorType',
|
ERROR_DETAIL: '/error-detail',
|
||||||
VERSION: '/status',
|
VERSION: '/status',
|
||||||
MY_SETTINGS: '/my-settings',
|
MY_SETTINGS: '/my-settings',
|
||||||
ORG_SETTINGS: '/settings/org-settings',
|
ORG_SETTINGS: '/settings/org-settings',
|
||||||
|
@ -7,7 +7,7 @@ import React, { useEffect } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useQuery } from 'react-query';
|
import { useQuery } from 'react-query';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import { generatePath, Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { AppState } from 'store/reducers';
|
import { AppState } from 'store/reducers';
|
||||||
import { Exception } from 'types/api/errors/getAll';
|
import { Exception } from 'types/api/errors/getAll';
|
||||||
import { GlobalReducer } from 'types/reducer/globalTime';
|
import { GlobalReducer } from 'types/reducer/globalTime';
|
||||||
@ -48,10 +48,7 @@ function AllErrors(): JSX.Element {
|
|||||||
key: 'exceptionType',
|
key: 'exceptionType',
|
||||||
render: (value, record): JSX.Element => (
|
render: (value, record): JSX.Element => (
|
||||||
<Link
|
<Link
|
||||||
to={generatePath(ROUTES.ERROR_DETAIL, {
|
to={`${ROUTES.ERROR_DETAIL}?serviceName=${record.serviceName}&errorType=${record.exceptionType}`}
|
||||||
serviceName: record.serviceName,
|
|
||||||
errorType: record.exceptionType,
|
|
||||||
})}
|
|
||||||
>
|
>
|
||||||
{value}
|
{value}
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -18,10 +18,12 @@ function ErrorDetails(props: ErrorDetailsProps): JSX.Element {
|
|||||||
const { search } = useLocation();
|
const { search } = useLocation();
|
||||||
const params = new URLSearchParams(search);
|
const params = new URLSearchParams(search);
|
||||||
const queryErrorId = params.get('errorId');
|
const queryErrorId = params.get('errorId');
|
||||||
|
const serviceName = params.get('serviceName');
|
||||||
|
const errorType = params.get('errorType');
|
||||||
|
|
||||||
const errorDetail = idPayload;
|
const errorDetail = idPayload;
|
||||||
|
|
||||||
const [stackTraceValue] = useState(errorDetail.excepionStacktrace);
|
const [stackTraceValue] = useState(errorDetail.exceptionStacktrace);
|
||||||
|
|
||||||
const columns = useMemo(
|
const columns = useMemo(
|
||||||
() => [
|
() => [
|
||||||
@ -41,7 +43,7 @@ function ErrorDetails(props: ErrorDetailsProps): JSX.Element {
|
|||||||
|
|
||||||
const keyToExclude = useMemo(
|
const keyToExclude = useMemo(
|
||||||
() => [
|
() => [
|
||||||
'excepionStacktrace',
|
'exceptionStacktrace',
|
||||||
'exceptionType',
|
'exceptionType',
|
||||||
'errorId',
|
'errorId',
|
||||||
'timestamp',
|
'timestamp',
|
||||||
@ -64,9 +66,11 @@ function ErrorDetails(props: ErrorDetailsProps): JSX.Element {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
history.push(`${history.location.pathname}?errorId=${id}`);
|
|
||||||
|
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
|
||||||
|
history.push(
|
||||||
|
`${history.location.pathname}?errorId=${id}&serviceName=${serviceName}&errorType=${errorType}`,
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
notification.error({
|
notification.error({
|
||||||
message: t('something_went_wrong'),
|
message: t('something_went_wrong'),
|
||||||
@ -101,7 +105,6 @@ function ErrorDetails(props: ErrorDetailsProps): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Space align="end" direction="horizontal">
|
<Space align="end" direction="horizontal">
|
||||||
{/* <Button icon={<LeftOutlined />} /> */}
|
|
||||||
<Button
|
<Button
|
||||||
loading={isLoading}
|
loading={isLoading}
|
||||||
disabled={
|
disabled={
|
||||||
|
@ -60,7 +60,9 @@ function GridGraphComponent({
|
|||||||
<ValueContainer isDashboardPage={isDashboardPage}>
|
<ValueContainer isDashboardPage={isDashboardPage}>
|
||||||
<ValueGraph
|
<ValueGraph
|
||||||
value={
|
value={
|
||||||
yAxisUnit ? getYAxisFormattedValue(value, yAxisUnit) : value.toString()
|
yAxisUnit
|
||||||
|
? getYAxisFormattedValue(String(value), yAxisUnit)
|
||||||
|
: value.toString()
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</ValueContainer>
|
</ValueContainer>
|
||||||
|
@ -15,6 +15,7 @@ const breadcrumbNameMap = {
|
|||||||
[ROUTES.VERSION]: 'Status',
|
[ROUTES.VERSION]: 'Status',
|
||||||
[ROUTES.ORG_SETTINGS]: 'Organization Settings',
|
[ROUTES.ORG_SETTINGS]: 'Organization Settings',
|
||||||
[ROUTES.MY_SETTINGS]: 'My Settings',
|
[ROUTES.MY_SETTINGS]: 'My Settings',
|
||||||
|
[ROUTES.ERROR_DETAIL]: 'Errors',
|
||||||
};
|
};
|
||||||
|
|
||||||
function ShowBreadcrumbs(props: RouteComponentProps): JSX.Element {
|
function ShowBreadcrumbs(props: RouteComponentProps): JSX.Element {
|
||||||
|
@ -18,6 +18,7 @@ const routesToSkip = [
|
|||||||
ROUTES.VERSION,
|
ROUTES.VERSION,
|
||||||
ROUTES.ALL_DASHBOARD,
|
ROUTES.ALL_DASHBOARD,
|
||||||
ROUTES.ORG_SETTINGS,
|
ROUTES.ORG_SETTINGS,
|
||||||
|
ROUTES.ERROR_DETAIL,
|
||||||
];
|
];
|
||||||
|
|
||||||
function TopNav(): JSX.Element | null {
|
function TopNav(): JSX.Element | null {
|
||||||
|
@ -2,17 +2,17 @@ import { Typography } from 'antd';
|
|||||||
import getByErrorType from 'api/errors/getByErrorTypeAndService';
|
import getByErrorType from 'api/errors/getByErrorTypeAndService';
|
||||||
import getById from 'api/errors/getById';
|
import getById from 'api/errors/getById';
|
||||||
import Spinner from 'components/Spinner';
|
import Spinner from 'components/Spinner';
|
||||||
|
import ROUTES from 'constants/routes';
|
||||||
import ErrorDetailsContainer from 'container/ErrorDetails';
|
import ErrorDetailsContainer from 'container/ErrorDetails';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useQuery } from 'react-query';
|
import { useQuery } from 'react-query';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import { useLocation, useParams } from 'react-router-dom';
|
import { Redirect, useLocation } from 'react-router-dom';
|
||||||
import { AppState } from 'store/reducers';
|
import { AppState } from 'store/reducers';
|
||||||
import { PayloadProps } from 'types/api/errors/getById';
|
import { PayloadProps } from 'types/api/errors/getById';
|
||||||
import { GlobalReducer } from 'types/reducer/globalTime';
|
import { GlobalReducer } from 'types/reducer/globalTime';
|
||||||
|
|
||||||
function ErrorDetails(): JSX.Element {
|
function ErrorDetails(): JSX.Element {
|
||||||
const { errorType, serviceName } = useParams<ErrorDetailsParams>();
|
|
||||||
const { maxTime, minTime } = useSelector<AppState, GlobalReducer>(
|
const { maxTime, minTime } = useSelector<AppState, GlobalReducer>(
|
||||||
(state) => state.globalTime,
|
(state) => state.globalTime,
|
||||||
);
|
);
|
||||||
@ -20,6 +20,8 @@ function ErrorDetails(): JSX.Element {
|
|||||||
const params = new URLSearchParams(search);
|
const params = new URLSearchParams(search);
|
||||||
|
|
||||||
const errorId = params.get('errorId');
|
const errorId = params.get('errorId');
|
||||||
|
const errorType = params.get('errorType');
|
||||||
|
const serviceName = params.get('serviceName');
|
||||||
|
|
||||||
const { data, status } = useQuery(
|
const { data, status } = useQuery(
|
||||||
[
|
[
|
||||||
@ -35,11 +37,11 @@ function ErrorDetails(): JSX.Element {
|
|||||||
queryFn: () =>
|
queryFn: () =>
|
||||||
getByErrorType({
|
getByErrorType({
|
||||||
end: maxTime,
|
end: maxTime,
|
||||||
errorType,
|
errorType: errorType || '',
|
||||||
serviceName,
|
serviceName: serviceName || '',
|
||||||
start: minTime,
|
start: minTime,
|
||||||
}),
|
}),
|
||||||
enabled: errorId === null,
|
enabled: errorId === null && errorType !== null && serviceName !== null,
|
||||||
cacheTime: 5000,
|
cacheTime: 5000,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -62,11 +64,18 @@ function ErrorDetails(): JSX.Element {
|
|||||||
errorId: errorId || data?.payload?.errorId || '',
|
errorId: errorId || data?.payload?.errorId || '',
|
||||||
start: minTime,
|
start: minTime,
|
||||||
}),
|
}),
|
||||||
enabled: errorId !== null || status === 'success',
|
enabled:
|
||||||
|
(errorId !== null || status === 'success') &&
|
||||||
|
errorType !== null &&
|
||||||
|
serviceName !== null,
|
||||||
cacheTime: 5000,
|
cacheTime: 5000,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (errorType === null || serviceName === null) {
|
||||||
|
return <Redirect to={ROUTES.ALL_ERROR} />;
|
||||||
|
}
|
||||||
|
|
||||||
if (status === 'loading' || ErrorIdStatus === 'loading') {
|
if (status === 'loading' || ErrorIdStatus === 'loading') {
|
||||||
return <Spinner tip="Loading.." />;
|
return <Spinner tip="Loading.." />;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ export interface Props {
|
|||||||
export interface PayloadProps {
|
export interface PayloadProps {
|
||||||
errorId: string;
|
errorId: string;
|
||||||
exceptionType: string;
|
exceptionType: string;
|
||||||
excepionStacktrace: string;
|
exceptionStacktrace: string;
|
||||||
exceptionEscaped: string;
|
exceptionEscaped: string;
|
||||||
exceptionMessage: string;
|
exceptionMessage: string;
|
||||||
timestamp: string;
|
timestamp: string;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user