{"action":"created","comment":{"url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/comments/76484036","id":76484036,"diff_hunk":"@@ -0,0 +1,106 @@\n+OpenWhisk supports an open API, where any user can expose an event producer service as a **feed** in a **package**.   This section describes architectural and implementation options for providing your own feed.\n+\n+This material is intended for advanced OpenWhisk users who intend to publish their own feeds.  Most OpenWhisk users can safely skip this section.\n+\n+# Feed Architecture\n+\n+There are at least 3 architectural patterns for creating a feed: **Hooks**, **Polling** and **Connections**.\n+\n+## Hooks\n+In the *Hooks* pattern, we set up a feed using a [webhook](https://en.wikipedia.org/wiki/Webhook) facility exposed by another service.   In this strategy, we configure a webhook on an external service to POST directly to a URL to fire a trigger.  This is by far the easiest and most attractive option for implementing low-frequency feeds.\n+\n+<!-- The github feed is implemented using webhooks.  Put a link here when we have the open repo ready -->\n+\n+## Polling\n+In the \"Polling\" pattern, we arrange for an OpenWhisk *action* to poll an endpoint periodically to fetch new data.\n+This pattern is relatively easy to build, but the frequency of events will\n+of course be limited by the polling interval.\n+\n+## Connections\n+In the \"Connections\"  pattern, we stand up a separate service somewhere that maintains a persistent connection to a feed source.    The connection based implementation might interact with a service endpoint via long polling, or to set up a push notification.\n+\n+<!-- Our cloudant changes feed is connection based.  Put a link here to\n+an open repo -->\n+\n+# Difference between Feed and Trigger\n+\n+Feeds and triggers are closely related,\n+but technically distinct concepts.   \n+\n+- OpenWhisk processes **events** which flow into the system.\n+\n+- A **trigger** is technically a name for a class of events.   Each event belongs to exactly one trigger; by analogy, a trigger resembles a *topic* in topic-based pub-sub\n+systems.    A **rule** *T -> A* means \"whenever an event from trigger *T* arrives, invoke action *A* with the trigger payload.\n+\n+- A  **feed** is a stream of events which all belong to some trigger *T*.    A feed is controlled by a **feed action** which handles creating, deleting, pausing, and resuming the stream of events which comprise a feed.    The feed action typically interacts with external services which produce the events, via a REST API that manages notifications.\n+\n+#  Implementing Feed Actions\n+\n+The *feed action* is a normal OpenWhisk *action*, but it should accept the following parameters:\n+* **lifecycleEvent**: one of 'CREATE', 'DELETE', 'PAUSE', or 'UNPAUSE'\n+* **triggerName**: the fully-qualified name of the trigger which contains events produced from this feed.\n+* **authKey**: the Basic auth credentials of the OpenWhisk user who owns the trigger just mentioned\n+\n+The feed action can also accept any other parameters it needs to manage the feed.  For example the cloudant changes feed action expects to receive parameters including *'dbname'*, *'username'*, etc.\n+\n+When the user creates a trigger from tthe CLI with the **--feed** parameter, the system automatically invokes the feed action with the appropriate parameters.\n+\n+For example,assume the user has created a `mycloudant` binding for the `cloudant`\n+package with their username and password as bound parameters.  When the user issues the following command from the CLI,\n+\n+`wsk trigger create T --feed mycloudant/changes -p dbName myTable`\n+\n+then under the covers the system will do something equivalent to:\n+\n+`wsk action invoke mycloudant/changes -p lifecycleEvent CREATE -p triggerName T -p authKey <userAuthKey> -p password <password value from mycloudant binding> -p username <username value from mycloudant binding> -p dbName mytype`\n+\n+The feed action named *changes* takes these parameters, and is expected to take whatever action is necessary to set up a stream of events from Cloudant, with the appropriate configuration, directed to the trigger *T*.    \n+\n+For the Cloudant *changes* feed, the action happens to talk directly to a *cloudant trigger* service we've implemented with a connection-based architecture.   We'll discuss the other architectures below.\n+\n+A similar feed action protocol occurs for `wsk trigger delete`.    \n+\n+We have not yet implemented pause and unpause, but they will be similar.\n+\n+# Implementing Feeds with Hooks\n+\n+Setting up a feed via a hook is *by far* the easiest way to prototype a new feed,\n+if the even producer supports a webhook\n+facility.\n+\n+\n+With this method there is _no need_ to stand up any persistent service outside of OpenWhisk.  All feed management happens naturally though stateless OpenWhisk *feed actions*, which negotiate\n+directly with a third part webhook API.\n+\n+When invoked with `CREATE`, the feed action simply installs a webhook for some other service, asking the remote service to POST notifications to the appropriate `fireTrigger` URL in OpenWhisk.\n+\n+The webhook should be directed to send notifications to a URL such as:\n+`POST /namespaces/{namespace}/triggers/{triggerName}`\n+\n+# Implementing Feeds with Polling\n+\n+It is possible to set up an OpenWhisk *action* to poll a feed source entirely within OpenWhisk, without the need to stand up any persistent connections or external service.\n+\n+For feeds where a webhook is not available, but do not need high-volume or low latency response times, polling is an attractive option.\n+\n+To set up a polling-based feed, the feed action takes the following steps when called for `CREATE`:\n+1.   The feed action sets up a periodic trigger (*T*) with the desired frequency, using the `whisk.system/alarms` feed.\n+2.   The feed developer creates a `pollMyService' action which simply polls the remote service and returns any new events.\n+3.  The feed action sets up a *rule*\n+*T -> pollMyService*.\n+\n+That's it.   This procedure implements a polling-based trigger entirely using OpenWhisk actions, without any need for a separate service.\n+\n+# Implementing Feeds via Connections\n+\n+The previous 2 architectural choices are simple and easy to implement. However, if you want a high-performance feed, there is no substitute for persistent connections and long-polling or similar techniques.\n+\n+Since OpenWhisk actions are stateless,  an action cannot maintain a persistent connection to a third party. Instead, we are forced to stand up a separate service (outside of OpenWhisk) that runs all the time.   We call these *provider services*.  A provider service can maintain connections to third party event sources that support long polling or other connection-based notifications.   ","path":"docs/feeds.md","position":98,"original_position":98,"commit_id":"d11095e116628f933dcbffab4eaa4a80df5bbf3f","original_commit_id":"d11095e116628f933dcbffab4eaa4a80df5bbf3f","user":{"login":"csantanapr","id":1094878,"avatar_url":"https://avatars.githubusercontent.com/u/1094878?v=3","gravatar_id":"","url":"https://api.github.com/users/csantanapr","html_url":"https://github.com/csantanapr","followers_url":"https://api.github.com/users/csantanapr/followers","following_url":"https://api.github.com/users/csantanapr/following{/other_user}","gists_url":"https://api.github.com/users/csantanapr/gists{/gist_id}","starred_url":"https://api.github.com/users/csantanapr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/csantanapr/subscriptions","organizations_url":"https://api.github.com/users/csantanapr/orgs","repos_url":"https://api.github.com/users/csantanapr/repos","events_url":"https://api.github.com/users/csantanapr/events{/privacy}","received_events_url":"https://api.github.com/users/csantanapr/received_events","type":"User","site_admin":false},"body":"I would rephrase the `forced` portion\r\nWe are never forced, we just have trade offs :-)\r\n","created_at":"2016-08-26T20:35:58Z","updated_at":"2016-08-26T20:35:58Z","html_url":"https://github.com/openwhisk/openwhisk/pull/1109#discussion_r76484036","pull_request_url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109","_links":{"self":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/comments/76484036"},"html":{"href":"https://github.com/openwhisk/openwhisk/pull/1109#discussion_r76484036"},"pull_request":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109"}}},"pull_request":{"url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109","id":82383365,"html_url":"https://github.com/openwhisk/openwhisk/pull/1109","diff_url":"https://github.com/openwhisk/openwhisk/pull/1109.diff","patch_url":"https://github.com/openwhisk/openwhisk/pull/1109.patch","issue_url":"https://api.github.com/repos/openwhisk/openwhisk/issues/1109","number":1109,"state":"open","locked":false,"title":"Initial revision of documentation for how to create feeds.","user":{"login":"sjfink","id":1533170,"avatar_url":"https://avatars.githubusercontent.com/u/1533170?v=3","gravatar_id":"","url":"https://api.github.com/users/sjfink","html_url":"https://github.com/sjfink","followers_url":"https://api.github.com/users/sjfink/followers","following_url":"https://api.github.com/users/sjfink/following{/other_user}","gists_url":"https://api.github.com/users/sjfink/gists{/gist_id}","starred_url":"https://api.github.com/users/sjfink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjfink/subscriptions","organizations_url":"https://api.github.com/users/sjfink/orgs","repos_url":"https://api.github.com/users/sjfink/repos","events_url":"https://api.github.com/users/sjfink/events{/privacy}","received_events_url":"https://api.github.com/users/sjfink/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-08-23T15:09:15Z","updated_at":"2016-08-26T20:35:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"edac87df78b4522789a5acf390601ec64e40c38c","assignee":{"login":"csantanapr","id":1094878,"avatar_url":"https://avatars.githubusercontent.com/u/1094878?v=3","gravatar_id":"","url":"https://api.github.com/users/csantanapr","html_url":"https://github.com/csantanapr","followers_url":"https://api.github.com/users/csantanapr/followers","following_url":"https://api.github.com/users/csantanapr/following{/other_user}","gists_url":"https://api.github.com/users/csantanapr/gists{/gist_id}","starred_url":"https://api.github.com/users/csantanapr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/csantanapr/subscriptions","organizations_url":"https://api.github.com/users/csantanapr/orgs","repos_url":"https://api.github.com/users/csantanapr/repos","events_url":"https://api.github.com/users/csantanapr/events{/privacy}","received_events_url":"https://api.github.com/users/csantanapr/received_events","type":"User","site_admin":false},"assignees":[{"login":"csantanapr","id":1094878,"avatar_url":"https://avatars.githubusercontent.com/u/1094878?v=3","gravatar_id":"","url":"https://api.github.com/users/csantanapr","html_url":"https://github.com/csantanapr","followers_url":"https://api.github.com/users/csantanapr/followers","following_url":"https://api.github.com/users/csantanapr/following{/other_user}","gists_url":"https://api.github.com/users/csantanapr/gists{/gist_id}","starred_url":"https://api.github.com/users/csantanapr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/csantanapr/subscriptions","organizations_url":"https://api.github.com/users/csantanapr/orgs","repos_url":"https://api.github.com/users/csantanapr/repos","events_url":"https://api.github.com/users/csantanapr/events{/privacy}","received_events_url":"https://api.github.com/users/csantanapr/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109/commits","review_comments_url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109/comments","review_comment_url":"https://api.github.com/repos/openwhisk/openwhisk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openwhisk/openwhisk/issues/1109/comments","statuses_url":"https://api.github.com/repos/openwhisk/openwhisk/statuses/d11095e116628f933dcbffab4eaa4a80df5bbf3f","head":{"label":"sjfink:feeddocs","ref":"feeddocs","sha":"d11095e116628f933dcbffab4eaa4a80df5bbf3f","user":{"login":"sjfink","id":1533170,"avatar_url":"https://avatars.githubusercontent.com/u/1533170?v=3","gravatar_id":"","url":"https://api.github.com/users/sjfink","html_url":"https://github.com/sjfink","followers_url":"https://api.github.com/users/sjfink/followers","following_url":"https://api.github.com/users/sjfink/following{/other_user}","gists_url":"https://api.github.com/users/sjfink/gists{/gist_id}","starred_url":"https://api.github.com/users/sjfink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjfink/subscriptions","organizations_url":"https://api.github.com/users/sjfink/orgs","repos_url":"https://api.github.com/users/sjfink/repos","events_url":"https://api.github.com/users/sjfink/events{/privacy}","received_events_url":"https://api.github.com/users/sjfink/received_events","type":"User","site_admin":false},"repo":{"id":52339810,"name":"openwhisk","full_name":"sjfink/openwhisk","owner":{"login":"sjfink","id":1533170,"avatar_url":"https://avatars.githubusercontent.com/u/1533170?v=3","gravatar_id":"","url":"https://api.github.com/users/sjfink","html_url":"https://github.com/sjfink","followers_url":"https://api.github.com/users/sjfink/followers","following_url":"https://api.github.com/users/sjfink/following{/other_user}","gists_url":"https://api.github.com/users/sjfink/gists{/gist_id}","starred_url":"https://api.github.com/users/sjfink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjfink/subscriptions","organizations_url":"https://api.github.com/users/sjfink/orgs","repos_url":"https://api.github.com/users/sjfink/repos","events_url":"https://api.github.com/users/sjfink/events{/privacy}","received_events_url":"https://api.github.com/users/sjfink/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sjfink/openwhisk","description":"OpenWhisk is a cloud-first distributed event-based programming service.","fork":true,"url":"https://api.github.com/repos/sjfink/openwhisk","forks_url":"https://api.github.com/repos/sjfink/openwhisk/forks","keys_url":"https://api.github.com/repos/sjfink/openwhisk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sjfink/openwhisk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sjfink/openwhisk/teams","hooks_url":"https://api.github.com/repos/sjfink/openwhisk/hooks","issue_events_url":"https://api.github.com/repos/sjfink/openwhisk/issues/events{/number}","events_url":"https://api.github.com/repos/sjfink/openwhisk/events","assignees_url":"https://api.github.com/repos/sjfink/openwhisk/assignees{/user}","branches_url":"https://api.github.com/repos/sjfink/openwhisk/branches{/branch}","tags_url":"https://api.github.com/repos/sjfink/openwhisk/tags","blobs_url":"https://api.github.com/repos/sjfink/openwhisk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sjfink/openwhisk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sjfink/openwhisk/git/refs{/sha}","trees_url":"https://api.github.com/repos/sjfink/openwhisk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sjfink/openwhisk/statuses/{sha}","languages_url":"https://api.github.com/repos/sjfink/openwhisk/languages","stargazers_url":"https://api.github.com/repos/sjfink/openwhisk/stargazers","contributors_url":"https://api.github.com/repos/sjfink/openwhisk/contributors","subscribers_url":"https://api.github.com/repos/sjfink/openwhisk/subscribers","subscription_url":"https://api.github.com/repos/sjfink/openwhisk/subscription","commits_url":"https://api.github.com/repos/sjfink/openwhisk/commits{/sha}","git_commits_url":"https://api.github.com/repos/sjfink/openwhisk/git/commits{/sha}","comments_url":"https://api.github.com/repos/sjfink/openwhisk/comments{/number}","issue_comment_url":"https://api.github.com/repos/sjfink/openwhisk/issues/comments{/number}","contents_url":"https://api.github.com/repos/sjfink/openwhisk/contents/{+path}","compare_url":"https://api.github.com/repos/sjfink/openwhisk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sjfink/openwhisk/merges","archive_url":"https://api.github.com/repos/sjfink/openwhisk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sjfink/openwhisk/downloads","issues_url":"https://api.github.com/repos/sjfink/openwhisk/issues{/number}","pulls_url":"https://api.github.com/repos/sjfink/openwhisk/pulls{/number}","milestones_url":"https://api.github.com/repos/sjfink/openwhisk/milestones{/number}","notifications_url":"https://api.github.com/repos/sjfink/openwhisk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sjfink/openwhisk/labels{/name}","releases_url":"https://api.github.com/repos/sjfink/openwhisk/releases{/id}","deployments_url":"https://api.github.com/repos/sjfink/openwhisk/deployments","created_at":"2016-02-23T07:27:44Z","updated_at":"2016-02-23T07:27:46Z","pushed_at":"2016-08-25T21:02:35Z","git_url":"git://github.com/sjfink/openwhisk.git","ssh_url":"git@github.com:sjfink/openwhisk.git","clone_url":"https://github.com/sjfink/openwhisk.git","svn_url":"https://github.com/sjfink/openwhisk","homepage":"","size":42346,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openwhisk:master","ref":"master","sha":"e6beae9c04aed76119004bfb43d8e5cdc4672a38","user":{"login":"openwhisk","id":16900235,"avatar_url":"https://avatars.githubusercontent.com/u/16900235?v=3","gravatar_id":"","url":"https://api.github.com/users/openwhisk","html_url":"https://github.com/openwhisk","followers_url":"https://api.github.com/users/openwhisk/followers","following_url":"https://api.github.com/users/openwhisk/following{/other_user}","gists_url":"https://api.github.com/users/openwhisk/gists{/gist_id}","starred_url":"https://api.github.com/users/openwhisk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openwhisk/subscriptions","organizations_url":"https://api.github.com/users/openwhisk/orgs","repos_url":"https://api.github.com/users/openwhisk/repos","events_url":"https://api.github.com/users/openwhisk/events{/privacy}","received_events_url":"https://api.github.com/users/openwhisk/received_events","type":"Organization","site_admin":false},"repo":{"id":52039373,"name":"openwhisk","full_name":"openwhisk/openwhisk","owner":{"login":"openwhisk","id":16900235,"avatar_url":"https://avatars.githubusercontent.com/u/16900235?v=3","gravatar_id":"","url":"https://api.github.com/users/openwhisk","html_url":"https://github.com/openwhisk","followers_url":"https://api.github.com/users/openwhisk/followers","following_url":"https://api.github.com/users/openwhisk/following{/other_user}","gists_url":"https://api.github.com/users/openwhisk/gists{/gist_id}","starred_url":"https://api.github.com/users/openwhisk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openwhisk/subscriptions","organizations_url":"https://api.github.com/users/openwhisk/orgs","repos_url":"https://api.github.com/users/openwhisk/repos","events_url":"https://api.github.com/users/openwhisk/events{/privacy}","received_events_url":"https://api.github.com/users/openwhisk/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openwhisk/openwhisk","description":"OpenWhisk is a cloud-first distributed event-based programming service.","fork":false,"url":"https://api.github.com/repos/openwhisk/openwhisk","forks_url":"https://api.github.com/repos/openwhisk/openwhisk/forks","keys_url":"https://api.github.com/repos/openwhisk/openwhisk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openwhisk/openwhisk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openwhisk/openwhisk/teams","hooks_url":"https://api.github.com/repos/openwhisk/openwhisk/hooks","issue_events_url":"https://api.github.com/repos/openwhisk/openwhisk/issues/events{/number}","events_url":"https://api.github.com/repos/openwhisk/openwhisk/events","assignees_url":"https://api.github.com/repos/openwhisk/openwhisk/assignees{/user}","branches_url":"https://api.github.com/repos/openwhisk/openwhisk/branches{/branch}","tags_url":"https://api.github.com/repos/openwhisk/openwhisk/tags","blobs_url":"https://api.github.com/repos/openwhisk/openwhisk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openwhisk/openwhisk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openwhisk/openwhisk/git/refs{/sha}","trees_url":"https://api.github.com/repos/openwhisk/openwhisk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openwhisk/openwhisk/statuses/{sha}","languages_url":"https://api.github.com/repos/openwhisk/openwhisk/languages","stargazers_url":"https://api.github.com/repos/openwhisk/openwhisk/stargazers","contributors_url":"https://api.github.com/repos/openwhisk/openwhisk/contributors","subscribers_url":"https://api.github.com/repos/openwhisk/openwhisk/subscribers","subscription_url":"https://api.github.com/repos/openwhisk/openwhisk/subscription","commits_url":"https://api.github.com/repos/openwhisk/openwhisk/commits{/sha}","git_commits_url":"https://api.github.com/repos/openwhisk/openwhisk/git/commits{/sha}","comments_url":"https://api.github.com/repos/openwhisk/openwhisk/comments{/number}","issue_comment_url":"https://api.github.com/repos/openwhisk/openwhisk/issues/comments{/number}","contents_url":"https://api.github.com/repos/openwhisk/openwhisk/contents/{+path}","compare_url":"https://api.github.com/repos/openwhisk/openwhisk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openwhisk/openwhisk/merges","archive_url":"https://api.github.com/repos/openwhisk/openwhisk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openwhisk/openwhisk/downloads","issues_url":"https://api.github.com/repos/openwhisk/openwhisk/issues{/number}","pulls_url":"https://api.github.com/repos/openwhisk/openwhisk/pulls{/number}","milestones_url":"https://api.github.com/repos/openwhisk/openwhisk/milestones{/number}","notifications_url":"https://api.github.com/repos/openwhisk/openwhisk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openwhisk/openwhisk/labels{/name}","releases_url":"https://api.github.com/repos/openwhisk/openwhisk/releases{/id}","deployments_url":"https://api.github.com/repos/openwhisk/openwhisk/deployments","created_at":"2016-02-18T21:16:19Z","updated_at":"2016-08-26T17:48:59Z","pushed_at":"2016-08-26T19:58:59Z","git_url":"git://github.com/openwhisk/openwhisk.git","ssh_url":"git@github.com:openwhisk/openwhisk.git","clone_url":"https://github.com/openwhisk/openwhisk.git","svn_url":"https://github.com/openwhisk/openwhisk","homepage":"","size":43880,"stargazers_count":520,"watchers_count":520,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":134,"mirror_url":null,"open_issues_count":268,"forks":134,"open_issues":268,"watchers":520,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109"},"html":{"href":"https://github.com/openwhisk/openwhisk/pull/1109"},"issue":{"href":"https://api.github.com/repos/openwhisk/openwhisk/issues/1109"},"comments":{"href":"https://api.github.com/repos/openwhisk/openwhisk/issues/1109/comments"},"review_comments":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109/comments"},"review_comment":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openwhisk/openwhisk/pulls/1109/commits"},"statuses":{"href":"https://api.github.com/repos/openwhisk/openwhisk/statuses/d11095e116628f933dcbffab4eaa4a80df5bbf3f"}}}}
{"actor":{"display_login":"csantanapr"}}