From f16fc3d171215af7a3e26199bf520421d1739968 Mon Sep 17 00:00:00 2001 From: bruce Date: Wed, 6 Sep 2023 18:04:49 +0800 Subject: [PATCH 1/2] feat: Allow NameFieldPath configurable Allow NameFieldPath configurable by checking whether the NameFieldPathEscape enable. Signed-off-by: bruce --- internal/common/utils.go | 4 +++- internal/controller/messaging/callback.go | 9 +++++---- internal/controller/messaging/command.go | 8 +++++--- internal/controller/messaging/validation.go | 9 ++++++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/internal/common/utils.go b/internal/common/utils.go index 0b4754fd..ebde4252 100644 --- a/internal/common/utils.go +++ b/internal/common/utils.go @@ -71,7 +71,9 @@ func SendEvent(event *dtos.Event, correlationID string, dic *di.Container) { ctx = context.WithValue(ctx, common.ContentType, encoding) // nolint: staticcheck envelope := types.NewMessageEnvelope(bytes, ctx) serviceName := container.DeviceServiceFrom(dic.Get).Name - publishTopic := common.BuildTopic(configuration.MessageBus.GetBaseTopicPrefix(), common.EventsPublishTopic, DeviceServiceEventPrefix, common.URLEncode(serviceName), common.URLEncode(event.ProfileName), common.URLEncode(event.DeviceName), common.URLEncode(event.SourceName)) + publishTopic := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(configuration.MessageBus.GetBaseTopicPrefix()).SetPath(common.EventsPublishTopic).SetPath(DeviceServiceEventPrefix). + SetNameFieldPath(serviceName).SetNameFieldPath(event.ProfileName).SetNameFieldPath(event.DeviceName).SetNameFieldPath(event.SourceName).BuildPath() err = mc.Publish(envelope, publishTopic) if err != nil { lc.Errorf("Failed to publish event to MessageBus: %s", err) diff --git a/internal/controller/messaging/callback.go b/internal/controller/messaging/callback.go index fd0b6722..4ce686e5 100644 --- a/internal/controller/messaging/callback.go +++ b/internal/controller/messaging/callback.go @@ -25,10 +25,11 @@ import ( func MetadataSystemEventsCallback(ctx context.Context, serviceBaseName string, dic *di.Container) errors.EdgeX { lc := bootstrapContainer.LoggingClientFrom(dic.Get) + configuration := container.ConfigurationFrom(dic.Get) messageBusInfo := container.ConfigurationFrom(dic.Get).MessageBus deviceService := container.DeviceServiceFrom(dic.Get) - metadataSystemEventTopic := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), - common.MetadataSystemEventSubscribeTopic, common.URLEncode(deviceService.Name), "#") + metadataSystemEventTopic := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetPath(common.MetadataSystemEventSubscribeTopic).SetNameFieldPath(deviceService.Name).SetPath("#").BuildPath() lc.Infof("Subscribing to System Events on topic: %s", metadataSystemEventTopic) @@ -48,8 +49,8 @@ func MetadataSystemEventsCallback(ctx context.Context, serviceBaseName string, d if serviceBaseName != deviceService.Name { // Must replace the first wildcard with the type for Provision Watchers baseSubscribeTopic := strings.Replace(common.MetadataSystemEventSubscribeTopic, "+", common.ProvisionWatcherSystemEventType, 1) - provisionWatcherSystemEventSubscribeTopic := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), - baseSubscribeTopic, common.URLEncode(serviceBaseName), "#") + provisionWatcherSystemEventSubscribeTopic := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetPath(baseSubscribeTopic).SetNameFieldPath(serviceBaseName).SetPath("#").BuildPath() topics = append(topics, types.TopicChannel{ Topic: provisionWatcherSystemEventSubscribeTopic, diff --git a/internal/controller/messaging/command.go b/internal/controller/messaging/command.go index f677b863..6cd8fdfb 100644 --- a/internal/controller/messaging/command.go +++ b/internal/controller/messaging/command.go @@ -27,14 +27,16 @@ import ( func SubscribeCommands(ctx context.Context, dic *di.Container) errors.EdgeX { lc := bootstrapContainer.LoggingClientFrom(dic.Get) + configuration := container.ConfigurationFrom(dic.Get) messageBusInfo := container.ConfigurationFrom(dic.Get).MessageBus deviceService := container.DeviceServiceFrom(dic.Get) - escapedDeviceServiceName := common.URLEncode(deviceService.Name) - requestSubscribeTopic := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), common.CommandRequestSubscribeTopic, escapedDeviceServiceName, "#") + requestSubscribeTopic := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetPath(common.CommandRequestSubscribeTopic).SetNameFieldPath(deviceService.Name).SetPath("#").BuildPath() lc.Infof("Subscribing to command requests on topic: %s", requestSubscribeTopic) - responsePublishTopicPrefix := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), common.ResponseTopic, escapedDeviceServiceName) + responsePublishTopicPrefix := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetPath(common.ResponseTopic).SetNameFieldPath(deviceService.Name).BuildPath() lc.Infof("Responses to command requests will be published on topic: %s/", responsePublishTopicPrefix) messages := make(chan types.MessageEnvelope, 1) diff --git a/internal/controller/messaging/validation.go b/internal/controller/messaging/validation.go index ff5a3a21..70ed70cb 100644 --- a/internal/controller/messaging/validation.go +++ b/internal/controller/messaging/validation.go @@ -22,13 +22,16 @@ import ( func SubscribeDeviceValidation(ctx context.Context, dic *di.Container) errors.EdgeX { lc := bootstrapContainer.LoggingClientFrom(dic.Get) + configuration := container.ConfigurationFrom(dic.Get) messageBusInfo := container.ConfigurationFrom(dic.Get).MessageBus - serviceName := common.URLEncode(container.DeviceServiceFrom(dic.Get).Name) + serviceName := container.DeviceServiceFrom(dic.Get).Name - requestTopic := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), serviceName, common.ValidateDeviceSubscribeTopic) + requestTopic := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetNameFieldPath(serviceName).SetPath(common.ValidateDeviceSubscribeTopic).BuildPath() lc.Infof("Subscribing to device validation requests on topic: %s", requestTopic) - responseTopicPrefix := common.BuildTopic(messageBusInfo.GetBaseTopicPrefix(), common.ResponseTopic, serviceName) + responseTopicPrefix := common.NewPathBuilder().EnableNameFieldEscape(configuration.Service.EnableNameFieldEscape). + SetPath(messageBusInfo.GetBaseTopicPrefix()).SetPath(common.ResponseTopic).SetNameFieldPath(serviceName).BuildPath() lc.Infof("Responses to device validation requests will be published on topic: %s/", responseTopicPrefix) messages := make(chan types.MessageEnvelope, 1) From 37d7c823aa3b29a4d3ca8203bdb728b7d1839f4c Mon Sep 17 00:00:00 2001 From: bruce Date: Wed, 13 Sep 2023 15:07:29 +0800 Subject: [PATCH 2/2] build: Upgrade dependency libs - Upgrade go-mod-bootstrap to v3.1.0-dev.34 - Upgrade go-mod-core-contracts to v3.1.0-dev.11 Signed-off-by: bruce --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index ae8791af..95c967e7 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.21 require ( github.com/OneOfOne/xxhash v1.2.8 - github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.32 - github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.9 + github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.34 + github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.11 github.com/edgexfoundry/go-mod-messaging/v3 v3.1.0-dev.20 github.com/google/uuid v1.3.1 github.com/hashicorp/go-multierror v1.1.1 diff --git a/go.sum b/go.sum index 68c5dfbe..5e2fcecc 100644 --- a/go.sum +++ b/go.sum @@ -28,12 +28,12 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/eclipse/paho.mqtt.golang v1.4.3 h1:2kwcUGn8seMUfWndX0hGbvH8r7crgcJguQNCyp70xik= github.com/eclipse/paho.mqtt.golang v1.4.3/go.mod h1:CSYvoAlsMkhYOXh/oKyxa8EcBci6dVkLCbo5tTC1RIE= -github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.32 h1:UhWAi2oyRa8alqOXPyFWdMOcG0pCUoIVNMkOgP5xRQE= -github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.32/go.mod h1:eC4dNTeMuXJ9h+i4F4Mqj464U0UCmLXWMh6rsHAPPHg= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.34 h1:cuQmkVACCdIsBbjKI/bkeaqn6xyzrK9gQ7wG7mTaQlI= +github.com/edgexfoundry/go-mod-bootstrap/v3 v3.1.0-dev.34/go.mod h1:4EUbI5oJBsuMQnz9kgdLNHeXmQ/Q9NQuw2PRZbEkxkM= github.com/edgexfoundry/go-mod-configuration/v3 v3.1.0-dev.5 h1:wTs2qOG/RHeizCHcPp8KOQcSzGrvNOhVQnK+JdAHJNs= github.com/edgexfoundry/go-mod-configuration/v3 v3.1.0-dev.5/go.mod h1:mZyBGQ7eX+K63b46/K/OdiWSHtYbl/TK2GTfc0eOM6Q= -github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.9 h1:ZvCeuB1CXzNzg2WhpLCEKhkPSZpS0Geoh0AqTbj08X4= -github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.9/go.mod h1:L7i97+A+bMpvXFo1M6t0WHeRrsSocTgDEl3ayfVxCmo= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.11 h1:vYzWq4xbJJ4LVkagj+/01UOD8x4HZTK5k2x7EZh9ZjQ= +github.com/edgexfoundry/go-mod-core-contracts/v3 v3.1.0-dev.11/go.mod h1:MztlrH+8hPRX6XNZrbdvbV0RNgkoAN1etcvAtgSHeuQ= github.com/edgexfoundry/go-mod-messaging/v3 v3.1.0-dev.20 h1:iKhaDrfN0plO95MjPmrOEhfiUrE9gMD9Os7odtOrM10= github.com/edgexfoundry/go-mod-messaging/v3 v3.1.0-dev.20/go.mod h1:cD3WRffguDrR/G7dIyzYewfoOk44VlJfGSkgbuUzvYM= github.com/edgexfoundry/go-mod-registry/v3 v3.1.0-dev.5 h1:Xu1Jxk8gjMGMROqOf2C5pLY6lx1nWNYSDife2d623UE=