4747 ErrWebhookKeyDoesNotExist = errors .New ("webhook key does not exist" )
4848 logger = logrus .New ()
4949 store = sessions .NewCookieStore ([]byte (storeKey ))
50+ httpTimeout = time .Duration (1 * time .Second )
5051)
5152
5253type (
@@ -65,6 +66,10 @@ type (
6566 }
6667)
6768
69+ func dialTimeout (network , addr string ) (net.Conn , error ) {
70+ return net .DialTimeout (network , addr , httpTimeout )
71+ }
72+
6873func NewManager (addr string , database string , authKey string , version string , disableUsageInfo bool ) (* Manager , error ) {
6974 session , err := r .Connect (r.ConnectOpts {
7075 Address : addr ,
@@ -169,9 +174,8 @@ func (m *Manager) init() []*shipyard.Engine {
169174 m .clusterManager = clusterManager
170175 // start extension health check
171176 go m .extensionHealthCheck ()
172- // FIXME: these have been temporarily disabled due to performance issues
173- //// start engine check
174- //go m.engineCheck()
177+ // start engine check
178+ go m .engineCheck ()
175179 // anonymous usage info
176180 go m .usageReport ()
177181 return engines
@@ -280,7 +284,10 @@ func (m *Manager) engineCheck() {
280284 for _ , eng := range engs {
281285 health := & shipyard.Health {}
282286 start_time := time .Now ()
283- stat , _ := m .pingEngine (eng .Engine .Addr )
287+ stat , err := m .pingEngine (eng .Engine .Addr )
288+ if err != nil {
289+ logger .Warnf ("unable to ping engine: %s" , err )
290+ }
284291 if stat != 200 {
285292 health .Status = EngineHealthDown
286293 } else {
@@ -292,18 +299,27 @@ func (m *Manager) engineCheck() {
292299 version , err := eng .Engine .Version ()
293300 if err != nil {
294301 logger .Warnf ("unable to detect docker version: %s" , err )
295- return
296302 }
297- eng .DockerVersion = version .Version
303+ ver := "unknown"
304+ if version != nil {
305+ ver = version .Version
306+ }
307+ eng .DockerVersion = ver
298308 m .SaveEngine (eng )
299309 }
300310 }
301311 }
302312}
303313
304314func (m * Manager ) pingEngine (addr string ) (status int , err error ) {
315+ transport := http.Transport {
316+ Dial : dialTimeout ,
317+ }
318+ client := http.Client {
319+ Transport : & transport ,
320+ }
305321 uri := fmt .Sprintf ("%s/_ping" , addr )
306- resp , err := http .Get (uri )
322+ resp , err := client .Get (uri )
307323 if err != nil {
308324 return 0 , err
309325 } else {
0 commit comments