mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
added more console commands
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
58
console/add_account.go
Normal file
58
console/add_account.go
Normal file
@@ -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 <tenant> <account> <type=prepaid|postpaid> <actiontimingsid> [<direction>]")
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
@@ -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 <tenant> <account> <value> [<balanceid=monetary|sms|internet|internet_time|minutes> [<direction>]]")
|
||||
return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] add_balance <tenant> <account> <value> [<balanceid=monetary|sms|internet|internet_time|minutes> [<direction>]]")
|
||||
}
|
||||
|
||||
// set param defaults
|
||||
|
||||
71
console/add_triggeredaction.go
Normal file
71
console/add_triggeredaction.go
Normal file
@@ -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 <tenant> <account> <balanceid> <thresholdvalue> <destinationid> <weight> <actionsid> [<direction>]")
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
@@ -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 <id>")
|
||||
return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] get_destination <id>")
|
||||
}
|
||||
|
||||
// set param defaults
|
||||
|
||||
@@ -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 <tenant> <account> <value> <actionsid> [<direction>]")
|
||||
return fmt.Sprintf("\n\tUsage: cgr-console [cfg_opts...{-h}] execute_action <tenant> <account> <actionsid> [<direction>]")
|
||||
}
|
||||
|
||||
// set param defaults
|
||||
|
||||
53
console/set_accountactions.go
Normal file
53
console/set_accountactions.go
Normal file
@@ -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 <tpid> <accountactionsid>")
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
53
console/set_ratingprofile.go
Normal file
53
console/set_ratingprofile.go
Normal file
@@ -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 <tpid> <rateprofileid>")
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user