@live-change/cron-service 0.9.165 → 0.9.167
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/interval.js +5 -2
- package/package.json +3 -3
- package/run.js +0 -47
- package/schedule.js +1 -1
- package/waitForDone.js +62 -0
package/interval.js
CHANGED
|
@@ -3,7 +3,10 @@ const app = App.app()
|
|
|
3
3
|
|
|
4
4
|
import definition from './definition.js'
|
|
5
5
|
import config from './config.js'
|
|
6
|
-
import { triggerType, runTrigger, doRunTrigger,
|
|
6
|
+
import { triggerType, runTrigger, doRunTrigger, RunState } from './run.js'
|
|
7
|
+
import createWaitingFunction from './waitForDone.js'
|
|
8
|
+
|
|
9
|
+
const waitForTasks = createWaitingFunction(definition)
|
|
7
10
|
|
|
8
11
|
export const Interval = definition.model({
|
|
9
12
|
name: "Interval",
|
|
@@ -89,7 +92,7 @@ export const IntervalInfo = definition.model({
|
|
|
89
92
|
|
|
90
93
|
async function processInterval({ id, interval, wait, trigger, firstRunDelay, isFirstRun }, { triggerService }) {
|
|
91
94
|
//console.log("PROCESSING INTERVAL", id, interval, wait, trigger, firstRunDelay, isFirstRun)
|
|
92
|
-
if(wait) await waitForTasks('cron_Interval', id)
|
|
95
|
+
if(wait) await waitForTasks('cron_Interval', id, { triggerService })
|
|
93
96
|
//console.log("WAIT FOR TASKS DONE", id)
|
|
94
97
|
const nextTimestamp = Date.now() + (isFirstRun ? (firstRunDelay || 0) : interval)
|
|
95
98
|
const nextTime = new Date(nextTimestamp)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/cron-service",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.167",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"type": "module",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@live-change/framework": "^0.9.
|
|
25
|
+
"@live-change/framework": "^0.9.167"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "1051ad24a384d88af662d655f647349281fab23a"
|
|
28
28
|
}
|
package/run.js
CHANGED
|
@@ -174,50 +174,3 @@ definition.trigger({
|
|
|
174
174
|
return 'done'
|
|
175
175
|
}
|
|
176
176
|
})
|
|
177
|
-
|
|
178
|
-
export async function waitForTasks(jobType, job) {
|
|
179
|
-
const runState = App.encodeIdentifier([jobType, job])
|
|
180
|
-
return new Promise((resolve, reject) => {
|
|
181
|
-
let done = false
|
|
182
|
-
const taskObservations = new Map()
|
|
183
|
-
function addTaskObservation(taskId) {
|
|
184
|
-
const observable = Task.observable(taskId)
|
|
185
|
-
if(!observable) return
|
|
186
|
-
const observer = {
|
|
187
|
-
set: (value) => {
|
|
188
|
-
if(!value) return updateTasks()
|
|
189
|
-
if(value.state === 'done' || value.state === 'failed') updateTasks()
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
taskObservations.set(taskId, { observable, observer })
|
|
193
|
-
observable.observe(observer)
|
|
194
|
-
}
|
|
195
|
-
async function updateTasks() {
|
|
196
|
-
if(done) return
|
|
197
|
-
const runningTasks = taskObservations.values()
|
|
198
|
-
.filter(observation => observation.observable.getValue().state !== 'done' && observation.observable.getValue().state !== 'failed')
|
|
199
|
-
if(runningTasks.length === 0) {
|
|
200
|
-
await RunState.delete(runState)
|
|
201
|
-
finish()
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
const runStateObservable = RunState.observable(runState)
|
|
205
|
-
const runStateObserver = {
|
|
206
|
-
set: (value) => {
|
|
207
|
-
if(!value) finish()
|
|
208
|
-
if(value.tasks) {
|
|
209
|
-
for(const taskId of value.tasks) {
|
|
210
|
-
addTaskObservation(taskId)
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
runStateObservable.observe(runStateObserver)
|
|
216
|
-
function finish() {
|
|
217
|
-
if(done) return
|
|
218
|
-
done = true
|
|
219
|
-
runStateObservable.unobserve(runStateObserver)
|
|
220
|
-
resolve()
|
|
221
|
-
}
|
|
222
|
-
})
|
|
223
|
-
}
|
package/schedule.js
CHANGED
|
@@ -3,7 +3,7 @@ const app = App.app()
|
|
|
3
3
|
|
|
4
4
|
import definition from './definition.js'
|
|
5
5
|
import config from './config.js'
|
|
6
|
-
import { triggerType, runTrigger, doRunTrigger
|
|
6
|
+
import { triggerType, runTrigger, doRunTrigger } from './run.js'
|
|
7
7
|
|
|
8
8
|
export const Schedule = definition.model({
|
|
9
9
|
name: "Schedule",
|
package/waitForDone.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import App from '@live-change/framework'
|
|
2
|
+
const app = App.app()
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export default function createWaitingFunction(definition) {
|
|
6
|
+
const Task = definition.foreignModel('task', 'Task')
|
|
7
|
+
const RunState = definition.foreignModel('cron', 'RunState')
|
|
8
|
+
|
|
9
|
+
return async function waitForDone(jobType, job, {triggerService, trigger}) {
|
|
10
|
+
if(typeof job !== 'string') job = App.encodeIdentifier(job.ownerType, job.owner, job.topicType, job.topic)
|
|
11
|
+
const runState = App.encodeIdentifier([jobType, job])
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
let done = false
|
|
14
|
+
const taskObservations = new Map()
|
|
15
|
+
function addTaskObservation(taskId) {
|
|
16
|
+
const observable = Task.observable(taskId)
|
|
17
|
+
if(!observable) return
|
|
18
|
+
const observer = {
|
|
19
|
+
set: (value) => {
|
|
20
|
+
if(done) return
|
|
21
|
+
if(!value) return updateTasks()
|
|
22
|
+
if(value.state === 'done' || value.state === 'failed') updateTasks()
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
taskObservations.set(taskId, { observable, observer })
|
|
26
|
+
observable.observe(observer)
|
|
27
|
+
}
|
|
28
|
+
async function updateTasks() {
|
|
29
|
+
if(done) return
|
|
30
|
+
const runningTasks = Array.from(taskObservations.values())
|
|
31
|
+
.filter(observation => observation.observable.getValue().state !== 'done' && observation.observable.getValue().state !== 'failed')
|
|
32
|
+
if(runningTasks.length === 0) {
|
|
33
|
+
//await RunState.delete(runState)
|
|
34
|
+
await triggerService({ service: 'cron', type: 'cron_deleteRunState' }, {
|
|
35
|
+
runState
|
|
36
|
+
})
|
|
37
|
+
if(done) return
|
|
38
|
+
return finish()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const runStateObservable = RunState.observable(runState)
|
|
42
|
+
const runStateObserver = {
|
|
43
|
+
set: (value) => {
|
|
44
|
+
if(done) return
|
|
45
|
+
if(!value) return finish()
|
|
46
|
+
if(value.tasks) {
|
|
47
|
+
for(const taskId of value.tasks) {
|
|
48
|
+
addTaskObservation(taskId)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
runStateObservable.observe(runStateObserver)
|
|
54
|
+
function finish() {
|
|
55
|
+
if(done) return
|
|
56
|
+
done = true
|
|
57
|
+
runStateObservable.unobserve(runStateObserver)
|
|
58
|
+
resolve()
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
}
|