func (cgrCdr CgrCdr) AsStoredCdr(timezone string) *CDR { storCdr := new(CDR) storCdr.CGRID = cgrCdr.getCGRID(timezone) storCdr.ToR = cgrCdr[utils.TOR] storCdr.OriginID = cgrCdr[utils.ACCID] storCdr.OriginHost = cgrCdr[utils.CDRHOST] storCdr.Source = cgrCdr[utils.CDRSOURCE] storCdr.RequestType = cgrCdr[utils.REQTYPE] storCdr.Direction = utils.OUT storCdr.Tenant = cgrCdr[utils.TENANT] storCdr.Category = cgrCdr[utils.CATEGORY] storCdr.Account = cgrCdr[utils.ACCOUNT] storCdr.Subject = cgrCdr[utils.SUBJECT] storCdr.Destination = cgrCdr[utils.DESTINATION] storCdr.SetupTime, _ = utils.ParseTimeDetectLayout(cgrCdr[utils.SETUP_TIME], timezone) // Not interested to process errors, should do them if necessary in a previous step storCdr.PDD, _ = utils.ParseDurationWithSecs(cgrCdr[utils.PDD]) storCdr.AnswerTime, _ = utils.ParseTimeDetectLayout(cgrCdr[utils.ANSWER_TIME], timezone) storCdr.Usage, _ = utils.ParseDurationWithSecs(cgrCdr[utils.USAGE]) storCdr.Supplier = cgrCdr[utils.SUPPLIER] storCdr.DisconnectCause = cgrCdr[utils.DISCONNECT_CAUSE] storCdr.ExtraFields = cgrCdr.getExtraFields() storCdr.Cost = -1 if costStr, hasIt := cgrCdr[utils.COST]; hasIt { storCdr.Cost, _ = strconv.ParseFloat(costStr, 64) } if ratedStr, hasIt := cgrCdr[utils.RATED]; hasIt { storCdr.Rated, _ = strconv.ParseBool(ratedStr) } return storCdr }
func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { if jsnCfg == nil { return nil } var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Listen_bijson != nil { self.ListenBijson = *jsnCfg.Listen_bijson } if jsnCfg.Rater != nil { self.HaRater = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Rater, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Cdrs != nil { self.HaCdrs = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Cdrs, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } return nil }
func NewStoredCdrFromExternalCdr(extCdr *ExternalCdr, timezone string) (*StoredCdr, error) { var err error storedCdr := &StoredCdr{CgrId: extCdr.CgrId, OrderId: extCdr.OrderId, TOR: extCdr.TOR, AccId: extCdr.AccId, CdrHost: extCdr.CdrHost, CdrSource: extCdr.CdrSource, ReqType: extCdr.ReqType, Direction: extCdr.Direction, Tenant: extCdr.Tenant, Category: extCdr.Category, Account: extCdr.Account, Subject: extCdr.Subject, Destination: extCdr.Destination, Supplier: extCdr.Supplier, DisconnectCause: extCdr.DisconnectCause, MediationRunId: extCdr.MediationRunId, RatedAccount: extCdr.RatedAccount, RatedSubject: extCdr.RatedSubject, Cost: extCdr.Cost, Rated: extCdr.Rated} if storedCdr.SetupTime, err = utils.ParseTimeDetectLayout(extCdr.SetupTime, timezone); err != nil { return nil, err } if len(storedCdr.CgrId) == 0 { // Populate CgrId if not present storedCdr.CgrId = utils.Sha1(storedCdr.AccId, storedCdr.SetupTime.UTC().String()) } if storedCdr.AnswerTime, err = utils.ParseTimeDetectLayout(extCdr.AnswerTime, timezone); err != nil { return nil, err } if storedCdr.Usage, err = utils.ParseDurationWithSecs(extCdr.Usage); err != nil { return nil, err } if storedCdr.Pdd, err = utils.ParseDurationWithSecs(extCdr.Pdd); err != nil { return nil, err } if len(extCdr.CostDetails) != 0 { if err = json.Unmarshal([]byte(extCdr.CostDetails), storedCdr.CostDetails); err != nil { return nil, err } } if extCdr.ExtraFields != nil { storedCdr.ExtraFields = make(map[string]string) } for k, v := range extCdr.ExtraFields { storedCdr.ExtraFields[k] = v } return storedCdr, nil }
func NewCDRFromExternalCDR(extCdr *ExternalCDR, timezone string) (*CDR, error) { var err error cdr := &CDR{CGRID: extCdr.CGRID, RunID: extCdr.RunID, OrderID: extCdr.OrderID, ToR: extCdr.ToR, OriginID: extCdr.OriginID, OriginHost: extCdr.OriginHost, Source: extCdr.Source, RequestType: extCdr.RequestType, Direction: extCdr.Direction, Tenant: extCdr.Tenant, Category: extCdr.Category, Account: extCdr.Account, Subject: extCdr.Subject, Destination: extCdr.Destination, Supplier: extCdr.Supplier, DisconnectCause: extCdr.DisconnectCause, CostSource: extCdr.CostSource, Cost: extCdr.Cost, Rated: extCdr.Rated} if cdr.SetupTime, err = utils.ParseTimeDetectLayout(extCdr.SetupTime, timezone); err != nil { return nil, err } if len(cdr.CGRID) == 0 { // Populate CGRID if not present cdr.CGRID = utils.Sha1(cdr.OriginID, cdr.SetupTime.UTC().String()) } if cdr.AnswerTime, err = utils.ParseTimeDetectLayout(extCdr.AnswerTime, timezone); err != nil { return nil, err } if cdr.Usage, err = utils.ParseDurationWithSecs(extCdr.Usage); err != nil { return nil, err } if cdr.PDD, err = utils.ParseDurationWithSecs(extCdr.PDD); err != nil { return nil, err } if len(extCdr.CostDetails) != 0 { if err = json.Unmarshal([]byte(extCdr.CostDetails), cdr.CostDetails); err != nil { return nil, err } } if extCdr.ExtraFields != nil { cdr.ExtraFields = make(map[string]string) } for k, v := range extCdr.ExtraFields { cdr.ExtraFields[k] = v } return cdr, nil }
func (rlcfg *ResourceLimiterConfig) loadFromJsonCfg(jsnCfg *ResourceLimiterServJsonCfg) (err error) { if jsnCfg == nil { return nil } if jsnCfg.Enabled != nil { rlcfg.Enabled = *jsnCfg.Enabled } if jsnCfg.Cdrstats_conns != nil { rlcfg.CDRStatConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrstats_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrstats_conns { rlcfg.CDRStatConns[idx] = NewDfltHaPoolConfig() rlcfg.CDRStatConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cache_dump_interval != nil { if rlcfg.CacheDumpInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Cache_dump_interval); err != nil { return err } } if jsnCfg.Usage_ttl != nil { if rlcfg.UsageTTL, err = utils.ParseDurationWithSecs(*jsnCfg.Usage_ttl); err != nil { return err } } return nil }
// Populates the field with id from value; strings are appended to original one func (cdr *CDR) ParseFieldValue(fieldId, fieldVal, timezone string) error { var err error switch fieldId { case utils.ORDERID: if cdr.OrderID, err = strconv.ParseInt(fieldVal, 10, 64); err != nil { return err } case utils.TOR: cdr.ToR += fieldVal case utils.MEDI_RUNID: cdr.RunID += fieldVal case utils.ACCID: cdr.OriginID += fieldVal case utils.REQTYPE: cdr.RequestType += fieldVal case utils.DIRECTION: cdr.Direction += fieldVal case utils.TENANT: cdr.Tenant += fieldVal case utils.CATEGORY: cdr.Category += fieldVal case utils.ACCOUNT: cdr.Account += fieldVal case utils.SUBJECT: cdr.Subject += fieldVal case utils.DESTINATION: cdr.Destination += fieldVal case utils.RATED_FLD: cdr.Rated, _ = strconv.ParseBool(fieldVal) case utils.SETUP_TIME: if cdr.SetupTime, err = utils.ParseTimeDetectLayout(fieldVal, timezone); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.PDD: if cdr.PDD, err = utils.ParseDurationWithSecs(fieldVal); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.ANSWER_TIME: if cdr.AnswerTime, err = utils.ParseTimeDetectLayout(fieldVal, timezone); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.USAGE: if cdr.Usage, err = utils.ParseDurationWithSecs(fieldVal); err != nil { return fmt.Errorf("Cannot parse duration field with value: %s, err: %s", fieldVal, err.Error()) } case utils.SUPPLIER: cdr.Supplier += fieldVal case utils.DISCONNECT_CAUSE: cdr.DisconnectCause += fieldVal case utils.COST: if cdr.Cost, err = strconv.ParseFloat(fieldVal, 64); err != nil { return fmt.Errorf("Cannot parse cost field with value: %s, err: %s", fieldVal, err.Error()) } case utils.PartialField: cdr.Partial, _ = strconv.ParseBool(fieldVal) default: // Extra fields will not match predefined so they all show up here cdr.ExtraFields[fieldId] += fieldVal } return nil }
func (self *SmGenericConfig) loadFromJsonCfg(jsnCfg *SmGenericJsonCfg) error { if jsnCfg == nil { return nil } var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Listen_bijson != nil { self.ListenBijson = *jsnCfg.Listen_bijson } if jsnCfg.Rals_conns != nil { self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) for idx, jsnHaCfg := range *jsnCfg.Rals_conns { self.RALsConns[idx] = NewDfltHaPoolConfig() self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { self.CDRsConns[idx] = NewDfltHaPoolConfig() self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Session_ttl != nil { if self.SessionTTL, err = utils.ParseDurationWithSecs(*jsnCfg.Session_ttl); err != nil { return err } } if jsnCfg.Session_ttl_last_used != nil { if sessionTTLLastUsed, err := utils.ParseDurationWithSecs(*jsnCfg.Session_ttl_last_used); err != nil { return err } else { self.SessionTTLLastUsed = &sessionTTLLastUsed } } if jsnCfg.Session_indexes != nil { self.SessionIndexes = *jsnCfg.Session_indexes } return nil }
func (self *SmOsipsConfig) loadFromJsonCfg(jsnCfg *SmOsipsJsonCfg) error { var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Listen_udp != nil { self.ListenUdp = *jsnCfg.Listen_udp } if jsnCfg.Rals_conns != nil { self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) for idx, jsnHaCfg := range *jsnCfg.Rals_conns { self.RALsConns[idx] = NewDfltHaPoolConfig() self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { self.CDRsConns[idx] = NewDfltHaPoolConfig() self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { self.CreateCdr = *jsnCfg.Create_cdr } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Events_subscribe_interval != nil { if self.EventsSubscribeInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Events_subscribe_interval); err != nil { return err } } if jsnCfg.Mi_addr != nil { self.MiAddr = *jsnCfg.Mi_addr } return nil }
func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { if jsnCfg == nil { return nil } var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Rals_conns != nil { self.RALsConns = make([]*HaPoolConfig, len(*jsnCfg.Rals_conns)) for idx, jsnHaCfg := range *jsnCfg.Rals_conns { self.RALsConns[idx] = NewDfltHaPoolConfig() self.RALsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Cdrs_conns != nil { self.CDRsConns = make([]*HaPoolConfig, len(*jsnCfg.Cdrs_conns)) for idx, jsnHaCfg := range *jsnCfg.Cdrs_conns { self.CDRsConns[idx] = NewDfltHaPoolConfig() self.CDRsConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Create_cdr != nil { self.CreateCdr = *jsnCfg.Create_cdr } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Evapi_conns != nil { self.EvapiConns = make([]*KamConnConfig, len(*jsnCfg.Evapi_conns)) for idx, jsnConnCfg := range *jsnCfg.Evapi_conns { self.EvapiConns[idx] = NewDfltKamConnConfig() self.EvapiConns[idx].loadFromJsonCfg(jsnConnCfg) } } return nil }
// Populates the func populateStoredCdrField(cdr *engine.StoredCdr, fieldId, fieldVal, timezone string) error { var err error switch fieldId { case utils.TOR: cdr.TOR += fieldVal case utils.ACCID: cdr.AccId += fieldVal case utils.REQTYPE: cdr.ReqType += fieldVal case utils.DIRECTION: cdr.Direction += fieldVal case utils.TENANT: cdr.Tenant += fieldVal case utils.CATEGORY: cdr.Category += fieldVal case utils.ACCOUNT: cdr.Account += fieldVal case utils.SUBJECT: cdr.Subject += fieldVal case utils.DESTINATION: cdr.Destination += fieldVal case utils.RATED: cdr.Rated, _ = strconv.ParseBool(fieldVal) case utils.SETUP_TIME: if cdr.SetupTime, err = utils.ParseTimeDetectLayout(fieldVal, timezone); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.PDD: if cdr.Pdd, err = utils.ParseDurationWithSecs(fieldVal); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.ANSWER_TIME: if cdr.AnswerTime, err = utils.ParseTimeDetectLayout(fieldVal, timezone); err != nil { return fmt.Errorf("Cannot parse answer time field with value: %s, err: %s", fieldVal, err.Error()) } case utils.USAGE: if cdr.Usage, err = utils.ParseDurationWithSecs(fieldVal); err != nil { return fmt.Errorf("Cannot parse duration field with value: %s, err: %s", fieldVal, err.Error()) } case utils.SUPPLIER: cdr.Supplier += fieldVal case utils.DISCONNECT_CAUSE: cdr.DisconnectCause += fieldVal default: // Extra fields will not match predefined so they all show up here cdr.ExtraFields[fieldId] += fieldVal } return nil }
func (fsCdr FSCdr) AsStoredCdr(timezone string) *CDR { storCdr := new(CDR) storCdr.CGRID = fsCdr.getCGRID(timezone) storCdr.ToR = utils.VOICE storCdr.OriginID = fsCdr.vars[FS_UUID] storCdr.OriginHost = fsCdr.vars[FS_IP] storCdr.Source = FS_CDR_SOURCE storCdr.RequestType = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_REQTYPE], fsCdr.cgrCfg.DefaultReqType) storCdr.Direction = utils.OUT storCdr.Tenant = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_TENANT], fsCdr.cgrCfg.DefaultTenant) storCdr.Category = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_CATEGORY], fsCdr.cgrCfg.DefaultCategory) storCdr.Account = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_ACCOUNT], fsCdr.vars[FS_USERNAME]) storCdr.Subject = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_SUBJECT], fsCdr.vars[utils.CGR_ACCOUNT], fsCdr.vars[FS_USERNAME]) storCdr.Destination = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_DESTINATION], fsCdr.vars[FS_CALL_DEST_NR], fsCdr.vars[FS_SIP_REQUSER]) storCdr.SetupTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_SETUP_TIME], timezone) // Not interested to process errors, should do them if necessary in a previous step pddStr := utils.FirstNonEmpty(fsCdr.vars[FS_PROGRESS_MEDIAMSEC], fsCdr.vars[FS_PROGRESSMS]) pddStr += "ms" storCdr.PDD, _ = time.ParseDuration(pddStr) storCdr.AnswerTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_ANSWER_TIME], timezone) storCdr.Usage, _ = utils.ParseDurationWithSecs(fsCdr.vars[FS_DURATION]) storCdr.Supplier = fsCdr.vars[utils.CGR_SUPPLIER] storCdr.DisconnectCause = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_DISCONNECT_CAUSE], fsCdr.vars["hangup_cause"]) storCdr.ExtraFields = fsCdr.getExtraFields() storCdr.Cost = -1 return storCdr }
func (self SMGenericEvent) GetPdd(fieldName string) (time.Duration, error) { if fieldName == utils.META_DEFAULT { fieldName = utils.PDD } result, _ := utils.ConvertIfaceToString(self[fieldName]) return utils.ParseDurationWithSecs(result) }
func (self *UsageRecord) AsCallDescriptor(timezone string) (*CallDescriptor, error) { var err error cd := &CallDescriptor{ CgrID: self.GetId(), TOR: self.ToR, Direction: self.Direction, Tenant: self.Tenant, Category: self.Category, Subject: self.Subject, Account: self.Account, Destination: self.Destination, } timeStr := self.AnswerTime if len(timeStr) == 0 { // In case of auth, answer time will not be defined, so take it out of setup one timeStr = self.SetupTime } if cd.TimeStart, err = utils.ParseTimeDetectLayout(timeStr, timezone); err != nil { return nil, err } if usage, err := utils.ParseDurationWithSecs(self.Usage); err != nil { return nil, err } else { cd.TimeEnd = cd.TimeStart.Add(usage) } if self.ExtraFields != nil { cd.ExtraFields = make(map[string]string) } for k, v := range self.ExtraFields { cd.ExtraFields[k] = v } return cd, nil }
func (kev KamEvent) GetDuration(fieldName string) (time.Duration, error) { durStr := utils.FirstNonEmpty(kev[fieldName], kev[CGR_DURATION]) if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value durStr = fieldName[len(utils.STATIC_VALUE_PREFIX):] } return utils.ParseDurationWithSecs(durStr) }
func (osipsev *OsipsEvent) GetDuration(fieldName string) (time.Duration, error) { durStr := utils.FirstNonEmpty(osipsev.osipsEvent.AttrValues[fieldName], osipsev.osipsEvent.AttrValues[OSIPS_DURATION]) if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value durStr = fieldName[len(utils.STATIC_VALUE_PREFIX):] } return utils.ParseDurationWithSecs(durStr) }
func (self *DiameterAgentCfg) loadFromJsonCfg(jsnCfg *DiameterAgentJsonCfg) error { if jsnCfg == nil { return nil } if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Listen != nil { self.Listen = *jsnCfg.Listen } if jsnCfg.Dictionaries_dir != nil { self.DictionariesDir = *jsnCfg.Dictionaries_dir } if jsnCfg.Sm_generic != nil { self.SMGeneric = *jsnCfg.Sm_generic } if jsnCfg.Pubsubs != nil { self.PubSubS = *jsnCfg.Pubsubs } if jsnCfg.Create_cdr != nil { self.CreateCDR = *jsnCfg.Create_cdr } if jsnCfg.Debit_interval != nil { var err error if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Timezone != nil { self.Timezone = *jsnCfg.Timezone } if jsnCfg.Origin_host != nil { self.OriginHost = *jsnCfg.Origin_host } if jsnCfg.Origin_realm != nil { self.OriginRealm = *jsnCfg.Origin_realm } if jsnCfg.Vendor_id != nil { self.VendorId = *jsnCfg.Vendor_id } if jsnCfg.Product_name != nil { self.ProductName = *jsnCfg.Product_name } if jsnCfg.Request_processors != nil { for _, reqProcJsn := range *jsnCfg.Request_processors { rp := new(DARequestProcessor) for _, rpSet := range self.RequestProcessors { if reqProcJsn.Id != nil && rpSet.Id == *reqProcJsn.Id { rp = rpSet // Will load data into the one set break } } if err := rp.loadFromJsonCfg(reqProcJsn); err != nil { return nil } self.RequestProcessors = append(self.RequestProcessors, rp) } } return nil }
func (self *SmOsipsConfig) loadFromJsonCfg(jsnCfg *SmOsipsJsonCfg) error { var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Listen_udp != nil { self.ListenUdp = *jsnCfg.Listen_udp } if jsnCfg.Rater != nil { self.HaRater = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Rater, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Cdrs != nil { self.HaCdrs = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Cdrs, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Create_cdr != nil { self.CreateCdr = *jsnCfg.Create_cdr } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Events_subscribe_interval != nil { if self.EventsSubscribeInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Events_subscribe_interval); err != nil { return err } } if jsnCfg.Mi_addr != nil { self.MiAddr = *jsnCfg.Mi_addr } return nil }
func (self SMGenericEvent) GetLastUsed(fieldName string) (time.Duration, error) { if fieldName == utils.META_DEFAULT { fieldName = utils.LastUsed } valStr, hasVal := self[fieldName] if !hasVal { return nilDuration, utils.ErrNotFound } result, _ := utils.ConvertIfaceToString(valStr) return utils.ParseDurationWithSecs(result) }
func (kev KamEvent) GetPdd(fieldName string) (time.Duration, error) { var pddStr string if utils.IsSliceMember([]string{utils.PDD, utils.META_DEFAULT}, fieldName) { pddStr = kev[CGR_PDD] } else if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value pddStr = fieldName[len(utils.STATIC_VALUE_PREFIX):] } else { pddStr = kev[fieldName] } return utils.ParseDurationWithSecs(pddStr) }
func (self SMGenericEvent) GetMaxUsage(fieldName string, cfgMaxUsage time.Duration) (time.Duration, error) { if fieldName == utils.META_DEFAULT { fieldName = utils.USAGE } maxUsageStr, hasIt := self[fieldName] if !hasIt { return cfgMaxUsage, nil } result, _ := utils.ConvertIfaceToString(maxUsageStr) return utils.ParseDurationWithSecs(result) }
func (self *SmKamConfig) loadFromJsonCfg(jsnCfg *SmKamJsonCfg) error { if jsnCfg == nil { return nil } var err error if jsnCfg.Enabled != nil { self.Enabled = *jsnCfg.Enabled } if jsnCfg.Rater != nil { self.HaRater = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Rater, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Cdrs != nil { self.HaCdrs = []*HaPoolConfig{&HaPoolConfig{Server: *jsnCfg.Cdrs, Timeout: time.Duration(1) * time.Second}} } if jsnCfg.Create_cdr != nil { self.CreateCdr = *jsnCfg.Create_cdr } if jsnCfg.Debit_interval != nil { if self.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if self.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if self.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Connections != nil { self.Connections = make([]*KamConnConfig, len(*jsnCfg.Connections)) for idx, jsnConnCfg := range *jsnCfg.Connections { self.Connections[idx] = NewDfltKamConnConfig() self.Connections[idx].loadFromJsonCfg(jsnConnCfg) } } return nil }
func (storedCdr *StoredCdr) GetPdd(fieldName string) (time.Duration, error) { if utils.IsSliceMember([]string{utils.PDD, utils.META_DEFAULT}, fieldName) { return storedCdr.Pdd, nil } var pddVal string if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value pddVal = fieldName[len(utils.STATIC_VALUE_PREFIX):] } else { pddVal = storedCdr.FieldAsString(&utils.RSRField{Id: fieldName}) } return utils.ParseDurationWithSecs(pddVal) }
func TestDmtAgentInitCfg(t *testing.T) { daCfgPath = path.Join(*dataDir, "conf", "samples", "dmtagent") // Init config first var err error daCfg, err = config.NewCGRConfigFromFolder(daCfgPath) if err != nil { t.Error(err) } daCfg.DataFolderPath = *dataDir // Share DataFolderPath through config towards StoreDb for Flush() config.SetCgrConfig(daCfg) rplyTimeout, _ = utils.ParseDurationWithSecs(*replyTimeout) }
func (cdr *CDR) GetPdd(fieldName string) (time.Duration, error) { if utils.IsSliceMember([]string{utils.PDD, utils.META_DEFAULT, ""}, fieldName) { return cdr.PDD, nil } var PDDVal string if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value PDDVal = fieldName[len(utils.STATIC_VALUE_PREFIX):] } else { PDDVal = cdr.FieldAsString(&utils.RSRField{Id: fieldName}) } return utils.ParseDurationWithSecs(PDDVal) }
// GetSessionTTL retrieves SessionTTL setting out of SMGenericEvent func (self SMGenericEvent) GetSessionTTL() time.Duration { valIf, hasVal := self[utils.SessionTTL] if !hasVal { return time.Duration(0) } ttlStr, converted := utils.ConvertIfaceToString(valIf) if !converted { return time.Duration(0) } ttl, _ := utils.ParseDurationWithSecs(ttlStr) return ttl }
func (aCfg *SMAsteriskCfg) loadFromJsonCfg(jsnCfg *SMAsteriskJsonCfg) (err error) { if jsnCfg.Enabled != nil { aCfg.Enabled = *jsnCfg.Enabled } if jsnCfg.Sm_generic_conns != nil { aCfg.SMGConns = make([]*HaPoolConfig, len(*jsnCfg.Sm_generic_conns)) for idx, jsnHaCfg := range *jsnCfg.Sm_generic_conns { aCfg.SMGConns[idx] = NewDfltHaPoolConfig() aCfg.SMGConns[idx].loadFromJsonCfg(jsnHaCfg) } } if jsnCfg.Session_terminate_subscriber != nil { aCfg.SessionTerminateSubscriber = NewDfltHaPoolConfig() aCfg.SessionTerminateSubscriber.loadFromJsonCfg(jsnCfg.Session_terminate_subscriber) } if jsnCfg.Debit_interval != nil { if aCfg.DebitInterval, err = utils.ParseDurationWithSecs(*jsnCfg.Debit_interval); err != nil { return err } } if jsnCfg.Min_call_duration != nil { if aCfg.MinCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Min_call_duration); err != nil { return err } } if jsnCfg.Max_call_duration != nil { if aCfg.MaxCallDuration, err = utils.ParseDurationWithSecs(*jsnCfg.Max_call_duration); err != nil { return err } } if jsnCfg.Asterisk_conns != nil { aCfg.AsteriskConns = make([]*AsteriskConnCfg, len(*jsnCfg.Asterisk_conns)) for i, jsnAConn := range *jsnCfg.Asterisk_conns { aCfg.AsteriskConns[i] = NewDefaultAsteriskConnCfg() aCfg.AsteriskConns[i].loadFromJsonCfg(jsnAConn) } } return nil }
func (tpr *TpReader) LoadActionTriggers() (err error) { tps, err := tpr.lr.GetTpActionTriggers(tpr.tpid, "") if err != nil { return err } storAts, err := TpActionTriggers(tps).GetActionTriggers() if err != nil { return err } for key, atrsLst := range storAts { atrs := make([]*ActionTrigger, len(atrsLst)) for idx, atr := range atrsLst { balanceExpirationDate, _ := utils.ParseTimeDetectLayout(atr.BalanceExpirationDate, tpr.timezone) id := atr.Id if id == "" { id = utils.GenUUID() } minSleep, err := utils.ParseDurationWithSecs(atr.MinSleep) if err != nil { return err } atrs[idx] = &ActionTrigger{ Id: id, ThresholdType: atr.ThresholdType, ThresholdValue: atr.ThresholdValue, Recurrent: atr.Recurrent, MinSleep: minSleep, BalanceId: atr.BalanceId, BalanceType: atr.BalanceType, BalanceDirection: atr.BalanceDirection, BalanceDestinationIds: atr.BalanceDestinationIds, BalanceWeight: atr.BalanceWeight, BalanceExpirationDate: balanceExpirationDate, BalanceTimingTags: atr.BalanceTimingTags, BalanceRatingSubject: atr.BalanceRatingSubject, BalanceCategory: atr.BalanceCategory, BalanceSharedGroup: atr.BalanceSharedGroup, Weight: atr.Weight, ActionsId: atr.ActionsId, MinQueuedItems: atr.MinQueuedItems, } if atrs[idx].Id == "" { atrs[idx].Id = utils.GenUUID() } } tpr.actionsTriggers[key] = atrs } return nil }
func (fsev FSEvent) GetPdd(fieldName string) (time.Duration, error) { var pddStr string if utils.IsSliceMember([]string{utils.PDD, utils.META_DEFAULT}, fieldName) { pddStr = utils.FirstNonEmpty(fsev[PDD_MEDIA_MS], fsev[PDD_NOMEDIA_MS]) if len(pddStr) != 0 { pddStr = pddStr + "ms" // PDD is in milliseconds and CGR expects it in seconds } } else if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value pddStr = fieldName[len(utils.STATIC_VALUE_PREFIX):] } else { pddStr = fsev[fieldName] } return utils.ParseDurationWithSecs(pddStr) }
func (self *HaPoolConfig) loadFromJsonCfg(jsnCfg *HaPoolJsonCfg) error { var err error if jsnCfg == nil { return nil } if jsnCfg.Server != nil { self.Server = *jsnCfg.Server } if jsnCfg.Timeout != nil { if self.Timeout, err = utils.ParseDurationWithSecs(*jsnCfg.Timeout); err != nil { return err } } return nil }
// GetSessionTTLUsage retrieves SessionTTLUsage setting out of SMGenericEvent func (self SMGenericEvent) GetSessionTTLUsage() *time.Duration { valIf, hasVal := self[utils.SessionTTLUsage] if !hasVal { return nil } ttlStr, converted := utils.ConvertIfaceToString(valIf) if !converted { return nil } if ttl, err := utils.ParseDurationWithSecs(ttlStr); err != nil { return nil } else { return &ttl } }