-
Notifications
You must be signed in to change notification settings - Fork 4
/
serviceregistry.go
67 lines (56 loc) · 1.86 KB
/
serviceregistry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package serviceregistry
import (
"context"
"fmt"
"log/slog"
"github.com/opentdf/platform/sdk"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/opentdf/platform/internal/db"
"github.com/opentdf/platform/internal/opa"
"github.com/opentdf/platform/internal/server"
"google.golang.org/grpc"
)
type ServiceConfig struct {
Enabled bool `yaml:"enabled"`
Remote RemoteServiceConfig `yaml:"remote"`
ExtraProps map[string]interface{} `json:"-"`
}
type RemoteServiceConfig struct {
Endpoint string `yaml:"endpoint"`
}
type RegistrationParams struct {
Config ServiceConfig
OTDF *server.OpenTDFServer
DBClient *db.Client
Engine *opa.Engine
SDK *sdk.SDK
WellKnownConfig func(namespace string, config any) error
}
type HandlerServer func(ctx context.Context, mux *runtime.ServeMux, server any) error
type RegisterFunc func(RegistrationParams) (Impl any, HandlerServer HandlerServer)
type Registration struct {
Namespace string
ServiceDesc *grpc.ServiceDesc
RegisterFunc RegisterFunc
}
type Service struct {
Registration
}
// Map of namespaces to services
var RegisteredServices map[string]map[string]Service
func RegisterService(r Registration) error {
if RegisteredServices == nil {
RegisteredServices = make(map[string]map[string]Service, 0)
}
if RegisteredServices[r.Namespace] == nil {
RegisteredServices[r.Namespace] = make(map[string]Service, 0)
}
if RegisteredServices[r.Namespace][r.ServiceDesc.ServiceName].RegisterFunc != nil {
return fmt.Errorf("service already registered namespace:%s service:%s", r.Namespace, r.ServiceDesc.ServiceName)
}
slog.Info("registered service", slog.String("namespace", r.Namespace), slog.String("service", r.ServiceDesc.ServiceName))
RegisteredServices[r.Namespace][r.ServiceDesc.ServiceName] = Service{
Registration: r,
}
return nil
}