[MM-35077] Add basic support for plugin intra-cluster communication (#17495)

* Add basic support for plugin intra-cluster communication

* Some renaming for added clarity

* Allow sending cluster event to specific nodes

* Improve naming and documentation

* Improve logging
Этот коммит содержится в:
Claudio Costa
2021-04-28 19:59:32 +02:00
коммит произвёл GitHub
родитель 7dc1718c1d
Коммит 6af032d06a
15 изменённых файлов: 236 добавлений и 4 удалений

Просмотреть файл

@@ -532,6 +532,40 @@ func (s *hooksRPCServer) ReactionHasBeenRemoved(args *Z_ReactionHasBeenRemovedAr
return nil
}
func init() {
hookNameToId["OnPluginClusterEvent"] = OnPluginClusterEventID
}
type Z_OnPluginClusterEventArgs struct {
A *Context
B model.PluginClusterEvent
}
type Z_OnPluginClusterEventReturns struct {
}
func (g *hooksRPCClient) OnPluginClusterEvent(c *Context, ev model.PluginClusterEvent) {
_args := &Z_OnPluginClusterEventArgs{c, ev}
_returns := &Z_OnPluginClusterEventReturns{}
if g.implemented[OnPluginClusterEventID] {
if err := g.client.Call("Plugin.OnPluginClusterEvent", _args, _returns); err != nil {
g.log.Error("RPC call OnPluginClusterEvent to plugin failed.", mlog.Err(err))
}
}
}
func (s *hooksRPCServer) OnPluginClusterEvent(args *Z_OnPluginClusterEventArgs, returns *Z_OnPluginClusterEventReturns) error {
if hook, ok := s.impl.(interface {
OnPluginClusterEvent(c *Context, ev model.PluginClusterEvent)
}); ok {
hook.OnPluginClusterEvent(args.A, args.B)
} else {
return encodableError(fmt.Errorf("Hook OnPluginClusterEvent called but not implemented."))
}
return nil
}
type Z_RegisterCommandArgs struct {
A *model.Command
}
@@ -4906,3 +4940,33 @@ func (s *apiRPCServer) DeleteCommand(args *Z_DeleteCommandArgs, returns *Z_Delet
}
return nil
}
type Z_PublishPluginClusterEventArgs struct {
A model.PluginClusterEvent
B model.PluginClusterEventSendOptions
}
type Z_PublishPluginClusterEventReturns struct {
A error
}
func (g *apiRPCClient) PublishPluginClusterEvent(ev model.PluginClusterEvent, opts model.PluginClusterEventSendOptions) error {
_args := &Z_PublishPluginClusterEventArgs{ev, opts}
_returns := &Z_PublishPluginClusterEventReturns{}
if err := g.client.Call("Plugin.PublishPluginClusterEvent", _args, _returns); err != nil {
log.Printf("RPC call to PublishPluginClusterEvent API failed: %s", err.Error())
}
return _returns.A
}
func (s *apiRPCServer) PublishPluginClusterEvent(args *Z_PublishPluginClusterEventArgs, returns *Z_PublishPluginClusterEventReturns) error {
if hook, ok := s.impl.(interface {
PublishPluginClusterEvent(ev model.PluginClusterEvent, opts model.PluginClusterEventSendOptions) error
}); ok {
returns.A = hook.PublishPluginClusterEvent(args.A, args.B)
returns.A = encodableError(returns.A)
} else {
return encodableError(fmt.Errorf("API PublishPluginClusterEvent called but not implemented."))
}
return nil
}