From 06c01cbce05d35bfbc458a5ec6bd954eff0390d5 Mon Sep 17 00:00:00 2001 From: John Koce Steel Date: Mon, 29 May 2017 10:22:31 +0200 Subject: [PATCH] proposition for new timing tags *minute and *hour to be used in action plans on recurring charges. NOTE: minute interval executes every second minute but logs from the scheduler report execution every minute --- engine/action_plan.go | 10 +++++++++- engine/tp_reader.go | 18 ++++++++++++++++++ utils/consts.go | 2 ++ utils/value_formula.go | 16 ++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/engine/action_plan.go b/engine/action_plan.go index d22cfbe5b..bda82c11a 100644 --- a/engine/action_plan.go +++ b/engine/action_plan.go @@ -95,7 +95,15 @@ func (at *ActionTiming) GetNextStartTime(now time.Time) (t time.Time) { if len(i.Timing.Months) > 0 && len(i.Timing.MonthDays) == 0 { i.Timing.MonthDays = append(i.Timing.MonthDays, 1) } - at.stCache = cronexpr.MustParse(i.Timing.CronString()).Next(now) + + if i.Timing.StartTime == utils.MINUTE { + at.stCache = cronexpr.MustParse("0 * * * * * *").Next(now) + } else if i.Timing.StartTime == utils.HOUR { + at.stCache = cronexpr.MustParse("0 0 * * * * *").Next(now) + } else { + at.stCache = cronexpr.MustParse(i.Timing.CronString()).Next(now) + } + return at.stCache } diff --git a/engine/tp_reader.go b/engine/tp_reader.go index d25ac9c81..53fa26fcd 100644 --- a/engine/tp_reader.go +++ b/engine/tp_reader.go @@ -85,6 +85,24 @@ func NewTpReader(db DataDB, lr LoadReader, tpid, timezone string) *TpReader { StartTime: utils.ASAP, EndTime: "", } + tpr.timings[utils.MINUTE] = &utils.TPTiming{ + ID: utils.MINUTE, + Years: utils.Years{}, + Months: utils.Months{}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + StartTime: utils.MINUTE, + EndTime: "", + } + tpr.timings[utils.HOUR] = &utils.TPTiming{ + ID: utils.HOUR, + Years: utils.Years{}, + Months: utils.Months{}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{}, + StartTime: utils.HOUR, + EndTime: "", + } return tpr } diff --git a/utils/consts.go b/utils/consts.go index 45e0f8cda..341613dd0 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -108,6 +108,8 @@ const ( UNLIMITED = "*unlimited" ZERO = "*zero" ASAP = "*asap" + MINUTE = "*minute" + HOUR = "*hour" USERS = "*users" COMMENT_CHAR = '#' CSV_SEP = ',' diff --git a/utils/value_formula.go b/utils/value_formula.go index 823360824..a1a2e38f3 100644 --- a/utils/value_formula.go +++ b/utils/value_formula.go @@ -102,5 +102,21 @@ func incrementalFormula(params map[string]interface{}) float64 { return units / DaysInYear(now.Year()) } } + if increment == "hour" { + if interval == "day" { + return units / 24 + } + if interval == "month" { + return units / ( DaysInMonth(now.Year(), now.Month()) * 24 ) + } + if interval == "year" { + return units / ( DaysInYear(now.Year()) * 24 ) + } + } + if increment == "minute" { + if interval == "hour" { + return units / 60 + } + } return 0.0 }