github.com/mattyr/nomad@v0.3.3-0.20160919021406-3485a065154a/client/driver/logging/shuttler.go (about)

     1  package logging
     2  
     3  import (
     4  	"io"
     5  	"log"
     6  
     7  	"github.com/hashicorp/nomad/nomad/structs"
     8  	"github.com/heroku/log-shuttle"
     9  )
    10  
    11  type Shuttler struct {
    12  	logShuttler *shuttle.Shuttle
    13  	pr          io.Reader
    14  	pw          io.Writer
    15  }
    16  
    17  func NewShuttler(config *structs.LogShuttleConfig, logger *log.Logger) (*Shuttler, error) {
    18  	sConfig := getShuttleConfig(config)
    19  	sConfig.ComputeHeader()
    20  	logger.Printf("[DEBUG] log-shuttle config: %+v\n", sConfig)
    21  	s := shuttle.NewShuttle(sConfig)
    22  
    23  	pr, pw := io.Pipe()
    24  	s.Logger = logger
    25  	s.ErrLogger = logger
    26  	s.LoadReader(pr)
    27  
    28  	s.Launch()
    29  
    30  	// TODO:
    31  	//go LogFmtMetricsEmitter(s.MetricsRegistry, sConfig.StatsSource, sConfig.StatsInterval, logger)
    32  
    33  	return &Shuttler{logShuttler: s, pr: pr, pw: pw}, nil
    34  }
    35  
    36  func (s *Shuttler) Write(p []byte) (n int, err error) {
    37  	return s.pw.Write(p)
    38  }
    39  
    40  func (s *Shuttler) Shutdown() {
    41  	s.logShuttler.Land()
    42  }
    43  
    44  func getShuttleConfig(config *structs.LogShuttleConfig) shuttle.Config {
    45  	sConfig := shuttle.NewConfig()
    46  	sConfig.InputFormat = shuttle.InputFormatRaw
    47  	sConfig.UseGzip = config.UseGzip
    48  	sConfig.Drop = config.Drop
    49  	sConfig.Prival = shuttle.DefaultPriVal
    50  	sConfig.Version = shuttle.DefaultVersion
    51  	sConfig.Procid = config.Procid
    52  	sConfig.Appname = config.Appname
    53  	sConfig.Appname = config.LogplexToken
    54  	sConfig.Hostname = config.Hostname
    55  	sConfig.Msgid = shuttle.DefaultMsgID
    56  	sConfig.LogsURL = config.LogsURL
    57  	sConfig.StatsSource = config.StatsSource
    58  	sConfig.StatsInterval = config.StatsInterval
    59  	sConfig.WaitDuration = shuttle.DefaultWaitDuration
    60  	sConfig.Timeout = shuttle.DefaultTimeout
    61  	sConfig.MaxAttempts = config.MaxAttempts
    62  	sConfig.NumOutlets = config.NumOutlets
    63  	sConfig.BatchSize = config.BatchSize
    64  	sConfig.BackBuff = config.BackBuff
    65  	sConfig.MaxLineLength = config.MaxLineLength
    66  	sConfig.KinesisShards = config.KinesisShards
    67  	return sConfig
    68  }