Skip to content

Commit d97a719

Browse files
committed
feat: buffer scheduler actions
1 parent 339cf0d commit d97a719

File tree

9 files changed

+440
-301
lines changed

9 files changed

+440
-301
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
export const SCHEDULER_MAX_DELAY_IN_MS = 30 * 60 * 1000
2+
export const SCHEDULER_DEFAULT_INTERVAL_IN_MS = 10 * 60 * 1000
3+
4+
export const TIME_OF_DAY_DESCRIPTION =
5+
'What time of day should this workflow start? This workflow will run at any point within the specified hour to help distribute load across all users.'
6+
7+
export const TIME_OF_DAY_OPTIONS = [
8+
{
9+
label: '00:00',
10+
value: 0,
11+
},
12+
{
13+
label: '01:00',
14+
value: 1,
15+
},
16+
{
17+
label: '02:00',
18+
value: 2,
19+
},
20+
{
21+
label: '03:00',
22+
value: 3,
23+
},
24+
{
25+
label: '04:00',
26+
value: 4,
27+
},
28+
{
29+
label: '05:00',
30+
value: 5,
31+
},
32+
{
33+
label: '06:00',
34+
value: 6,
35+
},
36+
{
37+
label: '07:00',
38+
value: 7,
39+
},
40+
{
41+
label: '08:00',
42+
value: 8,
43+
},
44+
{
45+
label: '09:00',
46+
value: 9,
47+
},
48+
{
49+
label: '10:00',
50+
value: 10,
51+
},
52+
{
53+
label: '11:00',
54+
value: 11,
55+
},
56+
{
57+
label: '12:00',
58+
value: 12,
59+
},
60+
{
61+
label: '13:00',
62+
value: 13,
63+
},
64+
{
65+
label: '14:00',
66+
value: 14,
67+
},
68+
{
69+
label: '15:00',
70+
value: 15,
71+
},
72+
{
73+
label: '16:00',
74+
value: 16,
75+
},
76+
{
77+
label: '17:00',
78+
value: 17,
79+
},
80+
{
81+
label: '18:00',
82+
value: 18,
83+
},
84+
{
85+
label: '19:00',
86+
value: 19,
87+
},
88+
{
89+
label: '20:00',
90+
value: 20,
91+
},
92+
{
93+
label: '21:00',
94+
value: 21,
95+
},
96+
{
97+
label: '22:00',
98+
value: 22,
99+
},
100+
{
101+
label: '23:00',
102+
value: 23,
103+
},
104+
]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { DateTime } from 'luxon'
2+
3+
export default function getInternalId(dateTime: DateTime) {
4+
return dateTime.set({ millisecond: 0 }).toMillis().toString()
5+
}

packages/backend/src/apps/scheduler/triggers/every-day/index.ts

Lines changed: 8 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ import { IGlobalVariable, IRawTrigger } from '@plumber/types'
22

33
import { DateTime } from 'luxon'
44

5+
import {
6+
TIME_OF_DAY_DESCRIPTION,
7+
TIME_OF_DAY_OPTIONS,
8+
} from '../../common/constants'
59
import cronTimes from '../../common/cron-times'
610
import getDateTimeObjectRepresentation from '../../common/get-date-time-object'
11+
import getInternalId from '../../common/get-internal-id'
712
import getNextCronDateTime from '../../common/get-next-cron-date-time'
813
import getDataOutMetadata from '../get-data-out-metadata'
914

@@ -34,109 +39,12 @@ const trigger: IRawTrigger = {
3439
label: 'Time of day',
3540
key: 'hour',
3641
type: 'dropdown' as const,
37-
description: 'What time of day should this flow trigger at?',
42+
description: TIME_OF_DAY_DESCRIPTION,
3843
required: true,
3944
value: null,
4045
variables: false,
4146
showOptionValue: false,
42-
options: [
43-
{
44-
label: '00:00',
45-
value: 0,
46-
},
47-
{
48-
label: '01:00',
49-
value: 1,
50-
},
51-
{
52-
label: '02:00',
53-
value: 2,
54-
},
55-
{
56-
label: '03:00',
57-
value: 3,
58-
},
59-
{
60-
label: '04:00',
61-
value: 4,
62-
},
63-
{
64-
label: '05:00',
65-
value: 5,
66-
},
67-
{
68-
label: '06:00',
69-
value: 6,
70-
},
71-
{
72-
label: '07:00',
73-
value: 7,
74-
},
75-
{
76-
label: '08:00',
77-
value: 8,
78-
},
79-
{
80-
label: '09:00',
81-
value: 9,
82-
},
83-
{
84-
label: '10:00',
85-
value: 10,
86-
},
87-
{
88-
label: '11:00',
89-
value: 11,
90-
},
91-
{
92-
label: '12:00',
93-
value: 12,
94-
},
95-
{
96-
label: '13:00',
97-
value: 13,
98-
},
99-
{
100-
label: '14:00',
101-
value: 14,
102-
},
103-
{
104-
label: '15:00',
105-
value: 15,
106-
},
107-
{
108-
label: '16:00',
109-
value: 16,
110-
},
111-
{
112-
label: '17:00',
113-
value: 17,
114-
},
115-
{
116-
label: '18:00',
117-
value: 18,
118-
},
119-
{
120-
label: '19:00',
121-
value: 19,
122-
},
123-
{
124-
label: '20:00',
125-
value: 20,
126-
},
127-
{
128-
label: '21:00',
129-
value: 21,
130-
},
131-
{
132-
label: '22:00',
133-
value: 22,
134-
},
135-
{
136-
label: '23:00',
137-
value: 23,
138-
},
139-
],
47+
options: TIME_OF_DAY_OPTIONS,
14048
},
14149
],
14250
getDataOutMetadata,
@@ -161,7 +69,7 @@ const trigger: IRawTrigger = {
16169
const dataItem = {
16270
raw: dateTimeObjectRepresentation,
16371
meta: {
164-
internalId: dateTime.toMillis().toString(),
72+
internalId: getInternalId(dateTime),
16573
},
16674
}
16775

packages/backend/src/apps/scheduler/triggers/every-hour/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DateTime } from 'luxon'
44

