github.com/henvic/wedeploycli@v1.7.6-0.20200319005353-3630f582f284/listinstances/watch.go (about) 1 package listinstances 2 3 import ( 4 "time" 5 6 "github.com/henvic/ctxsignal" 7 "github.com/henvic/wedeploycli/errorhandler" 8 ) 9 10 func (l *List) watchHandler() { 11 select { 12 case <-l.ctx.Done(): 13 return 14 case <-l.updated: 15 } 16 17 defer func() { 18 _ = l.w.Flush() 19 _ = l.livew.Flush() 20 }() 21 22 if _, err := ctxsignal.Closed(l.ctx); err == nil { 23 return 24 } 25 26 l.watchMutex.RLock() 27 var le = l.lastError 28 var retry = l.retry 29 l.watchMutex.RUnlock() 30 31 if le != nil { 32 if l.once { 33 return 34 } 35 36 l.Printf("%v #%d\n", errorhandler.Handle(le), retry) 37 return 38 } 39 40 l.printInstances() 41 } 42 43 func (l *List) watch() { 44 l.w.Init(l.outStream) 45 46 var ticker = time.NewTicker(l.PoolingInterval) 47 48 for { 49 select { 50 case <-ticker.C: 51 l.watchHandler() 52 case <-l.ctx.Done(): 53 ticker.Stop() 54 ticker = nil 55 return 56 } 57 } 58 }