Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/winebarrel/cronplan
Cron expression parser for Amazon EventBridge.
https://github.com/winebarrel/cronplan
aws cloudwatch-events cron eventbridge golang parser
Last synced: 14 days ago
JSON representation
Cron expression parser for Amazon EventBridge.
- Host: GitHub
- URL: https://github.com/winebarrel/cronplan
- Owner: winebarrel
- License: mit
- Created: 2022-10-16T12:44:36.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-10T19:07:23.000Z (5 months ago)
- Last Synced: 2024-10-08T10:18:00.520Z (about 1 month ago)
- Topics: aws, cloudwatch-events, cron, eventbridge, golang, parser
- Language: Go
- Homepage: https://cronplan.in
- Size: 192 KB
- Stars: 25
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# cronplan
[![CI](https://github.com/winebarrel/cronplan/actions/workflows/ci.yml/badge.svg)](https://github.com/winebarrel/cronplan/actions/workflows/ci.yml)
[![Go Reference](https://pkg.go.dev/badge/github.com/winebarrel/cronplan.svg)](https://pkg.go.dev/github.com/winebarrel/cronplan)
[![Go Report Card](https://goreportcard.com/badge/github.com/winebarrel/cronplan)](https://goreportcard.com/report/github.com/winebarrel/cronplan)## Overview
Cron expression parser for Amazon EventBridge.
### Try with curl
```sh
$ curl cronplan.in -d '5 0 10 * ? *'
Tue, 10 Oct 2023 00:05:00
Fri, 10 Nov 2023 00:05:00
Sun, 10 Dec 2023 00:05:00
Wed, 10 Jan 2024 00:05:00
Sat, 10 Feb 2024 00:05:00
Sun, 10 Mar 2024 00:05:00
Wed, 10 Apr 2024 00:05:00
Fri, 10 May 2024 00:05:00
Mon, 10 Jun 2024 00:05:00
Wed, 10 Jul 2024 00:05:00
```## Installation
```sh
go get github.com/winebarrel/cronplan
```## Usage
```go
package mainimport (
"fmt"
"time""github.com/winebarrel/cronplan"
)func main() {
cron, err := cronplan.Parse("0 10 * * ? *")if err != nil {
panic(err)
}fmt.Println(cron.Minute.Exps[0].Number) //=> 0
fmt.Println(cron.Hour.Exps[0].Number) //=> 10
fmt.Println(cron.String()) //=> "0 10 * * ? *"fmt.Println(cron.Match(time.Date(2022, 11, 3, 9, 0, 0, 0, time.UTC)))
//=> false
fmt.Println(cron.Match(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC)))
//=> truefmt.Println(cron.Next(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC)))
//=> 2022-11-03 10:00:00 +0000 UTC
fmt.Println(cron.Next(time.Date(2022, 11, 3, 11, 0, 0, 0, time.UTC)))
//=> 2022-11-04 10:00:00 +0000 UTC
fmt.Println(cron.NextN(time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC), 3))
//=> [2022-11-03 10:00:00 +0000 UTC 2022-11-04 10:00:00 +0000 UTC 2022-11-05 10:00:00 +0000 UTC]fmt.Println(cron.Between(
time.Date(2022, 11, 3, 10, 0, 0, 0, time.UTC),
time.Date(2022, 11, 4, 10, 0, 0, 0, time.UTC),
))
//=> [2022-11-03 10:00:00 +0000 UTC 2022-11-04 10:00:00 +0000 UTC]
}
```## Behavior of "L" in day-of-week
If you specify "L" for day-of-week, the last day of the week of each month is usually matched.
```
# cron(0 0 ? * 6L *)
Fri, 27 Oct 2023 00:00:00
Fri, 24 Nov 2023 00:00:00
Fri, 29 Dec 2023 00:00:00
Fri, 26 Jan 2024 00:00:00
Fri, 23 Feb 2024 00:00:00
```However, if you do not specify the day of the week before "L", the behavior will be the same as when you specify "SAT".
```
# cron(0 0 ? * L *) = cron(0 0 ? * SAT *)
Sat, 07 Oct 2023 00:00:00
Sat, 14 Oct 2023 00:00:00
Sat, 21 Oct 2023 00:00:00
Sat, 28 Oct 2023 00:00:00
Sat, 04 Nov 2023 00:00:00
```# cronplan CLI
CLI to show next triggers.
## Installation
```
brew install winebarrel/cronplan/cronplan
```## Usage
```
Usage: cronplan [OPTION] CRON_EXPR
-h int
hour to add
-n int
number of next triggers (default 10)
-version
print version and exit
``````
$ cronplan '*/10 10 ? * MON-FRI *'
Tue, 11 Oct 2022 10:00:00
Tue, 11 Oct 2022 10:10:00
Tue, 11 Oct 2022 10:20:00
Tue, 11 Oct 2022 10:30:00
Tue, 11 Oct 2022 10:40:00
Tue, 11 Oct 2022 10:50:00
Wed, 12 Oct 2022 10:00:00
Wed, 12 Oct 2022 10:10:00
Wed, 12 Oct 2022 10:20:00
Wed, 12 Oct 2022 10:30:00$ cronplan -h -9 '*/10 10 ? * MON-FRI *'
Tue, 11 Oct 2022 01:00:00
Tue, 11 Oct 2022 01:10:00
Tue, 11 Oct 2022 01:20:00
Tue, 11 Oct 2022 01:30:00
Tue, 11 Oct 2022 01:40:00
Tue, 11 Oct 2022 01:50:00
Wed, 12 Oct 2022 01:00:00
Wed, 12 Oct 2022 01:10:00
Wed, 12 Oct 2022 01:20:00
Wed, 12 Oct 2022 01:30:00
```# cronmatch CLI
CLI to check if datetime matches cron expression.
## Installation
```
brew install winebarrel/cronplan/cronmatch
```## Usage
```
Usage: cronmatch [OPTION] CRON_EXPR DATE
-h int
hour to add
-no-color
disable color output
-version
print version and exit
``````
$ cronmatch -h -9 '0 1 * * ? *' '2022/10/20 10:00'
'0 1 * * ? *' matches '2022/10/20 10:00' (offset: -9h)$ cronmatch '0 10 * * ? *' 'Oct 10, 2022, 10:10'
'0 10 * * ? *' does not match 'Oct 10, 2022, 10:10'
```cf. https://github.com/araddon/dateparse
# cronviz CLI
CLI to visualize cron schedule.
inspired by [cronv](https://github.com/takumakanari/cronv), [aws-cronv](https://www.npmjs.com/package/aws-cronv).
## Installation
```
brew install winebarrel/cronplan/cronviz
```## Usage
```
Usage: cronviz [OPTION] [FILE]
-f string
from date (default current date)
-h int
hour to add
-p string
period (default "1d")
-version
print version and exit
``````
$ cat cron.txt
batch1 0 * * * ? *
batch2 30 */2 * * ? *
batch3 15,45 */3 * * ? *$ cronviz cron.txt > output.html
$ open output.html
```cf. https://raw.githack.com/winebarrel/cronplan/main/_example/timeline.html
# crongrep CLI
CLI to grep with cron expression.
## Installation
```
brew install winebarrel/cronplan/crongrep
```## Usage
```
Usage: crongrep [OPTION] CRON_EXPR
-version
print version and exit
``````
$ cronplan -n 5 '10 12 */5 * ? *'
Fri, 06 Oct 2023 12:10:00
Wed, 11 Oct 2023 12:10:00
Mon, 16 Oct 2023 12:10:00
Sat, 21 Oct 2023 12:10:00
Thu, 26 Oct 2023 12:10:00$ cronplan -n 5 '10 12 */5 * ? *' | crongrep '* * ? * WED-FRI *'
Fri, 06 Oct 2023 12:10:00
Wed, 11 Oct 2023 12:10:00
Thu, 26 Oct 2023 12:10:00
```## Related Links
* [Cron expressions reference - Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cron-expressions.html)
* https://github.com/winebarrel/terraform-provider-cronplan
* [Cron Trigger Tutorial](http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html)