ApierV1 TPActionTimings set with duplicated and remove

This commit is contained in:
DanB
2013-11-16 16:39:32 +01:00
parent 210c52f041
commit 198b604407
5 changed files with 38 additions and 29 deletions

View File

@@ -25,22 +25,17 @@ import (
)
// Creates a new ActionTimings profile within a tariff plan
func (self *ApierV1) SetTPActionTimings(attrs utils.ApiTPActionTimings, reply *string) error {
func (self *ApierV1) SetTPActionTimings(attrs utils.TPActionTimings, reply *string) error {
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId", "ActionTimings"}); len(missing) != 0 {
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
}
for _, at := range attrs.ActionTimings {
requiredFields := []string{"ActionsId", "TimingId", "Weight"}
if missing := utils.MissingStructFields(&at, requiredFields); len(missing) != 0 {
if missing := utils.MissingStructFields(at, requiredFields); len(missing) != 0 {
return fmt.Errorf("%s:Action:%s:%v", utils.ERR_MANDATORY_IE_MISSING, at.ActionsId, missing)
}
}
if exists, err := self.StorDb.ExistsTPActionTimings(attrs.TPid, attrs.ActionTimingsId); err != nil {
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
} else if exists {
return errors.New(utils.ERR_DUPLICATE)
}
if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.ApiActionTiming{attrs.ActionTimingsId: attrs.ActionTimings}); err != nil {
if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.TPActionTiming{attrs.ActionTimingsId: attrs.ActionTimings}); err != nil {
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
}
*reply = "OK"
@@ -53,7 +48,7 @@ type AttrGetTPActionTimings struct {
}
// Queries specific ActionTimings profile on tariff plan
func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *utils.ApiTPActionTimings) error {
func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *utils.TPActionTimings) error {
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
}
@@ -62,7 +57,7 @@ func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *uti
} else if len(ats) == 0 {
return errors.New(utils.ERR_NOT_FOUND)
} else { // Got the data we need, convert it
atRply := &utils.ApiTPActionTimings{attrs.TPid, attrs.ActionTimingsId, ats[attrs.ActionTimingsId]}
atRply := &utils.TPActionTimings{attrs.TPid, attrs.ActionTimingsId, ats[attrs.ActionTimingsId]}
*reply = *atRply
}
return nil
@@ -86,3 +81,16 @@ func (self *ApierV1) GetTPActionTimingIds(attrs AttrGetTPActionTimingIds, reply
}
return nil
}
// Removes specific ActionTimings on Tariff plan
func (self *ApierV1) RemTPActionTimings(attrs AttrGetTPActionTimings, reply *string) error {
if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing
return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing)
}
if err := self.StorDb.RemTPData(utils.TBL_TP_ACTION_TIMINGS, attrs.TPid, attrs.ActionTimingsId); err != nil {
return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error())
} else {
*reply = "OK"
}
return nil
}

View File

