Skip to content

Commit 8f01199

Browse files
committed
chore: Standardize granularities
1 parent 6a6709b commit 8f01199

20 files changed

+85
-221
lines changed

.changeset/flat-carrots-smoke.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@hyperdx/common-utils": patch
3+
"@hyperdx/api": patch
4+
"@hyperdx/app": patch
5+
---
6+
7+
chore: Standardize granularities

packages/api/src/routers/external-api/v2/charts.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ const API_GRANULARITY_TO_INTERNAL: Record<string, Granularity> = {
147147
'30s': Granularity.ThirtySecond,
148148
'1m': Granularity.OneMinute,
149149
'5m': Granularity.FiveMinute,
150-
'10m': Granularity.TenMinute,
151150
'15m': Granularity.FifteenMinute,
152151
'30m': Granularity.ThirtyMinute,
153152
'1h': Granularity.OneHour,

packages/api/src/utils/common.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ export const convertMsToGranularityString = (ms: number): Granularity => {
4646
return Granularity.OneMinute;
4747
} else if (granularitySizeSeconds <= 5 * 60) {
4848
return Granularity.FiveMinute;
49-
} else if (granularitySizeSeconds <= 10 * 60) {
50-
return Granularity.TenMinute;
5149
} else if (granularitySizeSeconds <= 15 * 60) {
5250
return Granularity.FifteenMinute;
5351
} else if (granularitySizeSeconds <= 30 * 60) {

packages/app/src/ChartUtils.tsx

Lines changed: 5 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import {
1010
ResponseJSON,
1111
} from '@hyperdx/common-utils/dist/clickhouse';
1212
import { isMetricChartConfig } from '@hyperdx/common-utils/dist/core/renderChartConfig';
13+
import {
14+
convertDateRangeToGranularityString,
15+
Granularity,
16+
} from '@hyperdx/common-utils/dist/core/utils';
1317
import {
1418
AggregateFunction as AggFnV2,
1519
ChartConfigWithDateRange,
@@ -98,24 +102,6 @@ export const getMetricAggFns = (
98102
];
99103
};
100104

101-
export enum Granularity {
102-
FifteenSecond = '15 second',
103-
ThirtySecond = '30 second',
104-
OneMinute = '1 minute',
105-
FiveMinute = '5 minute',
106-
TenMinute = '10 minute',
107-
FifteenMinute = '15 minute',
108-
ThirtyMinute = '30 minute',
109-
OneHour = '1 hour',
110-
TwoHour = '2 hour',
111-
SixHour = '6 hour',
112-
TwelveHour = '12 hour',
113-
OneDay = '1 day',
114-
TwoDay = '2 day',
115-
SevenDay = '7 day',
116-
ThirtyDay = '30 day',
117-
}
118-
119105
export const DEFAULT_CHART_CONFIG: Omit<
120106
SavedChartConfig,
121107
'source' | 'connection'
@@ -141,7 +127,7 @@ export const isGranularity = (value: string): value is Granularity => {
141127

142128
export function useTimeChartSettings(chartConfig: ChartConfigWithDateRange) {
143129
const autoGranularity = useMemo(() => {
144-
return convertDateRangeToGranularityString(chartConfig.dateRange, 80);
130+
return convertDateRangeToGranularityString(chartConfig.dateRange);
145131
}, [chartConfig.dateRange]);
146132

147133
const granularity =
@@ -233,50 +219,6 @@ export function TableToggle({
233219
);
234220
}
235221

236-
export function convertDateRangeToGranularityString(
237-
dateRange: [Date, Date],
238-
maxNumBuckets: number,
239-
): Granularity {
240-
const start = dateRange[0].getTime();
241-
const end = dateRange[1].getTime();
242-
const diffSeconds = Math.floor((end - start) / 1000);
243-
const granularitySizeSeconds = Math.ceil(diffSeconds / maxNumBuckets);
244-
245-
if (granularitySizeSeconds <= 15) {
246-
return Granularity.FifteenSecond;
247-
} else if (granularitySizeSeconds <= 30) {
248-
return Granularity.ThirtySecond;
249-
} else if (granularitySizeSeconds <= 60) {
250-
return Granularity.OneMinute;
251-
} else if (granularitySizeSeconds <= 5 * 60) {
252-
return Granularity.FiveMinute;
253-
} else if (granularitySizeSeconds <= 10 * 60) {
254-
return Granularity.TenMinute;
255-
} else if (granularitySizeSeconds <= 15 * 60) {
256-
return Granularity.FifteenMinute;
257-
} else if (granularitySizeSeconds <= 30 * 60) {
258-
return Granularity.ThirtyMinute;
259-
} else if (granularitySizeSeconds <= 3600) {
260-
return Granularity.OneHour;
261-
} else if (granularitySizeSeconds <= 2 * 3600) {
262-
return Granularity.TwoHour;
263-
} else if (granularitySizeSeconds <= 6 * 3600) {
264-
return Granularity.SixHour;
265-
} else if (granularitySizeSeconds <= 12 * 3600) {
266-
return Granularity.TwelveHour;
267-
} else if (granularitySizeSeconds <= 24 * 3600) {
268-
return Granularity.OneDay;
269-
} else if (granularitySizeSeconds <= 2 * 24 * 3600) {
270-
return Granularity.TwoDay;
271-
} else if (granularitySizeSeconds <= 7 * 24 * 3600) {
272-
return Granularity.SevenDay;
273-
} else if (granularitySizeSeconds <= 30 * 24 * 3600) {
274-
return Granularity.ThirtyDay;
275-
}
276-
277-
return Granularity.ThirtyDay;
278-
}
279-
280222
export const ChartKeyJoiner = ' · ';
281223
export const PreviousPeriodSuffix = ' (previous)';
282224

packages/app/src/DBChartPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { useCallback, useRef, useState } from 'react';
1+
import { useRef, useState } from 'react';
22
import dynamic from 'next/dynamic';
33
import Head from 'next/head';
4-
import { parseAsJson, parseAsStringEnum, useQueryState } from 'nuqs';
5-
import { useForm, useWatch } from 'react-hook-form';
4+
import { parseAsJson, useQueryState } from 'nuqs';
5+
import { useForm } from 'react-hook-form';
66
import { useHotkeys } from 'react-hotkeys-hook';
77
import { SavedChartConfig, SourceKind } from '@hyperdx/common-utils/dist/types';
88
import {
@@ -24,7 +24,7 @@ import {
2424
} from '@tabler/icons-react';
2525

2626
import api from '@/api';
27-
import { DEFAULT_CHART_CONFIG, Granularity } from '@/ChartUtils';
27+
import { DEFAULT_CHART_CONFIG } from '@/ChartUtils';
2828
import EditTimeChartForm from '@/components/DBEditTimeChartForm';
2929
import { InputControlled } from '@/components/InputControlled';
3030
import { SourceSelectControlled } from '@/components/SourceSelect';

packages/app/src/GranularityPicker.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { memo } from 'react';
22
import { useController, UseControllerProps } from 'react-hook-form';
3+
import { Granularity } from '@hyperdx/common-utils/dist/core/utils';
34
import { Select } from '@mantine/core';
45

5-
import { Granularity } from './ChartUtils';
6-
76
export default function GranularityPicker({
87
value,
98
onChange,
@@ -34,10 +33,6 @@ export default function GranularityPicker({
3433
value: Granularity.FiveMinute,
3534
label: '5 Minutes Granularity',
3635
},
37-
{
38-
value: Granularity.TenMinute,
39-
label: '10 Minutes Granularity',
40-
},
4136
{
4237
value: Granularity.ThirtyMinute,
4338
label: '30 Minutes Granularity',

packages/app/src/KubernetesDashboardPage.tsx

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import cx from 'classnames';
66
import sub from 'date-fns/sub';
77
import { useQueryState } from 'nuqs';
88
import { useForm, useWatch } from 'react-hook-form';
9+
import { convertDateRangeToGranularityString } from '@hyperdx/common-utils/dist/core/utils';
910
import { SourceKind, TSource } from '@hyperdx/common-utils/dist/types';
1011
import {
1112
Alert,
@@ -44,7 +45,6 @@ import { SourceSelectControlled } from './components/SourceSelect';
4445
import { useQueriedChartConfig } from './hooks/useChartConfig';
4546
import { useDashboardRefresh } from './hooks/useDashboardRefresh';
4647
import {
47-
convertDateRangeToGranularityString,
4848
convertV1ChartConfigToV2,
4949
K8S_CPU_PERCENTAGE_NUMBER_FORMAT,
5050
K8S_MEM_NUMBER_FORMAT,
@@ -1306,10 +1306,8 @@ function KubernetesDashboardPage() {
13061306
config={convertV1ChartConfigToV2(
13071307
{
13081308
dateRange,
1309-
granularity: convertDateRangeToGranularityString(
1310-
dateRange,
1311-
60,
1312-
),
1309+
granularity:
1310+
convertDateRangeToGranularityString(dateRange),
13131311
seriesReturnType: 'column',
13141312
series: [
13151313
{
@@ -1345,10 +1343,8 @@ function KubernetesDashboardPage() {
13451343
config={convertV1ChartConfigToV2(
13461344
{
13471345
dateRange,
1348-
granularity: convertDateRangeToGranularityString(
1349-
dateRange,
1350-
60,
1351-
),
1346+
granularity:
1347+
convertDateRangeToGranularityString(dateRange),
13521348
seriesReturnType: 'column',
13531349
series: [
13541350
{
@@ -1473,10 +1469,8 @@ function KubernetesDashboardPage() {
14731469
config={convertV1ChartConfigToV2(
14741470
{
14751471
dateRange,
1476-
granularity: convertDateRangeToGranularityString(
1477-
dateRange,
1478-
60,
1479-
),
1472+
granularity:
1473+
convertDateRangeToGranularityString(dateRange),
14801474
seriesReturnType: 'column',
14811475
series: [
14821476
{
@@ -1512,10 +1506,8 @@ function KubernetesDashboardPage() {
15121506
config={convertV1ChartConfigToV2(
15131507
{
15141508
dateRange,
1515-
granularity: convertDateRangeToGranularityString(
1516-
dateRange,
1517-
60,
1518-
),
1509+
granularity:
1510+
convertDateRangeToGranularityString(dateRange),
15191511
seriesReturnType: 'column',
15201512
series: [
15211513
{
@@ -1564,10 +1556,8 @@ function KubernetesDashboardPage() {
15641556
config={convertV1ChartConfigToV2(
15651557
{
15661558
dateRange,
1567-
granularity: convertDateRangeToGranularityString(
1568-
dateRange,
1569-
60,
1570-
),
1559+
granularity:
1560+
convertDateRangeToGranularityString(dateRange),
15711561
seriesReturnType: 'column',
15721562
series: [
15731563
{
@@ -1603,10 +1593,8 @@ function KubernetesDashboardPage() {
16031593
config={convertV1ChartConfigToV2(
16041594
{
16051595
dateRange,
1606-
granularity: convertDateRangeToGranularityString(
1607-
dateRange,
1608-
60,
1609-
),
1596+
granularity:
1597+
convertDateRangeToGranularityString(dateRange),
16101598
seriesReturnType: 'column',
16111599
series: [
16121600
{

packages/app/src/NamespaceDetailsSidePanel.tsx

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
import * as React from 'react';
2-
import Link from 'next/link';
32
import { StringParam, useQueryParam, withDefault } from 'use-query-params';
43
import { tcFromSource } from '@hyperdx/common-utils/dist/core/metadata';
4+
import { convertDateRangeToGranularityString } from '@hyperdx/common-utils/dist/core/utils';
55
import { TSource } from '@hyperdx/common-utils/dist/types';
66
import {
7-
Anchor,
87
Badge,
9-
Box,
108
Card,
119
Drawer,
1210
Flex,
1311
Grid,
14-
ScrollArea,
1512
SegmentedControl,
1613
Text,
1714
} from '@mantine/core';
1815

1916
import {
20-
convertDateRangeToGranularityString,
2117
convertV1ChartConfigToV2,
2218
K8S_CPU_PERCENTAGE_NUMBER_FORMAT,
2319
K8S_MEM_NUMBER_FORMAT,
@@ -367,10 +363,8 @@ export default function NamespaceDetailsSidePanel({
367363
config={convertV1ChartConfigToV2(
368364
{
369365
dateRange,
370-
granularity: convertDateRangeToGranularityString(
371-
dateRange,
372-
60,
373-
),
366+
granularity:
367+
convertDateRangeToGranularityString(dateRange),
374368
seriesReturnType: 'column',
375369
series: [
376370
{
@@ -402,10 +396,8 @@ export default function NamespaceDetailsSidePanel({
402396
config={convertV1ChartConfigToV2(
403397
{
404398
dateRange,
405-
granularity: convertDateRangeToGranularityString(
406-
dateRange,
407-
60,
408-
),
399+
granularity:
400+
convertDateRangeToGranularityString(dateRange),
409401
seriesReturnType: 'column',
410402
series: [
411403
{

packages/app/src/NodeDetailsSidePanel.tsx

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
11
import * as React from 'react';
2-
import Link from 'next/link';
32
import { StringParam, useQueryParam, withDefault } from 'use-query-params';
43
import { tcFromSource } from '@hyperdx/common-utils/dist/core/metadata';
4+
import { convertDateRangeToGranularityString } from '@hyperdx/common-utils/dist/core/utils';
5+
import { TSource } from '@hyperdx/common-utils/dist/types';
56
import {
6-
SearchConditionLanguage,
7-
TSource,
8-
} from '@hyperdx/common-utils/dist/types';
9-
import {
10-
Anchor,
117
Badge,
12-
Box,
138
Card,
149
Drawer,
1510
Flex,
1611
Grid,
17-
ScrollArea,
1812
SegmentedControl,
1913
Text,
2014
} from '@mantine/core';
2115

2216
import {
23-
convertDateRangeToGranularityString,
2417
convertV1ChartConfigToV2,
2518
K8S_CPU_PERCENTAGE_NUMBER_FORMAT,
2619
K8S_MEM_NUMBER_FORMAT,
@@ -383,10 +376,8 @@ export default function NodeDetailsSidePanel({
383376
config={convertV1ChartConfigToV2(
384377
{
385378
dateRange,
386-
granularity: convertDateRangeToGranularityString(
387-
dateRange,
388-
60,
389-
),
379+
granularity:
380+
convertDateRangeToGranularityString(dateRange),
390381
seriesReturnType: 'column',
391382
series: [
392383
{
@@ -418,10 +409,8 @@ export default function NodeDetailsSidePanel({
418409
config={convertV1ChartConfigToV2(
419410
{
420411
dateRange,
421-
granularity: convertDateRangeToGranularityString(
422-
dateRange,
423-
60,
424-
),
412+
granularity:
413+
convertDateRangeToGranularityString(dateRange),
425414
seriesReturnType: 'column',
426415
series: [
427416
{

0 commit comments

Comments
 (0)