fix weekday parsing in MaintenanceWindow
This commit is contained in:
parent
94e175eb12
commit
86d9b8c71c
|
|
@ -12,8 +12,6 @@ import (
|
||||||
"k8s.io/client-go/pkg/api/v1"
|
"k8s.io/client-go/pkg/api/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var alphaRegexp = regexp.MustCompile("^[a-zA-Z]*$")
|
|
||||||
|
|
||||||
type MaintenanceWindow struct {
|
type MaintenanceWindow struct {
|
||||||
StartTime time.Time // Start time
|
StartTime time.Time // Start time
|
||||||
StartWeekday time.Weekday // Start weekday
|
StartWeekday time.Weekday // Start weekday
|
||||||
|
|
@ -96,7 +94,10 @@ type PostgresqlList struct {
|
||||||
Items []Postgresql `json:"items"`
|
Items []Postgresql `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err error) {
|
var alphaRegexp = regexp.MustCompile("^[a-zA-Z]*$")
|
||||||
|
var weekdays = map[string]int{"Sun":0, "Mon":1, "Tue":2, "Wed":3, "Thu":4, "Fri":5, "Sat":6}
|
||||||
|
|
||||||
|
func ParseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err error) {
|
||||||
var timeLayout string
|
var timeLayout string
|
||||||
|
|
||||||
parts := strings.Split(s, ":")
|
parts := strings.Split(s, ":")
|
||||||
|
|
@ -107,6 +108,12 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err
|
||||||
}
|
}
|
||||||
timeLayout = "Mon:15:04"
|
timeLayout = "Mon:15:04"
|
||||||
wdProvided = true
|
wdProvided = true
|
||||||
|
weekday, ok := weekdays[parts[0]]
|
||||||
|
if !ok {
|
||||||
|
err = fmt.Errorf("incorrect weekday")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
wd = time.Weekday(weekday)
|
||||||
} else {
|
} else {
|
||||||
wdProvided = false
|
wdProvided = false
|
||||||
timeLayout = "15:04"
|
timeLayout = "15:04"
|
||||||
|
|
@ -116,8 +123,6 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
wd = tp.Weekday()
|
|
||||||
t = tp.UTC()
|
t = tp.UTC()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
@ -125,7 +130,7 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err
|
||||||
|
|
||||||
func (m *MaintenanceWindow) MarshalJSON() ([]byte, error) {
|
func (m *MaintenanceWindow) MarshalJSON() ([]byte, error) {
|
||||||
var startWd, endWd string
|
var startWd, endWd string
|
||||||
if m.StartWeekday == time.Sunday && m.EndWeekday == time.Saturday {
|
if m.StartWeekday == time.Monday && m.EndWeekday == time.Sunday {
|
||||||
startWd = ""
|
startWd = ""
|
||||||
endWd = ""
|
endWd = ""
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -151,12 +156,12 @@ func (m *MaintenanceWindow) UnmarshalJSON(data []byte) error {
|
||||||
return fmt.Errorf("incorrect maintenance window format")
|
return fmt.Errorf("incorrect maintenance window format")
|
||||||
}
|
}
|
||||||
|
|
||||||
got.StartTime, got.StartWeekday, weekdayProvidedFrom, err = parseTime(parts[0])
|
got.StartTime, got.StartWeekday, weekdayProvidedFrom, err = ParseTime(parts[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
got.EndTime, got.EndWeekday, weekdayProvidedTo, err = parseTime(parts[1])
|
got.EndTime, got.EndWeekday, weekdayProvidedTo, err = ParseTime(parts[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -165,9 +170,13 @@ func (m *MaintenanceWindow) UnmarshalJSON(data []byte) error {
|
||||||
return fmt.Errorf("'From' time must be prior to the 'To' time")
|
return fmt.Errorf("'From' time must be prior to the 'To' time")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (int(got.StartWeekday) + 6) % 7 > (int(got.EndWeekday) + 6) % 7 {
|
||||||
|
return fmt.Errorf("'From' weekday must be prior to the 'To' weekday")
|
||||||
|
}
|
||||||
|
|
||||||
if !weekdayProvidedFrom || !weekdayProvidedTo {
|
if !weekdayProvidedFrom || !weekdayProvidedTo {
|
||||||
got.StartWeekday = time.Sunday
|
got.StartWeekday = time.Monday
|
||||||
got.EndWeekday = time.Saturday
|
got.EndWeekday = time.Sunday
|
||||||
}
|
}
|
||||||
|
|
||||||
*m = got
|
*m = got
|
||||||
|
|
@ -191,11 +200,17 @@ func (pl *PostgresqlList) GetListMeta() unversioned.List {
|
||||||
return &pl.Metadata
|
return &pl.Metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
func clusterName(clusterName string, teamName string) (string, error) {
|
func extractClusterName(clusterName string, teamName string) (string, error) {
|
||||||
teamNameLen := len(teamName)
|
teamNameLen := len(teamName)
|
||||||
|
|
||||||
if len(clusterName) < teamNameLen+2 {
|
if len(clusterName) < teamNameLen+2 {
|
||||||
return "", fmt.Errorf("name is too short")
|
return "", fmt.Errorf("name is too short")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if teamNameLen == 0 {
|
||||||
|
return "", fmt.Errorf("Team name is empty")
|
||||||
|
}
|
||||||
|
|
||||||
if strings.ToLower(clusterName[:teamNameLen+1]) != strings.ToLower(teamName)+"-" {
|
if strings.ToLower(clusterName[:teamNameLen+1]) != strings.ToLower(teamName)+"-" {
|
||||||
return "", fmt.Errorf("name must match {TEAM}-{NAME} format")
|
return "", fmt.Errorf("name must match {TEAM}-{NAME} format")
|
||||||
}
|
}
|
||||||
|
|
@ -228,7 +243,7 @@ func (p *Postgresql) UnmarshalJSON(data []byte) error {
|
||||||
}
|
}
|
||||||
tmp2 := Postgresql(tmp)
|
tmp2 := Postgresql(tmp)
|
||||||
|
|
||||||
clusterName, err := clusterName(tmp2.Metadata.Name, tmp2.Spec.TeamID)
|
clusterName, err := extractClusterName(tmp2.Metadata.Name, tmp2.Spec.TeamID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
tmp2.Spec.ClusterName = clusterName
|
tmp2.Spec.ClusterName = clusterName
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue