{"action":"created","comment":{"url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/comments/90840356","pull_request_review_id":11354109,"id":90840356,"diff_hunk":"@@ -0,0 +1,257 @@\n+%% @author Carl Isom III <carl.isom@gmail.com>\n+%% @doc\n+%% An Erlang interface to Marketplace Metering Service.\n+%%\n+%% [http://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html]\n+%%\n+%% [http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/MarketplaceMetering.html]\n+%%\n+%% Method names match Marketplace Metering Service operations converted to\n+%% lower_case_with_underscores.\n+%%\n+%% Required parameters are passed as function arguments. In addition\n+%% all methods take an options proplist argument which can be used to\n+%% pass optional parameters.\n+%%\n+%% Output is in the form of `{ok, Value}' or `{error, Reason}'. The\n+%% format of `Value' is controlled by the `out' option, which defaults\n+%% to `simple'. The possible values are:\n+%%\n+%% As to the error retries, we use `erlcloud_retry:default_retry/1'\n+%% as the default retry strategy, this behaviour can be changed through\n+%% `aws_config()'.\n+%%\n+%% @end\n+\n+-module(erlcloud_mms).\n+-author('cisom@gmail.com').\n+\n+-include(\"erlcloud.hrl\").\n+-include(\"erlcloud_aws.hrl\").\n+\n+%%% Library initialization.\n+-export([configure/2, configure/3, new/2, new/3]).\n+\n+%%% Marketplace Metering API\n+-export([batch_meter_usage/2, batch_meter_usage/3,\n+         meter_usage/5, meter_usage/6,\n+         resolve_customer/1, resolve_customer/2\n+        ]).\n+\n+-export_type(\n+   [\n+   ]).\n+\n+%%%------------------------------------------------------------------------------\n+%%% Library initialization.\n+%%%------------------------------------------------------------------------------\n+\n+-spec new(string(), string()) -> aws_config().\n+new(AccessKeyID, SecretAccessKey) ->\n+    #aws_config{access_key_id=AccessKeyID,\n+                secret_access_key=SecretAccessKey,\n+                retry = fun erlcloud_retry:default_retry/1}.\n+\n+-spec new(string(), string(), string()) -> aws_config().\n+new(AccessKeyID, SecretAccessKey, Host) ->\n+    #aws_config{access_key_id=AccessKeyID,\n+                secret_access_key=SecretAccessKey,\n+                mms_host=Host,\n+                retry = fun erlcloud_retry:default_retry/1}.\n+\n+-spec configure(string(), string()) -> ok.\n+configure(AccessKeyID, SecretAccessKey) ->\n+    put(aws_config, new(AccessKeyID, SecretAccessKey)),\n+    ok.\n+\n+-spec configure(string(), string(), string()) -> ok.\n+configure(AccessKeyID, SecretAccessKey, Host) ->\n+    put(aws_config, new(AccessKeyID, SecretAccessKey, Host)),\n+    ok.\n+\n+default_config() -> erlcloud_aws:default_config().\n+\n+%%%------------------------------------------------------------------------------\n+%%% Shared Types\n+%%%------------------------------------------------------------------------------\n+\n+-type json_term() :: jsx:json_term().\n+\n+%%%------------------------------------------------------------------------------\n+%%% Batch Meter Usage\n+%%%------------------------------------------------------------------------------\n+\n+-spec batch_meter_usage(ProductCode :: binary(),\n+                        UsageRecords :: proplist()) -> proplist().\n+batch_meter_usage(ProductCode, UsageRecords) ->\n+    batch_meter_usage(ProductCode, UsageRecords, default_config()).\n+\n+-spec batch_meter_usage(ProductCode :: binary(),\n+                        UsageRecords :: proplist(),\n+                        aws_config()) -> proplist().\n+batch_meter_usage(ProductCode, UsageRecords, Config) ->\n+    Json = [{<<\"ProductCode\">>, ProductCode}, {<<\"UsageRecords\">>, UsageRecords}],\n+\n+    request(Config,\n+            \"AWSMPMeteringService.BatchMeterUsage\",\n+            Json).\n+%%%------------------------------------------------------------------------------\n+%%% Meter Usage\n+%%%------------------------------------------------------------------------------\n+\n+-spec meter_usage(ProductCode :: binary(),\n+                  Timestamp :: number(),\n+                  UsageDimension  :: binary(),\n+                  UsageQuantity :: number(),\n+                  DryRun  :: boolean()) -> proplist().\n+meter_usage(ProductCode, Timestamp, UsageDimension, UsageQuantity, DryRun) ->\n+    meter_usage(ProductCode, Timestamp, UsageDimension, UsageQuantity, DryRun, default_config()).\n+\n+-spec meter_usage(ProductCode :: binary(),\n+                  Timestamp :: number(),\n+                  UsageDimension  :: binary(),\n+                  UsageQuantity :: number(),\n+                  DryRun  :: boolean(),\n+                  aws_config()) -> proplist().\n+meter_usage(ProductCode, Timestamp, UsageDimension, UsageQuantity, DryRun, Config) ->\n+    Json = [{<<\"DryRun\">>, DryRun},\n+            {<<\"ProductCode\">>, ProductCode},\n+            {<<\"Timestamp\">>, Timestamp},\n+            {<<\"UsageDimension\">>, UsageDimension},\n+            {<<\"UsageQuantity\">>, UsageQuantity}],\n+\n+    request(Config,\n+            \"AWSMPMeteringService.MeterUsage\",\n+            Json).\n+\n+%%%------------------------------------------------------------------------------\n+%%% Resolve Customer\n+%%%------------------------------------------------------------------------------\n+\n+-spec resolve_customer(RegistrationToken :: binary()) -> proplist().\n+resolve_customer(RegistrationToken) ->\n+    resolve_customer(RegistrationToken, default_config()).\n+\n+-spec resolve_customer(RegistrationToken :: binary(),\n+                       aws_config()) -> proplist().\n+resolve_customer(RegistrationToken, Config) ->\n+    Json = [{<<\"RegistrationToken\">>, RegistrationToken}],\n+\n+    request(Config,\n+            \"AWSMPMeteringService.ResolveCustomer\",\n+            Json).\n+\n+%%%------------------------------------------------------------------------------\n+%%% Request\n+%%%------------------------------------------------------------------------------\n+\n+-type operation() :: string().\n+-type json_return() :: {ok, json_term()} | {error, term()}.\n+\n+-spec request(aws_config(), operation(), json_term()) -> json_return().\n+request(Config, Operation, Json) ->\n+    case erlcloud_aws:update_config(Config) of\n+        {ok, Config2} ->\n+            request2(Config2, Operation, Json);\n+        {error, _} = Error ->\n+            Error\n+    end.\n+\n+-spec request2(aws_config(), operation(), json_term()) -> json_return().\n+request2(Config, Operation, Json) ->\n+    Body = case Json of\n+               [] -> <<\"{}\">>;\n+               _ -> jsx:encode(Json)\n+           end,\n+    Headers = headers(Config, Operation, Body),\n+    Request = #aws_request{service = mms,\n+                           uri = uri(Config),\n+                           method = post,\n+                           request_headers = Headers,\n+                           request_body = Body},\n+    request_to_return(erlcloud_retry:request(Config, Request, fun result_fun/1)).\n+\n+-spec request_to_return(#aws_request{}) -> json_return().\n+request_to_return(#aws_request{response_type = ok,\n+                               response_body = Body}) ->\n+    %% TODO check crc\n+    {ok, jsx:decode(Body)};\n+request_to_return(#aws_request{response_type = error,\n+                               error_type = aws,\n+                               httpc_error_reason = undefined,\n+                               response_status = Status,\n+                               response_status_line = StatusLine,\n+                               response_body = Body}) ->\n+    {error, {http_error, Status, StatusLine, Body}};\n+request_to_return(#aws_request{response_type = error,\n+                               error_type = aws,\n+                               httpc_error_reason = Reason}) ->\n+    {error, Reason};\n+request_to_return(#aws_request{response_type = error,\n+                               error_type = httpc,\n+                               httpc_error_reason = Reason}) ->\n+    {error, Reason}.\n+\n+-spec result_fun(#aws_request{}) -> #aws_request{}.\n+result_fun(#aws_request{response_type = ok} = Request) ->\n+    Request;\n+result_fun(#aws_request{response_type = error,\n+                        error_type = aws,\n+                        response_status = Status} = Request) ->\n+    %% == IMPLEMENTATION NOTES ==\n+    %% Set `httpc_error_reason` to `undefined` in case of retry\n+    Request2 = Request#aws_request{httpc_error_reason = undefined},\n+    if\n+        Status >= 400 andalso Status < 500 ->\n+            client_error(Request2);\n+        Status >= 500 ->\n+            Request2#aws_request{should_retry = true};\n+        Status < 400 ->\n+            Request2#aws_request{should_retry = false}\n+    end.\n+\n+-spec client_error(#aws_request{}) -> #aws_request{}.\n+client_error(#aws_request{response_body = Body} = Request) ->","path":"src/erlcloud_mms.erl","position":214,"original_position":214,"commit_id":"9980140e4d2eb6242c988f5b8c8d777d05918cf7","original_commit_id":"9980140e4d2eb6242c988f5b8c8d777d05918cf7","user":{"login":"motobob","id":5736793,"avatar_url":"https://avatars.githubusercontent.com/u/5736793?v=3","gravatar_id":"","url":"https://api.github.com/users/motobob","html_url":"https://github.com/motobob","followers_url":"https://api.github.com/users/motobob/followers","following_url":"https://api.github.com/users/motobob/following{/other_user}","gists_url":"https://api.github.com/users/motobob/gists{/gist_id}","starred_url":"https://api.github.com/users/motobob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/motobob/subscriptions","organizations_url":"https://api.github.com/users/motobob/orgs","repos_url":"https://api.github.com/users/motobob/repos","events_url":"https://api.github.com/users/motobob/events{/privacy}","received_events_url":"https://api.github.com/users/motobob/received_events","type":"User","site_admin":false},"body":"i really do not like the idea of copy pasting ddb& ddb_streams code here. \r\nlet's generalise it and use one copy","created_at":"2016-12-05T10:46:07Z","updated_at":"2016-12-05T10:46:07Z","html_url":"https://github.com/erlcloud/erlcloud/pull/349#discussion_r90840356","pull_request_url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349","_links":{"self":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/comments/90840356"},"html":{"href":"https://github.com/erlcloud/erlcloud/pull/349#discussion_r90840356"},"pull_request":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349"}}},"pull_request":{"url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349","id":96364567,"html_url":"https://github.com/erlcloud/erlcloud/pull/349","diff_url":"https://github.com/erlcloud/erlcloud/pull/349.diff","patch_url":"https://github.com/erlcloud/erlcloud/pull/349.patch","issue_url":"https://api.github.com/repos/erlcloud/erlcloud/issues/349","number":349,"state":"open","locked":false,"title":"Add support for Marketplace Metering Endpoints","user":{"login":"carlisom","id":578584,"avatar_url":"https://avatars.githubusercontent.com/u/578584?v=3","gravatar_id":"","url":"https://api.github.com/users/carlisom","html_url":"https://github.com/carlisom","followers_url":"https://api.github.com/users/carlisom/followers","following_url":"https://api.github.com/users/carlisom/following{/other_user}","gists_url":"https://api.github.com/users/carlisom/gists{/gist_id}","starred_url":"https://api.github.com/users/carlisom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carlisom/subscriptions","organizations_url":"https://api.github.com/users/carlisom/orgs","repos_url":"https://api.github.com/users/carlisom/repos","events_url":"https://api.github.com/users/carlisom/events{/privacy}","received_events_url":"https://api.github.com/users/carlisom/received_events","type":"User","site_admin":false},"body":"The only [documented](http://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html) API found on their public site is `MeterUsage`.\r\n\r\n`BatchMeterUsage` and `ResolveCustomer` can be found in the [JavaScript SDK](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/MarketplaceMetering.html).\r\n\r\nThe base16 library addition is to fix a problem cause by AWS sending non padded base16 encoded customer tokens that are used when calling `ResolveCustomer`.","created_at":"2016-12-02T22:30:49Z","updated_at":"2016-12-05T10:46:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"523c7f99ae0f8a4a49f0b6c09dba22cecdaf2907","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349/commits","review_comments_url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349/comments","review_comment_url":"https://api.github.com/repos/erlcloud/erlcloud/pulls/comments{/number}","comments_url":"https://api.github.com/repos/erlcloud/erlcloud/issues/349/comments","statuses_url":"https://api.github.com/repos/erlcloud/erlcloud/statuses/9980140e4d2eb6242c988f5b8c8d777d05918cf7","head":{"label":"carlisom:saas_billing","ref":"saas_billing","sha":"9980140e4d2eb6242c988f5b8c8d777d05918cf7","user":{"login":"carlisom","id":578584,"avatar_url":"https://avatars.githubusercontent.com/u/578584?v=3","gravatar_id":"","url":"https://api.github.com/users/carlisom","html_url":"https://github.com/carlisom","followers_url":"https://api.github.com/users/carlisom/followers","following_url":"https://api.github.com/users/carlisom/following{/other_user}","gists_url":"https://api.github.com/users/carlisom/gists{/gist_id}","starred_url":"https://api.github.com/users/carlisom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carlisom/subscriptions","organizations_url":"https://api.github.com/users/carlisom/orgs","repos_url":"https://api.github.com/users/carlisom/repos","events_url":"https://api.github.com/users/carlisom/events{/privacy}","received_events_url":"https://api.github.com/users/carlisom/received_events","type":"User","site_admin":false},"repo":{"id":38390425,"name":"erlcloud","full_name":"carlisom/erlcloud","owner":{"login":"carlisom","id":578584,"avatar_url":"https://avatars.githubusercontent.com/u/578584?v=3","gravatar_id":"","url":"https://api.github.com/users/carlisom","html_url":"https://github.com/carlisom","followers_url":"https://api.github.com/users/carlisom/followers","following_url":"https://api.github.com/users/carlisom/following{/other_user}","gists_url":"https://api.github.com/users/carlisom/gists{/gist_id}","starred_url":"https://api.github.com/users/carlisom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carlisom/subscriptions","organizations_url":"https://api.github.com/users/carlisom/orgs","repos_url":"https://api.github.com/users/carlisom/repos","events_url":"https://api.github.com/users/carlisom/events{/privacy}","received_events_url":"https://api.github.com/users/carlisom/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/carlisom/erlcloud","description":"Cloud Computing library for erlang (Amazon EC2, S3, SQS, SimpleDB, Mechanical Turk, ELB)","fork":true,"url":"https://api.github.com/repos/carlisom/erlcloud","forks_url":"https://api.github.com/repos/carlisom/erlcloud/forks","keys_url":"https://api.github.com/repos/carlisom/erlcloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/carlisom/erlcloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/carlisom/erlcloud/teams","hooks_url":"https://api.github.com/repos/carlisom/erlcloud/hooks","issue_events_url":"https://api.github.com/repos/carlisom/erlcloud/issues/events{/number}","events_url":"https://api.github.com/repos/carlisom/erlcloud/events","assignees_url":"https://api.github.com/repos/carlisom/erlcloud/assignees{/user}","branches_url":"https://api.github.com/repos/carlisom/erlcloud/branches{/branch}","tags_url":"https://api.github.com/repos/carlisom/erlcloud/tags","blobs_url":"https://api.github.com/repos/carlisom/erlcloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/carlisom/erlcloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/carlisom/erlcloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/carlisom/erlcloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/carlisom/erlcloud/statuses/{sha}","languages_url":"https://api.github.com/repos/carlisom/erlcloud/languages","stargazers_url":"https://api.github.com/repos/carlisom/erlcloud/stargazers","contributors_url":"https://api.github.com/repos/carlisom/erlcloud/contributors","subscribers_url":"https://api.github.com/repos/carlisom/erlcloud/subscribers","subscription_url":"https://api.github.com/repos/carlisom/erlcloud/subscription","commits_url":"https://api.github.com/repos/carlisom/erlcloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/carlisom/erlcloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/carlisom/erlcloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/carlisom/erlcloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/carlisom/erlcloud/contents/{+path}","compare_url":"https://api.github.com/repos/carlisom/erlcloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/carlisom/erlcloud/merges","archive_url":"https://api.github.com/repos/carlisom/erlcloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/carlisom/erlcloud/downloads","issues_url":"https://api.github.com/repos/carlisom/erlcloud/issues{/number}","pulls_url":"https://api.github.com/repos/carlisom/erlcloud/pulls{/number}","milestones_url":"https://api.github.com/repos/carlisom/erlcloud/milestones{/number}","notifications_url":"https://api.github.com/repos/carlisom/erlcloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/carlisom/erlcloud/labels{/name}","releases_url":"https://api.github.com/repos/carlisom/erlcloud/releases{/id}","deployments_url":"https://api.github.com/repos/carlisom/erlcloud/deployments","created_at":"2015-07-01T19:22:44Z","updated_at":"2016-01-14T22:25:30Z","pushed_at":"2016-12-02T22:49:55Z","git_url":"git://github.com/carlisom/erlcloud.git","ssh_url":"git@github.com:carlisom/erlcloud.git","clone_url":"https://github.com/carlisom/erlcloud.git","svn_url":"https://github.com/carlisom/erlcloud","homepage":"","size":3510,"stargazers_count":0,"watchers_count":0,"language":"Erlang","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":"erlcloud:master","ref":"master","sha":"9f366edb9f1339cd71a5ef61d6de45c456ca9002","user":{"login":"erlcloud","id":16710765,"avatar_url":"https://avatars.githubusercontent.com/u/16710765?v=3","gravatar_id":"","url":"https://api.github.com/users/erlcloud","html_url":"https://github.com/erlcloud","followers_url":"https://api.github.com/users/erlcloud/followers","following_url":"https://api.github.com/users/erlcloud/following{/other_user}","gists_url":"https://api.github.com/users/erlcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/erlcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erlcloud/subscriptions","organizations_url":"https://api.github.com/users/erlcloud/orgs","repos_url":"https://api.github.com/users/erlcloud/repos","events_url":"https://api.github.com/users/erlcloud/events{/privacy}","received_events_url":"https://api.github.com/users/erlcloud/received_events","type":"Organization","site_admin":false},"repo":{"id":988103,"name":"erlcloud","full_name":"erlcloud/erlcloud","owner":{"login":"erlcloud","id":16710765,"avatar_url":"https://avatars.githubusercontent.com/u/16710765?v=3","gravatar_id":"","url":"https://api.github.com/users/erlcloud","html_url":"https://github.com/erlcloud","followers_url":"https://api.github.com/users/erlcloud/followers","following_url":"https://api.github.com/users/erlcloud/following{/other_user}","gists_url":"https://api.github.com/users/erlcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/erlcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erlcloud/subscriptions","organizations_url":"https://api.github.com/users/erlcloud/orgs","repos_url":"https://api.github.com/users/erlcloud/repos","events_url":"https://api.github.com/users/erlcloud/events{/privacy}","received_events_url":"https://api.github.com/users/erlcloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/erlcloud/erlcloud","description":"AWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB,  ELB and etc)","fork":false,"url":"https://api.github.com/repos/erlcloud/erlcloud","forks_url":"https://api.github.com/repos/erlcloud/erlcloud/forks","keys_url":"https://api.github.com/repos/erlcloud/erlcloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/erlcloud/erlcloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/erlcloud/erlcloud/teams","hooks_url":"https://api.github.com/repos/erlcloud/erlcloud/hooks","issue_events_url":"https://api.github.com/repos/erlcloud/erlcloud/issues/events{/number}","events_url":"https://api.github.com/repos/erlcloud/erlcloud/events","assignees_url":"https://api.github.com/repos/erlcloud/erlcloud/assignees{/user}","branches_url":"https://api.github.com/repos/erlcloud/erlcloud/branches{/branch}","tags_url":"https://api.github.com/repos/erlcloud/erlcloud/tags","blobs_url":"https://api.github.com/repos/erlcloud/erlcloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/erlcloud/erlcloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/erlcloud/erlcloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/erlcloud/erlcloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/erlcloud/erlcloud/statuses/{sha}","languages_url":"https://api.github.com/repos/erlcloud/erlcloud/languages","stargazers_url":"https://api.github.com/repos/erlcloud/erlcloud/stargazers","contributors_url":"https://api.github.com/repos/erlcloud/erlcloud/contributors","subscribers_url":"https://api.github.com/repos/erlcloud/erlcloud/subscribers","subscription_url":"https://api.github.com/repos/erlcloud/erlcloud/subscription","commits_url":"https://api.github.com/repos/erlcloud/erlcloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/erlcloud/erlcloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/erlcloud/erlcloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/erlcloud/erlcloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/erlcloud/erlcloud/contents/{+path}","compare_url":"https://api.github.com/repos/erlcloud/erlcloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/erlcloud/erlcloud/merges","archive_url":"https://api.github.com/repos/erlcloud/erlcloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/erlcloud/erlcloud/downloads","issues_url":"https://api.github.com/repos/erlcloud/erlcloud/issues{/number}","pulls_url":"https://api.github.com/repos/erlcloud/erlcloud/pulls{/number}","milestones_url":"https://api.github.com/repos/erlcloud/erlcloud/milestones{/number}","notifications_url":"https://api.github.com/repos/erlcloud/erlcloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/erlcloud/erlcloud/labels{/name}","releases_url":"https://api.github.com/repos/erlcloud/erlcloud/releases{/id}","deployments_url":"https://api.github.com/repos/erlcloud/erlcloud/deployments","created_at":"2010-10-14T20:32:41Z","updated_at":"2016-12-01T15:04:15Z","pushed_at":"2016-12-05T10:17:07Z","git_url":"git://github.com/erlcloud/erlcloud.git","ssh_url":"git@github.com:erlcloud/erlcloud.git","clone_url":"https://github.com/erlcloud/erlcloud.git","svn_url":"https://github.com/erlcloud/erlcloud","homepage":"","size":4026,"stargazers_count":450,"watchers_count":450,"language":"Erlang","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":274,"mirror_url":null,"open_issues_count":21,"forks":274,"open_issues":21,"watchers":450,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349"},"html":{"href":"https://github.com/erlcloud/erlcloud/pull/349"},"issue":{"href":"https://api.github.com/repos/erlcloud/erlcloud/issues/349"},"comments":{"href":"https://api.github.com/repos/erlcloud/erlcloud/issues/349/comments"},"review_comments":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349/comments"},"review_comment":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/erlcloud/erlcloud/pulls/349/commits"},"statuses":{"href":"https://api.github.com/repos/erlcloud/erlcloud/statuses/9980140e4d2eb6242c988f5b8c8d777d05918cf7"}}}}
{"actor":{"display_login":"motobob"}}