From fa36c3843294722844aab12323fe93ad9b5904c4 Mon Sep 17 00:00:00 2001 From: Fabian Seidl <fabian.seidl@h-da.de> Date: Tue, 20 Dec 2022 15:46:49 +0000 Subject: [PATCH] added values to event, removed writing to storage on update --- controller/event/event.go | 18 ++++++++--------- controller/event/event_test.go | 20 +++++++++---------- controller/nucleus/networkElementService.go | 8 ++++---- controller/nucleus/networkElementWatcher.go | 22 +++++++++++++-------- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/controller/event/event.go b/controller/event/event.go index 8eb6cf8d5..df39d2b9a 100644 --- a/controller/event/event.go +++ b/controller/event/event.go @@ -4,10 +4,10 @@ import "github.com/google/uuid" // Event is a event that can be published via the event service as payload. type Event struct { - ID uuid.UUID `json:"id,omitempty"` - EntityID uuid.UUID `json:"entity_id,omitempty"` - Type string `json:"type,omitempty"` - Paths []string `json:"paths,omitempty"` + ID uuid.UUID `json:"id,omitempty"` + EntityID uuid.UUID `json:"entity_id,omitempty"` + Type string `json:"type,omitempty"` + PathsAndValuesMap map[string]string `json:"paths_and_values,omitempty"` } const ( @@ -49,11 +49,11 @@ func NewUpdateEvent(entityID uuid.UUID) Event { } // NewMneUpdateEvent creates a new update event for managed network elements. -func NewMneUpdateEvent(entityID uuid.UUID, paths []string) Event { +func NewMneUpdateEvent(entityID uuid.UUID, pathsAndValues map[string]string) Event { return Event{ - ID: uuid.New(), - EntityID: entityID, - Type: TypeUpdate, - Paths: paths, + ID: uuid.New(), + EntityID: entityID, + Type: TypeUpdate, + PathsAndValuesMap: pathsAndValues, } } diff --git a/controller/event/event_test.go b/controller/event/event_test.go index 96f4a32a8..9150bf0a2 100644 --- a/controller/event/event_test.go +++ b/controller/event/event_test.go @@ -123,8 +123,8 @@ func TestNewUpdateEvent(t *testing.T) { func TestNewMneUpdateEvent(t *testing.T) { type args struct { - entityID uuid.UUID - paths []string + entityID uuid.UUID + pathsAndValuesMap map[string]string } tests := []struct { name string @@ -134,20 +134,20 @@ func TestNewMneUpdateEvent(t *testing.T) { { name: "should create a new update event", args: args{ - entityID: getTestEntityUUID(), - paths: []string{"some/random/path"}, + entityID: getTestEntityUUID(), + pathsAndValuesMap: map[string]string{"some/random/path": "val"}, }, want: Event{ - ID: uuid.New(), - EntityID: getTestEntityUUID(), - Type: TypeUpdate, - Paths: []string{"some/random/path"}, + ID: uuid.New(), + EntityID: getTestEntityUUID(), + Type: TypeUpdate, + PathsAndValuesMap: map[string]string{"some/random/path": "val"}, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := NewMneUpdateEvent(tt.args.entityID, tt.args.paths) + got := NewMneUpdateEvent(tt.args.entityID, tt.args.pathsAndValuesMap) if !reflect.DeepEqual(got.EntityID, tt.want.EntityID) { t.Errorf("NewMneUpdateEvent().EntityID = %v, want %v", got, tt.want) @@ -157,7 +157,7 @@ func TestNewMneUpdateEvent(t *testing.T) { t.Errorf("NewMneUpdateEvent().Type = %v, want %v", got, tt.want) } - if !reflect.DeepEqual(got.Paths, tt.want.Paths) { + if !reflect.DeepEqual(got.PathsAndValuesMap, tt.want.PathsAndValuesMap) { t.Errorf("NewMneUpdateEvent().Type = %v, want %v", got, tt.want) } }) diff --git a/controller/nucleus/networkElementService.go b/controller/nucleus/networkElementService.go index b6c0979b3..a41cdc351 100644 --- a/controller/nucleus/networkElementService.go +++ b/controller/nucleus/networkElementService.go @@ -137,8 +137,8 @@ func (s *NetworkElementService) UpdateModel(networkElementToUpdate networkelemen return err } - // TODO (faseid): check if we want to add the paths here instead of empty string array! - pubEvent := event.NewMneUpdateEvent(networkElementToUpdate.ID(), []string{}) + // TODO (faseid): check if we want to add the paths here instead of empty map! + pubEvent := event.NewMneUpdateEvent(networkElementToUpdate.ID(), map[string]string{}) if err := s.eventService.PublishEvent(NetworkElementEventTopic, pubEvent); err != nil { go func() { s.eventService.Reconnect() @@ -160,8 +160,8 @@ func (s *NetworkElementService) Update(networkElementToUpdate networkelement.Net return err } - // TODO (faseid): check if we want to add the paths here instead of empty string array! - pubEvent := event.NewMneUpdateEvent(networkElementToUpdate.ID(), []string{}) + // TODO (faseid): check if we want to add the paths here instead of empty map! + pubEvent := event.NewMneUpdateEvent(networkElementToUpdate.ID(), map[string]string{}) if err := s.eventService.PublishEvent(NetworkElementEventTopic, pubEvent); err != nil { go func() { s.eventService.Reconnect() diff --git a/controller/nucleus/networkElementWatcher.go b/controller/nucleus/networkElementWatcher.go index 5cb76b0a8..af72cb625 100644 --- a/controller/nucleus/networkElementWatcher.go +++ b/controller/nucleus/networkElementWatcher.go @@ -3,6 +3,7 @@ package nucleus import ( "context" "fmt" + "strings" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/event" @@ -164,19 +165,24 @@ func (n *NetworkElementWatcher) handleSubscribeResponseUpdate(resp *gpb.Subscrib err = mne.Transport().ProcessControlPlaneSubscribeResponse(resp, mne.GetModel(), mne.SBI().Schema()) if err != nil { log.Error(err) - } // else { - // if err := pnd.UpdateNetworkElementAfterSubscribeResponse(mne); err != nil { - // log.Error(err) - // } - // } + } - paths := []string{} + pathsAndValues := make(map[string]string, 0) for _, update := range resp.Update.Update { - paths = append(paths, update.String()) + pathString := "" + + // go through elem to build full path + for _, elem := range update.Path.Elem { + // remove unwanted parts of path string example: "name:\"system\"" -> "system" + filteredElem := elem.String()[strings.Index(elem.String(), ":\"")+2 : len(elem.String())-1] + pathString += filteredElem + "/" + } + + pathsAndValues[pathString] = update.Val.GetStringVal() } - pubEvent := event.NewMneUpdateEvent(mne.ID(), paths) + pubEvent := event.NewMneUpdateEvent(mne.ID(), pathsAndValues) if err := n.eventService.PublishEvent(NetworkElementEventTopic, pubEvent); err != nil { go func() { n.eventService.Reconnect() -- GitLab