{"action":"created","comment":{"url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/comments/40553584","id":40553584,"diff_hunk":"@@ -0,0 +1,233 @@\n+package io.callstats.sdk;\n+\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.UnsupportedEncodingException;\n+import java.net.URI;\n+import java.net.URISyntaxException;\n+import java.util.Properties;\n+\n+import org.apache.http.HttpResponse;\n+import org.apache.http.client.ClientProtocolException;\n+import org.apache.http.client.HttpClient;\n+import org.apache.http.client.methods.HttpPost;\n+import org.apache.http.client.methods.HttpUriRequest;\n+import org.apache.http.concurrent.FutureCallback;\n+import org.apache.http.entity.StringEntity;\n+import org.apache.http.impl.client.HttpClients;\n+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;\n+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;\n+import org.apache.http.impl.nio.client.HttpAsyncClients;\n+import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;\n+import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;\n+import org.apache.http.impl.nio.reactor.IOReactorConfig;\n+import org.apache.http.message.BasicHeader;\n+import org.apache.http.nio.client.HttpAsyncClient;\n+import org.apache.http.nio.reactor.ConnectingIOReactor;\n+import org.apache.http.nio.reactor.IOReactorException;\n+import org.apache.logging.log4j.LogManager;\n+import org.apache.logging.log4j.Logger;\n+\n+/**\n+*\n+* @author Karthik Budigere\n+*/\n+public class CallStatsHttpClient {\t\n+\t//private static String BASE_URL = \"https://c1-as-jc.callstats.io\";\n+\tprivate String BASE_URL;\n+\tprivate static final Logger logger = LogManager.getLogger(\"CallStatsHttpClient\");\n+\n+\tprivate HttpClient httpclient;\n+\tprivate HttpAsyncClient httpAsyncClient;\n+\tprivate int connectionTimeOut;\n+\tprivate int soTimeOut;\n+\t\n+\tpublic HttpClient getHttpclient() {\n+\t\treturn httpclient;\n+\t}\n+\t\n+\tpublic void setHttpclient(HttpClient httpclient) {\n+\t\tthis.httpclient = httpclient;\n+\t}\n+\t\n+\t\n+\tpublic String getBaseUrl() {\n+\t\treturn BASE_URL;\n+\t}\n+\t\n+\tpublic CallStatsHttpClient() {\n+\t\tsuper();  \n+\t\tProperties prop = new Properties();\n+\t\tInputStream input = null;\n+\t     \n+    \n+\t\tinput = getClass().getClassLoader().getResourceAsStream(CallStatsConst.CallStatsJavaSDKPropertyFileName);\n+\t\tif(input !=null){\n+\t\t\ttry {\n+\t\t\t\tprop.load(input);\n+\t\t\t\tBASE_URL = prop.getProperty(\"CallStats.BaseURL\");\n+\t\t\t\tconnectionTimeOut = Integer.parseInt(prop.getProperty(\"CallStats.ConnectionTimeOut\"));\n+\t\t\t\tsoTimeOut = Integer.parseInt(prop.getProperty(\"CallStats.SOTimeOut\"));\n+\t\t\t} catch (IOException e) {\n+\t\t\t\t// TODO Auto-generated catch block\n+\t\t\t\te.printStackTrace();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\n+\t\tlogger.info(\"Base URL is \"+BASE_URL);\n+        // Create I/O reactor configuration\n+        IOReactorConfig ioReactorConfig = IOReactorConfig.custom()\n+                .setIoThreadCount(Runtime.getRuntime().availableProcessors())\n+                .setConnectTimeout(connectionTimeOut)\n+                .setSoTimeout(soTimeOut)\n+                .build();\n+\n+        // Create a custom I/O reactort\n+        ConnectingIOReactor ioReactor;\n+\t\ttry {\n+\t\t\tioReactor = new DefaultConnectingIOReactor(ioReactorConfig);\n+\t\t} catch (IOReactorException e) {\n+\t\t\t// TODO Auto-generated catch block\n+\t\t\te.printStackTrace();\n+\t\t\tthrow new RuntimeException(e);\n+\t\t}\n+        \n+        \n+\t\tPoolingHttpClientConnectionManager mgr;\n+\t\tmgr = new PoolingHttpClientConnectionManager();\n+\t\t((PoolingHttpClientConnectionManager) mgr).setDefaultMaxPerRoute(10);\n+\t\thttpclient = HttpClients.custom()\n+\t            .setConnectionManager(mgr)\n+\t            .build();\n+\t\t\n+\t\tPoolingNHttpClientConnectionManager asyncMgr;\n+\t\tasyncMgr = new PoolingNHttpClientConnectionManager(ioReactor);\n+\t\thttpAsyncClient = HttpAsyncClients.custom()\n+\t\t\t\t.setConnectionManager(asyncMgr)\n+\t            .build();\n+\t}\n+\t\n+\tprivate HttpPost generateHttpPostRequest(String url, String body) {\n+\t\tURI uri = generateURI(url);\n+\t\tStringEntity entity = generateEntity(body);\n+\n+\t\tHttpPost post = new HttpPost(uri);\n+\t\tpost.setHeader(\"Content-type\", \"application/json\");\n+\t    post.setHeader(\"Accept\", \"application/json\");\n+\t\tpost.setEntity(entity);\n+\n+\t\treturn post;\n+\t}\n+\t\n+\tprivate URI generateURI(String url) {\n+\t\tURI uri;\n+\t\ttry {\n+\t\t\turi = new URI(url);\n+\t\t} catch (URISyntaxException e) {\n+\t\t\t// TODO Auto-generated catch block\n+\t\t\te.printStackTrace();\n+\t\t\tthrow new IllegalStateException(\"Invalid URL:\"+url, e);\n+\t\t}\n+\t\treturn uri;\n+\t}\n+\t\n+\tprivate StringEntity generateEntity(String body) {\n+\t\tStringEntity entity;\n+\t\ttry {\n+\t\t\tentity = new StringEntity(body);\n+\t\t} catch (UnsupportedEncodingException e) {\n+\t\t\t// TODO Auto-generated catch block\n+\t\t\te.printStackTrace();\n+\t\t\tthrow new RuntimeException(e);\n+\t\t}\n+\t\tentity.setContentType(\"application/json\");\t\t\n+\t\treturn entity;\n+\t}\n+\t\t\n+\tpublic HttpResponse sendHttpRequest(String url, String httpMethodType, String body) {\n+\t\t\n+\t\tif(url == null || httpMethodType == null || body == null) {\n+\t\t\tthrow new IllegalArgumentException(\"sendHttpRequest: Arguments cannot be null\");\n+\t\t}\n+\t\n+\t\tHttpUriRequest request = null;\n+\t\tString apiUrl = url.toLowerCase();\n+\t\tStringBuilder sb = new StringBuilder();\n+\n+\t\tsb.append(getBaseUrl());\n+\n+\t\tif (!apiUrl.startsWith(\"/\")) {\n+\t\t\tsb.append(\"/\");\n+\t\t}\n+\t\tsb.append(url);\n+\t\t\n+\t\turl = sb.toString();\n+\t\tif (httpMethodType.equalsIgnoreCase(CallStatsConst.httpPostMethod)) {\n+\t\t\trequest = generateHttpPostRequest(url,body);\n+\t\t}\n+\t\t\n+\t\tif(request != null) {\n+\t\t\trequest.addHeader(new BasicHeader(\"Accept\", \"application/json\"));\n+\t\t\trequest.addHeader(new BasicHeader(\"Accept-Charset\", \"utf-8\"));\n+\t\t\tHttpResponse response;\n+\t\t\ttry {\n+\t\t\t\tresponse = httpclient.execute(request);\n+\t\t\t\tlogger.info(\"Response is \"+response);\n+\t\t\t} catch (ClientProtocolException e) {\n+\t\t\t\te.printStackTrace();\n+\t\t\t} catch (IOException e) {\n+\t\t\t\te.printStackTrace();\n+\t\t\t}\n+\t\t}\t\t\n+\t\treturn null;\n+\t}\n+\t\n+\t\n+\tpublic void sendAsyncHttpRequest(String url, String httpMethodType, String body,final CallStatsHttpResponseListener listener) {\n+\t\tif(url == null || httpMethodType == null || body == null || listener == null) {\n+\t\t\tthrow new IllegalArgumentException(\"sendAsyncHttpRequest: Arguments cannot be null\");\n+\t\t}\n+\t\t\n+\t\tHttpUriRequest request = null;\n+\t\tString apiUrl = url.toLowerCase();\n+\t\tStringBuilder sb = new StringBuilder();\n+\n+\t\tsb.append(getBaseUrl());\n+\n+\t\tif (!apiUrl.startsWith(\"/\")) {\n+\t\t\tsb.append(\"/\");\n+\t\t}\n+\t\tsb.append(url);\n+\t\t\n+\t\turl = sb.toString();\n+\t\tif (httpMethodType.equalsIgnoreCase(CallStatsConst.httpPostMethod)) {\n+\t\t\trequest = generateHttpPostRequest(url,body);\n+\t\t}\n+\t\t\n+\t\tif(request != null) {\n+\t\t\trequest.addHeader(new BasicHeader(\"Accept\", \"application/json\"));\n+\t\t\trequest.addHeader(new BasicHeader(\"Accept-Charset\", \"utf-8\"));\n+\t\t\t((CloseableHttpAsyncClient) httpAsyncClient).start();\n+\t\t\thttpAsyncClient.execute(request, new FutureCallback<HttpResponse>() {\n+\t\t\t\t\n+\t\t\t\tpublic void failed(Exception e) {\n+\t\t\t\t\tlistener.onFailure(e);\n+\t\t\t\t\tlogger.info(\"failed \"+e.toString());\n+\t\t\t\t}\n+\t\t\t\t\n+\t\t\t\tpublic void completed(HttpResponse response) {\n+\t\t\t\t\tlogger.info(\"HTTP Req Completed, received response \");\n+\t\t\t\t\tlistener.onResponse(response);\n+\t\t\t\t}\n+\t\t\t\t\n+\t\t\t\tpublic void cancelled() {\n+\t\t\t\t\tException e = new Exception();","path":"callstats-java-sdk/src/main/java/io/callstats/sdk/CallStatsHttpClient.java","position":225,"original_position":225,"commit_id":"77a18e05bb59aaaff576f4e3436f9db2c0d31220","original_commit_id":"77a18e05bb59aaaff576f4e3436f9db2c0d31220","user":{"login":"sli-cs","id":10948339,"avatar_url":"https://avatars.githubusercontent.com/u/10948339?v=3","gravatar_id":"","url":"https://api.github.com/users/sli-cs","html_url":"https://github.com/sli-cs","followers_url":"https://api.github.com/users/sli-cs/followers","following_url":"https://api.github.com/users/sli-cs/following{/other_user}","gists_url":"https://api.github.com/users/sli-cs/gists{/gist_id}","starred_url":"https://api.github.com/users/sli-cs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sli-cs/subscriptions","organizations_url":"https://api.github.com/users/sli-cs/orgs","repos_url":"https://api.github.com/users/sli-cs/repos","events_url":"https://api.github.com/users/sli-cs/events{/privacy}","received_events_url":"https://api.github.com/users/sli-cs/received_events","type":"User","site_admin":false},"body":"```\r\nException e = new Exception(\"XXX cancled\");\r\n```","created_at":"2015-09-28T13:51:40Z","updated_at":"2015-09-28T13:51:40Z","html_url":"https://github.com/callstats-io/callstats.java/pull/2#discussion_r40553584","pull_request_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/comments/40553584"},"html":{"href":"https://github.com/callstats-io/callstats.java/pull/2#discussion_r40553584"},"pull_request":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2","id":44344845,"html_url":"https://github.com/callstats-io/callstats.java/pull/2","diff_url":"https://github.com/callstats-io/callstats.java/pull/2.diff","patch_url":"https://github.com/callstats-io/callstats.java/pull/2.patch","issue_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/2","number":2,"state":"open","locked":false,"title":"Intial callstats java sdk branch","user":{"login":"karthikbr82","id":12692403,"avatar_url":"https://avatars.githubusercontent.com/u/12692403?v=3","gravatar_id":"","url":"https://api.github.com/users/karthikbr82","html_url":"https://github.com/karthikbr82","followers_url":"https://api.github.com/users/karthikbr82/followers","following_url":"https://api.github.com/users/karthikbr82/following{/other_user}","gists_url":"https://api.github.com/users/karthikbr82/gists{/gist_id}","starred_url":"https://api.github.com/users/karthikbr82/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karthikbr82/subscriptions","organizations_url":"https://api.github.com/users/karthikbr82/orgs","repos_url":"https://api.github.com/users/karthikbr82/repos","events_url":"https://api.github.com/users/karthikbr82/events{/privacy}","received_events_url":"https://api.github.com/users/karthikbr82/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-07T11:12:22Z","updated_at":"2015-09-28T13:51:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bde86a4e2b9a37175171032a981cf9b178cbd0d9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2/commits","review_comments_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2/comments","review_comment_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls/comments{/number}","comments_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/2/comments","statuses_url":"https://api.github.com/repos/callstats-io/callstats.java/statuses/77a18e05bb59aaaff576f4e3436f9db2c0d31220","head":{"label":"callstats-io:intial-callstats-java-sdk-branch","ref":"intial-callstats-java-sdk-branch","sha":"77a18e05bb59aaaff576f4e3436f9db2c0d31220","user":{"login":"callstats-io","id":6125819,"avatar_url":"https://avatars.githubusercontent.com/u/6125819?v=3","gravatar_id":"","url":"https://api.github.com/users/callstats-io","html_url":"https://github.com/callstats-io","followers_url":"https://api.github.com/users/callstats-io/followers","following_url":"https://api.github.com/users/callstats-io/following{/other_user}","gists_url":"https://api.github.com/users/callstats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/callstats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/callstats-io/subscriptions","organizations_url":"https://api.github.com/users/callstats-io/orgs","repos_url":"https://api.github.com/users/callstats-io/repos","events_url":"https://api.github.com/users/callstats-io/events{/privacy}","received_events_url":"https://api.github.com/users/callstats-io/received_events","type":"Organization","site_admin":false},"repo":{"id":23653549,"name":"callstats.java","full_name":"callstats-io/callstats.java","owner":{"login":"callstats-io","id":6125819,"avatar_url":"https://avatars.githubusercontent.com/u/6125819?v=3","gravatar_id":"","url":"https://api.github.com/users/callstats-io","html_url":"https://github.com/callstats-io","followers_url":"https://api.github.com/users/callstats-io/followers","following_url":"https://api.github.com/users/callstats-io/following{/other_user}","gists_url":"https://api.github.com/users/callstats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/callstats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/callstats-io/subscriptions","organizations_url":"https://api.github.com/users/callstats-io/orgs","repos_url":"https://api.github.com/users/callstats-io/repos","events_url":"https://api.github.com/users/callstats-io/events{/privacy}","received_events_url":"https://api.github.com/users/callstats-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/callstats-io/callstats.java","description":"A java library to connect Android and java-based WebRTC apps to callstats.io. Also useful for integrating infrastructure components like the jitsi-videobridge, turn-server.","fork":false,"url":"https://api.github.com/repos/callstats-io/callstats.java","forks_url":"https://api.github.com/repos/callstats-io/callstats.java/forks","keys_url":"https://api.github.com/repos/callstats-io/callstats.java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/callstats-io/callstats.java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/callstats-io/callstats.java/teams","hooks_url":"https://api.github.com/repos/callstats-io/callstats.java/hooks","issue_events_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/events{/number}","events_url":"https://api.github.com/repos/callstats-io/callstats.java/events","assignees_url":"https://api.github.com/repos/callstats-io/callstats.java/assignees{/user}","branches_url":"https://api.github.com/repos/callstats-io/callstats.java/branches{/branch}","tags_url":"https://api.github.com/repos/callstats-io/callstats.java/tags","blobs_url":"https://api.github.com/repos/callstats-io/callstats.java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/callstats-io/callstats.java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/callstats-io/callstats.java/git/refs{/sha}","trees_url":"https://api.github.com/repos/callstats-io/callstats.java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/callstats-io/callstats.java/statuses/{sha}","languages_url":"https://api.github.com/repos/callstats-io/callstats.java/languages","stargazers_url":"https://api.github.com/repos/callstats-io/callstats.java/stargazers","contributors_url":"https://api.github.com/repos/callstats-io/callstats.java/contributors","subscribers_url":"https://api.github.com/repos/callstats-io/callstats.java/subscribers","subscription_url":"https://api.github.com/repos/callstats-io/callstats.java/subscription","commits_url":"https://api.github.com/repos/callstats-io/callstats.java/commits{/sha}","git_commits_url":"https://api.github.com/repos/callstats-io/callstats.java/git/commits{/sha}","comments_url":"https://api.github.com/repos/callstats-io/callstats.java/comments{/number}","issue_comment_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/comments{/number}","contents_url":"https://api.github.com/repos/callstats-io/callstats.java/contents/{+path}","compare_url":"https://api.github.com/repos/callstats-io/callstats.java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/callstats-io/callstats.java/merges","archive_url":"https://api.github.com/repos/callstats-io/callstats.java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/callstats-io/callstats.java/downloads","issues_url":"https://api.github.com/repos/callstats-io/callstats.java/issues{/number}","pulls_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls{/number}","milestones_url":"https://api.github.com/repos/callstats-io/callstats.java/milestones{/number}","notifications_url":"https://api.github.com/repos/callstats-io/callstats.java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/callstats-io/callstats.java/labels{/name}","releases_url":"https://api.github.com/repos/callstats-io/callstats.java/releases{/id}","created_at":"2014-09-04T07:53:44Z","updated_at":"2015-09-07T16:15:29Z","pushed_at":"2015-09-28T11:08:48Z","git_url":"git://github.com/callstats-io/callstats.java.git","ssh_url":"git@github.com:callstats-io/callstats.java.git","clone_url":"https://github.com/callstats-io/callstats.java.git","svn_url":"https://github.com/callstats-io/callstats.java","homepage":null,"size":186,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"callstats-io:master","ref":"master","sha":"120ba35ed061c5b84fc1e6356addeea380028d58","user":{"login":"callstats-io","id":6125819,"avatar_url":"https://avatars.githubusercontent.com/u/6125819?v=3","gravatar_id":"","url":"https://api.github.com/users/callstats-io","html_url":"https://github.com/callstats-io","followers_url":"https://api.github.com/users/callstats-io/followers","following_url":"https://api.github.com/users/callstats-io/following{/other_user}","gists_url":"https://api.github.com/users/callstats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/callstats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/callstats-io/subscriptions","organizations_url":"https://api.github.com/users/callstats-io/orgs","repos_url":"https://api.github.com/users/callstats-io/repos","events_url":"https://api.github.com/users/callstats-io/events{/privacy}","received_events_url":"https://api.github.com/users/callstats-io/received_events","type":"Organization","site_admin":false},"repo":{"id":23653549,"name":"callstats.java","full_name":"callstats-io/callstats.java","owner":{"login":"callstats-io","id":6125819,"avatar_url":"https://avatars.githubusercontent.com/u/6125819?v=3","gravatar_id":"","url":"https://api.github.com/users/callstats-io","html_url":"https://github.com/callstats-io","followers_url":"https://api.github.com/users/callstats-io/followers","following_url":"https://api.github.com/users/callstats-io/following{/other_user}","gists_url":"https://api.github.com/users/callstats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/callstats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/callstats-io/subscriptions","organizations_url":"https://api.github.com/users/callstats-io/orgs","repos_url":"https://api.github.com/users/callstats-io/repos","events_url":"https://api.github.com/users/callstats-io/events{/privacy}","received_events_url":"https://api.github.com/users/callstats-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/callstats-io/callstats.java","description":"A java library to connect Android and java-based WebRTC apps to callstats.io. Also useful for integrating infrastructure components like the jitsi-videobridge, turn-server.","fork":false,"url":"https://api.github.com/repos/callstats-io/callstats.java","forks_url":"https://api.github.com/repos/callstats-io/callstats.java/forks","keys_url":"https://api.github.com/repos/callstats-io/callstats.java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/callstats-io/callstats.java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/callstats-io/callstats.java/teams","hooks_url":"https://api.github.com/repos/callstats-io/callstats.java/hooks","issue_events_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/events{/number}","events_url":"https://api.github.com/repos/callstats-io/callstats.java/events","assignees_url":"https://api.github.com/repos/callstats-io/callstats.java/assignees{/user}","branches_url":"https://api.github.com/repos/callstats-io/callstats.java/branches{/branch}","tags_url":"https://api.github.com/repos/callstats-io/callstats.java/tags","blobs_url":"https://api.github.com/repos/callstats-io/callstats.java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/callstats-io/callstats.java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/callstats-io/callstats.java/git/refs{/sha}","trees_url":"https://api.github.com/repos/callstats-io/callstats.java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/callstats-io/callstats.java/statuses/{sha}","languages_url":"https://api.github.com/repos/callstats-io/callstats.java/languages","stargazers_url":"https://api.github.com/repos/callstats-io/callstats.java/stargazers","contributors_url":"https://api.github.com/repos/callstats-io/callstats.java/contributors","subscribers_url":"https://api.github.com/repos/callstats-io/callstats.java/subscribers","subscription_url":"https://api.github.com/repos/callstats-io/callstats.java/subscription","commits_url":"https://api.github.com/repos/callstats-io/callstats.java/commits{/sha}","git_commits_url":"https://api.github.com/repos/callstats-io/callstats.java/git/commits{/sha}","comments_url":"https://api.github.com/repos/callstats-io/callstats.java/comments{/number}","issue_comment_url":"https://api.github.com/repos/callstats-io/callstats.java/issues/comments{/number}","contents_url":"https://api.github.com/repos/callstats-io/callstats.java/contents/{+path}","compare_url":"https://api.github.com/repos/callstats-io/callstats.java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/callstats-io/callstats.java/merges","archive_url":"https://api.github.com/repos/callstats-io/callstats.java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/callstats-io/callstats.java/downloads","issues_url":"https://api.github.com/repos/callstats-io/callstats.java/issues{/number}","pulls_url":"https://api.github.com/repos/callstats-io/callstats.java/pulls{/number}","milestones_url":"https://api.github.com/repos/callstats-io/callstats.java/milestones{/number}","notifications_url":"https://api.github.com/repos/callstats-io/callstats.java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/callstats-io/callstats.java/labels{/name}","releases_url":"https://api.github.com/repos/callstats-io/callstats.java/releases{/id}","created_at":"2014-09-04T07:53:44Z","updated_at":"2015-09-07T16:15:29Z","pushed_at":"2015-09-28T11:08:48Z","git_url":"git://github.com/callstats-io/callstats.java.git","ssh_url":"git@github.com:callstats-io/callstats.java.git","clone_url":"https://github.com/callstats-io/callstats.java.git","svn_url":"https://github.com/callstats-io/callstats.java","homepage":null,"size":186,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2"},"html":{"href":"https://github.com/callstats-io/callstats.java/pull/2"},"issue":{"href":"https://api.github.com/repos/callstats-io/callstats.java/issues/2"},"comments":{"href":"https://api.github.com/repos/callstats-io/callstats.java/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/callstats-io/callstats.java/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/callstats-io/callstats.java/statuses/77a18e05bb59aaaff576f4e3436f9db2c0d31220"}}}}