{"action":"created","comment":{"url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/comments/79498899","id":79498899,"diff_hunk":"@@ -0,0 +1,176 @@\n+redis = require 'narrows/util/redis'\n+_ = require 'underscore'\n+{conf} = require 'rainier/conf'\n+timeInterval = conf.get 'query_interval'\n+###\n+This script will get data from redis and prepare JSON from it which can be consumed by\n+Vizceral to display pipeline data flow. This script will consider every topic as node\n+@author manish@moz.com (Manish Ranjan)\n+###\n+\n+module.exports = class VizJsonNode\n+  @TRACKING_KEY_PREFIX: 'narrows'\n+\n+  # This method prepares the JSON and sends it as return as and when requested\n+  @getJSON: (callback) ->\n+    lastSavedTime = Date.now() - timeInterval\n+    redis.getClient().zrangebyscore 'narrows-tracing', lastSavedTime, Date.now(), (err, allData) ->\n+      return callback err if err\n+\n+      [success, errors] = filterDataAndError allData\n+      mapOfTopicToCount = getErrorMapOfTopicToCount errors\n+      traceIdToTopicChannel = getTopicToChannelbyId success\n+      reducedMap = reduceMap traceIdToTopicChannel\n+      srcToTarget = getSourceToTarget reducedMap\n+      entryhead = findEntryHeads srcToTarget\n+      nodeList = getNodeList srcToTarget\n+      srcToTargetList = getSourceToTargetList srcToTarget, entryhead, mapOfTopicToCount\n+      output = prepareJSON nodeList, srcToTargetList\n+      callback null, JSON.stringify output\n+\n+  # this function filters data and error data in two different lists based on the length of incoming data\n+  filterDataAndError = (allData) ->\n+    ###\n+    Two kind of data 1. success 2. error\n+    1.<Tsource:Csource|Tdestination| rev-id-| Date.now() to keep it unique\n+    2.<rev-id| Tdestination:Cdestination | Date.now()>\n+    ###\n+    errors = []\n+    success = []\n+    for key, value of allData\n+      {length} = value.split('|')\n+      if length is 3 then errors.push value else success.push value\n+    [success, errors]\n+\n+  # this function gets the no of time error occured and creates a map based on that\n+  getErrorMapOfTopicToCount = (errorData)->\n+    errorNodeMap = {}\n+    for key, value in errorData\n+      node = key.split('|')[1].split(':')[0]\n+      errorNodeMap[node] or= 0\n+      errorNodeMap[node]++\n+    errorNodeMap\n+\n+  # This function creates a  map of key(traceId=revNo + Date.Now()) to the topic channel communication\n+  getTopicToChannelbyId = (success) ->\n+    traceIdToTopicChannel = {}\n+    #for value, index in success\n+    for key, value in success\n+      dataArray = key.split('|')[0..1].join('>')\n+      key_trace = key.split('|')[2]\n+      if key_trace of traceIdToTopicChannel\n+        traceIdToTopicChannel[key_trace] = traceIdToTopicChannel[key_trace] + \",\" + dataArray\n+      else\n+        traceIdToTopicChannel[key_trace] = dataArray\n+    traceIdToTopicChannel\n+\n+  # This function reduces the map by bringing in count for repetition\n+  reduceMap = (traceIdToTopicChannel) ->\n+    reducedMap = {}\n+    for key, value of traceIdToTopicChannel\n+      arrayOfTC = value.split(',')\n+      for item, index in arrayOfTC\n+        if arrayOfTC[index] of reducedMap\n+          reducedMap[item]++\n+        else\n+          reducedMap[item] = 1\n+    reducedMap\n+\n+  # This function prepares output list src>targer>#count\n+  getSourceToTarget = (reducedMap) ->\n+    size = _.keys(reducedMap).length\n+    outputList = []\n+    for value, index of reducedMap\n+      [src, trg] = value.split('>')\n+      source = src.split(':')[0]\n+      target = trg\n+      outputList.push(source+'>'+target+'#'+reducedMap[value])\n+    outputList\n+\n+  # Ths function prepares the nodeList for adding to JSON finally\n+  getNodeList = (srcToTarget) ->\n+    resultNodes = []\n+    resultNodes.push('narrows')\n+    for row in srcToTarget\n+      [first, rest] = row.split('>')\n+      if first not in resultNodes\n+        resultNodes.push(first)\n+      if rest.split('#')[0] not in resultNodes\n+        resultNodes.push(rest.split('#')[0])\n+    for node in resultNodes\n+      name: node\n+      class: 'normal'\n+\n+  # Ths function prepares the source to target mapping for adding to JSON finally\n+  getSourceToTargetList = (srcToTarget, entryhead, mapOfTopicToCount) ->\n+    mapOfEntryAndVal = {}\n+    srcToTargetList = for index, node of srcToTarget\n+      val = node.split('>')\n+      targetNode = val[1].split('#')\n+      if val[0] in entryhead\n+        if val[0] of mapOfEntryAndVal\n+          count = mapOfEntryAndVal[val[0]] + targetNode[1] * 100\n+          mapOfEntryAndVal[val[0]] = count\n+        else\n+          mapOfEntryAndVal[val[0]] = targetNode[1] * 100\n+      source: val[0]\n+      target: targetNode[0]\n+      metrics:\n+        danger: mapOfTopicToCount[targetNode[0]] * 100\n+        normal: targetNode[1] * 100\n+      class: 'normal'\n+    srcToTargetEntry = for node, index of mapOfEntryAndVal\n+      source: 'narrows'\n+      target: node\n+      metrics:\n+        danger: 0\n+        normal: index\n+    srcToTargetList.concat(srcToTargetEntry)\n+\n+  # This method find all the entrypoint narrows\n+  findEntryHeads = (srcToTarget) ->\n+    endNodesList = []\n+    startNodeList = []\n+    for index, node of srcToTarget\n+      if node in endNodesList\n+        continue\n+      else\n+        endNodesList.push(node.split('>')[1].split('#')[0])\n+    for index, node of srcToTarget\n+      tempNode = node.split('>')[0]","path":"src/tracing/vizceral_json_file_creator_nodes.coffee","position":140,"original_position":140,"commit_id":"2c77e1f751a61fbefa27cdcd7bf96faa4691db1e","original_commit_id":"2c77e1f751a61fbefa27cdcd7bf96faa4691db1e","user":{"login":"wescarr","id":69679,"avatar_url":"https://avatars.githubusercontent.com/u/69679?v=3","gravatar_id":"","url":"https://api.github.com/users/wescarr","html_url":"https://github.com/wescarr","followers_url":"https://api.github.com/users/wescarr/followers","following_url":"https://api.github.com/users/wescarr/following{/other_user}","gists_url":"https://api.github.com/users/wescarr/gists{/gist_id}","starred_url":"https://api.github.com/users/wescarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wescarr/subscriptions","organizations_url":"https://api.github.com/users/wescarr/orgs","repos_url":"https://api.github.com/users/wescarr/repos","events_url":"https://api.github.com/users/wescarr/events{/privacy}","received_events_url":"https://api.github.com/users/wescarr/received_events","type":"User","site_admin":false},"body":"You are splitting `node` multiple times here.","created_at":"2016-09-19T21:58:59Z","updated_at":"2016-09-19T22:00:59Z","html_url":"https://github.com/seomoz/narrows-tracing/pull/1#discussion_r79498899","pull_request_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/comments/79498899"},"html":{"href":"https://github.com/seomoz/narrows-tracing/pull/1#discussion_r79498899"},"pull_request":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1","id":85487073,"html_url":"https://github.com/seomoz/narrows-tracing/pull/1","diff_url":"https://github.com/seomoz/narrows-tracing/pull/1.diff","patch_url":"https://github.com/seomoz/narrows-tracing/pull/1.patch","issue_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/1","number":1,"state":"open","locked":false,"title":"Added method which can request a coffee server for JSON response","user":{"login":"ranjanmanish","id":1888190,"avatar_url":"https://avatars.githubusercontent.com/u/1888190?v=3","gravatar_id":"","url":"https://api.github.com/users/ranjanmanish","html_url":"https://github.com/ranjanmanish","followers_url":"https://api.github.com/users/ranjanmanish/followers","following_url":"https://api.github.com/users/ranjanmanish/following{/other_user}","gists_url":"https://api.github.com/users/ranjanmanish/gists{/gist_id}","starred_url":"https://api.github.com/users/ranjanmanish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ranjanmanish/subscriptions","organizations_url":"https://api.github.com/users/ranjanmanish/orgs","repos_url":"https://api.github.com/users/ranjanmanish/repos","events_url":"https://api.github.com/users/ranjanmanish/events{/privacy}","received_events_url":"https://api.github.com/users/ranjanmanish/received_events","type":"User","site_admin":false},"body":"Changes at vizceral end for it to query the server for new data","created_at":"2016-09-15T21:51:15Z","updated_at":"2016-09-19T22:00:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a314e946396c0d1367e5feb01c24f3395069b3d6","assignee":{"login":"wescarr","id":69679,"avatar_url":"https://avatars.githubusercontent.com/u/69679?v=3","gravatar_id":"","url":"https://api.github.com/users/wescarr","html_url":"https://github.com/wescarr","followers_url":"https://api.github.com/users/wescarr/followers","following_url":"https://api.github.com/users/wescarr/following{/other_user}","gists_url":"https://api.github.com/users/wescarr/gists{/gist_id}","starred_url":"https://api.github.com/users/wescarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wescarr/subscriptions","organizations_url":"https://api.github.com/users/wescarr/orgs","repos_url":"https://api.github.com/users/wescarr/repos","events_url":"https://api.github.com/users/wescarr/events{/privacy}","received_events_url":"https://api.github.com/users/wescarr/received_events","type":"User","site_admin":false},"assignees":[{"login":"wescarr","id":69679,"avatar_url":"https://avatars.githubusercontent.com/u/69679?v=3","gravatar_id":"","url":"https://api.github.com/users/wescarr","html_url":"https://github.com/wescarr","followers_url":"https://api.github.com/users/wescarr/followers","following_url":"https://api.github.com/users/wescarr/following{/other_user}","gists_url":"https://api.github.com/users/wescarr/gists{/gist_id}","starred_url":"https://api.github.com/users/wescarr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wescarr/subscriptions","organizations_url":"https://api.github.com/users/wescarr/orgs","repos_url":"https://api.github.com/users/wescarr/repos","events_url":"https://api.github.com/users/wescarr/events{/privacy}","received_events_url":"https://api.github.com/users/wescarr/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1/commits","review_comments_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1/comments","review_comment_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/comments{/number}","comments_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/1/comments","statuses_url":"https://api.github.com/repos/seomoz/narrows-tracing/statuses/2c77e1f751a61fbefa27cdcd7bf96faa4691db1e","head":{"label":"seomoz:manish/tracing","ref":"manish/tracing","sha":"2c77e1f751a61fbefa27cdcd7bf96faa4691db1e","user":{"login":"seomoz","id":104895,"avatar_url":"https://avatars.githubusercontent.com/u/104895?v=3","gravatar_id":"","url":"https://api.github.com/users/seomoz","html_url":"https://github.com/seomoz","followers_url":"https://api.github.com/users/seomoz/followers","following_url":"https://api.github.com/users/seomoz/following{/other_user}","gists_url":"https://api.github.com/users/seomoz/gists{/gist_id}","starred_url":"https://api.github.com/users/seomoz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seomoz/subscriptions","organizations_url":"https://api.github.com/users/seomoz/orgs","repos_url":"https://api.github.com/users/seomoz/repos","events_url":"https://api.github.com/users/seomoz/events{/privacy}","received_events_url":"https://api.github.com/users/seomoz/received_events","type":"Organization","site_admin":false},"repo":{"id":68229794,"name":"narrows-tracing","full_name":"seomoz/narrows-tracing","owner":{"login":"seomoz","id":104895,"avatar_url":"https://avatars.githubusercontent.com/u/104895?v=3","gravatar_id":"","url":"https://api.github.com/users/seomoz","html_url":"https://github.com/seomoz","followers_url":"https://api.github.com/users/seomoz/followers","following_url":"https://api.github.com/users/seomoz/following{/other_user}","gists_url":"https://api.github.com/users/seomoz/gists{/gist_id}","starred_url":"https://api.github.com/users/seomoz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seomoz/subscriptions","organizations_url":"https://api.github.com/users/seomoz/orgs","repos_url":"https://api.github.com/users/seomoz/repos","events_url":"https://api.github.com/users/seomoz/events{/privacy}","received_events_url":"https://api.github.com/users/seomoz/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/seomoz/narrows-tracing","description":"Example Vizceral app","fork":true,"url":"https://api.github.com/repos/seomoz/narrows-tracing","forks_url":"https://api.github.com/repos/seomoz/narrows-tracing/forks","keys_url":"https://api.github.com/repos/seomoz/narrows-tracing/keys{/key_id}","collaborators_url":"https://api.github.com/repos/seomoz/narrows-tracing/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/seomoz/narrows-tracing/teams","hooks_url":"https://api.github.com/repos/seomoz/narrows-tracing/hooks","issue_events_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/events{/number}","events_url":"https://api.github.com/repos/seomoz/narrows-tracing/events","assignees_url":"https://api.github.com/repos/seomoz/narrows-tracing/assignees{/user}","branches_url":"https://api.github.com/repos/seomoz/narrows-tracing/branches{/branch}","tags_url":"https://api.github.com/repos/seomoz/narrows-tracing/tags","blobs_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/refs{/sha}","trees_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/trees{/sha}","statuses_url":"https://api.github.com/repos/seomoz/narrows-tracing/statuses/{sha}","languages_url":"https://api.github.com/repos/seomoz/narrows-tracing/languages","stargazers_url":"https://api.github.com/repos/seomoz/narrows-tracing/stargazers","contributors_url":"https://api.github.com/repos/seomoz/narrows-tracing/contributors","subscribers_url":"https://api.github.com/repos/seomoz/narrows-tracing/subscribers","subscription_url":"https://api.github.com/repos/seomoz/narrows-tracing/subscription","commits_url":"https://api.github.com/repos/seomoz/narrows-tracing/commits{/sha}","git_commits_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/commits{/sha}","comments_url":"https://api.github.com/repos/seomoz/narrows-tracing/comments{/number}","issue_comment_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/comments{/number}","contents_url":"https://api.github.com/repos/seomoz/narrows-tracing/contents/{+path}","compare_url":"https://api.github.com/repos/seomoz/narrows-tracing/compare/{base}...{head}","merges_url":"https://api.github.com/repos/seomoz/narrows-tracing/merges","archive_url":"https://api.github.com/repos/seomoz/narrows-tracing/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/seomoz/narrows-tracing/downloads","issues_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues{/number}","pulls_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls{/number}","milestones_url":"https://api.github.com/repos/seomoz/narrows-tracing/milestones{/number}","notifications_url":"https://api.github.com/repos/seomoz/narrows-tracing/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/seomoz/narrows-tracing/labels{/name}","releases_url":"https://api.github.com/repos/seomoz/narrows-tracing/releases{/id}","deployments_url":"https://api.github.com/repos/seomoz/narrows-tracing/deployments","created_at":"2016-09-14T17:53:51Z","updated_at":"2016-09-17T00:37:59Z","pushed_at":"2016-09-17T00:04:46Z","git_url":"git://github.com/seomoz/narrows-tracing.git","ssh_url":"git@github.com:seomoz/narrows-tracing.git","clone_url":"https://github.com/seomoz/narrows-tracing.git","svn_url":"https://github.com/seomoz/narrows-tracing","homepage":null,"size":91,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"seomoz:master","ref":"master","sha":"f125a2f8c82b7d76062d12162a71b1e5caba3e3b","user":{"login":"seomoz","id":104895,"avatar_url":"https://avatars.githubusercontent.com/u/104895?v=3","gravatar_id":"","url":"https://api.github.com/users/seomoz","html_url":"https://github.com/seomoz","followers_url":"https://api.github.com/users/seomoz/followers","following_url":"https://api.github.com/users/seomoz/following{/other_user}","gists_url":"https://api.github.com/users/seomoz/gists{/gist_id}","starred_url":"https://api.github.com/users/seomoz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seomoz/subscriptions","organizations_url":"https://api.github.com/users/seomoz/orgs","repos_url":"https://api.github.com/users/seomoz/repos","events_url":"https://api.github.com/users/seomoz/events{/privacy}","received_events_url":"https://api.github.com/users/seomoz/received_events","type":"Organization","site_admin":false},"repo":{"id":68229794,"name":"narrows-tracing","full_name":"seomoz/narrows-tracing","owner":{"login":"seomoz","id":104895,"avatar_url":"https://avatars.githubusercontent.com/u/104895?v=3","gravatar_id":"","url":"https://api.github.com/users/seomoz","html_url":"https://github.com/seomoz","followers_url":"https://api.github.com/users/seomoz/followers","following_url":"https://api.github.com/users/seomoz/following{/other_user}","gists_url":"https://api.github.com/users/seomoz/gists{/gist_id}","starred_url":"https://api.github.com/users/seomoz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seomoz/subscriptions","organizations_url":"https://api.github.com/users/seomoz/orgs","repos_url":"https://api.github.com/users/seomoz/repos","events_url":"https://api.github.com/users/seomoz/events{/privacy}","received_events_url":"https://api.github.com/users/seomoz/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/seomoz/narrows-tracing","description":"Example Vizceral app","fork":true,"url":"https://api.github.com/repos/seomoz/narrows-tracing","forks_url":"https://api.github.com/repos/seomoz/narrows-tracing/forks","keys_url":"https://api.github.com/repos/seomoz/narrows-tracing/keys{/key_id}","collaborators_url":"https://api.github.com/repos/seomoz/narrows-tracing/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/seomoz/narrows-tracing/teams","hooks_url":"https://api.github.com/repos/seomoz/narrows-tracing/hooks","issue_events_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/events{/number}","events_url":"https://api.github.com/repos/seomoz/narrows-tracing/events","assignees_url":"https://api.github.com/repos/seomoz/narrows-tracing/assignees{/user}","branches_url":"https://api.github.com/repos/seomoz/narrows-tracing/branches{/branch}","tags_url":"https://api.github.com/repos/seomoz/narrows-tracing/tags","blobs_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/refs{/sha}","trees_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/trees{/sha}","statuses_url":"https://api.github.com/repos/seomoz/narrows-tracing/statuses/{sha}","languages_url":"https://api.github.com/repos/seomoz/narrows-tracing/languages","stargazers_url":"https://api.github.com/repos/seomoz/narrows-tracing/stargazers","contributors_url":"https://api.github.com/repos/seomoz/narrows-tracing/contributors","subscribers_url":"https://api.github.com/repos/seomoz/narrows-tracing/subscribers","subscription_url":"https://api.github.com/repos/seomoz/narrows-tracing/subscription","commits_url":"https://api.github.com/repos/seomoz/narrows-tracing/commits{/sha}","git_commits_url":"https://api.github.com/repos/seomoz/narrows-tracing/git/commits{/sha}","comments_url":"https://api.github.com/repos/seomoz/narrows-tracing/comments{/number}","issue_comment_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues/comments{/number}","contents_url":"https://api.github.com/repos/seomoz/narrows-tracing/contents/{+path}","compare_url":"https://api.github.com/repos/seomoz/narrows-tracing/compare/{base}...{head}","merges_url":"https://api.github.com/repos/seomoz/narrows-tracing/merges","archive_url":"https://api.github.com/repos/seomoz/narrows-tracing/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/seomoz/narrows-tracing/downloads","issues_url":"https://api.github.com/repos/seomoz/narrows-tracing/issues{/number}","pulls_url":"https://api.github.com/repos/seomoz/narrows-tracing/pulls{/number}","milestones_url":"https://api.github.com/repos/seomoz/narrows-tracing/milestones{/number}","notifications_url":"https://api.github.com/repos/seomoz/narrows-tracing/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/seomoz/narrows-tracing/labels{/name}","releases_url":"https://api.github.com/repos/seomoz/narrows-tracing/releases{/id}","deployments_url":"https://api.github.com/repos/seomoz/narrows-tracing/deployments","created_at":"2016-09-14T17:53:51Z","updated_at":"2016-09-17T00:37:59Z","pushed_at":"2016-09-17T00:04:46Z","git_url":"git://github.com/seomoz/narrows-tracing.git","ssh_url":"git@github.com:seomoz/narrows-tracing.git","clone_url":"https://github.com/seomoz/narrows-tracing.git","svn_url":"https://github.com/seomoz/narrows-tracing","homepage":null,"size":91,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1"},"html":{"href":"https://github.com/seomoz/narrows-tracing/pull/1"},"issue":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/issues/1"},"comments":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/seomoz/narrows-tracing/statuses/2c77e1f751a61fbefa27cdcd7bf96faa4691db1e"}}}}
{"actor":{"display_login":"wescarr"}}