From 218d62fd135db2e63a8fbd653459da8c29f81706 Mon Sep 17 00:00:00 2001 From: Arjunlal B Date: Fri, 19 Nov 2021 13:02:57 +0530 Subject: [PATCH 1/4] feat: util methods to manipulate graphqlTimeRange --- projects/observability/src/public-api.ts | 3 +++ .../src/shared/utils/time-range.test.ts | 17 ++++++++++++++++ .../src/shared/utils/time-range.ts | 20 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 projects/observability/src/shared/utils/time-range.test.ts create mode 100644 projects/observability/src/shared/utils/time-range.ts diff --git a/projects/observability/src/public-api.ts b/projects/observability/src/public-api.ts index 5b746d229..19487cd12 100644 --- a/projects/observability/src/public-api.ts +++ b/projects/observability/src/public-api.ts @@ -382,3 +382,6 @@ export * from './shared/components/label-detail/label-detail.module'; // Bar Gauge export * from './shared/components/bar-gauge/bar-gauge.component'; export * from './shared/components/bar-gauge/bar-gauge.module'; + +// Time Range utils +export * from './shared/utils/time-range'; diff --git a/projects/observability/src/shared/utils/time-range.test.ts b/projects/observability/src/shared/utils/time-range.test.ts new file mode 100644 index 000000000..6071d89c2 --- /dev/null +++ b/projects/observability/src/shared/utils/time-range.test.ts @@ -0,0 +1,17 @@ +import { TimeUnit } from '@hypertrace/common'; +import { getDurationFromTimeRange, getPreviousTimeRange, GraphQlTimeRange } from '@hypertrace/observability'; + +describe('Time Range Util', () => { + const oneHourRange = new GraphQlTimeRange( new Date(1637298000000), new Date(1637301600000)); + const twoHourRange = new GraphQlTimeRange( new Date(1637294400000), new Date(1637301600000)); + test('computes previous time window as expected', () => { + const previousTimeRange = getPreviousTimeRange(oneHourRange); + expect(new Date(previousTimeRange.from).getTime()).toEqual(1637294400000); + expect(new Date(previousTimeRange.to).getTime()).toEqual(1637298000000); + }); + + test('computes time duration from time range as expected', () => { + expect(getDurationFromTimeRange(oneHourRange).getAmountForUnit(TimeUnit.Hour)).toBe(1); + expect(getDurationFromTimeRange(twoHourRange).getAmountForUnit(TimeUnit.Hour)).toBe(2); + }); +}) diff --git a/projects/observability/src/shared/utils/time-range.ts b/projects/observability/src/shared/utils/time-range.ts new file mode 100644 index 000000000..899d5e2f4 --- /dev/null +++ b/projects/observability/src/shared/utils/time-range.ts @@ -0,0 +1,20 @@ +import { TimeDuration, TimeUnit } from '@hypertrace/common'; +import { GraphQlTimeRange } from '../graphql/model/schema/timerange/graphql-time-range'; + +export const getPreviousTimeRange = (timeRange: GraphQlTimeRange): GraphQlTimeRange => { + const requiredDuration: TimeDuration = new TimeDuration( + timeRange.asArgumentObject().endTime.getTime() - timeRange.asArgumentObject().startTime.getTime(), + TimeUnit.Millisecond + ); + + return new GraphQlTimeRange( + timeRange.asArgumentObject().startTime.getTime() - requiredDuration.getAmountForUnit(TimeUnit.Millisecond), + timeRange.asArgumentObject().startTime.getTime() + ); +}; + +export const getDurationFromTimeRange = (timeRange: GraphQlTimeRange): TimeDuration => + new TimeDuration( + timeRange.asArgumentObject().endTime.getTime() - timeRange.asArgumentObject().startTime.getTime(), + TimeUnit.Millisecond + ); From f41437313f84befb68b64656f84036276540d5f8 Mon Sep 17 00:00:00 2001 From: Arjunlal B Date: Fri, 19 Nov 2021 14:00:37 +0530 Subject: [PATCH 2/4] fix: refactor --- .../model/schema/timerange/graphql-time-range.ts | 9 ++++++++- .../observability/src/shared/utils/time-range.test.ts | 9 +-------- projects/observability/src/shared/utils/time-range.ts | 11 +---------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/projects/observability/src/shared/graphql/model/schema/timerange/graphql-time-range.ts b/projects/observability/src/shared/graphql/model/schema/timerange/graphql-time-range.ts index ae798a220..10469f7d1 100644 --- a/projects/observability/src/shared/graphql/model/schema/timerange/graphql-time-range.ts +++ b/projects/observability/src/shared/graphql/model/schema/timerange/graphql-time-range.ts @@ -1,4 +1,4 @@ -import { TimeRange } from '@hypertrace/common'; +import { TimeDuration, TimeRange, TimeUnit } from '@hypertrace/common'; export class GraphQlTimeRange { public static fromTimeRange(timeRange: Pick): GraphQlTimeRange { @@ -13,4 +13,11 @@ export class GraphQlTimeRange { endTime: typeof this.to === 'number' ? new Date(this.to) : this.to }; } + + public asTimeDuration(): TimeDuration { + return new TimeDuration( + this.asArgumentObject().endTime.getTime() - this.asArgumentObject().startTime.getTime(), + TimeUnit.Millisecond + ); + } } diff --git a/projects/observability/src/shared/utils/time-range.test.ts b/projects/observability/src/shared/utils/time-range.test.ts index 6071d89c2..244030a11 100644 --- a/projects/observability/src/shared/utils/time-range.test.ts +++ b/projects/observability/src/shared/utils/time-range.test.ts @@ -1,17 +1,10 @@ -import { TimeUnit } from '@hypertrace/common'; -import { getDurationFromTimeRange, getPreviousTimeRange, GraphQlTimeRange } from '@hypertrace/observability'; +import { getPreviousTimeRange, GraphQlTimeRange } from '@hypertrace/observability'; describe('Time Range Util', () => { const oneHourRange = new GraphQlTimeRange( new Date(1637298000000), new Date(1637301600000)); - const twoHourRange = new GraphQlTimeRange( new Date(1637294400000), new Date(1637301600000)); test('computes previous time window as expected', () => { const previousTimeRange = getPreviousTimeRange(oneHourRange); expect(new Date(previousTimeRange.from).getTime()).toEqual(1637294400000); expect(new Date(previousTimeRange.to).getTime()).toEqual(1637298000000); }); - - test('computes time duration from time range as expected', () => { - expect(getDurationFromTimeRange(oneHourRange).getAmountForUnit(TimeUnit.Hour)).toBe(1); - expect(getDurationFromTimeRange(twoHourRange).getAmountForUnit(TimeUnit.Hour)).toBe(2); - }); }) diff --git a/projects/observability/src/shared/utils/time-range.ts b/projects/observability/src/shared/utils/time-range.ts index 899d5e2f4..edf296f8e 100644 --- a/projects/observability/src/shared/utils/time-range.ts +++ b/projects/observability/src/shared/utils/time-range.ts @@ -2,19 +2,10 @@ import { TimeDuration, TimeUnit } from '@hypertrace/common'; import { GraphQlTimeRange } from '../graphql/model/schema/timerange/graphql-time-range'; export const getPreviousTimeRange = (timeRange: GraphQlTimeRange): GraphQlTimeRange => { - const requiredDuration: TimeDuration = new TimeDuration( - timeRange.asArgumentObject().endTime.getTime() - timeRange.asArgumentObject().startTime.getTime(), - TimeUnit.Millisecond - ); + const requiredDuration: TimeDuration = timeRange.asTimeDuration(); return new GraphQlTimeRange( timeRange.asArgumentObject().startTime.getTime() - requiredDuration.getAmountForUnit(TimeUnit.Millisecond), timeRange.asArgumentObject().startTime.getTime() ); }; - -export const getDurationFromTimeRange = (timeRange: GraphQlTimeRange): TimeDuration => - new TimeDuration( - timeRange.asArgumentObject().endTime.getTime() - timeRange.asArgumentObject().startTime.getTime(), - TimeUnit.Millisecond - ); From 83d640243ed46e5076ee79a85e42a5f36a3d576a Mon Sep 17 00:00:00 2001 From: Arjunlal B Date: Fri, 19 Nov 2021 14:05:20 +0530 Subject: [PATCH 3/4] fix: import fix --- projects/observability/src/shared/utils/time-range.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/observability/src/shared/utils/time-range.test.ts b/projects/observability/src/shared/utils/time-range.test.ts index 244030a11..932baa56a 100644 --- a/projects/observability/src/shared/utils/time-range.test.ts +++ b/projects/observability/src/shared/utils/time-range.test.ts @@ -1,4 +1,5 @@ -import { getPreviousTimeRange, GraphQlTimeRange } from '@hypertrace/observability'; +import { GraphQlTimeRange } from '../graphql/model/schema/timerange/graphql-time-range'; +import { getPreviousTimeRange} from './time-range'; describe('Time Range Util', () => { const oneHourRange = new GraphQlTimeRange( new Date(1637298000000), new Date(1637301600000)); From 466325aeccfdfa01d9f661532414dd4de089ea1f Mon Sep 17 00:00:00 2001 From: Arjunlal B Date: Fri, 19 Nov 2021 14:23:55 +0530 Subject: [PATCH 4/4] fix: prettier fix --- projects/observability/src/shared/utils/time-range.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/observability/src/shared/utils/time-range.test.ts b/projects/observability/src/shared/utils/time-range.test.ts index 932baa56a..059940077 100644 --- a/projects/observability/src/shared/utils/time-range.test.ts +++ b/projects/observability/src/shared/utils/time-range.test.ts @@ -1,11 +1,11 @@ import { GraphQlTimeRange } from '../graphql/model/schema/timerange/graphql-time-range'; -import { getPreviousTimeRange} from './time-range'; +import { getPreviousTimeRange } from './time-range'; describe('Time Range Util', () => { - const oneHourRange = new GraphQlTimeRange( new Date(1637298000000), new Date(1637301600000)); + const oneHourRange = new GraphQlTimeRange(new Date(1637298000000), new Date(1637301600000)); test('computes previous time window as expected', () => { const previousTimeRange = getPreviousTimeRange(oneHourRange); expect(new Date(previousTimeRange.from).getTime()).toEqual(1637294400000); expect(new Date(previousTimeRange.to).getTime()).toEqual(1637298000000); }); -}) +});