Skip to content

Commit de2cc6d

Browse files
Fix day parse (#41)
* Fix day parse * Fix day parse --------- Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
1 parent 93d14ad commit de2cc6d

File tree

4 files changed

+16
-0
lines changed

4 files changed

+16
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ go.work.sum
2323

2424
# env file
2525
.env
26+
.DS_Store

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ docker run --rm \
1919
-e 'TASK_1=*/1 * * * * /scripts/test_script1.sh' \
2020
-e 'TASK_2=@every 10s /scripts/test_script2.sh' \
2121
-e 'TASK_3=@hourly /scripts/test_script3.sh' \
22+
-e 'TASK_4=@every 1d /scripts/daily_task.sh' \
2223
ghcr.io/batonogov/gron:latest
2324
```
2425

@@ -97,6 +98,7 @@ docker run --rm \
9798
-e 'TASK_1=/5 /scripts/backup.sh' \
9899
-e 'TASK_2=@every 1h /scripts/health_check.sh' \
99100
-e 'TASK_3=@daily /scripts/daily_report.sh' \
101+
-e 'TASK_4=@every 1d /scripts/daily_task.sh' \
100102
ghcr.io/batonogov/gron:latest
101103
```
102104

main.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,16 @@ func (s *CronSchedule) shouldRun(t time.Time) bool {
158158
func parseEveryFormat(duration string) (*CronSchedule, error) {
159159
durationStr := strings.TrimPrefix(duration, "@every ")
160160

161+
// Convert days to hours
162+
if strings.HasSuffix(durationStr, "d") {
163+
daysStr := strings.TrimSuffix(durationStr, "d")
164+
days, err := strconv.Atoi(daysStr)
165+
if err != nil {
166+
return nil, fmt.Errorf("invalid days format: %v", err)
167+
}
168+
durationStr = fmt.Sprintf("%dh", days*24)
169+
}
170+
161171
d, err := time.ParseDuration(durationStr)
162172
if err != nil {
163173
return nil, err

main_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ func TestParseEveryFormat(t *testing.T) {
9292
}{
9393
{"@every 1h", time.Hour, false},
9494
{"@every 30m", 30 * time.Minute, false},
95+
{"@every 1d", 24 * time.Hour, false},
96+
{"@every 2d", 48 * time.Hour, false},
9597
{"@every abc", 0, true},
98+
{"@every 1d2h", 0, true},
9699
}
97100

98101
for _, tt := range tests {

0 commit comments

Comments
 (0)