diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go index 0f30f475dfee688d9e86fcfd3ff07076fd521fe6..4fe9af32e1dbcddd0a5fe2767b6415858404522d 100644 --- a/controller/nucleus/databaseDeviceStore.go +++ b/controller/nucleus/databaseDeviceStore.go @@ -131,7 +131,7 @@ func (s *DatabaseDeviceStore) Add(deviceToAdd device.Device) error { InsertOne(ctx, deviceToAdd) if err != nil { log.Printf("Could not create Device: %v", err) - return errors.ErrCouldNotCreate{StoreName: pndStoreName} + return errors.ErrCouldNotCreate{Identifier: deviceToAdd.ID(), Type: deviceToAdd, Err: err} } return nil @@ -162,7 +162,7 @@ func (s *DatabaseDeviceStore) Update(deviceToUpdate device.Device) error { if err != nil { log.Printf("Could not update Device: %v", err) - return errors.ErrCouldNotUpdate{StoreName: pndStoreName} + return errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err} } return nil @@ -178,7 +178,7 @@ func (s *DatabaseDeviceStore) Delete(deviceToDelete device.Device) error { collection := db.Collection(s.storeName) _, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: deviceToDelete.ID().String()}}) if err != nil { - return err + return errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err} } return nil diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go index 66b330290f4f974545649ee1709b9871bd997209..62d9b29e5022a86aa6c69ffc2464394c82948531 100644 --- a/controller/nucleus/databasePndStore.go +++ b/controller/nucleus/databasePndStore.go @@ -114,16 +114,16 @@ func (s *DatabasePndStore) GetAll() ([]networkdomain.NetworkDomain, error) { } // Add adds a pnd to the pnd store. -func (s *DatabasePndStore) Add(pnd networkdomain.NetworkDomain) error { +func (s *DatabasePndStore) Add(pndToAdd networkdomain.NetworkDomain) error { client, ctx, cancel := database.GetMongoConnection() defer cancel() defer client.Disconnect(ctx) _, err := client.Database(database.DatabaseName). Collection(s.pndStoreName). - InsertOne(ctx, pnd) + InsertOne(ctx, pndToAdd) if err != nil { - return errors.ErrCouldNotCreate{StoreName: pndStoreName} + return errors.ErrCouldNotCreate{Identifier: pndToAdd.ID(), Type: pndToAdd, Err: err} } return nil @@ -131,16 +131,16 @@ func (s *DatabasePndStore) Add(pnd networkdomain.NetworkDomain) error { // Delete deletes a pnd. // It also deletes all assosicated devices and sbis. -func (s *DatabasePndStore) Delete(pnd networkdomain.NetworkDomain) error { +func (s *DatabasePndStore) Delete(pndToDelete networkdomain.NetworkDomain) error { client, ctx, cancel := database.GetMongoConnection() defer cancel() defer client.Disconnect(ctx) db := client.Database(database.DatabaseName) collection := db.Collection(s.pndStoreName) - _, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: pnd.ID().String()}}) + _, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: pndToDelete.ID().String()}}) if err != nil { - return err + return errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err} } // TODO: Delete all assosicated devices + SBIs diff --git a/controller/nucleus/databaseSbiStore.go b/controller/nucleus/databaseSbiStore.go index 446d1847beb46b2c12feb3951dde2b88f1cddffa..b472b834e26d824c49e190bbcc7b564a2019d78a 100644 --- a/controller/nucleus/databaseSbiStore.go +++ b/controller/nucleus/databaseSbiStore.go @@ -18,36 +18,36 @@ type DatabaseSbiStore struct { } // Add adds a SBI. -func (s *DatabaseSbiStore) Add(item southbound.SouthboundInterface) error { +func (s *DatabaseSbiStore) Add(sbiToAdd southbound.SouthboundInterface) error { client, ctx, cancel := database.GetMongoConnection() defer cancel() defer client.Disconnect(ctx) _, err := client.Database(database.DatabaseName). Collection(s.sbiStoreName). - InsertOne(ctx, item) + InsertOne(ctx, sbiToAdd) if err != nil { if mongo.IsDuplicateKeyError(err) { return nil } - return errors.ErrCouldNotCreate{StoreName: sbiStoreName} + return errors.ErrCouldNotCreate{Identifier: sbiToAdd.ID(), Type: sbiToAdd, Err: err} } return nil } // Delete deletes an SBI. -func (s *DatabaseSbiStore) Delete(item southbound.SouthboundInterface) error { +func (s *DatabaseSbiStore) Delete(sbiToDelete southbound.SouthboundInterface) error { client, ctx, cancel := database.GetMongoConnection() defer cancel() defer client.Disconnect(ctx) _, err := client.Database(database.DatabaseName). Collection(s.sbiStoreName). - DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: item.ID().String()}}) + DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: sbiToDelete.ID().String()}}) if err != nil { - return errors.ErrCouldNotDelete{StoreName: sbiStoreName} + return errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err} } return nil diff --git a/controller/nucleus/deviceFilesystemStore.go b/controller/nucleus/deviceFilesystemStore.go index 76f50dd2eca4fe210c96cf23cd95f76c1394fadb..503cef11497ffacb25fd78bd6a38bbbcbd678bf6 100644 --- a/controller/nucleus/deviceFilesystemStore.go +++ b/controller/nucleus/deviceFilesystemStore.go @@ -142,7 +142,7 @@ func (s *FilesystemDeviceStore) Update(deviceToUpdate device.Device) error { } } - return &errors.ErrCouldNotFind{ID: deviceToUpdate.ID().String(), Name: deviceToUpdate.Name()} + return &errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err} } // Delete deletes a device from the device store. @@ -170,5 +170,5 @@ func (s *FilesystemDeviceStore) Delete(deviceToDelete device.Device) error { } } - return &errors.ErrCouldNotFind{ID: deviceToDelete.ID, Name: deviceToDelete.Name()} + return &errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err} } diff --git a/controller/nucleus/errors/errors.go b/controller/nucleus/errors/errors.go index 863f09548083ea2200e77909214298104975192e..db262595f4543e6c17108dc3953760a0b1b37d16 100644 --- a/controller/nucleus/errors/errors.go +++ b/controller/nucleus/errors/errors.go @@ -174,11 +174,13 @@ func (e ErrCouldNotMarshall) Error() string { // ErrCouldNotUpdate implements the Error interface and is called if a // stored item can not be updated. type ErrCouldNotUpdate struct { - StoreName string + Identifier any + Type any + Err error } func (e ErrCouldNotUpdate) Error() string { - return fmt.Sprintf("could not update %s", e.StoreName) + return fmt.Sprintf("could not update Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err) } // ErrCouldNotFind implements the Error interface and is called if a @@ -195,21 +197,25 @@ func (e ErrCouldNotFind) Error() string { // ErrCouldNotCreate implements the Error interface and is called if a // stored item can not be found. type ErrCouldNotCreate struct { - StoreName string + Identifier any + Type any + Err error } func (e ErrCouldNotCreate) Error() string { - return fmt.Sprintf("could not create %s", e.StoreName) + return fmt.Sprintf("could not create Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err) } // ErrCouldNotDelete implements the Error interface and is called if a // stored item can not be deleted. type ErrCouldNotDelete struct { - StoreName string + Identifier any + Type any + Err error } func (e ErrCouldNotDelete) Error() string { - return fmt.Sprintf("could not delete %s", e.StoreName) + return fmt.Sprintf("could not delete Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err) } // ErrNoNewChanges implements the Error interface and is called if a the diff --git a/controller/nucleus/memorySbiStore.go b/controller/nucleus/memorySbiStore.go index d1f69e12a7e1cd6a58405484aa59d8f531d38922..82a27673032322b2e2c86c13bfed2171164a2ed7 100644 --- a/controller/nucleus/memorySbiStore.go +++ b/controller/nucleus/memorySbiStore.go @@ -85,7 +85,7 @@ func (t *MemorySbiStore) Get(query store.Query) (southbound.LoadedSbi, error) { // Second search for name id, ok := t.nameLookupTable[query.Name] if !ok { - return item, errors.ErrCouldNotDelete{StoreName: sbiStoreName} + return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name} } item, ok := t.Store[id] diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go index 81d243b7b170dff327e2e93581a6838532cff322..867d654395359fb7d58a8f3f6c901e93d5cc2524 100644 --- a/controller/nucleus/pndFilesystemStore.go +++ b/controller/nucleus/pndFilesystemStore.go @@ -87,7 +87,7 @@ func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.NetworkDoma } // Add a pnd to the store. -func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error { +func (t *FilesystemPndStore) Add(pndToAdd networkdomain.NetworkDomain) error { t.fileMutex.Lock() defer t.fileMutex.Unlock() @@ -96,7 +96,7 @@ func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error { return err } - pnds = append(pnds, item) + pnds = append(pnds, pndToAdd) err = t.writeAllPndsToFile(pnds) if err != nil { @@ -107,7 +107,7 @@ func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error { } // Delete deletes a pnd from the store. -func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error { +func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) error { t.fileMutex.Lock() defer t.fileMutex.Unlock() @@ -117,7 +117,7 @@ func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error { } for i, pnd := range pnds { - if pnd.ID() == item.ID() { + if pnd.ID() == pndToDelete.ID() { //remove item from slice pnds[i] = pnds[len(pnds)-1] pnds = pnds[:len(pnds)-1] @@ -131,7 +131,7 @@ func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error { } } - return &errors.ErrCouldNotFind{ID: item.ID, Name: item.GetName()} + return &errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err} } // Get provides a the query interface to find a stored pnd. diff --git a/controller/nucleus/sbiFilesystemStore.go b/controller/nucleus/sbiFilesystemStore.go index 9859549f61a967489d5a48794979ee7a3c1463b7..f4558ce6f801609fe885decce44a4fd340c3b3d5 100644 --- a/controller/nucleus/sbiFilesystemStore.go +++ b/controller/nucleus/sbiFilesystemStore.go @@ -110,7 +110,7 @@ func (s *FilesystemSbiStore) Delete(sbiToDelete southbound.SouthboundInterface) return nil } } - return &errors.ErrCouldNotFind{ID: sbiToDelete.ID, Name: sbiToDelete.Name()} + return &errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err} } // Get takes a SouthboundInterface's UUID or name and returns the SouthboundInterface. If the requested diff --git a/controller/rbac/databaseRoleStore.go b/controller/rbac/databaseRoleStore.go index 93217638a1003faa5370f1e0db3be05dd16e8d95..78044d11e07dd637493fa304cb15537705a0da9b 100644 --- a/controller/rbac/databaseRoleStore.go +++ b/controller/rbac/databaseRoleStore.go @@ -32,7 +32,7 @@ func (s *DatabaseRoleStore) Add(roleToAdd rbac.Role) error { return nil } - return errors.ErrCouldNotCreate{StoreName: s.roleStoreName} + return errors.ErrCouldNotCreate{Identifier: roleToAdd.ID(), Type: roleToAdd, Err: err} } return nil @@ -48,7 +48,7 @@ func (s *DatabaseRoleStore) Delete(roleToDelete rbac.Role) error { Collection(s.roleStoreName). DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: roleToDelete.ID().String()}}) if err != nil { - return errors.ErrCouldNotFind{ID: roleToDelete.ID(), Name: roleToDelete.Name()} + return errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err} } return nil @@ -172,7 +172,7 @@ func (s *DatabaseRoleStore) Update(roleToUpdate rbac.Role) error { if err != nil { log.Printf("Could not update Role: %v", err) - return errors.ErrCouldNotUpdate{StoreName: s.roleStoreName} + return errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err} } return nil diff --git a/controller/rbac/databaseUserStore.go b/controller/rbac/databaseUserStore.go index 531263334e7965455cc176e9483a254185a77741..0d2cd069343661bdcc640531128f0c8b96f81779 100644 --- a/controller/rbac/databaseUserStore.go +++ b/controller/rbac/databaseUserStore.go @@ -32,7 +32,7 @@ func (s *DatabaseUserStore) Add(userToAdd rbac.User) error { return nil } - return errors.ErrCouldNotCreate{StoreName: s.userStoreName} + return errors.ErrCouldNotCreate{Identifier: userToAdd.ID(), Type: userToAdd, Err: err} } return nil @@ -48,7 +48,7 @@ func (s *DatabaseUserStore) Delete(userToDelete rbac.User) error { Collection(s.userStoreName). DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: userToDelete.ID().String()}}) if err != nil { - return errors.ErrCouldNotFind{ID: userToDelete.ID(), Name: userToDelete.Name()} + return errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err} } return nil @@ -172,7 +172,7 @@ func (s *DatabaseUserStore) Update(userToUpdate rbac.User) error { if err != nil { log.Printf("Could not update User: %v", err) - return errors.ErrCouldNotUpdate{StoreName: s.userStoreName} + return errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err} } return nil diff --git a/controller/rbac/roleFileSystemStore.go b/controller/rbac/roleFileSystemStore.go index 3c4fd0c26026b49c9078b4034e738a0fe9056b53..bcf381396f3f48e17d53a32845286fce784cf375 100644 --- a/controller/rbac/roleFileSystemStore.go +++ b/controller/rbac/roleFileSystemStore.go @@ -40,8 +40,8 @@ func (s *FileSystemRoleStore) readAllRolesFromFile() ([]rbac.LoadedRole, error) return loadedRoles, nil } -func (s *FileSystemRoleStore) writeAllRolesToFile(Roles []rbac.LoadedRole) error { - serializedData, err := json.Marshal(Roles) +func (s *FileSystemRoleStore) writeAllRolesToFile(roles []rbac.LoadedRole) error { + serializedData, err := json.Marshal(roles) if err != nil { return err } @@ -55,7 +55,7 @@ func (s *FileSystemRoleStore) writeAllRolesToFile(Roles []rbac.LoadedRole) error } // Add adds a Role to the Role store -func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error { +func (s *FileSystemRoleStore) Add(roleToAdd rbac.Role) error { s.fileMutex.Lock() defer s.fileMutex.Unlock() @@ -65,7 +65,7 @@ func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error { } var loadedRole rbac.LoadedRole - loadedRole, err = store.TransformObjectToLoadedObject[rbac.Role, rbac.LoadedRole](RoleToAdd) + loadedRole, err = store.TransformObjectToLoadedObject[rbac.Role, rbac.LoadedRole](roleToAdd) if err != nil { return err } @@ -81,7 +81,7 @@ func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error { } //Delete deletes a Role from the Role store -func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error { +func (s *FileSystemRoleStore) Delete(roleToDelete rbac.Role) error { s.fileMutex.Lock() defer s.fileMutex.Unlock() @@ -91,7 +91,7 @@ func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error { } for i, role := range roles { - if role.ID == RoleToDelete.ID().String() { + if role.ID == roleToDelete.ID().String() { //remove item from slice roles[i] = roles[len(roles)-1] roles = roles[:len(roles)-1] @@ -105,7 +105,7 @@ func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error { } } - return &errors.ErrCouldNotFind{ID: RoleToDelete.ID(), Name: RoleToDelete.Name()} + return &errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err} } //Get takes a Roles ID and return the Role if found @@ -162,5 +162,5 @@ func (s *FileSystemRoleStore) Update(roleToUpdate rbac.Role) error { } } - return &errors.ErrCouldNotFind{ID: roleToUpdate.ID(), Name: roleToUpdate.Name()} + return &errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err} } diff --git a/controller/rbac/userFileSystemStore.go b/controller/rbac/userFileSystemStore.go index f0547a6b2a1ec0768da7927b1248102834ca96ee..146ab0c5f6d717e9b0e860571b33b3ddcf6eb732 100644 --- a/controller/rbac/userFileSystemStore.go +++ b/controller/rbac/userFileSystemStore.go @@ -105,7 +105,7 @@ func (s *FileSystemUserStore) Delete(userToDelete rbac.User) error { } } - return &errors.ErrCouldNotFind{ID: userToDelete.ID(), Name: userToDelete.Name()} + return &errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err} } //Get takes a Users ID and return the User if found @@ -162,5 +162,5 @@ func (s *FileSystemUserStore) Update(userToUpdate rbac.User) error { } } - return &errors.ErrCouldNotFind{ID: userToUpdate.ID(), Name: userToUpdate.Name()} + return &errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err} }