30 lines
2.1 KiB
Plaintext
30 lines
2.1 KiB
Plaintext
-- SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
|
--
|
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-- Jobs to be executed as soon as possible in the background (so not to delay HTTP-responses, or triggered by cron-system without associated HTTP-Request)
|
|
QueuedJob
|
|
content Value -- JSON-encoded description of the work to be done (send an email to "test@example.org", find all recipients for a certain notifications and queue one new job each, distribute all submissions for a sheet to correctors, ...)
|
|
creationInstance InstanceId -- multiple uni2work-instances access the same database, record which instance created this job for debugging purposes
|
|
creationTime UTCTime
|
|
lockInstance InstanceId Maybe -- instance that has started to execute this job
|
|
lockTime UTCTime Maybe -- time when execution had begun
|
|
writeLastExec Bool default=false -- record successful execution to CronLastExec
|
|
deriving Eq Read Show Generic
|
|
|
|
-- Jobs are deleted from @QueuedJob@ after they are executed successfully and recorded in @CronLastExec@
|
|
-- There is a Cron-system that, at set intervals, queries the database for work to be done in the background (i.e. if a lecturer has set a sheet's submissions to be automatically distributed and the submission deadline passed since the last check, then queue a new job to actually do the distribution)
|
|
-- For the cron-system to determine whether a job needs to be done it needs to know if and when it was last (or ever) executed (i.e. a sheet's submissions should not be distributed twice)
|
|
CronLastExec
|
|
job Value -- JSON-encoded description of work done
|
|
time UTCTime -- When was the job executed
|
|
instance InstanceId -- Which uni2work-instance did the work
|
|
UniqueCronLastExec job
|
|
deriving Generic
|
|
|
|
TokenBucket
|
|
ident TokenBucketIdent
|
|
lastValue Int64
|
|
lastAccess UTCTime
|
|
Primary ident
|
|
deriving Generic |