shared group fixes

This commit is contained in:
Radu Ioan Fericean
2014-02-17 00:39:15 +02:00
parent 4c894ee9de
commit 51ee4091bc
9 changed files with 32 additions and 21 deletions

View File

@@ -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`)
);
--

View File

@@ -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
1 #ActionsTag #ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight Action BalanceType Direction Units ExpiryTime DestinationTag RatingSubject BalanceWeight ExtraParameters Weight
2 PREPAID_10 PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 *topup_reset *monetary *out 10 *unlimited *any 10 10
3 #WARN_HTTP #WARN_HTTP,*call_url,,,,,,,,http://localhost:8000,10 *call_url http://localhost:8000 10
4 #LOG_BALANCE #LOG_BALANCE,*log,,,,,,,,,10 *log 10

View File

@@ -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
1 #ActionsTag #ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight Action BalanceType Direction Units ExpiryTime DestinationTag RatingSubject BalanceWeight ExtraParameters Weight
2 PREPAID_10 PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 *topup_reset *monetary *out 10 *unlimited *any 10 10
3 LOG_WARNING LOG_WARNING,*log,,,,,,,,,10 *log 10

View File

@@ -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
1 #ActionsTag #ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,SharedGroup,BalanceWeight,ExtraParameters,Weight Action BalanceType Direction Units ExpiryTime DestinationTag RatingSubject BalanceWeight ExtraParameters Weight
2 PREPAID_10 PREPAID_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,,10,,10 *topup_reset *monetary *out 10 *unlimited *any 10 10
3 LOG_WARNING LOG_WARNING,*log,,,,,,,,,10 *log 10

View File

@@ -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))

View File

@@ -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

View File

@@ -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,

View File

@@ -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 {

View File

@@ -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