mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-01 04:42:03 +08:00
feat: dynamic step size for the data for graphs (#929)
* feat: dynamic step size for the data for graphs * fix: remove console.log * chore: add jest globals * feat: add step size for dashboard * chore: undo .eslintignore
This commit is contained in:
parent
a8c5934fc5
commit
566c2becdf
@ -1,2 +1,2 @@
|
|||||||
node_modules
|
node_modules
|
||||||
build
|
build
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { expect } from '@jest/globals';
|
import { expect } from '@jest/globals';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import getStep, { DefaultStepSize } from 'lib/getStep';
|
import getStep, { DefaultStepSize, MaxDataPoints } from 'lib/getStep';
|
||||||
|
|
||||||
describe('lib/getStep', () => {
|
describe('lib/getStep', () => {
|
||||||
test('should return default step when the given range is less than 1 day', () => {
|
test('should return default step when the given range is less than 1 day', () => {
|
||||||
@ -40,7 +40,8 @@ describe('lib/getStep', () => {
|
|||||||
const startUnix = start.valueOf();
|
const startUnix = start.valueOf();
|
||||||
const endUnix = end.valueOf();
|
const endUnix = end.valueOf();
|
||||||
|
|
||||||
const expectedStepSize = end.diff(start, 'days') * DefaultStepSize;
|
const expectedStepSize = Math.floor(end.diff(start, 's') / MaxDataPoints);
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
getStep({
|
getStep({
|
||||||
start: startUnix / 1e3,
|
start: startUnix / 1e3,
|
||||||
|
@ -30,6 +30,7 @@ const convertToMs = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const DefaultStepSize = 60;
|
export const DefaultStepSize = 60;
|
||||||
|
export const MaxDataPoints = 200;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns relevant step size based on given start and end date.
|
* Returns relevant step size based on given start and end date.
|
||||||
@ -37,13 +38,9 @@ export const DefaultStepSize = 60;
|
|||||||
const getStep = ({ start, end, inputFormat = 'ms' }: GetStepInput): number => {
|
const getStep = ({ start, end, inputFormat = 'ms' }: GetStepInput): number => {
|
||||||
const startDate = dayjs(convertToMs(Number(start), inputFormat));
|
const startDate = dayjs(convertToMs(Number(start), inputFormat));
|
||||||
const endDate = dayjs(convertToMs(Number(end), inputFormat));
|
const endDate = dayjs(convertToMs(Number(end), inputFormat));
|
||||||
const diffDays = Math.abs(endDate.diff(startDate, 'days'));
|
const diffSec = Math.abs(endDate.diff(startDate, 's'));
|
||||||
|
|
||||||
if (diffDays > 1) {
|
return Math.max(Math.floor(diffSec / MaxDataPoints), DefaultStepSize);
|
||||||
return DefaultStepSize * diffDays;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefaultStepSize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default getStep;
|
export default getStep;
|
||||||
|
@ -84,7 +84,7 @@ function _UsageExplorer(props: UsageExplorerProps): JSX.Element {
|
|||||||
if (selectedTime && selectedInterval) {
|
if (selectedTime && selectedInterval) {
|
||||||
const maxTime = new Date().getTime() * 1000000;
|
const maxTime = new Date().getTime() * 1000000;
|
||||||
const minTime = maxTime - selectedTime.value * 24 * 3600000 * 1000000;
|
const minTime = maxTime - selectedTime.value * 24 * 3600000 * 1000000;
|
||||||
|
|
||||||
getUsageData(minTime, maxTime, selectedInterval.value, selectedService);
|
getUsageData(minTime, maxTime, selectedInterval.value, selectedService);
|
||||||
}
|
}
|
||||||
}, [selectedTime, selectedInterval, selectedService, getUsageData]);
|
}, [selectedTime, selectedInterval, selectedService, getUsageData]);
|
||||||
|
@ -5,6 +5,7 @@ import TraceGraph from 'container/Trace/Graph';
|
|||||||
import Search from 'container/Trace/Search';
|
import Search from 'container/Trace/Search';
|
||||||
import TraceGraphFilter from 'container/Trace/TraceGraphFilter';
|
import TraceGraphFilter from 'container/Trace/TraceGraphFilter';
|
||||||
import TraceTable from 'container/Trace/TraceTable';
|
import TraceTable from 'container/Trace/TraceTable';
|
||||||
|
import getStep from 'lib/getStep';
|
||||||
import history from 'lib/history';
|
import history from 'lib/history';
|
||||||
import React, { useCallback, useEffect, useState } from 'react';
|
import React, { useCallback, useEffect, useState } from 'react';
|
||||||
import { connect, useDispatch, useSelector } from 'react-redux';
|
import { connect, useDispatch, useSelector } from 'react-redux';
|
||||||
@ -84,7 +85,7 @@ function Trace({
|
|||||||
selectedFilter,
|
selectedFilter,
|
||||||
selectedTags,
|
selectedTags,
|
||||||
start: minTime,
|
start: minTime,
|
||||||
step: 60,
|
step: getStep({ start: minTime, end: maxTime, inputFormat: 'ns' }),
|
||||||
isFilterExclude,
|
isFilterExclude,
|
||||||
});
|
});
|
||||||
}, [
|
}, [
|
||||||
|
@ -5,6 +5,7 @@ import { timePreferenceType } from 'container/NewWidget/RightContainer/timeItems
|
|||||||
import GetMaxMinTime from 'lib/getMaxMinTime';
|
import GetMaxMinTime from 'lib/getMaxMinTime';
|
||||||
import GetMinMax from 'lib/getMinMax';
|
import GetMinMax from 'lib/getMinMax';
|
||||||
import GetStartAndEndTime from 'lib/getStartAndEndTime';
|
import GetStartAndEndTime from 'lib/getStartAndEndTime';
|
||||||
|
import getStep from 'lib/getStep';
|
||||||
import { Dispatch } from 'redux';
|
import { Dispatch } from 'redux';
|
||||||
import store from 'store';
|
import store from 'store';
|
||||||
import AppActions from 'types/actions';
|
import AppActions from 'types/actions';
|
||||||
@ -45,7 +46,7 @@ export const GetQueryResults = (
|
|||||||
end,
|
end,
|
||||||
query: encodeURIComponent(query.query),
|
query: encodeURIComponent(query.query),
|
||||||
start,
|
start,
|
||||||
step: '60',
|
step: `${getStep({ start, end, inputFormat: 'ms' })}`,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
query: query.query,
|
query: query.query,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user