Example #1
0
func (smg *SMGeneric) LCRSuppliers(gev SMGenericEvent) (suppls []string, err error) {
	cacheKey := "LCRSuppliers" + gev.GetCgrId(smg.timezone) + gev.GetAccount(utils.META_DEFAULT) + gev.GetDestination(utils.META_DEFAULT)
	if item, err := smg.responseCache.Get(cacheKey); err == nil && item != nil {
		if item.Value != nil {
			suppls = (item.Value.([]string))
		}
		err = item.Err
		return suppls, err
	}
	defer smg.responseCache.Cache(cacheKey, &cache.CacheItem{Value: suppls, Err: err})
	gev[utils.EVENT_NAME] = utils.CGR_LCR_REQUEST
	var cd *engine.CallDescriptor
	cd, err = gev.AsLcrRequest().AsCallDescriptor(smg.timezone)
	cd.CgrID = gev.GetCgrId(smg.timezone)
	if err != nil {
		return
	}
	var lcr engine.LCRCost
	if err = smg.rater.Call("Responder.GetLCR", &engine.AttrGetLcr{CallDescriptor: cd}, &lcr); err != nil {
		return
	}
	if lcr.HasErrors() {
		lcr.LogErrors()
		err = errors.New("LCR_COMPUTE_ERROR")
		return
	}
	suppls, err = lcr.SuppliersSlice()
	return
}