Skip to content

SantanuKar43/cron-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Description

Cron expression parser loosely based on the format specified here: https://www.ibm.com/docs/en/db2/12.1?topic=task-unix-cron-format and here: https://en.wikipedia.org/wiki/Cron#:~:text=web%20hosting%20environment.-,Cron%20expression,-%5Bedit%5D

Allows for slash operators like "1/2" to be processed as "1-{last valid value}/2"

Features

  • Parses standard UNIX-like cron expressions (minute, hour, day of month, month, day of week).

  • Supports special characters ("*", "-", ",", "/").

  • Outputs all valid values for each of the fields as per the given expression.

  • All field names and their allowed values:

    Field name Allowed values Allowed special characters
    minute 0-59 * , / -
    hour 0-23 * , / -
    day of month 1-31 * , / -
    month 1-12 * , / -
    day of week 0-6 * , / -

Dependencies:

Build

From project root, run:

$ mvn clean package

Test

From project root, run:

$ mvn verify

Current code coverage report:

Package Missed Instructions Coverage Missed Branches Branch Coverage Complexity Missed Complexity Covered Missed Lines Covered Lines Missed Methods Covered Methods Missed Classes
org.cronparser.model 111 49% 10 50% 20 30 11 40 10 20 4
org.cronparser 15 0% N/A N/A 2 2 4 4 2 2 1
org.cronparser.parser.field 0 100% 1 97% 1 31 0 70 0 12 1
org.cronparser.parser 0 100% 0 100% 0 7 0 20 0 3 1

Total Coverage Summary

  • Instructions: 82%
  • Branches: 83%

Run

$ java -jar cronparser-1.0-SNAPSHOT.jar "*/15 0 1,15 * 1-5 /usr/bin/find"
  • If building from the source code, navigate to the project root directory and run:
$ mvn clean package
$ java -jar target/cronparser-1.0-SNAPSHOT.jar "*/15 0 1,15 * 1-5 /usr/bin/find"
  • If using Docker, execute the run.sh script from the project root:
$ sh run.sh [expression]

Sample input-output

input:

$ sh run.sh "*/15 0 1,15 * 1-5 /usr/bin/find"

output:

minute        0 15 30 45
hour          0
day of month  1 15
month         1 2 3 4 5 6 7 8 9 10 11 12
day of week   1 2 3 4 5
command       /usr/bin/find