// Queries LCR and sets the cgr_lcr channel variable func (sm *FSSessionManager) setCgrLcr(ev engine.Event, connId string) error { var lcrCost engine.LCRCost startTime, err := ev.GetSetupTime(utils.META_DEFAULT, sm.timezone) if err != nil { return err } cd := &engine.CallDescriptor{ Direction: ev.GetDirection(utils.META_DEFAULT), Tenant: ev.GetTenant(utils.META_DEFAULT), Category: ev.GetCategory(utils.META_DEFAULT), Subject: ev.GetSubject(utils.META_DEFAULT), Account: ev.GetAccount(utils.META_DEFAULT), Destination: ev.GetDestination(utils.META_DEFAULT), TimeStart: startTime, TimeEnd: startTime.Add(config.CgrConfig().MaxCallDuration), } if err := sm.rater.GetLCR(&engine.AttrGetLcr{CallDescriptor: cd}, &lcrCost); err != nil { return err } supps := []string{} for _, supplCost := range lcrCost.SupplierCosts { if dtcs, err := utils.NewDTCSFromRPKey(supplCost.Supplier); err != nil { return err } else if len(dtcs.Subject) != 0 { supps = append(supps, dtcs.Subject) } } fsArray := SliceAsFsArray(supps) if _, err = sm.conns[connId].SendApiCmd(fmt.Sprintf("uuid_setvar %s cgr_notify %s\n\n", ev.GetUUID(), fsArray)); err != nil { return err } return nil }