{"action":"created","issue":{"url":"https://api.github.com/repos/hammerlab/cycledash/issues/513","labels_url":"https://api.github.com/repos/hammerlab/cycledash/issues/513/labels{/name}","comments_url":"https://api.github.com/repos/hammerlab/cycledash/issues/513/comments","events_url":"https://api.github.com/repos/hammerlab/cycledash/issues/513/events","html_url":"https://github.com/hammerlab/cycledash/pull/513","id":59749868,"number":513,"title":"Show worker status","user":{"login":"danvk","id":98301,"avatar_url":"https://avatars.githubusercontent.com/u/98301?v=3","gravatar_id":"","url":"https://api.github.com/users/danvk","html_url":"https://github.com/danvk","followers_url":"https://api.github.com/users/danvk/followers","following_url":"https://api.github.com/users/danvk/following{/other_user}","gists_url":"https://api.github.com/users/danvk/gists{/gist_id}","starred_url":"https://api.github.com/users/danvk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danvk/subscriptions","organizations_url":"https://api.github.com/users/danvk/orgs","repos_url":"https://api.github.com/users/danvk/repos","events_url":"https://api.github.com/users/danvk/events{/privacy}","received_events_url":"https://api.github.com/users/danvk/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"ihodes","id":167803,"avatar_url":"https://avatars.githubusercontent.com/u/167803?v=3","gravatar_id":"","url":"https://api.github.com/users/ihodes","html_url":"https://github.com/ihodes","followers_url":"https://api.github.com/users/ihodes/followers","following_url":"https://api.github.com/users/ihodes/following{/other_user}","gists_url":"https://api.github.com/users/ihodes/gists{/gist_id}","starred_url":"https://api.github.com/users/ihodes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ihodes/subscriptions","organizations_url":"https://api.github.com/users/ihodes/orgs","repos_url":"https://api.github.com/users/ihodes/repos","events_url":"https://api.github.com/users/ihodes/events{/privacy}","received_events_url":"https://api.github.com/users/ihodes/received_events","type":"User","site_admin":false},"milestone":null,"comments":4,"created_at":"2015-03-04T04:47:37Z","updated_at":"2015-03-04T21:47:55Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/hammerlab/cycledash/pulls/513","html_url":"https://github.com/hammerlab/cycledash/pull/513","diff_url":"https://github.com/hammerlab/cycledash/pull/513.diff","patch_url":"https://github.com/hammerlab/cycledash/pull/513.patch"},"body":"Fixes #280 \r\nFixes #223 \r\nImproves #441\r\nFixes #440\r\nFixes #362\r\n\r\nThe general strategy is to maintain a list of Celery task_ids for each run. Celery does maintain its own list of task_ids, but there's no way to map these back to runs. So we need to maintain that mapping ourselves.\r\n\r\nWhenever you load the /runs page, CycleDash checks in on all the tasks which are in a non-terminal state, updating the `task_states` table. One source of messiness in this change is that a run doesn't have an ID yet when the `genotype_annotator` worker is kicked off. So `run_id|vcf_path` has to be used as the key.\r\n\r\nTo get more insight into a failure, you can click through to see a stack trace. This could be extended to include stats like how long the task ran for.\r\n\r\nHere's what it looks like:\r\n\r\nBadges for worker state (should be icons):\r\n![screen shot 2015-03-03 at 10 51 41 pm](https://cloud.githubusercontent.com/assets/98301/6478346/0b405aa8-c1ff-11e4-9440-7f91ca37c35c.png)\r\n\r\nUI on click:\r\n![screen shot 2015-03-03 at 11 43 41 pm](https://cloud.githubusercontent.com/assets/98301/6478350/282dc678-c1ff-11e4-9572-3c298026e005.png)\r\n\r\nAnd the new `/tasks` page, which shows you a stack trace for failures!\r\n![screen shot 2015-03-04 at 1 55 05 pm](https://cloud.githubusercontent.com/assets/98301/6490684/19802004-c276-11e4-9648-b0e35b6b7f2e.png)\r\n\r\nFrom here you can delete the task failure (to get it off the /runs page).\r\n\r\n<!-- Reviewable:start -->\r\n[<img src=\"https://reviewable.io/review_button.png\" height=40 alt=\"Review on Reviewable\"/>](https://reviewable.io/reviews/hammerlab/cycledash/513)\r\n<!-- Reviewable:end -->\r\n"},"comment":{"url":"https://api.github.com/repos/hammerlab/cycledash/issues/comments/77256689","html_url":"https://github.com/hammerlab/cycledash/pull/513#issuecomment-77256689","issue_url":"https://api.github.com/repos/hammerlab/cycledash/issues/513","id":77256689,"user":{"login":"ihodes","id":167803,"avatar_url":"https://avatars.githubusercontent.com/u/167803?v=3","gravatar_id":"","url":"https://api.github.com/users/ihodes","html_url":"https://github.com/ihodes","followers_url":"https://api.github.com/users/ihodes/followers","following_url":"https://api.github.com/users/ihodes/following{/other_user}","gists_url":"https://api.github.com/users/ihodes/gists{/gist_id}","starred_url":"https://api.github.com/users/ihodes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ihodes/subscriptions","organizations_url":"https://api.github.com/users/ihodes/orgs","repos_url":"https://api.github.com/users/ihodes/repos","events_url":"https://api.github.com/users/ihodes/events{/privacy}","received_events_url":"https://api.github.com/users/ihodes/received_events","type":"User","site_admin":false},"created_at":"2015-03-04T21:47:55Z","updated_at":"2015-03-04T21:47:55Z","body":"Comments from the [review on Reviewable.io](https://reviewable.io:443/reviews/hammerlab/cycledash/513)\n\n\n\n---\n\nAs far as I can remember, there's no good reason.\n\n---\n\n\n\n<!-- Sent from Reviewable.io -->\n"}}