services/introspection: support to show introspection grpc service
Signed-off-by: Iceber Gu <wei.cai-nat@daocloud.io>
This commit is contained in:
@@ -41,12 +41,9 @@ func init() {
|
||||
ID: services.IntrospectionService,
|
||||
Requires: []plugin.Type{},
|
||||
InitFn: func(ic *plugin.InitContext) (interface{}, error) {
|
||||
// this service works by using the plugin context up till the point
|
||||
// this service is initialized. Since we require this service last,
|
||||
// it should provide the full set of plugins.
|
||||
pluginsPB := pluginsToPB(ic.GetAll())
|
||||
// this service fetches all plugins through the plugin set of the plugin context
|
||||
return &Local{
|
||||
plugins: pluginsPB,
|
||||
plugins: ic.Plugins(),
|
||||
root: ic.Root,
|
||||
}, nil
|
||||
},
|
||||
@@ -55,19 +52,19 @@ func init() {
|
||||
|
||||
// Local is a local implementation of the introspection service
|
||||
type Local struct {
|
||||
mu sync.Mutex
|
||||
plugins []api.Plugin
|
||||
root string
|
||||
mu sync.Mutex
|
||||
root string
|
||||
plugins *plugin.Set
|
||||
pluginsPB []api.Plugin
|
||||
}
|
||||
|
||||
var _ = (api.IntrospectionClient)(&Local{})
|
||||
|
||||
// UpdateLocal updates the local introspection service
|
||||
func (l *Local) UpdateLocal(root string, plugins []api.Plugin) {
|
||||
func (l *Local) UpdateLocal(root string) {
|
||||
l.mu.Lock()
|
||||
defer l.mu.Unlock()
|
||||
l.root = root
|
||||
l.plugins = plugins
|
||||
}
|
||||
|
||||
// Plugins returns the locally defined plugins
|
||||
@@ -93,9 +90,16 @@ func (l *Local) Plugins(ctx context.Context, req *api.PluginsRequest, _ ...grpc.
|
||||
}
|
||||
|
||||
func (l *Local) getPlugins() []api.Plugin {
|
||||
if !plugin.AreRegisteredPluginsInitialized(l.plugins) {
|
||||
return pluginsToPB(l.plugins.GetAll())
|
||||
}
|
||||
|
||||
l.mu.Lock()
|
||||
defer l.mu.Unlock()
|
||||
return l.plugins
|
||||
if l.pluginsPB == nil {
|
||||
l.pluginsPB = pluginsToPB(l.plugins.GetAll())
|
||||
}
|
||||
return l.pluginsPB
|
||||
}
|
||||
|
||||
// Server returns the local server information
|
||||
|
||||
@@ -31,11 +31,8 @@ func init() {
|
||||
plugin.Register(&plugin.Registration{
|
||||
Type: plugin.GRPCPlugin,
|
||||
ID: "introspection",
|
||||
Requires: []plugin.Type{"*"},
|
||||
Requires: []plugin.Type{plugin.ServicePlugin},
|
||||
InitFn: func(ic *plugin.InitContext) (interface{}, error) {
|
||||
// this service works by using the plugin context up till the point
|
||||
// this service is initialized. Since we require this service last,
|
||||
// it should provide the full set of plugins.
|
||||
plugins, err := ic.GetByType(plugin.ServicePlugin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -50,13 +47,11 @@ func init() {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
allPluginsPB := pluginsToPB(ic.GetAll())
|
||||
|
||||
localClient, ok := i.(*Local)
|
||||
if !ok {
|
||||
return nil, errors.New("Could not create a local client for introspection service")
|
||||
}
|
||||
localClient.UpdateLocal(ic.Root, allPluginsPB)
|
||||
localClient.UpdateLocal(ic.Root)
|
||||
|
||||
return &server{
|
||||
local: localClient,
|
||||
|
||||
Reference in New Issue
Block a user