github.com/maier/nomad@v0.4.1-0.20161110003312-a9e3d0b8549d/client/driver/syslog_plugin.go (about) 1 package driver 2 3 import ( 4 "log" 5 "net/rpc" 6 7 "github.com/hashicorp/go-plugin" 8 "github.com/hashicorp/nomad/client/driver/logging" 9 "github.com/hashicorp/nomad/nomad/structs" 10 ) 11 12 type SyslogCollectorRPC struct { 13 client *rpc.Client 14 } 15 16 type LaunchCollectorArgs struct { 17 Ctx *logging.LogCollectorContext 18 } 19 20 func (e *SyslogCollectorRPC) LaunchCollector(ctx *logging.LogCollectorContext) (*logging.SyslogCollectorState, error) { 21 var ss *logging.SyslogCollectorState 22 err := e.client.Call("Plugin.LaunchCollector", LaunchCollectorArgs{Ctx: ctx}, &ss) 23 return ss, err 24 } 25 26 func (e *SyslogCollectorRPC) Exit() error { 27 return e.client.Call("Plugin.Exit", new(interface{}), new(interface{})) 28 } 29 30 func (e *SyslogCollectorRPC) UpdateLogConfig(logConfig *structs.LogConfig) error { 31 return e.client.Call("Plugin.UpdateLogConfig", logConfig, new(interface{})) 32 } 33 34 type SyslogCollectorRPCServer struct { 35 Impl logging.LogCollector 36 } 37 38 func (s *SyslogCollectorRPCServer) LaunchCollector(args LaunchCollectorArgs, 39 resp *logging.SyslogCollectorState) error { 40 ss, err := s.Impl.LaunchCollector(args.Ctx) 41 if ss != nil { 42 *resp = *ss 43 } 44 return err 45 } 46 47 func (s *SyslogCollectorRPCServer) Exit(args interface{}, resp *interface{}) error { 48 return s.Impl.Exit() 49 } 50 51 func (s *SyslogCollectorRPCServer) UpdateLogConfig(logConfig *structs.LogConfig, resp *interface{}) error { 52 return s.Impl.UpdateLogConfig(logConfig) 53 } 54 55 type SyslogCollectorPlugin struct { 56 logger *log.Logger 57 Impl *SyslogCollectorRPCServer 58 } 59 60 func (p *SyslogCollectorPlugin) Server(*plugin.MuxBroker) (interface{}, error) { 61 if p.Impl == nil { 62 p.Impl = &SyslogCollectorRPCServer{Impl: logging.NewSyslogCollector(p.logger)} 63 } 64 return p.Impl, nil 65 } 66 67 func (p *SyslogCollectorPlugin) Client(b *plugin.MuxBroker, c *rpc.Client) (interface{}, error) { 68 return &SyslogCollectorRPC{client: c}, nil 69 }