mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-21 23:28:44 +05:00
Adding ResourceLimiter within SMFreeSWITCH code
This commit is contained in:
@@ -372,6 +372,12 @@ func (fsev FSEvent) ComputeLcr() bool {
|
||||
}
|
||||
}
|
||||
|
||||
// Used with RLs
|
||||
func (fsev FSEvent) AsMapStringInterface() map[string]interface{} {
|
||||
return utils.ConvertMapValStrIf(fsev)
|
||||
|
||||
}
|
||||
|
||||
// Converts into CallDescriptor due to responder interface needs
|
||||
func (fsev FSEvent) AsCallDescriptor() (*engine.CallDescriptor, error) {
|
||||
lcrReq := &engine.LcrRequest{
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/syslog"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -34,6 +35,9 @@ import (
|
||||
)
|
||||
|
||||
func NewFSSessionManager(smFsConfig *config.SmFsConfig, rater, cdrs, rls rpcclient.RpcClientConnection, timezone string) *FSSessionManager {
|
||||
if rls != nil && reflect.ValueOf(rls).IsNil() {
|
||||
rls = nil
|
||||
}
|
||||
return &FSSessionManager{
|
||||
cfg: smFsConfig,
|
||||
conns: make(map[string]*fsock.FSock),
|
||||
@@ -161,6 +165,7 @@ func (sm *FSSessionManager) onChannelPark(ev engine.Event, connId string) {
|
||||
if err = sm.Rater().Call("Responder.GetLCR", &engine.AttrGetLcr{CallDescriptor: cd}, &lcr); err != nil {
|
||||
utils.Logger.Info(fmt.Sprintf("<SM-FreeSWITCH> LCR_API_ERROR: %s", err.Error()))
|
||||
sm.unparkCall(ev.GetUUID(), connId, ev.GetCallDestNr(utils.META_DEFAULT), SYSTEM_ERROR)
|
||||
return
|
||||
}
|
||||
if lcr.HasErrors() {
|
||||
lcr.LogErrors()
|
||||
@@ -176,9 +181,29 @@ func (sm *FSSessionManager) onChannelPark(ev engine.Event, connId string) {
|
||||
if _, err = sm.conns[connId].SendApiCmd(fmt.Sprintf("uuid_setvar %s %s %s\n\n", ev.GetUUID(), utils.CGR_SUPPLIERS, fsArray)); err != nil {
|
||||
utils.Logger.Info(fmt.Sprintf("<SM-FreeSWITCH> LCR_ERROR: %s", err.Error()))
|
||||
sm.unparkCall(ev.GetUUID(), connId, ev.GetCallDestNr(utils.META_DEFAULT), SYSTEM_ERROR)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if sm.rls != nil {
|
||||
var reply string
|
||||
attrRU := utils.AttrRLsResourceUsage{
|
||||
ResourceUsageID: ev.GetUUID(),
|
||||
Event: utils.ConvertMapValStrIf(ev.(FSEvent)),
|
||||
RequestedUnits: 1,
|
||||
}
|
||||
fmt.Printf("InitiateResourceUsage, attrs: %+v\n", attrRU)
|
||||
if err := sm.rls.Call("RLsV1.InitiateResourceUsage", attrRU, &reply); err != nil {
|
||||
if err.Error() == utils.ErrResourceUnavailable.Error() {
|
||||
sm.unparkCall(ev.GetUUID(), connId, ev.GetCallDestNr(utils.META_DEFAULT), "-"+utils.ErrResourceUnavailable.Error())
|
||||
} else {
|
||||
utils.Logger.Err(fmt.Sprintf("<SM-FreeSWITCH> RLs API error: %s", err.Error()))
|
||||
sm.unparkCall(ev.GetUUID(), connId, ev.GetCallDestNr(utils.META_DEFAULT), SYSTEM_ERROR)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
// Check ResourceLimits
|
||||
sm.unparkCall(ev.GetUUID(), connId, ev.GetCallDestNr(utils.META_DEFAULT), AUTH_OK)
|
||||
}
|
||||
|
||||
@@ -226,6 +251,18 @@ func (sm *FSSessionManager) onChannelHangupComplete(ev engine.Event) {
|
||||
if sm.cfg.CreateCdr {
|
||||
sm.ProcessCdr(ev.AsStoredCdr(config.CgrConfig().DefaultTimezone))
|
||||
}
|
||||
var reply string
|
||||
attrRU := utils.AttrRLsResourceUsage{
|
||||
ResourceUsageID: ev.GetUUID(),
|
||||
Event: utils.ConvertMapValStrIf(ev.(FSEvent)),
|
||||
RequestedUnits: 1,
|
||||
}
|
||||
if sm.rls != nil {
|
||||
fmt.Printf("Will call the RLs over conn: %+v\n", sm.rls)
|
||||
if err := sm.rls.Call("RLsV1.TerminateResourceUsage", attrRU, &reply); err != nil {
|
||||
utils.Logger.Err(fmt.Sprintf("<SM-FreeSWITCH> RLs API error: %s", err.Error()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Connects to the freeswitch mod_event_socket server and starts
|
||||
|
||||
Reference in New Issue
Block a user