package main import ( "log" "sync" "time" influx "github.com/heroku/lumbermill/Godeps/_workspace/src/github.com/influxdb/influxdb-go" metrics "github.com/heroku/lumbermill/Godeps/_workspace/src/github.com/rcrowley/go-metrics" ) var deliverySizeHistogram = metrics.GetOrRegisterHistogram("lumbermill.poster.deliver.sizes", metrics.DefaultRegistry, metrics.NewUniformSample(100)) type poster struct { destination *destination name string influxClient *influx.Client pointsSuccessCounter metrics.Counter pointsSuccessTime metrics.Timer pointsFailureCounter metrics.Counter pointsFailureTime metrics.Timer } func newPoster(clientConfig influx.ClientConfig, name string, destination *destination, waitGroup *sync.WaitGroup) *poster { influxClient, err := influx.NewClient(&clientConfig) if err != nil { panic(err) } return &poster{
tokenMissingCounter = metrics.GetOrRegisterCounter("lumbermill.errors.token.missing", metrics.DefaultRegistry) timeParsingErrorCounter = metrics.GetOrRegisterCounter("lumbermill.errors.time.parse", metrics.DefaultRegistry) logfmtParsingErrorCounter = metrics.GetOrRegisterCounter("lumbermill.errors.logfmt.parse", metrics.DefaultRegistry) droppedErrorCounter = metrics.GetOrRegisterCounter("lumbermill.errors.dropped", metrics.DefaultRegistry) batchCounter = metrics.GetOrRegisterCounter("lumbermill.batch", metrics.DefaultRegistry) linesCounter = metrics.GetOrRegisterCounter("lumbermill.lines", metrics.DefaultRegistry) routerErrorLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.router.error", metrics.DefaultRegistry) routerLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.router", metrics.DefaultRegistry) routerBlankLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.router.blank", metrics.DefaultRegistry) dynoErrorLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.dyno.error", metrics.DefaultRegistry) dynoMemLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.dyno.mem", metrics.DefaultRegistry) dynoLoadLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.dyno.load", metrics.DefaultRegistry) unknownHerokuLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.unknown.heroku", metrics.DefaultRegistry) unknownUserLinesCounter = metrics.GetOrRegisterCounter("lumbermill.lines.unknown.user", metrics.DefaultRegistry) parseTimer = metrics.GetOrRegisterTimer("lumbermill.batches.parse.time", metrics.DefaultRegistry) batchSizeHistogram = metrics.GetOrRegisterHistogram("lumbermill.batches.sizes", metrics.DefaultRegistry, metrics.NewUniformSample(100)) ) // Dyno's are generally reported as "<type>.<#>" // Extract the <type> and return it func dynoType(what string) string { s := strings.Split(what, ".") return s[0] } // Lock, or don't do any work, but don't block. // This, essentially, samples the incoming tokens for the purposes of health checking // live tokens. Rather than use a random number generator, or a global counter, we // let the scheduler do the sampling for us. func (s *server) maybeUpdateRecentTokens(host, id string) { if atomic.CompareAndSwapInt32(s.tokenLock, 0, 1) {