From 5dcbb28dd6a9e6c710073a6c7a6713701e049a06 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 5 Aug 2013 17:58:42 +0300 Subject: [PATCH] added more console commands --- apier/v1/apier.go | 47 +++++++++++++--------- console/add_account.go | 58 +++++++++++++++++++++++++++ console/add_balance.go | 4 +- console/add_triggeredaction.go | 71 ++++++++++++++++++++++++++++++++++ console/destination.go | 2 +- console/execute_action.go | 6 +-- console/set_accountactions.go | 53 +++++++++++++++++++++++++ console/set_ratingprofile.go | 53 +++++++++++++++++++++++++ docs/apicalls.rst | 8 ++-- 9 files changed, 273 insertions(+), 29 deletions(-) create mode 100644 console/add_account.go create mode 100644 console/add_triggeredaction.go create mode 100644 console/set_accountactions.go create mode 100644 console/set_ratingprofile.go diff --git a/apier/v1/apier.go b/apier/v1/apier.go index be3b7aa25..d666cae6d 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -26,6 +26,10 @@ import ( "github.com/cgrates/cgrates/utils" ) +const ( + OK = "OK" +) + type ApierV1 struct { StorDb engine.DataStorage DataDb engine.DataStorage @@ -82,7 +86,7 @@ type AttrAddBalance struct { Value float64 } -func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *float64) error { +func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *string) error { // what storage instance do we use? tag := fmt.Sprintf("%s:%s:%s", attr.Direction, attr.Tenant, attr.Account) @@ -92,7 +96,7 @@ func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *float64) error { Id: tag, } if err := self.DataDb.SetUserBalance(ub); err != nil { - *reply = -1 + *reply = err.Error() return err } } @@ -108,10 +112,10 @@ func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *float64) error { at.SetActions(engine.Actions{&engine.Action{ActionType: engine.TOPUP, BalanceId: attr.BalanceId, Direction: attr.Direction, Units: attr.Value}}) if err := at.Execute(); err != nil { - *reply = -1 + *reply = err.Error() return err } - *reply = attr.Value + *reply = OK return nil } @@ -122,7 +126,7 @@ type AttrExecuteAction struct { ActionsId string } -func (self *ApierV1) ExecuteAction(attr *AttrExecuteAction, reply *float64) error { +func (self *ApierV1) ExecuteAction(attr *AttrExecuteAction, reply *string) error { tag := fmt.Sprintf("%s:%s:%s", attr.Direction, attr.Tenant, attr.Account) at := &engine.ActionTiming{ UserBalanceIds: []string{tag}, @@ -130,10 +134,10 @@ func (self *ApierV1) ExecuteAction(attr *AttrExecuteAction, reply *float64) erro } if err := at.Execute(); err != nil { - *reply = -1 + *reply = err.Error() return err } - *reply = 0 + *reply = OK return nil } @@ -153,11 +157,11 @@ func (self *ApierV1) SetRatingProfile(attrs AttrSetRatingProfile, reply *string) return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } - *reply = "OK" + *reply = OK return nil } -type AttrActionTrigger struct { +type AttrAddActionTrigger struct { Tenant string Account string Direction string @@ -168,7 +172,7 @@ type AttrActionTrigger struct { ActionsId string } -func (self *ApierV1) AddTriggeredAction(attr AttrActionTrigger, reply *float64) error { +func (self *ApierV1) AddTriggeredAction(attr AttrAddActionTrigger, reply *string) error { if attr.Direction == "" { attr.Direction = engine.OUTBOUND } @@ -185,27 +189,28 @@ func (self *ApierV1) AddTriggeredAction(attr AttrActionTrigger, reply *float64) } tag := fmt.Sprintf("%s:%s:%s", attr.Direction, attr.Tenant, attr.Account) - var dbErr error - engine.AccLock.Guard(tag, func() (float64, error) { + _, err := engine.AccLock.Guard(tag, func() (float64, error) { userBalance, err := self.DataDb.GetUserBalance(tag) if err != nil { - dbErr = err return 0, err } userBalance.ActionTriggers = append(userBalance.ActionTriggers, at) if err = self.DataDb.SetUserBalance(userBalance); err != nil { - dbErr = err return 0, err } return 0, nil }) - - return dbErr + if err != nil { + *reply = err.Error() + return err + } + *reply = OK + return nil } -type AttrAccount struct { +type AttrAddAccount struct { Tenant string Direction string Account string @@ -214,8 +219,9 @@ type AttrAccount struct { } // Ads a new account into dataDb. If already defined, returns success. -func (self *ApierV1) AddAccount(attr *AttrAccount, reply *float64) error { +func (self *ApierV1) AddAccount(attr *AttrAddAccount, reply *string) error { if missing := utils.MissingStructFields(&attr, []string{"Tenant", "Direction", "Account", "Type", "ActionTimingsId"}); len(missing) != 0 { + *reply = fmt.Sprintf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } tag := fmt.Sprintf("%s:%s:%s", attr.Direction, attr.Tenant, attr.Account) @@ -237,12 +243,15 @@ func (self *ApierV1) AddAccount(attr *AttrAccount, reply *float64) error { } } if err := self.DataDb.SetUserBalance(ub); err != nil { + *reply = fmt.Sprintf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } } else { + *reply = fmt.Sprintf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } } + *reply = OK return nil } @@ -270,6 +279,6 @@ func (self *ApierV1) SetAccountActions(attrs AttrSetAccountActions, reply *strin self.Sched.LoadActionTimings(self.DataDb) self.Sched.Restart() } - *reply = "OK" + *reply = OK return nil } diff --git a/console/add_account.go b/console/add_account.go new file mode 100644 index 000000000..797fcb87b --- /dev/null +++ b/console/add_account.go @@ -0,0 +1,58 @@ +package console + +import ( + "fmt" + "github.com/cgrates/cgrates/apier/v1" +) + +func init() { + commands["add_account"] = &CmdAddAccount{} +} + +// Commander implementation +type CmdAddAccount struct { + rpcMethod string + rpcParams *apier.AttrAddAccount + rpcResult string +} + +// name should be exec's name +func (self *CmdAddAccount) Usage(name string) string { + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] add_account []") +} + +// set param defaults +func (self *CmdAddAccount) defaults() error { + self.rpcMethod = "ApierV1.AddAccount" + self.rpcParams = &apier.AttrAddAccount{Direction: "*out"} + return nil +} + +// Parses command line args and builds CmdBalance value +func (self *CmdAddAccount) FromArgs(args []string) error { + if len(args) < 6 { + return fmt.Errorf(self.Usage("")) + } + // Args look OK, set defaults before going further + self.defaults() + self.rpcParams.Tenant = args[2] + self.rpcParams.Account = args[3] + self.rpcParams.Type = args[4] + self.rpcParams.ActionTimingsId = args[5] + if len(args) > 6 { + self.rpcParams.Direction = args[6] + } + return nil +} + +func (self *CmdAddAccount) RpcMethod() string { + return self.rpcMethod +} + +func (self *CmdAddAccount) RpcParams() interface{} { + return self.rpcParams +} + +func (self *CmdAddAccount) RpcResult() interface{} { + return &self.rpcResult +} diff --git a/console/add_balance.go b/console/add_balance.go index c169edb8d..623029031 100644 --- a/console/add_balance.go +++ b/console/add_balance.go @@ -15,12 +15,12 @@ func init() { type CmdAddBalance struct { rpcMethod string rpcParams *apier.AttrAddBalance - rpcResult float64 + rpcResult string } // name should be exec's name func (self *CmdAddBalance) Usage(name string) string { - return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] get_balance [ []]") + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] add_balance [ []]") } // set param defaults diff --git a/console/add_triggeredaction.go b/console/add_triggeredaction.go new file mode 100644 index 000000000..b9ab2b681 --- /dev/null +++ b/console/add_triggeredaction.go @@ -0,0 +1,71 @@ +package console + +import ( + "fmt" + "github.com/cgrates/cgrates/apier/v1" + "strconv" +) + +func init() { + commands["add_triggeredaction"] = &CmdAddTriggeredAction{} +} + +// Commander implementation +type CmdAddTriggeredAction struct { + rpcMethod string + rpcParams *apier.AttrAddActionTrigger + rpcResult string +} + +// name should be exec's name +func (self *CmdAddTriggeredAction) Usage(name string) string { + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] add_triggeredaction []") +} + +// set param defaults +func (self *CmdAddTriggeredAction) defaults() error { + self.rpcMethod = "ApierV1.AddTriggeredAction" + self.rpcParams = &apier.AttrAddActionTrigger{Direction: "*out"} + return nil +} + +// Parses command line args and builds CmdBalance value +func (self *CmdAddTriggeredAction) FromArgs(args []string) error { + if len(args) < 9 { + return fmt.Errorf(self.Usage("")) + } + // Args look OK, set defaults before going further + self.defaults() + self.rpcParams.Tenant = args[2] + self.rpcParams.Account = args[3] + self.rpcParams.BalanceId = args[4] + thresholdvalue, err := strconv.ParseFloat(args[5], 64) + if err != nil { + return err + } + self.rpcParams.ThresholdValue = thresholdvalue + self.rpcParams.DestinationId = args[6] + weight, err := strconv.ParseFloat(args[7], 64) + if err != nil { + return err + } + self.rpcParams.Weight = weight + self.rpcParams.ActionsId = args[8] + + if len(args) > 9 { + self.rpcParams.Direction = args[9] + } + return nil +} + +func (self *CmdAddTriggeredAction) RpcMethod() string { + return self.rpcMethod +} + +func (self *CmdAddTriggeredAction) RpcParams() interface{} { + return self.rpcParams +} + +func (self *CmdAddTriggeredAction) RpcResult() interface{} { + return &self.rpcResult +} diff --git a/console/destination.go b/console/destination.go index 3e0ccf9a7..df6db730f 100644 --- a/console/destination.go +++ b/console/destination.go @@ -18,7 +18,7 @@ type CmdGetDestination struct { // name should be exec's name func (self *CmdGetDestination) Usage(name string) string { - return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] get_balance ") + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] get_destination ") } // set param defaults diff --git a/console/execute_action.go b/console/execute_action.go index e13263996..69bfa0444 100644 --- a/console/execute_action.go +++ b/console/execute_action.go @@ -6,19 +6,19 @@ import ( ) func init() { - commands["add_balance"] = &CmdExecuteAction{} + commands["execute_action"] = &CmdExecuteAction{} } // Commander implementation type CmdExecuteAction struct { rpcMethod string rpcParams *apier.AttrExecuteAction - rpcResult float64 + rpcResult string } // name should be exec's name func (self *CmdExecuteAction) Usage(name string) string { - return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] get_balance []") + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] execute_action []") } // set param defaults diff --git a/console/set_accountactions.go b/console/set_accountactions.go new file mode 100644 index 000000000..eff8059ea --- /dev/null +++ b/console/set_accountactions.go @@ -0,0 +1,53 @@ +package console + +import ( + "fmt" + "github.com/cgrates/cgrates/apier/v1" +) + +func init() { + commands["set_accountactions"] = &CmdSetAccountActions{} +} + +// Commander implementation +type CmdSetAccountActions struct { + rpcMethod string + rpcParams *apier.AttrSetAccountActions + rpcResult string +} + +// name should be exec's name +func (self *CmdSetAccountActions) Usage(name string) string { + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] set_accountactions ") +} + +// set param defaults +func (self *CmdSetAccountActions) defaults() error { + self.rpcMethod = "ApierV1.SetAccountActions" + self.rpcParams = &apier.AttrSetAccountActions{} + return nil +} + +// Parses command line args and builds CmdBalance value +func (self *CmdSetAccountActions) FromArgs(args []string) error { + if len(args) < 3 { + return fmt.Errorf(self.Usage("")) + } + // Args look OK, set defaults before going further + self.defaults() + self.rpcParams.TPid = args[2] + self.rpcParams.AccountActionsId = args[3] + return nil +} + +func (self *CmdSetAccountActions) RpcMethod() string { + return self.rpcMethod +} + +func (self *CmdSetAccountActions) RpcParams() interface{} { + return self.rpcParams +} + +func (self *CmdSetAccountActions) RpcResult() interface{} { + return &self.rpcResult +} diff --git a/console/set_ratingprofile.go b/console/set_ratingprofile.go new file mode 100644 index 000000000..35a6e09cc --- /dev/null +++ b/console/set_ratingprofile.go @@ -0,0 +1,53 @@ +package console + +import ( + "fmt" + "github.com/cgrates/cgrates/apier/v1" +) + +func init() { + commands["set_ratingprofile"] = &CmdSetrRatingProfile{} +} + +// Commander implementation +type CmdSetrRatingProfile struct { + rpcMethod string + rpcParams *apier.AttrSetRatingProfile + rpcResult string +} + +// name should be exec's name +func (self *CmdSetrRatingProfile) Usage(name string) string { + return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] set_ratingprofile ") +} + +// set param defaults +func (self *CmdSetrRatingProfile) defaults() error { + self.rpcMethod = "ApierV1.SetRatingProfile" + self.rpcParams = &apier.AttrSetRatingProfile{} + return nil +} + +// Parses command line args and builds CmdBalance value +func (self *CmdSetrRatingProfile) FromArgs(args []string) error { + if len(args) < 3 { + return fmt.Errorf(self.Usage("")) + } + // Args look OK, set defaults before going further + self.defaults() + self.rpcParams.TPid = args[2] + self.rpcParams.RateProfileId = args[3] + return nil +} + +func (self *CmdSetrRatingProfile) RpcMethod() string { + return self.rpcMethod +} + +func (self *CmdSetrRatingProfile) RpcParams() interface{} { + return self.rpcParams +} + +func (self *CmdSetrRatingProfile) RpcResult() interface{} { + return &self.rpcResult +} diff --git a/docs/apicalls.rst b/docs/apicalls.rst index dc015cd7e..9a25d1c48 100644 --- a/docs/apicalls.rst +++ b/docs/apicalls.rst @@ -312,7 +312,7 @@ AddTriggeredAction :: - type AttrActionTrigger struct { + type AttrAddActionTrigger struct { Tenant string Account string Direction string @@ -324,14 +324,14 @@ AddTriggeredAction } Example - AddTriggeredAction(attr \*AttrActionTrigger, reply \*float64) + AddTriggeredAction(attr \*AttrAddActionTrigger, reply \*float64) AddAcount +++++++++ :: - type AttrAccount struct { + type AttrAddAccount struct { Tenant string Direction string Account string @@ -340,7 +340,7 @@ AddAcount } Example - AddAccount(attr \*AttrAccount, reply \*float64) + AddAccount(attr \*AttrAddAccount, reply \*float64)