NOTE that in cloud some of these fail because of built-in delays. So use diesel.isLocalhost
.
time
send::
msg diesel.cron.cancel (name="cronOnce"
)
send::
msg diesel.cron.set (name="cronOnce"
, time, singleton="yes"
, cronMsg="$msg ctx.log()"
, count:Number=1
)
Wait for it to kick before continuing - it will also dissapear:
send::
msg ctx.sleep (duration:Number=2000
)
send::
msg diesel.cron.cancel (name="cron1"
)
This will start in 1 sec and tick every 1 sec for at most 2 occurences (counts)
send::
msg diesel.cron.set (name="cron1"
, schedule="1s"
, time, singleton="yes"
, collect:Number=5
, cronMsg="$msg ctx.log()"
, count:Number=2
)
send::
msg diesel.cron.list
expect:: ( (sizeOf(payload) is 1)
)$ifc:: diesel[="isLocalhost"]
expect:: ( ((payload as string) contains "cron1")
)
send::
msg diesel.cron.cancel (name="cron1"
)
send::
msg diesel.cron.list
expect:: ( (sizeOf(payload) is 0)
)$ifc:: diesel[="isLocalhost"]
expect:: NOT ( ((payload as string) contains "cron1")
)
send::
msg ctx.set (diesel.realm.props.testcron:Number=1
)
send::
msg diesel.realm.set (diesel.cron.await:Boolean)
This will start in 1 sec and tick every 1 sec for at most 2 occurences (counts)
send::
msg diesel.cron.set (name="cron2"
, schedule="1s"
, time, singleton="yes"
, collect:Number=5
, cronMsg ="$msg testdiesel.crontick( )"
..., doneMsg ="$msg testdiesel.crondone(name="
..., count:Number=2
, inSequence:Boolean)
send::
msg diesel.cron.list
expect:: ( (sizeOf(payload) is 1)
)$ifc:: diesel[="isLocalhost"]
expect:: ( ((payload as string) contains "cron2")
)
send::
msg ctx.sleep (duration:Number=4000
)
send::
msg ctx.set (p50)
expect:: (p50 is "3cron2"
)$ifc:: diesel[="isLocalhost"]
Timer is now done:
send::
msg diesel.cron.list
expect:: NOT ( ((payload as string) contains "cron2")
)$ifc:: diesel[="isLocalhost"]
See http://www.quartz-scheduler.org/api/2.1.7/org/quartz/CronExpression.html
send::
msg ctx.set (diesel.realm.props.testcronEX:Number=1
)
Kick it every second and let it tick twice - uses a cron expression instead of schedule
send::
msg diesel.cron.set (name="cronQ"
, cronExpr="* * * * * ?"
, singleton="yes"
, collect:Number=5
, cronMsg ="$msg testdiesel.crontickEX( )"
..., count:Number=2
)
Be careful - expressions like "* */5 * * * ?" would still kick every second, you'd probably want "0 */5 * * * ?"!
send::
msg diesel.cron.list
expect:: ( (sizeOf(payload) is 1)
)$ifc:: diesel[="isLocalhost"]
expect:: ( ((payload as string) contains "cronQ")
)
send::
msg ctx.sleep (duration:Number=4000
)
send::
msg ctx.set (p50)
expect:: (p50 is 3
)
Timer is now done:
send::
msg diesel.cron.list
expect:: NOT ( ((payload as string) contains "cronQ")
)
send::
msg ctx.set (diesel.realm.props.testcron:Number=1
)
send::
msg diesel.cron.set (name="cron4"
, schedule="1s"
, endTime, singleton="yes"
, collect:Number=5
, count:Number=5
, cronMsg ="$msg testdiesel.crontick( )"
...)
send::
msg diesel.cron.list
expect:: ( (sizeOf(payload) is 1)
)$ifc:: diesel[="isLocalhost"]
expect:: ( ((payload as string) contains "cron4")
)
send::
msg ctx.sleep (duration:Number=4000
)
send::
msg ctx.set (p50)
expect:: (p50 > 2
)$ifc:: diesel[="isLocalhost"]
expect:: (p50 < 4
)$ifc:: diesel[="isLocalhost"]
Timer is now done:
send::
msg diesel.cron.list
expect:: NOT ( ((payload as string) contains "cron4")
)$ifc:: diesel[="isLocalhost"]
send::
msg diesel.cron.validate (cronExpr="haha?"
)
send::
msg diesel.catch
expect:: (payload is Exception
)
send::
msg diesel.cron.validate (cronExpr="* * * * * ?"
)
expect:: (payload contains "OK"
)
send::
msg diesel.cron.nextTime (cronExpr="haha?"
)
send::
msg diesel.catch
expect:: (payload is Exception
)
send::
msg diesel.cron.nextTime (cronExpr="0 0 * * * ?"
)
expect:: (payload is Date
)
You need to log in to post a comment!