func (ms *MongoStorage) GetDerivedChargers(key string, skipCache bool, transactionID string) (dcs *utils.DerivedChargers, err error) { if !skipCache { if x, ok := cache2go.Get(utils.DERIVEDCHARGERS_PREFIX + key); ok { if x != nil { return x.(*utils.DerivedChargers), nil } return nil, utils.ErrNotFound } } var kv struct { Key string Value *utils.DerivedChargers } session, col := ms.conn(colDcs) defer session.Close() err = col.Find(bson.M{"key": key}).One(&kv) cCommit := cacheCommit(transactionID) if err == nil { dcs = kv.Value } else { cache2go.Set(utils.DERIVEDCHARGERS_PREFIX+key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(utils.DERIVEDCHARGERS_PREFIX+key, dcs, cCommit, transactionID) return }
func (ms *MapStorage) GetDestination(key string, skipCache bool, transactionID string) (dest *Destination, err error) { ms.mu.RLock() defer ms.mu.RUnlock() cCommit := cacheCommit(transactionID) key = utils.DESTINATION_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*Destination), nil } return nil, utils.ErrNotFound } } if values, ok := ms.dict[key]; ok { b := bytes.NewBuffer(values) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() dest = new(Destination) err = ms.ms.Unmarshal(out, dest) if err != nil { cache2go.Set(key, dest, cCommit, transactionID) } } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } return }
func (ms *MongoStorage) GetLCR(key string, skipCache bool, transactionID string) (lcr *LCR, err error) { if !skipCache { if x, ok := cache2go.Get(utils.LCR_PREFIX + key); ok { if x != nil { return x.(*LCR), nil } return nil, utils.ErrNotFound } } var result struct { Key string Value *LCR } session, col := ms.conn(colLcr) defer session.Close() cCommit := cacheCommit(transactionID) if err = col.Find(bson.M{"key": key}).One(&result); err == nil { lcr = result.Value } else { cache2go.Set(utils.LCR_PREFIX+key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(utils.LCR_PREFIX+key, lcr, cCommit, transactionID) return }
func (ms *MongoStorage) GetReverseAlias(reverseID string, skipCache bool, transactionID string) (ids []string, err error) { if !skipCache { if x, ok := cache2go.Get(utils.REVERSE_ALIASES_PREFIX + reverseID); ok { if x != nil { return x.([]string), nil } return nil, utils.ErrNotFound } } var result struct { Key string Value []string } session, col := ms.conn(colRls) defer session.Close() if err = col.Find(bson.M{"key": reverseID}).One(&result); err == nil { ids = result.Value cache2go.Set(utils.REVERSE_ALIASES_PREFIX+reverseID, ids, cacheCommit(transactionID), transactionID) } else { cache2go.Set(utils.REVERSE_ALIASES_PREFIX+reverseID, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } return }
func (rs *RedisStorage) GetDestination(key string, skipCache bool, transactionID string) (dest *Destination, err error) { key = utils.DESTINATION_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*Destination), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); len(values) > 0 && err == nil { b := bytes.NewBuffer(values) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() dest = new(Destination) err = rs.ms.Unmarshal(out, dest) if err != nil { cache2go.Set(key, dest, cacheCommit(transactionID), transactionID) } } else { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, err } return }
func (ms *MongoStorage) GetAlias(key string, skipCache bool, transactionID string) (al *Alias, err error) { origKey := key key = utils.ALIASES_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { al = &Alias{Values: x.(AliasValues)} al.SetId(origKey) return al, nil } return nil, utils.ErrNotFound } } var kv struct { Key string Value AliasValues } session, col := ms.conn(colAls) defer session.Close() cCommit := cacheCommit(transactionID) if err = col.Find(bson.M{"key": origKey}).One(&kv); err == nil { al = &Alias{Values: kv.Value} al.SetId(origKey) if err == nil { cache2go.Set(key, al.Values, cCommit, transactionID) } } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } return }
func (ms *MapStorage) GetRatingPlan(key string, skipCache bool, transactionID string) (rp *RatingPlan, err error) { ms.mu.RLock() defer ms.mu.RUnlock() key = utils.RATING_PLAN_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*RatingPlan), nil } return nil, utils.ErrNotFound } } cCommit := cacheCommit(transactionID) if values, ok := ms.dict[key]; ok { b := bytes.NewBuffer(values) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() rp = new(RatingPlan) err = ms.ms.Unmarshal(out, rp) } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, rp, cCommit, transactionID) return }
func (rs *RedisStorage) GetAlias(key string, skipCache bool, transactionID string) (al *Alias, err error) { origKey := key key = utils.ALIASES_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { al = &Alias{Values: x.(AliasValues)} al.SetId(origKey) return al, nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); err == nil { al = &Alias{Values: make(AliasValues, 0)} al.SetId(origKey) err = rs.ms.Unmarshal(values, &al.Values) } else { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, al.Values, cacheCommit(transactionID), transactionID) return }
func (ms *MapStorage) GetAlias(key string, skipCache bool, transactionID string) (al *Alias, err error) { ms.mu.RLock() defer ms.mu.RUnlock() origKey := key key = utils.ALIASES_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { al = &Alias{Values: x.(AliasValues)} al.SetId(origKey) return al, nil } return nil, utils.ErrNotFound } } cCommit := cacheCommit(transactionID) if values, ok := ms.dict[key]; ok { al = &Alias{Values: make(AliasValues, 0)} al.SetId(key[len(utils.ALIASES_PREFIX):]) err = ms.ms.Unmarshal(values, &al.Values) if err == nil { cache2go.Set(key, al.Values, cCommit, transactionID) } } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } return al, nil }
func (rs *RedisStorage) GetActionPlan(key string, skipCache bool, transactionID string) (ats *ActionPlan, err error) { key = utils.ACTION_PLAN_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*ActionPlan), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); err == nil { b := bytes.NewBuffer(values) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() ats = &ActionPlan{} err = rs.ms.Unmarshal(out, &ats) } cache2go.Set(key, ats, cacheCommit(transactionID), transactionID) return }
func (rs *RedisStorage) GetRatingPlan(key string, skipCache bool, transactionID string) (rp *RatingPlan, err error) { key = utils.RATING_PLAN_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*RatingPlan), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.Cmd("GET", key).Bytes(); err == nil { b := bytes.NewBuffer(values) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() rp = new(RatingPlan) err = rs.ms.Unmarshal(out, rp) } cache2go.Set(key, rp, cacheCommit(transactionID), transactionID) return }
// Limit will only retrieve the last n items out of history, newest first func (ms *MongoStorage) GetLoadHistory(limit int, skipCache bool, transactionID string) (loadInsts []*utils.LoadInstance, err error) { if limit == 0 { return nil, nil } if !skipCache { if x, ok := cache2go.Get(utils.LOADINST_KEY); ok { if x != nil { items := x.([]*utils.LoadInstance) if len(items) < limit || limit == -1 { return items, nil } return items[:limit], nil } return nil, utils.ErrNotFound } } var kv struct { Key string Value []*utils.LoadInstance } session, col := ms.conn(colLht) defer session.Close() err = col.Find(bson.M{"key": utils.LOADINST_KEY}).One(&kv) cCommit := cacheCommit(transactionID) if err == nil { loadInsts = kv.Value cache2go.RemKey(utils.LOADINST_KEY, cCommit, transactionID) cache2go.Set(utils.LOADINST_KEY, loadInsts, cCommit, transactionID) } if len(loadInsts) < limit || limit == -1 { return loadInsts, nil } return loadInsts[:limit], nil }
func (ms *MongoStorage) GetActionPlan(key string, skipCache bool, transactionID string) (ats *ActionPlan, err error) { if !skipCache { if x, ok := cache2go.Get(utils.ACTION_PLAN_PREFIX + key); ok { if x != nil { return x.(*ActionPlan), nil } return nil, utils.ErrNotFound } } var kv struct { Key string Value []byte } session, col := ms.conn(colApl) defer session.Close() err = col.Find(bson.M{"key": key}).One(&kv) if err == nil { b := bytes.NewBuffer(kv.Value) r, err := zlib.NewReader(b) if err != nil { return nil, err } out, err := ioutil.ReadAll(r) if err != nil { return nil, err } r.Close() err = ms.ms.Unmarshal(out, &ats) if err != nil { return nil, err } } cache2go.Set(utils.ACTION_PLAN_PREFIX+key, ats, cacheCommit(transactionID), transactionID) return }
func (rs *RedisStorage) GetReverseAlias(reverseID string, skipCache bool, transactionID string) (ids []string, err error) { key := utils.REVERSE_ALIASES_PREFIX + reverseID if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.([]string), nil } return nil, utils.ErrNotFound } } if ids, err = rs.db.Cmd("SMEMBERS", key).List(); len(ids) == 0 || err != nil { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, ids, cacheCommit(transactionID), transactionID) return }
func (rs *RedisStorage) SetResourceLimit(rl *ResourceLimit, transactionID string) error { result, err := rs.ms.Marshal(rl) if err != nil { return err } key := utils.ResourceLimitsPrefix + rl.ID err = rs.db.Cmd("SET", key, result).Err cache2go.Set(key, rl, cacheCommit(transactionID), transactionID) return err }
// Limit will only retrieve the last n items out of history, newest first func (rs *RedisStorage) GetLoadHistory(limit int, skipCache bool, transactionID string) ([]*utils.LoadInstance, error) { if limit == 0 { return nil, nil } if !skipCache { if x, ok := cache2go.Get(utils.LOADINST_KEY); ok { if x != nil { items := x.([]*utils.LoadInstance) if len(items) < limit || limit == -1 { return items, nil } return items[:limit], nil } return nil, utils.ErrNotFound } } if limit != -1 { limit -= -1 // Decrease limit to match redis approach on lrange } marshaleds, err := rs.db.Cmd("LRANGE", utils.LOADINST_KEY, 0, limit).ListBytes() cCommit := cacheCommit(transactionID) if err != nil { cache2go.Set(utils.LOADINST_KEY, nil, cCommit, transactionID) return nil, err } loadInsts := make([]*utils.LoadInstance, len(marshaleds)) for idx, marshaled := range marshaleds { var lInst utils.LoadInstance err = rs.ms.Unmarshal(marshaled, &lInst) if err != nil { return nil, err } loadInsts[idx] = &lInst } cache2go.RemKey(utils.LOADINST_KEY, cCommit, transactionID) cache2go.Set(utils.LOADINST_KEY, loadInsts, cCommit, transactionID) if len(loadInsts) < limit || limit == -1 { return loadInsts, nil } return loadInsts[:limit], nil }
func (rs *RedisStorage) GetDerivedChargers(key string, skipCache bool, transactionID string) (dcs *utils.DerivedChargers, err error) { key = utils.DERIVEDCHARGERS_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*utils.DerivedChargers), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); err == nil { err = rs.ms.Unmarshal(values, &dcs) } else { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, dcs, cacheCommit(transactionID), transactionID) return }
func (ms *MongoStorage) GetSharedGroup(key string, skipCache bool, transactionID string) (sg *SharedGroup, err error) { if !skipCache { if x, ok := cache2go.Get(utils.SHARED_GROUP_PREFIX + key); ok { if x != nil { return x.(*SharedGroup), nil } return nil, utils.ErrNotFound } } session, col := ms.conn(colShg) defer session.Close() sg = &SharedGroup{} err = col.Find(bson.M{"id": key}).One(sg) if err == nil { cache2go.Set(utils.SHARED_GROUP_PREFIX+key, sg, cacheCommit(transactionID), transactionID) } else { cache2go.Set(utils.SHARED_GROUP_PREFIX+key, nil, cacheCommit(transactionID), transactionID) } return }
func (ms *MongoStorage) GetRatingProfile(key string, skipCache bool, transactionID string) (rp *RatingProfile, err error) { if !skipCache { if x, ok := cache2go.Get(utils.RATING_PROFILE_PREFIX + key); ok { if x != nil { return x.(*RatingProfile), nil } return nil, utils.ErrNotFound } } rp = new(RatingProfile) session, col := ms.conn(colRpf) defer session.Close() err = col.Find(bson.M{"id": key}).One(rp) if err == nil { cache2go.Set(utils.RATING_PROFILE_PREFIX+key, rp, cacheCommit(transactionID), transactionID) } else { cache2go.Set(utils.RATING_PROFILE_PREFIX+key, nil, cacheCommit(transactionID), transactionID) } return }
func (ms *MapStorage) GetReverseDestination(prefix string, skipCache bool, transactionID string) (ids []string, err error) { ms.mu.Lock() defer ms.mu.Unlock() prefix = utils.REVERSE_DESTINATION_PREFIX + prefix if !skipCache { if x, ok := cache2go.Get(prefix); ok { if x != nil { return x.([]string), nil } return nil, utils.ErrNotFound } } if idMap, ok := ms.dict.smembers(prefix, ms.ms); ok { ids = idMap.Slice() } else { cache2go.Set(prefix, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(prefix, ids, cacheCommit(transactionID), transactionID) return }
func (ms *MapStorage) GetActionPlan(key string, skipCache bool, transactionID string) (ats *ActionPlan, err error) { ms.mu.RLock() defer ms.mu.RUnlock() key = utils.ACTION_PLAN_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*ActionPlan), nil } return nil, utils.ErrNotFound } } if values, ok := ms.dict[key]; ok { err = ms.ms.Unmarshal(values, &ats) } else { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, ats, cacheCommit(transactionID), transactionID) return }
func (rs *RedisStorage) GetLCR(key string, skipCache bool, transactionID string) (lcr *LCR, err error) { key = utils.LCR_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*LCR), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); err == nil { err = rs.ms.Unmarshal(values, &lcr) } else { cache2go.Set(key, nil, cacheCommit(transactionID), transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, lcr, cacheCommit(transactionID), transactionID) return }
func (ms *MapStorage) GetDerivedChargers(key string, skipCache bool, transactionID string) (dcs *utils.DerivedChargers, err error) { ms.mu.RLock() defer ms.mu.RUnlock() cCommit := cacheCommit(transactionID) key = utils.DERIVEDCHARGERS_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*utils.DerivedChargers), nil } return nil, utils.ErrNotFound } } if values, ok := ms.dict[key]; ok { err = ms.ms.Unmarshal(values, &dcs) } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, dcs, cCommit, transactionID) return }
func (ms *MapStorage) GetLCR(key string, skipCache bool, transactionID string) (lcr *LCR, err error) { ms.mu.RLock() defer ms.mu.RUnlock() key = utils.LCR_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*LCR), nil } return nil, utils.ErrNotFound } } cCommit := cacheCommit(transactionID) if values, ok := ms.dict[key]; ok { err = ms.ms.Unmarshal(values, &lcr) } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, lcr, cCommit, transactionID) return }
func (ms *MapStorage) GetRatingProfile(key string, skipCache bool, transactionID string) (rpf *RatingProfile, err error) { ms.mu.RLock() defer ms.mu.RUnlock() key = utils.RATING_PROFILE_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*RatingProfile), nil } return nil, utils.ErrNotFound } } cCommit := cacheCommit(transactionID) if values, ok := ms.dict[key]; ok { rpf = new(RatingProfile) err = ms.ms.Unmarshal(values, rpf) } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, rpf, cCommit, transactionID) return }
func (ms *MapStorage) GetReverseAlias(reverseID string, skipCache bool, transactionID string) (ids []string, err error) { ms.mu.Lock() defer ms.mu.Unlock() key := utils.REVERSE_ALIASES_PREFIX + reverseID if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.([]string), nil } return nil, utils.ErrNotFound } } var values []string cCommit := cacheCommit(transactionID) if idMap, ok := ms.dict.smembers(key, ms.ms); len(idMap) > 0 && ok { values = idMap.Slice() } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } cache2go.Set(key, values, cCommit, transactionID) return }
func (rs *RedisStorage) SetRatingPlan(rp *RatingPlan, transactionID string) (err error) { result, err := rs.ms.Marshal(rp) var b bytes.Buffer w := zlib.NewWriter(&b) w.Write(result) w.Close() err = rs.db.Cmd("SET", utils.RATING_PLAN_PREFIX+rp.Id, b.Bytes()).Err if err == nil && historyScribe != nil { response := 0 go historyScribe.Call("HistoryV1.Record", rp.GetHistoryRecord(), &response) } cache2go.Set(utils.RATING_PLAN_PREFIX+rp.Id, rp, cacheCommit(transactionID), transactionID) return }
func (ms *MapStorage) GetSharedGroup(key string, skipCache bool, transactionID string) (sg *SharedGroup, err error) { ms.mu.RLock() defer ms.mu.RUnlock() key = utils.SHARED_GROUP_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(*SharedGroup), nil } return nil, utils.ErrNotFound } } cCommit := cacheCommit(transactionID) if values, ok := ms.dict[key]; ok { err = ms.ms.Unmarshal(values, &sg) if err == nil { cache2go.Set(key, sg, cCommit, transactionID) } } else { cache2go.Set(key, nil, cCommit, transactionID) return nil, utils.ErrNotFound } return }
func (rs *RedisStorage) GetReverseDestination(prefix string, skipCache bool, transactionID string) (ids []string, err error) { prefix = utils.REVERSE_DESTINATION_PREFIX + prefix if !skipCache { if x, ok := cache2go.Get(prefix); ok { if x != nil { return x.([]string), nil } return nil, utils.ErrNotFound } } if ids, err = rs.db.Cmd("SMEMBERS", prefix).List(); len(ids) > 0 && err == nil { cache2go.Set(prefix, ids, cacheCommit(transactionID), transactionID) return ids, nil } return nil, utils.ErrNotFound }
func (rs *RedisStorage) GetActionTriggers(key string, skipCache bool, transactionID string) (atrs ActionTriggers, err error) { key = utils.ACTION_TRIGGER_PREFIX + key if !skipCache { if x, ok := cache2go.Get(key); ok { if x != nil { return x.(ActionTriggers), nil } return nil, utils.ErrNotFound } } var values []byte if values, err = rs.db.Cmd("GET", key).Bytes(); err == nil { err = rs.ms.Unmarshal(values, &atrs) } cache2go.Set(key, atrs, cacheCommit(transactionID), transactionID) return }