55
import cronTimes from '../../common/cron-times'
66
import getDateTimeObjectRepresentation from '../../common/get-date-time-object'
7+
import getInternalId from '../../common/get-internal-id'
78
import getNextCronDateTime from '../../common/get-next-cron-date-time'
89
import getDataOutMetadata from '../get-data-out-metadata'
910

@@ -53,7 +54,7 @@ const trigger: IRawTrigger = {
5354
const dataItem = {
5455
raw: dateTimeObjectRepresentation,
5556
meta: {
56-
internalId: dateTime.toMillis().toString(),
57+
internalId: getInternalId(dateTime),
5758
},
5859
}
5960

packages/backend/src/apps/scheduler/triggers/every-month/index.ts

Lines changed: 8 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@ import { IGlobalVariable, IRawTrigger } from '@plumber/types'
22

33
import { DateTime } from 'luxon'
44

5+
import {
6+
TIME_OF_DAY_DESCRIPTION,
7+
TIME_OF_DAY_OPTIONS,
8+
} from '../../common/constants'
59
import cronTimes from '../../common/cron-times'
610
import getDateTimeObjectRepresentation from '../../common/get-date-time-object'
11+
import getInternalId from '../../common/get-internal-id'
712
import getNextCronDateTime from '../../common/get-next-cron-date-time'
813
import getDataOutMetadata from '../get-data-out-metadata'
914

@@ -153,109 +158,12 @@ const trigger: IRawTrigger = {
153158
label: 'Time of day',
154159
key: 'hour',
155160
type: 'dropdown' as const,
156-
description: 'What time of day should this flow trigger at?',
161+
description: TIME_OF_DAY_DESCRIPTION,
157162
required: true,
158163
value: null,
159164
variables: false,
160165
showOptionValue: false,
161-
options: [
162-
{
163-
label: '00:00',
164-
value: 0,
165-
},
166-
{
167-
label: '01:00',
168-
value: 1,
169-
},
170-
{
171-
label: '02:00',
172-
value: 2,
173-
},
174-
{
175-
label: '03:00',
176-
value: 3,
177-
},
178-
{
179-
label: '04:00',
180-
value: 4,
181-
},
182-
{
183-
label: '05:00',
184-
value: 5,
185-
},
186-
{
187-
label: '06:00',
188-
value: 6,
189-
},
190-
{
191-
label: '07:00',
192-
value: 7,
193-
},
194-
{
195-
label: '08:00',
196-
value: 8,
197-
},
198-
{
199-
label: '09:00',
200-
value: 9,
201-
},
202-
{
203-
label: '10:00',
204-
value: 10,
205-
},
206-
{
207-
label: '11:00',
208-
value: 11,
209-
},
210-
{
211-
label: '12:00',
212-
value: 12,
213-
},
214-
{
215-
label: '13:00',
216-
value: 13,
217-
},
218-
{
219-
label: '14:00',
220-
value: 14,
221-
},
222-
{
223-
label: '15:00',
224-
value: 15,
225-
},
226-
{
227-
label: '16:00',
228-
value: 16,
229-
},
230-
{
231-
label: '17:00',
232-
value: 17,
233-
},
234-
{
235-
label: '18:00',
236-
value: 18,
237-
},
238-
{
239-
label: '19:00',
240-
value: 19,
241-
},
242-
{
243-
label: '20:00',
244-
value: 20,
245-
},
246-
{
247-
label: '21:00',
248-
value: 21,
249-
},
250-
{
251-
label: '22:00',
252-
value: 22,
253-
},
254-
{
255-
label: '23:00',
256-
value: 23,
257-
},
258-
],
166+
options: TIME_OF_DAY_OPTIONS,
259167
},
260168
],
261169
getDataOutMetadata,
@@ -281,7 +189,7 @@ const trigger: IRawTrigger = {
281189
const dataItem = {
282190
raw: dateTimeObjectRepresentation,
283191
meta: {
284-
internalId: dateTime.toMillis().toString(),
192+
internalId: getInternalId(dateTime),
285193
},
286194
}
287195

0 commit comments

Comments
 (0)