/
provider_manager.go
executable file
·84 lines (70 loc) · 2.37 KB
/
provider_manager.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package provider
import (
"fmt"
"log"
"github.com/go-chassis/go-chassis/core/lager"
)
// plugin name and schemas map
var providerPlugins = make(map[string]func(string) Provider)
// microservice name and schemas map
var providers = make(map[string]Provider)
var defaultProviderFunc = NewProvider
//TODO locks
// InstallProviderPlugin install provider plugin
func InstallProviderPlugin(pluginName string, newFunc func(string) Provider) {
log.Printf("Install Provider Plugin, name=%s", pluginName)
providerPlugins[pluginName] = newFunc
}
// todo: return error.
// RegisterProvider register provider
func RegisterProvider(pluginName string, microserviceName string) Provider {
pFunc, exist := providerPlugins[pluginName]
if !exist {
lager.Logger.Errorf(nil, "provider type %s is not exist.", pluginName)
return nil
}
p := pFunc(microserviceName)
lager.Logger.Debugf("registered provider for service [%s]", microserviceName)
RegisterCustomProvider(microserviceName, p)
return p
}
// RegisterCustomProvider register customer provider
func RegisterCustomProvider(microserviceName string, p Provider) {
if providers[microserviceName] != nil {
lager.Logger.Warnf("Can not replace Provider,since it is not nil")
return
}
providers[microserviceName] = p
}
// GetProvider get provider
func GetProvider(microserviceName string) (Provider, error) {
p, exist := providers[microserviceName]
if !exist {
return nil, fmt.Errorf("Service [%s] doesn't have provider", microserviceName)
}
return p, nil
}
// RegisterSchemaWithName register schema with name
func RegisterSchemaWithName(microserviceName string, schemaID string, schema interface{}) error {
p, exist := providers[microserviceName]
if !exist {
return fmt.Errorf("service: %s do not exist", microserviceName)
}
return p.RegisterName(schemaID, schema)
}
// RegisterSchema register schema
func RegisterSchema(microserviceName string, schema interface{}) (string, error) {
p := providers[microserviceName]
if p == nil {
return "", fmt.Errorf("[%s] Provider is not exist ", microserviceName)
}
return p.Register(schema)
}
// GetOperation get operation
func GetOperation(microserviceName string, schemaID string, operationID string) (Operation, error) {
p, ok := providers[microserviceName]
if !ok {
return nil, fmt.Errorf("MicroService [%s] doesn't exist", microserviceName)
}
return p.GetOperation(schemaID, operationID)
}