       @status = if speedCheck and @getResponseTime() > slownessIndicator then "slow" else "success"
       clearTimeout @pingTimeout
       @pingTimeout = null
-      @emit "healthCheckCompleted"
+      @emit @completeEvent
+
+  startCheck: ->
+    @status = "waiting"
+    @startTime = Date.now()
+    @setPingTimeout @completeEvent
 
   reset: ->
     @status = "waiting"


  run: ->
    @emit "healthCheckStarted"
    @status = "waiting"
    @startTime = Date.now()
    @setPingTimeout()
    @cb @finish.bind(this)
    return @forceComplete "undefined callback"  unless troubleshoot

  setPingTimeout: ->
    @pingTimeout = setTimeout =>
      @status = "fail"
      @emit "healthCheckCompleted"
    , @getOptions().timeout

  finish: (data)->

    warn err  if err
    @status = "fail"
    @emit "healthCheckCompleted"

  recover: ->
    @completeEvent = "recoveryCompleted"
    @startCheck()
    @emit "recoveryStarted"
    {recover} = @getOptions()
    recover @finish.bind(this)

  canBeRecovered: ->
    @getOptions().recover?

