From c9ce2f6bc59ceeb8c75146acac6c91064491e951 Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 9 Jan 2019 05:36:49 -0500 Subject: [PATCH] Update tp filter to consider tenant --- apier/v1/tpfilters.go | 37 +++++++++++++--------------------- apier/v1/tpfilters_it_test.go | 22 +++++++++----------- engine/storage_csv.go | 2 +- engine/storage_interface.go | 2 +- engine/storage_map_stordb.go | 2 +- engine/storage_mongo_stordb.go | 5 ++++- engine/storage_sql.go | 5 ++++- engine/tp_reader.go | 2 +- engine/tpexporter.go | 2 +- engine/tpimporter_csv.go | 2 +- migrator/tp_filters.go | 2 +- migrator/tp_filters_it_test.go | 4 ++-- 12 files changed, 41 insertions(+), 46 deletions(-) diff --git a/apier/v1/tpfilters.go b/apier/v1/tpfilters.go index 3bb3b8793..595d08f99 100644 --- a/apier/v1/tpfilters.go +++ b/apier/v1/tpfilters.go @@ -23,28 +23,23 @@ import ( ) // Creates a new FilterProfile within a tariff plan -func (self *ApierV1) SetTPFilterProfile(attrs utils.TPFilterProfile, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { +func (self *ApierV1) SetTPFilterProfile(attrs *utils.TPFilterProfile, reply *string) error { + if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPFilters([]*utils.TPFilterProfile{&attrs}); err != nil { + if err := self.StorDb.SetTPFilters([]*utils.TPFilterProfile{attrs}); err != nil { return utils.NewErrServerError(err) } *reply = utils.OK return nil } -type AttrGetTPFilterProfile struct { - TPid string // Tariff plan id - ID string // Filter id -} - // Queries specific FilterProfile on tariff plan -func (self *ApierV1) GetTPFilterProfile(attr AttrGetTPFilterProfile, reply *utils.TPFilterProfile) error { - if missing := utils.MissingStructFields(&attr, []string{"TPid", "ID"}); len(missing) != 0 { //Params missing +func (self *ApierV1) GetTPFilterProfile(attr *utils.TPTntID, reply *utils.TPFilterProfile) error { + if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if filter, err := self.StorDb.GetTPFilters(attr.TPid, attr.ID); err != nil { + if filter, err := self.StorDb.GetTPFilters(attr.TPid, attr.Tenant, attr.ID); err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } @@ -61,11 +56,12 @@ type AttrGetTPFilterProfileIds struct { } // Queries FilterProfile identities on specific tariff plan. -func (self *ApierV1) GetTPFilterProfileIds(attrs AttrGetTPFilterProfileIds, reply *[]string) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing +func (self *ApierV1) GetTPFilterProfileIds(attrs *AttrGetTPFilterProfileIds, reply *[]string) error { + if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPFilters, utils.TPDistinctIds{"id"}, nil, &attrs.Paginator); err != nil { + if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPFilters, utils.TPDistinctIds{"id"}, + nil, &attrs.Paginator); err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } @@ -76,18 +72,13 @@ func (self *ApierV1) GetTPFilterProfileIds(attrs AttrGetTPFilterProfileIds, repl return nil } -type AttrRemTPFilterProfile struct { - TPid string // Tariff plan id - Tenant string - ID string // Filter id -} - // Removes specific FilterProfile on Tariff plan -func (self *ApierV1) RemTPFilterProfile(attrs AttrRemTPFilterProfile, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing +func (self *ApierV1) RemTPFilterProfile(attrs *utils.TPTntID, reply *string) error { + if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPFilters, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { + if err := self.StorDb.RemTpData(utils.TBLTPFilters, attrs.TPid, + map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) } else { *reply = utils.OK diff --git a/apier/v1/tpfilters_it_test.go b/apier/v1/tpfilters_it_test.go index 62072ab75..560d5eee7 100644 --- a/apier/v1/tpfilters_it_test.go +++ b/apier/v1/tpfilters_it_test.go @@ -89,12 +89,8 @@ func testTPFilterInitCfg(t *testing.T) { } tpFilterCfg.DataFolderPath = tpFilterDataDir // Share DataFolderPath through config towards StoreDb for Flush() config.SetCgrConfig(tpFilterCfg) - switch tpFilterConfigDIR { - case "tutmongo": // Mongo needs more time to reset db, need to investigate - tpFilterDelay = 2000 - default: - tpFilterDelay = 1000 - } + tpFilterDelay = 1000 + } // Wipe out the cdr database @@ -123,7 +119,8 @@ func testTPFilterRpcConn(t *testing.T) { func ttestTPFilterGetTPFilterBeforeSet(t *testing.T) { var reply *utils.TPFilterProfile if err := tpFilterRPC.Call("ApierV1.GetTPFilterProfile", - &AttrGetTPFilterProfile{TPid: "TP1", ID: "Filter"}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { + &utils.TPTntID{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, + &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } @@ -157,7 +154,7 @@ func testTPFilterSetTPFilter(t *testing.T) { func testTPFilterGetTPFilterAfterSet(t *testing.T) { var reply *utils.TPFilterProfile if err := tpFilterRPC.Call("ApierV1.GetTPFilterProfile", - &AttrGetTPFilterProfile{TPid: "TP1", ID: "Filter"}, &reply); err != nil { + &utils.TPTntID{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, &reply); err != nil { t.Error(err) } else if !reflect.DeepEqual(tpFilter, reply) { t.Errorf("Expecting : %+v, received: %+v", tpFilter, reply) @@ -199,17 +196,17 @@ func testTPFilterUpdateTPFilter(t *testing.T) { func testTPFilterGetTPFilterAfterUpdate(t *testing.T) { var reply *utils.TPFilterProfile if err := tpFilterRPC.Call("ApierV1.GetTPFilterProfile", - &AttrGetTPFilterProfile{TPid: "TP1", ID: "Filter"}, &reply); err != nil { + &utils.TPTntID{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, &reply); err != nil { t.Error(err) } else if !reflect.DeepEqual(tpFilter, reply) { - t.Errorf("Expecting : %+v, received: %+v", tpFilter, reply) + t.Errorf("Expecting : %+v, received: %+v", utils.ToJSON(tpFilter), utils.ToJSON(reply)) } } func testTPFilterRemTPFilter(t *testing.T) { var resp string if err := tpFilterRPC.Call("ApierV1.RemTPFilterProfile", - &AttrRemTPFilterProfile{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, &resp); err != nil { + &utils.TPTntID{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, &resp); err != nil { t.Error(err) } else if resp != utils.OK { t.Error("Unexpected reply returned", resp) @@ -219,7 +216,8 @@ func testTPFilterRemTPFilter(t *testing.T) { func testTPFilterGetTPFilterAfterRemove(t *testing.T) { var reply *utils.TPFilterProfile if err := tpFilterRPC.Call("ApierV1.GetTPFilterProfile", - &AttrGetTPFilterProfile{TPid: "TP1", ID: "Filter"}, &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { + &utils.TPTntID{TPid: "TP1", Tenant: "cgrates.org", ID: "Filter"}, + &reply); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } diff --git a/engine/storage_csv.go b/engine/storage_csv.go index 39603d235..289890572 100644 --- a/engine/storage_csv.go +++ b/engine/storage_csv.go @@ -621,7 +621,7 @@ func (csvs *CSVStorage) GetTPThresholds(tpid, tenant, id string) ([]*utils.TPThr return tpThreshold.AsTPThreshold(), nil } -func (csvs *CSVStorage) GetTPFilters(tpid, id string) ([]*utils.TPFilterProfile, error) { +func (csvs *CSVStorage) GetTPFilters(tpid, tenant, id string) ([]*utils.TPFilterProfile, error) { csvReader, fp, err := csvs.readerFunc(csvs.filterFn, csvs.sep, getColumnCount(TpFilter{})) if err != nil { //log.Print("Could not load filter file: ", err) diff --git a/engine/storage_interface.go b/engine/storage_interface.go index 91978348e..3b485b069 100644 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -185,7 +185,7 @@ type LoadReader interface { GetTPResources(string, string, string) ([]*utils.TPResource, error) GetTPStats(string, string, string) ([]*utils.TPStats, error) GetTPThresholds(string, string, string) ([]*utils.TPThreshold, error) - GetTPFilters(string, string) ([]*utils.TPFilterProfile, error) + GetTPFilters(string, string, string) ([]*utils.TPFilterProfile, error) GetTPSuppliers(string, string) ([]*utils.TPSupplierProfile, error) GetTPAttributes(string, string, string) ([]*utils.TPAttributeProfile, error) GetTPChargers(string, string) ([]*utils.TPChargerProfile, error) diff --git a/engine/storage_map_stordb.go b/engine/storage_map_stordb.go index ceb0fc7bf..774babe80 100755 --- a/engine/storage_map_stordb.go +++ b/engine/storage_map_stordb.go @@ -82,7 +82,7 @@ func (ms *MapStorage) GetTPStats(tpid, tenant, id string) (stats []*utils.TPStat func (ms *MapStorage) GetTPThresholds(tpid, tenant, id string) (ths []*utils.TPThreshold, err error) { return nil, utils.ErrNotImplemented } -func (ms *MapStorage) GetTPFilters(tpid, id string) (fltrs []*utils.TPFilterProfile, err error) { +func (ms *MapStorage) GetTPFilters(tpid, tenant, id string) (fltrs []*utils.TPFilterProfile, err error) { return nil, utils.ErrNotImplemented } func (ms *MapStorage) GetTPSuppliers(tpid, id string) (supps []*utils.TPSupplierProfile, err error) { diff --git a/engine/storage_mongo_stordb.go b/engine/storage_mongo_stordb.go index 9e717b871..a9fb82cae 100644 --- a/engine/storage_mongo_stordb.go +++ b/engine/storage_mongo_stordb.go @@ -1425,11 +1425,14 @@ func (ms *MongoStorage) SetTPThresholds(tpTHs []*utils.TPThreshold) (err error) }) } -func (ms *MongoStorage) GetTPFilters(tpid, id string) ([]*utils.TPFilterProfile, error) { +func (ms *MongoStorage) GetTPFilters(tpid, tenant, id string) ([]*utils.TPFilterProfile, error) { filter := bson.M{"tpid": tpid} if id != "" { filter["id"] = id } + if tenant != "" { + filter["tenant"] = tenant + } results := []*utils.TPFilterProfile{} err := ms.client.UseSession(ms.ctx, func(sctx mongo.SessionContext) (err error) { cur, err := ms.getCol(utils.TBLTPFilters).Find(sctx, filter) diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 439508fd0..9184beeb1 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -1531,12 +1531,15 @@ func (self *SQLStorage) GetTPThresholds(tpid, tenant, id string) ([]*utils.TPThr return aths, nil } -func (self *SQLStorage) GetTPFilters(tpid, id string) ([]*utils.TPFilterProfile, error) { +func (self *SQLStorage) GetTPFilters(tpid, tenant, id string) ([]*utils.TPFilterProfile, error) { var ths TpFilterS q := self.db.Where("tpid = ?", tpid) if len(id) != 0 { q = q.Where("id = ?", id) } + if len(tenant) != 0 { + q = q.Where("tenant = ?", tenant) + } if err := q.Find(&ths).Error; err != nil { return nil, err } diff --git a/engine/tp_reader.go b/engine/tp_reader.go index 01b13ddd8..4d4492030 100644 --- a/engine/tp_reader.go +++ b/engine/tp_reader.go @@ -1362,7 +1362,7 @@ func (tpr *TpReader) LoadThresholds() error { } func (tpr *TpReader) LoadFiltersFiltered(tag string) error { - tps, err := tpr.lr.GetTPFilters(tpr.tpid, tag) + tps, err := tpr.lr.GetTPFilters(tpr.tpid, "", tag) if err != nil { return err } diff --git a/engine/tpexporter.go b/engine/tpexporter.go index 8df8e1765..84a8914ac 100644 --- a/engine/tpexporter.go +++ b/engine/tpexporter.go @@ -251,7 +251,7 @@ func (self *TPExporter) Run() error { } } - storDataFilters, err := self.storDb.GetTPFilters(self.tpID, "") + storDataFilters, err := self.storDb.GetTPFilters(self.tpID, "", "") if err != nil && err.Error() != utils.ErrNotFound.Error() { return err } diff --git a/engine/tpimporter_csv.go b/engine/tpimporter_csv.go index 310c1d3d0..62e99d4d8 100644 --- a/engine/tpimporter_csv.go +++ b/engine/tpimporter_csv.go @@ -363,7 +363,7 @@ func (self *TPCSVImporter) importFilters(fn string) error { if self.Verbose { log.Printf("Processing file: <%s> ", fn) } - sts, err := self.csvr.GetTPFilters(self.TPid, "") + sts, err := self.csvr.GetTPFilters(self.TPid, "", "") if err != nil { return err } diff --git a/migrator/tp_filters.go b/migrator/tp_filters.go index 5242c9cc5..9a6c8d807 100644 --- a/migrator/tp_filters.go +++ b/migrator/tp_filters.go @@ -37,7 +37,7 @@ func (m *Migrator) migrateCurrentTPfilters() (err error) { return err } for _, id := range ids { - fltrs, err := m.storDBIn.StorDB().GetTPFilters(tpid, id) + fltrs, err := m.storDBIn.StorDB().GetTPFilters(tpid, "", id) if err != nil { return err } diff --git a/migrator/tp_filters_it_test.go b/migrator/tp_filters_it_test.go index c6c1124fe..c112ebc70 100755 --- a/migrator/tp_filters_it_test.go +++ b/migrator/tp_filters_it_test.go @@ -144,7 +144,7 @@ func testTpFltrITMove(t *testing.T) { func testTpFltrITCheckData(t *testing.T) { result, err := tpFltrMigrator.storDBOut.StorDB().GetTPFilters( - tpFilters[0].TPid, tpFilters[0].ID) + tpFilters[0].TPid, "", tpFilters[0].ID) if err != nil { t.Error("Error when getting TpFilter ", err.Error()) } @@ -152,7 +152,7 @@ func testTpFltrITCheckData(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", tpFilters[0], result[0]) } result, err = tpFltrMigrator.storDBIn.StorDB().GetTPFilters( - tpFilters[0].TPid, tpFilters[0].ID) + tpFilters[0].TPid, "", tpFilters[0].ID) if err != utils.ErrNotFound { t.Error(err) }