GitHub PullRequestEvent at 2014-08-19 08:31:46
Repository: flapjack
Actor: jessereynolds
Payload: {"action":"closed","number":602,"pull_request":{"url":"https://api.github.com/repos/flapjack/flapjack/pulls/602","id":19681519,"html_url":"https://github.com/flapjack/flapjack/pull/602","diff_url":"https://github.com/flapjack/flapjack/pull/602.diff","patch_url":"https://github.com/flapjack/flapjack/pull/602.patch","issue_url":"https://api.github.com/repos/flapjack/flapjack/issues/602","number":602,"state":"closed","locked":false,"title":"Added AWS SNS Notification Gateway","user":{"login":"clarkf","id":439978,"avatar_url":"https://avatars.githubusercontent.com/u/439978?v=2","gravatar_id":"4a675c1f0b6e305862a7a36219f0ed34","url":"https://api.github.com/users/clarkf","html_url":"https://github.com/clarkf","followers_url":"https://api.github.com/users/clarkf/followers","following_url":"https://api.github.com/users/clarkf/following{/other_user}","gists_url":"https://api.github.com/users/clarkf/gists{/gist_id}","starred_url":"https://api.github.com/users/clarkf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clarkf/subscriptions","organizations_url":"https://api.github.com/users/clarkf/orgs","repos_url":"https://api.github.com/users/clarkf/repos","events_url":"https://api.github.com/users/clarkf/events{/privacy}","received_events_url":"https://api.github.com/users/clarkf/received_events","type":"User","site_admin":false},"body":"Hello all,\r\n\r\nThis is my first draft of a notification gateway that delivers to [Amazon's SNS service](https://aws.amazon.com/sns/).  Not being Australian, MessageNet doesn't really make sense for me, so I decided to give it a whirl.\r\n\r\nSNS allows users to send bulk SMS messages and emails at a relatively decent price (I'm not sure why you'd want to use SNS's email capabilities over Flapjack's SMTP gateway, but I digress). \r\n\r\nThis PR adds an `sns` media type where the user can define their own individual Topic ARN, which allows user to separate topics among teams and/or individuals. It's expected that all users will be able to share an Access/Secret Key pair.\r\n\r\nSome things to discuss:\r\n\r\n* Would it be a better idea to create an 'abstract' SMS gateway, which has individual drivers? For example, a user could configure the SMS gateway to use either the Messagenet or SNS driver and provide credentials for the selected driver.  This might get hairy pretty quickly as they're not entirely interoperable.\r\n* Would it be at all beneficial to allow users to have individual Access/Secret key pairs?  I think this would probably be accomplished along the same way that PagerDuty credentials are handled, but it'd  definitely require more effort.  Perhaps we could come up with something akin to a [DSN](https://en.wikipedia.org/wiki/Data_source_name) where a user could specify `sns://key:secret@region/topic_arn` as their SNS media.  However, that would also add complexity.\r\n* Finally, I've implemented [version 2 signatures](http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html) directly within the gateway.  I didn't feel it would be appropriate to add a dependency to the [official SDK](https://github.com/aws/aws-sdk-ruby) since it would both add bulk and works outside the EM cycle.\r\n\r\nPlease discuss and let me know what I can do to make this ready to merge!","created_at":"2014-08-12T18:49:58Z","updated_at":"2014-08-19T08:31:46Z","closed_at":"2014-08-19T08:31:46Z","merged_at":"2014-08-19T08:31:46Z","merge_commit_sha":"35743b6a9213265f331dc5c7e9eecc62cc8316be","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/flapjack/flapjack/pulls/602/commits","review_comments_url":"https://api.github.com/repos/flapjack/flapjack/pulls/602/comments","review_comment_url":"https://api.github.com/repos/flapjack/flapjack/pulls/comments/{number}","comments_url":"https://api.github.com/repos/flapjack/flapjack/issues/602/comments","statuses_url":"https://api.github.com/repos/flapjack/flapjack/statuses/6805acb83d15ca376559ddd68f529564e955c02d","head":{"label":"clarkf:master","ref":"master","sha":"6805acb83d15ca376559ddd68f529564e955c02d","user":{"login":"clarkf","id":439978,"avatar_url":"https://avatars.githubusercontent.com/u/439978?v=2","gravatar_id":"4a675c1f0b6e305862a7a36219f0ed34","url":"https://api.github.com/users/clarkf","html_url":"https://github.com/clarkf","followers_url":"https://api.github.com/users/clarkf/followers","following_url":"https://api.github.com/users/clarkf/following{/other_user}","gists_url":"https://api.github.com/users/clarkf/gists{/gist_id}","starred_url":"https://api.github.com/users/clarkf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clarkf/subscriptions","organizations_url":"https://api.github.com/users/clarkf/orgs","repos_url":"https://api.github.com/users/clarkf/repos","events_url":"https://api.github.com/users/clarkf/events{/privacy}","received_events_url":"https://api.github.com/users/clarkf/received_events","type":"User","site_admin":false},"repo":{"id":22794310,"name":"flapjack","full_name":"clarkf/flapjack","owner":{"login":"clarkf","id":439978,"avatar_url":"https://avatars.githubusercontent.com/u/439978?v=2","gravatar_id":"4a675c1f0b6e305862a7a36219f0ed34","url":"https://api.github.com/users/clarkf","html_url":"https://github.com/clarkf","followers_url":"https://api.github.com/users/clarkf/followers","following_url":"https://api.github.com/users/clarkf/following{/other_user}","gists_url":"https://api.github.com/users/clarkf/gists{/gist_id}","starred_url":"https://api.github.com/users/clarkf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clarkf/subscriptions","organizations_url":"https://api.github.com/users/clarkf/orgs","repos_url":"https://api.github.com/users/clarkf/repos","events_url":"https://api.github.com/users/clarkf/events{/privacy}","received_events_url":"https://api.github.com/users/clarkf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/clarkf/flapjack","description":"Monitoring notification routing + event processing system","fork":true,"url":"https://api.github.com/repos/clarkf/flapjack","forks_url":"https://api.github.com/repos/clarkf/flapjack/forks","keys_url":"https://api.github.com/repos/clarkf/flapjack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/clarkf/flapjack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/clarkf/flapjack/teams","hooks_url":"https://api.github.com/repos/clarkf/flapjack/hooks","issue_events_url":"https://api.github.com/repos/clarkf/flapjack/issues/events{/number}","events_url":"https://api.github.com/repos/clarkf/flapjack/events","assignees_url":"https://api.github.com/repos/clarkf/flapjack/assignees{/user}","branches_url":"https://api.github.com/repos/clarkf/flapjack/branches{/branch}","tags_url":"https://api.github.com/repos/clarkf/flapjack/tags","blobs_url":"https://api.github.com/repos/clarkf/flapjack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/clarkf/flapjack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/clarkf/flapjack/git/refs{/sha}","trees_url":"https://api.github.com/repos/clarkf/flapjack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/clarkf/flapjack/statuses/{sha}","languages_url":"https://api.github.com/repos/clarkf/flapjack/languages","stargazers_url":"https://api.github.com/repos/clarkf/flapjack/stargazers","contributors_url":"https://api.github.com/repos/clarkf/flapjack/contributors","subscribers_url":"https://api.github.com/repos/clarkf/flapjack/subscribers","subscription_url":"https://api.github.com/repos/clarkf/flapjack/subscription","commits_url":"https://api.github.com/repos/clarkf/flapjack/commits{/sha}","git_commits_url":"https://api.github.com/repos/clarkf/flapjack/git/commits{/sha}","comments_url":"https://api.github.com/repos/clarkf/flapjack/comments{/number}","issue_comment_url":"https://api.github.com/repos/clarkf/flapjack/issues/comments/{number}","contents_url":"https://api.github.com/repos/clarkf/flapjack/contents/{+path}","compare_url":"https://api.github.com/repos/clarkf/flapjack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/clarkf/flapjack/merges","archive_url":"https://api.github.com/repos/clarkf/flapjack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/clarkf/flapjack/downloads","issues_url":"https://api.github.com/repos/clarkf/flapjack/issues{/number}","pulls_url":"https://api.github.com/repos/clarkf/flapjack/pulls{/number}","milestones_url":"https://api.github.com/repos/clarkf/flapjack/milestones{/number}","notifications_url":"https://api.github.com/repos/clarkf/flapjack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/clarkf/flapjack/labels{/name}","releases_url":"https://api.github.com/repos/clarkf/flapjack/releases{/id}","created_at":"2014-08-09T20:16:55Z","updated_at":"2014-08-12T18:30:16Z","pushed_at":"2014-08-12T19:14:24Z","git_url":"git://github.com/clarkf/flapjack.git","ssh_url":"git@github.com:clarkf/flapjack.git","clone_url":"https://github.com/clarkf/flapjack.git","svn_url":"https://github.com/clarkf/flapjack","homepage":"flapjack.io","size":9483,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"flapjack:master","ref":"master","sha":"5f679a7a6d81ff22ff0d25279633d729310b4206","user":{"login":"flapjack","id":2343953,"avatar_url":"https://avatars.githubusercontent.com/u/2343953?v=2","gravatar_id":"c49b8ba436c628f552e9cb9b768b18e8","url":"https://api.github.com/users/flapjack","html_url":"https://github.com/flapjack","followers_url":"https://api.github.com/users/flapjack/followers","following_url":"https://api.github.com/users/flapjack/following{/other_user}","gists_url":"https://api.github.com/users/flapjack/gists{/gist_id}","starred_url":"https://api.github.com/users/flapjack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flapjack/subscriptions","organizations_url":"https://api.github.com/users/flapjack/orgs","repos_url":"https://api.github.com/users/flapjack/repos","events_url":"https://api.github.com/users/flapjack/events{/privacy}","received_events_url":"https://api.github.com/users/flapjack/received_events","type":"Organization","site_admin":false},"repo":{"id":145744,"name":"flapjack","full_name":"flapjack/flapjack","owner":{"login":"flapjack","id":2343953,"avatar_url":"https://avatars.githubusercontent.com/u/2343953?v=2","gravatar_id":"c49b8ba436c628f552e9cb9b768b18e8","url":"https://api.github.com/users/flapjack","html_url":"https://github.com/flapjack","followers_url":"https://api.github.com/users/flapjack/followers","following_url":"https://api.github.com/users/flapjack/following{/other_user}","gists_url":"https://api.github.com/users/flapjack/gists{/gist_id}","starred_url":"https://api.github.com/users/flapjack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flapjack/subscriptions","organizations_url":"https://api.github.com/users/flapjack/orgs","repos_url":"https://api.github.com/users/flapjack/repos","events_url":"https://api.github.com/users/flapjack/events{/privacy}","received_events_url":"https://api.github.com/users/flapjack/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/flapjack/flapjack","description":"Monitoring notification routing + event processing system","fork":false,"url":"https://api.github.com/repos/flapjack/flapjack","forks_url":"https://api.github.com/repos/flapjack/flapjack/forks","keys_url":"https://api.github.com/repos/flapjack/flapjack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flapjack/flapjack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flapjack/flapjack/teams","hooks_url":"https://api.github.com/repos/flapjack/flapjack/hooks","issue_events_url":"https://api.github.com/repos/flapjack/flapjack/issues/events{/number}","events_url":"https://api.github.com/repos/flapjack/flapjack/events","assignees_url":"https://api.github.com/repos/flapjack/flapjack/assignees{/user}","branches_url":"https://api.github.com/repos/flapjack/flapjack/branches{/branch}","tags_url":"https://api.github.com/repos/flapjack/flapjack/tags","blobs_url":"https://api.github.com/repos/flapjack/flapjack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flapjack/flapjack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flapjack/flapjack/git/refs{/sha}","trees_url":"https://api.github.com/repos/flapjack/flapjack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flapjack/flapjack/statuses/{sha}","languages_url":"https://api.github.com/repos/flapjack/flapjack/languages","stargazers_url":"https://api.github.com/repos/flapjack/flapjack/stargazers","contributors_url":"https://api.github.com/repos/flapjack/flapjack/contributors","subscribers_url":"https://api.github.com/repos/flapjack/flapjack/subscribers","subscription_url":"https://api.github.com/repos/flapjack/flapjack/subscription","commits_url":"https://api.github.com/repos/flapjack/flapjack/commits{/sha}","git_commits_url":"https://api.github.com/repos/flapjack/flapjack/git/commits{/sha}","comments_url":"https://api.github.com/repos/flapjack/flapjack/comments{/number}","issue_comment_url":"https://api.github.com/repos/flapjack/flapjack/issues/comments/{number}","contents_url":"https://api.github.com/repos/flapjack/flapjack/contents/{+path}","compare_url":"https://api.github.com/repos/flapjack/flapjack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flapjack/flapjack/merges","archive_url":"https://api.github.com/repos/flapjack/flapjack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flapjack/flapjack/downloads","issues_url":"https://api.github.com/repos/flapjack/flapjack/issues{/number}","pulls_url":"https://api.github.com/repos/flapjack/flapjack/pulls{/number}","milestones_url":"https://api.github.com/repos/flapjack/flapjack/milestones{/number}","notifications_url":"https://api.github.com/repos/flapjack/flapjack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flapjack/flapjack/labels{/name}","releases_url":"https://api.github.com/repos/flapjack/flapjack/releases{/id}","created_at":"2009-03-08T11:47:49Z","updated_at":"2014-08-11T21:14:24Z","pushed_at":"2014-08-19T08:31:46Z","git_url":"git://github.com/flapjack/flapjack.git","ssh_url":"git@github.com:flapjack/flapjack.git","clone_url":"https://github.com/flapjack/flapjack.git","svn_url":"https://github.com/flapjack/flapjack","homepage":"flapjack.io","size":24999,"stargazers_count":344,"watchers_count":344,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":46,"mirror_url":null,"open_issues_count":98,"forks":46,"open_issues":98,"watchers":344,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/flapjack/flapjack/pulls/602"},"html":{"href":"https://github.com/flapjack/flapjack/pull/602"},"issue":{"href":"https://api.github.com/repos/flapjack/flapjack/issues/602"},"comments":{"href":"https://api.github.com/repos/flapjack/flapjack/issues/602/comments"},"review_comments":{"href":"https://api.github.com/repos/flapjack/flapjack/pulls/602/comments"},"review_comment":{"href":"https://api.github.com/repos/flapjack/flapjack/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/flapjack/flapjack/pulls/602/commits"},"statuses":{"href":"https://api.github.com/repos/flapjack/flapjack/statuses/6805acb83d15ca376559ddd68f529564e955c02d"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"jessereynolds","id":391439,"avatar_url":"https://avatars.githubusercontent.com/u/391439?v=2","gravatar_id":"ae0689a4447971bf0515180c6232366f","url":"https://api.github.com/users/jessereynolds","html_url":"https://github.com/jessereynolds","followers_url":"https://api.github.com/users/jessereynolds/followers","following_url":"https://api.github.com/users/jessereynolds/following{/other_user}","gists_url":"https://api.github.com/users/jessereynolds/gists{/gist_id}","starred_url":"https://api.github.com/users/jessereynolds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jessereynolds/subscriptions","organizations_url":"https://api.github.com/users/jessereynolds/orgs","repos_url":"https://api.github.com/users/jessereynolds/repos","events_url":"https://api.github.com/users/jessereynolds/events{/privacy}","received_events_url":"https://api.github.com/users/jessereynolds/received_events","type":"User","site_admin":false},"comments":5,"review_comments":0,"commits":3,"additions":372,"deletions":5,"changed_files":12}}