Merge pull request 'Add vieter schedule command' (#201) from Chewing_Bever/vieter:schedule-cli into dev
ci/woodpecker/push/docs Pipeline was successful
Details
ci/woodpecker/push/lint Pipeline was successful
Details
ci/woodpecker/push/arch Pipeline was successful
Details
ci/woodpecker/push/build Pipeline was successful
Details
ci/woodpecker/push/test Pipeline was successful
Details
ci/woodpecker/push/docker Pipeline was successful
Details
ci/woodpecker/push/deploy Pipeline was successful
Details
ci/woodpecker/push/docs Pipeline was successful
Details
ci/woodpecker/push/lint Pipeline was successful
Details
ci/woodpecker/push/arch Pipeline was successful
Details
ci/woodpecker/push/build Pipeline was successful
Details
ci/woodpecker/push/test Pipeline was successful
Details
ci/woodpecker/push/docker Pipeline was successful
Details
ci/woodpecker/push/deploy Pipeline was successful
Details
Reviewed-on: vieter/vieter#201pull/196/head
commit
cdb88e1620
|
@ -0,0 +1,30 @@
|
||||||
|
module schedule
|
||||||
|
|
||||||
|
import cli
|
||||||
|
import cron.expression { parse_expression }
|
||||||
|
import time
|
||||||
|
|
||||||
|
// cmd returns the cli submodule for previewing a cron schedule.
|
||||||
|
pub fn cmd() cli.Command {
|
||||||
|
return cli.Command{
|
||||||
|
name: 'schedule'
|
||||||
|
usage: 'schedule'
|
||||||
|
description: 'Preview the behavior of a cron schedule.'
|
||||||
|
flags: [
|
||||||
|
cli.Flag{
|
||||||
|
name: 'count'
|
||||||
|
description: 'How many scheduled times to show.'
|
||||||
|
flag: cli.FlagType.int
|
||||||
|
default_value: ['5']
|
||||||
|
},
|
||||||
|
]
|
||||||
|
execute: fn (cmd cli.Command) ? {
|
||||||
|
ce := parse_expression(cmd.args.join(' '))?
|
||||||
|
count := cmd.flags.get_int('count')?
|
||||||
|
|
||||||
|
for t in ce.next_n(time.now(), count)? {
|
||||||
|
println(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -121,6 +121,20 @@ pub fn (ce &CronExpression) next_from_now() ?time.Time {
|
||||||
return ce.next(time.now())
|
return ce.next(time.now())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// next_n returns the n next occurences of the expression, given a starting
|
||||||
|
// time.
|
||||||
|
pub fn (ce &CronExpression) next_n(ref time.Time, n int) ?[]time.Time {
|
||||||
|
mut times := []time.Time{cap: n}
|
||||||
|
|
||||||
|
times << ce.next(ref)?
|
||||||
|
|
||||||
|
for i in 1 .. n {
|
||||||
|
times << ce.next(times[i - 1])?
|
||||||
|
}
|
||||||
|
|
||||||
|
return times
|
||||||
|
}
|
||||||
|
|
||||||
// parse_range parses a given string into a range of sorted integers, if
|
// parse_range parses a given string into a range of sorted integers, if
|
||||||
// possible.
|
// possible.
|
||||||
fn parse_range(s string, min int, max int, mut bitv []bool) ? {
|
fn parse_range(s string, min int, max int, mut bitv []bool) ? {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import server
|
||||||
import cli
|
import cli
|
||||||
import console.git
|
import console.git
|
||||||
import console.logs
|
import console.logs
|
||||||
|
import console.schedule
|
||||||
import cron
|
import cron
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -27,6 +28,7 @@ fn main() {
|
||||||
git.cmd(),
|
git.cmd(),
|
||||||
cron.cmd(),
|
cron.cmd(),
|
||||||
logs.cmd(),
|
logs.cmd(),
|
||||||
|
schedule.cmd(),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
app.setup()
|
app.setup()
|
||||||
|
|
Loading…
Reference in New Issue