Skip to content

Commit 9315e9c

Browse files
authoredMar 18, 2025··
ref(dashboards): Add more explicit typing to some TimeSeries (#87287)
A little cleanup. This makes type checking more pleasant, because if the data becomes invalid at any point, the error will point directly to where the data is created, rather to where it was used. I peeled this off another PR I'm working on.
1 parent a06bc8f commit 9315e9c

6 files changed

+24
-15
lines changed
 

‎static/app/utils/timeSeries/scaleTimeSeriesData.spec.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import {DurationUnit, RateUnit, SizeUnit} from 'sentry/utils/discover/fields';
2+
import type {TimeSeries} from 'sentry/views/dashboards/widgets/common/types';
23

34
import {scaleTimeSeriesData} from './scaleTimeSeriesData';
45

56
describe('scaleTimeSeriesData', () => {
67
describe('does not scale unscalable types', () => {
7-
const timeSeries = {
8+
const timeSeries: TimeSeries = {
89
field: 'user',
910
data: [
1011
{
@@ -27,7 +28,7 @@ describe('scaleTimeSeriesData', () => {
2728
});
2829

2930
it('does not scale duration units from second to gigabyte', () => {
30-
const timeSeries = {
31+
const timeSeries: TimeSeries = {
3132
field: 'transaction.duration',
3233
data: [
3334
{
@@ -45,7 +46,7 @@ describe('scaleTimeSeriesData', () => {
4546
});
4647

4748
it('scales duration units from second to millisecond', () => {
48-
const timeSeries = {
49+
const timeSeries: TimeSeries = {
4950
field: 'transaction.duration',
5051
data: [
5152
{
@@ -75,7 +76,7 @@ describe('scaleTimeSeriesData', () => {
7576
});
7677

7778
it('scales size units from mebibyte to byte', () => {
78-
const timeSeries = {
79+
const timeSeries: TimeSeries = {
7980
field: 'file.size',
8081
data: [
8182
{

‎static/app/utils/timeSeries/splitSeriesIntoCompleteAndIncomplete.spec.tsx

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import {resetMockDate, setMockDate} from 'sentry-test/utils';
22

3+
import type {TimeSeries} from 'sentry/views/dashboards/widgets/common/types';
4+
35
import {DurationUnit} from '../discover/fields';
46

57
import {splitSeriesIntoCompleteAndIncomplete} from './splitSeriesIntoCompleteAndIncomplete';
@@ -14,7 +16,7 @@ describe('splitSeriesIntoCompleteAndIncomplete', () => {
1416
});
1517

1618
it('Does not split a series with all complete data', () => {
17-
const serie = {
19+
const serie: TimeSeries = {
1820
field: 'p99(span.duration)',
1921
data: [
2022
{
@@ -60,7 +62,7 @@ describe('splitSeriesIntoCompleteAndIncomplete', () => {
6062
});
6163

6264
it('Does not split a series with all incomplete data', () => {
63-
const serie = {
65+
const serie: TimeSeries = {
6466
field: 'p99(span.duration)',
6567
data: [
6668
{
@@ -114,7 +116,7 @@ describe('splitSeriesIntoCompleteAndIncomplete', () => {
114116
});
115117

116118
it('Splits a series with partial incomplete data', () => {
117-
const serie = {
119+
const serie: TimeSeries = {
118120
field: 'p99(span.duration)',
119121
data: [
120122
{
@@ -183,7 +185,7 @@ describe('splitSeriesIntoCompleteAndIncomplete', () => {
183185
it('Splits a series with long buckets', () => {
184186
// The time buckets are an hour long. The ingestion delay is 90s. The last buckets should be marked incomplete.
185187

186-
const serie = {
188+
const serie: TimeSeries = {
187189
field: 'p99(span.duration)',
188190
data: [
189191
{

‎static/app/views/dashboards/widgets/bigNumberWidget/bigNumberWidgetVisualization.stories.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import storyBook from 'sentry/stories/storyBook';
99
import {space} from 'sentry/styles/space';
1010
import {DurationUnit, RateUnit} from 'sentry/utils/discover/fields';
1111

12+
import type {Meta} from '../common/types';
13+
1214
import {BigNumberWidgetVisualization} from './bigNumberWidgetVisualization';
1315

1416
export default storyBook('BigNumberWidgetVisualization', story => {
@@ -219,7 +221,7 @@ export default storyBook('BigNumberWidgetVisualization', story => {
219221
});
220222

221223
story('Thresholds', () => {
222-
const meta = {
224+
const meta: Meta = {
223225
type: 'rate',
224226
unit: RateUnit.PER_SECOND,
225227
};

‎static/app/views/dashboards/widgets/timeSeriesWidget/fixtures/sampleDurationTimeSeries.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {DurationUnit} from 'sentry/utils/discover/fields';
22

3-
export const sampleDurationTimeSeries = {
3+
import {TimeSeries} from '../../common/types';
4+
5+
export const sampleDurationTimeSeries: TimeSeries = {
46
field: 'p99(span.duration)',
57
meta: {
68
type: 'duration',

‎static/app/views/dashboards/widgets/timeSeriesWidget/fixtures/sampleThroughputTimeSeries.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {RateUnit} from 'sentry/utils/discover/fields';
22

3-
export const sampleThroughputTimeSeries = {
3+
import {TimeSeries} from '../../common/types';
4+
5+
export const sampleThroughputTimeSeries: TimeSeries = {
46
field: 'eps()',
57
meta: {
68
type: 'rate',

‎static/app/views/dashboards/widgets/timeSeriesWidget/timeSeriesWidgetVisualization.stories.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const sampleDurationTimeSeries2 = {
3232
data: sampleDurationTimeSeries.data.map(datum => {
3333
return {
3434
...datum,
35-
value: datum.value * 0.3 + 30 * Math.random(),
35+
value: datum.value ? datum.value * 0.3 + 30 * Math.random() : null,
3636
};
3737
}),
3838
};
@@ -257,12 +257,12 @@ export default storyBook('TimeSeriesWidgetVisualization', (story, APIReference)
257257
const millisecondsSeries = sampleDurationTimeSeries;
258258

259259
// Create a very similar series, but with a different unit to demonstrate automatic scaling
260-
const secondsSeries = {
260+
const secondsSeries: TimeSeries = {
261261
field: 'p99(span.self_time)',
262262
data: sampleDurationTimeSeries.data.map(datum => {
263263
return {
264264
...datum,
265-
value: (datum.value / 1000) * (1 + Math.random() / 10), // Introduce jitter so the series is visible
265+
value: datum.value ? (datum.value / 1000) * (1 + Math.random() / 10) : null, // Introduce jitter so the series is visible
266266
};
267267
}),
268268
meta: {
@@ -375,7 +375,7 @@ export default storyBook('TimeSeriesWidgetVisualization', (story, APIReference)
375375
story('Color', () => {
376376
const theme = useTheme();
377377

378-
const timeSeries = {
378+
const timeSeries: TimeSeries = {
379379
...sampleThroughputTimeSeries,
380380
field: 'error_rate()',
381381
meta: {

0 commit comments

Comments
 (0)
Please sign in to comment.