From 857e715c3d941178919ea94d87f572989ea3182e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 28 Feb 2025 15:53:24 +0100 Subject: [PATCH 01/55] chore: do not use components as global --- client/client.go | 3 ++- client/plugins.go | 1 + event/event.go | 3 ++- log/log.go | 3 ++- metrics/metrics.go | 3 ++- registry/registry.go | 3 ++- server/server.go | 8 +++++++- types/component.go | 19 +++++++++++-------- 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/client/client.go b/client/client.go index 8174d4e..1abd02c 100644 --- a/client/client.go +++ b/client/client.go @@ -211,6 +211,7 @@ func Call[TResp any, TReq any]( func Provide( name types.ServiceName, configs types.ConfigData, + components *types.Components, logger log.Logger, reg registry.Type, opts ...Option) (Type, error) { @@ -239,5 +240,5 @@ func Provide( cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - return provider(name, configs, cLogger, reg, opts...) + return provider(name, configs, components, cLogger, reg, opts...) } diff --git a/client/plugins.go b/client/plugins.go index 0c3f4c8..aa59c21 100644 --- a/client/plugins.go +++ b/client/plugins.go @@ -11,6 +11,7 @@ import ( type ProviderFunc func( name types.ServiceName, data types.ConfigData, + components *types.Components, logger log.Logger, registry registry.Type, opts ...Option, diff --git a/event/event.go b/event/event.go index a0783a7..e3c0aba 100644 --- a/event/event.go +++ b/event/event.go @@ -164,6 +164,7 @@ func HandleRequest[TReq any, TResp any]( func Provide( name types.ServiceName, configs types.ConfigData, + components *types.Components, logger log.Logger, opts ...Option) (Handler, error) { cfg := NewConfig(opts...) @@ -197,7 +198,7 @@ func Provide( } // Register the event as a component. - err = types.RegisterComponent(instance, types.PriorityEvent) + err = components.Add(instance, types.PriorityEvent) if err != nil { logger.Warn("while registering event as a component", "error", err) } diff --git a/log/log.go b/log/log.go index d28fb53..3b3ef92 100644 --- a/log/log.go +++ b/log/log.go @@ -115,6 +115,7 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) func Provide( serviceName types.ServiceName, configs types.ConfigData, + components *types.Components, opts ...Option, ) (Logger, error) { sections := types.SplitServiceName(serviceName) @@ -127,7 +128,7 @@ func Provide( slog.SetDefault(logger.Logger) // Register the logger as a component. - _ = types.RegisterComponent(logger, types.PriorityLogger) //nolint:errcheck + _ = components.Add(logger, types.PriorityLogger) //nolint:errcheck return logger, nil } diff --git a/metrics/metrics.go b/metrics/metrics.go index 79302a3..60e02c5 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -58,6 +58,7 @@ func Provide( name types.ServiceName, version types.ServiceVersion, configs types.ConfigData, + components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) { @@ -94,7 +95,7 @@ func Provide( } // Register metrics as a component. - err = types.RegisterComponent(&instance, types.PriorityMetrics) + err = components.Add(&instance, types.PriorityMetrics) if err != nil { logger.Warn("while registering metrics as a component", "error", err) } diff --git a/registry/registry.go b/registry/registry.go index b40706d..353c0ae 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -98,6 +98,7 @@ func Provide( name types.ServiceName, version types.ServiceVersion, configs types.ConfigData, + components *types.Components, logger log.Logger, opts ...Option) (Type, error) { cfg := NewConfig(opts...) @@ -133,7 +134,7 @@ func Provide( } // Register the registry as a component. - err = types.RegisterComponent(&instance, types.PriorityRegistry) + err = components.Add(&instance, types.PriorityRegistry) if err != nil { logger.Warn("while registering registry as a component", "error", err) } diff --git a/server/server.go b/server/server.go index ac89aa7..44c9dd4 100644 --- a/server/server.go +++ b/server/server.go @@ -39,6 +39,7 @@ type Server struct { func Provide( name types.ServiceName, configs types.ConfigData, + components *types.Components, logger log.Logger, reg registry.Type, opts ...ConfigOption, @@ -129,7 +130,7 @@ func Provide( } // Register the server as a component. - err := types.RegisterComponent(&srv, types.PriorityServer) + err := components.Add(&srv, types.PriorityServer) if err != nil { logger.Warn("while registering server as a component", "error", err) } @@ -193,6 +194,11 @@ func (s *Server) Stop(ctx context.Context) error { return err } +// GetEntrypoints returns a map of entrypoints. +func (s *Server) GetEntrypoints() *container.Map[string, Entrypoint] { + return s.entrypoints +} + // GetEntrypoint returns the requested entrypoint, if present. func (s *Server) GetEntrypoint(name string) (Entrypoint, error) { e, ok := s.entrypoints.Get(name) diff --git a/types/component.go b/types/component.go index b27fb4d..a2d5038 100644 --- a/types/component.go +++ b/types/component.go @@ -32,12 +32,15 @@ type Component interface { String() string } -// Components is the container for client implementations. -// -//nolint:gochecknoglobals -var Components = container.NewPriorityList[Component]() - -// RegisterComponent adds a component to the container. -func RegisterComponent(component Component, priority int) error { - return Components.Add(component, priority) +// Components is the container type for components. +type Components = container.PriorityList[Component] + +// NewComponents returns a new container for components. +func NewComponents() *Components { + return container.NewPriorityList[Component]() +} + +// ProvideComponents is a wire injector for fresh components. +func ProvideComponents() (*Components, error) { + return container.NewPriorityList[Component](), nil } From 74b89d461d4d4ad39bbd73406d864d5ce25b83e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 28 Feb 2025 15:53:41 +0100 Subject: [PATCH 02/55] feat: add action helper to config/source/cli --- config/source/cli/action.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 config/source/cli/action.go diff --git a/config/source/cli/action.go b/config/source/cli/action.go new file mode 100644 index 0000000..14925bc --- /dev/null +++ b/config/source/cli/action.go @@ -0,0 +1,15 @@ +package cli + +type SelectedAction struct { + ServiceName string + Action string +} + +func (s *SelectedAction) Set(sName string, action string) { + s.ServiceName = sName + s.Action = action +} + +func (s *SelectedAction) String() string { + return s.ServiceName + ": " + s.Action +} From 56a34a6bdf70fa228b17d32b98ed00f0eb20d7c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 28 Feb 2025 15:54:20 +0100 Subject: [PATCH 03/55] chore: add a AddHandler method to server.Entrypoint. --- server/entrypoint.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/entrypoint.go b/server/entrypoint.go index d810cd4..4798261 100644 --- a/server/entrypoint.go +++ b/server/entrypoint.go @@ -29,6 +29,9 @@ type Entrypoint interface { // Enabled returns if this entrypoint has been enabled in config. Enabled() bool + // AddHandler adds a handler for registration during startup. + AddHandler(fun RegistrationFunc) + // Register is used to register handlers. // // A registration function takes a pointer to the server, which can then From 7678bb66edada960eb30ac5d4fa528108fff2532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 28 Feb 2025 16:00:29 +0100 Subject: [PATCH 04/55] fix: lint errors --- config/source/cli/action.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/source/cli/action.go b/config/source/cli/action.go index 14925bc..377dced 100644 --- a/config/source/cli/action.go +++ b/config/source/cli/action.go @@ -1,15 +1,18 @@ package cli +// SelectedAction is a helper struct to hold the service name and the action when an cli app chooses it. type SelectedAction struct { ServiceName string Action string } +// Set updates its values. func (s *SelectedAction) Set(sName string, action string) { s.ServiceName = sName s.Action = action } +// String returns a human readable string. func (s *SelectedAction) String() string { return s.ServiceName + ": " + s.Action } From 0d468bca50677eb0938e12b0e39638f75607f422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 5 Mar 2025 13:31:57 +0100 Subject: [PATCH 05/55] feat(client): implement retry logic --- client/config.go | 3 ++- client/retry.go | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/client/config.go b/client/config.go index 3850cc2..b37391c 100644 --- a/client/config.go +++ b/client/config.go @@ -30,7 +30,7 @@ var ( // DefaultBackoff is the default backoff function for retries. DefaultBackoff = BackoffExponential // DefaultRetry is the default check-for-retry function for retries. - DefaultRetry = RetryOnTimeoutError + DefaultRetry = RetryOnConnectionError // DefaultRetries is the default number of times a request is tried. DefaultRetries = 5 @@ -260,6 +260,7 @@ func NewConfig(opts ...Option) Config { PoolHosts: DefaultPoolHosts, PoolSize: DefaultPoolSize, PoolTTL: DefaultPoolTTL, + Retry: DefaultRetry, Retries: DefaultRetries, DialTimeout: DefaultDialTimeout, ConnectionTimeout: DefaultConnectionTimeout, diff --git a/client/retry.go b/client/retry.go index e11ca0d..440bc5a 100644 --- a/client/retry.go +++ b/client/retry.go @@ -3,21 +3,22 @@ package client import ( "context" "errors" + "time" "github.com/go-orb/go-orb/util/orberrors" ) // RetryFunc is the type for a retry func. // note that returning either false or a non-nil error will result in the call not being retried. -type RetryFunc func(ctx context.Context, req Request[any, any], retryCount int, err error) (bool, error) +type RetryFunc func(ctx context.Context, err error, options *CallOptions) (bool, error) // RetryAlways always retry on error. -func RetryAlways(_ context.Context, _ Request[any, any], _ int, _ error) (bool, error) { +func RetryAlways(_ context.Context, _ error, _ *CallOptions) (bool, error) { return true, nil } // RetryOnTimeoutError retries a request on a 408 timeout error. -func RetryOnTimeoutError(_ context.Context, _ Request[any, any], _ int, err error) (bool, error) { +func RetryOnTimeoutError(ctx context.Context, err error, options *CallOptions) (bool, error) { if err == nil { return false, nil } @@ -31,6 +32,43 @@ func RetryOnTimeoutError(_ context.Context, _ Request[any, any], _ int, err erro // logic error that should be handled by the user. case 408: return true, nil + // Retry on connection error: Service Unavailable + case 503: + timeout := time.After(options.DialTimeout) + select { + case <-ctx.Done(): + return false, nil + case <-timeout: + return true, nil + } + default: + return false, nil + } + } + + return false, nil +} + +// RetryOnConnectionError retries a request on a 503 connection error. +func RetryOnConnectionError(ctx context.Context, err error, options *CallOptions) (bool, error) { + if err == nil { + return false, nil + } + + var orbe *orberrors.Error + + err = orberrors.From(err) + if errors.As(err, &orbe) { + switch orbe.Code { + // Retry on connection error: Service Unavailable + case 503: + timeout := time.After(options.DialTimeout) + select { + case <-ctx.Done(): + return false, nil + case <-timeout: + return true, nil + } default: return false, nil } From 5c943ab13af465fd45781f2b07b0b27cb8fe0721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 5 Mar 2025 13:32:36 +0100 Subject: [PATCH 06/55] feat(log): add option to define log fields by config. --- log/config.go | 10 ++++++++++ log/log.go | 13 +++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/log/config.go b/log/config.go index a8e8cb0..16f5e4d 100644 --- a/log/config.go +++ b/log/config.go @@ -33,6 +33,8 @@ type Config struct { Level string `json:"level,omitempty" yaml:"level,omitempty"` // SetDefault indicates if this logger should be set as default logger. SetDefault bool `json:"setDefault,omitempty" yaml:"setDefault,omitempty"` + // Fields are additional fields to add to the log. + Fields map[string]any `json:"fields,omitempty" yaml:"fields,omitempty"` } func (c *Config) config() *Config { @@ -83,3 +85,11 @@ func WithSetDefault() Option { c.SetDefault = true } } + +// WithFields adds additional fields to the log. +func WithFields(n map[string]any) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Fields = n + } +} diff --git a/log/log.go b/log/log.go index 3b3ef92..70fcc68 100644 --- a/log/log.go +++ b/log/log.go @@ -100,11 +100,20 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) return Logger{}, err } + fields := []any{} + for k, v := range cfg.Fields { + fields = append(fields, slog.Any(k, v)) + } + r := Logger{ Logger: slog.New(lvlHandler), pluginProvider: cachedProvider, config: cfg, - fields: []any{}, + fields: fields, + } + + if len(fields) > 0 { + r.Logger = r.Logger.With(fields...) } return r, nil @@ -195,7 +204,7 @@ func (l Logger) With(args ...any) Logger { } // Start no-op. -func (l Logger) Start() error { +func (l Logger) Start(_ context.Context) error { return nil } From 8e8b471e48588b4eab322cadf81ba0c3c9837ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 5 Mar 2025 13:33:33 +0100 Subject: [PATCH 07/55] chore(types): Add a context to Component.Start() --- server/server.go | 6 +++--- types/component.go | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server/server.go b/server/server.go index 44c9dd4..ac17af6 100644 --- a/server/server.go +++ b/server/server.go @@ -139,7 +139,7 @@ func Provide( } // Start will start the HTTP servers on all entrypoints. -func (s *Server) Start() error { +func (s *Server) Start(ctx context.Context) error { if s == nil { return errors.New("failed to create server can't start") } @@ -147,10 +147,10 @@ func (s *Server) Start() error { var gErr error s.entrypoints.Range(func(addr string, entrypoint Entrypoint) bool { - if err := entrypoint.Start(); err != nil { + if err := entrypoint.Start(ctx); err != nil { // Stop any started entrypoints before returning error to give them a chance // to free up resources. - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + ctx, cancel := context.WithTimeout(ctx, time.Second*5) defer cancel() _ = s.Stop(ctx) //nolint:errcheck diff --git a/types/component.go b/types/component.go index a2d5038..610e2e5 100644 --- a/types/component.go +++ b/types/component.go @@ -14,12 +14,13 @@ const ( PriorityEvent = 1300 PriorityServer = 1400 PriorityClient = 1500 + PriorityCustom = 2000 ) // Component needs to be implemented by every component. type Component interface { // Start the component. E.g. connect to the broker. - Start() error + Start(ctx context.Context) error // Stop the component. E.g. disconnect from the broker. // The context will contain a timeout, and cancelation should be respected. From f3b67dfc55fefd4695e3e20a75767f32ca73abd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 5 Mar 2025 14:44:42 +0100 Subject: [PATCH 08/55] feat: update deps --- go.mod | 4 ++-- go.sum | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 022548a..9fa434d 100644 --- a/go.mod +++ b/go.mod @@ -12,8 +12,8 @@ require ( github.com/google/subcommands v1.2.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - golang.org/x/mod v0.23.0 // indirect - golang.org/x/sync v0.11.0 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/sync v0.12.0 // indirect golang.org/x/tools v0.30.0 // indirect ) diff --git a/go.sum b/go.sum index 6fa3686..dea8e5e 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -40,6 +42,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 3b32b1bf1a4611b8d90e0ebe5369ca1b039f0cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 6 Mar 2025 19:28:12 +0100 Subject: [PATCH 09/55] feat(README): Add in active development disclaimer. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index f4ed133..39cb19e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ Go Orb is a framework for distributed systems development, it can be seen as the The core of go-orb has been completely refactored, to support the removal of reflect and introduction of wire. +## In active Development + +While its possible to try out go-orb currently, it is in active development and not ready for production use. +Please have a look at our [roadmap](https://github.com/orgs/go-orb/projects/1) for more details. + ## Overview Go Orb provides the core requirements for distributed systems development including RPC and Event driven communication. From f0e336603d9e3813c36e06a4e5a2ef529cef25c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 6 Mar 2025 20:03:51 +0100 Subject: [PATCH 10/55] feat(README): Add Matrix badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39cb19e..f412cc3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ![go-orb Logo](docs/logo-header.png) [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/go-orb/go-orb?tab=doc) [![Go Report Card](https://goreportcard.com/badge/github.com/go-orb/go-orb)](https://goreportcard.com/report/github.com/go-orb/go-orb) [![Discord](https://dcbadge.vercel.app/api/server/sggGS389qb?style=flat-square&theme=default-inverted)](https://discord.gg/sggGS389qb) +# ![go-orb Logo](docs/logo-header.png) [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/go-orb/go-orb?tab=doc) [![Go Report Card](https://goreportcard.com/badge/github.com/go-orb/go-orb)](https://goreportcard.com/report/github.com/go-orb/go-orb) [![Discord](https://dcbadge.vercel.app/api/server/sggGS389qb?style=flat-square&theme=default-inverted)](https://discord.gg/sggGS389qb) ![Matrix](https://img.shields.io/matrix/go-orb%3Ajochum.dev?server_fqdn=matrix.jochum.dev&fetchMode=guest&logo=Matrix) Go Orb is a framework for distributed systems development, it can be seen as the successor of [go-micro.dev/v4](https://github.com/go-micro/go-micro). From 35bd1bf17c8d52a773c4c56978d596bdb09eb43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 10:51:31 +0100 Subject: [PATCH 11/55] feat(docs): Upload logo to git --- README.md | 4 +- docs/logo/Font info.txt | 6 + docs/logo/Hexanet_Logo.ai | 810 +++++++++++++++++++++++++++++++++++++ docs/logo/Hexanet_Logo.cdr | Bin 0 -> 45114 bytes docs/logo/Hexanet_Logo.eps | Bin 0 -> 1901566 bytes docs/logo/g20.png | Bin 0 -> 24531 bytes docs/logo/logo-yellow.png | Bin 0 -> 15102 bytes docs/logo/logo-yellow.svg | 67 +++ docs/workspace.dio | 320 +++++++++++++++ 9 files changed, 1206 insertions(+), 1 deletion(-) create mode 100644 docs/logo/Font info.txt create mode 100644 docs/logo/Hexanet_Logo.ai create mode 100644 docs/logo/Hexanet_Logo.cdr create mode 100644 docs/logo/Hexanet_Logo.eps create mode 100644 docs/logo/g20.png create mode 100644 docs/logo/logo-yellow.png create mode 100644 docs/logo/logo-yellow.svg create mode 100644 docs/workspace.dio diff --git a/README.md b/README.md index f412cc3..8137b7f 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ Go Orb abstracts away the details of distributed systems. Here are the main feat - **Pluggable Interfaces** - Go Orb makes use of Go interfaces for each distributed system abstraction. Because of this these interfaces are pluggable and allows Go Orb to be runtime agnostic. You can plugin any underlying technology. +- **Strongly tested and linted** - We use golangci-lint to ensure code quality and we have a comprehensive test suite, all lints and tests are run on CI. + ## Examples Please see the [examples](https://github.com/go-orb/examples) repo. @@ -170,7 +172,7 @@ We made sure that go-orb/go-orb (the core) is just a bunch of interfaces as well #### Linted and analyzed -Everything is linted and staticaly analyzed by golangcli-lint, enforced with CI/CD pipelines on github. +Everything is linted and staticaly analyzed by golangci-lint, enforced with CI pipelines on github. ## Community diff --git a/docs/logo/Font info.txt b/docs/logo/Font info.txt new file mode 100644 index 0000000..61cae9b --- /dev/null +++ b/docs/logo/Font info.txt @@ -0,0 +1,6 @@ + + + +Font Name: Montserrat + +Font Link: https://www.fontsquirrel.com/fonts/montserrat \ No newline at end of file diff --git a/docs/logo/Hexanet_Logo.ai b/docs/logo/Hexanet_Logo.ai new file mode 100644 index 0000000..3e62dfa --- /dev/null +++ b/docs/logo/Hexanet_Logo.ai @@ -0,0 +1,810 @@ +%PDF-1.4 % +1 0 obj <> endobj 2 0 obj <>stream + + + + + 2022-02-13T12:40:41+03:00 + Adobe Illustrator 24.0 (Windows) + 2022-02-13T12:40:42+02:00 + 2022-02-13T12:40:42+02:00 + + + + 220 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADcAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYqgtQaOErclzCYRzlkWL1GaJTvHyoaVJBzG1EhH13VczV7dzdiBPp5359e9oSuYyLdysa Kk6GpllkQksylH+IV6Df9WR4yR6TsKl3kjqKO/uTw77+7uA+SlJrsMXGSaMxW4QNcSOy84WP2UeM EtVu1MqPaEY7yFRre6uPcDHnuyGmJ2Bs9PP3FZbeY7SWF7mQenaeutvBOG5hyxoCQoqn+yw4u0IS iZHaHFwg87/V8Uz0kgaH1VZH45/BNsz3FdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir 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 uxV2KuxV2KuxV2KuxV//2Q== + + + + Adobe PDF library 15.00 + application/pdf + + + Hexanet_Logo + + + 1 + False + False + + 208.139901 + 287.734999 + Millimeters + + + + + Montserrat-Bold + Montserrat + Bold + Open Type + Version 7.200;PS 007.200;hotconv 1.0.88;makeotf.lib2.5.64775 + False + Montserrat-Bold.otf + + + Montserrat-Medium + Montserrat + Medium + Open Type + Version 7.200;PS 007.200;hotconv 1.0.88;makeotf.lib2.5.64775 + False + Montserrat-Medium.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Группа образцов по умолчанию + 0 + + + + Document + AIRobin + xmp.did:aca066aa-6268-b747-bbdb-9b581370de57 + uuid:d5a7bfcd-1c30-486e-9bdd-4b96ee0f26a0 + xmp.did:aca066aa-6268-b747-bbdb-9b581370de57 + proof:pdf + + + + + saved + xmp.iid:aca066aa-6268-b747-bbdb-9b581370de57 + 2022-02-13T12:40:38+02:00 + Adobe Illustrator 24.0 (Windows) + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/XObject<>>>/Thumb 32 0 R/TrimBox[0.0 0.0 590.0 816.0]/Type/Page>> endobj 24 0 obj <>stream +H\KdG+]\b3 ,%!kdc,|X7nfow7\_\7x}wۿo^/xc=gm/?hRgzz~ʻ_ݛEn9v>m<{~B\/ǟ?uSfy +{`[|֮lg_|rgY"tP#}s7}u)֐'@T 5hWCUj}TYoU}<e NNυ/6/ڹZp l (p6mƹ^PgK0^q"8WU>Gzoثβ{8G`KM 2-HR,h+(6 ( /FaP0hZϩl9HoCފr1Y!qB.Eg}ðs8> ۴xk~juN iC "p)]TkDd$'g`OB%Kۼˆz|<],h[|+,9-n5!44NumT[ˀj9T]*ka*'b7hy?Wā^tAl銂1$6jo@Iծ(YTULX\͝j(Z8QBX8T- KZi4mEe2}ߖ5A`OEM!ʲ摟I;Sfǭ]pix2cgX)GAmhSԽe`6#]w>^Ֆl~W sVá{2(u+8 KouciyruA mN/,ܺ)B*K~Z8deT5<I{>XJMH5 * #T΅ޮ= *E/lGti^8ڑDA> dףKI<ɗ;ϽJ'wS]̔^3iJTKk빛qyٻ_q\IEUX|w5eJX! {i̛E[L|TXap衆&HkȪ1Ul(  U!ƮE ix-MbWHT^ZzknC"WկU3{P +T-,5m]B#Q)CϦ)>Ddž6kj߻{a|~@y3-2,DIO,#nҍYܚ᜹'1_ +{ପ .SO\BHt@#Y.GEsu1 C tUK&CLvl!!Cٹ@挋PCaޘD& JFH^LP]&%KPUnլn%࠮m9ܪw?]֪A"6m! b +<8NBtჱHnsZf%ӶA5_w; u*E1NULNz&[KT( "UEDw:4WM?cW 0Rb3:-2kIn9Zgy\h3D!rݏcu Ff!uR2 etcV#Fsā=DeJiNt{NO[i#Zw7}mwkPu{0Wcy +CmL&y< ~ kE>]ՊmE&97[һS6gC$[RB*+r;'oKyyL?ζyL据4.nIʉLKqa7-bB/=i6}OQΖ9MJx2ՍN:%5?p^؜)-PaR.%zlCK4wKP W9- @Z<<mȫA92|:݅yua7JDcd~DhWg}uʤT*^ +<)dQMkYTUG`BR>!sFSS _pc9߫T#gȊ%bD_y9Ѭ#֝ "!4]ro:~&~r"M'ȉl6F/ڡ&uEMҵ_9*Y2^3fBpxHU(w zAsH3{Ms.MQa)5uCI3?| +q qrIa7P?ycj@mQ)뚬mn^ÍZf' hPgp[]+ sqIsؘRG}CܣAͨZy"\F-C_ |`KĂY`:x* zQQT71yݑ&&#]pUƌ5Uir+gZc.kqIwy#.5J;$D;,c3}{ +o=En_k`?}sm?Ҋ=쭶ݥ6 hgLRy~jh0a*i0,[y` j:=vpz7-:eX1bY_`q)X[*3)w)/٪-!i!a +AU!L 'mL=cKF +'1\Y3__fk(qR%Gy{RH\ӬRnwbtZk-fV8jn1^=ÂlnJ +ZU(fw#G2ne'SN9 +ʊnJ_B3{Lh75emv%6XbU5\Q(aDc=BcĚҚl"ϴkm϶s'6D*:BA*;WH^{Q7nF #6"kӇ=7;oS(<Ͼ&Ơ?gʺ)FU +[yvjz8 udwgC6RQNme qP\ʗ;ea3[j &\YF&9^ƶLjv\;4pMj +ףaGNL!aPo76 >RgK Y2y5"L}UILZכ̵aUcnv4t Fqx(z,c.A@n7eLƒ+ +L31]߯;NP[ӦJ M\Ub'#N腴u>ѲwA1V`Uq:/:|tch)ǮS`J[jSQKa)}YIb`A*`CnH$Bt NجftH>n*zLϓ9JpRԃ7R>O7m E( A;xy~F·ߐboCv!8Ԩo _>ՠ|HݑGeěd fTo~Rz$P$[ʰix<3H(n;(" deG8;fQH)G/ޡ8H֫˙a=%ɘ&Ā;7@zxI1[UmtUF,>#ړ(Giy2]mʉͨ0ԟ>1r,vS|XP[4G䖖 ;ȪJUShF[&Gqz hd*'Ѣ'}t7ÿɈzn,4 |x{׮!b|D?– g8V&L3 SdaSHBp7n`۾,\^$kM߅/b!꜏hH!3>4iU8$ W V. ׼_JD$5 %2va0W`CMt\4AԸzv^vZDxW¹20Jf)`jN˜3Ofb>oI.:n^%$#3Vlus$+XD›Nm*0ΞED:m5]8K20% kXIGt*Se;Mّkt=\vgiӤD+vݺKٖ>=[}B`X4E%5b[[=TW[^U~"fmv/~} T|"Prs>Qf]l֔כΉj&geb(_Ș=ƉӚpҩ4{+s5Krli.:2`pf(=O`~E eku :[-#/QhL;|!yIGX;渓nR J$1\_ҍ7x;6`1GnQwܩ0 |M5Nu?tSҦ1OuND{&O[ 7k?dwg)=NRW +}G`B Iֿ#4yDԎiGҵSa6W6Oʜauzt8'3Wvs~k5 Ft#^롍ۡY< /<#ɝsWBC UzءG=F;DŽ7jƛM)]PH cS'y. fѶݶ Z˨@)%Dnh>Y.6/ƓZ7V_30T6;Z.߂S:B+7ZOxdPN'2r"ƔN}aX;mBۓJրڳvr^k}:yZm3jГx#qӓi8lqAAFˋ$ȷYzߎr#;<_I*;O ?Cח29xÝ dХco7:#+TXE5^ya[F/j5b0{<;`v89eֈ]k *'ZA.T3. +ZrktE4P0^߁c+>K V~r"݄}[-O=3]:˘Vy8l&뭮0aU_ߚ)ig5.mγWe[8s@'fײLǩmǕfO;e:aW킏%(]&~:K7*7*@14 4F.A37wb gr:u1tt =c۽qT/̺hҺ3x<1em<0 Te +^m'nhvmr1P97qOD=7~:r9hcϓ,U +*JfO[+B(bFHO:?*-9I]O|~x֠{+)O)N< +%Z:/Xz3`Qƭi%Ho1AV*n/ܛym0=#sB "4J́R_i&A +xtk'Ԡ{R[+pw[G<68CdjU|2W{ݚ\aDٛQG) +:mނ)M<Zyjg-]qFz@e-EO}ݗ}'ZK::lY'1?c:k= ʑD}&wE|d}0z"'%B๕٢AϜRkjF)d9ݱ ko]AҢʠ.}&mLuFQA݅A@V-[ qGBy,p]@I tsv[,~ú?8fVr)po-WkMhͱfW6VeA۬g$/閇vi DVSo 5/Z`43Ok^o.GOA={Tj:Vւ]Izux'Y(/ӝn)GQT 7.47OIoM1>J@'K=UHrY&wo zͦ%Szӈ)5Pxp+>;7j.sGC5})>qC[˸ڟA/W+7e(MCϟ ~w-w79MP7F +(g3"k ;tw;UotNV沥qs5aat8*5tt"CT+p}RɼMXyPn.kKioe7ͭr#ub$#+{tAOvog@{ %OfEݑjmٵ$5%*. ýO$. tȭw)"d%"'eum$n +5=؁g9?ڎD%.O퓮|~)(To\ic;{2i>G T'{Wʤ9?7{J϶:ˊLsWԶ)]4`'К ݑПԬe{cugy?{iT7]-=d7oS4#Q hάsK䙲ID,:ewZz(?xy<u hZlk}:T2LM$vՐI> endobj 32 0 obj <>stream +8;Z\60lk/c%-(j)l.MTt&pb-kI]'".Shp"6Y/)H":-b$m_8.gAdVN@Nn"K2.n2&]B +7E&G^OK*d5:J.+V2Ih;$KoVX36%rD_Se?Z*iQ+,);;Q7<(+8N`f>+^&NLYqgZ?.E[ +-$.(M[GZJ,rr3I%aPhT^$0a!g2Q.05SXOZ+:t%C.6?U/(?I^:Blk)>LN1/4n5MW#' +%i$9sZq%-mq1du-&_<`>8s,8F;]8oOpr5e^BG84.`7g"T$f!!$j85:f\5+>?gbF!U +B%/9:?22sH-]((UI:TTq`QYX%*o69^8]9R +0)QCLDqYWL"/sN@9VR9!]/`WL,LfXT!=Cu8!Zdg\c/L-#UV%pV8j]F'>\5aU^8KL@ +^2O*-e\7sKpT,Q*RE0.:_SRUH%0/J+5L'~> +endstream endobj 33 0 obj [/Indexed/DeviceRGB 255 34 0 R] endobj 34 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 30 0 obj <>stream +Hԗ_ZKhEY@G)bbPK>egf8c^<=sfge2&K샢+* Z'%lN׿䃢"KFÆVVgFx*eM-y'mfKNnY()Wbirm*%[mv3q[,@jwDxoUkni,@ +ZM.)VdMB~;`e̬v'M z{s~O\G<NCn[_[ S + F$0sw(תy!`G%HdtdhG~[ІG=11Ifsb|,2:L]=47zB'?Gf5߽?9E?-I6_Z_Q\r9K˱Xlyy9Ly>ȏ*~:췉X<c8?)vhoC³2 o]<3916:I~ GKVb]}Jqm}}cskkksscxli J$'~A>?}Gǀ.lX[]//#?2:( _͇/~rf6=pv@xd$ +f,8;,xf3D~`og ?i +nn*I,8зwELMdOsESM& +ľwpHyN=ǢY}lB޺ZH}'+r|u}kw(<\gɓݭ5^ ?@a)ē ~{0<|7Wg'G; ~($6~X\Q^W)Y2q`gb<R|{?9Iry{?>}xcrG]2 {п>]?t)c?<~1g'XP){KR:7wwVPiP~o3dyf׷w_= N`Q`xO+ +--)joivqyu}ss}u t(;&Ғ_Ԝ +)JI'`g 2|%_1%SktuF6WZ2 !ZZsh-ƳѱãD$8X01qH>v"B|k{o6"{B=:DÊJO hEo6c,c_v)Bٙ)Iδi3si#%[FdM @@H}D@J'{XNlK1®AM,8Hhϼ ?],!s ѥЁC Ntu!`ڐ<,Hd Us Qz}769 1Bfae[4;7(\txcY \PnPg>} pK9Lnȷ +1<71?N +336159Ioâj9ςO߭r$Nں{0-Xp` F$'\sa[QʲT*) Mȷ\[al/9݊bt>kd2q,-pOj%~?.v !-FTc< q?|>q#Ef͍":hz[mvp qagB :ժ-\'6`S Ԫ)tUճaKk+KXf܄RUjPF翑Z~l̸3M BDsMX#m-h0h tB +aiuzCC#,a4@h zF]bI:#E(PZ XpCuZM=hP@UW:zNPF)E-PW.VC@#%.܂ +BW5T*~FU[[ɖW\YK"T&ZJE%8(/52y" SZr4~\RkMLobj\. 6\.~vxY0[K}9 j\$5H$RrS<.rw?8L@ +p?c>*5)O:C +Nj%bl +endstream endobj 31 0 obj <>stream +H_Q'"( +܂" +UTT yݿ;ؾt~&y䳻DA^W:^|UX\KTW+^deʢR*:+ArYEe*FxRV^!tk| ,Nєk[A|]\&ϗdX3wvuy_-V[#udWfu Ш)OnjA­JEa0FMm uiK=i)hdw}`^.~;[ MS:VH_e2|)A6a@{\ klL[l]0؂?s |nH^Namey|>SG[0!gݽ$}B1?`mUVm. Ƿ `rptt||ɽ/MG0Kݽ,Ր]G-/ + s4}Ak@ON- D/rNmu}#əuuqqv|ga0wS[['v'g|%' ` Թ9Jl#wp kwu mM^$N/ |@1 g fH<͍(>)|7kTy-/Oi0y8uiħ@wO7>Oՙ[KoWUJ\\'?;>upnwwwYjqa|zno.O05y=]lhk/H.Ï#/??) +| #sr;)B)#cهy _?|"p>/qx +?} .+2L_ hݗo߾=ZJ]਴U{{_?AZ dYl>M|f>}t&y4u[VOsڻhn0U9<ՎCH +Ut;| +m%/]߀]_aB͗&%BT$x Y?=8t9]qK+eWýnQHs3  i6-hO {fلk/ ONOOAtIrBF^Hiin06wmKm(P: E* 9PTBb"qt5Fl%ۉU4Ǚ6$ OD'U"CzWh71 #xb> +>T_,QEc6Ff(}ee#=^N9-~s pZ- g)<"obZ\id#0ٹ `\;B:{ݚ/`%xCij,ǎS(<[OI{|AlONqd!1ISW; M$xEF}fr  JId^"=&&Bё > 74xxG ?@t4EW$^9%Hƫrdlh0l.1v1i + ټiik_݁R~Ak_؋R m흐mv 4{nM c I8b d ZaTZ^)NjMz8Nrt;.w@FQxL}Fbٻl3QP3џ>TUViY +h`3IsaeUu-kpa41758qTz/Tqf ]tfv u (%.Ss +YI7X nkkm5:]=U^VR9g$VUMHVۨCzn_^܄zSHj/TVzm&h4³򂕪P jM& THCPT\ZR.j Q*`k`DޓCFYT\B.G?*] +( DV=Pdg:˧[>TR?V x)MA~^Z!RD4_z/GK;d?/ f?s%Kv| ?xQ&EcbO34U1@$ +endstream endobj 27 0 obj [/Indexed/DeviceCMYK 138 37 0 R] endobj 36 0 obj <>/Filter/FlateDecode/Height 102/Intent/Saturation/Length 754/Name/X/Subtype/Image/Type/XObject/Width 95>>stream +HԖٖ!E6[]Y+>99 5x*us6Sdk|sޝ[jyڤ]4gvFø?2;mZ3ӛs"l#2UtD_g ?qw~~Ah%^)Exn0_ +*S?(>ѫ;,oX&O~-ua59*|R_2K?}I e*<;xo>-ޖN@_xm[Gyz0)=5 @51ng<.|:';KcZϖ.go_SoZ5-5miJX/9Ij|xuߗC\؟^L.sRU!@TWՇ/n\ Kѥs#:40D3_k<̳o!^f8=W)q +8f +{Wwo)T78^b gucu;<$/ȈW6)I!ug`l9O|!c`n#=~RL;i ,O{ oh4%#<[`77q[9]=I1Wó97gx}IUwU'`o@񍫣׊Sv.:GJG +endstream endobj 37 0 obj <>stream +~}||{zzyxxwvvutsrqponmmlkkjiihggfedcba`_^^]\\[ZZYXXWVUTSRQQPOONMMLKKJIHGFEDCBBA@@?>>=<<;:987654332110//.--,+*)('&&%$$#""!  +endstream endobj 26 0 obj [/Indexed/DeviceCMYK 138 38 0 R] endobj 35 0 obj <>/Filter/FlateDecode/Height 101/Intent/Saturation/Length 746/Name/X/Subtype/Image/Type/XObject/Width 95>>stream +Hԗz }kOfA̚zpMv9^O9֛ǿS̩Hx~ @/7++Pϲs5m$7J!|U?Vۻ_yEF£qEʗº FQ!hrq +/e!/f/92=Q|5Vlq +oE#5}jzƋ?yH'G"сmf+)P!oG?~I2ܹ#u'/%~|G.A⽅q{xS`SW!I%F|dɈqP7G,(ydfT/_t"O1rtj =N. &frW[ed<||_,6{I| ~{2H(|q>x]񳍎u#U)N}@d-]9%4MэCwGb ERy?1m?65>>Q:(<=N!N돀#|M|e??:uP] /N +endstream endobj 38 0 obj <>stream +~}||{zzyxxwvvutsrqponmmlkkjiihggfedcba`_^^]\\[ZZYXXWVUTSRQQPOONMMLKKJIHGFEDCBBA@@?>>=<<;:987654332110//.--,+*)('&&%$$#""!  +endstream endobj 29 0 obj <> endobj 22 0 obj <> endobj 23 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <>stream +HDOHq?g緥6VAYn$lBTL%ts kuՎ]D4> endobj 42 0 obj <>stream +HTP]HSasVjRgsiF?CeӐȋ.Ͷu^^M*?TTv!Ed?+~V`#t#-*{y4/XfsmQu`nQiR idau=y,3ҟd#ƻA_W\%NTH3$%iRa^Um 77pϣw噯 ͵uDjEAK#Ԅ2 +e0h1# "v-8bS=Dpo so9+1>1n%4,F9BI3)zscgeZu&/q:nPd>(M WBDቤܚ"0>LO +4ȔBks=}H$-hm; +fib(a}$x{5hWp"D`P̞Yq]~SJ&ueJJgcL!/vkDÐfde1ĸ +x҈quLri+X>prhFʐg;#iIg8Rl~(lFZ44=5Q3ęE/"0VK.{j);[aeDzDooskw NL'Bt 13#:tiƛRCQr1zd,)z)h"j))Μݝer*/![ +endstream endobj 28 0 obj <> endobj 7 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 11.0 +%%AI8_CreatorVersion: 24.0.2 +%%For: (dm82) () +%%Title: (Hexanet_Logo.ai) +%%CreationDate: 2/13/2022 12:40 PM +%%Canvassize: 16383 +%%BoundingBox: 0 -751 591 -64 +%%HiResBoundingBox: 0.0003 -750.2861 590.0031 -64.895 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 7.0 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%CMYKProcessColor: 1 1 1 1 ([\721\756\742\754\745\771\745\755\750\745]) +%AI3_TemplateBox: 295.5 -408.5 295.5 -408.5 +%AI3_TileBox: -2.63635 -828.7885 592.6837 13.1315 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 1 +%AI9_ColorModel: 2 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -830.346 258.4605 0.976032 2224 1308 26 0 0 78 87 0 0 1 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:0 0 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 16 0 obj <>stream +%%BoundingBox: 0 -751 591 -64 +%%HiResBoundingBox: 0.0003 -750.2861 590.0031 -64.895 +%AI7_Thumbnail: 112 128 8 +%%BeginData: 15663 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD2EFFCFCAFFCFFD6DFFC9CAFFFFCFC9FD6DFFCFFFCFC9FFC9FFC9 +%C9FD63FFA8FFA6CFA8FFCAC9A7CF9FC1A7CFA0FD65FFCEC9CECACFCFC89F +%CFC9CFFD61FFCAC9CAC9FFCEC7C9A6C8C8FFFFC7A0CFA7FD62FFC8C8CAFF +%C8C7C7C7CFCFC8C9C9CFFD61FFCAC8A5CFCFCFC7C79FC99FC1A0CAC9C9FD +%5FFFC9CFCFCFC8CDCECFC9FFC9C79FC8C9C8CFFD5FFFCFC9CFCFC7C7CDC9 +%C8A5CF9FC1A0C299C8CAFD5EFFC9CFCFCEC7C7C9CFC7C7CFCFC8FFC9C8C9 +%CAFD60FFC8A6C9C8C9A7CEC9C99FC8CACFA0CACAFD60FFC7CFFFCFC1C7C9 +%CF9FC79FC99FC8C9CFFD5FFFA6FFA6C9C9C19FC7C9C19EC1C9CFCFFD62FF +%C9C79FC9C8C19FFFCAC8CAC9C9CFFD61FFA8C9C9C8A7CAA7C9FFCA9FC1A8 +%C9C9FD64FFC9FFC9CF9FC9C9C1C8C9CFFD64FFCFCAA7C9FFC9A0FFA0CFFD +%69FFCAFFFFC9CACFFDFCFFFD4BFFA8FD0FFFA8FD5AFF7D7DA8A827A8A87D +%7DFFA852FF7D527DFF7D52FF7D52A8FD58FFA85227A87D27A8FF277DFF7D +%F8A87D2727FF5252A8FF52FD5AFFA8FFA8FF7DFFA8A8A8FFA8FFA8FFA8A8 +%FFA87DFFFFA8FDCDFFA87DFD0EA8FD60FFA8A87DFD05A87DA87DA87DA87D +%A8A8FDFCFFFDFCFFFDFCFFFDFCFFFD9FFFA17D7D7DA17D7D7DA17D7D7DA1 +%7D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D +%7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA1 +%7D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D +%7DA17D7D7DA17D7D7DF827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%2027F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F8F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F82627F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F8F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F82727 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F8F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F82727F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F8F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F82027F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F8F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F82627F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F8512727 +%2627F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F8F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F8512727F8272720F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F82727F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F8274B27F8522752F85151272776F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F8F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F8262627514B27274B7627764B7B514B5126F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F82727F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F852277C +%27274B7C27C7C1522776F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F8F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F8272651F827F87C9F7C4B52757627 +%9F51272720F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F82027F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F85151527C76517CA0C8C7C8272775A05176F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F8F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F827F8A0C751F8A0C7C79F76759F51762751F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F82627F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827515275C8767C +%51A07C7675C7C1A027765127F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F8514B4B27C8C7A6277C51519EC175 +%9F984BF820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F82727F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F8275176517CC7CDA0A0C7C751A09F7675C19F76F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F8F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%51265275C8C75227C89F27517CF827754B2726F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F82727F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827C77C27769FA0 +%27519FC79F76759F7552F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F8F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F8275176512051C79F9F51C19FC14B7551 +%27F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F82027F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827277627C29FA0C1C79F527BC1517C2727F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F8F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F82620 +%9F75C151529F75F827757527765127F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F82627F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827274B514B51527B51 +%75C19F522727F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F8F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F8F827752751279F754B75512727F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F82727F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F852512727A0277C2727F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F8F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F8272727F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%2727F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F8F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F82027F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%4B5227517651275251272776F8522752F8525227527D2727F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F8F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F8A8A85252FF2727A8 +%7CF852FF2752FF7D277DA8F852A827F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F82627 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F8277D7D5252A85227A852277DA152527D7D +%F87DA827277DF827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F8F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F827F827F827F827F827F827F827F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F82727F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F8272627F8272627F8272027F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F8F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827527D527D527652 +%7DFD07527D4B26F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F82727F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F8272727F8272627F8272727F8272027F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F8F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F82027F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F82627F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F8F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F82727F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F8F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F827F826F827F826F827F826F8 +%27F826F827F826F827F826F827F826F827F826F827F826F827F826F827F8 +%26F827F826F827F826F827F826F827F826F82727F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F8F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F820F827F820F827F820F827F820F827F820F827F820F827F820F827F8 +%20F827F820F827F820F827F820F827F820F827F820F827F820F827F820F8 +%27F82027F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 +%F827F827F827F827F827F827F827F827F827F827F827F827F8527D527D52 +%7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 +%7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 +%7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 +%7D527D527D527D527D527D527D527D527DFDFCFFFDFCFFFDFCFFFDFCFFFD +%A1FFA8FD6DFFA8A8FFFFA8A8FD6AFFA8FFFFA8A8A8FFA87DFFA87DFD63FF +%A8FF52A8A8FFA8FD047D527DA852FD65FF7DFD04A8FF2727A8A8A8FD61FF +%A87DA8A8FF52F87D7D7D52A8A82752FFA8FD60FFA8A8527D7DA852272727 +%A8FF7D7D7DA8FD62FF52F8A8FF52F827F87D2727527DA8A8FD5FFF7DA87D +%527D527D7D52A87D272752A87DA8FD5FFFA87DA8A827F8277D52527DF827 +%2752F8A8FD5FFF7DA8A87DF827527DF827A87D27A87D27527DFD5EFFA8A8 +%7D5227F8A8A85252A8527DA8FF52A8A8FD60FF277DFFA82752A8FF272726 +%7D522752A8FD5FFF52A87DFF7D27F8275227F8277D7DA8FD61FFA8A82727 +%7D272727A852527D7DA8FD62FFA85252277DA8527DFFA8277DA87D7DFD64 +%FFA8FF7DA827A8522752A8A8FD64FFA87DA8A8A85252A827A8A8FD67FFA8 +%7DFFA852A87DA8FD6CFFA8FDFCFFFD48FFA8FFA8FF7DFFA8A8A8FFFFA8FF +%A8A8A8FFA87DFF7D7DA8FD58FFA85227A87D27A8FF277DFF7DF8FF7D2752 +%FF5252A8A827FD5AFF7D7DA8A827A8A87D7DFF7D7D7DA8527DFF7D52FFA8 +%7DFDCDFFFD10A8FD60FFFD04A87DA8A8A87DA8A8A87DA87DA8A8FD2EFFFF +%%EndData + +endstream endobj 17 0 obj <>stream +HWS8?30W"FhC^d[$VVIchi.܀cy=/z$?do {zH1:@FBTVs|(֒*,P^`ύN'.5  LO\(m=gTH^ ?8\0uN5".Q8/K@ ͳ(҄i GG'o^vc;oH_E+B|ww /Ц:؏{1ڋnݗF[! $*@KB~.ʂՙ(=E߯`&Ȍ @V.M׿UsmkxU~LWLu,̽$zaGAC(K} ^㉘AINJyq@%_u&J܏ tQCfELN:N&ȎdnJQe?t~<0Q-noJjVE~a<4Hh5 _L7+k>%Sz!T+.m5ζ!= )]֥m^kVUcVd\`ۛ"cer`8S,$Cgȏ3KB:N+XॏgJgŌZ nq*ڦʮY ^: 0䟧TRj`VPBcij`AZHx 4[YV4. XFJ3WOBliY +RIBP@9-JXDIbWTy\Pq|~SqЩwF?0ЪU+Î9s1ȌZ^Š); +ci|)Vx\ +M@N|jq̋T- &zVb&Ѧ5mPpڤ9u欳2bwRI 0HGJ'.L kV/7\2*Z9O+7wD,si):TU@R?^?$)@YCQ~s`SЩyuiIdkҵET\3}5bhqIb4m O=jp=nMNu`' z? 8x0 L1u?Θdb]@cj%qCz׎v.0]?L+A-1oF[3)xPiiY63$uNYl9Zm֛v+S&+Vgbs#68aZˁ;I psG!Ac{;6FnSk$rlc}rq]ԫボ܍;d +\@$@ 1@g +:li6`+mLHd\٫w< B W#1]O&nƒa] nS3,MxnLyhl~{x޼yky~-N3{f1SPLU +j +)n+/ xTfhC. +؃MYlUO@)C<\"SjNyO{熪 f$b6?e5AuZle+bWs?(3̚nOt3؇~dsstw_ +P[+-b#`䏚9uZZɣ/1fU4`>ek:u-CQvc+*Fz7&^P Q=+-{_l=dp'i + %Ͳ7Rvp4*xSavR)TM"AM˖9A%:%G{z"KN#[vul7)P\I{Lq%wfy[R.$9;of5O"o'")#P@ {c**ӕ2 "!xkݢP]VWF NumUD&J%1Ϡ$i9i$|!!kc$GOM(٥d FSJyZwgvEq\@* l8*mo`i;΃.?i%4EAWUk^^yS2ҥNƬ'nĘ,ٖXVy% 0RlkOni y4.qmtRzՃbI%8 ړ/[oRy޳fmjbCI͇c.yH +(R< ݁}԰1n jbQ`RN`\#NŁCC ]@'cJZlECL~H-B +mOWO)Y:{V[ȷ[cWOi ¸j'3, }} 3|m]"7cr",2`AK'ֿ +5bނ>D\AH}"Zf?f)L/ -,kV恲"  /]'vQTN=ӊC LsUօq6G@ufj9Bv8^WB1hxA裀c ydOAO۱fʢv&q?=Sa0RoL T#1%du< +: k^;`tJf^l4 9Y-W]`P6Q@M;!j4M&G60Ɗ$Ub"IIV̤;Q~Ib56He&^uAUQ[cӍd:*WDeJr8kģcrXeʚS5h'M@y`"ݖ жAo4}X'@osp!s7x _I$̔8yOA +!h +ҀI֣1eKNFAI'½<͑h`2SdjJ0QGm(\9f4J9 9Mst́ x[}#Ě|+'l. odL/ɜENg($yCN?B0i cbn/ +3FG CG4y1\7ѣ!=~ưVuqWZDk'""ŮwfyY#Bl H;Ƀow~1w?Y-~ ߮x:)UL] 0t_a.3w4g_I^/WY_{7y#:UEoAEAD1" E1kĄYTU_~=g>aG)T`#b`Ԉm* &ݳJ6l9= !HO/  +7q<.t*͎`h l_J6tGW 3%Y]TqsOg12ԭ!~l(.h廆@lvhC5k?Őb+.zђzld@NMѨw(+Qi+ɜ3!H:bi-*LA!wn=`d[}Ϸil\ö+O!B6jW=);Pu +8S E.aS*|A3󄪧ʲx ?-aXKmR KPztnLa)I5Έ_U2>R2`ͤ, cfIowcO>#kƈ+ϴӈ9QBVR;7$©Pn~VGW!CHcSvP(jWZ_`Ob Nр2u?eaJ*dߤ!ެ.Ϡ*&˾iF&˻?E|x}\ ާtMP"$% jonKoZ6\&YJ_%ѪJMʧu30^^`ǦqDr0Pl~F1 ],`>&adVF+F'_$>ZcZΞ &ew!h88|zoWkCS*FqޕC_,F^-  */NḌ)N3eU3Y8r70 c $(x[->51뮑|MC:8iIϟ'Z7ޠIش?2])uF WW +mV|需Ӻ!|Aܖ2DpcВ)eHim)C@R,sK@Q~G—|̪5JFPLzl'c|4wM W09ԝlI5ˍJ<<9$ w~/gAdݲ})A6w"M WRaSG; X=?%ZphWi ϸmbp5ފ2Wi -RseHiR榔!|As{[et-d|ouKJ4MЊ߶(ح""S`ֶ֫A|/ș81 l;,T) &L9oyHCެyȇضt@uh8s֖',xl栊%yfc-<Z@-q1Ҭ_.-|`!3ߦىE*9kG؝ P{"DFnkڶٕ_O jk(*;6 5}dzCzW 97d=b٠&4NqH}VCK臆 +[1ep|l}&k: pkh%h [EC~> Q;:@q,APΏOƞ'xǪSw州1wk7qo6͸)O ZA+sRu=ʒXUhMx0ƛISXMVIb`IӞW>|HKi2Y.o 2SJp-T9Ä-e϶U(VqzXrد bU3 eCxMr[qa㱐kQɅ&΂m*uf(V+A{ض[n9uZiżl+eO6:y[Æi<Ǒ_P{OrAZ !ēE_H؇" +_>X<ێ `VӺ1BDH +k?.mDiVxKɺ@U[?wRɴ&= +F;2G/9,[xy+8CWjۙ O[sHUb)oH&uDUP:QXLq4lb86Ӭ]G)qE LOl$BWN{XHAE"jW]KAq1_*r0,٬h";OgDbFzQn41dIԢL}9I'>sSa /rz~4?vR5Rl'Њ`~v02ńO s]wB{Mn:w.^S=|d`cm-W$L{{V]y[Ztzysvl_Iϯ8?٣VXB F2u 'zr +9fNla5Rݲ;m%0Z&z8r=蜔OWw +pB݃o)kt%6.u@Mo<7c!,;OA0}fC7doI2H׊Kyѵ^ozE=:lv_R_aB-?R\ ߉SD#ɘdh8}$[GAhdHVk( +P\NtG]#7?tI,K8@3 +Pguunewfګwf(ml:JrTiO> 7pjrt;w#N'5qxvF'b=(Ãǧ;r 0L/rMӸ.އ49g!`Uu~\졷stZV2qн XpvhmE:lqDZ@t$ ,m/Y`, +3 Ƹp{%7Xl5gT }շ]>ȴEf8'YisvS/hmOmD\0ܟ1+)S~c;Hqa6ŕ[\N)I##a+adຓ}K! WSOJ JgxkzL i,0@FrW쏰9 6g! +F.Y`\#]$0Xl.0^!i&9 Ͱ#׍db2K 7{ҍRl#KPiZuyPϳxwf1(:qmh01Iuq67)z ٜ~h0ˀm]y: |k&b ;Rۘ=\~DNW 5kdfj*%C +/v|1H_&\B抸dzv;Ѧ=I w(C 80 7Ґ`V9M76>y#U1*U6kNM$C"1麙a'g$ [#Y,m$x8#3?ǦJH楗-ꕃ{Ua-?ru N,!&t/N_8~\;H3a#cU# $RԱ r%6Ÿgz ʤU-4L;MrBB 4E( D_O+W`|})#릐#aUgD$6@Ů%1&bb̂'7ɛw?$ Μ9sNܖ087)[ ΛOQϊSNnbfpk4oYp+wR93`Uw4sh(Vr[.6ҎO]0 J&elvjlr!3"ƚ f~\q4+#϶ +]eEN0> Y*'BeBYrCY@W-&=Բ) xG"F&j>Jvߖ*:ZXXI,rB4|[VdڋE<ǢP6wn~-84zϑ6OD}V!k):5@|uO|͹jd68"Ygش m?c&C 4v , !95yniP&@]?"=HNlwT=)1cώ M/B9' tH  +hlJ2ϰo .{%Lj Zh%\7Xė9+0.:w>T6 dNh8[!ӗuo +LQ[Axh:&x:D')+`~rޏ0M4ȱt^`HM ˇ}8lf ܮ ܌Kn{TS~H5քz[4sd.:j/l -FOT^6]02-mkUm`zm_5W/ ICQ'߀:O]E ~S +C4`[o-1LaWi+/jҚ>lp,OF7n);}OŰ;y.s :wgb|xz3 |bN7|;$̘<#r\5o4Ieu&& bJJ>q30j#IG {jhUs˼p|f(wr#zA4YP@_#nm?px]M]vaΨ=ZFk>@&Gqp8^géN@w"|{[%4|z: .J"ٌQYf4rg˕r{%)n(Ѿ`J@a"}Pf{)Y["@Ct#Uwo, rUJ2oizWU~x_?G2Ol u*3O"1kk[M[ZyT8{s6E ?Aea|sAZڙ0j}ٙV?D~9v8]efa{e(Cm?84(17+t=eE-1JӓaDjWjlS%37M8+4:d GcEPT48!@ݸ5^@{6ö[hP>ZnZq:,| [JD]lyt+[d謔ߡkM6q+@Џ^kyږ; lRρ31O)bH&zw38\OUۢbÆJQPأkcosdgY2ט,1۔ +(ĭ#c5'ƣ<;^i`$E {j|.cXk$֯!] i}p=`o^Rjvm9i#wN#/6⫁+.'I0 k-t̤fxcO*7y-*0%y}! L@'[A)l@3f_+붢s.ke RCL#a^+Ir=w=q{}gOw +6OkJLFzX#2zyB$ eM<#D #PK'bP<34Ψ(k[yXwuԙז,9;@JU^sJzsu]_ޯ"[DB^OCbqQ!mpY5:̣Üہj3B{R{fIK! +{>m*T5qvwwx5M? +W2'{ 5`$04Ζ/qFcl`Iz_-q?rOcCElGe<^k U֢L4vL̫; +Z"LeeYʊd +l<2y5A+ز3hB< ;"z_YyGj&+tFk8ӣd3ѡsr.RU*@U3TC^g(Qϡ']B{+]|zf0t:ːטCi  ]2|*\nUdWl F\67IFL#(ͼIb0YzD6Q Sj3̈+2$)~mTՁ?j%/2yOԷ OZ@U^-Y'Y<;<3Kl,fCANAފx=|F{=p, 5B=2cEt9 OTstJuG@JoY 5,#8;:宼dfWk!F(JNDgjvޔp̓5V3-c/1ܡU%v *t͐Sar츉9#V.ExnzIUY?.di~HUcӖqEdZQo8T~n:vhX C|QS٘SZۭ2 oq;MTv DJ8huif2l^e<تXz~(sMGcRвYzeIAхE\|2كנG-gMl%^.p%?4{o2CB&lJ2`?icC*K Mf.ٳ0Yv4']eG\w!qJM؀6ݪ DO x& ĸڂYPQ[(GGeāxv&AQK1tJw`wT6I5*[%L[á䃿H_q i}p=G&n &*"lоxOa6ZJ졬a-qY +n5}&ڬN7h|̟^#ޡ,98(G)qKv;{3y"=mwA 5,&Z:L\(OIL1H4drnh,eYzϐPh>b +2;YY1t=)@ywElE:Jx"'ej98W29n(R" +QxWG6#jJp<84չEņ +*j(jlQc9Xr992kD0\b t]vV +s(WL8VhK,w_fo'N~`:T A.uOO ϣ_˄XagbMw'bN<԰xm_G卯\i'Jix8`3ӥs2c +K:JTT52D$}},j`x0dΣ;*L5_VԱhB˸DGna۽9o] ++sU-% fZ⇽6bn@|ԯ|j^ăx WCq1} [ǐn 6s+Ikt+q`11ݶc =@bLx2z,5zT}jq}(0je-F\xW27KZQrXAz0+$.:,x`;syi +Bj)#Ϲi oUmߔ}!&tX]o^L6GT +F b-znΤVh{ L>O 0=O!K~=ٸ T '0x)agUW)FVG.Q&uEL+cmp 3Z.镢.mQ tNꎐk3aѵÀfM v;C(eI᝿-[PĬI(28h TUHRR Bd~O>EW g& uFi1ü})~%) \t5D&ձGMQfN(`g%: 6xjˇzJ3@ +-`csDu 5D=C%(i',0&+Mq}>0z!/qnd 2G`}ai-p0z6gWY,t3ޠ7n@(Okcp%nhBBBx,L)\pl2xV Pi la%yW.ƺ;Yu}$o)dZ#IIjҵG "i#ĞU}y裡߸ +'|!Kf3O@1re^aHC/{ :4Z逼Q8{f;׮~JEq#̹bؗI؎A&]>5ުa/o!w,4#gg +ں{xs[GW[;xRI>VQXk\|}YZn%_ . ;._vC'{we>܉Ni;,iU4KTW"g?21ps#m8fUM|Y)9K&'Ǭy9WJ_D ŊI5Mo1 x}C4yMu~iǾ7$ ްY5ϐM>WفC۠}Q!!ӝҏrl_f_t}C # gr-IH*Ri<*}hxJe@&)LEڱ%˭7Hi>[^N@!qC-OV;bO=8e7qZN,<&:*G (Cc8xpo$: 8R,pԞ> +2Kmmr9-g;Ne4+obS/"kr +Ty4MB UHs[bs,^3%-XFfbML}i/N(8ʑ*FIvwQ =lŶ$iFyB+ggxzaڼ/dhץvdF|z0[Bf-ތÖdNvn@ռ 6S/=MQsBH8mW-/%[,0B~G?~M{~,#1W o '~dk'LO/':)ze +(q rxD^EAڪ6_Cyr1uU1zYnRҺ6< !s*=e'!tI ۼY]^ 0!30 p%H-d'ze!-!VpUS˘]:S:%R/HnVM%EǮ3PÙ0kNԍ0%KW i[=B0Uz_遃aڹpʓڧu_Z)W Hd>њ3t~BtDV6XdzP+zUL(oбbǶ!'jb +gpoFr݀x} +UAd-+> cy.*a]>9CvySՄ7Ha +qp6/δ㔮J:Š'dѽQ}@P^SX2)7Jrw/xL[R| [`xsZ8mW(RV~7]yrG4X!Ü2 rJjNoVrm1bxg.#D@ʚ7Zt>+8BNbp[zxniʛx5kWAi?߇ }9\Uv oYn8*xܣw:8!&'d/Az%y|pţl.S& +4|"Zx<8j~{4PO1YA; è sW%CX_.j2WTf_.=5|+*;v}VI]8?!z>PdI!3խ h 4KA`l]y}Q%mV^y,+:QJɬ (|ęFQ_V.uot[z%w/#ƴ`}H`mLo@tKoJPBDr*냝6` +o:l8>ՆJ nn7jZcGzRvDDkpJރH}tY[罡N+WҟY}-^F~YJ_/Ax<@~8Mckz]r( pju]Usѯ"7g(( +Xe˗lq:+_u;<-3ev,(2FvEOYQcNP!I ́d9dO~B7?Oȡii:15{eϬ,NJ +&nѐT#hV4&x&TEvv`јz2=x4Kx% +'~=E6HRL PCEyiګlOYE;h@ ݂ Ů"vwv$y>ý_wvgΜ97Mx-e 5+tzUӨ6JŴ8B7 # ?f/@=}Q6Wgp6я1Ur4#x0h^ }4PWs5eoXcav[q%[F$19{apazO[eS /z yͬ2u_WAZ>S`\]L)즮lRcY1^+~`h2X23C` q'VZeC<~[^۽(\S>s $-YV8plEݼ-\O +QD]$+ڋN%6{|/$^E.z0˿讯 9`vˣ(W-S/EKViuO$Pi(G^s!궧qJ=pPth+~yIDCQ\<WО/ov{|*/)yPCuMF>_^CF|;.gAYgۨV sd2<̦q~&++98l# c(d?<Xp|(%ͪhƫ@neWIS`Dêեz.fA.CPN&Q#r&J%Wz 4TXYWUJ-]wS6bG9+ e'ID(˱"7*E}_=M)WwhWt&JUpS>7}Z$CMQ} FR9!`#'$vy'Fٶ9n A^q5oCW +>Y]]ڇAޗ~0_[xNm~yc4eļ,lj#}DXl6.SS뮞] +W 'e_/io ZȖY~j ;pTSI=fjȰ <;zwx0  ?\5Ǫ[?"jZB'4mwm8szŜ~%(}y6@)0~r_N+LvlH]άxSMmU.!j&GyCXtkNf|w8 c~O"wb Rc=u5$K:wE\EN}͸ +KT UƻW𔕝LyxW ih]usMÀ6-D-T752=QEe| *MIF7Aw\asi=X8AEa&ڹ*?0 ;ڜ`޸^6!W.M\CEhsAv` +ǸWN~kq+(yw%2j.hg}OY@.}m M85˼ڸ{X c41󀒰| {&:kMbC[z_koHg<8ߴ&Drlf`KʻfrmN_i" "୑B M\ +,~a]y&{LaRk&#[*|&6)pxTNk)MKhqp#34d%.P[HZ&SǹPh$[elOtfA J!&3_+#eN Z~ٳxψɊ7+3:ގ2m(]or-Bi@>ysl_Ĉ ?_kˈQc^~,󹓈ذLA{ \Ϗܤ܅)wKp94Ʀ[Jg$|»AscAgBq +y2*8[d?IoWc7G&T~G u1Dmk9O'N٘hH +Pr6U]hSr8Dү-^w-eĺǴ w~|~`KcRLHR_yeه= RMR({UCm +endstream endobj 18 0 obj <>stream +HWis>U^,MWDpCq1&[/>]]W??HLE78$p +\cP ØZ!(R'<%SPɶ %(VJ0ujcawr-mwt.;"!(StM';-a@WY7՝ wZ;$s +;h+8D3WV/zEPG=%H.5aj\w٭ 6>Jhؓ>h Zrf?#!};y p ̺ٛ5F 2r-5WWQ/6P`^g &3j(-hBܿ]3A=B鲟Eyh}>M(qcU\, ԯWƘJiO⾳87V1|]|ptגQ/D֠r\cQjA߉J{ +aI зio4'UV2DOLe=`ɒ^DZuԧŗ%S<U߷PND>/BOntE-dϲX">G;lb*xa=VLmNȬCE|m87.OE87Gˋ#W{ĂS[DF]i`]E.&!qAt6~ujR|‡Tiߢ:IR>JJď+xgϒ6t`_yL6Q~# I.bpyѯNM5ԭpF:`z!Y>0H3|`o=Gqn~D-l̅&^b^ P*+[BSJp I"&4=ͽk(q>u_;DC;mm3OZ4DPEfi"M$\Gioϐff!Zw-l-*7 #=i'LmVwE&~ hAF_#bX,ia\x,iE,]yJR|,U`|8b]Xio~xɶV^oJ˜٫ b|9ENHZ%i߂ .w5@ R ⣆#rMO $"/SV.o+<)n4(M(uVNe:CS5VV&=T*&o %yW!`~^?* O}~8bh>v|95P$1=9sGSa7u .:kF杜}|~ʒ/SkKS/SxIF7B?*˄g? (GAuo !,mWʪ`>LK0k5ȶ.> /FH.g1?'\v}tkڑ֛IsٙŔԪK{頁V(Oum_VMbBj=ƧGDh[;Ta:SoP v`b^P#٠@N3 +u襇G)D@S=ɷ֨<wn?Ztf*0t1^i03`:p hi;\U֨/ f Jua.8^+q-A؛ +ZU}$Q:>^:D(L/}e(7J 2j!rRc|}悑JMmU:2s'0 z]ٸ#4XPVQ_ v6Hjo:%|؀K!MdfxXt[G7Tq@!W<ro_f?c}(pX)1]#!rT_f.  !(d +]&@=bw0uB ;;Lgr6L*,Ф '$I{EoݷcW "5ڷbxxzf::(E_i5+ZPEG1UlJh/=qΪ&fH*AEДK6_\Giץ Ϳ)%ҩ] +_bK:;Լ +IRb +6?t{I>"3'ins̭OjW>[{gpe(1H\0h +"QZ Ъ+)7oNhY V;ztt;hg}S)g`"X^a ~<M.UG|S7*hnu#雞/j2l^nfyHKӫYjx詵2`O$Fڷ3gc`Uf 3 VOotS7>nC٭lRt}[|ɒ,]>зμH3uX˿gљéeqҾ;Ef1&V>!`<Մ`dӅ-+h)`1s_ ZS~{X[`Kg{)I`jfb{viEYܫtzY-6cպԷY~F/?Mؒ E+C+Z7J4 9DJ$##4)z:,p M,,u g!]}^ԥi _!@V4r&2dž .Yҧ1V%"e |0,t0DP,2%#UB*-1CJ&rΈJ K]q`)erJk'~w+F墭ulhmC.x-ri(lټ .~Ud\;1A%cwqAV=)[G(^"gzƤPRK#cмc}@K8Ҍ?AF^>),Uzq@2Nh&FH:"qT ă|s~8(3nEI}4 h!ݧuYΫlOi//R A{`f"T`ۉjk/{8R13򌥝Kp] +IcO`3SNP^9>/,PnPؽ&Rt r(N:pI7јSPnS~ >G=X7>W/i9*l=y jXsׅ4YͱClɧ/ +2R%8`zu6$ 0őD2&h#&LF}GU[v L虞g콼H`H[6x +*wXoL#*g#ޮZq {ΜXI5HAԏq4QqB^8Z q]y<̅ב.[`7X*2J)P a `޼2}n>~#K&@V4L*>O`g[YMX¢j;o80Hج>! ȮF m}Ĕ0Gu:+>AW`!T߆V(h|0i w_?N9q&b$ݕ͂\rM|N{}˽ޛ9GMGFY7\'OֈL{$sTj7aH4kɹ 6]¢_-kP.?2ށoFOqObIY2CHs xv +Eo4ڐ{gy\E7PUo97Dv|? FѢ듁f ̱h5V -k mCJ?܏*ﴟ"wo<qX0C^%ISn~s򐻍7ԥ9yRѓvmL[̏]pP(&K1nM_}WVb{ĕ$ MOC9f_/Ġ qP O<] ~`GD gad6Q6a4"<"WS>H7רH;u ʄB JVi ByckZ#o;3nR=zϕ2dttIF !bYE= k>$lB^_5$_?s8(?m +(u:odBra& 7),za! vaoImgbmHoM~8O6 \˶3/5[ū=(T32u +Тnݱ^p|ځh7hkR-Hū9Jaz7i 鼋2ZnG|דhkF0 Tv#U5ZPt5N#cVPV98ތq:[ЩX[a`rL6pOl`Sѽީ0~l~Ѩ0żhCXofGoMSr?4bP'-LR`I+oWy, Alg,22kF!Ė nUi7ѦO//2%q`mF]#9GjoK}Ý/8I> p//b] TN)}flժ%+f1X ׇ35//_E +W+ƙ@ٻz!srKh6_gD 6/BxyKhla#//H z<_1gC8 *DRXE\ c9">*N $HXW N}H"0q,r?)DUY>)CXBHF$(DERU 4YYQ}P K,,9Br]&?N8.Dn +xTY*GHXx!DS) rt(]M;H|#XeEM"* *)5V D=}HᩛxppN)' D>D $TA9#>"v9!XMUE"$)l=+Dw xw""2ʨ =yW [!Xׂ̓^辴 +Ѳ6+G~nxbg[8Myy"$B!C1P>ڛQ#/g+lV4eM>V^39y#{ϩ g^xd@5{|;,"ײ$S{ßs8Ryx= {a3PQ4$w۽S"lFcx}c]~C^$ܽ>gijqm_Eqbz{ۑDwefZVcϝs{*w(~ DSQل`#Й˄v@YɊt< +{FUgBXbP{C* +63.ӝh,`E/qƬ^Uu{贙"CУPY6v!T^r*m@E1eC}JN5sމKEU2ڞH4m!YbVWxcdUĬq X W`@gEчC86۩Ne%w,~ +WcxTSp7Jk1 ֳRlEv[J(U={ +l&牛aW}FgYv1?okTSDR#5:U%`Sw?՘ڡ?Oo^5^:^.jTyfS! - , d՝ޫ`bme bklИֺ&4٫z/_kP*H6ɶ֬SF޵Τ9"-(ow1+nv6.4~V#J,G~ MOŨ.|lTIΘ@.ӏ 7[aԨؑU9٫! +Z& +!ykdE. ~EdeЂmBh!&,=-v5=%̥( vv +׭o.q}yuZ]$zf9ڌBUL)^fBSں0_Roie֥aĚVXk(pOwa^40&i=WTgiz_td0t_mbEcæ'qdcpwIN/L Km {Ղ@!zb3K{ ~£9+]?ץ8"B6xi!S7FVBgFK%M7t P7C=Vp&u>vI ]j$ ?x;9i`ǖ]h,K% p(z5p+miFCU2Аx /ȶRuSZx)d 2{/͞3ܖы[td Cׇ +ѳޑ.eOh|Nh@"q7I`*,tMIIѩY嗃.K&uN@Ll=ꀚj&U1S+FQ +J$^˶VkdfFuqƸM>FApGLz /Cq,;pϝTD0!vƓ6|Ҟ}إ0] iWmkb?x"Gu/LKIhwVv?5tL]´nF\=5`|;";L_#i㍶t)dsu%gw\d1_8i[{Si4B1@֪# B_Ғ)Q1l $)Y{SzwOQT\"LU1s m*B5Waѩ AS<8Jcҏf.* p !I|kXCr)[sHg[8OE2y={F0Y P$;?\ف+Ū igQ"쾁["fYnk50Y7߽ࢲ$ALΣna{d(`i/Z0N7S!QkP;CZ&\Kj|A վS5n$ Q趾 C5;pM4PD3Һ=[ Zw]]a$!LH*9;B +@0[Ɠ{^E=bP5%(dRڳ!42Ng,ȍF6S%Xrja&)c \ mZ3U o<V$ٙ5L_Wr?SmΊF681{Ƚ ~lt/F߅ ZQ~dHsݷ,QhhQt{ +@g|c69-l'':H_ouhMUB AM]yLGv uK-b#.KEQc.osު1'&Q +:ۏHF Қ)@H#_IvS@.@Ê}撮E^nFw͕Dn^P UKVc$s K+࠭|onkRwןB=!}C$FE'B^JV|!O,2L9ИJ6A +@hӽ7W؄\y@B1Zz-ϋ ݂<Ǵ(6nG\UOjb.a&p\ 0ȡC@TkWL ^ctYEɑQrC\i Ax 1lVcu",u}妨9K{qV>Phiv@$ +J:E QOJ87)0'78:DA"t:o;@$w&=$5͹2. ̎' +O* a_齐 C^]etƇ^haOA#ufMZC>1\@92UQf 0B_ ]ẔV=45xHԅɡky:e٦5j%UD{yPS[6mH?(2o( +m9oPw|TR!uTtG.`n[COcp,@hH Zkg%pBw'eі1xD,4 *3u+2/}c8`#TF/싀P*raE9ʱ@펯 3>: %t+JKi6P0\uS9z[R] U +]D_tLWVpFY)c-Y$G1BuzLWbC>m(YݙEڻ'5?{;ȑu7d.W3 "^"$`JPTrM"vv B{8\8i&x}O\^gٙ I_WEBPkbvV<~dUG#רYm'Jo/L +:x0ggnkyLWPVO:̜GN)rjz_##dw-eI_)^0X{0.qjD}5/2H5 +tC`hӆc—V&=Ycp~ ;*lrCӓ +e@hҀL'Pc':*h{z4zivFF FkŇycwObnA<}㬵?炢~CU8Sz$3xѥ]jz\:x,1_ӽ 5v\r+@ಿٮdrv_;4Qֿore-*l8$Q 2%](B{iePΘ8e ?1*b"!ԇ+:WdNmԤxI9`Q y*8 y}S7CXx=qfq(ЕMoTAWQub9 xiNĹPԛcf w=Dj)yZT_ +̜r R x*?5i9 .?_]Z,{n{4ȇ?𪄰3j"?CٲD069ݗ@ac;eB48;hj@5zuy!j5ny6 ZKK!Z<sԄ +J@{"܉0qf+DBP4B@Jcik7:bv#=Z:+ȁGeh+c;η4 Cmѥȃ- =wٹMD ]EO.ԝ_kmWPP HS/.v_4Jzj?rVcf;<"l) j^|(ʄ2K*j92߮ݾHfi$i +) kCʶ̍qU1I g3ҲNfPOEj4;6Huۯ/\>rF~^7!zqNʂ|FA7!V/~ +[&lZ̘o-ºwq <ZD/}1@aat > x.W0P&c1Pz& +NAH78Y;K0μ&w8"\nݷ954Vh.Yi()!ono/{5@A~3$˄RWl +[A~kn+Jo~xڸӥEyĄ:ZF\2ji|3o~OLkj7FBZ6m/@ X#>֘TЍn%d*H~,NVqP_Iѳ55mPB +])AƔԴ]CqALq1bQ8vvq$#KWgMz^?2Y3KXԭMcE"E\"-) .IJħQjo]wE% bw NcTڿi|?Uֵ )GSA;FW,ianѦrbVS֘qϑЧkb_CJGt힮ŔOg yTemzwبl<[0_Fo}6nΓ)ÿ~i|=OEkr-n8f մ /mkEPX:0#QZ;uRQ.%99Qp4@FL)VE|l{ E˲$|،,hB_(m5s19m7ob>3tM Q~ŭx̀ߖ|޵ -B0:/̩rly!nn3I)lSm> FFs$==Xڔav e{)/jPΥ s${?m(rۮh20UG"0۾`Jop4$Y]*^G1%{{A0Pg%<}O9?-+?Gؕ @ ShzwzPyCq0֧8}th X6YO 坾Ą"9*\|eK:VEvSX(-跊+"&S ԅι){ g%DVbڜFCaCKe\]k߁UC!9>*Wh~2sHmW xgTq[^ZVr]^v!*)[l3Zpb+ eX8\֙t6dHସLJ|PPB(Ѷб&_l̍ЪͧM āt$Իc :?ԞIGaoӾ 5I-:p SB(t?_]ć% l`@ڥX; +iRx~?1N = GL NmB.dBv5^\߭R3f:$= T$q)ilG |Pl@$F? ̿Cڐ>o|c`l  D<(/>W=;N2lF%cJ)C?yiQ@.:RҞ%]l'p1dw+XJY{ J۽㟯S0Q-+n|n +[B<Ʊ]jp둴Fww˒:Qxw5|vNԃDS)$h{YQt=g]Αޅqy'So\beszhJTr +wp^Ij*PcΏ$T~A6c[ťomE_KWߵG+ArW;& @)+55CQ;#x,憻FyPTafotZc?_}Zb8Oo&4ÖQ$OƍR:A&Dh nҵ"4ܽl_ôV‹H5\ +oi2dl/)zN]M8x]S_c<> $w)Bz0u]x]tA=Sa +pS~~f\yZrad1T޳8>T鼎cr~6N܈8n`IH涃FmǍRDFyX6>JLkjQMbGr0uȾ/ +|w_4NQMYxtIl/ƴcƯ/NV?7:&?hc ^l-I8lhB锭* +DzpcKd(F$S+ 1P۔_ +]>0kLƔ#[fmL4}-p|7.Zg%ks}s&C1γYTzpc VKD@0׎^Vϡn[oS5K¦[EP"[|=%+zyrXl_:Lbvh> te%B +X(lXI a+|5|alBI9)<*6"|W@c m$UF  $x +dT19B{ + ]x)N0yeAg*}INy$oUI]h\3y˛Z<+80p~h{ȌØR<l\w9Q8KJV;{;Նg( =@@=&V396[?]  %0EI=`tzr tw譈|1B90l$QQT]ȊdåVV1&%/Ec訴[ﵝq:V nuI@jҒ`mY +HbkO?DAdJKۉ̞6/&/Jb%`UeLy6$X#χ䵦a90BMa(I7״mbtŢ<{7[7.3Ytth PSWI#^a;9X 9F_-sY*ᔉ3`{`Jy9FuZz7r5Ԛ" ",RXνZiq."!΍΃tؾ~}1Wk:1Ob;Llv8XF6[f Ojc0>FV| YUE +KQ~.qݬa[j棍ڀ PEl-EateJ<ʁɶt] +Kh78A띨5X}-sևq51 b}PcfC$-89h!x;=anƙbbMm'Ųxk4T 4S5~Bj؅0N"$Oiy n+FSsF3v?_}B`m7w^CFWo +3AI, M +([L<'?9O2"cس)Zjѷ&Y -PPKM=~RebYc ITu[gTIW~xfq<]m6ӑMρQK:JY7HkokU;XftW 3+6)ns0+PBTnKŸ x18uւ|Ւ ۩öKl4[OM߼>.Y2 |G^?_[;a|˂_A߷&,2M}8%}|ΰ|uwʦ"7KM(5Ž J;eK.DlAOf8BQX,tU(4gAy *!h] }_ OΈYfހ֑yO@Їy؞w[oWۺ4)wnt[9n&:u[O<1[ 4֏ JF$ZV,^w}HVXOOcJ)"z p}A +{(gPcָS=F p7VB:("|\nrQ!@ &A@șu(dCnЃn!sł3LS'{G5om0q S6k +rPW2OPVvov}]1(ODDß-@zYcւ KA:n!(|9OǺ-wA͸l,֔ +:!c#^eD|A(yPQ x +t_TE5u|QpQ*P۵)_)ڧӡ9[Zm*N|>d*A +%3\bX?_bI7-(:j8J EYht  !',tQኝvå K5rB,U4"dJtǤA[![ȬAmi}5Ĝ贊<8.EmPd bB,/eX8ڗSN} O A`cڵGgƣ[<3zUP\1%׹E1ksn}@{VL%]CM^N BliPժY},H?__ӼON6 +f"o@Gf}(VA1!xRiԜ O%^}?YD֥C{P/gA8nfPu}c;w?GGIn/ V(& ]GJ&W&8c  +^n:c. _poKJM@J "5՗"R@]h",u)YU@>DWADU=G_SJ#?jrkr57mҕKsq+e[R i9h`%ss*H;\tUk z] z n{XE5IEJQχՐ^~PwK_cDP{`@ga bv&l4 DBXcFɶB!"`8L١3:<ݍ٩c(G|qւ*A,ι$.&G[zY< _ +!Sa?wrF1#}Ht !+Jf`e>|nT]ͮߜTQGb}fk,hQCM0&cH ˆ"ImM@M:T ʫX0^i(4XA{?)/J\~!]8_Ż=Pfmt.OM +ZWwT>?Zv˟P,ȝBhM1b0JDhBۮeAҴG|P,w̙3b>@v=oT'9D+2EUQ҂h`PEǨ1n +< +D鎤$!<) +VӘjWTM7JHMV!%lo}ȭ6)^zml.9&* ?,a)I|c,Ki E#Q%QS2O"E`PJA}H=yKŀ!|115֤pQ)aH"S`Y) 3(LRRDJz!5iq% t-.U)OҺxaAɕpZDwWÕ/1znV:4D:/Vȸ)?W,!K=5ݡ>4b_nǮBhe~.O;]T͞>?NV=] o,9rX66?}D>lY;Mvvܼk(.>WLMώL>WЗE "2!yB&+UW)R迀޻Ytd>,/76SZ .6_;lphzlk}oaxO#{>ÕJ+];6Pp.z. ]&ojs\|Xzع=CM?zc>+/a] ~+US] +)t7k_*U&;U+U::u+ +-NM7k ׍A'@/C5pbgqbؖ14>ٯ>36;8;+l.>V=f)]Zo^ގ~j hjD?޶>sw]j(֖ËJaRT_okYM^j(8g}~q^}Rkѓ 8^a]Ajٖ{XDc4\:D6QG΃s?C[a#{C <86$Q및)6TG6߰d~q X N3˩3-΅?_bV Po柸f"X=79O~lZĠ|҄ROuf++0s- Xt2!w{Df&.[eu ݽbk՚Ytdv${J,Zr|z0bB}ԭ뵽J%m kl]\u3G=ܻC#8n," a}{BMh?-rMF|{1E_lg3r$z[\>3ּ,]^w.';`Q,ŁA rҞߗM>xy_Zv7E%]l'kCw{w{|erWs]Nj 8ymA/w9GE[w[ܚ{V{@rG-'v-Jm}GXw_ўsZ/Wk? ״-θ] /Zmf䉷;[}%ݡs .4po3񛦯.Wk/ܻ}ojJ=6vu~9oB̶8Jwv/,3q qrZ~7OGPIۺuko6|p/z{?.ju^z[^N䒋NԄ{zoS[w.u2 +endstream endobj 19 0 obj <>stream +Hwg'sx!B沁V,0 FP!  t`  +vc0̱cB8.MuMuOk|S|`گl` z `m{`O 0t|plMU\XKXo ks`?f|m/~9? ƿᄡ7}=6G-8 1GcxbaIpv_-fưǵ{)cdؗN1ۗXG~?{Ϯ,;TϾs^[2@-c6Y͌+i#2YCc?_+Rp8u>W{_n;ӿJbq|U%{jw(53"O\1LO{e.ó(,r[sI?А&þ+bͰ﹣??8 +^mo0^{WDޯ7|@ O3錝s֬C~}!=þGwm A'8yo˾wüWfL3qNgsmemeWGܻ.wG8؏D=@.cks.{Ϳf3̳;6dx㙎1V_"5J|#fþ߰svAXcS#K,iL-z.Ѥ\C1OF<<¼U_">dqo?أaOC;3,\g>'ԝ>m.g~6PN1wµsV֗q|]>q`k}\/u=*-Ο&xߑ%y$p~!dDu?,kl`=ߐIWGFo]|@~ _hk6w+\x)Ukk5)1>e{ὮM;5g,eq?֋ 9Y-ܻ=Ug.5Z1b3n$UPSV`c&M%L=#grR{~˺,$i:Ɵn*wMnicy3ǚHcO,qBm# (kMb=mܣd1OS$% d%Jn1j;TwYܣX S +Uyԟ_AITo1{w\1 Y1xߟkN%Gs}\BNx޷Ѭ|,^Y{O`xh@Abē'x_ZK+^:gL<*>xMψ37y^kV+{޶cy3~VM,?^=#oSh]8XuUtZ訦>,L0yP PQǬVb.]pYNBO!ͱ X^yO [W 2sgr!.y:}uD"  ~ӌSm}wNy''nw~Q1w|bxg6KzCuciȐ=QɳKvwM?LC^{.qE=ВU!_y6Y b}J`WGS.O\X[^BJkޑȻWȻ!-oKIC<-|u}/'+s"5GşiETyȩvPlyJRJzSmĻfh~\W^$Z +W:bnԴbhw[HOcCƆՋ'=GzE[Gv>ZZZJ=qRԥ~ooPcW@< ilfiRƆOl=2jK+{{7 >T~ {,,5w>: nKl.Ea+z~~GqQ}9;ΆaȀ%bц$@B`&86`D@( f=;]~u}`tޭUztjsݭ?{c/>[kX[!ן{yvYM? ˼_IhUq/SmorьwUV3쫧b0s?fT9=3jOK}18wz {yGZ\:g>L^>|(3*3#Q ub|ŦC5栊kdYP3VTN~:b(Nd+ +u~?Nx΋/)/~99H*(uϼ7fx>ܞ ?$z)A8&Q |9Enc$:Ϳ/AMk- >$^{~`g3g +"JS؇>2ǽ|4rg<*|]r3?+9Di(:(8Idc_̳=Y1[(:LD@) {|̻~rqL+|Vq&\9}.mϞf0]?;lb1o{}sEoj8>6/6dx6q^u{Z*̙w4f⾳V]m"Z<uҎУ6ӽuμ5e4|g֘?柃/'3z; >:ŴzM""T8Q>?6?|z켥iĘXP ʟ׽Wj>ϒ=k~x_5׊gG^Ծ=^gΈޚp~a֍+iF f"XYN HuYߦck\sIּk3rOeo^ݱay9`/B?X1&ܹjc?؟sbN buE +<u*u\Òg!E#~hVy*?ϜwN׀Zrd z#"3f#^` {/-<'s`~Ux֖-{TV><689{.{1w;|557g 0w-j=Rnj,@迸'M;~w;ZYO"]聫iY/:OEY|Ř%W?.n(EMn1?rOܗ^y&тK >Ko7zm +sZRrޙNgĽFp˅k7ƿşQx}oia]?ĩm5DW3$w0ӜK(% Vz +;a~}|;Z/Hp=4wԾ}Hu=wIڳΦ`_ܬfyY/^N*C8j_?;7 ƼE=}+Mr֔$=1ٳf} + 9*yY^^:iGT Cqw_5o^o,JǬcc)?zzjc>MςgҚW}&r~9&owבw.W)fU Yx;~OCz4.l?ꟃk)$*s\mRJbws3xzRz-caq/ tHsD,,yZvF0۴=O½%G8q'߳wޫ|{mebj/k^ j +=K5_=~~T̗'hL8i3$9|#z+\x~-g54,5P ';3ts}gl_*$gCOBoPyuwk 8/ks\_+vwGKA\/y*{3eY=[9Oʝ}^!^]*ol1j^w! f|88uW\멧5wH<+߰gu"}_MV9rh}\+n㮽nI7QJ)Iz-P8'jYV9yJ|_>cnyN9UldD ̳3#j^6u]6ʽju cCHQRuA|Ȱ\k#Uݥ1&Zz,Sgs{}V1S3 fZFE.,L<|Q|\̓Y/L3^ʻm:ZĬ% ZO#p,5ljcD͟/}*0w_ Zo[K{ǎbkd'JMZm26ӥwDLe|K wIhpB;6ܶirty|\>Rq:>Inal6V{9~kCnx {Ͻ<4}RP9H1Kk#<{M dx.vAZW̙Y0ZgIO=k8Y $,g}:8 .u޷Gdξ]!W%ig)#7A:IY:Dpֽ;x~0睉uD̑]ܵDZ/P#y(,dτؓ,w[ژ_P,'WΑ>{%8ۄ}fp >!ȁs1 bp (b~XcqFgCby|p_٫B5s_F- AC,V1[}Ph@IֻwIt`_@79 kc=U߃F>^:|^ORV1ކ9򅅳ln57{;>Tʌ*sO{̱KSBƠϔr_{Ћ"^ ~Ì>+z6+Orﭷ#y%^(ыxêϠ'2osdK~} +[+3ap&̛mI@2Sx>߭ Xd85n*#WLb/̘ٲy{^+hgx^a~ٟJ[9M)U=Rzgvzٝ.^w#1ݚ_[ΞŬca}x T[\N +endstream endobj 20 0 obj <>stream +HOk@u6;bH!CSJZZMI[[p .iɩ}+Zڝy3o޼$u>aպMV_v[X:宼cyj>}ՏfX}šm%n|m c{gǶspc;?X<WsG]2Hn[ 'HxxiGQS4ǹ'E-rž7wOF$yaRQb}Z7W9Z)# x$2Quޮ +Vb? ʈ}ۇ/(?1RIOꉭB0W0/_!qK ID!yϿYX/Y^A"|gMfᐎ5VixNAxOH'^l &V'>[ L{ŷPIm +xrGie>qy|c>IGZUl7γ4\΢^2u\/K曢Q/pģ^ok-t4*ooX>X_-$U£_uXu% TzEC>N EcI /*t5QbZ*I(p {& +`Iog}X([h#ݼY1HsuGmNvdG@xz~|n<'/g:O|`~̇%9( Su3R'm+-x,! x @} OI£xxs{*0%HKeǂ#^pG,As/C2k:^{Yd'/R3ptXxV?mүz+:L78G'OU6w':O'j<_2|.j=_.&{]ϽȎ΋:;]UKr>//Wu,{^/|SK'ɫYv=m7EyxXML?kϯijUbůQ6+zYO=S5U!g?ψ +endstream endobj 43 0 obj <> endobj xref +0 44 +0000000004 65535 f +0000000016 00000 n +0000000076 00000 n +0000018708 00000 n +0000000000 00000 f +0000018759 00000 n +0000000000 00000 f +0000044321 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000044394 00000 n +0000044611 00000 n +0000045641 00000 n +0000061511 00000 n +0000086069 00000 n +0000108893 00000 n +0000116374 00000 n +0000000000 00000 f +0000041550 00000 n +0000041837 00000 n +0000019274 00000 n +0000030958 00000 n +0000039789 00000 n +0000038141 00000 n +0000044208 00000 n +0000041429 00000 n +0000032160 00000 n +0000035144 00000 n +0000031024 00000 n +0000031598 00000 n +0000031646 00000 n +0000039838 00000 n +0000038190 00000 n +0000039182 00000 n +0000040822 00000 n +0000043047 00000 n +0000042122 00000 n +0000042411 00000 n +0000043352 00000 n +0000117545 00000 n +trailer +<<1CCB97A2F54B8648B04440CA47C266DC>]>> +startxref +117735 +%%EOF diff --git a/docs/logo/Hexanet_Logo.cdr b/docs/logo/Hexanet_Logo.cdr new file mode 100644 index 0000000000000000000000000000000000000000..0580bc5e12636a0339e0a73624aee4c67eaf2afe GIT binary patch literal 45114 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
RGYpDR3 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�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

jK#7L45cu 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 literal 0 HcmV?d00001 diff --git a/docs/logo/g20.png b/docs/logo/g20.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe4a69e58fdb229eb16741ef5f4f67a71597569 GIT binary patch literal 24531 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 GF6@61+41H8 literal 0 HcmV?d00001 diff --git a/docs/logo/logo-yellow.png b/docs/logo/logo-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..d312452a5af179aad1999cae75bdcf880a665487 GIT binary patch literal 15102 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 mXDd`9BK&_kdbRrAkTz60qBE8gpqttNKwd^gx + + + + + + + + + + + + + + + diff --git a/docs/workspace.dio b/docs/workspace.dio new file mode 100644 index 0000000..8ce1fcf --- /dev/null +++ b/docs/workspace.dio @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 64284924d8b8d4f327df2716393c8dea207a2d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 10:57:01 +0100 Subject: [PATCH 12/55] chore(config/source/cli): Replace it with "cli", refs issue #17 --- cli/cli.go | 37 +++++++ cli/context.go | 166 +++++++++++++++++++++++++++++ {config/source/cli => cli}/flag.go | 34 +++--- cli/plugins.go | 4 + cli/provider.go | 112 +++++++++++++++++++ client/client.go | 17 ++- config/config.go | 32 +----- config/source/cli/action.go | 18 ---- config/source/cli/cli.go | 89 ---------------- config/source/cli/plugins.go | 37 ------- config/source/cli/provider.go | 27 ----- config/source/source.go | 8 -- event/event.go | 9 ++ go.mod | 2 +- go.sum | 6 +- log/log.go | 9 ++ registry/config.go | 31 ------ registry/registry.go | 11 ++ types/types.go | 2 +- util/orberrors/orberrors.go | 19 ++-- 20 files changed, 395 insertions(+), 275 deletions(-) create mode 100644 cli/cli.go create mode 100644 cli/context.go rename {config/source/cli => cli}/flag.go (66%) create mode 100644 cli/plugins.go create mode 100644 cli/provider.go delete mode 100644 config/source/cli/action.go delete mode 100644 config/source/cli/cli.go delete mode 100644 config/source/cli/plugins.go delete mode 100644 config/source/cli/provider.go diff --git a/cli/cli.go b/cli/cli.go new file mode 100644 index 0000000..4b95113 --- /dev/null +++ b/cli/cli.go @@ -0,0 +1,37 @@ +// Package cli provides the cli for go-orb. +package cli + +// App represents a CLI Application. +type App struct { + processID string + + Name string + Version string + Usage string + Commands []*Command + Flags []*Flag + NoAction bool + NoGlobalConfig bool + + // Internal + InternalAction func() error +} + +// ProcessID returns the process ID of the application. +func (a *App) ProcessID() string { + return a.processID +} + +// Command is a CLI Command for App. +type Command struct { + Name string + Service string + Category string + Usage string + Flags []*Flag + Subcommands []*Command + NoAction bool + + // Internal + InternalAction func() error +} diff --git a/cli/context.go b/cli/context.go new file mode 100644 index 0000000..ac0a21e --- /dev/null +++ b/cli/context.go @@ -0,0 +1,166 @@ +package cli + +import ( + "context" + "os" + "os/signal" + "sync" + "syscall" +) + +// MainActionName is the name of the "main" action. +const MainActionName = "__main" + +func configureCommands(appContext *AppContext, commands []*Command, previousCommands []string) { + for _, c := range commands { + if !c.NoAction { + c.InternalAction = func() error { + appContext.SelectedCommand = append(previousCommands, c.Name) //nolint:gocritic + appContext.SelectedService = c.Service + + return nil + } + } + + if c.Subcommands != nil { + configureCommands(appContext, c.Subcommands, append(previousCommands, c.Name)) + } + } +} + +// AppContext holds app state of the main application for multiple services. +type AppContext struct { + app *App + cancelFunc context.CancelFunc + + SelectedService string + SelectedCommand []string + + Context context.Context + StopWaitGroup *sync.WaitGroup +} + +// App returns the application. +func (c *AppContext) App() *App { + return c.app +} + +// ProcessID returns the process ID of the application. +func (c *AppContext) ProcessID() string { + return c.app.ProcessID() +} + +// Name returns the name of the application. +func (c *AppContext) Name() string { + return c.app.Name +} + +// Version returns the version of the application. +func (c *AppContext) Version() string { + return c.app.Version +} + +// ExitGracefully exits the application gracefully. +func (c *AppContext) ExitGracefully(exitCode int) { + c.cancelFunc() + c.StopWaitGroup.Wait() + os.Exit(exitCode) +} + +// NewAppContext creates a new Application context. +func NewAppContext(app *App) *AppContext { + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + + appContext := &AppContext{ + app: app, + + Context: ctx, + cancelFunc: cancel, + StopWaitGroup: &sync.WaitGroup{}, + } + + if !app.NoAction { + app.InternalAction = func() error { + appContext.SelectedCommand = []string{MainActionName} + appContext.SelectedService = app.Name + + return nil + } + } + + if !app.NoGlobalConfig { + app.Flags = append(app.Flags, &Flag{ + Name: "config", + Usage: "Config file(s)", + Default: []string{}, + EnvVars: []string{"CONFIG"}, + }) + } + + if app.Commands != nil { + configureCommands(appContext, app.Commands, []string{}) + } + + return appContext +} + +// ServiceContext holds the service state. +type ServiceContext struct { + appContext *AppContext + name string + version string +} + +// App returns the application. +func (c *ServiceContext) App() *App { + return c.appContext.App() +} + +// AppName returns the name of the application. +func (c *ServiceContext) AppName() string { + return c.appContext.Name() +} + +// AppVersion returns the version of the application. +func (c *ServiceContext) AppVersion() string { + return c.appContext.Version() +} + +// Context returns the context of the application. +func (c *ServiceContext) Context() context.Context { + return c.appContext.Context +} + +// StopWaitGroup returns the stop wait group of the application. +func (c *ServiceContext) StopWaitGroup() *sync.WaitGroup { + return c.appContext.StopWaitGroup +} + +// ProcessID returns the process ID of the application. +func (c *ServiceContext) ProcessID() string { + return c.appContext.ProcessID() +} + +// Name returns the name of the service. +func (c *ServiceContext) Name() string { + return c.name +} + +// Version returns the version of the service. +func (c *ServiceContext) Version() string { + return c.version +} + +// ExitAppGracefully exits the application gracefully. +func (c *ServiceContext) ExitAppGracefully(exitCode int) { + c.appContext.ExitGracefully(exitCode) +} + +// NewServiceContext creates a new Service context for the given service. +func NewServiceContext(appContext *AppContext, name string, version string) *ServiceContext { + return &ServiceContext{ + appContext: appContext, + name: name, + version: version, + } +} diff --git a/config/source/cli/flag.go b/cli/flag.go similarity index 66% rename from config/source/cli/flag.go rename to cli/flag.go index 3a669b7..79b16e2 100644 --- a/config/source/cli/flag.go +++ b/cli/flag.go @@ -5,9 +5,14 @@ package cli import ( "fmt" - "strings" ) +// FlagConfigPath is a config path for a flag. +type FlagConfigPath struct { + Path []string + IsGlobal bool +} + // FlagOption is an option for NewFlag. type FlagOption func(*Flag) @@ -18,7 +23,7 @@ type Flag struct { Usage string // The path in map(\[string\])+any - ConfigPath []string + ConfigPaths []FlagConfigPath Default any Value any @@ -42,36 +47,29 @@ func NewFlag[T any]( return &options } -// ConfigPath sets the ConfigPath for the flag. -func ConfigPath(n string) FlagOption { - return func(o *Flag) { - o.ConfigPath = strings.Split(n, ".") - } -} - -// ConfigPathSlice is the same as ConfigPath but it accepts a slice. -func ConfigPathSlice(n []string) FlagOption { +// FlagConfigPaths appends the config paths for the flag. +func FlagConfigPaths(n ...FlagConfigPath) FlagOption { return func(o *Flag) { - o.ConfigPath = n + o.ConfigPaths = append(o.ConfigPaths, n...) } } -// EnvVars set's environment variables for the flag. -func EnvVars(n ...string) FlagOption { +// FlagEnvVars set's environment variables for the flag. +func FlagEnvVars(n ...string) FlagOption { return func(o *Flag) { o.EnvVars = n } } -// Usage set's the usage string for the flag. -func Usage(n string) FlagOption { +// FlagUsage set's the usage string for the flag. +func FlagUsage(n string) FlagOption { return func(o *Flag) { o.Usage = n } } -// Default sets the flags default. -func Default[T any](n T) FlagOption { +// FlagDefault sets the flags default. +func FlagDefault[T any](n T) FlagOption { return func(o *Flag) { o.Default = n } diff --git a/cli/plugins.go b/cli/plugins.go new file mode 100644 index 0000000..c24f532 --- /dev/null +++ b/cli/plugins.go @@ -0,0 +1,4 @@ +package cli + +// ParserFunc is a provider function type for parsing flags. +type ParserFunc func(appContext *AppContext, args []string) ([]*Flag, error) diff --git a/cli/provider.go b/cli/provider.go new file mode 100644 index 0000000..821a937 --- /dev/null +++ b/cli/provider.go @@ -0,0 +1,112 @@ +package cli + +import ( + "net/url" + + "github.com/go-orb/go-orb/codecs" + "github.com/go-orb/go-orb/config" + "github.com/go-orb/go-orb/config/source" + "github.com/go-orb/go-orb/types" +) + +// ProvideSingleServiceContext provides a single service context for the application. +func ProvideSingleServiceContext(appContext *AppContext) (*ServiceContext, error) { + return NewServiceContext(appContext, appContext.Name(), appContext.Version()), nil +} + +// ProvideServiceName extracts the service name from the service context. +func ProvideServiceName(serviceContext *ServiceContext) (types.ServiceName, error) { + return types.ServiceName(serviceContext.Name()), nil +} + +// ProvideServiceVersion extracts the service version from the service context. +func ProvideServiceVersion(serviceContext *ServiceContext) (types.ServiceVersion, error) { + return types.ServiceVersion(serviceContext.Version()), nil +} + +// ProvideParsedFlagsFromArgs provides parsed flags from the app context. +func ProvideParsedFlagsFromArgs(appContext *AppContext, parser ParserFunc, args []string) ([]*Flag, error) { + return parser(appContext, args) +} + +func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { + for _, cp := range flag.ConfigPaths { + sections := cp.Path[:len(cp.Path)-1] + + if !cp.IsGlobal { + sections = append(globalSections, sections...) + } + + data := cliResult + for _, s := range sections { + if tmp, ok := data[s]; ok { + switch t2 := tmp.(type) { + case map[string]any: + data = t2 + default: + // Should never happen. + data = cliResult + } + } else { + tmp := map[string]any{} + data[s] = tmp + data = tmp + } + } + + data[cp.Path[len(cp.Path)-1]] = flag.Value + } +} + +// ProvideConfigData provides config data from serviceContext and flags. +func ProvideConfigData(serviceContext *ServiceContext, flags []*Flag) (types.ConfigData, error) { + results := types.ConfigData{} + + mJSON, err := codecs.GetMime("application/json") + if err != nil { + return nil, err + } + + cliResult := source.Data{ + Data: make(map[string]any), + Marshaler: mJSON, + } + + results = append(results, cliResult) + + for _, flag := range flags { + // The config flag is a special case, as you can add additional config files. + // E.g. `--config cfg-a.yaml --config cfg-b.yaml`, here we keep track of them. + if flag.Name == "config" { + var ( + urls []string + ok bool + ) + + if urls, ok = flag.Value.([]string); !ok { + // We ignore this here if the user developed another config variable. + continue + } + + for _, t := range urls { + u, err := url.Parse(t) + if err != nil { + return nil, err + } + + config, err := config.Read([]*url.URL{u}) + if err != nil { + return nil, err + } + + results = append(results, config...) + } + + continue + } + + flagToMap(types.SplitServiceName(serviceContext.Name()), flag, cliResult.Data) + } + + return results, nil +} diff --git a/client/client.go b/client/client.go index 1abd02c..931f5a9 100644 --- a/client/client.go +++ b/client/client.go @@ -33,6 +33,7 @@ type Client interface { // With closes all transports and configures the client with the given options. With(opts ...Option) error + // ResolveService resolves a service to a list of nodes. ResolveService(ctx context.Context, service string, preferredTransports ...string) (NodeMap, error) // NeedsCodec has to do node resolving and then selects the right transport for that node, @@ -119,12 +120,13 @@ func (r *Request[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*re } // Run the configured Selector to get a node from the resolved nodes. - r.node, err = opts.Selector(ctx, r.service, nodes, opts.PreferredTransports, opts.AnyTransport) + node, err := opts.Selector(ctx, r.service, nodes, opts.PreferredTransports, opts.AnyTransport) if err != nil { - r.node = nil return nil, err } + r.node = node + return r.node, nil } @@ -242,3 +244,14 @@ func Provide( return provider(name, configs, components, cLogger, reg, opts...) } + +// ProvideNoOpts provides a new client without options. +func ProvideNoOpts( + name types.ServiceName, + configs types.ConfigData, + components *types.Components, + logger log.Logger, + reg registry.Type, +) (Type, error) { + return Provide(name, configs, components, logger, reg) +} diff --git a/config/config.go b/config/config.go index bb92e9a..7867e22 100644 --- a/config/config.go +++ b/config/config.go @@ -68,11 +68,7 @@ func walkMap(sections []string, in map[string]any) (map[string]any, error) { // // By default it will error out if any of these config URLs fail, but you can // ignore errors for a single url by adding "?ignore_error=true". -// -// prependSections is for url's that don't support sections (cli for example), -// their result will be prepended, also you can add sections to a single url -// with "?add_section=true". -func Read(urls []*url.URL, prependSections []string) (types.ConfigData, error) { +func Read(urls []*url.URL) (types.ConfigData, error) { result := types.ConfigData{} for _, myURL := range urls { @@ -93,32 +89,6 @@ func Read(urls []*url.URL, prependSections []string) (types.ConfigData, error) { return result, dResult.Error } - // Read additional Configs from the config Source if any. - if len(dResult.AdditionalConfigs) > 0 { - aDatas, aErr := Read(dResult.AdditionalConfigs, prependSections) - result = append(result, aDatas...) - - if aErr != nil { - return result, aErr - } - } - - // Prepend the result with sections if required. - if len(prependSections) > 0 && (configSource.PrependSections() || - myURL.Query().Get("add_section") == "true") { - data := map[string]any{} - prependResult := data - - for _, s := range prependSections[:len(prependSections)-1] { - tmp := map[string]any{} - data[s] = tmp - data = tmp - } - - data[prependSections[len(prependSections)-1]] = dResult.Data - dResult.Data = prependResult - } - result = append(result, dResult) } diff --git a/config/source/cli/action.go b/config/source/cli/action.go deleted file mode 100644 index 377dced..0000000 --- a/config/source/cli/action.go +++ /dev/null @@ -1,18 +0,0 @@ -package cli - -// SelectedAction is a helper struct to hold the service name and the action when an cli app chooses it. -type SelectedAction struct { - ServiceName string - Action string -} - -// Set updates its values. -func (s *SelectedAction) Set(sName string, action string) { - s.ServiceName = sName - s.Action = action -} - -// String returns a human readable string. -func (s *SelectedAction) String() string { - return s.ServiceName + ": " + s.Action -} diff --git a/config/source/cli/cli.go b/config/source/cli/cli.go deleted file mode 100644 index 85bfa7b..0000000 --- a/config/source/cli/cli.go +++ /dev/null @@ -1,89 +0,0 @@ -// Package cli provides the CLI config component of go-micro. -package cli - -import ( - "net/url" - - "github.com/go-orb/go-orb/config/source" -) - -// ParseFunc is the subplugin of source/cli. -type ParseFunc func() source.Data - -var _ (source.Source) = (*Source)(nil) - -// Source cli reads flags and environment variables into a config struct. -type Source struct { - parser ParseFunc -} - -// New creates a new cli source. -func New(parser ParseFunc) source.Source { - return &Source{parser: parser} -} - -// Schemes returns the supported schemes by this plugin. -func (s *Source) Schemes() []string { - return []string{"cli"} -} - -// PrependSections indicates whether this needs sections to be prepended, -// which is true in this case. -func (s *Source) PrependSections() bool { - return true -} - -// String returns the name of this plugin. -func (s *Source) String() string { - return "cli" -} - -// Read creates the subplugin for the given url, -// creates its config after and then executes it. -func (s *Source) Read(_ *url.URL) source.Data { - return s.parser() -} - -// ParseFlags takes the list of flags and parses them into a map[string]any -// contained inside the result. -func ParseFlags(result *source.Data, flags []*Flag) { - for _, flag := range flags { - // The config flag is a special case, as you can add additional config files. - // E.g. `--config cfg-a.yaml --config cfg-b.yaml`, here we keep track of them. - if flag.Name == "config" { - if tmp, ok := flag.Value.([]string); ok { - for _, t := range tmp { - u, err := url.Parse(t) - if err != nil { - continue - } - - result.AdditionalConfigs = append(result.AdditionalConfigs, u) - } - } - - continue - } - - sections := flag.ConfigPath[:len(flag.ConfigPath)-1] - - data := result.Data - for _, s := range sections { - if tmp, ok := data[s]; ok { - switch t2 := tmp.(type) { - case map[string]any: - data = t2 - default: - // Should never happen. - data = result.Data - } - } else { - tmp := map[string]any{} - data[s] = tmp - data = tmp - } - } - - data[flag.ConfigPath[len(flag.ConfigPath)-1]] = flag.Value - } -} diff --git a/config/source/cli/plugins.go b/config/source/cli/plugins.go deleted file mode 100644 index dceb6ec..0000000 --- a/config/source/cli/plugins.go +++ /dev/null @@ -1,37 +0,0 @@ -// Package cli provides cli. -package cli - -import ( - "errors" - - "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/util/container" -) - -var ( - // ErrFlagExists is returned when the given element exists in the flag container. - ErrFlagExists = errors.New("element exists already") -) - -//nolint:gochecknoglobals -var ( - // Flags is the global flag container where you have to register flags with. - Flags = container.NewList[*Flag]() -) - -func init() { - // Logger can't import config/source/cli thats why this is here. - Flags.Set(NewFlag( - "logger", - log.DefaultPlugin, - ConfigPathSlice([]string{"logger", "plugin"}), - Usage("Logger to use (e.g. slog)."), - )) - - Flags.Set(NewFlag( - "config", - []string{}, - ConfigPathSlice([]string{"config"}), - Usage("Config file"), - )) -} diff --git a/config/source/cli/provider.go b/config/source/cli/provider.go deleted file mode 100644 index 061ed66..0000000 --- a/config/source/cli/provider.go +++ /dev/null @@ -1,27 +0,0 @@ -package cli - -import ( - "net/url" - - "github.com/go-orb/go-orb/config" - "github.com/go-orb/go-orb/config/source" - "github.com/go-orb/go-orb/types" -) - -// ProvideConfigData provides configData from cli, this requires for example urfave.Provide to be registered first. -func ProvideConfigData(serviceName types.ServiceName, cliParser ParseFunc) (types.ConfigData, error) { - if err := source.Plugins.Add(New(cliParser)); err != nil { - return nil, err - } - - u, err := url.Parse("cli://") - if err != nil { - return nil, err - } - - cfgSections := types.SplitServiceName(serviceName) - - data, err := config.Read([]*url.URL{u}, cfgSections) - - return data, err -} diff --git a/config/source/source.go b/config/source/source.go index 97af0d1..d24d60c 100644 --- a/config/source/source.go +++ b/config/source/source.go @@ -25,10 +25,6 @@ type Data struct { Marshaler codecs.Marshaler // If there was an error while processing the URL. Error error - - // AdditionalConfigs is a list of configs that we also have to read. - // or that have been injected by config.Read(). - AdditionalConfigs []*url.URL } // Source is a config source. @@ -36,10 +32,6 @@ type Source interface { // Schemes is a slice of schemes this reader supports. Schemes() []string - // PrependSections indicates whether config.Read() has to prepend the result - // with sections. - PrependSections() bool - // Read reads the url in u and returns it as map[string]any. Read(u *url.URL) Data diff --git a/event/event.go b/event/event.go index e3c0aba..abb9f4e 100644 --- a/event/event.go +++ b/event/event.go @@ -205,3 +205,12 @@ func Provide( return instance, nil } + +// ProvideNoOpts creates a new client instance with the implementation from cfg.Plugin. +func ProvideNoOpts( + name types.ServiceName, + configs types.ConfigData, + components *types.Components, + logger log.Logger) (Handler, error) { + return Provide(name, configs, components, logger) +} diff --git a/go.mod b/go.mod index 9fa434d..fb5301c 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect golang.org/x/mod v0.24.0 // indirect golang.org/x/sync v0.12.0 // indirect - golang.org/x/tools v0.30.0 // indirect + golang.org/x/tools v0.31.0 // indirect ) // Fixing ambiguous import: found package google.golang.org/genproto/googleapis/api/annotations in multiple modules. diff --git a/go.sum b/go.sum index dea8e5e..44aa13a 100644 --- a/go.sum +++ b/go.sum @@ -24,8 +24,6 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -40,8 +38,6 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -74,4 +70,6 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58 golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/log/log.go b/log/log.go index 70fcc68..78081e1 100644 --- a/log/log.go +++ b/log/log.go @@ -142,6 +142,15 @@ func Provide( return logger, nil } +// ProvideNoOpts provides a new logger without options. +func ProvideNoOpts( + serviceName types.ServiceName, + configs types.ConfigData, + components *types.Components, +) (Logger, error) { + return Provide(serviceName, configs, components) +} + // WithLevel creates a copy of the logger with a new level. // It will inherit all the fields and the context from the parent logger. func (l Logger) WithLevel(level string) Logger { diff --git a/registry/config.go b/registry/config.go index b9da6ce..924d60f 100644 --- a/registry/config.go +++ b/registry/config.go @@ -1,11 +1,5 @@ package registry -import ( - "errors" - - "github.com/go-orb/go-orb/config/source/cli" -) - //nolint:gochecknoglobals var ( // DefaultConfigSection is the section in the config to use. @@ -46,31 +40,6 @@ type ConfigType interface { config() *Config } -func init() { - // Register registry CLI flags. - err := cli.Flags.Add(cli.NewFlag( - "registry", - DefaultRegistry, - cli.ConfigPathSlice([]string{"registry", "plugin"}), - cli.Usage("Registry for discovery. etcd, mdns"), - cli.EnvVars("REGISTRY"), - )) - if err != nil && !errors.Is(err, cli.ErrFlagExists) { - panic(err) - } - - err = cli.Flags.Add(cli.NewFlag( - "registry_timeout", - DefaultTimeout, - cli.ConfigPathSlice([]string{"registry", "timeout"}), - cli.Usage("Registry timeout in milliseconds."), - cli.EnvVars("REGISTRY_TIMEOUT"), - )) - if err != nil && !errors.Is(err, cli.ErrFlagExists) { - panic(err) - } -} - // TODO(jochumdev): this config misses things compared to v4, should they be added here? // Config is the configuration that can be used in a registry. diff --git a/registry/registry.go b/registry/registry.go index 353c0ae..6751374 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -141,3 +141,14 @@ func Provide( return instance, nil } + +// ProvideNoOpts is the registry provider for wire without options. +func ProvideNoOpts( + name types.ServiceName, + version types.ServiceVersion, + configs types.ConfigData, + components *types.Components, + logger log.Logger, +) (Type, error) { + return Provide(name, version, configs, components, logger) +} diff --git a/types/types.go b/types/types.go index e369a28..587e817 100644 --- a/types/types.go +++ b/types/types.go @@ -35,7 +35,7 @@ type ServiceVersion string // service: // ... // ``` -func SplitServiceName(serviceName ServiceName) []string { +func SplitServiceName[T ~string](serviceName T) []string { return strings.Split(string(serviceName), DefaultSeperator) } diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index c815b76..c487314 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -76,8 +76,8 @@ func New(code int, message string) *Error { } } -// NewHTTP creates the HTTP error from the given code. -func NewHTTP(code int) *Error { +// newHTTP creates the HTTP error from the given code. +func newHTTP(code int) *Error { return &Error{ Code: code, Message: strings.ToLower(http.StatusText(code)), @@ -87,6 +87,8 @@ func NewHTTP(code int) *Error { // HTTP returns an orb error with the given status code and a static message. func HTTP(code int) *Error { switch code { + case 503: + return ErrUnavailable case 500: return ErrInternalServerError case 499: @@ -98,7 +100,7 @@ func HTTP(code int) *Error { case 400: return ErrBadRequest default: - return NewHTTP(code) + return newHTTP(code) } } @@ -137,9 +139,10 @@ func As(err error) (*Error, bool) { // A list of default errors. var ( ErrUnimplemented = New(http.StatusInternalServerError, "Unimplemented") - ErrInternalServerError = NewHTTP(http.StatusInternalServerError) - ErrUnauthorized = NewHTTP(http.StatusUnauthorized) - ErrRequestTimeout = NewHTTP(http.StatusRequestTimeout) - ErrBadRequest = NewHTTP(http.StatusBadRequest) - ErrCanceled = NewHTTP(499) + ErrUnavailable = New(http.StatusServiceUnavailable, "Unavailable") + ErrInternalServerError = newHTTP(http.StatusInternalServerError) + ErrUnauthorized = newHTTP(http.StatusUnauthorized) + ErrRequestTimeout = newHTTP(http.StatusRequestTimeout) + ErrBadRequest = newHTTP(http.StatusBadRequest) + ErrCanceled = newHTTP(499) ) From 5994b6de19a3caf588c4025b0a6cb1246c5d6bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 11:41:33 +0100 Subject: [PATCH 13/55] fix(orberrors): fix wraping by copying the error. --- util/orberrors/orberrors.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index c487314..6015b01 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -37,15 +37,17 @@ func (e *Error) Toerror() error { return e } -// Wrap wraps another error. +// Wrap clones this error and wraps another error. func (e *Error) Wrap(err error) *Error { if e == nil { return nil } - e.Wrapped = err - - return e + return &Error{ + Code: e.Code, + Message: e.Message, + Wrapped: err, + } } // Unwrap returns the wrapped error. @@ -65,7 +67,7 @@ func (e *Error) Is(err error) bool { return false } - return orberr.Code == e.Code && orberr.Message == e.Message && errors.Is(orberr.Wrapped, e.Wrapped) + return orberr.Code == e.Code && orberr.Message == e.Message } // New creates a new orb error with the given parameters. From 038ba03c3f378850fb53c8bcccfbcafaf617806c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 15:11:03 +0100 Subject: [PATCH 14/55] chore(client): Rename Call() -> Request() #18 --- client/backoff.go | 4 ++-- client/client.go | 46 ++++++++++++++++++++++---------------------- client/middleware.go | 20 +++++++++---------- go.sum | 2 -- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/client/backoff.go b/client/backoff.go index b8401e3..f650259 100644 --- a/client/backoff.go +++ b/client/backoff.go @@ -10,7 +10,7 @@ const maxAttempts = 13 const backOffSeconds = 120 // BackoffFunc is the type for backoff funcs. -type BackoffFunc func(ctx context.Context, req Request[any, any], attempts int) (time.Duration, error) +type BackoffFunc func(ctx context.Context, req Req[any, any], attempts int) (time.Duration, error) // exponentialDo is a function x^e multiplied by a factor of 0.1 second. // Result is limited to 2 minute. @@ -23,6 +23,6 @@ func exponentialDo(attempts int) time.Duration { } // BackoffExponential uses expentionalDo to calc the duration to wait. -func BackoffExponential(_ context.Context, _ Request[any, any], attempts int) (time.Duration, error) { +func BackoffExponential(_ context.Context, _ Req[any, any], attempts int) (time.Duration, error) { return exponentialDo(attempts), nil } diff --git a/client/client.go b/client/client.go index 931f5a9..2af9991 100644 --- a/client/client.go +++ b/client/client.go @@ -38,13 +38,13 @@ type Client interface { // NeedsCodec has to do node resolving and then selects the right transport for that node, // it then has to return whatever the selected transport needs a codec or if it does encoding internaly. - NeedsCodec(ctx context.Context, req *Request[any, any], opts ...CallOption) bool + NeedsCodec(ctx context.Context, req *Req[any, any], opts ...CallOption) bool - // Call with encoding on client side. - Call(ctx context.Context, req *Request[any, any], result any, opts ...CallOption) (*RawResponse, error) + // Request with encoding on client side. + Request(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) (*RawResponse, error) - // CallNoCodec is the same as Call but without encoding. - CallNoCodec(ctx context.Context, req *Request[any, any], result any, opts ...CallOption) error + // RequestNoCodec is the same as Request but without encoding. + RequestNoCodec(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) error } // Type is the client type it is returned when you use ProvideClient @@ -62,8 +62,8 @@ type Response[T any] struct { Body T } -// Request is a request for Client. -type Request[TResp any, TReq any] struct { +// Req is a request for Client. +type Req[TResp any, TReq any] struct { service string endpoint string @@ -76,22 +76,22 @@ type Request[TResp any, TReq any] struct { } // Service returns the Service from the request. -func (r *Request[TResp, TReq]) Service() string { +func (r *Req[TResp, TReq]) Service() string { return r.service } // Endpoint returns the Endpoint from the request. -func (r *Request[TResp, TReq]) Endpoint() string { +func (r *Req[TResp, TReq]) Endpoint() string { return r.endpoint } -// Request returns the Request. -func (r *Request[TResp, TReq]) Request() TReq { +// Req returns the Request. +func (r *Req[TResp, TReq]) Req() TReq { return r.request } // Node returns the Node. -func (r *Request[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*registry.Node, error) { +func (r *Req[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*registry.Node, error) { if r.node != nil { return r.node, nil } @@ -130,15 +130,15 @@ func (r *Request[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*re return r.node, nil } -// Call forward's the Request to Client.Call() and decodes the result into resp with the type TResp. -func (r *Request[TResp, TReq]) Call(ctx context.Context, client Client, opts ...CallOption) (resp *TResp, err error) { +// Request forward's the Request to Client.Request() and decodes the result into resp with the type TResp. +func (r *Req[TResp, TReq]) Request(ctx context.Context, client Client, opts ...CallOption) (resp *TResp, err error) { r.client = client var result = new(TResp) // Create a [any, any] copy of Request to forward it. // TODO(jochumdev): see if there's a better way to do this. - fwReq := &Request[any, any]{ + fwReq := &Req[any, any]{ service: r.service, endpoint: r.endpoint, request: r.request, @@ -147,7 +147,7 @@ func (r *Request[TResp, TReq]) Call(ctx context.Context, client Client, opts ... } if r.client.NeedsCodec(ctx, fwReq, opts...) { - cresp, cerr := r.client.Call(ctx, fwReq, result, opts...) + cresp, cerr := r.client.Request(ctx, fwReq, result, opts...) if cerr != nil { return result, cerr } @@ -165,7 +165,7 @@ func (r *Request[TResp, TReq]) Call(ctx context.Context, client Client, opts ... return result, nil } - cerr := r.client.CallNoCodec(ctx, fwReq, result, opts...) + cerr := r.client.RequestNoCodec(ctx, fwReq, result, opts...) return result, cerr } @@ -183,8 +183,8 @@ func NewRequest[TResp any, TReq any]( service string, endpoint string, req TReq, -) *Request[TResp, TReq] { - return &Request[TResp, TReq]{ +) *Req[TResp, TReq] { + return &Req[TResp, TReq]{ service: service, endpoint: endpoint, @@ -192,13 +192,13 @@ func NewRequest[TResp any, TReq any]( } } -// Call makes a call with the client, it's a shortcut for NewRequest(...).Call(...) +// Request makes a request with the client, it's a shortcut for NewRequest(...).Request(...) // Example: // -// resp , err := client.Call[FooResponse](context.Background(), clientWire, "service1", "Say.Hello", fooRequest) +// resp , err := client.Request[FooResponse](context.Background(), clientWire, "service1", "Say.Hello", fooRequest) // // Response will be of type *FooResponse. -func Call[TResp any, TReq any]( +func Request[TResp any, TReq any]( ctx context.Context, client Client, service string, @@ -206,7 +206,7 @@ func Call[TResp any, TReq any]( req TReq, opts ...CallOption, ) (*TResp, error) { - return NewRequest[TResp](service, endpoint, req).Call(ctx, client, opts...) + return NewRequest[TResp](service, endpoint, req).Request(ctx, client, opts...) } // Provide creates a new client instance with the implementation from cfg.Plugin. diff --git a/client/middleware.go b/client/middleware.go index e3182ee..0e18202 100644 --- a/client/middleware.go +++ b/client/middleware.go @@ -16,23 +16,23 @@ type MiddlewareConfig struct { Name string `json:"name" yaml:"name"` } -// MiddlewareCallHandler is the middleware handler for client.Call. -type MiddlewareCallHandler func(ctx context.Context, req *Request[any, any], opts *CallOptions) (*RawResponse, error) +// MiddlewareRequestHandler is the middleware handler for client.Request. +type MiddlewareRequestHandler func(ctx context.Context, req *Req[any, any], opts *CallOptions) (*RawResponse, error) -// MiddlewareCallNoCodecHandler is the middleware handler for client.Call without a codec in between. -type MiddlewareCallNoCodecHandler func(ctx context.Context, req *Request[any, any], result any, opts *CallOptions) error +// MiddlewareRequestNoCodecHandler is the middleware handler for client.Request without a codec in between. +type MiddlewareRequestNoCodecHandler func(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error // Middleware is the middleware for clients. type Middleware interface { types.Component - Call( - next MiddlewareCallHandler, - ) MiddlewareCallHandler + Request( + next MiddlewareRequestHandler, + ) MiddlewareRequestHandler - CallNoCodec( - next MiddlewareCallNoCodecHandler, - ) MiddlewareCallNoCodecHandler + RequestNoCodec( + next MiddlewareRequestNoCodecHandler, + ) MiddlewareRequestNoCodecHandler } // MiddlewareFactory is used to create a new client Middleware. diff --git a/go.sum b/go.sum index 44aa13a..197ffda 100644 --- a/go.sum +++ b/go.sum @@ -68,8 +68,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= -golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From c0f330c4e8b5e96d60740ac802e2439c9a627fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 22:32:41 +0100 Subject: [PATCH 15/55] feat: smaller changes that make app development easier. --- client/client.go | 5 +++++ client/config.go | 2 +- log/log.go | 9 +++++++++ server/server.go | 15 +++++++++++++++ types/component.go | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/client/client.go b/client/client.go index 2af9991..ac6aeac 100644 --- a/client/client.go +++ b/client/client.go @@ -27,6 +27,9 @@ type NodeMap map[string][]*registry.Node type Client interface { types.Component + // Logger returns the logger. + Logger() log.Logger + // Config returns the internal config, this is for tests. Config() Config @@ -116,12 +119,14 @@ func (r *Req[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*regist // Resolve the service to a list of nodes in a per transport map. nodes, err := r.client.ResolveService(ctx, r.service, opts.PreferredTransports...) if err != nil { + r.client.Logger().Error("Failed to resolve service", "error", err, "service", r.service) return nil, err } // Run the configured Selector to get a node from the resolved nodes. node, err := opts.Selector(ctx, r.service, nodes, opts.PreferredTransports, opts.AnyTransport) if err != nil { + r.client.Logger().Error("Failed to resolve service", "error", err, "service", r.service) return nil, err } diff --git a/client/config.go b/client/config.go index b37391c..b5b772d 100644 --- a/client/config.go +++ b/client/config.go @@ -16,7 +16,7 @@ var ( // DefaultContentType is the default Content-Type for calls. DefaultContentType = "application/x-protobuf" // DefaultPreferredTransports set's in which order a transport will be selected. - DefaultPreferredTransports = []string{"grpc", "drpc", "http", "h2c", "http2", "http3", "https"} + DefaultPreferredTransports = []string{"grpc", "drpc", "http", "grpcs", "h2c", "http2", "http3", "https"} // DefaultPoolHosts set the number of hosts in a pool. DefaultPoolHosts = 16 diff --git a/log/log.go b/log/log.go index 78081e1..b33ff80 100644 --- a/log/log.go +++ b/log/log.go @@ -151,6 +151,15 @@ func ProvideNoOpts( return Provide(serviceName, configs, components) } +// ProvideWithServiceNameField provides a new logger with the service name field. +func ProvideWithServiceNameField( + serviceName types.ServiceName, + configs types.ConfigData, + components *types.Components, +) (Logger, error) { + return Provide(serviceName, configs, components, WithFields(map[string]any{"service": serviceName})) +} + // WithLevel creates a copy of the logger with a new level. // It will inherit all the fields and the context from the parent logger. func (l Logger) WithLevel(level string) Logger { diff --git a/server/server.go b/server/server.go index ac17af6..ce73962 100644 --- a/server/server.go +++ b/server/server.go @@ -86,6 +86,10 @@ func Provide( // Configure entrypoints. eps := container.NewMap[string, Entrypoint]() + if len(cfg.functionalEntrypoints) == 0 && len(cfg.Entrypoints) == 0 { + cfg.Entrypoints = append(cfg.Entrypoints, EntrypointConfig{Name: "grpcs", Plugin: "grpc", Enabled: true}) + } + for _, cfgNewEp := range cfg.functionalEntrypoints { newFunc, ok := PluginsNew.Get(cfgNewEp.config().Plugin) if !ok { @@ -138,6 +142,17 @@ func Provide( return srv, nil } +// ProvideNoOpts creates a new server without functional options. +func ProvideNoOpts( + name types.ServiceName, + configs types.ConfigData, + components *types.Components, + logger log.Logger, + reg registry.Type, +) (Server, error) { + return Provide(name, configs, components, logger, reg) +} + // Start will start the HTTP servers on all entrypoints. func (s *Server) Start(ctx context.Context) error { if s == nil { diff --git a/types/component.go b/types/component.go index 610e2e5..c2e7584 100644 --- a/types/component.go +++ b/types/component.go @@ -12,6 +12,7 @@ const ( PriorityMetrics = 1100 PriorityRegistry = 1200 PriorityEvent = 1300 + PriorityHandler = 1350 PriorityServer = 1400 PriorityClient = 1500 PriorityCustom = 2000 From 2a488995317225e4ee3e9e04c6b2a4875c7595b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 7 Mar 2025 22:51:42 +0100 Subject: [PATCH 16/55] fix(README): discord invite --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8137b7f..88adf11 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ![go-orb Logo](docs/logo-header.png) [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/go-orb/go-orb?tab=doc) [![Go Report Card](https://goreportcard.com/badge/github.com/go-orb/go-orb)](https://goreportcard.com/report/github.com/go-orb/go-orb) [![Discord](https://dcbadge.vercel.app/api/server/sggGS389qb?style=flat-square&theme=default-inverted)](https://discord.gg/sggGS389qb) ![Matrix](https://img.shields.io/matrix/go-orb%3Ajochum.dev?server_fqdn=matrix.jochum.dev&fetchMode=guest&logo=Matrix) +# ![go-orb Logo](docs/logo-header.png) [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/go-orb/go-orb?tab=doc) [![Go Report Card](https://goreportcard.com/badge/github.com/go-orb/go-orb)](https://goreportcard.com/report/github.com/go-orb/go-orb) [![Discord](https://dcbadge.vercel.app/api/server/sggGS389qb?style=flat-square&theme=default-inverted)](https://discord.gg/4n6E4NYjnR) ![Matrix](https://img.shields.io/matrix/go-orb%3Ajochum.dev?server_fqdn=matrix.jochum.dev&fetchMode=guest&logo=Matrix) Go Orb is a framework for distributed systems development, it can be seen as the successor of [go-micro.dev/v4](https://github.com/go-micro/go-micro). @@ -176,7 +176,7 @@ Everything is linted and staticaly analyzed by golangci-lint, enforced with CI p ## Community -Chat with us on [Discord](https://discord.gg/sggGS389qb). +Chat with us on [Discord](https://discord.gg/4n6E4NYjnR). ## Development From c033b945f4bd121515e5a3e7ae04c537cbe03f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Sun, 9 Mar 2025 02:38:08 +0100 Subject: [PATCH 17/55] feat(kvstore): Add the kvstore interface #40 --- README.md | 4 +- cli/provider.go | 2 +- codecs/mime.go | 7 + config/config.go | 4 +- kvstore/config.go | 80 +++++++++ kvstore/kvstore.go | 158 +++++++++++++++++ kvstore/options.go | 343 ++++++++++++++++++++++++++++++++++++ kvstore/plugins.go | 34 ++++ types/component.go | 1 + util/orberrors/orberrors.go | 13 +- 10 files changed, 635 insertions(+), 11 deletions(-) create mode 100644 codecs/mime.go create mode 100644 kvstore/config.go create mode 100644 kvstore/kvstore.go create mode 100644 kvstore/options.go create mode 100644 kvstore/plugins.go diff --git a/README.md b/README.md index 88adf11..7fa3f95 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ go-orb has support for sending nearly anything you throw in as `application/json #### pre encoded / proxy ```go -resp , err := client.Call[map[string]any](context.Background(), clientDi, "org.orb.svc.hello", "Say.Hello", `{"name": "Alex"}`, client.WithContentType("application/json")) +resp , err := client.Call[map[string]any](context.Background(), clientDi, "org.orb.svc.hello", "Say.Hello", `{"name": "Alex"}`, client.WithContentType(codecs.MimeJSON)) ``` #### map[string]any{} @@ -159,7 +159,7 @@ resp , err := client.Call[map[string]any](context.Background(), clientDi, "org.o req := make(map[string]any) req["name"] = "Alex" -resp , err := client.Call[map[string]any](context.Background(), clientDi, "org.orb.svc.hello", "Say.Hello", req, client.WithContentType("application/json")) +resp , err := client.Call[map[string]any](context.Background(), clientDi, "org.orb.svc.hello", "Say.Hello", req, client.WithContentType(codecs.MimeJSON)) ``` #### Structured logging diff --git a/cli/provider.go b/cli/provider.go index 821a937..a965fde 100644 --- a/cli/provider.go +++ b/cli/provider.go @@ -62,7 +62,7 @@ func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { func ProvideConfigData(serviceContext *ServiceContext, flags []*Flag) (types.ConfigData, error) { results := types.ConfigData{} - mJSON, err := codecs.GetMime("application/json") + mJSON, err := codecs.GetMime(codecs.MimeJSON) if err != nil { return nil, err } diff --git a/codecs/mime.go b/codecs/mime.go new file mode 100644 index 0000000..b037488 --- /dev/null +++ b/codecs/mime.go @@ -0,0 +1,7 @@ +package codecs + +// MimeJSON is the mime type for JSON. +const MimeJSON = "application/json" + +// MimeProto is the mime type for protocol buffer. +const MimeProto = "application/x-protobuf" diff --git a/config/config.go b/config/config.go index 7867e22..45fbd5f 100644 --- a/config/config.go +++ b/config/config.go @@ -173,7 +173,7 @@ func HasKey[T any](sections []string, key string, configs types.ConfigData) bool // Dump is a helper function to dump configDatas to the console. func Dump(configs types.ConfigData) error { - codec, err := codecs.GetMime("application/json") + codec, err := codecs.GetMime(codecs.MimeJSON) if err != nil { return err } @@ -192,7 +192,7 @@ func Dump(configs types.ConfigData) error { func ParseStruct[TParse any](sections []string, toParse TParse) (source.Data, error) { result := source.Data{Data: make(map[string]any)} - codec, err := codecs.GetMime("application/json") + codec, err := codecs.GetMime(codecs.MimeJSON) if err != nil { result.Error = err return result, result.Error diff --git a/kvstore/config.go b/kvstore/config.go new file mode 100644 index 0000000..3a28244 --- /dev/null +++ b/kvstore/config.go @@ -0,0 +1,80 @@ +package kvstore + +//nolint:gochecknoglobals +var ( + // DefaultConfigSection is the section in the config to use. + DefaultConfigSection = "kvstore" + + // DefaultKVStore is the default kvstore to use. + DefaultKVStore = "natsjs" +) + +var _ (ConfigType) = (*Config)(nil) + +// Option is a functional option type for the registry. +type Option func(ConfigType) + +// ConfigType is used in the functional options as type to identify a registry +// option. It is used over a static *Config type as this way plugins can also +// easilty set functional options without the complication of contexts, as was +// done in v4. This is possible because plugins will nest the registry.Config +// type, and thus inherit the interface that is used to identify the registry +// config. +type ConfigType interface { + config() *Config +} + +// Config are the Client options. +type Config struct { + // Plugin selects the client implementation. + Plugin string `json:"plugin" yaml:"plugin"` + + // Database allows multiple isolated stores to be kept in one backend, if supported. + Database string `json:"database,omitempty" yaml:"database,omitempty"` + + // Table is analogous to a table in database backends or a key prefix in KV backends + Table string `json:"table,omitempty" yaml:"table,omitempty"` +} + +// config returns the config. +func (c *Config) config() *Config { + return c +} + +// NewConfig creates a config to use with a registry. +func NewConfig(opts ...Option) Config { + cfg := Config{ + Plugin: DefaultKVStore, + } + + // Apply options. + for _, o := range opts { + o(&cfg) + } + + return cfg +} + +// WithPlugin set the client implementation to use. +func WithPlugin(n string) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Plugin = n + } +} + +// WithDatabase allows multiple isolated stores to be kept in one backend, if supported. +func WithDatabase(db string) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Database = db + } +} + +// WithTable is analogous to a table in database backends or a key prefix in KV backends. +func WithTable(t string) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Table = t + } +} diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go new file mode 100644 index 0000000..05c8afe --- /dev/null +++ b/kvstore/kvstore.go @@ -0,0 +1,158 @@ +// Package kvstore is an interface for distributed key-value data storage. +package kvstore + +import ( + "context" + "errors" + "fmt" + "log/slog" + "time" + + "github.com/go-orb/go-orb/client" + "github.com/go-orb/go-orb/config" + "github.com/go-orb/go-orb/log" + "github.com/go-orb/go-orb/registry" + "github.com/go-orb/go-orb/types" +) + +// ComponentType is the components name. +const ComponentType = "kvstore" + +var ( + // ErrNotFound is returned when a key is not found. + ErrNotFound = errors.New("not found") + // ErrDatabaseNotFound is returned when a database is not found. + ErrDatabaseNotFound = errors.New("database not found") + // ErrTableNotFound is returned when a table is not found. + ErrTableNotFound = errors.New("table not found") +) + +// Deprecated is an interface for deprecated methods in KVStore. +// This is used to provide backwards compatibility for old code, it will be removed on go-orb v1.0.0. +type Deprecated interface { + // Read takes a single key and optional ReadOptions. It returns matching []*Record or an error. + // If no Record is found, ErrNotFound is returned. + // Deprecated: use Get instead. + Read(key string, opts ...ReadOption) ([]*Record, error) + // Write takes a single key and value, and optional WriteOptions. + // Deprecated: use Set instead. + Write(r *Record, opts ...WriteOption) error + // Delete purges the record with the corresponding key from the store. + // Deprecated: use Purge instead. + Delete(key string, opts ...DeleteOption) error + // List returns any keys that match, or an empty list with no error if none matched. + // Deprecated: use Keys instead. + List(opts ...ListOption) ([]string, error) +} + +// KVStore is an interface for distributed key-value data storage. +type KVStore interface { + types.Component + + Deprecated + + // Get takes a key, database, table and optional GetOptions. It returns the Record or an error. + // Leave database and table empty to use the defaults. + Get(key, database, table string, opts ...GetOption) ([]Record, error) + + // Set takes a key, database, table and data, and optional SetOptions. + // Leave database and table empty to use the defaults. + Set(key, database, table string, data []byte, opts ...SetOption) error + + // Purge takes a key, database and table and purges it. + // Leave database and table empty to use the defaults. + Purge(key, database, table string) error + + // Keys returns any keys that match, or an empty list with no error if none matched. + // Leave database and table empty to use the defaults. + Keys(database, table string, opts ...KeysOption) ([]string, error) + + // DropTable drops the table. + // Leave database and table empty to use the defaults. + DropTable(database, table string) error + + // DropDatabase drops the database. + // Leave database empty to use the default. + DropDatabase(database string) error +} + +// Type is the kvstore type it is returned when you use Provide +// which selects a kvstore to use based on the plugin configuration. +type Type struct { + KVStore +} + +// Record is an item stored or retrieved from a Store. +type Record struct { + // The key to store the record. + Key string `json:"key"` + // The value within the record. + Value []byte `json:"value"` + // Time when the record expires a nil value means no expiry. + Expiry *time.Time `json:"expiry,omitempty"` +} + +// Provide provides a new KVStore. +func Provide( + ctx context.Context, + name types.ServiceName, + configs types.ConfigData, + components *types.Components, + logger log.Logger, + registry registry.Type, + client client.Type, + opts ...Option, +) (Type, error) { + cfg := NewConfig(opts...) + + sections := append(types.SplitServiceName(name), DefaultConfigSection) + if err := config.Parse(sections, configs, &cfg); err != nil { + return Type{}, err + } + + if cfg.Plugin == "" { + logger.Warn("empty kvstore plugin, using the default", "default", DefaultKVStore) + cfg.Plugin = DefaultKVStore + } + + logger.Debug("KVStore", "plugin", cfg.Plugin) + + provider, ok := plugins.Get(cfg.Plugin) + if !ok { + return Type{}, fmt.Errorf("KVStore plugin '%s' not found, did you import it?", cfg.Plugin) + } + + // Configure the logger. + cLogger, err := logger.WithConfig(sections, configs) + if err != nil { + return Type{}, err + } + + cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) + + instance, err := provider(ctx, name, configs, cLogger, registry, client, opts...) + if err != nil { + return Type{}, err + } + + // Register the registry as a component. + err = components.Add(instance, types.PriorityKVStore) + if err != nil { + logger.Warn("while registering kvstore as a component", "error", err) + } + + return instance, nil +} + +// ProvideNoOpts provides a new KVStore without options. +func ProvideNoOpts( + ctx context.Context, + name types.ServiceName, + configs types.ConfigData, + components *types.Components, + logger log.Logger, + registry registry.Type, + client client.Type, +) (Type, error) { + return Provide(ctx, name, configs, components, logger, registry, client) +} diff --git a/kvstore/options.go b/kvstore/options.go new file mode 100644 index 0000000..53b4bfc --- /dev/null +++ b/kvstore/options.go @@ -0,0 +1,343 @@ +package kvstore + +import ( + "time" +) + +// GetOptions configures an individual Get operation. +type GetOptions struct { + // Prefix returns all records that are prefixed with key + Prefix bool + // Suffix returns all records that have the suffix key + Suffix bool + // Limit limits the number of returned records + Limit uint + // Offset when combined with Limit supports pagination + Offset uint +} + +// NewGetOptions creates a new GetOptions with the provided options applied. +func NewGetOptions(opts ...GetOption) GetOptions { + var options GetOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// GetOption sets values in GetOptions. +type GetOption func(g *GetOptions) + +// GetPrefix returns all records that are prefixed with key. +func GetPrefix() GetOption { + return func(g *GetOptions) { + g.Prefix = true + } +} + +// GetSuffix returns all records that have the suffix key. +func GetSuffix() GetOption { + return func(g *GetOptions) { + g.Suffix = true + } +} + +// GetLimit limits the number of responses to l. +func GetLimit(l uint) GetOption { + return func(g *GetOptions) { + g.Limit = l + } +} + +// GetOffset starts returning responses from o. Use in conjunction with Limit for pagination. +func GetOffset(o uint) GetOption { + return func(g *GetOptions) { + g.Offset = o + } +} + +// SetOptions configures an individual Set operation +// If Expiry and TTL are set TTL takes precedence. +type SetOptions struct { + // Expiry is the time the record expires + Expiry time.Time + // TTL is the time until the record expires + TTL time.Duration +} + +// NewSetOptions creates a new SetOptions with the provided options applied. +func NewSetOptions(opts ...SetOption) SetOptions { + var options SetOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// SetOption sets values in SetOptions. +type SetOption func(s *SetOptions) + +// SetExpiry is the time the record expires. +func SetExpiry(t time.Time) SetOption { + return func(s *SetOptions) { + s.Expiry = t + } +} + +// SetTTL is the time until the record expires. +func SetTTL(d time.Duration) SetOption { + return func(s *SetOptions) { + s.TTL = d + } +} + +// KeysOptions configures an individual Keys/List operation. +type KeysOptions struct { + // Prefix returns all keys that are prefixed with key + Prefix string + // Suffix returns all keys that end with key + Suffix string + // Limit limits the number of returned keys + Limit uint + // Offset when combined with Limit supports pagination + Offset uint +} + +// NewKeysOptions creates a new KeysOptions with the provided options applied. +func NewKeysOptions(opts ...KeysOption) KeysOptions { + var options KeysOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// KeysOption sets values in KeysOptions. +type KeysOption func(k *KeysOptions) + +// KeysPrefix returns all keys that are prefixed with key. +func KeysPrefix(p string) KeysOption { + return func(k *KeysOptions) { + k.Prefix = p + } +} + +// KeysSuffix returns all keys that have the suffix key. +func KeysSuffix(s string) KeysOption { + return func(k *KeysOptions) { + k.Suffix = s + } +} + +// KeysLimit limits the number of responses to l. +func KeysLimit(l uint) KeysOption { + return func(k *KeysOptions) { + k.Limit = l + } +} + +// KeysOffset starts returning responses from o. Use in conjunction with Limit for pagination. +func KeysOffset(o uint) KeysOption { + return func(k *KeysOptions) { + k.Offset = o + } +} + +// ReadOptions configures an individual Read operation. +type ReadOptions struct { + Database, Table string + // Prefix returns all keys that are prefixed with key + Prefix string + // Suffix returns all keys that end with key + Suffix string + // Limit limits the number of returned keys + Limit uint + // Offset when combined with Limit supports pagination + Offset uint +} + +// NewReadOptions creates a new ReadOptions with the provided options applied. +func NewReadOptions(opts ...ReadOption) ReadOptions { + var options ReadOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// ReadOption sets values in ReadOptions. +type ReadOption func(r *ReadOptions) + +// ReadFrom the database and table. +func ReadFrom(database, table string) ReadOption { + return func(r *ReadOptions) { + r.Database = database + r.Table = table + } +} + +// ReadPrefix returns all records that are prefixed with key. +func ReadPrefix(p string) ReadOption { + return func(r *ReadOptions) { + r.Prefix = p + } +} + +// ReadSuffix returns all records that have the suffix key. +func ReadSuffix(s string) ReadOption { + return func(r *ReadOptions) { + r.Suffix = s + } +} + +// ReadLimit limits the number of responses to l. +func ReadLimit(l uint) ReadOption { + return func(r *ReadOptions) { + r.Limit = l + } +} + +// ReadOffset starts returning responses from o. Use in conjunction with Limit for pagination. +func ReadOffset(o uint) ReadOption { + return func(r *ReadOptions) { + r.Offset = o + } +} + +// WriteOptions configures an individual Write operation +// If Expiry and TTL are set TTL takes precedence. +type WriteOptions struct { + // Expiry is the time the record expires + Expiry time.Time + Database, Table string + // TTL is the time until the record expires + TTL time.Duration +} + +// NewWriteOptions creates a new WriteOptions with the provided options applied. +func NewWriteOptions(opts ...WriteOption) WriteOptions { + var options WriteOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// WriteOption sets values in WriteOptions. +type WriteOption func(w *WriteOptions) + +// WriteTo the database and table. +func WriteTo(database, table string) WriteOption { + return func(w *WriteOptions) { + w.Database = database + w.Table = table + } +} + +// WriteExpiry is the time the record expires. +func WriteExpiry(t time.Time) WriteOption { + return func(w *WriteOptions) { + w.Expiry = t + } +} + +// WriteTTL is the time the record expires. +func WriteTTL(d time.Duration) WriteOption { + return func(w *WriteOptions) { + w.TTL = d + } +} + +// DeleteOptions configures an individual Delete operation. +type DeleteOptions struct { + Database, Table string +} + +// NewDeleteOptions creates a new DeleteOptions with the provided options applied. +func NewDeleteOptions(opts ...DeleteOption) DeleteOptions { + var options DeleteOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// DeleteOption sets values in DeleteOptions. +type DeleteOption func(d *DeleteOptions) + +// DeleteFrom the database and table. +func DeleteFrom(database, table string) DeleteOption { + return func(d *DeleteOptions) { + d.Database = database + d.Table = table + } +} + +// ListOptions configures an individual List operation. +type ListOptions struct { + // List from the following + Database, Table string + // Prefix returns all keys that are prefixed with key + Prefix string + // Suffix returns all keys that end with key + Suffix string + // Limit limits the number of returned keys + Limit uint + // Offset when combined with Limit supports pagination + Offset uint +} + +// NewListOptions creates a new ListOptions with the provided options applied. +func NewListOptions(opts ...ListOption) ListOptions { + var options ListOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// ListOption sets values in ListOptions. +type ListOption func(l *ListOptions) + +// ListFrom the database and table. +func ListFrom(database, table string) ListOption { + return func(l *ListOptions) { + l.Database = database + l.Table = table + } +} + +// ListPrefix returns all keys that are prefixed with key. +func ListPrefix(p string) ListOption { + return func(l *ListOptions) { + l.Prefix = p + } +} + +// ListSuffix returns all keys that end with key. +func ListSuffix(s string) ListOption { + return func(l *ListOptions) { + l.Suffix = s + } +} + +// ListLimit limits the number of returned keys to l. +func ListLimit(l uint) ListOption { + return func(lo *ListOptions) { + lo.Limit = l + } +} + +// ListOffset starts returning responses from o. Use in conjunction with Limit for pagination. +func ListOffset(o uint) ListOption { + return func(l *ListOptions) { + l.Offset = o + } +} diff --git a/kvstore/plugins.go b/kvstore/plugins.go new file mode 100644 index 0000000..7fd523c --- /dev/null +++ b/kvstore/plugins.go @@ -0,0 +1,34 @@ +package kvstore + +import ( + "context" + + "github.com/go-orb/go-orb/client" + "github.com/go-orb/go-orb/log" + "github.com/go-orb/go-orb/registry" + "github.com/go-orb/go-orb/types" + "github.com/go-orb/go-orb/util/container" +) + +// ProviderFunc is provider function type used by plugins to create a new client. +type ProviderFunc func( + ctx context.Context, + name types.ServiceName, + data types.ConfigData, + logger log.Logger, + registry registry.Type, + client client.Type, + opts ...Option, +) (Type, error) + +// plugins is the container for client implementations. +// +//nolint:gochecknoglobals +var plugins = container.NewMap[string, ProviderFunc]() + +// Register makes a plugin available by the provided name. +// If Register is called twice with the same name, it panics. +func Register(name string, factory ProviderFunc) bool { + plugins.Add(name, factory) + return true +} diff --git a/types/component.go b/types/component.go index c2e7584..181fa28 100644 --- a/types/component.go +++ b/types/component.go @@ -15,6 +15,7 @@ const ( PriorityHandler = 1350 PriorityServer = 1400 PriorityClient = 1500 + PriorityKVStore = 1600 PriorityCustom = 2000 ) diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index 6015b01..dc40c32 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -140,11 +140,12 @@ func As(err error) (*Error, bool) { // A list of default errors. var ( - ErrUnimplemented = New(http.StatusInternalServerError, "Unimplemented") - ErrUnavailable = New(http.StatusServiceUnavailable, "Unavailable") - ErrInternalServerError = newHTTP(http.StatusInternalServerError) - ErrUnauthorized = newHTTP(http.StatusUnauthorized) - ErrRequestTimeout = newHTTP(http.StatusRequestTimeout) - ErrBadRequest = newHTTP(http.StatusBadRequest) + ErrBadRequest = newHTTP(http.StatusBadRequest) // 400 + ErrUnauthorized = newHTTP(http.StatusUnauthorized) // 401 + ErrNotFound = newHTTP(http.StatusNotFound) // 404 + ErrRequestTimeout = newHTTP(http.StatusRequestTimeout) // 408 ErrCanceled = newHTTP(499) + ErrUnimplemented = newHTTP(http.StatusInternalServerError) // 500 + ErrUnavailable = newHTTP(http.StatusServiceUnavailable) // 503 + ErrInternalServerError = newHTTP(http.StatusInternalServerError) // 500 ) From c3970416febc895f168da9743e4fe358a8f8051f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Sun, 9 Mar 2025 06:24:11 +0100 Subject: [PATCH 18/55] feat(event): Implement Pub/Sub #20 --- event/config.go | 131 +++++++++++++++++++++++++++++++++++++++++++++-- event/errors.go | 9 ++-- event/event.go | 92 +++++++++++++++++++++++++++------ event/plugins.go | 2 +- 4 files changed, 210 insertions(+), 24 deletions(-) diff --git a/event/config.go b/event/config.go index 942a76c..00ce7cb 100644 --- a/event/config.go +++ b/event/config.go @@ -2,6 +2,9 @@ package event import ( "time" + + "github.com/go-orb/go-orb/codecs" + "github.com/google/uuid" ) //nolint:gochecknoglobals @@ -12,8 +15,11 @@ var ( // DefaultConfigSection is the default config section for the client. DefaultConfigSection = "client" - // DefaultContentType is the default content type used to transport data around. - DefaultContentType = "application/x-protobuf" + // DefaultRequestContentType is the default content type used to transport data around. + DefaultRequestContentType = codecs.MimeProto + + // DefaultPublishContentType is the default content type used to transport events around. + DefaultPublishContentType = codecs.MimeJSON // DefaultRequestTimeout is the default request timeout. DefaultRequestTimeout = time.Second * 30 @@ -104,7 +110,7 @@ func WithRequestTimeout(t time.Duration) RequestOption { // NewRequestOptions generates new calloptions with defaults. func NewRequestOptions(opts ...RequestOption) RequestOptions { cfg := RequestOptions{ - ContentType: DefaultContentType, + ContentType: DefaultRequestContentType, Metadata: make(map[string]string), RequestTimeout: DefaultRequestTimeout, } @@ -116,3 +122,122 @@ func NewRequestOptions(opts ...RequestOption) RequestOptions { return cfg } + +// PublishOptions contains all the options which can be provided when publishing an event. +type PublishOptions struct { + // Metadata contains any keys which can be used to query the data, for example a customer id + Metadata map[string]string + // Timestamp to set for the event, if the timestamp is a zero value, the current time will be used + Timestamp time.Time +} + +// PublishOption sets attributes on PublishOptions. +type PublishOption func(o *PublishOptions) + +// WithPublishMetadata sets the Metadata field on PublishOptions. +func WithPublishMetadata(md map[string]string) PublishOption { + return func(o *PublishOptions) { + o.Metadata = md + } +} + +// WithPublishTimestamp sets the timestamp field on PublishOptions. +func WithPublishTimestamp(t time.Time) PublishOption { + return func(o *PublishOptions) { + o.Timestamp = t + } +} + +// NewPublishOptions generates new publish options with defaults. +func NewPublishOptions(opts ...PublishOption) PublishOptions { + cfg := PublishOptions{ + Metadata: make(map[string]string), + Timestamp: time.Now(), + } + + // Apply options. + for _, o := range opts { + o(&cfg) + } + + return cfg +} + +// ConsumeOptions contains all the options which can be provided when subscribing to a topic. +type ConsumeOptions struct { + // Offset is the time from which the messages should be consumed from. If not provided then + // the messages will be consumed starting from the moment the Subscription starts. + Offset time.Time + // Group is the name of the consumer group, if two consumers have the same group the events + // are distributed between them + Group string + AckWait time.Duration + // RetryLimit indicates number of times a message is retried + RetryLimit int + // AutoAck if true (default true), automatically acknowledges every message so it will not be redelivered. + // If false specifies that each message need ts to be manually acknowledged by the subscriber. + // If processing is successful the message should be ack'ed to remove the message from the stream. + // If processing is unsuccessful the message should be nack'ed (negative acknowledgement) which will mean it will + // remain on the stream to be processed again. + AutoAck bool + // CustomRetries indicates whether to use RetryLimit + CustomRetries bool +} + +// GetRetryLimit returns the RetryLimit field on ConsumeOptions. +func (s ConsumeOptions) GetRetryLimit() int { + if !s.CustomRetries { + return -1 + } + + return s.RetryLimit +} + +// ConsumeOption sets attributes on ConsumeOptions. +type ConsumeOption func(o *ConsumeOptions) + +// WithGroup sets the consumer group to be part of when consuming events. +func WithGroup(q string) ConsumeOption { + return func(o *ConsumeOptions) { + o.Group = q + } +} + +// WithOffset sets the offset time at which to start consuming events. +func WithOffset(t time.Time) ConsumeOption { + return func(o *ConsumeOptions) { + o.Offset = t + } +} + +// WithAutoAck sets the AutoAck field on ConsumeOptions and an ackWait duration after which if no ack is received +// the message is requeued in case auto ack is turned off. +func WithAutoAck(ack bool, ackWait time.Duration) ConsumeOption { + return func(o *ConsumeOptions) { + o.AutoAck = ack + o.AckWait = ackWait + } +} + +// WithRetryLimit sets the RetryLimit field on ConsumeOptions. +// Set to -1 for infinite retries (default). +func WithRetryLimit(retries int) ConsumeOption { + return func(o *ConsumeOptions) { + o.RetryLimit = retries + o.CustomRetries = true + } +} + +// NewConsumeOptions generates new subscribe options with defaults. +func NewConsumeOptions(opts ...ConsumeOption) ConsumeOptions { + cfg := ConsumeOptions{ + Group: uuid.New().String(), + } + + // Apply options. + for _, o := range opts { + o(&cfg) + } + + return cfg +} diff --git a/event/errors.go b/event/errors.go index 696b77b..85cf192 100644 --- a/event/errors.go +++ b/event/errors.go @@ -1,12 +1,13 @@ package event import ( - "net/http" - - "github.com/go-orb/go-orb/util/orberrors" + "errors" ) var ( // ErrMissingTopic happens whenever the user doesnt give a topic. - ErrMissingTopic = orberrors.New(http.StatusInternalServerError, "missing topic") + ErrMissingTopic = errors.New("missing topic") + + // ErrEncodingMessage is returned from publish if there was an error encoding the message option. + ErrEncodingMessage = errors.New("encoding message") ) diff --git a/event/event.go b/event/event.go index abb9f4e..be840d2 100644 --- a/event/event.go +++ b/event/event.go @@ -5,6 +5,7 @@ import ( "context" "fmt" "log/slog" + "time" "github.com/go-orb/go-orb/codecs" "github.com/go-orb/go-orb/config" @@ -16,8 +17,59 @@ import ( // ComponentType is the client component type name. const ComponentType = "event" -// Handler is the interface for events plugins. -type Handler interface { +// AckFunc is the function to call to acknowledge a message. +type AckFunc func() error + +// NackFunc is the function to call to negatively acknowledge a message. +type NackFunc func() error + +// Event is the object returned by the broker when you subscribe to a topic. +type Event struct { + // Handler is a reference to the client. + Handler Client + + // Timestamp of the event + Timestamp time.Time + // Metadata contains the values the event was indexed by + Metadata map[string]string + + ackFunc AckFunc + nackFunc NackFunc + // ID to uniquely identify the event + ID string + // Topic of event, e.g. "registry.service.created" + Topic string + // Payload contains the encoded message + Payload []byte +} + +// Unmarshal the events message into an object. +func (e *Event) Unmarshal(v any) error { + return e.Handler.GetPublishCodec().Decode(e.Payload, v) +} + +// Ack acknowledges successful processing of the event in ManualAck mode. +func (e *Event) Ack() error { + return e.ackFunc() +} + +// SetAckFunc sets the AckFunc for the event. +func (e *Event) SetAckFunc(f AckFunc) { + e.ackFunc = f +} + +// Nack negatively acknowledges processing of the event (i.e. failure) in ManualAck mode. +func (e *Event) Nack() error { + return e.nackFunc() +} + +// SetNackFunc sets the NackFunc for the event. +func (e *Event) SetNackFunc(f NackFunc) { + e.nackFunc = f +} + +// Client is the client interface for events plugins. +type Client interface { types.Component // Request runs a REST like call on the given topic. @@ -30,13 +82,21 @@ type Handler interface { HandleRequest(ctx context.Context, topic string, cb func(context.Context, *Req[[]byte, []byte])) // Clone creates a clone of the handler, this is useful for parallel requests. - Clone() Handler + Clone() Client + + // GetCodec returns the codec used by the handler for publish and subscribe. + GetPublishCodec() codecs.Marshaler // Publish publishes a Event to the given topic. - // Publish(ctx context.Context, event any) error + Publish(ctx context.Context, topic string, event any, opts ...PublishOption) error + + // Consume lets you consume events from a given topic. + Consume(topic string, opts ...ConsumeOption) (<-chan Event, error) +} - // Subscribe lets you subscribe to the given topic. - // Subscribe(ctx context.Context, topic string, opts ...SubscribeOption) (<-chan CallRequest[[]byte, []byte], error) +// Type is the client implementation for events. +type Type struct { + Client } // Req contains all data for a request call. @@ -52,7 +112,7 @@ type Req[TReq any, TResp any] struct { // ReplyHelper contains the internal helper to answer on exact that topic and request. replyFunc func(ctx context.Context, result TResp, err error) - handler Handler + handler Client } // SetReplyFunc sets the internal reply func (for example nats.Msg) for the client. @@ -61,7 +121,7 @@ func (e *Req[TReq, TResp]) SetReplyFunc(h func(ctx context.Context, result TResp } // Request runs a REST like call on the events topic. -func (e *Req[TReq, TResp]) Request(ctx context.Context, handler Handler, topic string, opts ...RequestOption) (*TResp, error) { +func (e *Req[TReq, TResp]) Request(ctx context.Context, handler Client, topic string, opts ...RequestOption) (*TResp, error) { e.handler = handler options := NewRequestOptions(opts...) @@ -113,7 +173,7 @@ func NewRequest[TResp, TReq any](req TReq) *Req[TReq, TResp] { // Response will be of type *FooResponse. func Request[TResp any, TReq any]( ctx context.Context, - handler Handler, + handler Client, topic string, req TReq, opts ...RequestOption, @@ -124,7 +184,7 @@ func Request[TResp any, TReq any]( // HandleRequest subscribes to the given topic and handles the requests. func HandleRequest[TReq any, TResp any]( ctx context.Context, - handler Handler, + handler Client, topic string, callback func(ctx context.Context, req *TReq) (*TResp, error), ) { @@ -166,12 +226,12 @@ func Provide( configs types.ConfigData, components *types.Components, logger log.Logger, - opts ...Option) (Handler, error) { + opts ...Option) (Type, error) { cfg := NewConfig(opts...) sections := append(types.SplitServiceName(name), DefaultConfigSection) if err := config.Parse(sections, configs, &cfg); err != nil { - return nil, err + return Type{}, err } if cfg.Plugin == "" { @@ -181,20 +241,20 @@ func Provide( provider, ok := plugins.Get(cfg.Plugin) if !ok { - return nil, fmt.Errorf("event plugin (%s) not found, did you register it?", cfg.Plugin) + return Type{}, fmt.Errorf("event plugin (%s) not found, did you register it?", cfg.Plugin) } // Configure the logger. cLogger, err := logger.WithConfig(sections, configs) if err != nil { - return nil, err + return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) instance, err := provider(name, configs, cLogger, opts...) if err != nil { - return nil, err + return Type{}, err } // Register the event as a component. @@ -211,6 +271,6 @@ func ProvideNoOpts( name types.ServiceName, configs types.ConfigData, components *types.Components, - logger log.Logger) (Handler, error) { + logger log.Logger) (Type, error) { return Provide(name, configs, components, logger) } diff --git a/event/plugins.go b/event/plugins.go index e000426..b30ad6b 100644 --- a/event/plugins.go +++ b/event/plugins.go @@ -12,7 +12,7 @@ type ProviderFunc func( data types.ConfigData, logger log.Logger, opts ...Option, -) (Handler, error) +) (Type, error) // plugins is the container for client implementations. // From fcaf12c25abf11b12e3694cd8fddf1462f159ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Sun, 9 Mar 2025 10:00:53 +0100 Subject: [PATCH 19/55] fix(kvstore,registry): Add kvstore.Watcher, add components to registry --- kvstore/kvstore.go | 43 ++++++++++++++++++++++++++--------- kvstore/options.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ kvstore/plugins.go | 7 ------ registry/plugins.go | 1 + registry/registry.go | 2 +- types/types.go | 5 +++++ 6 files changed, 93 insertions(+), 18 deletions(-) diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go index 05c8afe..d9b6b50 100644 --- a/kvstore/kvstore.go +++ b/kvstore/kvstore.go @@ -8,10 +8,8 @@ import ( "log/slog" "time" - "github.com/go-orb/go-orb/client" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/registry" "github.com/go-orb/go-orb/types" ) @@ -76,6 +74,37 @@ type KVStore interface { DropDatabase(database string) error } +// WatchOp represents the type of Watch operation (Update, Delete). It is a +// part of WatchUpdate. +type WatchOp uint8 + +// Available WatchOp values. +const ( + // WatchOpCreate is a create operation. + WatchOpCreate WatchOp = iota + // WatchOpUpdate is an update operation. + WatchOpUpdate + // WatchOpDelete is a delete operation. + WatchOpDelete +) + +// WatchEvent is a change to a key-value store. +type WatchEvent struct { + Record + + // Operation is the type of operation that occurred. + Operation WatchOp +} + +// A Watcher is a component that can watch for changes to a key-value store. +// For example a registry component can watch for changes to a database. +type Watcher interface { + // Watch starts a watcher for the given database and table. + // Returns a channel of WatchUpdate and a function to stop the watcher. + // If an error occurs, it is returned. + Watch(ctx context.Context, database, table string, opts ...WatchOption) (<-chan WatchEvent, func() error, error) +} + // Type is the kvstore type it is returned when you use Provide // which selects a kvstore to use based on the plugin configuration. type Type struct { @@ -94,13 +123,10 @@ type Record struct { // Provide provides a new KVStore. func Provide( - ctx context.Context, name types.ServiceName, configs types.ConfigData, components *types.Components, logger log.Logger, - registry registry.Type, - client client.Type, opts ...Option, ) (Type, error) { cfg := NewConfig(opts...) @@ -130,7 +156,7 @@ func Provide( cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(ctx, name, configs, cLogger, registry, client, opts...) + instance, err := provider(name, configs, cLogger, opts...) if err != nil { return Type{}, err } @@ -146,13 +172,10 @@ func Provide( // ProvideNoOpts provides a new KVStore without options. func ProvideNoOpts( - ctx context.Context, name types.ServiceName, configs types.ConfigData, components *types.Components, logger log.Logger, - registry registry.Type, - client client.Type, ) (Type, error) { - return Provide(ctx, name, configs, components, logger, registry, client) + return Provide(name, configs, components, logger) } diff --git a/kvstore/options.go b/kvstore/options.go index 53b4bfc..26e804c 100644 --- a/kvstore/options.go +++ b/kvstore/options.go @@ -341,3 +341,56 @@ func ListOffset(o uint) ListOption { l.Offset = o } } + +// WatchOptions configures an individual Watch operation. +type WatchOptions struct { + // Do not send delete markers to the update channel. + IgnoreDeletes bool + // Include all history per subject, not just last one. + IncludeHistory bool + // Include only updates for keys. + UpdatesOnly bool + // retrieve only the meta data of the entry + MetaOnly bool +} + +// NewWatchOptions creates a new WatchOptions with the provided options applied. +func NewWatchOptions(opts ...WatchOption) WatchOptions { + var options WatchOptions + for _, o := range opts { + o(&options) + } + + return options +} + +// WatchOption sets values in WatchOptions. +type WatchOption func(o *WatchOptions) + +// WatchIgnoreDeletes do not send delete markers to the update channel. +func WatchIgnoreDeletes() WatchOption { + return func(o *WatchOptions) { + o.IgnoreDeletes = true + } +} + +// WatchIncludeHistory include all history per subject, not just last one. +func WatchIncludeHistory() WatchOption { + return func(o *WatchOptions) { + o.IncludeHistory = true + } +} + +// WatchUpdatesOnly include only updates for keys. +func WatchUpdatesOnly() WatchOption { + return func(o *WatchOptions) { + o.UpdatesOnly = true + } +} + +// WatchMetaOnly retrieve only the meta data of the entry. +func WatchMetaOnly() WatchOption { + return func(o *WatchOptions) { + o.MetaOnly = true + } +} diff --git a/kvstore/plugins.go b/kvstore/plugins.go index 7fd523c..65a7163 100644 --- a/kvstore/plugins.go +++ b/kvstore/plugins.go @@ -1,23 +1,16 @@ package kvstore import ( - "context" - - "github.com/go-orb/go-orb/client" "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/registry" "github.com/go-orb/go-orb/types" "github.com/go-orb/go-orb/util/container" ) // ProviderFunc is provider function type used by plugins to create a new client. type ProviderFunc func( - ctx context.Context, name types.ServiceName, data types.ConfigData, logger log.Logger, - registry registry.Type, - client client.Type, opts ...Option, ) (Type, error) diff --git a/registry/plugins.go b/registry/plugins.go index 93305e6..c6030e9 100644 --- a/registry/plugins.go +++ b/registry/plugins.go @@ -11,6 +11,7 @@ type ProviderFunc func( serviceName types.ServiceName, serviceVersion types.ServiceVersion, data types.ConfigData, + components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/registry/registry.go b/registry/registry.go index 6751374..64c4e47 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -128,7 +128,7 @@ func Provide( cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, version, configs, cLogger, opts...) + instance, err := provider(name, version, configs, components, cLogger, opts...) if err != nil { return Type{}, err } diff --git a/types/types.go b/types/types.go index 587e817..d5572f2 100644 --- a/types/types.go +++ b/types/types.go @@ -39,6 +39,11 @@ func SplitServiceName[T ~string](serviceName T) []string { return strings.Split(string(serviceName), DefaultSeperator) } +// JoinServiceName joins a splitted servicename back together +func JoinServiceName(sections []string) ServiceName { + return ServiceName(strings.Join(sections, DefaultSeperator)) +} + // ConfigData holds a single config file marshaled to map[string]any, // this needs to be done to marshal data back into a components config struct. // From bec4ec0fb8e46b3932d0a1ac8441bb46178cebcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Sun, 9 Mar 2025 20:38:07 +0100 Subject: [PATCH 20/55] feat(server,client): Implement memory client/server #39 --- client/config.go | 2 +- client/memory.go | 37 +++++++++++++++++++++++++++++++++++++ server/server.go | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 client/memory.go diff --git a/client/config.go b/client/config.go index b5b772d..cd7da3d 100644 --- a/client/config.go +++ b/client/config.go @@ -16,7 +16,7 @@ var ( // DefaultContentType is the default Content-Type for calls. DefaultContentType = "application/x-protobuf" // DefaultPreferredTransports set's in which order a transport will be selected. - DefaultPreferredTransports = []string{"grpc", "drpc", "http", "grpcs", "h2c", "http2", "http3", "https"} + DefaultPreferredTransports = []string{"memory", "grpc", "drpc", "http", "grpcs", "h2c", "http2", "http3", "https"} // DefaultPoolHosts set the number of hosts in a pool. DefaultPoolHosts = 16 diff --git a/client/memory.go b/client/memory.go new file mode 100644 index 0000000..ba8317f --- /dev/null +++ b/client/memory.go @@ -0,0 +1,37 @@ +package client + +import ( + "context" + "fmt" + + "github.com/go-orb/go-orb/util/container" +) + +// MemoryServer is the interface that a memory server has to implement to be accepted by the client. +type MemoryServer interface { + // Request is the same as Request but without encoding. + Request(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error +} + +//nolint:gochecknoglobals +var memoryServers = container.NewMap[string, MemoryServer]() + +// RegisterMemoryServer registers a memory server for a service. +func RegisterMemoryServer(service string, server MemoryServer) { + memoryServers.Set(service, server) +} + +// UnregisterMemoryServer unregisters a memory server for a service. +func UnregisterMemoryServer(service string) { + memoryServers.Del(service) +} + +// ResolveMemoryServer resolves a memory server for a service. +func ResolveMemoryServer(service string) (MemoryServer, error) { + server, ok := memoryServers.Get(service) + if !ok { + return nil, fmt.Errorf("memory server not found for service %s", service) + } + + return server, nil +} diff --git a/server/server.go b/server/server.go index ce73962..4a59184 100644 --- a/server/server.go +++ b/server/server.go @@ -87,6 +87,7 @@ func Provide( eps := container.NewMap[string, Entrypoint]() if len(cfg.functionalEntrypoints) == 0 && len(cfg.Entrypoints) == 0 { + cfg.Entrypoints = append(cfg.Entrypoints, EntrypointConfig{Name: "memory", Plugin: "memory", Enabled: true}) cfg.Entrypoints = append(cfg.Entrypoints, EntrypointConfig{Name: "grpcs", Plugin: "grpc", Enabled: true}) } From 3344b754d7b1645e147bcfdd5187f05a119356cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 10 Mar 2025 14:03:43 +0100 Subject: [PATCH 21/55] chore(codecs): Rename Encode/Decode to Marshal/Unmarshal, issue #22 --- codecs/codecs.go | 27 +++++++++++++++------------ codecs/plugins.go | 6 +++--- config/config.go | 2 +- event/event.go | 10 +++++----- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/codecs/codecs.go b/codecs/codecs.go index 0addf6b..ac0331f 100644 --- a/codecs/codecs.go +++ b/codecs/codecs.go @@ -18,12 +18,21 @@ type Map map[string]Marshaler // Marshaler is able to encode/decode a content type to/from a byte sequence. type Marshaler interface { - // Encode encodes "v" into byte sequence. - Encode(v any) ([]byte, error) + // Marshal encodes "v" into byte sequence. + // "v" must be a pointer value. + // Deprecated: Use Marshaler.Marshal + Marshal(v any) ([]byte, error) - // Decode decodes "data" into "v". + // Unmarshal decodes "data" into "v". // "v" must be a pointer value. - Decode(data []byte, v any) error + // Deprecated: Use Marshaler.Unmarshal + Unmarshal(data []byte, v any) error + + // Marshals returns if this codec is able to encode the given type. + Marshals(v any) bool + + // Unmarshals returns if this codec is able to decode the given type. + Unmarshals(v any) bool // NewDecoder returns a Decoder which reads byte sequence from "r". NewDecoder(r io.Reader) Decoder @@ -31,18 +40,12 @@ type Marshaler interface { // NewEncoder returns an Encoder which writes bytes sequence into "w". NewEncoder(w io.Writer) Encoder - // Encodes returns if this codec is able to encode the given type. - Encodes(v any) bool - - // Decodes returns if this codec is able to decode the given type. - Decodes(v any) bool - // ContentTypes returns the list of content types this codec is able to // output. ContentTypes() []string - // String returns the codec name. - String() string + // Name returns the codec name. + Name() string // Exts returns the common file extensions for this encoder. Exts() []string diff --git a/codecs/plugins.go b/codecs/plugins.go index 52438b7..dfad67e 100644 --- a/codecs/plugins.go +++ b/codecs/plugins.go @@ -31,7 +31,7 @@ func updateMimeMap() { found := false for _, ve := range v { - if encoder.String() == ve.String() { + if encoder.Name() == ve.Name() { found = true break } @@ -81,7 +81,7 @@ func GetEncoder(mime string, v any) (Marshaler, error) { } for _, codec := range codecs { - if codec.Encodes(v) { + if codec.Marshals(v) { return codec, nil } } @@ -97,7 +97,7 @@ func GetDecoder(mime string, v any) (Marshaler, error) { } for _, codec := range codecs { - if codec.Decodes(v) { + if codec.Unmarshals(v) { return codec, nil } } diff --git a/config/config.go b/config/config.go index 45fbd5f..74ffbfe 100644 --- a/config/config.go +++ b/config/config.go @@ -179,7 +179,7 @@ func Dump(configs types.ConfigData) error { } for _, config := range configs { - jsonb, err := codec.Encode(config.Data) + jsonb, err := codec.Marshal(config.Data) if err == nil { fmt.Println(string(jsonb)) //nolint:forbidigo } diff --git a/event/event.go b/event/event.go index be840d2..3ccea6e 100644 --- a/event/event.go +++ b/event/event.go @@ -45,7 +45,7 @@ type Event struct { // Unmarshal the events message into an object. func (e *Event) Unmarshal(v any) error { - return e.Handler.GetPublishCodec().Decode(e.Payload, v) + return e.Handler.GetPublishCodec().Unmarshal(e.Payload, v) } // Ack acknowledges successful processing of the event in ManualAck mode. @@ -132,7 +132,7 @@ func (e *Req[TReq, TResp]) Request(ctx context.Context, handler Client, topic st codec, err := codecs.GetMime(e.ContentType) if err == nil { // The err here will be copied into the result. - d, err = codec.Encode(e.Data) + d, err = codec.Marshal(e.Data) } bEv := &Req[[]byte, any]{ @@ -150,7 +150,7 @@ func (e *Req[TReq, TResp]) Request(ctx context.Context, handler Client, topic st return result, orberrors.From(err) } - err = codec.Decode(reply, result) + err = codec.Unmarshal(reply, result) if err != nil { return result, orberrors.From(err) } @@ -197,7 +197,7 @@ func HandleRequest[TReq any, TResp any]( return } - err = codec.Decode(event.Data, rv) + err = codec.Unmarshal(event.Data, rv) if err != nil { event.replyFunc(ctx, nil, err) return @@ -211,7 +211,7 @@ func HandleRequest[TReq any, TResp any]( } // Encode the result and send it back to the plugin. - d, err := codec.Encode(result) + d, err := codec.Marshal(result) // Send the result. event.replyFunc(ctx, d, err) From 46fcb905cd457fb993020dd04ea01dc30f38b83a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 10 Mar 2025 15:45:13 +0100 Subject: [PATCH 22/55] feat(README): add matrix chat. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fa3f95..0399774 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ Everything is linted and staticaly analyzed by golangci-lint, enforced with CI p ## Community -Chat with us on [Discord](https://discord.gg/4n6E4NYjnR). +Chat with us on [Discord](https://discord.gg/4n6E4NYjnR) or [Matrix](https://matrix.to/#/#go-orb:jochum.dev). ## Development From efdbd0cbc92872985dbbf1abab1bf99f12eb5e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 10 Mar 2025 15:58:13 +0100 Subject: [PATCH 23/55] fix: lint error. --- types/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/types.go b/types/types.go index d5572f2..b0186a4 100644 --- a/types/types.go +++ b/types/types.go @@ -39,7 +39,7 @@ func SplitServiceName[T ~string](serviceName T) []string { return strings.Split(string(serviceName), DefaultSeperator) } -// JoinServiceName joins a splitted servicename back together +// JoinServiceName joins a splitted servicename back together. func JoinServiceName(sections []string) ServiceName { return ServiceName(strings.Join(sections, DefaultSeperator)) } From 28d27c7c856e4021625cac469ea1ef0414ad569c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 10 Mar 2025 16:01:37 +0100 Subject: [PATCH 24/55] fix: add google/uuid to the go.mod to fix linting. --- go.mod | 1 + go.sum | 2 ++ 2 files changed, 3 insertions(+) diff --git a/go.mod b/go.mod index fb5301c..07d6d24 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.23.0 require ( github.com/cornelk/hashmap v1.0.8 github.com/go-orb/wire v0.7.0 + github.com/google/uuid v1.6.0 github.com/hashicorp/go-multierror v1.1.1 ) diff --git a/go.sum b/go.sum index 197ffda..380ef3a 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= From e478c8d8cf27faf8cf26adb224fff7867970dddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 01:25:36 +0100 Subject: [PATCH 25/55] feat(orberrors): detect context errors in From(). --- go.mod | 1 + go.sum | 4 ++-- util/orberrors/orberrors.go | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 07d6d24..053fb8b 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( ) require ( + github.com/google/go-cmp v0.7.0 // indirect github.com/google/subcommands v1.2.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect diff --git a/go.sum b/go.sum index 380ef3a..8195202 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,8 @@ github.com/cornelk/hashmap v1.0.8/go.mod h1:RfZb7JO3RviW/rT6emczVuC/oxpdz4UsSB2L github.com/go-orb/wire v0.7.0 h1:P9S100bM8nhAgW6e7EJrbi5vzNXCsP/Q1ByIEV5+hUQ= github.com/go-orb/wire v0.7.0/go.mod h1:/ID7hS6X2F32YnuRgh+k8R/sjucoh4qciqe7dq2dY7g= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index dc40c32..e789864 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -2,6 +2,7 @@ package orberrors import ( + "context" "errors" "fmt" "net/http" @@ -119,6 +120,10 @@ func From(err error) *Error { return orbErr } + if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) { + return ErrRequestTimeout.Wrap(err) + } + // Else make a copy. return &Error{ Code: http.StatusInternalServerError, From 80781927b1350109974475a5ba3ca047f8684f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 01:25:55 +0100 Subject: [PATCH 26/55] feat(registry): Add String() helpers. --- registry/registry.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/registry/registry.go b/registry/registry.go index 64c4e47..abed400 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -4,6 +4,7 @@ package registry import ( "errors" "fmt" + "strings" "log/slog" @@ -65,6 +66,17 @@ type Service struct { Nodes []*Node `json:"nodes"` } +// String returns a string representation of the Service. +func (s *Service) String() string { + nodes := []string{} + for _, n := range s.Nodes { + nodes = append(nodes, n.String()) + } + + return fmt.Sprintf("Service{Name: %s, Version: %s, Nodes: (%s), Endpoints: %d}", + s.Name, s.Version, strings.Join(nodes, ", "), len(s.Endpoints)) +} + // Node represents a service node in a registry. // One service can be comprised of multiple nodes. type Node struct { @@ -76,6 +88,12 @@ type Node struct { Metadata map[string]string `json:"metadata"` } +// String returns a string representation of the Node. +func (n *Node) String() string { + return fmt.Sprintf("Node{ID: %s, Address: %s, Transport: %s}", + n.ID, n.Address, n.Transport) +} + // Endpoint represents a service endpoint in a registry. type Endpoint struct { Name string `json:"name"` @@ -84,6 +102,21 @@ type Endpoint struct { Metadata map[string]string `json:"metadata"` } +// String returns a string representation of the Endpoint. +func (e *Endpoint) String() string { + var reqName, respName string + if e.Request != nil { + reqName = e.Request.Name + } + + if e.Response != nil { + respName = e.Response.Name + } + + return fmt.Sprintf("Endpoint{Name: %s, Request: %s, Response: %s}", + e.Name, reqName, respName) +} + // Value is a value container used in the registry. type Value struct { Name string `json:"name"` @@ -91,6 +124,12 @@ type Value struct { Values []*Value `json:"values"` } +// String returns a string representation of the Value. +func (v *Value) String() string { + return fmt.Sprintf("Value{Name: %s, Type: %s, Values: %d}", + v.Name, v.Type, len(v.Values)) +} + // Provide is the registry provider for wire. // It parses the config from "configs", fetches the "Plugin" from the config and // then forwards all it's arguments to the factory which it get's from "Plugins". From 35ea494f073114678c2468b47d40bf76a3ad315a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 01:26:27 +0100 Subject: [PATCH 27/55] fix(client): Retry on more Timeout errors. --- client/retry.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/retry.go b/client/retry.go index 440bc5a..f3d0f14 100644 --- a/client/retry.go +++ b/client/retry.go @@ -32,6 +32,8 @@ func RetryOnTimeoutError(ctx context.Context, err error, options *CallOptions) ( // logic error that should be handled by the user. case 408: return true, nil + case 504: + fallthrough // Retry on connection error: Service Unavailable case 503: timeout := time.After(options.DialTimeout) @@ -60,6 +62,8 @@ func RetryOnConnectionError(ctx context.Context, err error, options *CallOptions err = orberrors.From(err) if errors.As(err, &orbe) { switch orbe.Code { + case 504: + fallthrough // Retry on connection error: Service Unavailable case 503: timeout := time.After(options.DialTimeout) From 13bc5bcb0777ae47068088a08fb70d1d081b6af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 01:26:48 +0100 Subject: [PATCH 28/55] fix(client): Better defaults, remove unused config values. --- client/config.go | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/client/config.go b/client/config.go index cd7da3d..667d1f9 100644 --- a/client/config.go +++ b/client/config.go @@ -19,11 +19,12 @@ var ( DefaultPreferredTransports = []string{"memory", "grpc", "drpc", "http", "grpcs", "h2c", "http2", "http3", "https"} // DefaultPoolHosts set the number of hosts in a pool. - DefaultPoolHosts = 16 - // DefaultPoolSize sets the connection pool size per service. - DefaultPoolSize = 100 + DefaultPoolHosts = 64 + // DefaultPoolSize sets the connection pool size. + // The effective pool size will be PoolHosts * PoolSize. + DefaultPoolSize = 10 // DefaultPoolTTL sets the connection pool ttl. - DefaultPoolTTL = time.Minute + DefaultPoolTTL = 30 * time.Minute // DefaultSelector is the default node selector. DefaultSelector = SelectRandomNode @@ -155,6 +156,14 @@ func WithClientAnyTransport() Option { } } +// WithClientPoolHosts overrides the PoolHosts of the client. +func WithClientPoolHosts(n int) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.PoolHosts = n + } +} + // WithClientPoolSize overrides the PoolSize of the client. func WithClientPoolSize(n int) Option { return func(cfg ConfigType) { @@ -285,13 +294,6 @@ type CallOptions struct { // PreferredTransports contains a list of transport names in preferred order. PreferredTransports []string - // PoolHosts sets the number of hosts in a pool - PoolHosts int - // PoolSize sets the connection pool size per service. - PoolSize int - // PoolTTL sets the connection pool ttl. - PoolTTL time.Duration - AnyTransport bool // Selector is the node selector. @@ -341,27 +343,6 @@ func WithPreferredTransports(n ...string) CallOption { } } -// WithPoolHosts sets the number of hosts in a pool. -func WithPoolHosts(n int) CallOption { - return func(o *CallOptions) { - o.PoolHosts = n - } -} - -// WithPoolSize sets the connection pool size per service. -func WithPoolSize(n int) CallOption { - return func(o *CallOptions) { - o.PoolSize = n - } -} - -// WithPoolTTL sets the connection pool ttl. -func WithPoolTTL(n time.Duration) CallOption { - return func(o *CallOptions) { - o.PoolTTL = n - } -} - // WithAnyTransport enables unconfigured (any) transports. func WithAnyTransport() CallOption { return func(o *CallOptions) { From 9996c5ae26597dd1b2f813f29fe51206b02ed0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 02:33:53 +0100 Subject: [PATCH 29/55] fix(event): fix return type of Clone(). --- event/event.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event/event.go b/event/event.go index 3ccea6e..156703c 100644 --- a/event/event.go +++ b/event/event.go @@ -82,7 +82,7 @@ type Client interface { HandleRequest(ctx context.Context, topic string, cb func(context.Context, *Req[[]byte, []byte])) // Clone creates a clone of the handler, this is useful for parallel requests. - Clone() Client + Clone() Type // GetCodec returns the codec used by the handler for publish and subscribe. GetPublishCodec() codecs.Marshaler From e44d2eb21aa98973755a7c18487cdc151d3fe37a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 03:45:06 +0100 Subject: [PATCH 30/55] fix(LICENSE): Make it maschine readable. --- LICENSE | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 190 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index c7fd055..cd482d8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,10 +1,198 @@ -Copyright 2024 The go-orb Authors. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, From 0e33342756e5e282e422bae541602a6ffd6f2c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 14:24:30 +0100 Subject: [PATCH 31/55] feat(client): Simplify Request remove RequestNoCodec. --- client/client.go | 37 +++---------------------------------- client/middleware.go | 11 ++--------- 2 files changed, 5 insertions(+), 43 deletions(-) diff --git a/client/client.go b/client/client.go index ac6aeac..b8796f3 100644 --- a/client/client.go +++ b/client/client.go @@ -4,12 +4,10 @@ package client import ( "context" "fmt" - "io" "net/url" "log/slog" - "github.com/go-orb/go-orb/codecs" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/registry" @@ -39,15 +37,8 @@ type Client interface { // ResolveService resolves a service to a list of nodes. ResolveService(ctx context.Context, service string, preferredTransports ...string) (NodeMap, error) - // NeedsCodec has to do node resolving and then selects the right transport for that node, - // it then has to return whatever the selected transport needs a codec or if it does encoding internaly. - NeedsCodec(ctx context.Context, req *Req[any, any], opts ...CallOption) bool - - // Request with encoding on client side. - Request(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) (*RawResponse, error) - - // RequestNoCodec is the same as Request but without encoding. - RequestNoCodec(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) error + // Request does the actual call. + Request(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) error } // Type is the client type it is returned when you use ProvideClient @@ -56,9 +47,6 @@ type Type struct { Client } -// RawResponse is a internal struct to pass the transport's response with metadata and content-type around. -type RawResponse = Response[io.Reader] - // Response will be returned by CallWithResponse. type Response[T any] struct { ContentType string @@ -151,26 +139,7 @@ func (r *Req[TResp, TReq]) Request(ctx context.Context, client Client, opts ...C node: r.node, } - if r.client.NeedsCodec(ctx, fwReq, opts...) { - cresp, cerr := r.client.Request(ctx, fwReq, result, opts...) - if cerr != nil { - return result, cerr - } - - codec, err := codecs.GetMime(cresp.ContentType) - if err != nil { - return result, orberrors.ErrBadRequest.Wrap(err) - } - - err = codec.NewDecoder(cresp.Body).Decode(result) - if err != nil { - return result, orberrors.ErrBadRequest.Wrap(err) - } - - return result, nil - } - - cerr := r.client.RequestNoCodec(ctx, fwReq, result, opts...) + cerr := r.client.Request(ctx, fwReq, result, opts...) return result, cerr } diff --git a/client/middleware.go b/client/middleware.go index 0e18202..48db492 100644 --- a/client/middleware.go +++ b/client/middleware.go @@ -16,11 +16,8 @@ type MiddlewareConfig struct { Name string `json:"name" yaml:"name"` } -// MiddlewareRequestHandler is the middleware handler for client.Request. -type MiddlewareRequestHandler func(ctx context.Context, req *Req[any, any], opts *CallOptions) (*RawResponse, error) - -// MiddlewareRequestNoCodecHandler is the middleware handler for client.Request without a codec in between. -type MiddlewareRequestNoCodecHandler func(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error +// MiddlewareRequestHandler is the middleware handler for client.Request without a codec in between. +type MiddlewareRequestHandler func(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error // Middleware is the middleware for clients. type Middleware interface { @@ -29,10 +26,6 @@ type Middleware interface { Request( next MiddlewareRequestHandler, ) MiddlewareRequestHandler - - RequestNoCodec( - next MiddlewareRequestNoCodecHandler, - ) MiddlewareRequestNoCodecHandler } // MiddlewareFactory is used to create a new client Middleware. From a3a34a1efb07e6c225250c680f61843f5c9c74a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 15:59:29 +0100 Subject: [PATCH 32/55] feat(client): Move retry logic in a middleware. --- client/config.go | 59 +++++++++------------------------- client/retry.go | 82 ------------------------------------------------ 2 files changed, 15 insertions(+), 126 deletions(-) delete mode 100644 client/retry.go diff --git a/client/config.go b/client/config.go index 667d1f9..e15235e 100644 --- a/client/config.go +++ b/client/config.go @@ -1,6 +1,7 @@ package client import ( + "context" "crypto/tls" "time" ) @@ -30,10 +31,6 @@ var ( DefaultSelector = SelectRandomNode // DefaultBackoff is the default backoff function for retries. DefaultBackoff = BackoffExponential - // DefaultRetry is the default check-for-retry function for retries. - DefaultRetry = RetryOnConnectionError - // DefaultRetries is the default number of times a request is tried. - DefaultRetries = 5 // DefaultDialTimeout is the default dial timeout. DefaultDialTimeout = time.Second * 5 @@ -45,21 +42,17 @@ var ( DefaultStreamTimeout = time.Duration(0) // DefaultConnClose indicates whetever to close the connection after each request. DefaultConnClose = false + + // DefaultCallOptionsRetryFunc is nil, so it uses the middlewares default. + DefaultCallOptionsRetryFunc = (RetryFunc)(nil) + + // DefaultCallOptionsRetries is 0, so it uses the middlewares default. + DefaultCallOptionsRetries = 0 ) -// TODO(jochumdev): Uncommenting this sorts preferred Transports. -// func init() { -// err := cli.Flags.Add(cli.NewFlag( -// "client_transports", -// DefaultPreferredTransports, -// cli.ConfigPathSlice([]string{"client", "preferredTransports"}), -// cli.Usage("Transports in theier preferred order"), -// cli.EnvVars("CLIENT_TRANSPORTS"), -// )) -// if err != nil && !errors.Is(err, cli.ErrFlagExists) { -// panic(err) -// } -// } +// RetryFunc is the type for a retry func. +// note that returning either false or a non-nil error will result in the call not being retried. +type RetryFunc func(ctx context.Context, err error, options *CallOptions) (bool, error) var _ (ConfigType) = (*Config)(nil) @@ -102,10 +95,7 @@ type Config struct { // Backoff func Backoff BackoffFunc `json:"-" yaml:"-"` - // Check if retriable func - Retry RetryFunc `json:"-" yaml:"-"` - // Number of Call attempts - Retries int `json:"retries" yaml:"retries"` + // Transport Dial Timeout. Used for initial dial to establish a connection. DialTimeout time.Duration `json:"dialTimeout" yaml:"dialTimeout"` // ConnectionTimeout of one request to the server. @@ -196,22 +186,6 @@ func WithClientBackoff(n BackoffFunc) Option { } } -// WithClientRetry overrides the retry function. -func WithClientRetry(n RetryFunc) Option { - return func(cfg ConfigType) { - c := cfg.config() - c.Retry = n - } -} - -// WithClientRetries overrides the number of retries to make. -func WithClientRetries(n int) Option { - return func(cfg ConfigType) { - c := cfg.config() - c.Retries = n - } -} - // WithClientDialTimeout overrides the dial timeout. func WithClientDialTimeout(n time.Duration) Option { return func(cfg ConfigType) { @@ -269,8 +243,6 @@ func NewConfig(opts ...Option) Config { PoolHosts: DefaultPoolHosts, PoolSize: DefaultPoolSize, PoolTTL: DefaultPoolTTL, - Retry: DefaultRetry, - Retries: DefaultRetries, DialTimeout: DefaultDialTimeout, ConnectionTimeout: DefaultConnectionTimeout, RequestTimeout: DefaultRequestTimeout, @@ -301,7 +273,7 @@ type CallOptions struct { // Backoff func Backoff BackoffFunc // Check if retriable func - Retry RetryFunc + RetryFunc RetryFunc // Number of Call attempts Retries int // Transport Dial Timeout. Used for initial dial to establish a connection. @@ -365,11 +337,10 @@ func WithBackoff(fn BackoffFunc) CallOption { } } -// WithRetry is a CallOption which overrides that which -// set in Options.CallOptions. -func WithRetry(fn RetryFunc) CallOption { +// WithRetryFunc is a CallOption which overrides the retry function. +func WithRetryFunc(fn RetryFunc) CallOption { return func(o *CallOptions) { - o.Retry = fn + o.RetryFunc = fn } } diff --git a/client/retry.go b/client/retry.go deleted file mode 100644 index f3d0f14..0000000 --- a/client/retry.go +++ /dev/null @@ -1,82 +0,0 @@ -package client - -import ( - "context" - "errors" - "time" - - "github.com/go-orb/go-orb/util/orberrors" -) - -// RetryFunc is the type for a retry func. -// note that returning either false or a non-nil error will result in the call not being retried. -type RetryFunc func(ctx context.Context, err error, options *CallOptions) (bool, error) - -// RetryAlways always retry on error. -func RetryAlways(_ context.Context, _ error, _ *CallOptions) (bool, error) { - return true, nil -} - -// RetryOnTimeoutError retries a request on a 408 timeout error. -func RetryOnTimeoutError(ctx context.Context, err error, options *CallOptions) (bool, error) { - if err == nil { - return false, nil - } - - var orbe *orberrors.Error - - err = orberrors.From(err) - if errors.As(err, &orbe) { - switch orbe.Code { - // Retry on timeout, not on 500 internal server error, as that is a business - // logic error that should be handled by the user. - case 408: - return true, nil - case 504: - fallthrough - // Retry on connection error: Service Unavailable - case 503: - timeout := time.After(options.DialTimeout) - select { - case <-ctx.Done(): - return false, nil - case <-timeout: - return true, nil - } - default: - return false, nil - } - } - - return false, nil -} - -// RetryOnConnectionError retries a request on a 503 connection error. -func RetryOnConnectionError(ctx context.Context, err error, options *CallOptions) (bool, error) { - if err == nil { - return false, nil - } - - var orbe *orberrors.Error - - err = orberrors.From(err) - if errors.As(err, &orbe) { - switch orbe.Code { - case 504: - fallthrough - // Retry on connection error: Service Unavailable - case 503: - timeout := time.After(options.DialTimeout) - select { - case <-ctx.Done(): - return false, nil - case <-timeout: - return true, nil - } - default: - return false, nil - } - } - - return false, nil -} From 719a1b81cba1c79806d42be19d9310f2746826b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 11 Mar 2025 17:30:17 +0100 Subject: [PATCH 33/55] feat(cli): Implement config from memory, refs #25. --- README.md | 14 ++++-- cli/cli.go | 4 ++ cli/provider.go | 112 ++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 105 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 0399774..81eae53 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,13 @@ Please have a look at our [roadmap](https://github.com/orgs/go-orb/projects/1) f ## Overview Go Orb provides the core requirements for distributed systems development including RPC and Event driven communication. -The Go Orb philosophy is sane defaults with a pluggable architecture. We provide defaults to get you started quickly -but everything can be easily swapped out. +The Go Orb philosophy is sane defaults with a pluggable architecture. We provide defaults to get you started quickly but everything can be easily swapped out. ## Features Go Orb abstracts away the details of distributed systems. Here are the main features. -- **Config** - Load dynamic config from anywhere. The config interface provides a way to load application level config from any source such as env vars, file. You can merge the sources and even define fallbacks. +- **Config** - Load dynamic config from anywhere. The config interface provides a way to load application level config from any source such as env vars, file and http. You can merge the sources and even define fallbacks. - **Service Discovery** - Automatic service registration and name resolution. Service discovery is at the core of Go Orb service development. When service A needs to speak to service B it needs the location of that service. The default discovery mechanism is multicast DNS (mdns), a zeroconf system. @@ -61,6 +60,7 @@ See the config system entry on howto configure it. With orb you can configure your plugins with a config file or environment options. + ```yaml service1: server: @@ -73,6 +73,10 @@ service1: plugin: grpc insecure: true reflection: false + client: + middlewares: + - name: log + - name: retry registry: enabled: true plugin: mdns @@ -109,6 +113,10 @@ service1: - name: drpc plugin: drpc + client: + middlewares: + - name: log + - name: retry registry: plugin: consul address: consul:8500 diff --git a/cli/cli.go b/cli/cli.go index 4b95113..f5a1728 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -13,6 +13,10 @@ type App struct { NoAction bool NoGlobalConfig bool + Configs []string + ConfigsFormat []string + ConfigURLs []string + // Internal InternalAction func() error } diff --git a/cli/provider.go b/cli/provider.go index a965fde..3be9257 100644 --- a/cli/provider.go +++ b/cli/provider.go @@ -1,6 +1,8 @@ package cli import ( + "encoding/base64" + "fmt" "net/url" "github.com/go-orb/go-orb/codecs" @@ -62,6 +64,17 @@ func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { func ProvideConfigData(serviceContext *ServiceContext, flags []*Flag) (types.ConfigData, error) { results := types.ConfigData{} + // Load configs from memory (App().Configs and App().ConfigsFormat). + if err := loadInMemoryConfigs(serviceContext, &results); err != nil { + return nil, err + } + + // Load configs from URLs (App().ConfigURLs). + if err := loadConfigURLs(serviceContext, &results); err != nil { + return nil, err + } + + // Initialize CLI-based config. mJSON, err := codecs.GetMime(codecs.MimeJSON) if err != nil { return nil, err @@ -71,42 +84,97 @@ func ProvideConfigData(serviceContext *ServiceContext, flags []*Flag) (types.Con Data: make(map[string]any), Marshaler: mJSON, } - results = append(results, cliResult) + // Process command-line flags. + if err := processFlags(serviceContext, flags, &results, cliResult.Data); err != nil { + return nil, err + } + + return results, nil +} + +// loadInMemoryConfigs loads configs from memory strings (serviceContext.App().Configs). +func loadInMemoryConfigs(serviceContext *ServiceContext, results *types.ConfigData) error { + app := serviceContext.App() + if app.Configs == nil || app.ConfigsFormat == nil || len(app.Configs) != len(app.ConfigsFormat) { + return nil + } + + for i, configData := range app.Configs { + b64 := base64.URLEncoding.EncodeToString([]byte(configData)) + urlString := fmt.Sprintf("file:///memory%d.%s?base64=%s", i, app.ConfigsFormat[i], b64) + + config, err := loadConfigFromURL(urlString) + if err != nil { + return err + } + + *results = append(*results, config...) + } + + return nil +} + +// loadConfigURLs loads configs from URL strings (serviceContext.App().ConfigURLs). +func loadConfigURLs(serviceContext *ServiceContext, results *types.ConfigData) error { + app := serviceContext.App() + if app.ConfigURLs == nil { + return nil + } + + for _, urlString := range app.ConfigURLs { + config, err := loadConfigFromURL(urlString) + if err != nil { + return err + } + + *results = append(*results, config...) + } + + return nil +} + +// loadConfigFromURL loads config from a single URL string. +func loadConfigFromURL(urlString string) (types.ConfigData, error) { + u, err := url.Parse(urlString) + if err != nil { + return nil, fmt.Errorf("invalid URL %s: %w", urlString, err) + } + + config, err := config.Read([]*url.URL{u}) + if err != nil { + return nil, fmt.Errorf("failed to read config from %s: %w", urlString, err) + } + + return config, nil +} + +// processFlags processes CLI flags and loads any config files specified. +func processFlags(serviceContext *ServiceContext, flags []*Flag, results *types.ConfigData, cliData map[string]any) error { for _, flag := range flags { - // The config flag is a special case, as you can add additional config files. - // E.g. `--config cfg-a.yaml --config cfg-b.yaml`, here we keep track of them. + // Special handling for --config flag which loads additional config files. if flag.Name == "config" { - var ( - urls []string - ok bool - ) - - if urls, ok = flag.Value.([]string); !ok { - // We ignore this here if the user developed another config variable. - continue + urls, ok := flag.Value.([]string) + if !ok { + continue // Skip if not a []string (user redefined config flag). } - for _, t := range urls { - u, err := url.Parse(t) + for _, urlString := range urls { + config, err := loadConfigFromURL(urlString) if err != nil { - return nil, err + return err } - config, err := config.Read([]*url.URL{u}) - if err != nil { - return nil, err - } - - results = append(results, config...) + *results = append(*results, config...) } continue } - flagToMap(types.SplitServiceName(serviceContext.Name()), flag, cliResult.Data) + // Add regular flags to the CLI config data. + flagToMap(types.SplitServiceName(serviceContext.Name()), flag, cliData) } - return results, nil + return nil } From c61292ec320efbe977d9fea7b47d155fd8286230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 12 Mar 2025 04:49:12 +0100 Subject: [PATCH 34/55] fix(kvstore): Comments. --- kvstore/kvstore.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go index d9b6b50..b0efe4c 100644 --- a/kvstore/kvstore.go +++ b/kvstore/kvstore.go @@ -50,23 +50,23 @@ type KVStore interface { Deprecated // Get takes a key, database, table and optional GetOptions. It returns the Record or an error. - // Leave database and table empty to use the defaults. + // Leave database and/or table empty to use the defaults. Get(key, database, table string, opts ...GetOption) ([]Record, error) // Set takes a key, database, table and data, and optional SetOptions. - // Leave database and table empty to use the defaults. + // Leave database and/or table empty to use the defaults. Set(key, database, table string, data []byte, opts ...SetOption) error // Purge takes a key, database and table and purges it. - // Leave database and table empty to use the defaults. + // Leave database and/or table empty to use the defaults. Purge(key, database, table string) error // Keys returns any keys that match, or an empty list with no error if none matched. - // Leave database and table empty to use the defaults. + // Leave database and/or table empty to use the defaults. Keys(database, table string, opts ...KeysOption) ([]string, error) // DropTable drops the table. - // Leave database and table empty to use the defaults. + // Leave database and/or table empty to use the defaults. DropTable(database, table string) error // DropDatabase drops the database. From e171cd320e7d1e527b384ce58eff322fac25f0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 12 Mar 2025 05:52:01 +0100 Subject: [PATCH 35/55] feat(log): Optimize it. --- log/config.go | 17 ++++++++++++---- log/level.go | 47 +++++++++++++++++++++++++++++++++----------- log/log.go | 54 ++++++++++++++++++++------------------------------- 3 files changed, 70 insertions(+), 48 deletions(-) diff --git a/log/config.go b/log/config.go index 16f5e4d..1d230f7 100644 --- a/log/config.go +++ b/log/config.go @@ -1,5 +1,7 @@ package log +import "log/slog" + // //nolint:gochecknoglobals var ( @@ -57,15 +59,22 @@ func NewConfig(opts ...Option) Config { } // WithLevel sets the log level to user. -// TODO(davincible): would love to take in something like ( slog.Level | string | constraints.Integer) here, -// but not sure how that would work. -func WithLevel(n string) Option { +func WithLevel[T slog.Level | string](n T) Option { return func(cfg ConfigType) { c := cfg.config() - c.Level = n + switch t := any(n).(type) { + case slog.Level: + c.Level = slogLevelToString(t) + case string: + c.Level = t + default: + c.Level = DefaultLevel + } } } +// WithPlugin sets the logger plugin to be used. + // WithPlugin sets the logger plugin to be used. // A logger plugin is the underlying handler the logger will use to process // log events. To add your custom handler, register it as a plugin. diff --git a/log/level.go b/log/level.go index 9beab46..f24acd5 100644 --- a/log/level.go +++ b/log/level.go @@ -14,7 +14,10 @@ import ( // slog.Level | string | constraints.Integer // } const ( - LevelTrace slog.Level = slog.LevelDebug - 1 + // LevelTrace must be added, because [slog] package does not have one by default. + // Generate it by subtracting 4 levels from [slog.Debug] following the example of + // [slog.LevelWarn] and [slog.LevelError] which are set to 4 and 8. + LevelTrace slog.Level = slog.LevelDebug - 4 LevelDebug slog.Level = slog.LevelDebug LevelInfo slog.Level = slog.LevelInfo LevelWarn slog.Level = slog.LevelWarn @@ -23,24 +26,46 @@ const ( LevelFatal slog.Level = slog.LevelError + 4 ) -// ParseLevel parses a string level to an Level. -func ParseLevel(l string) (slog.Level, error) { +// slogLevelToString converts a slog.Level to a string. +func slogLevelToString(l slog.Level) string { + switch l { + case LevelTrace: + return "TRACE" + case LevelDebug: + return "DEBUG" + case LevelInfo: + return "INFO" + case LevelWarn: + return "WARN" + case LevelNotice: + return "NOTICE" + case LevelError: + return "ERROR" + case LevelFatal: + return "FATAL" + default: + return fmt.Sprintf("Level(%d)", l) + } +} + +// stringToSlogLevel parses a string level to an Level. +func stringToSlogLevel(l string) slog.Level { switch strings.ToUpper(l) { case "TRACE": - return LevelTrace, nil + return LevelTrace case "DEBUG": - return LevelDebug, nil + return LevelDebug case "INFO": - return LevelInfo, nil + return LevelInfo case "WARN": - return LevelWarn, nil + return LevelWarn case "NOTICE": - return LevelNotice, nil + return LevelNotice case "ERROR": - return LevelError, nil + return LevelError case "FATAL": - return LevelFatal, nil + return LevelFatal default: - return LevelInfo, fmt.Errorf("parselevel: unknown level %s", l) + return stringToSlogLevel(DefaultLevel) } } diff --git a/log/log.go b/log/log.go index b33ff80..caaa569 100644 --- a/log/log.go +++ b/log/log.go @@ -44,37 +44,38 @@ func New(opts ...Option) (Logger, error) { } // NewConfigDatas will create a new logger with the given configs, -// as well as this logger's fields. -// TODO(jochumdev): Simplify this. +// as well as the given fields. func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) (Logger, error) { - var cfg Config - if configs == nil { - cfg = NewConfig(opts...) + // Initialize configuration + cfg := NewConfig(opts...) + // Parse configuration + if configs == nil { + var err error data, err := config.ParseStruct(append(sections, DefaultConfigSection), &cfg) + if err != nil { return Logger{}, fmt.Errorf("while creating a new config: %w", err) } configs = []source.Data{data} - } else { - cfg = NewConfig(opts...) - if err := config.Parse(append(sections, DefaultConfigSection), configs, &cfg); err != nil { - return Logger{}, fmt.Errorf("while creating a new config: %w", err) - } + } else if err := config.Parse(append(sections, DefaultConfigSection), configs, &cfg); err != nil { + return Logger{}, fmt.Errorf("while creating a new config: %w", err) } + // Get the plugin pf, ok := plugins.Get(cfg.Plugin) if !ok { - slog.Error("getting a logger plugin", "plugin", cfg.Plugin) return Logger{}, fmt.Errorf("while getting the log plugin '%s'", cfg.Plugin) } + // Get or create the provider provider, err := pf(sections, configs, opts...) if err != nil { return Logger{}, err } + // Get provider from cache or initialize it cachedProvider, ok := pluginsCache.Get(provider.Key()) if !ok { if err := provider.Start(); err != nil { @@ -85,27 +86,24 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) cachedProvider = provider } + // Get handler and create level handler handler, err := cachedProvider.Handler() if err != nil { return Logger{}, err } - lvl, err := ParseLevel(cfg.Level) - if err != nil { - return Logger{}, err - } - - lvlHandler, err := NewLevelHandler(lvl, handler) + lvlHandler, err := NewLevelHandler(stringToSlogLevel(cfg.Level), handler) if err != nil { return Logger{}, err } - fields := []any{} + // Create logger with fields + fields := make([]any, 0, len(cfg.Fields)*2) for k, v := range cfg.Fields { fields = append(fields, slog.Any(k, v)) } - r := Logger{ + logger := Logger{ Logger: slog.New(lvlHandler), pluginProvider: cachedProvider, config: cfg, @@ -113,10 +111,10 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) } if len(fields) > 0 { - r.Logger = r.Logger.With(fields...) + logger.Logger = logger.Logger.With(fields...) } - return r, nil + return logger, nil } // Provide provides a new logger. @@ -171,12 +169,7 @@ func (l Logger) WithLevel(level string) Logger { return l } - lvl, err := ParseLevel(level) - if err != nil { - return l - } - - l.Logger = slog.New(&LevelHandler{lvl, handler}) + l.Logger = slog.New(&LevelHandler{stringToSlogLevel(level), handler}) } return l @@ -255,12 +248,7 @@ func (l Logger) Type() string { // Level returns the level as int. func (l Logger) Level() slog.Level { - lvl, err := ParseLevel(l.config.Level) - if err != nil { - l.Error("While parsing the level", "error", err) - } - - return lvl + return stringToSlogLevel(l.config.Level) } // Trace logs at TraceLevel. From 62764b49ae9c829c3652adb5ccbcc2791caabff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 13 Mar 2025 06:30:28 +0100 Subject: [PATCH 36/55] feat(client,server): Implement streaming, feat #19 --- client/backoff.go | 28 ------- client/client.go | 149 ++++++------------------------------ client/config.go | 59 ++++++++------ client/memory.go | 7 +- client/middleware.go | 2 +- client/selector.go | 3 + client/stream.go | 106 +++++++++++++++++++++++++ event/config.go | 4 +- go.mod | 3 +- go.sum | 3 + registry/registry.go | 49 ++++++++---- server/config.go | 52 +++++++++++-- server/server.go | 2 +- types/types.go | 8 +- util/orberrors/orberrors.go | 3 + 15 files changed, 268 insertions(+), 210 deletions(-) delete mode 100644 client/backoff.go create mode 100644 client/stream.go diff --git a/client/backoff.go b/client/backoff.go deleted file mode 100644 index f650259..0000000 --- a/client/backoff.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - "math" - "time" -) - -const maxAttempts = 13 -const backOffSeconds = 120 - -// BackoffFunc is the type for backoff funcs. -type BackoffFunc func(ctx context.Context, req Req[any, any], attempts int) (time.Duration, error) - -// exponentialDo is a function x^e multiplied by a factor of 0.1 second. -// Result is limited to 2 minute. -func exponentialDo(attempts int) time.Duration { - if attempts > maxAttempts { - return backOffSeconds * time.Second - } - - return time.Duration(math.Pow(float64(attempts), math.E)) * time.Millisecond * 100 -} - -// BackoffExponential uses expentionalDo to calc the duration to wait. -func BackoffExponential(_ context.Context, _ Req[any, any], attempts int) (time.Duration, error) { - return exponentialDo(attempts), nil -} diff --git a/client/client.go b/client/client.go index b8796f3..5115662 100644 --- a/client/client.go +++ b/client/client.go @@ -4,7 +4,6 @@ package client import ( "context" "fmt" - "net/url" "log/slog" @@ -12,33 +11,26 @@ import ( "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/registry" "github.com/go-orb/go-orb/types" - "github.com/go-orb/go-orb/util/orberrors" ) // ComponentType is the client component type name. const ComponentType = "client" -// NodeMap is the type for a string map with list of registry nodes. -type NodeMap map[string][]*registry.Node - // Client is the interface for clients. type Client interface { types.Component - // Logger returns the logger. - Logger() log.Logger - // Config returns the internal config, this is for tests. Config() Config // With closes all transports and configures the client with the given options. With(opts ...Option) error - // ResolveService resolves a service to a list of nodes. - ResolveService(ctx context.Context, service string, preferredTransports ...string) (NodeMap, error) - // Request does the actual call. - Request(ctx context.Context, req *Req[any, any], result any, opts ...CallOption) error + Request(ctx context.Context, service string, endpoint string, req any, result any, opts ...CallOption) error + + // Stream creates a streaming client to the specified service endpoint. + Stream(ctx context.Context, service string, endpoint string, opts ...CallOption) (StreamIface[any, any], error) } // Type is the client type it is returned when you use ProvideClient @@ -47,126 +39,25 @@ type Type struct { Client } -// Response will be returned by CallWithResponse. -type Response[T any] struct { - ContentType string - Body T -} - -// Req is a request for Client. -type Req[TResp any, TReq any] struct { - service string - endpoint string - - // The unencoded request - request TReq - - client Client - - node *registry.Node -} - -// Service returns the Service from the request. -func (r *Req[TResp, TReq]) Service() string { - return r.service -} +// RequestInfosKey is the key for the request infos in the context. +type RequestInfosKey struct{} -// Endpoint returns the Endpoint from the request. -func (r *Req[TResp, TReq]) Endpoint() string { - return r.endpoint +// RequestInfos contains the request infos. +type RequestInfos struct { + Service string + Endpoint string + Transport string + Address string } -// Req returns the Request. -func (r *Req[TResp, TReq]) Req() TReq { - return r.request +// RequestInfo returns the request infos from the context. +func RequestInfo(ctx context.Context) (RequestInfos, bool) { + v, ok := ctx.Value(RequestInfosKey{}).(*RequestInfos) + return *v, ok } -// Node returns the Node. -func (r *Req[TResp, TReq]) Node(ctx context.Context, opts *CallOptions) (*registry.Node, error) { - if r.node != nil { - return r.node, nil - } - - if opts.URL != "" { - myU1rl, err := url.Parse(opts.URL) - if err != nil { - return nil, orberrors.ErrBadRequest.Wrap(err) - } - - node := ®istry.Node{ - ID: "url", - Address: myU1rl.Host, - Transport: myU1rl.Scheme, - } - - r.node = node - - return node, nil - } - - // Resolve the service to a list of nodes in a per transport map. - nodes, err := r.client.ResolveService(ctx, r.service, opts.PreferredTransports...) - if err != nil { - r.client.Logger().Error("Failed to resolve service", "error", err, "service", r.service) - return nil, err - } - - // Run the configured Selector to get a node from the resolved nodes. - node, err := opts.Selector(ctx, r.service, nodes, opts.PreferredTransports, opts.AnyTransport) - if err != nil { - r.client.Logger().Error("Failed to resolve service", "error", err, "service", r.service) - return nil, err - } - - r.node = node - - return r.node, nil -} - -// Request forward's the Request to Client.Request() and decodes the result into resp with the type TResp. -func (r *Req[TResp, TReq]) Request(ctx context.Context, client Client, opts ...CallOption) (resp *TResp, err error) { - r.client = client - - var result = new(TResp) - - // Create a [any, any] copy of Request to forward it. - // TODO(jochumdev): see if there's a better way to do this. - fwReq := &Req[any, any]{ - service: r.service, - endpoint: r.endpoint, - request: r.request, - client: r.client, - node: r.node, - } - - cerr := r.client.Request(ctx, fwReq, result, opts...) - - return result, cerr -} - -// NewRequest creates a request for a service+endpoint. -// -// Example (with call): +// Request is a typesafe shortcut for making a request. // -// resp, err := client.NewRequest[FooResponse]( -// "service1", "Say.Hello", myRequest, -// ).Call(context.Background(), clientFromWire) -// -// Response will be of type *FooResponse. -func NewRequest[TResp any, TReq any]( - service string, - endpoint string, - req TReq, -) *Req[TResp, TReq] { - return &Req[TResp, TReq]{ - service: service, - endpoint: endpoint, - - request: req, - } -} - -// Request makes a request with the client, it's a shortcut for NewRequest(...).Request(...) // Example: // // resp , err := client.Request[FooResponse](context.Background(), clientWire, "service1", "Say.Hello", fooRequest) @@ -180,7 +71,11 @@ func Request[TResp any, TReq any]( req TReq, opts ...CallOption, ) (*TResp, error) { - return NewRequest[TResp](service, endpoint, req).Request(ctx, client, opts...) + result := new(TResp) + + err := client.Request(ctx, service, endpoint, req, result, opts...) + + return result, err } // Provide creates a new client instance with the implementation from cfg.Plugin. diff --git a/client/config.go b/client/config.go index e15235e..92a37e5 100644 --- a/client/config.go +++ b/client/config.go @@ -29,8 +29,6 @@ var ( // DefaultSelector is the default node selector. DefaultSelector = SelectRandomNode - // DefaultBackoff is the default backoff function for retries. - DefaultBackoff = BackoffExponential // DefaultDialTimeout is the default dial timeout. DefaultDialTimeout = time.Second * 5 @@ -48,6 +46,11 @@ var ( // DefaultCallOptionsRetries is 0, so it uses the middlewares default. DefaultCallOptionsRetries = 0 + + // DefaultMaxCallRecvMsgSize is the default maximum size of the call receive message size. + DefaultMaxCallRecvMsgSize = 10 * 1024 * 1024 + // DefaultMaxCallSendMsgSize is the default maximum size of the call send message size. + DefaultMaxCallSendMsgSize = 10 * 1024 * 1024 ) // RetryFunc is the type for a retry func. @@ -93,9 +96,6 @@ type Config struct { // SelectorFunc get's executed by client.SelectNode which get it's info's from client.ResolveService. Selector SelectorFunc `json:"-" yaml:"-"` - // Backoff func - Backoff BackoffFunc `json:"-" yaml:"-"` - // Transport Dial Timeout. Used for initial dial to establish a connection. DialTimeout time.Duration `json:"dialTimeout" yaml:"dialTimeout"` // ConnectionTimeout of one request to the server. @@ -178,14 +178,6 @@ func WithClientSelector(n SelectorFunc) Option { } } -// WithClientBackoff overrides the clients backoff func. -func WithClientBackoff(n BackoffFunc) Option { - return func(cfg ConfigType) { - c := cfg.config() - c.Backoff = n - } -} - // WithClientDialTimeout overrides the dial timeout. func WithClientDialTimeout(n time.Duration) Option { return func(cfg ConfigType) { @@ -270,8 +262,6 @@ type CallOptions struct { // Selector is the node selector. Selector SelectorFunc - // Backoff func - Backoff BackoffFunc // Check if retriable func RetryFunc RetryFunc // Number of Call attempts @@ -292,8 +282,18 @@ type CallOptions struct { URL string // TLS config. TLSConfig *tls.Config + + // Metadata to be sent with the request. + Metadata map[string]string + // ResponseMetadata will be written into `ResponseMetadata` when given. ResponseMetadata map[string]string + + // MaxCallRecvMsgSize is the maximum size of the call receive message size. + MaxCallRecvMsgSize int + + // MaxCallSendMsgSize is the maximum size of the call send message size. + MaxCallSendMsgSize int } // CallOption used by Call or Stream. @@ -329,14 +329,6 @@ func WithSelector(fn SelectorFunc) CallOption { } } -// WithBackoff is a CallOption which overrides that which -// set in Options.CallOptions. -func WithBackoff(fn BackoffFunc) CallOption { - return func(o *CallOptions) { - o.Backoff = fn - } -} - // WithRetryFunc is a CallOption which overrides the retry function. func WithRetryFunc(fn RetryFunc) CallOption { return func(o *CallOptions) { @@ -398,9 +390,30 @@ func WithTLSConfig(n *tls.Config) CallOption { } } +// WithMetadata sets the metadata to be sent with the request. +func WithMetadata(n map[string]string) CallOption { + return func(o *CallOptions) { + o.Metadata = n + } +} + // WithResponseMetadata will write response Metadata into the give map. func WithResponseMetadata(n map[string]string) CallOption { return func(o *CallOptions) { o.ResponseMetadata = n } } + +// WithMaxCallRecvMsgSize sets the maximum size of the call receive message size. +func WithMaxCallRecvMsgSize(n int) CallOption { + return func(o *CallOptions) { + o.MaxCallRecvMsgSize = n + } +} + +// WithMaxCallSendMsgSize sets the maximum size of the call send message size. +func WithMaxCallSendMsgSize(n int) CallOption { + return func(o *CallOptions) { + o.MaxCallSendMsgSize = n + } +} diff --git a/client/memory.go b/client/memory.go index ba8317f..07d2897 100644 --- a/client/memory.go +++ b/client/memory.go @@ -9,8 +9,11 @@ import ( // MemoryServer is the interface that a memory server has to implement to be accepted by the client. type MemoryServer interface { - // Request is the same as Request but without encoding. - Request(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error + // Request does the actual call. + Request(ctx context.Context, infos RequestInfos, req any, result any, opts *CallOptions) error + + // Stream creates a streaming client to the specified service endpoint. + Stream(ctx context.Context, infos RequestInfos, opts *CallOptions) (StreamIface[any, any], error) } //nolint:gochecknoglobals diff --git a/client/middleware.go b/client/middleware.go index 48db492..2094b9f 100644 --- a/client/middleware.go +++ b/client/middleware.go @@ -17,7 +17,7 @@ type MiddlewareConfig struct { } // MiddlewareRequestHandler is the middleware handler for client.Request without a codec in between. -type MiddlewareRequestHandler func(ctx context.Context, req *Req[any, any], result any, opts *CallOptions) error +type MiddlewareRequestHandler func(ctx context.Context, service string, endpoint string, req any, result any, opts *CallOptions) error // Middleware is the middleware for clients. type Middleware interface { diff --git a/client/selector.go b/client/selector.go index 43d208e..dbc0d21 100644 --- a/client/selector.go +++ b/client/selector.go @@ -9,6 +9,9 @@ import ( "github.com/go-orb/go-orb/registry" ) +// NodeMap hold registry nodes grouped by transport. +type NodeMap map[string][]*registry.Node + // SelectorFunc get's executed by client.SelectNode which get it's info's from client.ResolveService. type SelectorFunc func( ctx context.Context, diff --git a/client/stream.go b/client/stream.go new file mode 100644 index 0000000..40091d0 --- /dev/null +++ b/client/stream.go @@ -0,0 +1,106 @@ +// Package client provides an interface and helpers for go-orb clients. +package client + +import ( + "context" + "errors" +) + +// StreamIface is the interface for handling streaming operations. +type StreamIface[TReq any, TResp any] interface { + // Send sends a message to the stream. + Send(msg TReq) error + + // Recv receives a message from the stream. + Recv(msg TResp) error + + // Close closes the stream. + Close() error + + // CloseSend closes the send direction of the stream but allows receiving responses. + CloseSend() error + + // Context returns the context for the stream. + Context() context.Context +} + +// Stream is a helper function to create a new stream with the given service and endpoint. +func Stream[TReq any, TResp any]( + ctx context.Context, + c Client, + service, endpoint string, + opts ...CallOption, +) (StreamIface[TReq, TResp], error) { + // Call the underlying Stream method + stream, err := c.Stream(ctx, service, endpoint, opts...) + if err != nil { + return nil, err + } + + // Create an adapter to convert between StreamIface[any, any] and StreamIface[TReq, TResp] + return NewStreamAdapter[TReq, TResp](stream, service, endpoint, c), nil +} + +// StreamAdapter is an adapter that maps between StreamIface with generic types (any, any) +// and StreamIface with specific types (TReq, TResp). +type StreamAdapter[TReq any, TResp any] struct { + service string + endpoint string + + client Client + + stream StreamIface[any, any] +} + +// NewStreamAdapter creates a new stream adapter. +func NewStreamAdapter[TReq any, TResp any]( + stream StreamIface[any, any], + service string, + endpoint string, + client Client, +) StreamIface[TReq, TResp] { + return &StreamAdapter[TReq, TResp]{ + stream: stream, + service: service, + endpoint: endpoint, + client: client, + } +} + +// Service returns the Service from the request. +func (s *StreamAdapter[TReq, TResp]) Service() string { + return s.service +} + +// Endpoint returns the Endpoint from the request. +func (s *StreamAdapter[TReq, TResp]) Endpoint() string { + return s.endpoint +} + +// Send sends a message to the stream. +func (s *StreamAdapter[TReq, TResp]) Send(msg TReq) error { + return s.stream.Send(msg) +} + +// Recv receives a message from the stream. +func (s *StreamAdapter[TReq, TResp]) Recv(msg TResp) error { + return s.stream.Recv(msg) +} + +// Close closes the stream. +func (s *StreamAdapter[TReq, TResp]) Close() error { + return s.stream.Close() +} + +// CloseSend closes the send side of the stream. +func (s *StreamAdapter[TReq, TResp]) CloseSend() error { + return s.stream.CloseSend() +} + +// Context returns the context for the stream. +func (s *StreamAdapter[TReq, TResp]) Context() context.Context { + return s.stream.Context() +} + +// ErrStreamNotSupported is returned when the client does not support streaming. +var ErrStreamNotSupported = errors.New("client does not support streaming") diff --git a/event/config.go b/event/config.go index 00ce7cb..cfaff3b 100644 --- a/event/config.go +++ b/event/config.go @@ -4,7 +4,7 @@ import ( "time" "github.com/go-orb/go-orb/codecs" - "github.com/google/uuid" + "github.com/lithammer/shortuuid/v3" ) //nolint:gochecknoglobals @@ -231,7 +231,7 @@ func WithRetryLimit(retries int) ConsumeOption { // NewConsumeOptions generates new subscribe options with defaults. func NewConsumeOptions(opts ...ConsumeOption) ConsumeOptions { cfg := ConsumeOptions{ - Group: uuid.New().String(), + Group: shortuuid.New(), } // Apply options. diff --git a/go.mod b/go.mod index 053fb8b..dca65f9 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,14 @@ go 1.23.0 require ( github.com/cornelk/hashmap v1.0.8 github.com/go-orb/wire v0.7.0 - github.com/google/uuid v1.6.0 github.com/hashicorp/go-multierror v1.1.1 + github.com/lithammer/shortuuid/v3 v3.0.7 ) require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/subcommands v1.2.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect golang.org/x/mod v0.24.0 // indirect diff --git a/go.sum b/go.sum index 8195202..ae6b5b3 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -14,6 +15,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJVuvyJQQ8= +github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/registry/registry.go b/registry/registry.go index abed400..4569ff7 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -130,23 +130,17 @@ func (v *Value) String() string { v.Name, v.Type, len(v.Values)) } -// Provide is the registry provider for wire. -// It parses the config from "configs", fetches the "Plugin" from the config and -// then forwards all it's arguments to the factory which it get's from "Plugins". -func Provide( +// New creates a new registry without side-effects. +func New( name types.ServiceName, version types.ServiceVersion, - configs types.ConfigData, components *types.Components, + cfg Config, + configs types.ConfigData, + sections []string, logger log.Logger, - opts ...Option) (Type, error) { - cfg := NewConfig(opts...) - - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { - return Type{}, err - } - + opts ...Option, +) (Type, error) { if cfg.Plugin == "" { logger.Warn("empty registry plugin, using the default", "default", DefaultRegistry) cfg.Plugin = DefaultRegistry @@ -172,13 +166,38 @@ func Provide( return Type{}, err } + return Type{Registry: instance}, nil +} + +// Provide is the registry provider for wire. +// It parses the config from "configs", fetches the "Plugin" from the config and +// then forwards all it's arguments to the factory which it get's from "Plugins". +func Provide( + name types.ServiceName, + version types.ServiceVersion, + configs types.ConfigData, + components *types.Components, + logger log.Logger, + opts ...Option) (Type, error) { + cfg := NewConfig(opts...) + + sections := append(types.SplitServiceName(name), DefaultConfigSection) + if err := config.Parse(sections, configs, &cfg); err != nil { + return Type{}, err + } + + reg, err := New(name, version, components, cfg, configs, sections, logger, opts...) + if err != nil { + return Type{}, err + } + // Register the registry as a component. - err = components.Add(&instance, types.PriorityRegistry) + err = components.Add(®, types.PriorityRegistry) if err != nil { logger.Warn("while registering registry as a component", "error", err) } - return instance, nil + return reg, nil } // ProvideNoOpts is the registry provider for wire without options. diff --git a/server/config.go b/server/config.go index 457f5cc..52d4373 100644 --- a/server/config.go +++ b/server/config.go @@ -33,24 +33,53 @@ func (e *EntrypointConfig) config() *EntrypointConfig { return e } -// WithDisabled disables an entrypoint. -func WithDisabled() Option { +// NewEntrypointConfig creates a new entrypoint config with the given opts. +func NewEntrypointConfig(opts ...Option) *EntrypointConfig { + cfg := &EntrypointConfig{ + Enabled: true, + } + + for _, option := range opts { + option(cfg) + } + + return cfg +} + +// WithEntrypointName sets the name of the entrypoint. +func WithEntrypointName(p string) Option { + return func(cfg EntrypointConfigType) { + c := cfg.config() + c.Name = p + } +} + +// WithEntrypointPlugin sets the plugin of the entrypoint. +func WithEntrypointPlugin(p string) Option { + return func(cfg EntrypointConfigType) { + c := cfg.config() + c.Plugin = p + } +} + +// WithEntrypointDisabled disables an entrypoint. +func WithEntrypointDisabled() Option { return func(cfg EntrypointConfigType) { c := cfg.config() c.Enabled = false } } -// WithMiddlewares appends the given middlewares. -func WithMiddlewares(mws ...Middleware) Option { +// WithEntrypointMiddlewares appends the given middlewares. +func WithEntrypointMiddlewares(mws ...Middleware) Option { return func(cfg EntrypointConfigType) { c := cfg.config() c.OptMiddlewares = append(c.OptMiddlewares, mws...) } } -// WithHandlers appends the given handlers. -func WithHandlers(hs ...RegistrationFunc) Option { +// WithEntrypointHandlers appends the given handlers. +func WithEntrypointHandlers(hs ...RegistrationFunc) Option { return func(cfg EntrypointConfigType) { c := cfg.config() c.OptHandlers = append(c.OptHandlers, hs...) @@ -66,6 +95,17 @@ type Config struct { functionalEntrypoints []EntrypointConfigType `json:"-" yaml:"-"` } +// NewConfig creates a new config struct with the given opts. +func NewConfig(opts ...ConfigOption) Config { + cfg := Config{} + + for _, option := range opts { + option(&cfg) + } + + return cfg +} + // ConfigOption allows to set options for MyConfig. type ConfigOption func(*Config) diff --git a/server/server.go b/server/server.go index 4a59184..d04006a 100644 --- a/server/server.go +++ b/server/server.go @@ -118,7 +118,7 @@ func Provide( mSections := sections mSections = append(mSections, "entrypoints", strconv.Itoa(idx)) - ep, err := pFunc(mSections, configs, logger, reg, WithMiddlewares(mws...), WithHandlers(handlers...)) + ep, err := pFunc(mSections, configs, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) if err != nil { return Server{}, err } diff --git a/types/types.go b/types/types.go index b0186a4..fd15247 100644 --- a/types/types.go +++ b/types/types.go @@ -12,8 +12,8 @@ import ( //nolint:gochecknoglobals var ( - // DefaultSeperator is used to split a service name into config section keys. - DefaultSeperator = "." + // DefaultSeparator is used to split a service name into config section keys. + DefaultSeparator = "." ) // ServiceName is the name of the Service. @@ -36,12 +36,12 @@ type ServiceVersion string // ... // ``` func SplitServiceName[T ~string](serviceName T) []string { - return strings.Split(string(serviceName), DefaultSeperator) + return strings.Split(string(serviceName), DefaultSeparator) } // JoinServiceName joins a splitted servicename back together. func JoinServiceName(sections []string) ServiceName { - return ServiceName(strings.Join(sections, DefaultSeperator)) + return ServiceName(strings.Join(sections, DefaultSeparator)) } // ConfigData holds a single config file marshaled to map[string]any, diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index e789864..820cb0b 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -92,6 +92,8 @@ func HTTP(code int) *Error { switch code { case 503: return ErrUnavailable + case 501: + return ErrNotImplemented case 500: return ErrInternalServerError case 499: @@ -151,6 +153,7 @@ var ( ErrRequestTimeout = newHTTP(http.StatusRequestTimeout) // 408 ErrCanceled = newHTTP(499) ErrUnimplemented = newHTTP(http.StatusInternalServerError) // 500 + ErrNotImplemented = newHTTP(http.StatusNotImplemented) // 501 ErrUnavailable = newHTTP(http.StatusServiceUnavailable) // 503 ErrInternalServerError = newHTTP(http.StatusInternalServerError) // 500 ) From 06e5fddf127fcfa9f98a5bc123a678dc11d335ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 19 Mar 2025 04:42:26 +0100 Subject: [PATCH 37/55] feat(client): Add a SelectService method to the Client. --- client/client.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/client.go b/client/client.go index 5115662..26090e2 100644 --- a/client/client.go +++ b/client/client.go @@ -26,6 +26,9 @@ type Client interface { // With closes all transports and configures the client with the given options. With(opts ...Option) error + // SelectService selects a service node. + SelectService(ctx context.Context, service string, opts ...CallOption) (string, string, error) + // Request does the actual call. Request(ctx context.Context, service string, endpoint string, req any, result any, opts ...CallOption) error From 591f06b783eb605ae185be3cb021144a8f6d2b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 19 Mar 2025 04:42:48 +0100 Subject: [PATCH 38/55] fix(codecs): Remove deprecation comments that are wrong. --- codecs/codecs.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/codecs/codecs.go b/codecs/codecs.go index ac0331f..5a735e0 100644 --- a/codecs/codecs.go +++ b/codecs/codecs.go @@ -20,12 +20,10 @@ type Map map[string]Marshaler type Marshaler interface { // Marshal encodes "v" into byte sequence. // "v" must be a pointer value. - // Deprecated: Use Marshaler.Marshal Marshal(v any) ([]byte, error) // Unmarshal decodes "data" into "v". // "v" must be a pointer value. - // Deprecated: Use Marshaler.Unmarshal Unmarshal(data []byte, v any) error // Marshals returns if this codec is able to encode the given type. From c5e283ade62978333f7c0069e45a01f72297a530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 20 Mar 2025 22:18:14 +0100 Subject: [PATCH 39/55] chore(all): Move from types.* to cli.ServiceContext, #33 --- cli/cli.go | 50 +++++++-- cli/context.go | 2 + cli/provider.go | 129 +++++++++++----------- client/client.go | 35 +++--- client/middleware.go | 2 +- client/plugins.go | 3 +- config/config.go | 224 +++++++++++++++++++++----------------- config/source/source.go | 22 +--- docs/MARKETING.de.md | 224 ++++++++++++++++++++++++++++++++++++++ docs/MARKETING.md | 230 ++++++++++++++++++++++++++++++++++++++++ event/event.go | 19 ++-- event/plugins.go | 5 +- go.mod | 1 + go.sum | 5 + kvstore/kvstore.go | 38 ++++--- kvstore/plugins.go | 4 +- log/log.go | 32 +++--- log/plugins.go | 3 +- metrics/metrics.go | 12 +-- metrics/plugins.go | 6 +- registry/plugins.go | 6 +- registry/registry.go | 41 ++++--- server/entrypoint.go | 3 +- server/middleware.go | 3 +- server/server.go | 45 +++++--- types/types.go | 21 +--- 26 files changed, 842 insertions(+), 323 deletions(-) create mode 100644 docs/MARKETING.de.md create mode 100644 docs/MARKETING.md diff --git a/cli/cli.go b/cli/cli.go index f5a1728..dc79b0a 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -1,21 +1,53 @@ // Package cli provides the cli for go-orb. package cli +// HardcodedConfig represents a hardcoded config with it's format. +// Format can be any of the importet codecs. +type HardcodedConfig struct { + Format string + Data string +} + // App represents a CLI Application. type App struct { processID string - Name string - Version string - Usage string - Commands []*Command - Flags []*Flag - NoAction bool + Name string + Version string + Usage string + Commands []*Command + Flags []*Flag + + // MultiServiceConfig defines if the config is used with sections or without. + // If true, the config is used with sections. + // For example: + // ```yaml + // service1: # service1 section + // logger: + // level: INFO + // service2: # service2 section + // logger: + // level: INFO + // ``` + // + // If false, the config is used without sections. + // For example: + // ```yaml + // logger: + // level: INFO + // ``` + MultiServiceConfig bool + + // NoAction defines if there will be no main action. + NoAction bool + + // NoGlobalConfig defines if the global config flag should be added and parsed. NoGlobalConfig bool - Configs []string - ConfigsFormat []string - ConfigURLs []string + // HardcodedConfigs defines the hardcoded configs. + HardcodedConfigs []HardcodedConfig + // HardcodedConfigURLs defines the hardcoded config URLs. + HardcodedConfigURLs []string // Internal InternalAction func() error diff --git a/cli/context.go b/cli/context.go index ac0a21e..505706a 100644 --- a/cli/context.go +++ b/cli/context.go @@ -109,6 +109,8 @@ type ServiceContext struct { appContext *AppContext name string version string + + Config map[string]any } // App returns the application. diff --git a/cli/provider.go b/cli/provider.go index 3be9257..55cd07e 100644 --- a/cli/provider.go +++ b/cli/provider.go @@ -5,9 +5,7 @@ import ( "fmt" "net/url" - "github.com/go-orb/go-orb/codecs" "github.com/go-orb/go-orb/config" - "github.com/go-orb/go-orb/config/source" "github.com/go-orb/go-orb/types" ) @@ -16,26 +14,16 @@ func ProvideSingleServiceContext(appContext *AppContext) (*ServiceContext, error return NewServiceContext(appContext, appContext.Name(), appContext.Version()), nil } -// ProvideServiceName extracts the service name from the service context. -func ProvideServiceName(serviceContext *ServiceContext) (types.ServiceName, error) { - return types.ServiceName(serviceContext.Name()), nil -} - -// ProvideServiceVersion extracts the service version from the service context. -func ProvideServiceVersion(serviceContext *ServiceContext) (types.ServiceVersion, error) { - return types.ServiceVersion(serviceContext.Version()), nil -} - // ProvideParsedFlagsFromArgs provides parsed flags from the app context. func ProvideParsedFlagsFromArgs(appContext *AppContext, parser ParserFunc, args []string) ([]*Flag, error) { return parser(appContext, args) } -func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { +func flagToMap(globalSections []string, multiServiceConfig bool, flag *Flag, cliResult map[string]any) { for _, cp := range flag.ConfigPaths { sections := cp.Path[:len(cp.Path)-1] - if !cp.IsGlobal { + if !cp.IsGlobal && !multiServiceConfig { sections = append(globalSections, sections...) } @@ -60,98 +48,117 @@ func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { } } -// ProvideConfigData provides config data from serviceContext and flags. -func ProvideConfigData(serviceContext *ServiceContext, flags []*Flag) (types.ConfigData, error) { - results := types.ConfigData{} +// AppConfigData is the config data type. +type AppConfigData map[string]any + +// ServiceContextHasConfigData is a marker type. +type ServiceContextHasConfigData struct{} - // Load configs from memory (App().Configs and App().ConfigsFormat). - if err := loadInMemoryConfigs(serviceContext, &results); err != nil { - return nil, err +// ProvideAppConfigData provides config data from appContext and flags. +func ProvideAppConfigData(appContext *AppContext) (AppConfigData, error) { + cfg := map[string]any{} + + // Load configs from memory (App().HardcodedConfigs). + if err := loadHardcodedConfigs(appContext, cfg); err != nil { + return AppConfigData{}, err } - // Load configs from URLs (App().ConfigURLs). - if err := loadConfigURLs(serviceContext, &results); err != nil { - return nil, err + // Load configs from URLs (App().HardcodedConfigURLs). + if err := loadHardcodedConfigURLs(appContext, cfg); err != nil { + return AppConfigData{}, err } - // Initialize CLI-based config. - mJSON, err := codecs.GetMime(codecs.MimeJSON) + return AppConfigData(cfg), nil +} + +// ProvideServiceConfigData provides config data to serviceContext from flags. +func ProvideServiceConfigData( + serviceContext *ServiceContext, + appConfigData AppConfigData, + flags []*Flag, +) (ServiceContextHasConfigData, error) { + result := map[string]any(appConfigData) + + // Process command-line flags. + cfg, err := processFlags(serviceContext, flags) if err != nil { - return nil, err + return ServiceContextHasConfigData{}, err } - cliResult := source.Data{ - Data: make(map[string]any), - Marshaler: mJSON, + if err := config.Merge(&result, cfg); err != nil { + return ServiceContextHasConfigData{}, err } - results = append(results, cliResult) - // Process command-line flags. - if err := processFlags(serviceContext, flags, &results, cliResult.Data); err != nil { - return nil, err - } + // Finally, set the config on the service context. + serviceContext.Config = result - return results, nil + return ServiceContextHasConfigData{}, nil } -// loadInMemoryConfigs loads configs from memory strings (serviceContext.App().Configs). -func loadInMemoryConfigs(serviceContext *ServiceContext, results *types.ConfigData) error { - app := serviceContext.App() - if app.Configs == nil || app.ConfigsFormat == nil || len(app.Configs) != len(app.ConfigsFormat) { +// loadHardcodedConfigs loads configs from memory strings (serviceContext.App().HardcodedConfigs). +func loadHardcodedConfigs(appContext *AppContext, into map[string]any) error { + app := appContext.App() + if app.HardcodedConfigs == nil { return nil } - for i, configData := range app.Configs { - b64 := base64.URLEncoding.EncodeToString([]byte(configData)) - urlString := fmt.Sprintf("file:///memory%d.%s?base64=%s", i, app.ConfigsFormat[i], b64) + for i, configData := range app.HardcodedConfigs { + b64 := base64.URLEncoding.EncodeToString([]byte(configData.Data)) + urlString := fmt.Sprintf("file:///memory%d.%s?base64=%s", i, configData.Format, b64) - config, err := loadConfigFromURL(urlString) + cfg, err := loadConfigFromURL(urlString) if err != nil { return err } - *results = append(*results, config...) + if err := config.Merge(&into, cfg); err != nil { + return err + } } return nil } -// loadConfigURLs loads configs from URL strings (serviceContext.App().ConfigURLs). -func loadConfigURLs(serviceContext *ServiceContext, results *types.ConfigData) error { - app := serviceContext.App() - if app.ConfigURLs == nil { +// loadHardcodedConfigURLs loads configs from URL strings (serviceContext.App().HardcodedConfigURLs). +func loadHardcodedConfigURLs(appContext *AppContext, into map[string]any) error { + app := appContext.App() + if app.HardcodedConfigURLs == nil { return nil } - for _, urlString := range app.ConfigURLs { - config, err := loadConfigFromURL(urlString) + for _, urlString := range app.HardcodedConfigURLs { + cfg, err := loadConfigFromURL(urlString) if err != nil { return err } - *results = append(*results, config...) + if err := config.Merge(&into, cfg); err != nil { + return err + } } return nil } // loadConfigFromURL loads config from a single URL string. -func loadConfigFromURL(urlString string) (types.ConfigData, error) { +func loadConfigFromURL(urlString string) (map[string]any, error) { u, err := url.Parse(urlString) if err != nil { return nil, fmt.Errorf("invalid URL %s: %w", urlString, err) } - config, err := config.Read([]*url.URL{u}) + cfg, err := config.Read(u) if err != nil { return nil, fmt.Errorf("failed to read config from %s: %w", urlString, err) } - return config, nil + return cfg, nil } // processFlags processes CLI flags and loads any config files specified. -func processFlags(serviceContext *ServiceContext, flags []*Flag, results *types.ConfigData, cliData map[string]any) error { +func processFlags(serviceContext *ServiceContext, flags []*Flag) (map[string]any, error) { + cliData := map[string]any{} + for _, flag := range flags { // Special handling for --config flag which loads additional config files. if flag.Name == "config" { @@ -161,20 +168,22 @@ func processFlags(serviceContext *ServiceContext, flags []*Flag, results *types. } for _, urlString := range urls { - config, err := loadConfigFromURL(urlString) + cfg, err := loadConfigFromURL(urlString) if err != nil { - return err + return nil, err } - *results = append(*results, config...) + if err := config.Merge(&cliData, cfg); err != nil { + return nil, err + } } continue } // Add regular flags to the CLI config data. - flagToMap(types.SplitServiceName(serviceContext.Name()), flag, cliData) + flagToMap(types.SplitServiceName(serviceContext.Name()), serviceContext.App().MultiServiceConfig, flag, cliData) } - return nil + return cliData, nil } diff --git a/client/client.go b/client/client.go index 26090e2..b28b955 100644 --- a/client/client.go +++ b/client/client.go @@ -7,6 +7,7 @@ import ( "log/slog" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/registry" @@ -81,18 +82,17 @@ func Request[TResp any, TReq any]( return result, err } -// Provide creates a new client instance with the implementation from cfg.Plugin. -func Provide( - name types.ServiceName, - configs types.ConfigData, +// New creates a new client instance with the implementation from cfg.Plugin. +func New( + configData map[string]any, components *types.Components, logger log.Logger, - reg registry.Type, - opts ...Option) (Type, error) { + registry registry.Type, + opts ...Option, +) (Type, error) { cfg := NewConfig(opts...) - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { return Type{}, err } @@ -107,23 +107,32 @@ func Provide( } // Configure the logger. - cLogger, err := logger.WithConfig(sections, configs) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, configData) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - return provider(name, configs, components, cLogger, reg, opts...) + return provider(configData, components, cLogger, registry, opts...) +} + +// Provide creates a new client instance with the implementation from cfg.Plugin. +func Provide( + svcCtx *cli.ServiceContext, + components *types.Components, + logger log.Logger, + reg registry.Type, + opts ...Option) (Type, error) { + return New(svcCtx.Config, components, logger, reg, opts...) } // ProvideNoOpts provides a new client without options. func ProvideNoOpts( - name types.ServiceName, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, reg registry.Type, ) (Type, error) { - return Provide(name, configs, components, logger, reg) + return Provide(svcCtx, components, logger, reg) } diff --git a/client/middleware.go b/client/middleware.go index 2094b9f..adc71ef 100644 --- a/client/middleware.go +++ b/client/middleware.go @@ -29,7 +29,7 @@ type Middleware interface { } // MiddlewareFactory is used to create a new client Middleware. -type MiddlewareFactory func(configSection []string, configs types.ConfigData, client Type, logger log.Logger) (Middleware, error) +type MiddlewareFactory func(config map[string]any, client Type, logger log.Logger) (Middleware, error) // Middlewares contains a map of all available middlewares. // diff --git a/client/plugins.go b/client/plugins.go index aa59c21..a4e0c18 100644 --- a/client/plugins.go +++ b/client/plugins.go @@ -9,8 +9,7 @@ import ( // ProviderFunc is provider function type used by plugins to create a new client. type ProviderFunc func( - name types.ServiceName, - data types.ConfigData, + configData map[string]any, components *types.Components, logger log.Logger, registry registry.Type, diff --git a/config/config.go b/config/config.go index 74ffbfe..0fec729 100644 --- a/config/config.go +++ b/config/config.go @@ -8,9 +8,9 @@ import ( "net/url" "strconv" + "dario.cat/mergo" "github.com/go-orb/go-orb/codecs" "github.com/go-orb/go-orb/config/source" - "github.com/go-orb/go-orb/types" ) func isAlphaNumeric(s string) bool { @@ -23,7 +23,22 @@ func isAlphaNumeric(s string) bool { return true } -func walkMap(sections []string, in map[string]any) (map[string]any, error) { +// WalkMap walks into the sections and returns the map[string]any of that section. +// +// If a section is a slice, the next section should be a number. +// +// Example: +// +// config := map[string]any{ +// "foo": map[string]any{ +// "bar": map[string]any{ +// "baz": "value", +// }, +// }, +// } +// +// WalkMap([]string{"foo", "bar"}, config) returns map[string]any{"baz": "value"}. +func WalkMap(sections []string, in map[string]any) (map[string]any, error) { data := in for i := 0; i < len(sections); i++ { @@ -37,16 +52,16 @@ func walkMap(sections []string, in map[string]any) (map[string]any, error) { sliceData, err := SingleGet(data, section, []any{}) if err != nil { - return data, err + return data, fmt.Errorf("while walking sections '%s': %w", sections, err) } if int64(len(sliceData)) <= snum { - return data, ErrNotExistent + return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNotExistent) } tmpData, ok := sliceData[snum].(map[string]any) if !ok { - return data, ErrNotExistent + return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNotExistent) } data = tmpData @@ -57,39 +72,23 @@ func walkMap(sections []string, in map[string]any) (map[string]any, error) { var err error if data, err = SingleGet(data, section, map[string]any{}); err != nil { - return data, err + return data, fmt.Errorf("while walking sections '%s': %w", sections, err) } } return data, nil } -// Read reads urls into []Data where Data is map[string]any. -// -// By default it will error out if any of these config URLs fail, but you can -// ignore errors for a single url by adding "?ignore_error=true". -func Read(urls []*url.URL) (types.ConfigData, error) { - result := types.ConfigData{} - - for _, myURL := range urls { - configSource, err := getSourceForURL(myURL) - if err != nil { - result = append(result, source.Data{URL: myURL, Error: err}) - return result, err - } - - dResult := configSource.Read(myURL) - if dResult.Error != nil { - result = append(result, dResult) - - if myURL.Query().Get("ignore_error") == "true" { - continue - } - - return result, dResult.Error - } +// Read reads url into map[string]any. +func Read(url *url.URL) (map[string]any, error) { + configSource, err := getSourceForURL(url) + if err != nil { + return nil, err + } - result = append(result, dResult) + result, err := configSource.Read(url) + if err != nil { + return nil, err } return result, nil @@ -97,110 +96,145 @@ func Read(urls []*url.URL) (types.ConfigData, error) { // Parse parses the config from config.Read into the given struct. // Param target should be a pointer to the config to parse into. -func Parse(sections []string, configs types.ConfigData, target any) error { - for _, configData := range []source.Data(configs) { - if configData.Error != nil { - continue - } +func Parse[TMap any](sections []string, key string, config map[string]any, target TMap) error { + data := map[string]any{} - var err error + var err error - // Walk into the sections. - data, err := walkMap(sections, configData.Data) + if len(sections) > 0 { + data, err = WalkMap(sections, config) if err != nil { if errors.Is(err, ErrNotExistent) { - continue + return nil } return err } + } - buf := bytes.Buffer{} - - // Here we need to take the data from the configs, in the format of map[string]any - // and parse it into the struct. Because we cannot do this in one operation, - // we first marshal the map[string]any into a (usually json) byte slice, - // We then unmarshal the byte slice into the target struct. - // If there is a way to do this in one operation, this code should be updated. + if key != "" { + data, err = SingleGet(data, key, map[string]any{}) + if err != nil { + if errors.Is(err, ErrNotExistent) { + return nil + } - if err := configData.Marshaler.NewEncoder(&buf).Encode(data); err != nil { - return fmt.Errorf("parse config: encode: %w", err) + return err } + } - if err := configData.Marshaler.NewDecoder(&buf).Decode(target); err != nil { - return fmt.Errorf("parse config: decode: %w", err) - } + if data == nil { + return nil } - return nil -} + codec, err := codecs.GetMime(codecs.MimeJSON) + if err != nil { + return err + } -// HasKey returns a boolean which indidcates if the given sections and key exists in the configs. -func HasKey[T any](sections []string, key string, configs types.ConfigData) bool { - var tmp T + b, err := codec.Marshal(data) + if err != nil { + return err + } - for _, configData := range []source.Data(configs) { - if configData.Error != nil { - continue - } + if err := codec.Unmarshal(b, target); err != nil { + return err + } - var err error + return nil +} - // Walk into the sections. - data, err := walkMap(sections, configData.Data) +// ParseSlice parses the config from config.Read into the given slice. +// Param target should be a pointer to the slice to parse into. +func ParseSlice[TSlice any](sections []string, key string, config map[string]any, target TSlice) error { + var ( + err error + ) + + data := config + if len(sections) > 0 { + data, err = WalkMap(sections, config) if err != nil { if errors.Is(err, ErrNotExistent) { - continue + return nil } - return false + return err } + } - if _, err := SingleGet(data, key, tmp); err != nil { - // Ignore unknown configSection in config. - if errors.Is(err, ErrNotExistent) { - continue - } - - return false + sliceData, err := SingleGet(data, key, []any{}) + if err != nil { + if errors.Is(err, ErrNotExistent) { + return nil } - return true + return err } - return false -} + if sliceData == nil { + return nil + } -// Dump is a helper function to dump configDatas to the console. -func Dump(configs types.ConfigData) error { codec, err := codecs.GetMime(codecs.MimeJSON) if err != nil { return err } - for _, config := range configs { - jsonb, err := codec.Marshal(config.Data) - if err == nil { - fmt.Println(string(jsonb)) //nolint:forbidigo - } + b, err := codec.Marshal(sliceData) + if err != nil { + return err + } + + if err := codec.Unmarshal(b, target); err != nil { + return err } return nil } -// ParseStruct is a helper to make any struct with `json` tags a source.Data (map[string]any{} with some more fields) with sections. -func ParseStruct[TParse any](sections []string, toParse TParse) (source.Data, error) { - result := source.Data{Data: make(map[string]any)} +// Merge merges the given source into the destination. +func Merge[T any](dst *T, src T) error { + return mergo.Merge(dst, src, mergo.WithOverride) +} - codec, err := codecs.GetMime(codecs.MimeJSON) +// Dump is a helper function to dump config to []byte. +func Dump(codecMime string, config map[string]any) ([]byte, error) { + codec, err := codecs.GetMime(codecMime) if err != nil { - result.Error = err - return result, result.Error + return nil, err } - result.Marshaler = codec + return codec.Marshal(config) +} + +// HasKey returns a boolean which indidcates if the given sections and key exists in the configs. +func HasKey[T any](sections []string, key string, config map[string]any) bool { + var tmp T - data := result.Data + var err error + + // Walk into the sections. + data, err := WalkMap(sections, config) + if err != nil { + return false + } + + if _, err := SingleGet(data, key, tmp); err != nil { + return false + } + + return true +} + +// ParseStruct is a helper to make any struct with `json` tags a map[string]any with sections. +func ParseStruct[TParse any](sections []string, toParse TParse) (map[string]any, error) { + codec, err := codecs.GetMime(codecs.MimeJSON) + if err != nil { + return nil, err + } + + data := map[string]any{} for _, s := range sections { if tmp, ok := data[s]; ok { switch t2 := tmp.(type) { @@ -208,7 +242,7 @@ func ParseStruct[TParse any](sections []string, toParse TParse) (source.Data, er data = t2 default: // Should never happen. - data = result.Data + data = map[string]any{} } } else { tmp := map[string]any{} @@ -219,14 +253,14 @@ func ParseStruct[TParse any](sections []string, toParse TParse) (source.Data, er buf := bytes.Buffer{} if err := codec.NewEncoder(&buf).Encode(toParse); err != nil { - return result, fmt.Errorf("encoding: %w", err) + return nil, fmt.Errorf("encoding: %w", err) } if err := codec.NewDecoder(&buf).Decode(&data); err != nil { - return result, fmt.Errorf("decoding: %w", err) + return nil, fmt.Errorf("decoding: %w", err) } - return result, nil + return data, nil } func getSourceForURL(u *url.URL) (source.Source, error) { diff --git a/config/source/source.go b/config/source/source.go index d24d60c..45271b8 100644 --- a/config/source/source.go +++ b/config/source/source.go @@ -5,35 +5,15 @@ package source import ( "net/url" - - "github.com/go-orb/go-orb/codecs" ) -// Data holds a single config file marshaled to map[string]any, -// this needs to be done to marshal data back into a components config struct. -// -// After a config source (e.g. a yaml file, or remote resource) has been parsed, -// it will be passed around inside this data type. Each component then gets a -// list of data sources, which layer by layer get applied to eventually construct -// your final component config. -type Data struct { - // Source URL. - URL *url.URL - // Data holder. - Data map[string]any - // The Marshaler used to create Data -> map[string]any - Marshaler codecs.Marshaler - // If there was an error while processing the URL. - Error error -} - // Source is a config source. type Source interface { // Schemes is a slice of schemes this reader supports. Schemes() []string // Read reads the url in u and returns it as map[string]any. - Read(u *url.URL) Data + Read(u *url.URL) (map[string]any, error) // String returns the name of the source. String() string diff --git a/docs/MARKETING.de.md b/docs/MARKETING.de.md new file mode 100644 index 0000000..85c8a69 --- /dev/null +++ b/docs/MARKETING.de.md @@ -0,0 +1,224 @@ +# Go-Orb: Vom Nullpunkt zum Helden in der Go-Entwicklung + +Hey! Go-Orb ist ein umfassendes, leistungsstarkes Framework zum Erstellen von Monolithen und verteilten Systemen in Go. Wir haben es als Nachfolger von go-micro konzipiert, mit jeder Menge Verbesserungen bei Architektur, Performance und Entwicklererfahrung. + +> **Beta-Release kommt bald!** Wir entwickeln Go-Orb aktiv und es wird bald als Beta-Version verfügbar sein. Bleib dran für Updates! + +## Warum Go-Orb wählen? + +### Produktionsreife Architektur + +Go-Orb gibt dir eine felsenfeste Grundlage für den Aufbau verteilter Systeme mit: + +- **Fast keine Reflection**: Bessere Typsicherheit und schnellere Performance durch Verzicht auf Laufzeit-Reflection +- **Wire-basierte Dependency Injection**: Kompilierzeit-Sicherheit ohne fiese Globals oder Laufzeit-Überraschungen +- **Steckbare Architektur**: Tausche Komponenten aus, ohne deinen Anwendungscode zu verändern + +### Sauberes, schnittstellenbasiertes Design + +Go-Orb hält die Dinge übersichtlich mit einer klaren Trennung der Belange: + +- **Nur Kernschnittstellen**: [go-orb/go-orb](https://github.com/go-orb/go-orb) besteht nur aus Interfaces und minimalem Verbindungscode +- **Plugins machen die Arbeit**: Die eigentlichen Implementierungen findest du in [go-orb/plugins](https://github.com/go-orb/plugins) +- **Einfaches Plugin-System**: Füge einfach einen leeren Import hinzu (`import _ "github.com/go-orb/plugins/..."`) und schon kann's losgehen +- **Mix und Match**: Wähle genau die Plugins, die zu deinen Anforderungen passen +- **Erweiterbar**: Erstelle ganz einfach deine eigenen Plugins, die Kernschnittstellen implementieren + +### Vereinfachte Entwicklung verteilter Systeme + +Konzentriere dich auf deine Geschäftslogik, während Go-Orb alle Kopfschmerzen mit verteilten Systemen für dich übernimmt: + +- **Service-Erkennung**: Automatische Dienstregistrierung und Namensauflösung +- **Lastverteilung**: Intelligente Anfragenverteilung über Service-Instanzen +- **Fehlertoleranz**: Eingebaute Wiederholungsversuche und Circuit-Breaking, damit alles glatt läuft +- **Nachrichtenkodierung**: Dynamische, inhaltsbasierte Kodierung und Dekodierung + +### Super-schnelle In-Memory-Kommunikation + +Go-Orb hat einen High-Performance In-Memory-Adapter, der dir Folgendes ermöglicht: + +- **Direkte Handler-Aufrufe**: Blitzschnelle prozessinterne Kommunikation ohne Serialisierungs-Overhead +- **Gleiche API wie Netzwerkaufrufe**: Nutze dieselbe Client-Schnittstelle, egal ob du lokale oder entfernte Dienste aufrufst +- **Perfekt für Monolithen**: Starte mit allem in einem Prozess und splitte Services auf, wenn nötig +- **Nahtloses Testen**: Teste deine Dienste isoliert und ohne Netzwerkabhängigkeiten + +### Unterstützung für moderne Protokolle + +Kommuniziere genau wie du es brauchst mit Unterstützung für: + +- **gRPC**: Hochleistungs-RPC mit bidirektionalem Streaming +- **HTTP/HTTPS**: RESTful APIs mit voller Unterstützung für HTTP/1.1 und HTTP/2 +- **DRPC**: Ultra-schnelle RPC-Alternative mit reduziertem Overhead +- **HTTP/3**: Next-Gen HTTP mit QUIC +- **Ereignisgesteuerte Kommunikation**: Asynchrones Messaging für entkoppelte Architekturen + +Schau dir unsere [Benchmarks](https://github.com/go-orb/go-orb/wiki/RPC-Benchmarks) für mehr Details an. + +### Entwicklerfreundliche Erfahrung + +Schnell loslegen und produktiv bleiben: + +- **Intuitive APIs**: Saubere, konsistente Schnittstellen, die leicht zu verstehen sind +- **Flexible Konfiguration**: Konfiguriere über Dateien, Umgebungsvariablen oder Code +- **Umfassende Dokumentation**: Detaillierte Anleitungen und Beispiele für den Einstieg +- **Starke Testunterstützung**: Mit Testbarkeit im Hinterkopf entwickelt + +### Qualitätsfokussierte Entwicklung + +Bei Go-Orb dreht sich alles um Codequalität und Zuverlässigkeit: + +- **Umfassende statische Analyse**: Die gesamte Codebasis wird mit golangci-lint nach strengen Regeln überprüft +- **Umfangreiche Testsuite**: Hohe Testabdeckung über alle Komponenten und Plugins +- **CI-Durchsetzung**: Qualitätschecks laufen automatisch für alle Pull Requests +- **Keine Kompromisse**: Strenge Linting- und Testanforderungen sorgen für gleichbleibende Qualität +- **Produktionsreif**: Unsere strengen Entwicklungspraktiken bedeuten, dass du Go-Orb auch nach der Beta-Version vertrauen kannst + +## Was macht Go-Orb besonders? + +### Klein anfangen, groß skalieren + +Go-Orb ist darauf ausgelegt, mit deiner Anwendung zu wachsen: + +- **Starte mit einem Monolithen**: Beginne die Entwicklung mit allen Diensten in einem Prozess über den In-Memory-Adapter +- **Umstieg auf Microservices**: Extrahiere Dienste schrittweise, ohne deine Geschäftslogik zu ändern +- **Hybride Architektur**: Führe leistungskritische Komponenten prozessintern aus, während du andere verteilst +- **Progressive Skalierung**: Füge mehr Instanzen bestimmter Dienste hinzu, wenn deine Last steigt + +### Mehrere Einstiegspunkte + +Im Gegensatz zu herkömmlichen Frameworks, die dich auf ein einzelnes Protokoll festlegen, lässt dich Go-Orb deine Dienste gleichzeitig über mehrere Protokolle verfügbar machen. Konfiguriere verschiedene Handler für verschiedene Protokolle in einem einzigen, zusammenhängenden Dienst. + +### Leistungsstarkes, mehrschichtiges Konfigurationssystem + +Das Konfigurationssystem von Go-Orb bietet unglaubliche Flexibilität: + +- **Intelligentes Konfigurationsladen**: Führt automatisch Konfigurationen aus mehreren Quellen in einer Prioritätsreihenfolge zusammen: + 1. Vordefinierte Standardwerte + 2. Benutzerkonfigurationsdateien (lokal oder entfernt) + 3. Umgebungsvariablen + 4. Kommandozeilenargumente +- **Abschnittsbasiertes Laden**: Lade nur die Konfigurationsabschnitte, die du brauchst, wenn du sie brauchst +- **Keine riesigen Structs nötig**: Definiere Konfigurationstypen, die genau zu den Anforderungen deiner Komponente passen +- **Format-agnostisch**: Unterstützung für YAML, TOML, JSON und mehr + +### Erweiterte Konfiguration + +Definiere deine gesamte Service-Architektur in einfachem YAML, TOML oder JSON: + +```yaml +service1: + server: + logging: + plugin: lumberjack + level: INFO + handlers: + - UserInfo + middlewares: + - middleware-1 + - middleware-2 + entrypoints: + - name: hertzhttp + plugin: hertz + http2: false + insecure: true + + - name: grpc + plugin: grpc + insecure: true + reflection: false + + - name: http + plugin: http + insecure: true + + - name: drpc + plugin: drpc + client: + middlewares: + - name: log + - name: retry + logging: + level: TRACE + registry: + plugin: kvstore + kvstore: + plugin: natsjs + servers: + - nats://localhost:9222 +``` + +### Unsere Vision: Ein Unix-artiges Service-Ökosystem + +Wir bauen Go-Orb mit einer Vision, die von der Unix-Philosophie "Eine Sache machen und sie gut machen" inspiriert ist: + +- **Fokussiertes Service-Design**: Jeder Dienst sollte eine klare, einzelne Verantwortung haben +- **Komponierbare Architektur**: Dienste arbeiten über klar definierte Schnittstellen zusammen +- **Sofort einsetzbare Komponenten**: Wir arbeiten an einer Bibliothek vorgefertigter Dienste wie API-Gateways und Auth-Systeme +- **Einfache Integration**: Wire-basierte Dependency Injection macht Service-Komposition natürlich +- **Baue dein Ökosystem**: Erstelle deine eigene maßgeschneiderte Plattform, indem du genau das mischst und kombinierst, was du brauchst + +Während wir Go-Orb weiterentwickeln, leitet diese Vision unseren Fahrplan und unsere Architekturentscheidungen. + +Schau dir [services](https://github.com/go-orb/services) für mehr Details an. + +### Protokollkonforme Handler + +Schreibe Handler einmal und stelle sie über jedes Protokoll bereit: + +```go +// Einfache, typsichere Client-Aufrufe +resp, err := client.Call[HelloResponse]( + context.Background(), + clientDi, + "org.orb.svc.hello", + "Say.Hello", + &req +) +``` + +Oder typsichere generierte Handler: + +```go +cli := authproto.NewAuthClient(clientFromWire) +req := &authproto.Req{Token: "someToken"} +resp, err := cli.Authenticate( + ctx, + serverName, + req, + opts..., +) +``` + +### Strukturiertes Logging + +Go-Orb kommt mit eingebauter Unterstützung für modernes strukturiertes Logging basierend auf Go's Standard-Bibliothek slog, was Debugging und Monitoring zum Kinderspiel macht. + +## Anwendungsfälle + +- **Microservices-Architektur**: Baue, deploye und skaliere einzelne Dienste unabhängig +- **API-Gateways**: Erstelle einheitliche Eingangspunkte für dein Microservices-Ökosystem +- **Ereignisgesteuerte Systeme**: Implementiere Pub/Sub-Muster für asynchrone Verarbeitung +- **Edge Computing**: Deploye leichtgewichtige Dienste näher an deinen Benutzern +- **Cloud-Native-Anwendungen**: Perfekt für containerisierte Umgebungen und Kubernetes + +## Erste Schritte + +Der beste Weg, mit Go-Orb zu starten, ist unser Examples-Repository unter [github.com/go-orb/examples](https://github.com/go-orb/examples). Es ist vollgepackt mit Beispieldiensten, die Go-Orbs Fähigkeiten zeigen: + +- Einfache Dienste mit verschiedenen Protokollen +- Ereignisgesteuerte Architekturen +- API-Gateways und Proxies +- Authentifizierung und Autorisierung +- Performance-Benchmarks + +Schau im Repository vorbei, um Schritt-für-Schritt-Anleitungen zum Ausführen der Beispiele zu erhalten und deine eigenen Dienste mit Go-Orb zu erstellen. + +Besuche [github.com/go-orb/go-orb](https://github.com/go-orb/go-orb), um mehr über das Core-Framework zu erfahren. + +## Community und Support + +Tritt unserer freundlichen Community bei: + +- **Matrix**: [https://matrix.to/#go-orb:jochum.dev](https://matrix.to/#/#go-orb:jochum.dev) - Echtzeit-Chat und Support +- **Discord**: [https://discord.gg/go-orb](https://discord.gg/go-orb) - Eine weitere Möglichkeit, dich zu vernetzen +- **GitHub**: [https://github.com/go-orb](https://github.com/go-orb) - Open-Source-Entwicklung und Issue-Tracking \ No newline at end of file diff --git a/docs/MARKETING.md b/docs/MARKETING.md new file mode 100644 index 0000000..a07ee54 --- /dev/null +++ b/docs/MARKETING.md @@ -0,0 +1,230 @@ +# Go-Orb: From Zero to Hero in Go Development + +Hey there! Go-Orb is a comprehensive, high-performance framework for building both monoliths and distributed systems in Go. We designed it as the successor to go-micro with tons of improvements in architecture, performance, and developer experience. + +> **Beta Release Coming Soon!** We're actively developing Go-Orb and it'll be available as a beta release soon. Stay tuned for updates! + +## Why Choose Go-Orb? + +### Production-Ready Architecture + +Go-Orb gives you a rock-solid foundation for building distributed systems with: + +- **Near to zero Reflection**: Better type safety and faster performance by kicking runtime reflection to the curb +- **Wire-Based Dependency Injection**: Compile-time safety with no nasty globals or runtime surprises +- **Pluggable Architecture**: Swap components in and out without touching your core application code + +### Clean, Interface-Driven Design + +Go-Orb keeps things neat with a clean separation of concerns: + +- **Core Interfaces Only**: [go-orb/go-orb](https://github.com/go-orb/go-orb) is just interfaces and minimal glue code +- **Plugins Do The Work**: The real implementations live in [go-orb/plugins](https://github.com/go-orb/plugins) +- **Simple Plugin System**: Just add a single blank import (`import _ "github.com/go-orb/plugins/..."`) and you're good to go +- **Mix and Match**: Pick exactly the plugins that fit your needs +- **Extensible**: Easily whip up your own plugins that implement core interfaces + +### Simplified Distributed Systems Development + +Focus on your business logic while Go-Orb handles all the distributed systems headaches: + +- **Service Discovery**: Automatic service registration and name resolution +- **Load Balancing**: Smart request distribution across service instances +- **Fault Tolerance**: Built-in retries and circuit breaking to keep things running +- **Message Encoding**: Dynamic content-type based encoding and decoding + +### Super-Fast In-Memory Communication + +Go-Orb's got a high-performance in-memory adapter that lets you: + +- **Direct Handler Calls**: Lightning-fast in-process communication with no serialization overhead +- **Same API as Network Calls**: Use the same client interface whether you're calling local or remote services +- **Perfect for Monoliths**: Start with everything in one process and split out services as needed +- **Seamless Testing**: Test your services in isolation without network dependencies + +### Support for Modern Protocols + +Communicate however you need to with support for: + +- **gRPC**: High-performance RPC with bi-directional streaming +- **HTTP/HTTPS**: RESTful APIs with full support for HTTP/1.1 and HTTP/2 +- **DRPC**: Ultra-fast RPC alternative with reduced overhead +- **HTTP/3**: Next-gen HTTP with QUIC +- **Event-Driven Communication**: Asynchronous messaging for decoupled architectures + +Check out our [benchmarks](https://github.com/go-orb/go-orb/wiki/RPC-Benchmarks) for more details. + +### Developer-Friendly Experience + +Get up and running quickly and stay productive: + +- **Intuitive APIs**: Clean, consistent interfaces that are easy to understand +- **Flexible Configuration**: Configure via files, environment variables, or code +- **Comprehensive Documentation**: Detailed guides and examples to get you started +- **Strong Test Support**: Built with testability in mind + +### Quality-Focused Development + +Go-Orb is all about code quality and reliability: + +- **Comprehensive Static Analysis**: The entire codebase is validated with golangci-lint using strict rules +- **Comprehensive Test Suite**: High test coverage across all components and plugins +- **CI Enforcement**: Quality checks are automatically run for all pull requests +- **No Compromises**: Strict linting and testing requirements ensure consistent quality +- **Production-Ready**: Our strict development practices mean you can trust Go-Orb even after the beta release + +## What Sets Go-Orb Apart? + +### Start Small, Scale Big + +Go-Orb is designed to grow with your application: + +- **Start with a Monolith**: Begin development with all services in one process using the in-memory adapter +- **Transition to Microservices**: Gradually extract services without changing your business logic +- **Hybrid Architecture**: Run performance-critical components in-process while distributing others +- **Progressive Scaling**: Add more instances of specific services as your load increases + +### Multiple Entry Points + +Unlike traditional frameworks that lock you into a single protocol, Go-Orb lets you expose your services over multiple protocols simultaneously. Configure different handlers for different protocols in a single, cohesive service. + +### Powerful, Multi-Stage Configuration System + +Go-Orb's configuration system offers incredible flexibility: + +- **Smart Configuration Loading**: Automatically merges configurations from multiple sources in a priority order: + 1. Predefined defaults + 2. User configuration files (local or remote) + 3. Environment variables + 4. Command-line flags +- **Section-Based Loading**: Load only the configuration sections you need, when you need them + +### No Massive Structs Required + +Define configuration types that match exactly what your component needs + +### Format Agnostic + +Support for YAML, TOML, JSON, and more + +### Advanced Configuration + +Define your entire service architecture in simple YAML, TOML or JSON: + +```yaml +service1: + server: + logging: + plugin: lumberjack + level: INFO + handlers: + - UserInfo + middlewares: + - middleware-1 + - middleware-2 + entrypoints: + - name: hertzhttp + plugin: hertz + http2: false + insecure: true + + - name: grpc + plugin: grpc + insecure: true + reflection: false + + - name: http + plugin: http + insecure: true + + - name: drpc + plugin: drpc + client: + middlewares: + - name: log + - name: retry + logging: + level: TRACE + registry: + plugin: kvstore + kvstore: + plugin: natsjs + servers: + - nats://localhost:9222 +``` + +### Our Vision: A Unix-Like Service Ecosystem + +We're building Go-Orb with a vision inspired by the Unix philosophy of "do one thing and do it well": + +- **Focused Service Design**: Each service should have a clear, single responsibility +- **Composable Architecture**: Services working together through well-defined interfaces +- **Ready-to-Use Components**: We're building toward a library of pre-built services like API gateways and auth systems +- **Easy Integration**: Wire-based dependency injection makes service composition natural +- **Build Your Ecosystem**: Create your own tailored platform by mixing and matching exactly what you need + +As we continue developing Go-Orb, this vision guides our roadmap and architecture decisions. + +Check out [services](https://github.com/go-orb/services) for more details. + +### Protocol-Conformant Handlers + +Write handlers once and expose them through any protocol: + +```go +// Simple, type-safe client calls +resp, err := client.Call[HelloResponse]( + context.Background(), + clientDi, + "org.orb.svc.hello", + "Say.Hello", + &req +) +``` + +Or typesafe generated Handlers: + +```go +cli := authproto.NewAuthClient(clientFromWire) +req := &authproto.Req{Token: "someToken"} +resp, err := cli.Authenticate( + ctx, + serverName, + req, + opts..., +) +``` + +### Structured Logging + +Go-Orb comes with built-in support for modern structured logging based on Go's standard library slog package, making debugging and monitoring a breeze. + +## Use Cases + +- **Microservices Architecture**: Build, deploy, and scale individual services independently +- **API Gateways**: Create unified entry points for your microservices ecosystem +- **Event-Driven Systems**: Implement pub/sub patterns for asynchronous processing +- **Edge Computing**: Deploy lightweight services closer to your users +- **Cloud-Native Applications**: Perfect for containerized environments and Kubernetes + +## Getting Started + +The best way to get started with Go-Orb is to check out our examples repository at [github.com/go-orb/examples](https://github.com/go-orb/examples). It's packed with sample services that showcase Go-Orb's capabilities: + +- Simple services with different protocols +- Event-driven architectures +- API gateways and proxies +- Authentication and authorization +- Performance benchmarks + +Head over to the repository for step-by-step instructions on running the examples and building your own services with Go-Orb. + +Visit [github.com/go-orb/go-orb](https://github.com/go-orb/go-orb) to learn more about the core framework. + +## Community and Support + +Join our friendly community: + +- **Matrix**: [https://matrix.to/#go-orb:jochum.dev](https://matrix.to/#/#go-orb:jochum.dev) - Real-time chat and support +- **Discord**: [https://discord.gg/go-orb](https://discord.gg/go-orb) - Another way to connect +- **GitHub**: [https://github.com/go-orb](https://github.com/go-orb) - Open source development and issue tracking \ No newline at end of file diff --git a/event/event.go b/event/event.go index 156703c..33bf65e 100644 --- a/event/event.go +++ b/event/event.go @@ -7,6 +7,7 @@ import ( "log/slog" "time" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/codecs" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" @@ -222,15 +223,13 @@ func HandleRequest[TReq any, TResp any]( // Provide creates a new client instance with the implementation from cfg.Plugin. func Provide( - name types.ServiceName, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, opts ...Option) (Type, error) { cfg := NewConfig(opts...) - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil { return Type{}, err } @@ -245,14 +244,14 @@ func Provide( } // Configure the logger. - cLogger, err := logger.WithConfig(sections, configs) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, svcCtx.Config) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, configs, cLogger, opts...) + instance, err := provider(svcCtx, cLogger, opts...) if err != nil { return Type{}, err } @@ -268,9 +267,9 @@ func Provide( // ProvideNoOpts creates a new client instance with the implementation from cfg.Plugin. func ProvideNoOpts( - name types.ServiceName, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, - logger log.Logger) (Type, error) { - return Provide(name, configs, components, logger) + logger log.Logger, +) (Type, error) { + return Provide(svcCtx, components, logger) } diff --git a/event/plugins.go b/event/plugins.go index b30ad6b..3fb5872 100644 --- a/event/plugins.go +++ b/event/plugins.go @@ -1,15 +1,14 @@ package event import ( + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/types" "github.com/go-orb/go-orb/util/container" ) // ProviderFunc is provider function type used by plugins to create a new client. type ProviderFunc func( - name types.ServiceName, - data types.ConfigData, + svcCtx *cli.ServiceContext, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/go.mod b/go.mod index dca65f9..bdda1d1 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/go-orb/go-orb go 1.23.0 require ( + dario.cat/mergo v1.0.1 github.com/cornelk/hashmap v1.0.8 github.com/go-orb/wire v0.7.0 github.com/hashicorp/go-multierror v1.1.1 diff --git a/go.sum b/go.sum index ae6b5b3..1537c96 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/cornelk/hashmap v1.0.8 h1:nv0AWgw02n+iDcawr5It4CjQIAcdMMKRrs10HOJYlrc= github.com/cornelk/hashmap v1.0.8/go.mod h1:RfZb7JO3RviW/rT6emczVuC/oxpdz4UsSB2LJSclR1k= github.com/go-orb/wire v0.7.0 h1:P9S100bM8nhAgW6e7EJrbi5vzNXCsP/Q1ByIEV5+hUQ= @@ -76,3 +78,6 @@ golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go index b0efe4c..0ca007a 100644 --- a/kvstore/kvstore.go +++ b/kvstore/kvstore.go @@ -8,6 +8,7 @@ import ( "log/slog" "time" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/types" @@ -121,18 +122,15 @@ type Record struct { Expiry *time.Time `json:"expiry,omitempty"` } -// Provide provides a new KVStore. -func Provide( - name types.ServiceName, - configs types.ConfigData, - components *types.Components, +// New creates a new kvstore instance with the implementation from cfg.Plugin. +func New( + configData map[string]any, logger log.Logger, opts ...Option, ) (Type, error) { cfg := NewConfig(opts...) - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { return Type{}, err } @@ -149,19 +147,34 @@ func Provide( } // Configure the logger. - cLogger, err := logger.WithConfig(sections, configs) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, configData) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, configs, cLogger, opts...) + instance, err := provider(configData, cLogger, opts...) + if err != nil { + return Type{}, err + } + + return instance, nil +} + +// Provide provides a new KVStore. +func Provide( + svcCtx *cli.ServiceContext, + components *types.Components, + logger log.Logger, + opts ...Option, +) (Type, error) { + instance, err := New(svcCtx.Config, logger, opts...) if err != nil { return Type{}, err } - // Register the registry as a component. + // Register the kvstore as a component. err = components.Add(instance, types.PriorityKVStore) if err != nil { logger.Warn("while registering kvstore as a component", "error", err) @@ -172,10 +185,9 @@ func Provide( // ProvideNoOpts provides a new KVStore without options. func ProvideNoOpts( - name types.ServiceName, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, ) (Type, error) { - return Provide(name, configs, components, logger) + return Provide(svcCtx, components, logger) } diff --git a/kvstore/plugins.go b/kvstore/plugins.go index 65a7163..b58f751 100644 --- a/kvstore/plugins.go +++ b/kvstore/plugins.go @@ -2,14 +2,12 @@ package kvstore import ( "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/types" "github.com/go-orb/go-orb/util/container" ) // ProviderFunc is provider function type used by plugins to create a new client. type ProviderFunc func( - name types.ServiceName, - data types.ConfigData, + configData map[string]any, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/log/log.go b/log/log.go index caaa569..98b58c9 100644 --- a/log/log.go +++ b/log/log.go @@ -7,8 +7,8 @@ import ( "log/slog" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" - "github.com/go-orb/go-orb/config/source" "github.com/go-orb/go-orb/types" ) @@ -45,7 +45,7 @@ func New(opts ...Option) (Logger, error) { // NewConfigDatas will create a new logger with the given configs, // as well as the given fields. -func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) (Logger, error) { +func NewConfigDatas(sections []string, configs map[string]any, opts ...Option) (Logger, error) { // Initialize configuration cfg := NewConfig(opts...) @@ -58,8 +58,8 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) return Logger{}, fmt.Errorf("while creating a new config: %w", err) } - configs = []source.Data{data} - } else if err := config.Parse(append(sections, DefaultConfigSection), configs, &cfg); err != nil { + configs = data + } else if err := config.Parse(sections, DefaultConfigSection, configs, &cfg); err != nil { return Logger{}, fmt.Errorf("while creating a new config: %w", err) } @@ -120,14 +120,12 @@ func NewConfigDatas(sections []string, configs types.ConfigData, opts ...Option) // Provide provides a new logger. // It will set the slog.Logger as package wide default logger. func Provide( - serviceName types.ServiceName, - configs types.ConfigData, + _ cli.ServiceContextHasConfigData, + svcCtx *cli.ServiceContext, components *types.Components, opts ...Option, ) (Logger, error) { - sections := types.SplitServiceName(serviceName) - - logger, err := NewConfigDatas(sections, configs, opts...) + logger, err := NewConfigDatas([]string{}, svcCtx.Config, opts...) if err != nil { return Logger{}, err } @@ -142,20 +140,20 @@ func Provide( // ProvideNoOpts provides a new logger without options. func ProvideNoOpts( - serviceName types.ServiceName, - configs types.ConfigData, + hasConfig cli.ServiceContextHasConfigData, + svcCtx *cli.ServiceContext, components *types.Components, ) (Logger, error) { - return Provide(serviceName, configs, components) + return Provide(hasConfig, svcCtx, components) } // ProvideWithServiceNameField provides a new logger with the service name field. func ProvideWithServiceNameField( - serviceName types.ServiceName, - configs types.ConfigData, + hasConfig cli.ServiceContextHasConfigData, + svcCtx *cli.ServiceContext, components *types.Components, ) (Logger, error) { - return Provide(serviceName, configs, components, WithFields(map[string]any{"service": serviceName})) + return Provide(hasConfig, svcCtx, components, WithFields(map[string]any{"service": svcCtx.Name()})) } // WithLevel creates a copy of the logger with a new level. @@ -177,8 +175,8 @@ func (l Logger) WithLevel(level string) Logger { // WithConfig returns a new logger if there's a config for it in configs else the current one. // It adds the fields from the current logger. -func (l Logger) WithConfig(sections []string, configs types.ConfigData, opts ...Option) (Logger, error) { - if !config.HasKey[string](append(sections, DefaultConfigSection), "plugin", configs) { +func (l Logger) WithConfig(sections []string, configs map[string]any, opts ...Option) (Logger, error) { + if !config.HasKey[string](sections, DefaultConfigSection, configs) { return l, nil } diff --git a/log/plugins.go b/log/plugins.go index d6b5c16..cb4e087 100644 --- a/log/plugins.go +++ b/log/plugins.go @@ -5,7 +5,6 @@ import ( "log/slog" - "github.com/go-orb/go-orb/types" "github.com/go-orb/go-orb/util/container" ) @@ -28,7 +27,7 @@ type ProviderType struct { } // ProviderFunc is the function a Plugin must provide which returns a Provider encapsulated into a ProviderType. -type ProviderFunc func(section []string, configs types.ConfigData, opts ...Option) (ProviderType, error) +type ProviderFunc func(section []string, configs map[string]any, opts ...Option) (ProviderType, error) // Plugins is the registry for Logger plugins. var plugins = container.NewMap[string, ProviderFunc]() //nolint:gochecknoglobals diff --git a/metrics/metrics.go b/metrics/metrics.go index 60e02c5..bfa6c3d 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -6,6 +6,7 @@ import ( "log/slog" "time" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/types" @@ -55,17 +56,14 @@ type Type struct { // It parses the config from "configs", fetches the "Plugin" from the config and // then forwards all it's arguments to the factory which it get's from "Plugins". func Provide( - name types.ServiceName, - version types.ServiceVersion, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) { cfg := NewConfig(opts...) - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil { return Type{}, err } @@ -82,14 +80,14 @@ func Provide( } // Configure the logger. - cLogger, err := logger.WithConfig(sections, configs) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, svcCtx.Config) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, version, configs, cLogger, opts...) + instance, err := provider(svcCtx, cLogger, opts...) if err != nil { return Type{}, err } diff --git a/metrics/plugins.go b/metrics/plugins.go index d15fc5a..3dd51f7 100644 --- a/metrics/plugins.go +++ b/metrics/plugins.go @@ -1,16 +1,14 @@ package metrics import ( + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/log" - "github.com/go-orb/go-orb/types" "github.com/go-orb/go-orb/util/container" ) // ProviderFunc is provider function type is used to create a new metrics plugin. type ProviderFunc func( - serviceName types.ServiceName, - serviceVersion types.ServiceVersion, - data types.ConfigData, + svcCtx *cli.ServiceContext, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/registry/plugins.go b/registry/plugins.go index c6030e9..b0138ce 100644 --- a/registry/plugins.go +++ b/registry/plugins.go @@ -8,9 +8,9 @@ import ( // ProviderFunc is provider function type used by plugins to create a new registry. type ProviderFunc func( - serviceName types.ServiceName, - serviceVersion types.ServiceVersion, - data types.ConfigData, + name string, + version string, + configData map[string]any, components *types.Components, logger log.Logger, opts ...Option, diff --git a/registry/registry.go b/registry/registry.go index 4569ff7..56cc91f 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -8,6 +8,7 @@ import ( "log/slog" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/types" @@ -132,15 +133,19 @@ func (v *Value) String() string { // New creates a new registry without side-effects. func New( - name types.ServiceName, - version types.ServiceVersion, + name string, + version string, + configData map[string]any, components *types.Components, - cfg Config, - configs types.ConfigData, - sections []string, logger log.Logger, opts ...Option, ) (Type, error) { + cfg := NewConfig(opts...) + + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { + return Type{}, err + } + if cfg.Plugin == "" { logger.Warn("empty registry plugin, using the default", "default", DefaultRegistry) cfg.Plugin = DefaultRegistry @@ -154,14 +159,14 @@ func New( } // Configure the logger. - cLogger, err := logger.WithConfig(sections, configs) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, configData) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, version, configs, components, cLogger, opts...) + instance, err := provider(name, version, configData, components, cLogger, opts...) if err != nil { return Type{}, err } @@ -173,20 +178,12 @@ func New( // It parses the config from "configs", fetches the "Plugin" from the config and // then forwards all it's arguments to the factory which it get's from "Plugins". func Provide( - name types.ServiceName, - version types.ServiceVersion, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, - opts ...Option) (Type, error) { - cfg := NewConfig(opts...) - - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { - return Type{}, err - } - - reg, err := New(name, version, components, cfg, configs, sections, logger, opts...) + opts ...Option, +) (Type, error) { + reg, err := New(svcCtx.Name(), svcCtx.Version(), svcCtx.Config, components, logger, opts...) if err != nil { return Type{}, err } @@ -202,11 +199,9 @@ func Provide( // ProvideNoOpts is the registry provider for wire without options. func ProvideNoOpts( - name types.ServiceName, - version types.ServiceVersion, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, ) (Type, error) { - return Provide(name, version, configs, components, logger) + return Provide(svcCtx, components, logger) } diff --git a/server/entrypoint.go b/server/entrypoint.go index 4798261..a83f906 100644 --- a/server/entrypoint.go +++ b/server/entrypoint.go @@ -51,8 +51,7 @@ type Entrypoint interface { // EntrypointProvider is the function type to create a new entrypoint. // It should create a new config, configure it the run EntrypointFromConfig with it. type EntrypointProvider func( - sections []string, - configs types.ConfigData, + configData map[string]any, logger log.Logger, reg registry.Type, opts ...Option, diff --git a/server/middleware.go b/server/middleware.go index aa0c13e..e2b0133 100644 --- a/server/middleware.go +++ b/server/middleware.go @@ -25,7 +25,8 @@ type Middleware interface { // MiddlewareProvider is the provider for a middleware, each Middleware must supply this to register itself. type MiddlewareProvider func( configSection []string, - configs types.ConfigData, + configKey string, + configData map[string]any, logger log.Logger, ) (Middleware, error) diff --git a/server/server.go b/server/server.go index d04006a..a1aac60 100644 --- a/server/server.go +++ b/server/server.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/go-multierror" + "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/registry" @@ -33,13 +34,11 @@ type Server struct { entrypoints *container.Map[string, Entrypoint] } -// Provide creates a new server. +// New creates a new server. // //nolint:funlen,gocyclo -func Provide( - name types.ServiceName, - configs types.ConfigData, - components *types.Components, +func New( + configData map[string]any, logger log.Logger, reg registry.Type, opts ...ConfigOption, @@ -49,8 +48,7 @@ func Provide( o(&cfg) } - sections := append(types.SplitServiceName(name), DefaultConfigSection) - if err := config.Parse(sections, configs, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { return Server{}, err } @@ -63,7 +61,7 @@ func Provide( return Server{}, fmt.Errorf("%w: '%s', did you register it?", ErrUnknownMiddleware, cfgMw.Plugin) } - mw, err := pFunc(append(sections, "middlewares", strconv.Itoa(idx)), configs, logger) + mw, err := pFunc(append([]string{DefaultConfigSection}, "middlewares"), strconv.Itoa(idx), configData, logger) if err != nil { return Server{}, err } @@ -115,10 +113,12 @@ func Provide( return Server{}, fmt.Errorf("%w: '%s', did you register it?", ErrUnknownEntrypoint, cfgEp.Plugin) } - mSections := sections - mSections = append(mSections, "entrypoints", strconv.Itoa(idx)) + epConfig, err := config.WalkMap(append([]string{DefaultConfigSection}, "entrypoints", strconv.Itoa(idx)), configData) + if err != nil && !errors.Is(err, config.ErrNotExistent) { + return Server{}, err + } - ep, err := pFunc(mSections, configs, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) + ep, err := pFunc(epConfig, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) if err != nil { return Server{}, err } @@ -134,8 +134,24 @@ func Provide( entrypoints: eps, } + return srv, nil +} + +// Provide creates a new server. +func Provide( + svcCtx *cli.ServiceContext, + components *types.Components, + logger log.Logger, + reg registry.Type, + opts ...ConfigOption, +) (Server, error) { + srv, err := New(svcCtx.Config, logger, reg, opts...) + if err != nil { + return Server{}, err + } + // Register the server as a component. - err := components.Add(&srv, types.PriorityServer) + err = components.Add(&srv, types.PriorityServer) if err != nil { logger.Warn("while registering server as a component", "error", err) } @@ -145,13 +161,12 @@ func Provide( // ProvideNoOpts creates a new server without functional options. func ProvideNoOpts( - name types.ServiceName, - configs types.ConfigData, + svcCtx *cli.ServiceContext, components *types.Components, logger log.Logger, reg registry.Type, ) (Server, error) { - return Provide(name, configs, components, logger, reg) + return Provide(svcCtx, components, logger, reg) } // Start will start the HTTP servers on all entrypoints. diff --git a/types/types.go b/types/types.go index fd15247..8caece6 100644 --- a/types/types.go +++ b/types/types.go @@ -6,8 +6,6 @@ package types import ( "strings" - - "github.com/go-orb/go-orb/config/source" ) //nolint:gochecknoglobals @@ -16,12 +14,6 @@ var ( DefaultSeparator = "." ) -// ServiceName is the name of the Service. -type ServiceName string - -// ServiceVersion is the version of the Service. -type ServiceVersion string - // SplitServiceName splits the serviceName into a string slice, separated by // the global DefaultSeperator. Each item will be used as a key in the config. // @@ -40,15 +32,6 @@ func SplitServiceName[T ~string](serviceName T) []string { } // JoinServiceName joins a splitted servicename back together. -func JoinServiceName(sections []string) ServiceName { - return ServiceName(strings.Join(sections, DefaultSeparator)) +func JoinServiceName(sections []string) string { + return strings.Join(sections, DefaultSeparator) } - -// ConfigData holds a single config file marshaled to map[string]any, -// this needs to be done to marshal data back into a components config struct. -// -// After a config source (e.g. a yaml file, or remote resource) has been parsed, -// it will be passed around inside this data type. Each component then gets a -// list of data sources, which layer by layer get applied to eventually construct -// your final component config. -type ConfigData []source.Data From e737f5e0f8547f74550144a37cebe2b10a2105db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 20 Mar 2025 23:05:22 +0100 Subject: [PATCH 40/55] fix(config): Fix a bug in config not Parsing data correctly. --- config/config.go | 25 +++++++++++++++++-------- server/server.go | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/config/config.go b/config/config.go index 0fec729..0f605ca 100644 --- a/config/config.go +++ b/config/config.go @@ -97,9 +97,14 @@ func Read(url *url.URL) (map[string]any, error) { // Parse parses the config from config.Read into the given struct. // Param target should be a pointer to the config to parse into. func Parse[TMap any](sections []string, key string, config map[string]any, target TMap) error { - data := map[string]any{} + if config == nil { + return nil + } - var err error + var ( + data map[string]any + err error + ) if len(sections) > 0 { data, err = WalkMap(sections, config) @@ -110,6 +115,8 @@ func Parse[TMap any](sections []string, key string, config map[string]any, targe return err } + } else { + data = config } if key != "" { @@ -123,10 +130,6 @@ func Parse[TMap any](sections []string, key string, config map[string]any, targe } } - if data == nil { - return nil - } - codec, err := codecs.GetMime(codecs.MimeJSON) if err != nil { return err @@ -147,11 +150,15 @@ func Parse[TMap any](sections []string, key string, config map[string]any, targe // ParseSlice parses the config from config.Read into the given slice. // Param target should be a pointer to the slice to parse into. func ParseSlice[TSlice any](sections []string, key string, config map[string]any, target TSlice) error { + if config == nil { + return nil + } + var ( - err error + data map[string]any + err error ) - data := config if len(sections) > 0 { data, err = WalkMap(sections, config) if err != nil { @@ -161,6 +168,8 @@ func ParseSlice[TSlice any](sections []string, key string, config map[string]any return err } + } else { + data = config } sliceData, err := SingleGet(data, key, []any{}) diff --git a/server/server.go b/server/server.go index a1aac60..dbf2833 100644 --- a/server/server.go +++ b/server/server.go @@ -52,6 +52,8 @@ func New( return Server{}, err } + logger.Info("server config", "config", cfg) + // Configure Middlewares. mws := []Middleware{} From 2869142c7d3e2d4b3672064eb018786e1b6c5991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Thu, 20 Mar 2025 23:34:38 +0100 Subject: [PATCH 41/55] fix(config): Use json parseable time.Duration everywhere. --- client/config.go | 36 ++++++++++++++++++---------------- config/special_types.go | 43 +++++++++++++++++++++++++++++++++++++++++ metrics/config.go | 19 +++++++++--------- server/server.go | 2 -- 4 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 config/special_types.go diff --git a/client/config.go b/client/config.go index 92a37e5..ffa07e6 100644 --- a/client/config.go +++ b/client/config.go @@ -4,6 +4,8 @@ import ( "context" "crypto/tls" "time" + + "github.com/go-orb/go-orb/config" ) //nolint:gochecknoglobals @@ -89,22 +91,22 @@ type Config struct { AnyTransport bool `json:"anyTransport" yaml:"anyTransport"` // Connection Pool - PoolHosts int `json:"poolHosts" yaml:"poolHosts"` - PoolSize int `json:"poolSize" yaml:"poolSize"` - PoolTTL time.Duration `json:"poolTtl" yaml:"poolTtl"` + PoolHosts int `json:"poolHosts" yaml:"poolHosts"` + PoolSize int `json:"poolSize" yaml:"poolSize"` + PoolTTL config.Duration `json:"poolTtl" yaml:"poolTtl"` // SelectorFunc get's executed by client.SelectNode which get it's info's from client.ResolveService. Selector SelectorFunc `json:"-" yaml:"-"` // Transport Dial Timeout. Used for initial dial to establish a connection. - DialTimeout time.Duration `json:"dialTimeout" yaml:"dialTimeout"` + DialTimeout config.Duration `json:"dialTimeout" yaml:"dialTimeout"` // ConnectionTimeout of one request to the server. // Set this lower than the RequestTimeout to enbale retries on connection timeout. - ConnectionTimeout time.Duration `json:"connectionTimeout" yaml:"connectionTimeout"` + ConnectionTimeout config.Duration `json:"connectionTimeout" yaml:"connectionTimeout"` // Request/Response timeout of entire srv.Call, for single request timeout set ConnectionTimeout. - RequestTimeout time.Duration `json:"requestTimeout" yaml:"requestTimeout"` + RequestTimeout config.Duration `json:"requestTimeout" yaml:"requestTimeout"` // Stream timeout for the stream - StreamTimeout time.Duration `json:"streamTimeout" yaml:"streamTimeout"` + StreamTimeout config.Duration `json:"streamTimeout" yaml:"streamTimeout"` // TLS config. TLSConfig *tls.Config } @@ -166,7 +168,7 @@ func WithClientPoolSize(n int) Option { func WithClientPoolTTL(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.PoolTTL = n + c.PoolTTL = config.Duration(n) } } @@ -182,7 +184,7 @@ func WithClientSelector(n SelectorFunc) Option { func WithClientDialTimeout(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.DialTimeout = n + c.DialTimeout = config.Duration(n) } } @@ -190,7 +192,7 @@ func WithClientDialTimeout(n time.Duration) Option { func WithClientConnectionTimeout(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.ConnectionTimeout = n + c.ConnectionTimeout = config.Duration(n) } } @@ -198,7 +200,7 @@ func WithClientConnectionTimeout(n time.Duration) Option { func WithClientRequestTimeout(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.RequestTimeout = n + c.RequestTimeout = config.Duration(n) } } @@ -206,7 +208,7 @@ func WithClientRequestTimeout(n time.Duration) Option { func WithClientStreamTimeout(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.StreamTimeout = n + c.StreamTimeout = config.Duration(n) } } @@ -234,11 +236,11 @@ func NewConfig(opts ...Option) Config { PreferredTransports: DefaultPreferredTransports, PoolHosts: DefaultPoolHosts, PoolSize: DefaultPoolSize, - PoolTTL: DefaultPoolTTL, - DialTimeout: DefaultDialTimeout, - ConnectionTimeout: DefaultConnectionTimeout, - RequestTimeout: DefaultRequestTimeout, - StreamTimeout: DefaultStreamTimeout, + PoolTTL: config.Duration(DefaultPoolTTL), + DialTimeout: config.Duration(DefaultDialTimeout), + ConnectionTimeout: config.Duration(DefaultConnectionTimeout), + RequestTimeout: config.Duration(DefaultRequestTimeout), + StreamTimeout: config.Duration(DefaultStreamTimeout), Selector: DefaultSelector, } diff --git a/config/special_types.go b/config/special_types.go new file mode 100644 index 0000000..99726d6 --- /dev/null +++ b/config/special_types.go @@ -0,0 +1,43 @@ +package config + +import ( + "encoding/json" + "errors" + "time" +) + +// Duration is a time.Duration that can be parsed from a string or float64. +// https://stackoverflow.com/a/54571600 +type Duration time.Duration + +// MarshalJSON implements the json.Marshaler interface. +func (d Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(time.Duration(d).String()) +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +func (d *Duration) UnmarshalJSON(b []byte) error { + var v interface{} + + if err := json.Unmarshal(b, &v); err != nil { + return err + } + + switch value := v.(type) { + case float64: + *d = Duration(time.Duration(value)) + + return nil + case string: + tmp, err := time.ParseDuration(value) + if err != nil { + return err + } + + *d = Duration(tmp) + + return nil + default: + return errors.New("invalid duration") + } +} diff --git a/metrics/config.go b/metrics/config.go index 205704a..df3f38c 100644 --- a/metrics/config.go +++ b/metrics/config.go @@ -4,6 +4,7 @@ import ( "os" "time" + "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" ) @@ -30,13 +31,13 @@ type ConfigType interface { type Config struct { Plugin string // Plugin sets the metrics sink plugin to use. - Hostname string // Hostname to use. If not provided and EnableHostname, it will be os.Hostname - EnableHostname bool // Hostname to use. If not provided and EnableHostname, it will be os.Hostname - EnableHostnameLabel bool // Enable prefixing gauge values with hostname - EnableRuntimeMetrics bool // Enables profiling of runtime metrics (GC, Goroutines, Memory) - EnableTypePrefix bool // Prefixes key with a type ("counter", "gauge", "timer") - TimerGranularity time.Duration // Granularity of timers. - ProfileInterval time.Duration // Interval to profile runtime metrics + Hostname string // Hostname to use. If not provided and EnableHostname, it will be os.Hostname + EnableHostname bool // Hostname to use. If not provided and EnableHostname, it will be os.Hostname + EnableHostnameLabel bool // Enable prefixing gauge values with hostname + EnableRuntimeMetrics bool // Enables profiling of runtime metrics (GC, Goroutines, Memory) + EnableTypePrefix bool // Prefixes key with a type ("counter", "gauge", "timer") + TimerGranularity config.Duration // Granularity of timers. + ProfileInterval config.Duration // Interval to profile runtime metrics AllowedPrefixes []string // A list of metric prefixes to allow, with '.' as the separator BlockedPrefixes []string // A list of metric prefixes to block, with '.' as the separator @@ -57,8 +58,8 @@ func NewConfig(opts ...Option) *Config { EnableHostname: true, EnableRuntimeMetrics: true, EnableTypePrefix: false, - TimerGranularity: time.Millisecond, - ProfileInterval: time.Second, + TimerGranularity: config.Duration(time.Millisecond), + ProfileInterval: config.Duration(time.Second), FilterDefault: true, } diff --git a/server/server.go b/server/server.go index dbf2833..a1aac60 100644 --- a/server/server.go +++ b/server/server.go @@ -52,8 +52,6 @@ func New( return Server{}, err } - logger.Info("server config", "config", cfg) - // Configure Middlewares. mws := []Middleware{} From 12ea48bd3075c76ce3828bbb47b3ce8ab67f7d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 21 Mar 2025 01:19:56 +0100 Subject: [PATCH 42/55] feat(config): Add more mime types. --- codecs/mime.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/codecs/mime.go b/codecs/mime.go index b037488..06fd255 100644 --- a/codecs/mime.go +++ b/codecs/mime.go @@ -5,3 +5,12 @@ const MimeJSON = "application/json" // MimeProto is the mime type for protocol buffer. const MimeProto = "application/x-protobuf" + +// MimeYAML is the mime type for YAML. +const MimeYAML = "application/yaml" + +// MimeTOML is the mime type for TOML. +const MimeTOML = "application/toml" + +// MimeXML is the mime type for XML. +const MimeXML = "application/xml" From 0bed6afdc34dbe788f6e5d0c853fa2a82627474e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 21 Mar 2025 01:28:33 +0100 Subject: [PATCH 43/55] feat(codecs): Add support for file extensions, simplify the code. --- codecs/errors.go | 3 +++ codecs/plugins.go | 66 +++++++++++++++++++---------------------------- 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/codecs/errors.go b/codecs/errors.go index 37cf251..721563b 100644 --- a/codecs/errors.go +++ b/codecs/errors.go @@ -8,4 +8,7 @@ var ( // ErrUnknownValueType happens when you give a golang type to a codec that doesn't understand it. ErrUnknownValueType = errors.New("unknown golang type given") + + // ErrUnknownExt happens when you request a codec for a unknown file extension. + ErrUnknownExt = errors.New("unknown file extension given") ) diff --git a/codecs/plugins.go b/codecs/plugins.go index dfad67e..b185124 100644 --- a/codecs/plugins.go +++ b/codecs/plugins.go @@ -17,35 +17,17 @@ func Register(name string, codec Marshaler) bool { return true } -var mimeMap = container.NewSafeMap[string, []Marshaler]() //nolint:gochecknoglobals +var mimeMap = container.NewSafeMap[string, Marshaler]() //nolint:gochecknoglobals +var extMap = container.NewSafeMap[string, Marshaler]() //nolint:gochecknoglobals func updateMimeMap() { Plugins.Range(func(_ string, encoder Marshaler) bool { for _, mime := range encoder.ContentTypes() { - v, ok := mimeMap.Get(mime) - if !ok { - // Mime-type is unknown, just add the encoder. - mimeMap.Set(mime, []Marshaler{encoder}) - } else { - // We already know that mime-type, see if we know the encoder. - found := false - - for _, ve := range v { - if encoder.Name() == ve.Name() { - found = true - break - } - } - - if found { - // Already know that encoder for the given mime-type. - continue - } - - // Write back with the new encoder appended. - v = append(v, encoder) - mimeMap.Set(mime, v) - } + mimeMap.GetOrInsert(mime, encoder) + } + + for _, ext := range encoder.Exts() { + extMap.GetOrInsert(ext, encoder) } return true @@ -70,37 +52,43 @@ func GetMime(mime string) (Marshaler, error) { return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownMimeType, mime) } - return codec[0], nil + return codec, nil +} + +// GetExt returns a codec for a file extension. +func GetExt(ext string) (Marshaler, error) { + codec, ok := extMap.Get(ext) + if !ok { + return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownExt, ext) + } + + return codec, nil } // GetEncoder returns a encoder codec for a mime and golang type. func GetEncoder(mime string, v any) (Marshaler, error) { - codecs, ok := mimeMap.Get(filterMime(mime)) + codec, ok := mimeMap.Get(filterMime(mime)) if !ok { return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownMimeType, mime) } - for _, codec := range codecs { - if codec.Marshals(v) { - return codec, nil - } + if !codec.Marshals(v) { + return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownValueType, v) } - return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownMimeType, mime) + return codec, nil } // GetDecoder returns a decoder codec for a mime and golang type. func GetDecoder(mime string, v any) (Marshaler, error) { - codecs, ok := mimeMap.Get(filterMime(mime)) + codec, ok := mimeMap.Get(filterMime(mime)) if !ok { - return nil, fmt.Errorf("%w for %s", ErrUnknownMimeType, mime) + return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownMimeType, mime) } - for _, codec := range codecs { - if codec.Unmarshals(v) { - return codec, nil - } + if !codec.Unmarshals(v) { + return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownValueType, v) } - return nil, fmt.Errorf("%w for %s, did you import the codec plugin?", ErrUnknownMimeType, mime) + return codec, nil } From 2114d49c2d657a286fbcb3478989a265ed136e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Fri, 21 Mar 2025 01:50:44 +0100 Subject: [PATCH 44/55] fix(config): Move config.ErrNoSuchKey out of Parse --- client/client.go | 3 ++- config/config.go | 21 ++------------------- config/errors.go | 4 ++-- config/helper.go | 2 +- event/event.go | 3 ++- kvstore/kvstore.go | 2 +- log/log.go | 5 +++-- metrics/metrics.go | 3 ++- registry/registry.go | 2 +- server/server.go | 6 +++--- 10 files changed, 19 insertions(+), 32 deletions(-) diff --git a/client/client.go b/client/client.go index b28b955..e5f6abd 100644 --- a/client/client.go +++ b/client/client.go @@ -3,6 +3,7 @@ package client import ( "context" + "errors" "fmt" "log/slog" @@ -92,7 +93,7 @@ func New( ) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } diff --git a/config/config.go b/config/config.go index 0f605ca..a897493 100644 --- a/config/config.go +++ b/config/config.go @@ -3,7 +3,6 @@ package config import ( "bytes" - "errors" "fmt" "net/url" "strconv" @@ -56,12 +55,12 @@ func WalkMap(sections []string, in map[string]any) (map[string]any, error) { } if int64(len(sliceData)) <= snum { - return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNotExistent) + return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNoSuchKey) } tmpData, ok := sliceData[snum].(map[string]any) if !ok { - return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNotExistent) + return data, fmt.Errorf("while walking sections '%s': %w", sections, ErrNoSuchKey) } data = tmpData @@ -109,10 +108,6 @@ func Parse[TMap any](sections []string, key string, config map[string]any, targe if len(sections) > 0 { data, err = WalkMap(sections, config) if err != nil { - if errors.Is(err, ErrNotExistent) { - return nil - } - return err } } else { @@ -122,10 +117,6 @@ func Parse[TMap any](sections []string, key string, config map[string]any, targe if key != "" { data, err = SingleGet(data, key, map[string]any{}) if err != nil { - if errors.Is(err, ErrNotExistent) { - return nil - } - return err } } @@ -162,10 +153,6 @@ func ParseSlice[TSlice any](sections []string, key string, config map[string]any if len(sections) > 0 { data, err = WalkMap(sections, config) if err != nil { - if errors.Is(err, ErrNotExistent) { - return nil - } - return err } } else { @@ -174,10 +161,6 @@ func ParseSlice[TSlice any](sections []string, key string, config map[string]any sliceData, err := SingleGet(data, key, []any{}) if err != nil { - if errors.Is(err, ErrNotExistent) { - return nil - } - return err } diff --git a/config/errors.go b/config/errors.go index be02ee8..17e666f 100644 --- a/config/errors.go +++ b/config/errors.go @@ -6,8 +6,8 @@ var ( // ErrUnknownPlugin happens when there's no config factory for the given plugin. ErrUnknownPlugin = errors.New("unknown config given. Did you import the config plugin?") - // ErrNotExistent happens when a config key is not existent. - ErrNotExistent = errors.New("no such config key") + // ErrNoSuchKey happens when a config key is not existent. + ErrNoSuchKey = errors.New("no such config key") // ErrTypesDontMatch happens when types don't match during Get[T](). ErrTypesDontMatch = errors.New("config key requested type and actual type don't match") diff --git a/config/helper.go b/config/helper.go index 71ec474..81dc8b2 100644 --- a/config/helper.go +++ b/config/helper.go @@ -16,7 +16,7 @@ import ( func SingleGet[T any](data map[string]any, key string, def T) (T, error) { value, ok := data[key] if !ok { - return def, ErrNotExistent + return def, ErrNoSuchKey } switch any(def).(type) { diff --git a/event/event.go b/event/event.go index 33bf65e..3fb89a9 100644 --- a/event/event.go +++ b/event/event.go @@ -3,6 +3,7 @@ package event import ( "context" + "errors" "fmt" "log/slog" "time" @@ -229,7 +230,7 @@ func Provide( opts ...Option) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go index 0ca007a..347abf6 100644 --- a/kvstore/kvstore.go +++ b/kvstore/kvstore.go @@ -130,7 +130,7 @@ func New( ) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } diff --git a/log/log.go b/log/log.go index 98b58c9..8271fea 100644 --- a/log/log.go +++ b/log/log.go @@ -3,6 +3,7 @@ package log import ( "context" + "errors" "fmt" "log/slog" @@ -54,12 +55,12 @@ func NewConfigDatas(sections []string, configs map[string]any, opts ...Option) ( var err error data, err := config.ParseStruct(append(sections, DefaultConfigSection), &cfg) - if err != nil { + if err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Logger{}, fmt.Errorf("while creating a new config: %w", err) } configs = data - } else if err := config.Parse(sections, DefaultConfigSection, configs, &cfg); err != nil { + } else if err := config.Parse(sections, DefaultConfigSection, configs, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Logger{}, fmt.Errorf("while creating a new config: %w", err) } diff --git a/metrics/metrics.go b/metrics/metrics.go index bfa6c3d..779ef69 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -2,6 +2,7 @@ package metrics import ( + "errors" "fmt" "log/slog" "time" @@ -63,7 +64,7 @@ func Provide( ) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } diff --git a/registry/registry.go b/registry/registry.go index 56cc91f..d9039de 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -142,7 +142,7 @@ func New( ) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } diff --git a/server/server.go b/server/server.go index a1aac60..744ba40 100644 --- a/server/server.go +++ b/server/server.go @@ -36,7 +36,7 @@ type Server struct { // New creates a new server. // -//nolint:funlen,gocyclo +//nolint:funlen,gocyclo,cyclop func New( configData map[string]any, logger log.Logger, @@ -48,7 +48,7 @@ func New( o(&cfg) } - if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil { + if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Server{}, err } @@ -114,7 +114,7 @@ func New( } epConfig, err := config.WalkMap(append([]string{DefaultConfigSection}, "entrypoints", strconv.Itoa(idx)), configData) - if err != nil && !errors.Is(err, config.ErrNotExistent) { + if err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Server{}, err } From 3e2a0f6ba13b60d07a05893220134f16507a4244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Sat, 22 Mar 2025 03:17:06 +0100 Subject: [PATCH 45/55] feat(config): Add URL to config. --- config/special_types.go | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/config/special_types.go b/config/special_types.go index 99726d6..721338d 100644 --- a/config/special_types.go +++ b/config/special_types.go @@ -3,6 +3,8 @@ package config import ( "encoding/json" "errors" + "net/url" + "strings" "time" ) @@ -41,3 +43,58 @@ func (d *Duration) UnmarshalJSON(b []byte) error { return errors.New("invalid duration") } } + +// URL represents a URL in JSON. +type URL struct { + // URL is the underlying URL. + *url.URL +} + +// String returns the string representation of the JSONURL. +func (j *URL) String() string { + if j == nil || j.URL == nil { + return "" + } + + return j.URL.String() +} + +// Copy returns a copy of the JURL. +func (j *URL) Copy() (*URL, error) { + if j == nil || j.URL == nil { + return nil, errors.New("JURL is nil") + } + + return NewURL(j.URL.String()) +} + +// NewURL creates a new `json` URL. +func NewURL(s string) (*URL, error) { + u, err := url.Parse(s) + if err != nil { + return nil, err + } + + return &URL{URL: u}, nil +} + +// UnmarshalJSON unmarshals the JURL from JSON. +func (j *URL) UnmarshalJSON(data []byte) error { + u, err := url.Parse(strings.Trim(string(data), `"`)) + if err != nil { + return err + } + + j.URL = u + + return nil +} + +// MarshalJSON marshals the JURL to JSON. +func (j *URL) MarshalJSON() ([]byte, error) { + if j == nil || j.URL == nil { + return nil, nil + } + + return []byte(`"` + j.URL.String() + `"`), nil +} From 5f5f154933b88cdc4caf09721f492291d28015da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 24 Mar 2025 12:23:06 +0100 Subject: [PATCH 46/55] chore(registry): Implement a new api, closes #30 --- client/config.go | 42 ++++++++++++++ client/selector.go | 49 +++------------- registry/options.go | 47 --------------- registry/plugins.go | 2 - registry/registry.go | 134 ++++++++++++++----------------------------- registry/watcher.go | 21 ++++--- server/entrypoint.go | 7 ++- server/server.go | 8 ++- 8 files changed, 111 insertions(+), 199 deletions(-) diff --git a/client/config.go b/client/config.go index ffa07e6..88d79e5 100644 --- a/client/config.go +++ b/client/config.go @@ -109,6 +109,12 @@ type Config struct { StreamTimeout config.Duration `json:"streamTimeout" yaml:"streamTimeout"` // TLS config. TLSConfig *tls.Config + + // Namespace registry filter. + Namespace string `json:"namespace" yaml:"namespace"` + + // Region registry filter. + Region string `json:"region" yaml:"region"` } func (c *Config) config() *Config { @@ -228,6 +234,22 @@ func WithClientMiddleware(m MiddlewareConfig) Option { } } +// WithClientNamespace sets the namespace filter. +func WithClientNamespace(n string) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Namespace = n + } +} + +// WithClientRegion sets the region filter. +func WithClientRegion(r string) Option { + return func(cfg ConfigType) { + c := cfg.config() + c.Region = r + } +} + // NewConfig generates a new config with all the defaults. func NewConfig(opts ...Option) Config { cfg := Config{ @@ -296,6 +318,12 @@ type CallOptions struct { // MaxCallSendMsgSize is the maximum size of the call send message size. MaxCallSendMsgSize int + + // Namespace registry filter. + Namespace string + + // Region registry filter. + Region string } // CallOption used by Call or Stream. @@ -419,3 +447,17 @@ func WithMaxCallSendMsgSize(n int) CallOption { o.MaxCallSendMsgSize = n } } + +// WithNamespace sets the namespace filter. +func WithNamespace(n string) CallOption { + return func(o *CallOptions) { + o.Namespace = n + } +} + +// WithRegion sets the region filter. +func WithRegion(r string) CallOption { + return func(o *CallOptions) { + o.Region = r + } +} diff --git a/client/selector.go b/client/selector.go index dbc0d21..7548c4c 100644 --- a/client/selector.go +++ b/client/selector.go @@ -3,62 +3,29 @@ package client import ( "context" "crypto/rand" - "fmt" "math/big" "github.com/go-orb/go-orb/registry" ) -// NodeMap hold registry nodes grouped by transport. -type NodeMap map[string][]*registry.Node - // SelectorFunc get's executed by client.SelectNode which get it's info's from client.ResolveService. type SelectorFunc func( ctx context.Context, service string, - nodes NodeMap, - preferredTransports []string, - anyTransport bool, -) (*registry.Node, error) + nodes []registry.ServiceNode, +) (registry.ServiceNode, error) // SelectRandomNode selects a random node, it tries' on preferredTransport after another, if anyTransport is true it // will return transports that are not listet as well. func SelectRandomNode( _ context.Context, _ string, - nodes NodeMap, - preferredTransports []string, - anyTransport bool, -) (*registry.Node, error) { - // try preferredTransports - for _, pt := range preferredTransports { - tNodes, ok := nodes[pt] - if !ok { - continue - } - - rInt, err := rand.Int(rand.Reader, big.NewInt(int64(len(tNodes)))) - if err != nil { - return nil, err - } - - return tNodes[rInt.Int64()], nil - } - - // Return random - if anyTransport { - aNodes := []*registry.Node{} - for _, v := range nodes { - aNodes = append(aNodes, v...) - } - - rInt, err := rand.Int(rand.Reader, big.NewInt(int64(len(aNodes)))) - if err != nil { - return nil, err - } - - return aNodes[rInt.Int64()], nil + nodes []registry.ServiceNode, +) (registry.ServiceNode, error) { + rInt, err := rand.Int(rand.Reader, big.NewInt(int64(len(nodes)))) + if err != nil { + return registry.ServiceNode{}, err } - return nil, fmt.Errorf("%w: requested transports was: %s", ErrNoNodeFound, preferredTransports) + return nodes[rInt.Int64()], nil } diff --git a/registry/options.go b/registry/options.go index 573e64f..5fda393 100644 --- a/registry/options.go +++ b/registry/options.go @@ -1,18 +1,5 @@ package registry -import ( - "context" - "time" -) - -// TODO(davincible): investigate all the contexts in the options, are they really needed? -// maybe there is a better more idomatic way to achieve the same thing. - -// RegisterOptions are the options used to register services. -type RegisterOptions struct { - TTL time.Duration -} - // WatchOptions are the options used by the registry watcher. type WatchOptions struct { // Specify a service to watch @@ -20,43 +7,9 @@ type WatchOptions struct { Service string } -// RegisterOption is functional option type for the register config. -type RegisterOption func(*RegisterOptions) - // WatchOption is functional option type for the watch config. type WatchOption func(*WatchOptions) -// DeregisterOption is functional option type for the deregister config. -type DeregisterOption func(*DeregisterOptions) - -// GetOption is functional option type for the get config. -type GetOption func(*GetOptions) - -// ListOption is functional option type for the list config. -type ListOption func(*ListOptions) - -// DeregisterOptions are the options used to deregister services. -type DeregisterOptions struct { - Context context.Context -} - -// GetOptions are the options used to fetch a service. -type GetOptions struct { - Context context.Context -} - -// ListOptions are the options used to list services. -type ListOptions struct { - Context context.Context -} - -// RegisterTTL sets the TTL for service registration. -func RegisterTTL(t time.Duration) RegisterOption { - return func(o *RegisterOptions) { - o.TTL = t - } -} - // WatchService sets a service name to watch. func WatchService(name string) WatchOption { return func(o *WatchOptions) { diff --git a/registry/plugins.go b/registry/plugins.go index b0138ce..3916a0f 100644 --- a/registry/plugins.go +++ b/registry/plugins.go @@ -8,8 +8,6 @@ import ( // ProviderFunc is provider function type used by plugins to create a new registry. type ProviderFunc func( - name string, - version string, configData map[string]any, components *types.Components, logger log.Logger, diff --git a/registry/registry.go b/registry/registry.go index d9039de..7c0b529 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -2,9 +2,10 @@ package registry import ( + "context" "errors" "fmt" - "strings" + "time" "log/slog" @@ -24,32 +25,56 @@ var ( ErrWatcherStopped = errors.New("watcher stopped") ) -// Registry provides an interface for service discovery -// and an abstraction over varying implementations -// {consul, etcd, zookeeper, ...}. -type Registry interface { - types.Component +// ServiceNode is a service node. +type ServiceNode struct { + // Name is the name of the service. Should be DNS compatible. + Name string `json:"name"` + // Version is the version of the service. + Version string `json:"version"` + + // Metadata is the metadata of the service. + Metadata map[string]string `json:"metadata"` + + // Scheme is the scheme of the service. + Scheme string `json:"scheme"` + // Address is the address of the service. + Address string `json:"address"` + + // Namespace is the namespace of the node. + Namespace string `json:"namespace"` - // ServiceName returns types.ServiceName that has been provided to Provide(). - ServiceName() string + // Region is the region of the node. + Region string `json:"region"` - // ServiceVersion returns types.ServiceVersion that has been provided to Provide(). - ServiceVersion() string + // TTL is the time to live for the service. + // Keep it 0 if you don't want to use TTL. + TTL time.Duration `json:"ttl"` +} + +func (r ServiceNode) String() string { + return fmt.Sprintf("ServiceNode{%s %s %s %s %s %s}", r.Namespace, r.Region, r.Name, r.Version, r.Address, r.Scheme) +} + +// Registry is a component for service discovery. +type Registry interface { + types.Component // Register registers a service within the registry. - Register(srv *Service, opts ...RegisterOption) error + Register(ctx context.Context, srv ServiceNode) error // Deregister deregisters a service within the registry. - Deregister(srv *Service, opts ...DeregisterOption) error + Deregister(ctx context.Context, srv ServiceNode) error // GetService returns a service from the registry. - GetService(name string, opts ...GetOption) ([]*Service, error) + // Leave schemes empty to get all schemes. + GetService(ctx context.Context, namespace, region, name string, schemes []string) ([]ServiceNode, error) // ListServices lists services within the registry. - ListServices(opts ...ListOption) ([]*Service, error) + // Leave schemes empty to get all schemes. + ListServices(ctx context.Context, namespace, region string, schemes []string) ([]ServiceNode, error) // Watch returns a Watcher which you can watch on. - Watch(opts ...WatchOption) (Watcher, error) + Watch(ctx context.Context, opts ...WatchOption) (Watcher, error) } // Type is the registry type it is returned when you use ProvideRegistry @@ -58,83 +83,8 @@ type Type struct { Registry } -// Service represents a service in a registry. -type Service struct { - Name string `json:"name"` - Version string `json:"version"` - Metadata map[string]string `json:"metadata"` - Endpoints []*Endpoint `json:"endpoints"` - Nodes []*Node `json:"nodes"` -} - -// String returns a string representation of the Service. -func (s *Service) String() string { - nodes := []string{} - for _, n := range s.Nodes { - nodes = append(nodes, n.String()) - } - - return fmt.Sprintf("Service{Name: %s, Version: %s, Nodes: (%s), Endpoints: %d}", - s.Name, s.Version, strings.Join(nodes, ", "), len(s.Endpoints)) -} - -// Node represents a service node in a registry. -// One service can be comprised of multiple nodes. -type Node struct { - ID string `json:"id"` - // ip:port - Address string `json:"address"` - // grpc/h2c/http/http3 uvm., since go-orb! - Transport string `json:"transport"` - Metadata map[string]string `json:"metadata"` -} - -// String returns a string representation of the Node. -func (n *Node) String() string { - return fmt.Sprintf("Node{ID: %s, Address: %s, Transport: %s}", - n.ID, n.Address, n.Transport) -} - -// Endpoint represents a service endpoint in a registry. -type Endpoint struct { - Name string `json:"name"` - Request *Value `json:"request"` - Response *Value `json:"response"` - Metadata map[string]string `json:"metadata"` -} - -// String returns a string representation of the Endpoint. -func (e *Endpoint) String() string { - var reqName, respName string - if e.Request != nil { - reqName = e.Request.Name - } - - if e.Response != nil { - respName = e.Response.Name - } - - return fmt.Sprintf("Endpoint{Name: %s, Request: %s, Response: %s}", - e.Name, reqName, respName) -} - -// Value is a value container used in the registry. -type Value struct { - Name string `json:"name"` - Type string `json:"type"` - Values []*Value `json:"values"` -} - -// String returns a string representation of the Value. -func (v *Value) String() string { - return fmt.Sprintf("Value{Name: %s, Type: %s, Values: %d}", - v.Name, v.Type, len(v.Values)) -} - // New creates a new registry without side-effects. func New( - name string, - version string, configData map[string]any, components *types.Components, logger log.Logger, @@ -166,7 +116,7 @@ func New( cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(name, version, configData, components, cLogger, opts...) + instance, err := provider(configData, components, cLogger, opts...) if err != nil { return Type{}, err } @@ -183,7 +133,7 @@ func Provide( logger log.Logger, opts ...Option, ) (Type, error) { - reg, err := New(svcCtx.Name(), svcCtx.Version(), svcCtx.Config, components, logger, opts...) + reg, err := New(svcCtx.Config, components, logger, opts...) if err != nil { return Type{}, err } diff --git a/registry/watcher.go b/registry/watcher.go index c99b84c..7234fdb 100644 --- a/registry/watcher.go +++ b/registry/watcher.go @@ -7,14 +7,6 @@ import "time" type Watcher interface { // Next is a blocking call Next() (*Result, error) - Stop() error -} - -// Result is returned by a call to Next on -// the watcher. Actions can be create, update, delete. -type Result struct { - Action string `json:"action"` - Service *Service `json:"service"` } // EventType defines registry event type. @@ -23,12 +15,19 @@ type EventType int const ( // Create is emitted when a new service is registered. Create EventType = iota - // Delete is emitted when an existing service is deregsitered. + // Delete is emitted when an existing service is deregistered. Delete - // Update is emitted when an existing servicec is updated. + // Update is emitted when an existing service is updated. Update ) +// Result is returned by a call to Next on +// the watcher. Actions can be create, update, delete. +type Result struct { + Action EventType `json:"action"` + Node ServiceNode `json:"node"` +} + // String returns human readable event type. func (t EventType) String() string { switch t { @@ -52,5 +51,5 @@ type Event struct { // Timestamp is event timestamp Timestamp time.Time // Service is registry service - Service *Service + Service ServiceNode } diff --git a/server/entrypoint.go b/server/entrypoint.go index a83f906..b1a0067 100644 --- a/server/entrypoint.go +++ b/server/entrypoint.go @@ -43,14 +43,13 @@ type Entrypoint interface { // Address returns the address the entrypoint is listening on. Address() string - - // EntrypointID returns the id (uuid) of this entrypoint in the registry. - EntrypointID() string } // EntrypointProvider is the function type to create a new entrypoint. // It should create a new config, configure it the run EntrypointFromConfig with it. type EntrypointProvider func( + name string, + version string, configData map[string]any, logger log.Logger, reg registry.Type, @@ -59,6 +58,8 @@ type EntrypointProvider func( // EntrypointNew is the function type to create a new entrypoint. type EntrypointNew func( + name string, + version string, acfg any, logger log.Logger, reg registry.Type, diff --git a/server/server.go b/server/server.go index 744ba40..335a299 100644 --- a/server/server.go +++ b/server/server.go @@ -38,6 +38,8 @@ type Server struct { // //nolint:funlen,gocyclo,cyclop func New( + name string, + version string, configData map[string]any, logger log.Logger, reg registry.Type, @@ -95,7 +97,7 @@ func New( return Server{}, fmt.Errorf("%w: '%s', did you register it?", ErrUnknownEntrypoint, cfgNewEp.config().Plugin) } - ep, err := newFunc(cfgNewEp, logger, reg) + ep, err := newFunc(name, version, cfgNewEp, logger, reg) if err != nil { return Server{}, err } @@ -118,7 +120,7 @@ func New( return Server{}, err } - ep, err := pFunc(epConfig, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) + ep, err := pFunc(name, version, epConfig, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) if err != nil { return Server{}, err } @@ -145,7 +147,7 @@ func Provide( reg registry.Type, opts ...ConfigOption, ) (Server, error) { - srv, err := New(svcCtx.Config, logger, reg, opts...) + srv, err := New(svcCtx.Name(), svcCtx.Version(), svcCtx.Config, logger, reg, opts...) if err != nil { return Server{}, err } From d3f70a5b1a724888b1d6615a9d5a0dd977211c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 24 Mar 2025 20:24:14 +0100 Subject: [PATCH 47/55] fix(client): comment. --- client/config.go | 1 + 1 file changed, 1 insertion(+) diff --git a/client/config.go b/client/config.go index 88d79e5..d6ab366 100644 --- a/client/config.go +++ b/client/config.go @@ -282,6 +282,7 @@ type CallOptions struct { // PreferredTransports contains a list of transport names in preferred order. PreferredTransports []string + // Allow any transport in any order. AnyTransport bool // Selector is the node selector. From 856edc0697a9bf50c470f4ab615f21a18d377317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 24 Mar 2025 22:04:41 +0100 Subject: [PATCH 48/55] feat(orberrors): Implement WrapNew. --- util/orberrors/orberrors.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index 820cb0b..368b174 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -38,7 +38,7 @@ func (e *Error) Toerror() error { return e } -// Wrap clones this error and wraps another error. +// Wrap creates a new error and wraps another error. func (e *Error) Wrap(err error) *Error { if e == nil { return nil @@ -51,6 +51,19 @@ func (e *Error) Wrap(err error) *Error { } } +// WrapNew creates a new error and wraps another error with a new message. +func (e *Error) WrapNew(message string) *Error { + if e == nil { + return nil + } + + return &Error{ + Code: e.Code, + Message: e.Message, + Wrapped: errors.New(message), + } +} + // Unwrap returns the wrapped error. func (e *Error) Unwrap() error { if e == nil { From 9b1324dc770eedd4f9ff63ce4b77b79684123b63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Mon, 24 Mar 2025 23:29:40 +0100 Subject: [PATCH 49/55] fix(client): Use safemap for memoryServers. --- client/memory.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/memory.go b/client/memory.go index 07d2897..f10fba9 100644 --- a/client/memory.go +++ b/client/memory.go @@ -17,7 +17,7 @@ type MemoryServer interface { } //nolint:gochecknoglobals -var memoryServers = container.NewMap[string, MemoryServer]() +var memoryServers = container.NewSafeMap[string, MemoryServer]() // RegisterMemoryServer registers a memory server for a service. func RegisterMemoryServer(service string, server MemoryServer) { From 2909c6f3c71055f36d0f53016de455fcc9182dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 25 Mar 2025 23:43:24 +0100 Subject: [PATCH 50/55] fix(cli): fix multi-service config. --- cli/provider.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cli/provider.go b/cli/provider.go index 55cd07e..f771d6b 100644 --- a/cli/provider.go +++ b/cli/provider.go @@ -89,6 +89,14 @@ func ProvideServiceConfigData( return ServiceContextHasConfigData{}, err } + // If multi-service config is enabled, walk the map to get the service-specific config. + if serviceContext.App().MultiServiceConfig { + result, err = config.WalkMap(types.SplitServiceName(serviceContext.Name()), result) + if err != nil { + return ServiceContextHasConfigData{}, err + } + } + // Finally, set the config on the service context. serviceContext.Config = result From 1123c67083af1abd25bb3b59819205a6799b8c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Tue, 25 Mar 2025 23:44:58 +0100 Subject: [PATCH 51/55] feat(server): remove per entrypoing handlers/middlewares, closes #23. --- server/config.go | 30 ++++++++++++------------------ server/entrypoint.go | 2 ++ server/server.go | 25 +++++++++++++------------ 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/server/config.go b/server/config.go index 52d4373..fe7f69a 100644 --- a/server/config.go +++ b/server/config.go @@ -21,9 +21,8 @@ var _ (EntrypointConfigType) = (*EntrypointConfig)(nil) // EntrypointConfig is the base config for all entrypoints. type EntrypointConfig struct { - Plugin string `json:"plugin" yaml:"plugin"` - Enabled bool `json:"enabled" yaml:"enabled"` - Name string `json:"name,omitempty" yaml:"name,omitempty"` + Plugin string `json:"plugin" yaml:"plugin"` + Enabled bool `json:"enabled" yaml:"enabled"` OptMiddlewares []Middleware `json:"-" yaml:"-"` OptHandlers []RegistrationFunc `json:"-" yaml:"-"` @@ -46,14 +45,6 @@ func NewEntrypointConfig(opts ...Option) *EntrypointConfig { return cfg } -// WithEntrypointName sets the name of the entrypoint. -func WithEntrypointName(p string) Option { - return func(cfg EntrypointConfigType) { - c := cfg.config() - c.Name = p - } -} - // WithEntrypointPlugin sets the plugin of the entrypoint. func WithEntrypointPlugin(p string) Option { return func(cfg EntrypointConfigType) { @@ -88,16 +79,19 @@ func WithEntrypointHandlers(hs ...RegistrationFunc) Option { // Config is the global config for servers. type Config struct { - Middlewares []MiddlewareConfig `json:"middlwares,omitempty" yaml:"middlewares,omitempty"` - Handlers []string `json:"handlers,omitempty" yaml:"handlers,omitempty"` - Entrypoints []EntrypointConfig `json:"entrypoints,omitempty" yaml:"entrypoints,omitempty"` + Middlewares []MiddlewareConfig `json:"middlewares,omitempty" yaml:"middlewares,omitempty"` + Handlers []string `json:"handlers,omitempty" yaml:"handlers,omitempty"` + Entrypoints map[string]EntrypointConfig `json:"entrypoints,omitempty" yaml:"entrypoints,omitempty"` - functionalEntrypoints []EntrypointConfigType `json:"-" yaml:"-"` + functionalEntrypoints map[string]EntrypointConfigType `json:"-" yaml:"-"` } // NewConfig creates a new config struct with the given opts. func NewConfig(opts ...ConfigOption) Config { - cfg := Config{} + cfg := Config{ + Entrypoints: make(map[string]EntrypointConfig), + functionalEntrypoints: make(map[string]EntrypointConfigType), + } for _, option := range opts { option(&cfg) @@ -110,8 +104,8 @@ func NewConfig(opts ...ConfigOption) Config { type ConfigOption func(*Config) // WithEntrypointConfig allows you to create an entrypoint functionally. -func WithEntrypointConfig(config EntrypointConfigType) ConfigOption { +func WithEntrypointConfig(epName string, config EntrypointConfigType) ConfigOption { return func(c *Config) { - c.functionalEntrypoints = append(c.functionalEntrypoints, config) + c.functionalEntrypoints[epName] = config } } diff --git a/server/entrypoint.go b/server/entrypoint.go index b1a0067..9f0b49b 100644 --- a/server/entrypoint.go +++ b/server/entrypoint.go @@ -50,6 +50,7 @@ type Entrypoint interface { type EntrypointProvider func( name string, version string, + epName string, configData map[string]any, logger log.Logger, reg registry.Type, @@ -60,6 +61,7 @@ type EntrypointProvider func( type EntrypointNew func( name string, version string, + epName string, acfg any, logger log.Logger, reg registry.Type, diff --git a/server/server.go b/server/server.go index 335a299..afe13b5 100644 --- a/server/server.go +++ b/server/server.go @@ -36,7 +36,7 @@ type Server struct { // New creates a new server. // -//nolint:funlen,gocyclo,cyclop +//nolint:funlen,gocyclo func New( name string, version string, @@ -45,10 +45,7 @@ func New( reg registry.Type, opts ...ConfigOption, ) (Server, error) { - cfg := Config{} - for _, o := range opts { - o(&cfg) - } + cfg := NewConfig(opts...) if err := config.Parse(nil, DefaultConfigSection, configData, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Server{}, err @@ -87,17 +84,19 @@ func New( eps := container.NewMap[string, Entrypoint]() if len(cfg.functionalEntrypoints) == 0 && len(cfg.Entrypoints) == 0 { - cfg.Entrypoints = append(cfg.Entrypoints, EntrypointConfig{Name: "memory", Plugin: "memory", Enabled: true}) - cfg.Entrypoints = append(cfg.Entrypoints, EntrypointConfig{Name: "grpcs", Plugin: "grpc", Enabled: true}) + cfg.Entrypoints["memory"] = EntrypointConfig{Plugin: "memory", Enabled: true} + cfg.Entrypoints["grpcs"] = EntrypointConfig{Plugin: "grpc", Enabled: true} } - for _, cfgNewEp := range cfg.functionalEntrypoints { + for epName, cfgNewEp := range cfg.functionalEntrypoints { newFunc, ok := PluginsNew.Get(cfgNewEp.config().Plugin) if !ok { return Server{}, fmt.Errorf("%w: '%s', did you register it?", ErrUnknownEntrypoint, cfgNewEp.config().Plugin) } - ep, err := newFunc(name, version, cfgNewEp, logger, reg) + epLogger := logger.With("component", ComponentType, "plugin", cfgNewEp.config().Plugin, "entrypoint", epName) + + ep, err := newFunc(name, version, epName, cfgNewEp, epLogger, reg) if err != nil { return Server{}, err } @@ -109,18 +108,20 @@ func New( eps.Set(ep.Name(), ep) } - for idx, cfgEp := range cfg.Entrypoints { + for epName, cfgEp := range cfg.Entrypoints { pFunc, ok := Plugins.Get(cfgEp.Plugin) if !ok { return Server{}, fmt.Errorf("%w: '%s', did you register it?", ErrUnknownEntrypoint, cfgEp.Plugin) } - epConfig, err := config.WalkMap(append([]string{DefaultConfigSection}, "entrypoints", strconv.Itoa(idx)), configData) + epConfig, err := config.WalkMap(append([]string{DefaultConfigSection}, "entrypoints", epName), configData) if err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Server{}, err } - ep, err := pFunc(name, version, epConfig, logger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) + epLogger := logger.With("component", ComponentType, "plugin", cfgEp.Plugin, "entrypoint", epName) + + ep, err := pFunc(name, version, epName, epConfig, epLogger, reg, WithEntrypointMiddlewares(mws...), WithEntrypointHandlers(handlers...)) if err != nil { return Server{}, err } From 0bb18dbcc5aa03fdf5f9026f3b636f0db8256f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 26 Mar 2025 09:00:58 +0100 Subject: [PATCH 52/55] feat(orberrors): add WrapF -> Wrap with fmt.Errorf() --- util/orberrors/orberrors.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/util/orberrors/orberrors.go b/util/orberrors/orberrors.go index 368b174..dc391c4 100644 --- a/util/orberrors/orberrors.go +++ b/util/orberrors/orberrors.go @@ -64,6 +64,19 @@ func (e *Error) WrapNew(message string) *Error { } } +// WrapF creates a new error and wraps another error with a new message and args. +func (e *Error) WrapF(message string, args ...any) *Error { + if e == nil { + return nil + } + + return &Error{ + Code: e.Code, + Message: e.Message, + Wrapped: fmt.Errorf(message, args...), + } +} + // Unwrap returns the wrapped error. func (e *Error) Unwrap() error { if e == nil { From 7cf6a7b8fa6eb6a517818b1ac02bd08d80e7faff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 26 Mar 2025 09:01:26 +0100 Subject: [PATCH 53/55] chore(all): create and use ServiceContextWithConfig --- cli/cli.go | 15 +++------- cli/context.go | 31 ++++++++++++-------- cli/flag.go | 10 ++----- cli/provider.go | 37 +++++++++++------------ client/client.go | 6 ++-- event/event.go | 15 ++++++---- event/plugins.go | 3 +- kvstore/kvstore.go | 6 ++-- log/log.go | 21 ++++++------- metrics/metrics.go | 6 ++-- metrics/plugins.go | 2 +- registry/config.go | 16 ++++++---- registry/registry.go | 70 ++++++++++++++++++++++++++++++++++++++++++-- server/server.go | 6 ++-- 14 files changed, 153 insertions(+), 91 deletions(-) diff --git a/cli/cli.go b/cli/cli.go index dc79b0a..3e10e0c 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -10,16 +10,14 @@ type HardcodedConfig struct { // App represents a CLI Application. type App struct { - processID string - Name string Version string Usage string Commands []*Command Flags []*Flag - // MultiServiceConfig defines if the config is used with sections or without. - // If true, the config is used with sections. + // NoMultiServiceConfig defines if the config is used with sections or without. + // If false, the config is used with sections. // For example: // ```yaml // service1: # service1 section @@ -30,13 +28,13 @@ type App struct { // level: INFO // ``` // - // If false, the config is used without sections. + // If true, the config is used without sections. // For example: // ```yaml // logger: // level: INFO // ``` - MultiServiceConfig bool + NoMultiServiceConfig bool // NoAction defines if there will be no main action. NoAction bool @@ -53,11 +51,6 @@ type App struct { InternalAction func() error } -// ProcessID returns the process ID of the application. -func (a *App) ProcessID() string { - return a.processID -} - // Command is a CLI Command for App. type Command struct { Name string diff --git a/cli/context.go b/cli/context.go index 505706a..4ad4652 100644 --- a/cli/context.go +++ b/cli/context.go @@ -45,11 +45,6 @@ func (c *AppContext) App() *App { return c.app } -// ProcessID returns the process ID of the application. -func (c *AppContext) ProcessID() string { - return c.app.ProcessID() -} - // Name returns the name of the application. func (c *AppContext) Name() string { return c.app.Name @@ -109,8 +104,6 @@ type ServiceContext struct { appContext *AppContext name string version string - - Config map[string]any } // App returns the application. @@ -138,11 +131,6 @@ func (c *ServiceContext) StopWaitGroup() *sync.WaitGroup { return c.appContext.StopWaitGroup } -// ProcessID returns the process ID of the application. -func (c *ServiceContext) ProcessID() string { - return c.appContext.ProcessID() -} - // Name returns the name of the service. func (c *ServiceContext) Name() string { return c.name @@ -166,3 +154,22 @@ func NewServiceContext(appContext *AppContext, name string, version string) *Ser version: version, } } + +// ServiceContextWithConfig is a ServiceContext with a config. +type ServiceContextWithConfig struct { + *ServiceContext + configData map[string]any +} + +// Config returns the configuration of the service. +func (c *ServiceContextWithConfig) Config() map[string]any { + return c.configData +} + +// NewServiceContextWithConfig creates a new Service context for the given service with config. +func NewServiceContextWithConfig(appContext *AppContext, name string, version string, configData map[string]any) *ServiceContextWithConfig { + return &ServiceContextWithConfig{ + ServiceContext: NewServiceContext(appContext, name, version), + configData: configData, + } +} diff --git a/cli/flag.go b/cli/flag.go index 79b16e2..f741328 100644 --- a/cli/flag.go +++ b/cli/flag.go @@ -7,12 +7,6 @@ import ( "fmt" ) -// FlagConfigPath is a config path for a flag. -type FlagConfigPath struct { - Path []string - IsGlobal bool -} - // FlagOption is an option for NewFlag. type FlagOption func(*Flag) @@ -23,7 +17,7 @@ type Flag struct { Usage string // The path in map(\[string\])+any - ConfigPaths []FlagConfigPath + ConfigPaths [][]string Default any Value any @@ -48,7 +42,7 @@ func NewFlag[T any]( } // FlagConfigPaths appends the config paths for the flag. -func FlagConfigPaths(n ...FlagConfigPath) FlagOption { +func FlagConfigPaths(n ...[]string) FlagOption { return func(o *Flag) { o.ConfigPaths = append(o.ConfigPaths, n...) } diff --git a/cli/provider.go b/cli/provider.go index f771d6b..2c1b91f 100644 --- a/cli/provider.go +++ b/cli/provider.go @@ -2,6 +2,7 @@ package cli import ( "encoding/base64" + "errors" "fmt" "net/url" @@ -19,13 +20,11 @@ func ProvideParsedFlagsFromArgs(appContext *AppContext, parser ParserFunc, args return parser(appContext, args) } -func flagToMap(globalSections []string, multiServiceConfig bool, flag *Flag, cliResult map[string]any) { +func flagToMap(globalSections []string, flag *Flag, cliResult map[string]any) { for _, cp := range flag.ConfigPaths { - sections := cp.Path[:len(cp.Path)-1] + sections := cp[:len(cp)-1] - if !cp.IsGlobal && !multiServiceConfig { - sections = append(globalSections, sections...) - } + sections = append(globalSections, sections...) data := cliResult for _, s := range sections { @@ -44,16 +43,13 @@ func flagToMap(globalSections []string, multiServiceConfig bool, flag *Flag, cli } } - data[cp.Path[len(cp.Path)-1]] = flag.Value + data[cp[len(cp)-1]] = flag.Value } } // AppConfigData is the config data type. type AppConfigData map[string]any -// ServiceContextHasConfigData is a marker type. -type ServiceContextHasConfigData struct{} - // ProvideAppConfigData provides config data from appContext and flags. func ProvideAppConfigData(appContext *AppContext) (AppConfigData, error) { cfg := map[string]any{} @@ -76,31 +72,28 @@ func ProvideServiceConfigData( serviceContext *ServiceContext, appConfigData AppConfigData, flags []*Flag, -) (ServiceContextHasConfigData, error) { +) (*ServiceContextWithConfig, error) { result := map[string]any(appConfigData) // Process command-line flags. cfg, err := processFlags(serviceContext, flags) if err != nil { - return ServiceContextHasConfigData{}, err + return nil, err } if err := config.Merge(&result, cfg); err != nil { - return ServiceContextHasConfigData{}, err + return nil, err } // If multi-service config is enabled, walk the map to get the service-specific config. - if serviceContext.App().MultiServiceConfig { + if !serviceContext.App().NoMultiServiceConfig { result, err = config.WalkMap(types.SplitServiceName(serviceContext.Name()), result) - if err != nil { - return ServiceContextHasConfigData{}, err + if err != nil && !errors.Is(err, config.ErrNoSuchKey) { + return nil, err } } - // Finally, set the config on the service context. - serviceContext.Config = result - - return ServiceContextHasConfigData{}, nil + return NewServiceContextWithConfig(serviceContext.appContext, serviceContext.name, serviceContext.version, result), nil } // loadHardcodedConfigs loads configs from memory strings (serviceContext.App().HardcodedConfigs). @@ -190,7 +183,11 @@ func processFlags(serviceContext *ServiceContext, flags []*Flag) (map[string]any } // Add regular flags to the CLI config data. - flagToMap(types.SplitServiceName(serviceContext.Name()), serviceContext.App().MultiServiceConfig, flag, cliData) + if !serviceContext.App().NoMultiServiceConfig { + flagToMap(types.SplitServiceName(serviceContext.Name()), flag, cliData) + } else { + flagToMap(nil, flag, cliData) + } } return cliData, nil diff --git a/client/client.go b/client/client.go index e5f6abd..b64b25b 100644 --- a/client/client.go +++ b/client/client.go @@ -120,17 +120,17 @@ func New( // Provide creates a new client instance with the implementation from cfg.Plugin. func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, reg registry.Type, opts ...Option) (Type, error) { - return New(svcCtx.Config, components, logger, reg, opts...) + return New(svcCtx.Config(), components, logger, reg, opts...) } // ProvideNoOpts provides a new client without options. func ProvideNoOpts( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, reg registry.Type, diff --git a/event/event.go b/event/event.go index 3fb89a9..fc0d5f8 100644 --- a/event/event.go +++ b/event/event.go @@ -224,13 +224,13 @@ func HandleRequest[TReq any, TResp any]( // Provide creates a new client instance with the implementation from cfg.Plugin. func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, opts ...Option) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config(), &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } @@ -244,15 +244,20 @@ func Provide( return Type{}, fmt.Errorf("event plugin (%s) not found, did you register it?", cfg.Plugin) } + configData, err := config.WalkMap([]string{DefaultConfigSection}, svcCtx.Config()) + if err != nil && !errors.Is(err, config.ErrNoSuchKey) { + return Type{}, err + } + // Configure the logger. - cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, svcCtx.Config) + cLogger, err := logger.WithConfig([]string{}, configData) if err != nil { return Type{}, err } cLogger = cLogger.With(slog.String("component", ComponentType), slog.String("plugin", cfg.Plugin)) - instance, err := provider(svcCtx, cLogger, opts...) + instance, err := provider(configData, cLogger, opts...) if err != nil { return Type{}, err } @@ -268,7 +273,7 @@ func Provide( // ProvideNoOpts creates a new client instance with the implementation from cfg.Plugin. func ProvideNoOpts( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, ) (Type, error) { diff --git a/event/plugins.go b/event/plugins.go index 3fb5872..8bccc77 100644 --- a/event/plugins.go +++ b/event/plugins.go @@ -1,14 +1,13 @@ package event import ( - "github.com/go-orb/go-orb/cli" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/util/container" ) // ProviderFunc is provider function type used by plugins to create a new client. type ProviderFunc func( - svcCtx *cli.ServiceContext, + configData map[string]any, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/kvstore/kvstore.go b/kvstore/kvstore.go index 347abf6..b0b87af 100644 --- a/kvstore/kvstore.go +++ b/kvstore/kvstore.go @@ -164,12 +164,12 @@ func New( // Provide provides a new KVStore. func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) { - instance, err := New(svcCtx.Config, logger, opts...) + instance, err := New(svcCtx.Config(), logger, opts...) if err != nil { return Type{}, err } @@ -185,7 +185,7 @@ func Provide( // ProvideNoOpts provides a new KVStore without options. func ProvideNoOpts( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, ) (Type, error) { diff --git a/log/log.go b/log/log.go index 8271fea..e8253e4 100644 --- a/log/log.go +++ b/log/log.go @@ -121,12 +121,11 @@ func NewConfigDatas(sections []string, configs map[string]any, opts ...Option) ( // Provide provides a new logger. // It will set the slog.Logger as package wide default logger. func Provide( - _ cli.ServiceContextHasConfigData, - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, opts ...Option, ) (Logger, error) { - logger, err := NewConfigDatas([]string{}, svcCtx.Config, opts...) + logger, err := NewConfigDatas([]string{}, svcCtx.Config(), opts...) if err != nil { return Logger{}, err } @@ -141,20 +140,18 @@ func Provide( // ProvideNoOpts provides a new logger without options. func ProvideNoOpts( - hasConfig cli.ServiceContextHasConfigData, - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, ) (Logger, error) { - return Provide(hasConfig, svcCtx, components) + return Provide(svcCtx, components) } // ProvideWithServiceNameField provides a new logger with the service name field. func ProvideWithServiceNameField( - hasConfig cli.ServiceContextHasConfigData, - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, ) (Logger, error) { - return Provide(hasConfig, svcCtx, components, WithFields(map[string]any{"service": svcCtx.Name()})) + return Provide(svcCtx, components, WithFields(map[string]any{"service": svcCtx.Name()})) } // WithLevel creates a copy of the logger with a new level. @@ -176,12 +173,12 @@ func (l Logger) WithLevel(level string) Logger { // WithConfig returns a new logger if there's a config for it in configs else the current one. // It adds the fields from the current logger. -func (l Logger) WithConfig(sections []string, configs map[string]any, opts ...Option) (Logger, error) { - if !config.HasKey[string](sections, DefaultConfigSection, configs) { +func (l Logger) WithConfig(sections []string, configData map[string]any, opts ...Option) (Logger, error) { + if !config.HasKey[map[string]any](sections, DefaultConfigSection, configData) { return l, nil } - newLogger, err := NewConfigDatas(sections, configs, opts...) + newLogger, err := NewConfigDatas(sections, configData, opts...) if err != nil { return Logger{}, err } diff --git a/metrics/metrics.go b/metrics/metrics.go index 779ef69..7dda904 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -57,14 +57,14 @@ type Type struct { // It parses the config from "configs", fetches the "Plugin" from the config and // then forwards all it's arguments to the factory which it get's from "Plugins". func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) { cfg := NewConfig(opts...) - if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config, &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { + if err := config.Parse(nil, DefaultConfigSection, svcCtx.Config(), &cfg); err != nil && !errors.Is(err, config.ErrNoSuchKey) { return Type{}, err } @@ -81,7 +81,7 @@ func Provide( } // Configure the logger. - cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, svcCtx.Config) + cLogger, err := logger.WithConfig([]string{DefaultConfigSection}, svcCtx.Config()) if err != nil { return Type{}, err } diff --git a/metrics/plugins.go b/metrics/plugins.go index 3dd51f7..c3d73a9 100644 --- a/metrics/plugins.go +++ b/metrics/plugins.go @@ -8,7 +8,7 @@ import ( // ProviderFunc is provider function type is used to create a new metrics plugin. type ProviderFunc func( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, logger log.Logger, opts ...Option, ) (Type, error) diff --git a/registry/config.go b/registry/config.go index 924d60f..455eafa 100644 --- a/registry/config.go +++ b/registry/config.go @@ -1,5 +1,11 @@ package registry +import ( + "time" + + "github.com/go-orb/go-orb/config" +) + //nolint:gochecknoglobals var ( // DefaultConfigSection is the section in the config to use. @@ -9,7 +15,7 @@ var ( DefaultRegistry = "mdns" // DefaultTimeout is the default timeout for the registry. - DefaultTimeout = 100 + DefaultTimeout = config.Duration(500 * time.Millisecond) ) var _ (ConfigType) = (*Config)(nil) @@ -44,8 +50,8 @@ type ConfigType interface { // Config is the configuration that can be used in a registry. type Config struct { - Plugin string `json:"plugin,omitempty" yaml:"plugin,omitempty"` - Timeout int `json:"timeout,omitempty" yaml:"timeout,omitempty"` + Plugin string `json:"plugin,omitempty" yaml:"plugin,omitempty"` + Timeout config.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"` } func (c *Config) config() *Config { @@ -61,10 +67,10 @@ func WithPlugin(n string) Option { } // WithTimeout sets the default registry timeout used. -func WithTimeout(n int) Option { +func WithTimeout(n time.Duration) Option { return func(cfg ConfigType) { c := cfg.config() - c.Timeout = n + c.Timeout = config.Duration(n) } } diff --git a/registry/registry.go b/registry/registry.go index 7c0b529..10a80f3 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -13,8 +13,30 @@ import ( "github.com/go-orb/go-orb/config" "github.com/go-orb/go-orb/log" "github.com/go-orb/go-orb/types" + "github.com/go-orb/go-orb/util/orberrors" ) +// isValidChar checks if a character is valid for a service name. +// +// lowercase ascii characters, numbers, hyphens, and periods are allowed. +func isValidChar(c byte) bool { + if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '-') || (c == '.') { + return true + } + + return false +} + +func isValidNameText(s string) bool { + for _, c := range s { + if !isValidChar(byte(c)) { + return false + } + } + + return true +} + // ComponentType is the components name. const ComponentType = "registry" @@ -35,6 +57,9 @@ type ServiceNode struct { // Metadata is the metadata of the service. Metadata map[string]string `json:"metadata"` + // Node is the name of the node, this is normally the entrypoint name. + Node string `json:"node"` + // Scheme is the scheme of the service. Scheme string `json:"scheme"` // Address is the address of the service. @@ -51,6 +76,45 @@ type ServiceNode struct { TTL time.Duration `json:"ttl"` } +// Valid checks if a serviceNode has a valid namespace, region, and name. +// +// lowercase ascii characters, numbers, hyphens, and periods are allowed. +func (r ServiceNode) Valid() error { + if r.Name == "" { + return orberrors.ErrBadRequest.WrapNew("service name must not be empty") + } + + if r.Node == "" { + return orberrors.ErrBadRequest.WrapNew("service node must not be empty") + } + + if r.Scheme == "" { + return orberrors.ErrBadRequest.WrapNew("service scheme must not be empty") + } + + if !isValidNameText(r.Namespace) { + return orberrors.ErrBadRequest.WrapF("namespace must be alphanumeric, got %s", r.Namespace) + } + + if !isValidNameText(r.Region) { + return orberrors.ErrBadRequest.WrapF("region must be alphanumeric, got %s", r.Region) + } + + if !isValidNameText(r.Name) { + return orberrors.ErrBadRequest.WrapF("service name must be alphanumeric, got %s", r.Name) + } + + if !isValidNameText(r.Node) { + return orberrors.ErrBadRequest.WrapF("service node must be alphanumeric, got %s", r.Node) + } + + if !isValidNameText(r.Scheme) { + return orberrors.ErrBadRequest.WrapF("service scheme must be alphanumeric, got %s", r.Scheme) + } + + return nil +} + func (r ServiceNode) String() string { return fmt.Sprintf("ServiceNode{%s %s %s %s %s %s}", r.Namespace, r.Region, r.Name, r.Version, r.Address, r.Scheme) } @@ -128,12 +192,12 @@ func New( // It parses the config from "configs", fetches the "Plugin" from the config and // then forwards all it's arguments to the factory which it get's from "Plugins". func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, opts ...Option, ) (Type, error) { - reg, err := New(svcCtx.Config, components, logger, opts...) + reg, err := New(svcCtx.Config(), components, logger, opts...) if err != nil { return Type{}, err } @@ -149,7 +213,7 @@ func Provide( // ProvideNoOpts is the registry provider for wire without options. func ProvideNoOpts( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, ) (Type, error) { diff --git a/server/server.go b/server/server.go index afe13b5..db8c8f4 100644 --- a/server/server.go +++ b/server/server.go @@ -142,13 +142,13 @@ func New( // Provide creates a new server. func Provide( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, reg registry.Type, opts ...ConfigOption, ) (Server, error) { - srv, err := New(svcCtx.Name(), svcCtx.Version(), svcCtx.Config, logger, reg, opts...) + srv, err := New(svcCtx.Name(), svcCtx.Version(), svcCtx.Config(), logger, reg, opts...) if err != nil { return Server{}, err } @@ -164,7 +164,7 @@ func Provide( // ProvideNoOpts creates a new server without functional options. func ProvideNoOpts( - svcCtx *cli.ServiceContext, + svcCtx *cli.ServiceContextWithConfig, components *types.Components, logger log.Logger, reg registry.Type, From d0d2bad340e8c62124e22972ef0c37488f1e5219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 26 Mar 2025 10:16:12 +0100 Subject: [PATCH 54/55] feat(registry): add network field, omitempty all ServiceNode fields. --- registry/registry.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/registry/registry.go b/registry/registry.go index 10a80f3..433226b 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -18,9 +18,9 @@ import ( // isValidChar checks if a character is valid for a service name. // -// lowercase ascii characters, numbers, hyphens, and periods are allowed. +// lowercase ascii characters, numbers, hyphens, plus sign and periods are allowed. func isValidChar(c byte) bool { - if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '-') || (c == '.') { + if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '-') || (c == '.') || (c == '+') { return true } @@ -50,30 +50,34 @@ var ( // ServiceNode is a service node. type ServiceNode struct { // Name is the name of the service. Should be DNS compatible. - Name string `json:"name"` + Name string `json:"name,omitempty"` // Version is the version of the service. - Version string `json:"version"` + Version string `json:"version,omitempty"` // Metadata is the metadata of the service. - Metadata map[string]string `json:"metadata"` + Metadata map[string]string `json:"metadata,omitempty"` // Node is the name of the node, this is normally the entrypoint name. - Node string `json:"node"` + Node string `json:"node,omitempty"` + + // Network is the network of the service, tcp, udp or unix. + // Empty is tcp and the default. + Network string `json:"network,omitempty"` // Scheme is the scheme of the service. - Scheme string `json:"scheme"` + Scheme string `json:"scheme,omitempty"` // Address is the address of the service. - Address string `json:"address"` + Address string `json:"address,omitempty"` // Namespace is the namespace of the node. - Namespace string `json:"namespace"` + Namespace string `json:"namespace,omitempty"` // Region is the region of the node. - Region string `json:"region"` + Region string `json:"region,omitempty"` // TTL is the time to live for the service. // Keep it 0 if you don't want to use TTL. - TTL time.Duration `json:"ttl"` + TTL time.Duration `json:"ttl,omitempty"` } // Valid checks if a serviceNode has a valid namespace, region, and name. @@ -112,6 +116,10 @@ func (r ServiceNode) Valid() error { return orberrors.ErrBadRequest.WrapF("service scheme must be alphanumeric, got %s", r.Scheme) } + if !isValidNameText(r.Network) { + return orberrors.ErrBadRequest.WrapF("service network must be alphanumeric, got %s", r.Network) + } + return nil } From 8c4dcbea8f6ed81f1eee38fa8b854c8f64d7403e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jochum?= Date: Wed, 26 Mar 2025 11:53:11 +0100 Subject: [PATCH 55/55] feat(server): Add support for other networks than tcp, closes #31 --- Taskfile.yml | 10 ++++++++++ client/config.go | 15 ++++++++++++++- server/entrypoint.go | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Taskfile.yml diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..8935d33 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,10 @@ +version: "3" + +tasks: + lint: + cmds: + - cmd: golangci-lint run + + local-lint: + cmds: + - cmd: golangci-lint run diff --git a/client/config.go b/client/config.go index d6ab366..70d7866 100644 --- a/client/config.go +++ b/client/config.go @@ -19,7 +19,20 @@ var ( // DefaultContentType is the default Content-Type for calls. DefaultContentType = "application/x-protobuf" // DefaultPreferredTransports set's in which order a transport will be selected. - DefaultPreferredTransports = []string{"memory", "grpc", "drpc", "http", "grpcs", "h2c", "http2", "http3", "https"} + DefaultPreferredTransports = []string{ + "memory", + "unix+grpc", + "unix+drpc", + "unix+http", + "grpc", + "drpc", + "http", + "grpcs", + "h2c", + "http2", + "http3", + "https", + } // DefaultPoolHosts set the number of hosts in a pool. DefaultPoolHosts = 64 diff --git a/server/entrypoint.go b/server/entrypoint.go index 9f0b49b..fff9ca2 100644 --- a/server/entrypoint.go +++ b/server/entrypoint.go @@ -41,6 +41,9 @@ type Entrypoint interface { // Transport returns the client transport that is required to talk to this entrypoint. Transport() string + // Network returns the network the entrypoint is listening on. + Network() string + // Address returns the address the entrypoint is listening on. Address() string }