@@ -131,8 +131,8 @@ type LoadStorage interface {
GetTPActions(string, string) (*utils.TPActions, error)
GetTPActionIds(string) ([]string, error)
ExistsTPActionTimings(string, string) (bool, error)
SetTPActionTimings(string, map[string][]*utils.ApiActionTiming) error
GetTPActionTimings(string, string) (map[string][]*utils.ApiActionTiming, error)
SetTPActionTimings(string, map[string][]*utils.TPActionTiming) error
GetTPActionTimings(string, string) (map[string][]*utils.TPActionTiming, error)
GetTPActionTimingIds(string) ([]string, error)
ExistsTPActionTriggers(string, string) (bool, error)
SetTPActionTriggers(string, map[string][]*ActionTrigger) error
@@ -148,7 +148,7 @@ type LoadStorage interface {
GetTpRatingPlans(string, string) (*utils.TPRatingPlan, error)
GetTpRatingProfiles(string, string) (map[string]*utils.TPRatingProfile, error)
GetTpActions(string, string) (map[string][]*Action, error)
GetTpActionTimings(string, string) (map[string][]*utils.ApiActionTiming, error)
GetTpActionTimings(string, string) (map[string][]*utils.TPActionTiming, error)
GetTpActionTriggers(string, string) (map[string][]*utils.ApiActionTrigger, error)
GetTpAccountActions(string, string) (map[string]*AccountAction, error)
}

View File

@@ -630,30 +630,31 @@ func (self *SQLStorage) ExistsTPActionTimings(tpid, atId string) (bool, error) {
}
// Sets actionTimings in sqlDB. Imput is expected in form map[actionTimingId][]rows, eg a full .csv file content
func (self *SQLStorage) SetTPActionTimings(tpid string, ats map[string][]*utils.ApiActionTiming) error {
func (self *SQLStorage) SetTPActionTimings(tpid string, ats map[string][]*utils.TPActionTiming) error {
if len(ats) == 0 {
return nil //Nothing to set
}
qry := fmt.Sprintf("INSERT INTO %s (tpid,tag,actions_tag,timing_tag,weight) VALUES ", utils.TBL_TP_ACTION_TIMINGS)
vals := ""
i := 0
for atId, atRows := range ats {
for _, at := range atRows {
if i != 0 { //Consecutive values after the first will be prefixed with "," as separator
qry += ","
vals += ","
}
qry += fmt.Sprintf("('%s','%s','%s','%s',%f)",
vals += fmt.Sprintf("('%s','%s','%s','%s',%f)",
tpid, atId, at.ActionsId, at.TimingId, at.Weight)
i++
}
}
qry := fmt.Sprintf("INSERT INTO %s (tpid,tag,actions_tag,timing_tag,weight) VALUES %s ON DUPLICATE KEY UPDATE timing_tag=values(timing_tag),weight=values(weight)", utils.TBL_TP_ACTION_TIMINGS, vals)
if _, err := self.Db.Exec(qry); err != nil {
return err
}
return nil
}
func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*utils.ApiActionTiming, error) {
ats := make(map[string][]*utils.ApiActionTiming)
func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*utils.TPActionTiming, error) {
ats := make(map[string][]*utils.TPActionTiming)
q := fmt.Sprintf("SELECT tag,actions_tag,timing_tag,weight FROM %s WHERE tpid='%s'", utils.TBL_TP_ACTION_TIMINGS, tpid)
if atId != "" {
q += fmt.Sprintf(" AND tag='%s'", atId)
@@ -671,7 +672,7 @@ func (self *SQLStorage) GetTPActionTimings(tpid, atId string) (map[string][]*uti
if err = rows.Scan(&tag, &actionsId, &timingId, &weight); err != nil {
return nil, err
}
ats[tag] = append(ats[tag], &utils.ApiActionTiming{actionsId, timingId, weight})
ats[tag] = append(ats[tag], &utils.TPActionTiming{actionsId, timingId, weight})
}
return ats, nil
}
@@ -1177,7 +1178,7 @@ func (self *SQLStorage) GetTpActions(tpid, tag string) (map[string][]*Action, er
return as, nil
}
func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*utils.ApiActionTiming, error) {
func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*utils.TPActionTiming, error) {
q := fmt.Sprintf("SELECT tag,actions_tag,timing_tag,weight FROM %s WHERE tpid='%s'", utils.TBL_TP_ACTION_TIMINGS, tpid)
if tag != "" {
q += fmt.Sprintf(" AND tag='%s'", tag)
@@ -1187,14 +1188,14 @@ func (self *SQLStorage) GetTpActionTimings(tpid, tag string) (map[string][]*util
return nil, err
}
defer rows.Close()
ats := make(map[string][]*utils.ApiActionTiming)
ats := make(map[string][]*utils.TPActionTiming)
for rows.Next() {
var weight float64
var tag, actions_tag, timing_tag string
if err := rows.Scan(&tag, &actions_tag, &timing_tag, &weight); err != nil {
return nil, err
}
at := &utils.ApiActionTiming {
at := &utils.TPActionTiming {
ActionsId: tag,
TimingId: timing_tag,
Weight: weight,

View File

@@ -355,14 +355,14 @@ func (self *TPCSVImporter) importActionTimings(fn string) error {
}
continue
}
at := []*utils.ApiActionTiming{
&utils.ApiActionTiming{
at := []*utils.TPActionTiming{
&utils.TPActionTiming{
ActionsId: actionsTag,
TimingId: timingTag,
Weight: weight,
},
}
if err := self.StorDb.SetTPActionTimings(self.TPid, map[string][]*utils.ApiActionTiming{tag: at}); err != nil {
if err := self.StorDb.SetTPActionTimings(self.TPid, map[string][]*utils.TPActionTiming{tag: at}); err != nil {
if self.Verbose {
log.Printf("Ignoring line %d, storDb operational error: <%s> ", lineNr, err.Error())
}

View File

@@ -164,13 +164,13 @@ type TPAction struct {
Weight float64 // Action's weight
}
type ApiTPActionTimings struct {
type TPActionTimings struct {
TPid string // Tariff plan id
ActionTimingsId string // ActionTimings id
ActionTimings []*ApiActionTiming // Set of ActionTiming bindings this profile will group
ActionTimings []*TPActionTiming // Set of ActionTiming bindings this profile will group
}
type ApiActionTiming struct {
type TPActionTiming struct {
ActionsId string // Actions id
TimingId string // Timing profile id
Weight float64 // Binding's weight