From 51ee4091bcaf6c2fe88c8dd91b566483500ac718 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 17 Feb 2014 00:39:15 +0200 Subject: [PATCH] shared group fixes --- .../mysql/create_tariffplan_tables.sql | 3 ++- data/tariffplans/prepaid1centpsec/Actions.csv | 4 ++-- .../fs_csv/cgrates/tariffplans/Actions.csv | 4 ++-- .../fs_json/cgrates/tariffplans/Actions.csv | 4 ++-- engine/loader_db.go | 1 + engine/loader_helpers_test.go | 2 +- engine/storage_sql.go | 20 ++++++++++--------- engine/tpimporter_csv.go | 14 +++++++++---- utils/apitpdata.go | 1 + 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql index ef3239b15..98a01501e 100644 --- a/data/storage/mysql/create_tariffplan_tables.sql +++ b/data/storage/mysql/create_tariffplan_tables.sql @@ -144,12 +144,13 @@ CREATE TABLE `tp_actions` ( `expiry_time` varchar(24) NOT NULL, `destination_tag` varchar(64) NOT NULL, `rating_subject` varchar(64) NOT NULL, + `shared_group` varchar(64) NOT NULL, `balance_weight` double(8,2) NOT NULL, `extra_parameters` varchar(256) NOT NULL, `weight` double(8,2) NOT NULL, PRIMARY KEY (`id`), KEY `tpid` (`tpid`), - UNIQUE KEY `unique_action` (`tpid`,`tag`,`action`,`balance_type`,`direction`,`expiry_time`,`destination_tag`,`balance_weight`,`weight`) + UNIQUE KEY `unique_action` (`tpid`,`tag`,`action`,`balance_type`,`direction`,`expiry_time`,`destination_tag`,`shared_group`,`balance_weight`,`weight`) ); -- diff --git a/data/tariffplans/prepaid1centpsec/Actions.csv b/data/tariffplans/prepaid1centpsec/Actions.csv index 0bccd5fe2..63af0f512 100644 --- a/data/tariffplans/prepaid1centpsec/Actions.csv +++ b/data/tariffplans/prepaid1centpsec/Actions.csv @@ -1,4 +1,4 @@ -#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,BalanceWeight,ExtraParameters,Weight -PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,10,,10 +#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight +PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 #WARN_HTTP,*call_url,,,,,,,,http://localhost:8000,10 #LOG_BALANCE,*log,,,,,,,,,10 diff --git a/data/tutorials/fs_csv/cgrates/tariffplans/Actions.csv b/data/tutorials/fs_csv/cgrates/tariffplans/Actions.csv index 97cef134a..d1a8fdde7 100644 --- a/data/tutorials/fs_csv/cgrates/tariffplans/Actions.csv +++ b/data/tutorials/fs_csv/cgrates/tariffplans/Actions.csv @@ -1,3 +1,3 @@ -#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,BalanceWeight,ExtraParameters,Weight -PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,10,,10 +#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight +PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 LOG_WARNING,*log,,,,,,,,,10 diff --git a/data/tutorials/fs_json/cgrates/tariffplans/Actions.csv b/data/tutorials/fs_json/cgrates/tariffplans/Actions.csv index 97cef134a..d1a8fdde7 100644 --- a/data/tutorials/fs_json/cgrates/tariffplans/Actions.csv +++ b/data/tutorials/fs_json/cgrates/tariffplans/Actions.csv @@ -1,3 +1,3 @@ -#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,BalanceWeight,ExtraParameters,Weight -PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,10,,10 +#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight +PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 LOG_WARNING,*log,,,,,,,,,10 diff --git a/engine/loader_db.go b/engine/loader_db.go index 26d1c6299..b39354da2 100644 --- a/engine/loader_db.go +++ b/engine/loader_db.go @@ -431,6 +431,7 @@ func (dbr *DbReader) LoadActionTimings() (err error) { } for atId, ats := range atsMap { for _, at := range ats { + _, exists := dbr.actions[at.ActionsId] if !exists { return errors.New(fmt.Sprintf("ActionTiming: Could not load the action for tag: %v", at.ActionsId)) diff --git a/engine/loader_helpers_test.go b/engine/loader_helpers_test.go index 94e07a582..cd8bb6239 100644 --- a/engine/loader_helpers_test.go +++ b/engine/loader_helpers_test.go @@ -58,7 +58,7 @@ DUMMY,INVALID;DATA ` var actionsSample = `#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,BalanceWeight,ExtraParameters,Weight -PREPAID_10,*topup_reset,*monetary,*out,5,*unlimited,*any,,10,,10 +PREPAID_10,*topup_reset,*monetary,*out,5,*unlimited,*any,,,10,,10 WARN_HTTP,*call_url,,,,,,,,http://localhost:8000,10 LOG_BALANCE,*log,,,,,,,,,10 DUMMY,INVALID;DATA diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 04014c342..0a140920b 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -310,20 +310,20 @@ func (self *SQLStorage) SetTPActions(tpid string, acts map[string][]*utils.TPAct return nil //Nothing to set } var buffer bytes.Buffer - buffer.WriteString(fmt.Sprintf("INSERT INTO %s (tpid,tag,action,balance_type,direction,units,expiry_time,destination_tag,rating_subject,balance_weight,extra_parameters,weight) VALUES ", utils.TBL_TP_ACTIONS)) + buffer.WriteString(fmt.Sprintf("INSERT INTO %s (tpid,tag,action,balance_type,direction,units,expiry_time,destination_tag,rating_subject,shared_group,balance_weight,extra_parameters,weight) VALUES ", utils.TBL_TP_ACTIONS)) i := 0 for actId, actRows := range acts { for _, act := range actRows { if i != 0 { //Consecutive values after the first will be prefixed with "," as separator buffer.WriteRune(',') } - buffer.WriteString(fmt.Sprintf("('%s','%s','%s','%s','%s',%f,'%s','%s','%s',%f,'%s',%f)", + buffer.WriteString(fmt.Sprintf("('%s','%s','%s','%s','%s',%f,'%s','%s','%s','%s',%f,'%s',%f)", tpid, actId, act.Identifier, act.BalanceType, act.Direction, act.Units, act.ExpiryTime, - act.DestinationId, act.RatingSubject, act.BalanceWeight, act.ExtraParameters, act.Weight)) + act.DestinationId, act.RatingSubject, act.BalanceWeight, act.SharedGroup, act.ExtraParameters, act.Weight)) i++ } } - buffer.WriteString(" ON DUPLICATE KEY UPDATE action=values(action),balance_type=values(balance_type),direction=values(direction),units=values(units),expiry_time=values(expiry_time),destination_tag=values(destination_tag),rating_subject=values(rating_subject),balance_weight=values(balance_weight),extra_parameters=values(extra_parameters),weight=values(weight)") + buffer.WriteString(" ON DUPLICATE KEY UPDATE action=values(action),balance_type=values(balance_type),direction=values(direction),units=values(units),expiry_time=values(expiry_time),destination_tag=values(destination_tag),rating_subject=values(rating_subject),shared_group=values(shared_group),balance_weight=values(balance_weight),extra_parameters=values(extra_parameters),weight=values(weight)") if _, err := self.Db.Exec(buffer.String()); err != nil { return err } @@ -331,7 +331,7 @@ func (self *SQLStorage) SetTPActions(tpid string, acts map[string][]*utils.TPAct } func (self *SQLStorage) GetTPActions(tpid, actsId string) (*utils.TPActions, error) { - rows, err := self.Db.Query(fmt.Sprintf("SELECT action,balance_type,direction,units,expiry_time,destination_tag,rating_subject,balance_weight,extra_parameters,weight FROM %s WHERE tpid='%s' AND tag='%s'", utils.TBL_TP_ACTIONS, tpid, actsId)) + rows, err := self.Db.Query(fmt.Sprintf("SELECT action,balance_type,direction,units,expiry_time,destination_tag,rating_subject,shared_group,balance_weight,extra_parameters,weight FROM %s WHERE tpid='%s' AND tag='%s'", utils.TBL_TP_ACTIONS, tpid, actsId)) if err != nil { return nil, err } @@ -340,9 +340,9 @@ func (self *SQLStorage) GetTPActions(tpid, actsId string) (*utils.TPActions, err i := 0 for rows.Next() { i++ //Keep here a reference so we know we got at least one result - var action, balanceId, dir, destId, rateSubject, expTime, extraParameters string + var action, balanceId, dir, destId, rateSubject, sharedGroup, expTime, extraParameters string var units, balanceWeight, weight float64 - if err = rows.Scan(&action, &balanceId, &dir, &units, &expTime, &destId, &rateSubject, &balanceWeight, &extraParameters, &weight); err != nil { + if err = rows.Scan(&action, &balanceId, &dir, &units, &expTime, &destId, &rateSubject, &sharedGroup, &balanceWeight, &extraParameters, &weight); err != nil { return nil, err } acts.Actions = append(acts.Actions, &utils.TPAction{ @@ -354,6 +354,7 @@ func (self *SQLStorage) GetTPActions(tpid, actsId string) (*utils.TPActions, err DestinationId: destId, RatingSubject: rateSubject, BalanceWeight: balanceWeight, + SharedGroup: sharedGroup, ExtraParameters: extraParameters, Weight: weight}) } @@ -923,8 +924,8 @@ func (self *SQLStorage) GetTpActions(tpid, tag string) (map[string][]*utils.TPAc for rows.Next() { var id int var units, balance_weight, weight float64 - var tpid, tag, action, balance_type, direction, destinations_tag, rating_subject, extra_parameters, expirationDate string - if err := rows.Scan(&id, &tpid, &tag, &action, &balance_type, &direction, &units, &expirationDate, &destinations_tag, &rating_subject, &balance_weight, &extra_parameters, &weight); err != nil { + var tpid, tag, action, balance_type, direction, destinations_tag, rating_subject, shared_group, extra_parameters, expirationDate string + if err := rows.Scan(&id, &tpid, &tag, &action, &balance_type, &direction, &units, &expirationDate, &destinations_tag, &rating_subject, &shared_group, &balance_weight, &extra_parameters, &weight); err != nil { return nil, err } a := &utils.TPAction{ @@ -935,6 +936,7 @@ func (self *SQLStorage) GetTpActions(tpid, tag string) (map[string][]*utils.TPAc ExpiryTime: expirationDate, DestinationId: destinations_tag, RatingSubject: rating_subject, + SharedGroup: shared_group, BalanceWeight: balance_weight, ExtraParameters: extra_parameters, Weight: weight, diff --git a/engine/tpimporter_csv.go b/engine/tpimporter_csv.go index 48499b987..e5e046ef1 100644 --- a/engine/tpimporter_csv.go +++ b/engine/tpimporter_csv.go @@ -46,6 +46,7 @@ var fileHandlers = map[string]func(*TPCSVImporter, string) error{ utils.DESTINATION_RATES_CSV: (*TPCSVImporter).importDestinationRates, utils.RATING_PLANS_CSV: (*TPCSVImporter).importRatingPlans, utils.RATING_PROFILES_CSV: (*TPCSVImporter).importRatingProfiles, + utils.SHARED_GROUPS_CSV: (*TPCSVImporter).importSharedGroups, utils.ACTIONS_CSV: (*TPCSVImporter).importActions, utils.ACTION_PLANS_CSV: (*TPCSVImporter).importActionTimings, utils.ACTION_TRIGGERS_CSV: (*TPCSVImporter).importActionTriggers, @@ -287,6 +288,10 @@ func (self *TPCSVImporter) importRatingProfiles(fn string) error { return nil } +func (self *TPCSVImporter) importSharedGroups(fn string) error { + return nil +} + func (self *TPCSVImporter) importActions(fn string) error { if self.Verbose { log.Printf("Processing file: <%s> ", fn) @@ -307,7 +312,7 @@ func (self *TPCSVImporter) importActions(fn string) error { } continue } - actId, actionType, balanceType, direction, destTag, rateSubject := record[0], record[1], record[2], record[3], record[6], record[7] + actId, actionType, balanceType, direction, destTag, rateSubject, sharedGroup := record[0], record[1], record[2], record[3], record[6], record[7], record[8] units, err := strconv.ParseFloat(record[4], 64) if err != nil { if self.Verbose { @@ -315,8 +320,8 @@ func (self *TPCSVImporter) importActions(fn string) error { } continue } - balanceWeight, _ := strconv.ParseFloat(record[8], 64) - weight, err := strconv.ParseFloat(record[10], 64) + balanceWeight, _ := strconv.ParseFloat(record[9], 64) + weight, err := strconv.ParseFloat(record[11], 64) if err != nil { if self.Verbose { log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error()) @@ -331,8 +336,9 @@ func (self *TPCSVImporter) importActions(fn string) error { ExpiryTime: record[5], DestinationId: destTag, RatingSubject: rateSubject, + SharedGroup: sharedGroup, BalanceWeight: balanceWeight, - ExtraParameters: record[9], + ExtraParameters: record[10], Weight: weight, } if err := self.StorDb.SetTPActions(self.TPid, map[string][]*utils.TPAction{actId: []*utils.TPAction{act}}); err != nil { diff --git a/utils/apitpdata.go b/utils/apitpdata.go index e69054a20..0a9750053 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -215,6 +215,7 @@ type TPAction struct { ExpiryTime string // Time when the units will expire DestinationId string // Destination profile id RatingSubject string // Reference a rate subject defined in RatingProfiles + SharedGroup string // Reference to a shared group BalanceWeight float64 // Balance weight ExtraParameters string Weight float64 // Action's weight