From ca2dc823efb2a01c8e37a4e2a2999f0549def98c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Tue, 18 Mar 2025 11:27:09 +0100 Subject: [PATCH 1/7] feat: use names for connections to the nats event bus --- pkg/generators/natsnames.go | 38 +++++++++++++++++++ services/activitylog/pkg/command/server.go | 4 +- services/antivirus/pkg/service/service.go | 4 +- services/audit/pkg/command/server.go | 4 +- services/clientlog/pkg/command/server.go | 4 +- services/eventhistory/pkg/command/server.go | 4 +- services/frontend/pkg/command/events.go | 4 +- services/graph/pkg/server/http/server.go | 4 +- .../notifications/pkg/command/send_email.go | 4 +- services/notifications/pkg/command/server.go | 4 +- services/policies/pkg/command/server.go | 4 +- .../pkg/command/postprocessing.go | 4 +- .../postprocessing/pkg/service/service.go | 8 ++-- services/proxy/pkg/command/server.go | 4 +- .../search/pkg/service/grpc/v0/service.go | 4 +- services/sse/pkg/command/server.go | 4 +- services/storage-users/pkg/event/event.go | 4 +- services/userlog/pkg/command/server.go | 4 +- 18 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 pkg/generators/natsnames.go diff --git a/pkg/generators/natsnames.go b/pkg/generators/natsnames.go new file mode 100644 index 0000000000..93cb28f120 --- /dev/null +++ b/pkg/generators/natsnames.go @@ -0,0 +1,38 @@ +package generators + +import ( + "os" + "strconv" +) + +type NType int + +const ( + NTYPE_BUS NType = iota + NTYPE_KEYVALUE + NTYPE_REGISTRY +) + +func (n NType) String() string { + return []string{"bus", "kv", "reg"}[n] +} + +func GenerateConnectionName(service string, ntype NType) string { + host, err := os.Hostname() + if err != nil { + host = "" + } + + return firstNRunes(host, 5) + ":" + strconv.Itoa(os.Getpid()) + ":" + service + ":" + ntype.String() +} + +func firstNRunes(s string, n int) string { + i := 0 + for j := range s { + if i == n { + return s[:j] + } + i++ + } + return s +} diff --git a/services/activitylog/pkg/command/server.go b/services/activitylog/pkg/command/server.go index 70884d31a8..32156d355e 100644 --- a/services/activitylog/pkg/command/server.go +++ b/services/activitylog/pkg/command/server.go @@ -13,6 +13,7 @@ import ( microstore "go-micro.dev/v4/store" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/registry" ogrpc "github.com/opencloud-eu/opencloud/pkg/service/grpc" "github.com/opencloud-eu/opencloud/pkg/tracing" @@ -70,7 +71,8 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - evStream, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + evStream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { logger.Error().Err(err).Msg("Failed to initialize event stream") return err diff --git a/services/antivirus/pkg/service/service.go b/services/antivirus/pkg/service/service.go index 10cbe9ac69..9c9e2cca17 100644 --- a/services/antivirus/pkg/service/service.go +++ b/services/antivirus/pkg/service/service.go @@ -20,6 +20,7 @@ import ( "github.com/opencloud-eu/reva/v2/pkg/rhttp" "go.opentelemetry.io/otel/trace" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/services/antivirus/pkg/config" "github.com/opencloud-eu/opencloud/services/antivirus/pkg/scanners" @@ -114,7 +115,8 @@ func (av Antivirus) Run() error { av.config.Events.TLSInsecure = false } - natsStream, err := stream.NatsFromConfig(av.config.Service.Name, false, stream.NatsConfig(av.config.Events)) + connName := generators.GenerateConnectionName(av.config.Service.Name, generators.NTYPE_BUS) + natsStream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(av.config.Events)) if err != nil { return err } diff --git a/services/audit/pkg/command/server.go b/services/audit/pkg/command/server.go index 30ca082c68..99286f7eb7 100644 --- a/services/audit/pkg/command/server.go +++ b/services/audit/pkg/command/server.go @@ -10,6 +10,7 @@ import ( "github.com/urfave/cli/v2" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/services/audit/pkg/config" "github.com/opencloud-eu/opencloud/services/audit/pkg/config/parser" "github.com/opencloud-eu/opencloud/services/audit/pkg/logging" @@ -36,7 +37,8 @@ func Server(cfg *config.Config) *cli.Command { ) defer cancel() - client, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + client, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err } diff --git a/services/clientlog/pkg/command/server.go b/services/clientlog/pkg/command/server.go index 334c5b729d..f4b70990ee 100644 --- a/services/clientlog/pkg/command/server.go +++ b/services/clientlog/pkg/command/server.go @@ -11,6 +11,7 @@ import ( "github.com/urfave/cli/v2" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/registry" "github.com/opencloud-eu/opencloud/pkg/tracing" "github.com/opencloud-eu/opencloud/pkg/version" @@ -68,7 +69,8 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - s, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + s, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err } diff --git a/services/eventhistory/pkg/command/server.go b/services/eventhistory/pkg/command/server.go index 6c31a47ab5..25f9eb048a 100644 --- a/services/eventhistory/pkg/command/server.go +++ b/services/eventhistory/pkg/command/server.go @@ -11,6 +11,7 @@ import ( microstore "go-micro.dev/v4/store" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" ogrpc "github.com/opencloud-eu/opencloud/pkg/service/grpc" "github.com/opencloud-eu/opencloud/pkg/tracing" "github.com/opencloud-eu/opencloud/pkg/version" @@ -55,7 +56,8 @@ func Server(cfg *config.Config) *cli.Command { m.BuildInfo.WithLabelValues(version.GetString()).Set(1) - consumer, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + consumer, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err } diff --git a/services/frontend/pkg/command/events.go b/services/frontend/pkg/command/events.go index 14aa292a94..60d988330a 100644 --- a/services/frontend/pkg/command/events.go +++ b/services/frontend/pkg/command/events.go @@ -18,6 +18,7 @@ import ( "go-micro.dev/v4/metadata" "google.golang.org/protobuf/types/known/fieldmaskpb" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/pkg/middleware" "github.com/opencloud-eu/opencloud/pkg/registry" @@ -34,7 +35,8 @@ var _registeredEvents = []events.Unmarshaller{ // ListenForEvents listens for events and acts accordingly func ListenForEvents(ctx context.Context, cfg *config.Config, l log.Logger) error { - bus, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + bus, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { l.Error().Err(err).Msg("cannot connect to nats") return err diff --git a/services/graph/pkg/server/http/server.go b/services/graph/pkg/server/http/server.go index ab07d9657e..2fe68b876f 100644 --- a/services/graph/pkg/server/http/server.go +++ b/services/graph/pkg/server/http/server.go @@ -16,6 +16,7 @@ import ( "github.com/opencloud-eu/opencloud/pkg/account" "github.com/opencloud-eu/opencloud/pkg/cors" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/keycloak" "github.com/opencloud-eu/opencloud/pkg/middleware" "github.com/opencloud-eu/opencloud/pkg/registry" @@ -56,7 +57,8 @@ func Server(opts ...Option) (http.Service, error) { if options.Config.Events.Endpoint != "" { var err error - eventsStream, err = stream.NatsFromConfig(options.Config.Service.Name, false, stream.NatsConfig(options.Config.Events)) + connName := generators.GenerateConnectionName(options.Config.Service.Name, generators.NTYPE_BUS) + eventsStream, err = stream.NatsFromConfig(connName, false, stream.NatsConfig(options.Config.Events)) if err != nil { options.Logger.Error(). Err(err). diff --git a/services/notifications/pkg/command/send_email.go b/services/notifications/pkg/command/send_email.go index b903794d4e..857b699bc6 100644 --- a/services/notifications/pkg/command/send_email.go +++ b/services/notifications/pkg/command/send_email.go @@ -1,6 +1,7 @@ package command import ( + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/services/notifications/pkg/config" "github.com/opencloud-eu/reva/v2/pkg/events" "github.com/opencloud-eu/reva/v2/pkg/events/stream" @@ -31,7 +32,8 @@ func SendEmail(cfg *config.Config) *cli.Command { if !daily && !weekly { return errors.New("at least one of '--daily' or '--weekly' must be set") } - s, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Notifications.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + s, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Notifications.Events)) if err != nil { return err } diff --git a/services/notifications/pkg/command/server.go b/services/notifications/pkg/command/server.go index 7955849c5e..447a11bcb2 100644 --- a/services/notifications/pkg/command/server.go +++ b/services/notifications/pkg/command/server.go @@ -17,6 +17,7 @@ import ( "github.com/opencloud-eu/reva/v2/pkg/rgrpc/todo/pool" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/registry" "github.com/opencloud-eu/opencloud/pkg/service/grpc" "github.com/opencloud-eu/opencloud/pkg/tracing" @@ -94,7 +95,8 @@ func Server(cfg *config.Config) *cli.Command { registeredEvents[typ.String()] = e } - client, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Notifications.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + client, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Notifications.Events)) if err != nil { return err } diff --git a/services/policies/pkg/command/server.go b/services/policies/pkg/command/server.go index 5d7d221c0d..e70f06c931 100644 --- a/services/policies/pkg/command/server.go +++ b/services/policies/pkg/command/server.go @@ -9,6 +9,7 @@ import ( "github.com/urfave/cli/v2" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/pkg/service/grpc" "github.com/opencloud-eu/opencloud/pkg/tracing" @@ -104,7 +105,8 @@ func Server(cfg *config.Config) *cli.Command { { - bus, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + bus, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err } diff --git a/services/postprocessing/pkg/command/postprocessing.go b/services/postprocessing/pkg/command/postprocessing.go index 1494b335b0..97a86d7cbf 100644 --- a/services/postprocessing/pkg/command/postprocessing.go +++ b/services/postprocessing/pkg/command/postprocessing.go @@ -4,6 +4,7 @@ import ( "context" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/services/postprocessing/pkg/config" "github.com/opencloud-eu/opencloud/services/postprocessing/pkg/config/parser" "github.com/opencloud-eu/reva/v2/pkg/events" @@ -40,7 +41,8 @@ func RestartPostprocessing(cfg *config.Config) *cli.Command { return configlog.ReturnFatal(parser.ParseConfig(cfg)) }, Action: func(c *cli.Context) error { - stream, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig{ + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + stream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Postprocessing.Events.Endpoint, Cluster: cfg.Postprocessing.Events.Cluster, EnableTLS: cfg.Postprocessing.Events.EnableTLS, diff --git a/services/postprocessing/pkg/service/service.go b/services/postprocessing/pkg/service/service.go index c57082509d..f6af1d3b63 100644 --- a/services/postprocessing/pkg/service/service.go +++ b/services/postprocessing/pkg/service/service.go @@ -8,6 +8,7 @@ import ( "sync" "time" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/pkg/version" "github.com/opencloud-eu/opencloud/services/postprocessing/pkg/config" @@ -46,7 +47,8 @@ var ( // NewPostprocessingService returns a new instance of a postprocessing service func NewPostprocessingService(ctx context.Context, logger log.Logger, sto store.Store, tp trace.TracerProvider, cfg *config.Config) (*PostprocessingService, error) { - pub, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig{ + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + pub, err := stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Postprocessing.Events.Endpoint, Cluster: cfg.Postprocessing.Events.Cluster, EnableTLS: cfg.Postprocessing.Events.EnableTLS, @@ -55,11 +57,11 @@ func NewPostprocessingService(ctx context.Context, logger log.Logger, sto store. AuthUsername: cfg.Postprocessing.Events.AuthUsername, AuthPassword: cfg.Postprocessing.Events.AuthPassword, }) - if err != nil { return nil, err } - raw, err := raw.FromConfig(ctx, cfg.Service.Name, raw.Config{ + + raw, err := raw.FromConfig(ctx, connName, raw.Config{ Endpoint: cfg.Postprocessing.Events.Endpoint, Cluster: cfg.Postprocessing.Events.Cluster, EnableTLS: cfg.Postprocessing.Events.EnableTLS, diff --git a/services/proxy/pkg/command/server.go b/services/proxy/pkg/command/server.go index ca0d759984..6046b9fab7 100644 --- a/services/proxy/pkg/command/server.go +++ b/services/proxy/pkg/command/server.go @@ -12,6 +12,7 @@ import ( "github.com/justinas/alice" "github.com/oklog/run" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" pkgmiddleware "github.com/opencloud-eu/opencloud/pkg/middleware" "github.com/opencloud-eu/opencloud/pkg/oidc" @@ -157,7 +158,8 @@ func Server(cfg *config.Config) *cli.Command { var publisher events.Stream if cfg.Events.Endpoint != "" { var err error - publisher, err = stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + publisher, err = stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { logger.Error(). Err(err). diff --git a/services/search/pkg/service/grpc/v0/service.go b/services/search/pkg/service/grpc/v0/service.go index 914000ff77..ca25d93b29 100644 --- a/services/search/pkg/service/grpc/v0/service.go +++ b/services/search/pkg/service/grpc/v0/service.go @@ -24,6 +24,7 @@ import ( "go-micro.dev/v4/metadata" grpcmetadata "google.golang.org/grpc/metadata" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/pkg/registry" v0 "github.com/opencloud-eu/opencloud/protogen/gen/opencloud/messages/search/v0" @@ -115,7 +116,8 @@ func NewHandler(opts ...Option) (searchsvc.SearchProviderHandler, func(), error) // setup event handling - stream, err := raw.FromConfig(context.Background(), cfg.Service.Name, raw.Config{ + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + stream, err := raw.FromConfig(context.Background(), connName, raw.Config{ Endpoint: cfg.Events.Endpoint, Cluster: cfg.Events.Cluster, EnableTLS: cfg.Events.EnableTLS, diff --git a/services/sse/pkg/command/server.go b/services/sse/pkg/command/server.go index 7dcecb327d..7607a7ce7a 100644 --- a/services/sse/pkg/command/server.go +++ b/services/sse/pkg/command/server.go @@ -10,6 +10,7 @@ import ( "github.com/urfave/cli/v2" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/pkg/tracing" "github.com/opencloud-eu/opencloud/services/sse/pkg/config" @@ -52,7 +53,8 @@ func Server(cfg *config.Config) *cli.Command { } { - natsStream, err := stream.NatsFromConfig(cfg.Service.Name, true, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + natsStream, err := stream.NatsFromConfig(connName, true, stream.NatsConfig(cfg.Events)) if err != nil { return err } diff --git a/services/storage-users/pkg/event/event.go b/services/storage-users/pkg/event/event.go index 7b0104ca5a..e699ca2da3 100644 --- a/services/storage-users/pkg/event/event.go +++ b/services/storage-users/pkg/event/event.go @@ -1,6 +1,7 @@ package event import ( + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/services/storage-users/pkg/config" "github.com/opencloud-eu/reva/v2/pkg/events/stream" "go-micro.dev/v4/events" @@ -8,7 +9,8 @@ import ( // NewStream prepares the requested nats stream and returns it. func NewStream(cfg *config.Config) (events.Stream, error) { - return stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig{ + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + return stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Events.Addr, Cluster: cfg.Events.ClusterID, EnableTLS: cfg.Events.EnableTLS, diff --git a/services/userlog/pkg/command/server.go b/services/userlog/pkg/command/server.go index b8f185f3db..7147d91209 100644 --- a/services/userlog/pkg/command/server.go +++ b/services/userlog/pkg/command/server.go @@ -13,6 +13,7 @@ import ( microstore "go-micro.dev/v4/store" "github.com/opencloud-eu/opencloud/pkg/config/configlog" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/registry" ogrpc "github.com/opencloud-eu/opencloud/pkg/service/grpc" "github.com/opencloud-eu/opencloud/pkg/tracing" @@ -76,7 +77,8 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - stream, err := stream.NatsFromConfig(cfg.Service.Name, false, stream.NatsConfig(cfg.Events)) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + stream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err } From 925444a0b38054c4081db1aacc06ea13b82a12c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Tue, 18 Mar 2025 17:58:11 +0100 Subject: [PATCH 2/7] feat: change the names of the connections to the registry --- pkg/natsjsregistry/options.go | 12 ++++++++++++ pkg/natsjsregistry/registry.go | 8 +++++++- services/sharing/pkg/revaconfig/config.go | 3 ++- services/storage-users/pkg/revaconfig/config.go | 3 ++- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/pkg/natsjsregistry/options.go b/pkg/natsjsregistry/options.go index 533d0bd871..94101acb0b 100644 --- a/pkg/natsjsregistry/options.go +++ b/pkg/natsjsregistry/options.go @@ -10,6 +10,7 @@ import ( type storeOptionsKey struct{} type defaultTTLKey struct{} +type serviceNameKey struct{} // StoreOptions sets the options for the underlying store func StoreOptions(opts []store.Option) registry.Option { @@ -30,3 +31,14 @@ func DefaultTTL(t time.Duration) registry.Option { o.Context = context.WithValue(o.Context, defaultTTLKey{}, t) } } + +// ServiceName links the service name to the registry if possible. +// The name will be part of the connection name to the Nats registry +func ServiceName(name string) registry.Option { + return func(o *registry.Options) { + if o.Context == nil { + o.Context = context.Background() + } + o.Context = context.WithValue(o.Context, serviceNameKey{}, name) + } +} diff --git a/pkg/natsjsregistry/registry.go b/pkg/natsjsregistry/registry.go index 78cc3b1b54..e183a36f8f 100644 --- a/pkg/natsjsregistry/registry.go +++ b/pkg/natsjsregistry/registry.go @@ -13,6 +13,7 @@ import ( natsjskv "github.com/go-micro/plugins/v4/store/nats-js-kv" "github.com/nats-io/nats.go" + "github.com/opencloud-eu/opencloud/pkg/generators" "go-micro.dev/v4/registry" "go-micro.dev/v4/server" "go-micro.dev/v4/store" @@ -186,6 +187,11 @@ func (n *storeregistry) storeOptions(opts registry.Options) []store.Option { storeoptions = append(storeoptions, natsjskv.DefaultTTL(defaultTTL)) } + serviceName := "_oc" // use "_oc" as default service name if nothing else is provided + if name, ok := opts.Context.Value(serviceNameKey{}).(string); ok { + serviceName = name + } + addr := []string{"127.0.0.1:9233"} if len(opts.Addrs) > 0 { addr = opts.Addrs @@ -195,7 +201,7 @@ func (n *storeregistry) storeOptions(opts registry.Options) []store.Option { storeoptions = append(storeoptions, store.Nodes(addr...)) natsOptions := nats.GetDefaultOptions() - natsOptions.Name = "nats-js-kv-registry" + natsOptions.Name = generators.GenerateConnectionName(serviceName, generators.NTYPE_REGISTRY) natsOptions.User, natsOptions.Password = getAuth() natsOptions.ReconnectedCB = func(_ *nats.Conn) { if err := n.Init(); err != nil { diff --git a/services/sharing/pkg/revaconfig/config.go b/services/sharing/pkg/revaconfig/config.go index 7f20aaf69d..ac7d7afbd7 100644 --- a/services/sharing/pkg/revaconfig/config.go +++ b/services/sharing/pkg/revaconfig/config.go @@ -7,6 +7,7 @@ import ( "path/filepath" "github.com/opencloud-eu/opencloud/pkg/config/defaults" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/pkg/log" "github.com/opencloud-eu/opencloud/services/sharing/pkg/config" ) @@ -135,7 +136,7 @@ func SharingConfigFromStruct(cfg *config.Config, logger log.Logger) (map[string] "tls-insecure": cfg.Events.TLSInsecure, "tls-root-ca-cert": cfg.Events.TLSRootCaCertPath, "enable-tls": cfg.Events.EnableTLS, - "name": "sharing-eventsmiddleware", + "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS), "username": cfg.Events.AuthUsername, "password": cfg.Events.AuthPassword, }, diff --git a/services/storage-users/pkg/revaconfig/config.go b/services/storage-users/pkg/revaconfig/config.go index bdb182f37d..c4ea5b9699 100644 --- a/services/storage-users/pkg/revaconfig/config.go +++ b/services/storage-users/pkg/revaconfig/config.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/opencloud-eu/opencloud/pkg/generators" "github.com/opencloud-eu/opencloud/services/storage-users/pkg/config" ) @@ -57,7 +58,7 @@ func StorageUsersConfigFromStruct(cfg *config.Config) map[string]interface{} { "tls-insecure": cfg.Events.TLSInsecure, "tls-root-ca-cert": cfg.Events.TLSRootCaCertPath, "enable-tls": cfg.Events.EnableTLS, - "name": "storage-users-eventsmiddleware", + "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS), "username": cfg.Events.AuthUsername, "password": cfg.Events.AuthPassword, }, From 8b5b3fb430087bdccfe1c565dbce651ac4c42ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Tue, 18 Mar 2025 18:25:01 +0100 Subject: [PATCH 3/7] chore: add comments to new functions --- pkg/generators/natsnames.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/generators/natsnames.go b/pkg/generators/natsnames.go index 93cb28f120..54fc15f724 100644 --- a/pkg/generators/natsnames.go +++ b/pkg/generators/natsnames.go @@ -5,6 +5,7 @@ import ( "strconv" ) +// NType is an enum type for the different types of NATS connections type NType int const ( @@ -17,6 +18,8 @@ func (n NType) String() string { return []string{"bus", "kv", "reg"}[n] } +// GenerateConnectionName generates a connection name for a NATS connection +// The connection name will be formatted as follows: "hostname:pid:service:type" func GenerateConnectionName(service string, ntype NType) string { host, err := os.Hostname() if err != nil { @@ -26,6 +29,7 @@ func GenerateConnectionName(service string, ntype NType) string { return firstNRunes(host, 5) + ":" + strconv.Itoa(os.Getpid()) + ":" + service + ":" + ntype.String() } +// firstNRunes returns the first n runes of a string func firstNRunes(s string, n int) string { i := 0 for j := range s { From c0b4a5daa00cfc7c587e0b95f22f654a6c23fa04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Wed, 19 Mar 2025 10:29:01 +0100 Subject: [PATCH 4/7] chore: change constant name to camelcase --- pkg/generators/natsnames.go | 6 +++--- pkg/natsjsregistry/registry.go | 2 +- services/activitylog/pkg/command/server.go | 2 +- services/antivirus/pkg/service/service.go | 2 +- services/audit/pkg/command/server.go | 2 +- services/clientlog/pkg/command/server.go | 2 +- services/eventhistory/pkg/command/server.go | 2 +- services/frontend/pkg/command/events.go | 2 +- services/graph/pkg/server/http/server.go | 2 +- services/notifications/pkg/command/send_email.go | 2 +- services/notifications/pkg/command/server.go | 2 +- services/policies/pkg/command/server.go | 2 +- services/postprocessing/pkg/command/postprocessing.go | 2 +- services/postprocessing/pkg/service/service.go | 2 +- services/proxy/pkg/command/server.go | 2 +- services/search/pkg/service/grpc/v0/service.go | 2 +- services/sharing/pkg/revaconfig/config.go | 2 +- services/sse/pkg/command/server.go | 2 +- services/storage-users/pkg/event/event.go | 2 +- services/storage-users/pkg/revaconfig/config.go | 2 +- services/userlog/pkg/command/server.go | 2 +- 21 files changed, 23 insertions(+), 23 deletions(-) diff --git a/pkg/generators/natsnames.go b/pkg/generators/natsnames.go index 54fc15f724..a35c9d751b 100644 --- a/pkg/generators/natsnames.go +++ b/pkg/generators/natsnames.go @@ -9,9 +9,9 @@ import ( type NType int const ( - NTYPE_BUS NType = iota - NTYPE_KEYVALUE - NTYPE_REGISTRY + NTypeBus NType = iota + NTypeKeyValue + NTypeRegistry ) func (n NType) String() string { diff --git a/pkg/natsjsregistry/registry.go b/pkg/natsjsregistry/registry.go index e183a36f8f..8a98d66516 100644 --- a/pkg/natsjsregistry/registry.go +++ b/pkg/natsjsregistry/registry.go @@ -201,7 +201,7 @@ func (n *storeregistry) storeOptions(opts registry.Options) []store.Option { storeoptions = append(storeoptions, store.Nodes(addr...)) natsOptions := nats.GetDefaultOptions() - natsOptions.Name = generators.GenerateConnectionName(serviceName, generators.NTYPE_REGISTRY) + natsOptions.Name = generators.GenerateConnectionName(serviceName, generators.NTypeRegistry) natsOptions.User, natsOptions.Password = getAuth() natsOptions.ReconnectedCB = func(_ *nats.Conn) { if err := n.Init(); err != nil { diff --git a/services/activitylog/pkg/command/server.go b/services/activitylog/pkg/command/server.go index 32156d355e..4c479956c8 100644 --- a/services/activitylog/pkg/command/server.go +++ b/services/activitylog/pkg/command/server.go @@ -71,7 +71,7 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) evStream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { logger.Error().Err(err).Msg("Failed to initialize event stream") diff --git a/services/antivirus/pkg/service/service.go b/services/antivirus/pkg/service/service.go index 9c9e2cca17..6dea06db6a 100644 --- a/services/antivirus/pkg/service/service.go +++ b/services/antivirus/pkg/service/service.go @@ -115,7 +115,7 @@ func (av Antivirus) Run() error { av.config.Events.TLSInsecure = false } - connName := generators.GenerateConnectionName(av.config.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(av.config.Service.Name, generators.NTypeBus) natsStream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(av.config.Events)) if err != nil { return err diff --git a/services/audit/pkg/command/server.go b/services/audit/pkg/command/server.go index 99286f7eb7..38727520b2 100644 --- a/services/audit/pkg/command/server.go +++ b/services/audit/pkg/command/server.go @@ -37,7 +37,7 @@ func Server(cfg *config.Config) *cli.Command { ) defer cancel() - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) client, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err diff --git a/services/clientlog/pkg/command/server.go b/services/clientlog/pkg/command/server.go index f4b70990ee..9392f3a396 100644 --- a/services/clientlog/pkg/command/server.go +++ b/services/clientlog/pkg/command/server.go @@ -69,7 +69,7 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) s, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err diff --git a/services/eventhistory/pkg/command/server.go b/services/eventhistory/pkg/command/server.go index 25f9eb048a..7d4049191c 100644 --- a/services/eventhistory/pkg/command/server.go +++ b/services/eventhistory/pkg/command/server.go @@ -56,7 +56,7 @@ func Server(cfg *config.Config) *cli.Command { m.BuildInfo.WithLabelValues(version.GetString()).Set(1) - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) consumer, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err diff --git a/services/frontend/pkg/command/events.go b/services/frontend/pkg/command/events.go index 60d988330a..d4ee94d0e6 100644 --- a/services/frontend/pkg/command/events.go +++ b/services/frontend/pkg/command/events.go @@ -35,7 +35,7 @@ var _registeredEvents = []events.Unmarshaller{ // ListenForEvents listens for events and acts accordingly func ListenForEvents(ctx context.Context, cfg *config.Config, l log.Logger) error { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) bus, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { l.Error().Err(err).Msg("cannot connect to nats") diff --git a/services/graph/pkg/server/http/server.go b/services/graph/pkg/server/http/server.go index 2fe68b876f..cfa43c231f 100644 --- a/services/graph/pkg/server/http/server.go +++ b/services/graph/pkg/server/http/server.go @@ -57,7 +57,7 @@ func Server(opts ...Option) (http.Service, error) { if options.Config.Events.Endpoint != "" { var err error - connName := generators.GenerateConnectionName(options.Config.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(options.Config.Service.Name, generators.NTypeBus) eventsStream, err = stream.NatsFromConfig(connName, false, stream.NatsConfig(options.Config.Events)) if err != nil { options.Logger.Error(). diff --git a/services/notifications/pkg/command/send_email.go b/services/notifications/pkg/command/send_email.go index 857b699bc6..c2582c3a08 100644 --- a/services/notifications/pkg/command/send_email.go +++ b/services/notifications/pkg/command/send_email.go @@ -32,7 +32,7 @@ func SendEmail(cfg *config.Config) *cli.Command { if !daily && !weekly { return errors.New("at least one of '--daily' or '--weekly' must be set") } - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) s, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Notifications.Events)) if err != nil { return err diff --git a/services/notifications/pkg/command/server.go b/services/notifications/pkg/command/server.go index 447a11bcb2..ae14d9486b 100644 --- a/services/notifications/pkg/command/server.go +++ b/services/notifications/pkg/command/server.go @@ -95,7 +95,7 @@ func Server(cfg *config.Config) *cli.Command { registeredEvents[typ.String()] = e } - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) client, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Notifications.Events)) if err != nil { return err diff --git a/services/policies/pkg/command/server.go b/services/policies/pkg/command/server.go index e70f06c931..ab671a84b3 100644 --- a/services/policies/pkg/command/server.go +++ b/services/policies/pkg/command/server.go @@ -105,7 +105,7 @@ func Server(cfg *config.Config) *cli.Command { { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) bus, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err diff --git a/services/postprocessing/pkg/command/postprocessing.go b/services/postprocessing/pkg/command/postprocessing.go index 97a86d7cbf..e8a63ddc4a 100644 --- a/services/postprocessing/pkg/command/postprocessing.go +++ b/services/postprocessing/pkg/command/postprocessing.go @@ -41,7 +41,7 @@ func RestartPostprocessing(cfg *config.Config) *cli.Command { return configlog.ReturnFatal(parser.ParseConfig(cfg)) }, Action: func(c *cli.Context) error { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) stream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Postprocessing.Events.Endpoint, Cluster: cfg.Postprocessing.Events.Cluster, diff --git a/services/postprocessing/pkg/service/service.go b/services/postprocessing/pkg/service/service.go index f6af1d3b63..9fb8639d1e 100644 --- a/services/postprocessing/pkg/service/service.go +++ b/services/postprocessing/pkg/service/service.go @@ -47,7 +47,7 @@ var ( // NewPostprocessingService returns a new instance of a postprocessing service func NewPostprocessingService(ctx context.Context, logger log.Logger, sto store.Store, tp trace.TracerProvider, cfg *config.Config) (*PostprocessingService, error) { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) pub, err := stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Postprocessing.Events.Endpoint, Cluster: cfg.Postprocessing.Events.Cluster, diff --git a/services/proxy/pkg/command/server.go b/services/proxy/pkg/command/server.go index 6046b9fab7..14b96513e6 100644 --- a/services/proxy/pkg/command/server.go +++ b/services/proxy/pkg/command/server.go @@ -158,7 +158,7 @@ func Server(cfg *config.Config) *cli.Command { var publisher events.Stream if cfg.Events.Endpoint != "" { var err error - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) publisher, err = stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { logger.Error(). diff --git a/services/search/pkg/service/grpc/v0/service.go b/services/search/pkg/service/grpc/v0/service.go index ca25d93b29..32a76843e8 100644 --- a/services/search/pkg/service/grpc/v0/service.go +++ b/services/search/pkg/service/grpc/v0/service.go @@ -116,7 +116,7 @@ func NewHandler(opts ...Option) (searchsvc.SearchProviderHandler, func(), error) // setup event handling - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) stream, err := raw.FromConfig(context.Background(), connName, raw.Config{ Endpoint: cfg.Events.Endpoint, Cluster: cfg.Events.Cluster, diff --git a/services/sharing/pkg/revaconfig/config.go b/services/sharing/pkg/revaconfig/config.go index ac7d7afbd7..c790ded106 100644 --- a/services/sharing/pkg/revaconfig/config.go +++ b/services/sharing/pkg/revaconfig/config.go @@ -136,7 +136,7 @@ func SharingConfigFromStruct(cfg *config.Config, logger log.Logger) (map[string] "tls-insecure": cfg.Events.TLSInsecure, "tls-root-ca-cert": cfg.Events.TLSRootCaCertPath, "enable-tls": cfg.Events.EnableTLS, - "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS), + "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus), "username": cfg.Events.AuthUsername, "password": cfg.Events.AuthPassword, }, diff --git a/services/sse/pkg/command/server.go b/services/sse/pkg/command/server.go index 7607a7ce7a..27fbd576c4 100644 --- a/services/sse/pkg/command/server.go +++ b/services/sse/pkg/command/server.go @@ -53,7 +53,7 @@ func Server(cfg *config.Config) *cli.Command { } { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) natsStream, err := stream.NatsFromConfig(connName, true, stream.NatsConfig(cfg.Events)) if err != nil { return err diff --git a/services/storage-users/pkg/event/event.go b/services/storage-users/pkg/event/event.go index e699ca2da3..d296c8f5a2 100644 --- a/services/storage-users/pkg/event/event.go +++ b/services/storage-users/pkg/event/event.go @@ -9,7 +9,7 @@ import ( // NewStream prepares the requested nats stream and returns it. func NewStream(cfg *config.Config) (events.Stream, error) { - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) return stream.NatsFromConfig(connName, false, stream.NatsConfig{ Endpoint: cfg.Events.Addr, Cluster: cfg.Events.ClusterID, diff --git a/services/storage-users/pkg/revaconfig/config.go b/services/storage-users/pkg/revaconfig/config.go index c4ea5b9699..0df2a85168 100644 --- a/services/storage-users/pkg/revaconfig/config.go +++ b/services/storage-users/pkg/revaconfig/config.go @@ -58,7 +58,7 @@ func StorageUsersConfigFromStruct(cfg *config.Config) map[string]interface{} { "tls-insecure": cfg.Events.TLSInsecure, "tls-root-ca-cert": cfg.Events.TLSRootCaCertPath, "enable-tls": cfg.Events.EnableTLS, - "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS), + "name": generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus), "username": cfg.Events.AuthUsername, "password": cfg.Events.AuthPassword, }, diff --git a/services/userlog/pkg/command/server.go b/services/userlog/pkg/command/server.go index 7147d91209..b75e9f7ef7 100644 --- a/services/userlog/pkg/command/server.go +++ b/services/userlog/pkg/command/server.go @@ -77,7 +77,7 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() - connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTYPE_BUS) + connName := generators.GenerateConnectionName(cfg.Service.Name, generators.NTypeBus) stream, err := stream.NatsFromConfig(connName, false, stream.NatsConfig(cfg.Events)) if err != nil { return err From f035f3ce6eb2a832f50ebbf8527213a559d10f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Wed, 19 Mar 2025 11:43:26 +0100 Subject: [PATCH 5/7] fix: distinguish between go-micro and ocis connections to registry --- pkg/natsjsregistry/registry.go | 12 ++++++++++-- pkg/registry/registry.go | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/natsjsregistry/registry.go b/pkg/natsjsregistry/registry.go index 8a98d66516..cb9a5c1d43 100644 --- a/pkg/natsjsregistry/registry.go +++ b/pkg/natsjsregistry/registry.go @@ -30,7 +30,15 @@ var ( ) func init() { - cmd.DefaultRegistries[_registryName] = NewRegistry + cmd.DefaultRegistries[_registryName] = NewRegistryMicro +} + +// NewRegistryMicro returns a new natsjs registry, forcing the service name +// to be "_go-micro". This is the registry that is intended to be used by +// go-micro +func NewRegistryMicro(opts ...registry.Option) registry.Registry { + overwrittenOpts := append(opts, ServiceName("_go-micro")) + return NewRegistry(overwrittenOpts...) } // NewRegistry returns a new natsjs registry @@ -187,7 +195,7 @@ func (n *storeregistry) storeOptions(opts registry.Options) []store.Option { storeoptions = append(storeoptions, natsjskv.DefaultTTL(defaultTTL)) } - serviceName := "_oc" // use "_oc" as default service name if nothing else is provided + serviceName := "_unknown" // use "_unknown" as default service name if nothing else is provided if name, ok := opts.Context.Value(serviceNameKey{}).(string); ok { serviceName = name } diff --git a/pkg/registry/registry.go b/pkg/registry/registry.go index 725a6edb1e..ce6166d30d 100644 --- a/pkg/registry/registry.go +++ b/pkg/registry/registry.go @@ -59,6 +59,7 @@ func GetRegistry(opts ...Option) mRegistry.Registry { _reg = natsjsregistry.NewRegistry( mRegistry.Addrs(cfg.Addresses...), natsjsregistry.DefaultTTL(cfg.RegisterTTL), + natsjsregistry.ServiceName("_oc"), ) case "memory": _reg = memr.NewRegistry() From e7a6d9923cfe81be2d98208ec1ae47c0ed355133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Wed, 19 Mar 2025 12:35:13 +0100 Subject: [PATCH 6/7] chore: add missing comments --- pkg/generators/natsnames.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/generators/natsnames.go b/pkg/generators/natsnames.go index a35c9d751b..7220c1f9c4 100644 --- a/pkg/generators/natsnames.go +++ b/pkg/generators/natsnames.go @@ -8,12 +8,14 @@ import ( // NType is an enum type for the different types of NATS connections type NType int +// Enum values for NType const ( NTypeBus NType = iota NTypeKeyValue NTypeRegistry ) +// String returns the string representation of a NType func (n NType) String() string { return []string{"bus", "kv", "reg"}[n] } From 5e0cbd93bea68074a1b70273b55df30b36ff6122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 11 Sep 2025 09:49:24 +0200 Subject: [PATCH 7/7] make firstNRunes more readable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- pkg/generators/natsnames.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/pkg/generators/natsnames.go b/pkg/generators/natsnames.go index 7220c1f9c4..1a64d4423f 100644 --- a/pkg/generators/natsnames.go +++ b/pkg/generators/natsnames.go @@ -33,12 +33,9 @@ func GenerateConnectionName(service string, ntype NType) string { // firstNRunes returns the first n runes of a string func firstNRunes(s string, n int) string { - i := 0 - for j := range s { - if i == n { - return s[:j] - } - i++ + runes := []rune(s) + if n > len(runes) { + n = len(runes) } - return s + return string(runes[:n]) }