@@ -115,6 +115,7 @@ func newConn() (*httputil.ClientConn, error) {
115115 if err != nil {
116116 return nil , err
117117 }
118+
118119 return httputil .NewClientConn (conn , nil ), nil
119120}
120121
@@ -123,59 +124,62 @@ func getEvents() chan *Event {
123124 go func () {
124125 defer close (eventChan )
125126
126- restart:
127-
128- c , err := newConn ()
129- if err != nil {
130- log .Printf ("cannot connect to docker: %s\n " , err )
131- time .Sleep (10 * time .Second )
132- goto restart
133- }
134- defer c .Close ()
135-
136- req , err := http .NewRequest ("GET" , "/events" , nil )
137- if err != nil {
138- log .Printf ("bad request for events: %s\n " , err )
139- c .Close ()
140- time .Sleep (10 * time .Second )
141- goto restart
142- }
127+ for {
143128
144- resp , err := c .Do (req )
145- if err != nil {
146- log .Printf ("cannot connect to events endpoint: %s\n " , err )
147- c .Close ()
148- time .Sleep (10 * time .Second )
149- goto restart
150- }
151- defer resp .Body .Close ()
129+ c , err := newConn ()
130+ if err != nil {
131+ log .Printf ("cannot connect to docker: %s\n " , err )
132+ time .Sleep (10 * time .Second )
133+ continue
134+ }
152135
153- // handle signals to stop the socket
154- sigChan := make (chan os.Signal , 1 )
155- signal .Notify (sigChan , os .Interrupt , syscall .SIGTERM , syscall .SIGQUIT )
156- go func () {
157- for sig := range sigChan {
158- log .Printf ("received signal '%v', exiting\n " , sig )
136+ req , err := http .NewRequest ("GET" , "/events" , nil )
137+ if err != nil {
138+ log .Printf ("bad request for events: %s\n " , err )
139+ c .Close ()
140+ time .Sleep (10 * time .Second )
141+ continue
142+ }
159143
144+ resp , err := c .Do (req )
145+ if err != nil {
146+ log .Printf ("cannot connect to events endpoint: %s\n " , err )
160147 c .Close ()
161- close ( eventChan )
162- os . Exit ( 0 )
148+ time . Sleep ( 10 * time . Second )
149+ continue
163150 }
164- }()
165151
166- dec := json .NewDecoder (resp .Body )
167- for {
168- var event * Event
169- if err := dec .Decode (& event ); err != nil {
170- if err == io .EOF {
152+ // handle signals to stop the socket
153+ sigChan := make (chan os.Signal , 1 )
154+ signal .Notify (sigChan , os .Interrupt , syscall .SIGTERM , syscall .SIGQUIT )
155+ go func () {
156+ for sig := range sigChan {
157+ log .Printf ("received signal '%v', exiting\n " , sig )
158+
159+ c .Close ()
160+ resp .Body .Close ()
161+ close (eventChan )
162+ os .Exit (0 )
163+ }
164+ }()
165+
166+ dec := json .NewDecoder (resp .Body )
167+ for {
168+ var event * Event
169+ if err := dec .Decode (& event ); err != nil || event .Status == "" {
170+ if err == io .EOF || event .Status == "" {
171+ log .Printf ("connection closed" )
172+ break
173+ }
174+ log .Printf ("cannot decode json: %s\n " , err )
175+ c .Close ()
176+ resp .Body .Close ()
171177 break
172178 }
173- log . Printf ( "cannot decode json: %s \n " , err )
174- goto restart
179+
180+ eventChan <- event
175181 }
176- eventChan <- event
177182 }
178- log .Printf ("closing event channel\n " )
179183 }()
180184 return eventChan
181185}
0 commit comments