@@ -2,8 +2,11 @@ package kube_janitor
22
33import (
44 "fmt"
5+ "strconv"
56 "strings"
67 "time"
8+
9+ "fortio.org/duration"
710)
811
912var (
@@ -29,20 +32,36 @@ var (
2932 }
3033)
3134
32- func (j * Janitor ) checkExpiryDate (value string ) (parsedTime * time.Time , expired bool , err error ) {
35+ func (j * Janitor ) checkExpiryDate (createdAt time. Time , expiry string ) (parsedTime * time.Time , expired bool , err error ) {
3336 expired = false
3437
3538 // sanity checks
36- value = strings .TrimSpace (value )
37- if value == "" {
39+ expiry = strings .TrimSpace (expiry )
40+ if expiry == "" || expiry == "0 " {
3841 return
3942 }
4043
44+ // parse as unix timestamp
45+ if unixTimestamp , err := strconv .ParseInt (expiry , 10 , 64 ); err == nil {
46+ expiryTime := time .Unix (unixTimestamp , 0 )
47+ parsedTime = & expiryTime
48+ }
49+
50+ // parse duration
51+ if ! createdAt .IsZero () {
52+ if expiryDuration , err := duration .Parse (expiry ); err == nil && expiryDuration .Seconds () > 1 {
53+ expiryTime := createdAt .Add (expiryDuration )
54+ parsedTime = & expiryTime
55+ }
56+ }
57+
4158 // parse time
42- for _ , timeFormat := range janitorTimeFormats {
43- if parseVal , parseErr := time .Parse (timeFormat , value ); parseErr == nil && parseVal .Unix () > 0 {
44- parsedTime = & parseVal
45- break
59+ if parsedTime == nil {
60+ for _ , timeFormat := range janitorTimeFormats {
61+ if parseVal , parseErr := time .Parse (timeFormat , expiry ); parseErr == nil && parseVal .Unix () > 0 {
62+ parsedTime = & parseVal
63+ break
64+ }
4665 }
4766 }
4867
@@ -51,7 +70,7 @@ func (j *Janitor) checkExpiryDate(value string) (parsedTime *time.Time, expired
5170 // check if parsed time is before NOW -> expired
5271 expired = parsedTime .Before (time .Now ())
5372 } else {
54- err = fmt .Errorf ("unable to parse time '%s'" , value )
73+ err = fmt .Errorf ("unable to parse time '%s'" , expiry )
5574 }
5675
5776 return
0 commit comments