func main() { flag.Parse() go common.RegisterTailCleanup() apptail.LoadConfig() fstorage := storage.NewFileStorage(*stateFile_path) tracker := storage.NewTracker(fstorage, *debug) tracker.LoadTailers() interval := time.Duration(int64(apptail.GetConfig().PersistPositionIntervalSeconds)) go tracker.StartSubmissionTimer(interval * time.Second) major, minor, patch := gozmq.Version() log.Infof("Starting apptail (zeromq %d.%d.%d)", major, minor, patch) log.Infof("Config: %+v\n", apptail.GetConfig()) uid := getUID() natsclient := server.NewNatsClient(3) mux := &sync.Mutex{} n := 0 started_instances := StartedInstance{} natsclient.Subscribe("logyard."+uid+".newinstance", func(instance *apptail.Instance) { n++ if started_instances.checkInstanceAndUpdate(n, instance.DockerId, mux) { go func() { instance.Tail(tracker) started_instances.delete(instance.DockerId, mux) }() } }) natsclient.Publish("logyard."+uid+".start", []byte("{}")) log.Infof("Waiting for app instances ...") go docker.DockerListener.Listen() // clean up the cache after restart docker.DockerListener.TrackerCleanUp(tracker) server.MarkRunning("apptail") apptail_event.MonitorCloudEvents() }
func NewNatsClient(retries int) *nats.EncodedConn { return server.NewNatsClient(retries) }