From 7f5ddf9bf4b528b79d3ea18a27094f63e92d65d5 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 13 Jun 2012 13:36:57 +0300 Subject: [PATCH] compressed timings --- cmd/cgr-loader/cgr-loader.go | 1 - cmd/cgr-loader/helpers.go | 19 ++++++---- cmd/cgr-loader/rates.go | 72 ------------------------------------ data/MonthDays.csv | 6 --- data/Months.csv | 7 ---- data/WeekDays.csv | 4 -- timespans/dateseries.go | 20 ++++++++-- 7 files changed, 28 insertions(+), 101 deletions(-) delete mode 100644 data/MonthDays.csv delete mode 100644 data/Months.csv delete mode 100644 data/WeekDays.csv diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 6314cd8b2..be3c49f5e 100644 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -65,7 +65,6 @@ func writeToDatabase() { func main() { flag.Parse() sep = []rune(*separator)[0] - loadDataSeries() loadDestinations() loadRates() loadTimings() diff --git a/cmd/cgr-loader/helpers.go b/cmd/cgr-loader/helpers.go index ad5d142b3..907b80d32 100644 --- a/cmd/cgr-loader/helpers.go +++ b/cmd/cgr-loader/helpers.go @@ -61,16 +61,19 @@ func NewRate(destinationsTag, connectFee, price, billingUnit, weight string) (r } type Timing struct { - MonthsTag, MonthDaysTag, WeekDaysTag, StartTime string + Months timespans.Months + MonthDays timespans.MonthDays + WeekDays timespans.WeekDays + StartTime string } func NewTiming(timeingInfo ...string) (rt *Timing) { rt = &Timing{ - MonthsTag: timeingInfo[0], - MonthDaysTag: timeingInfo[1], - WeekDaysTag: timeingInfo[2], - StartTime: timeingInfo[3], + StartTime: timeingInfo[3], } + rt.Months.Parse(timeingInfo[0], ";") + rt.MonthDays.Parse(timeingInfo[1], ";") + rt.WeekDays.Parse(timeingInfo[2], ";") return } @@ -89,9 +92,9 @@ func NewRateTiming(ratesTag string, timing *Timing) (rt *RateTiming) { func (rt *RateTiming) GetInterval(r *Rate) (i *timespans.Interval) { i = ×pans.Interval{ - Months: timespans.Months(months[rt.timing.MonthsTag]), - MonthDays: timespans.MonthDays(monthdays[rt.timing.MonthDaysTag]), - WeekDays: timespans.WeekDays(weekdays[rt.timing.WeekDaysTag]), + Months: rt.timing.Months, + MonthDays: rt.timing.MonthDays, + WeekDays: rt.timing.WeekDays, StartTime: rt.timing.StartTime, ConnectFee: r.ConnectFee, Price: r.Price, diff --git a/cmd/cgr-loader/rates.go b/cmd/cgr-loader/rates.go index b604f8880..45389ab2f 100644 --- a/cmd/cgr-loader/rates.go +++ b/cmd/cgr-loader/rates.go @@ -27,9 +27,6 @@ import ( ) var ( - months = make(map[string][]time.Month) - monthdays = make(map[string][]int) - weekdays = make(map[string][]time.Weekday) destinations []*timespans.Destination rates = make(map[string][]*Rate) timings = make(map[string][]*Timing) @@ -37,75 +34,6 @@ var ( ratingProfiles = make(map[string]CallDescriptors) ) -func loadDataSeries() { - // MONTHS - fp, err := os.Open(*monthsFn) - if err != nil { - log.Printf("Could not open months file: %v", err) - } else { - csvReader := csv.NewReader(fp) - csvReader.Comma = sep - for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() { - tag := record[0] - if tag == "Tag" { - // skip header line - continue - } - for i, m := range record[1:] { - if m == "1" { - months[tag] = append(months[tag], time.Month(i+1)) - } - } - log.Print(tag, months[tag]) - } - fp.Close() - } - // MONTH DAYS - fp, err = os.Open(*monthdaysFn) - if err != nil { - log.Printf("Could not open month days file: %v", err) - } else { - csvReader := csv.NewReader(fp) - csvReader.Comma = sep - for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() { - tag := record[0] - if tag == "Tag" { - // skip header line - continue - } - for i, m := range record[1:] { - if m == "1" { - monthdays[tag] = append(monthdays[tag], i+1) - } - } - log.Print(tag, monthdays[tag]) - } - fp.Close() - } - // WEEK DAYS - fp, err = os.Open(*weekdaysFn) - if err != nil { - log.Printf("Could not open week days file: %v", err) - } else { - csvReader := csv.NewReader(fp) - csvReader.Comma = sep - for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() { - tag := record[0] - if tag == "Tag" { - // skip header line - continue - } - for i, m := range record[1:] { - if m == "1" { - weekdays[tag] = append(weekdays[tag], time.Weekday(((i + 1) % 7))) - } - } - log.Print(tag, weekdays[tag]) - } - fp.Close() - } -} - func loadDestinations() { fp, err := os.Open(*destinationsFn) if err != nil { diff --git a/data/MonthDays.csv b/data/MonthDays.csv deleted file mode 100644 index 3c53507eb..000000000 --- a/data/MonthDays.csv +++ /dev/null @@ -1,6 +0,0 @@ -Tag,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 -ALL,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -CHRISTMAS_DAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 -VALENTINES_DAY,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -20th,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 -FIRST,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/data/Months.csv b/data/Months.csv deleted file mode 100644 index 347a4ee8b..000000000 --- a/data/Months.csv +++ /dev/null @@ -1,7 +0,0 @@ -Tag,January,February,March,April,May,June,Jully,August,September,October,November,December -ALL,1,1,1,1,1,1,1,1,1,1,1,1 -WINTER,1,1,0,0,0,0,0,0,0,0,0,1 -SPRING,0,0,1,1,1,0,0,0,0,0,0,0 -SUMMER,0,0,0,0,0,1,1,1,0,0,0,0 -AUTUMN,0,0,0,0,0,0,0,0,1,1,1,0 -JANUARY,1,0,0,0,0,0,0,0,0,0,0,0 diff --git a/data/WeekDays.csv b/data/WeekDays.csv deleted file mode 100644 index d9cf86a4e..000000000 --- a/data/WeekDays.csv +++ /dev/null @@ -1,4 +0,0 @@ -Tag,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday -ALL,1,1,1,1,1,1,1 -WORKDAYS,1,1,1,1,1,0,0 -WEEKENDS,0,0,0,0,0,1,1 diff --git a/timespans/dateseries.go b/timespans/dateseries.go index 374f577a6..20d387c29 100644 --- a/timespans/dateseries.go +++ b/timespans/dateseries.go @@ -55,7 +55,12 @@ func (m Months) store() (result string) { De-serializes the month for the storage. Used for key-value storages. */ func (m *Months) restore(input string) { - elements := strings.Split(input, ",") + m.Parse(input, ",") +} + +// Loades Month elemnents from a string separated by sep. +func (m *Months) Parse(input, sep string) { + elements := strings.Split(input, sep) for _, ms := range elements { if month, err := strconv.Atoi(ms); err == nil { *m = append(*m, time.Month(month)) @@ -93,7 +98,12 @@ func (md MonthDays) store() (result string) { De-serializes the month days for the storage. Used for key-value storages. */ func (md *MonthDays) restore(input string) { - elements := strings.Split(input, ",") + md.Parse(input, ",") +} + +// Parse MonthDay elements from string separated by sep. +func (md *MonthDays) Parse(input, sep string) { + elements := strings.Split(input, sep) for _, mds := range elements { if day, err := strconv.Atoi(mds); err == nil { *md = append(*md, day) @@ -131,7 +141,11 @@ func (wd WeekDays) store() (result string) { De-serializes the week days for the storage. Used for key-value storages. */ func (wd *WeekDays) restore(input string) { - elements := strings.Split(input, ",") + wd.Parse(input, ",") +} + +func (wd *WeekDays) Parse(input, sep string) { + elements := strings.Split(input, sep) for _, wds := range elements { if day, err := strconv.Atoi(wds); err == nil { *wd = append(*wd, time.Weekday(day))