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  }