// newAvailablePlugin returns an availablePlugin with information from a // plugin.Response func newAvailablePlugin(resp *plugin.Response, emitter gomit.Emitter, ep executablePlugin) (*availablePlugin, error) { if resp.Type != plugin.CollectorPluginType && resp.Type != plugin.ProcessorPluginType && resp.Type != plugin.PublisherPluginType { return nil, strategy.ErrBadType } ap := &availablePlugin{ meta: resp.Meta, name: resp.Meta.Name, version: resp.Meta.Version, pluginType: resp.Type, emitter: emitter, healthChan: make(chan error, 1), lastHitTime: time.Now(), ePlugin: ep, } ap.key = fmt.Sprintf("%s:%s:%d", ap.pluginType.String(), ap.name, ap.version) listenURL := fmt.Sprintf("http://%v/rpc", resp.ListenAddress) // Create RPC Client switch resp.Type { case plugin.CollectorPluginType: switch resp.Meta.RPCType { case plugin.JSONRPC: c, e := client.NewCollectorHttpJSONRPCClient(listenURL, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.NativeRPC: c, e := client.NewCollectorNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c } case plugin.PublisherPluginType: switch resp.Meta.RPCType { case plugin.JSONRPC: c, e := client.NewPublisherHttpJSONRPCClient(listenURL, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.NativeRPC: c, e := client.NewPublisherNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c } case plugin.ProcessorPluginType: switch resp.Meta.RPCType { case plugin.JSONRPC: c, e := client.NewProcessorHttpJSONRPCClient(listenURL, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.NativeRPC: c, e := client.NewProcessorNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c } default: return nil, errors.New("Cannot create a client for a plugin of the type: " + resp.Type.String()) } return ap, nil }
// newAvailablePlugin returns an availablePlugin with information from a // plugin.Response func newAvailablePlugin(resp plugin.Response, emitter gomit.Emitter, ep executablePlugin) (*availablePlugin, error) { if resp.Type != plugin.CollectorPluginType && resp.Type != plugin.ProcessorPluginType && resp.Type != plugin.PublisherPluginType { return nil, strategy.ErrBadType } ap := &availablePlugin{ meta: resp.Meta, name: resp.Meta.Name, version: resp.Meta.Version, pluginType: resp.Type, emitter: emitter, healthChan: make(chan error, 1), lastHitTime: time.Now(), ePlugin: ep, } ap.key = fmt.Sprintf("%s"+core.Separator+"%s"+core.Separator+"%d", ap.pluginType.String(), ap.name, ap.version) // Create RPC Client switch resp.Type { case plugin.CollectorPluginType: switch resp.Meta.RPCType { case plugin.NativeRPC: log.WithFields(log.Fields{ "_module": "control-aplugin", "_block": "newAvailablePlugin", "plugin_name": ap.name, }).Warning("This plugin is using a deprecated RPC protocol. Find more information here: https://github.com/intelsdi-x/snap/issues/1289 ") c, e := client.NewCollectorNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.GRPC: c, e := client.NewCollectorGrpcClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c default: return nil, errors.New("Invalid RPCTYPE") } case plugin.PublisherPluginType: switch resp.Meta.RPCType { case plugin.NativeRPC: c, e := client.NewPublisherNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.GRPC: c, e := client.NewPublisherGrpcClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c default: return nil, errors.New("Invalid RPCTYPE") } case plugin.ProcessorPluginType: switch resp.Meta.RPCType { case plugin.NativeRPC: c, e := client.NewProcessorNativeClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c case plugin.GRPC: c, e := client.NewProcessorGrpcClient(resp.ListenAddress, DefaultClientTimeout, resp.PublicKey, !resp.Meta.Unsecure) if e != nil { return nil, errors.New("error while creating client connection: " + e.Error()) } ap.client = c default: return nil, errors.New("Invalid RPCTYPE") } default: return nil, errors.New("Cannot create a client for a plugin of the type: " + resp.Type.String()) } return ap, nil }