     @capistranoTask = "jobs:restart"
 
   createTask: (host) ->
-    task = super(host)
-    task.addCustomClass("task-job-server")
-    task
+    new JobServerRestartTaskView(@$container, host)
 
   parse: (parser) ->
     parser.eachMessage (log) =>
       if match = log.output.match(/sv-multi sending graceful_quit to (\d+) services/)
         @getTask(log.host).update
           numLights: match[1]
-      else if match = log.output.match(/ok: run: [\-\w\d]+: \(pid \d+\)/)
+      else if match = log.output.match(/ok: run: ([\-\w\d]+): \(pid \d+\)/)
         task = @getTask(log.host)
-        task.update
-          numDone: task.numDone + 1
+        task.addStatus("up", match[1])
+        task.update {}
+      else if match = log.output.match(/Timeout: ([\-\w\d]+) still running after (\d+) seconds|timeout: run: ([\-\w\d]+): \(pid \d+\) (\d+)s/)
+        task = @getTask(log.host)
+        task.addStatus("partial", "timeout (#{match[2]||match[4]}s): #{match[1]||match[3]}")
+        task.update {}
     null
 
 
-class ContainerView
+class LightsTaskView
   TEMPLATE = $.trim """
     <div class="task-lights">
       <span class="task-lights-text">

  appendTo: (@$container) ->

  createTask: (host) ->
    new ContainerView(@$container, host)

  getTask: (host) ->
    @tasks[host] ||= @createTask(host)

        return false
    toInsert.appendTo(@$container) unless inserted

  genBoxes: ->
    boxes = document.createDocumentFragment();
    for i in [1..(+@numLights)]
      status = if i <= @numDone
