{"action":"created","comment":{"url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/comments/62984413","id":62984413,"diff_hunk":"@@ -0,0 +1,310 @@\n+<%\n+/*\n+ * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n+ *\n+ * WSO2 Inc. licenses this file to you under the Apache License,\n+ * Version 2.0 (the \"License\"); you may not use this file except\n+ * in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing,\n+ * software distributed under the License is distributed on an\n+ * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n+ * KIND, either express or implied. See the License for the\n+ * specific language governing permissions and limitations\n+ * under the License.\n+ */\n+\n+/**\n+ * This RESTClientInvoker is the where actual backed call is made. It may be a pure HTTP request or XMLHTTP request.\n+ */\n+var RESTClientInvoker = function () {\n+    var log = new Log(\"/controllers/api/RESTClientInvoker.jag\");\n+    var publicXMLHTTPInvokers = {};\n+    var publicHTTPInvokers = {};\n+    var privateMethods = {};\n+    var TOKEN_EXPIRED = \"Access token expired\";\n+    var TOKEN_INVALID = \"Invalid input. Access token validation failed\";\n+    var constants = require(\"/controllers/constants/constants.js\");\n+    var tokenUtil = require(\"/modules/tokenUtil.js\").tokenUtil;\n+\n+    /**\n+     * This method add OAuth authentication header to outgoing XML HTTP Requests if OAuth authentication is enabled.\n+     * @param method             HTTP request type.\n+     * @param url                target url.\n+     * @param payload            payload/data which need to be send.\n+     * @param successCallback    a function to be called if the respond if successful.\n+     * @param errorCallback      a function to be called if en error is reserved.\n+     * @param contentType        requested endpoint should be supported this media type\n+     * @param acceptType         this is the media type which is accepted\n+     */\n+    privateMethods.XMLHTTPRequest = function (method, url, payload, successCallback, errorCallback, contentType,\n+                                              acceptType) {\n+        var execute = function (count) {\n+            var xmlHttpRequest = new XMLHttpRequest();\n+            xmlHttpRequest.open(method, url);\n+            xmlHttpRequest.setRequestHeader(constants.CONTENT_TYPE_IDENTIFIER, contentType);\n+            xmlHttpRequest.setRequestHeader(constants.ACCEPT_IDENTIFIER, acceptType);\n+            if (tokenUtil.checkOAuthEnabled()) {\n+                tokenUtil.setAccessToken(xmlHttpRequest, function (modifiedXHR) {\n+                    xmlHttpRequest = modifiedXHR;\n+                    if (xmlHttpRequest === null) {\n+                        log.error(\"Your login session is expired. Please login again\");\n+                    }\n+                });\n+            } else {\n+                log.debug(\"OAuth hasn't been enabled yet. This will cause problems if backed is secured with OAuth\");\n+            }\n+            xmlHttpRequest.send(payload);\n+            if ((xmlHttpRequest.status >= 200 && xmlHttpRequest.status < 300) || xmlHttpRequest.status == 302) {\n+                return successCallback(xmlHttpRequest);\n+            } else if (xmlHttpRequest.status == 401 && (xmlHttpRequest.responseText == TOKEN_EXPIRED ||\n+                    xmlHttpRequest.responseText == TOKEN_INVALID ) && count < 3) {\n+                tokenUtil.refreshAccessToken(function (status) {\n+                    if (status) {\n+                        return execute(count + 1);\n+                    } else {\n+                        return errorCallback(xmlHttpRequest);\n+                    }\n+                });\n+            } else {\n+                return errorCallback(xmlHttpRequest);\n+            }\n+        };\n+        return execute(0);\n+    }\n+\n+    /**\n+     * This method invokes return XMLHTTPRequest for get calls\n+     * @param url              target url.\n+     * @param successCallback  a function to be called if the respond if successful.\n+     * @param errorCallback    a function to be called if en error is reserved.\n+     * @param contentType        requested endpoint should be supported this media type\n+     * @param acceptType         this is the media type which is accepted\n+     */\n+    publicXMLHTTPInvokers.GET = function (url, successCallback, errorCallback, contentType, acceptType) {\n+        var payload = null;\n+        return privateMethods.XMLHTTPRequest(constants.HTTP_GET, url, payload, successCallback, errorCallback,\n+                contentType, acceptType);\n+    };\n+\n+    /**\n+     * This method invokes return XMLHTTPRequest for post calls\n+     * @param url              target url.\n+     * @param payload          payload/data which need to be send.\n+     * @param successCallback  a function to be called if the respond if successful.\n+     * @param errorCallback    a function to be called if en error is reserved.\n+     * @param contentType        requested endpoint should be supported this media type\n+     * @param acceptType         this is the media type which is accepted\n+     */\n+    publicXMLHTTPInvokers.POST = function (url, payload, successCallback, errorCallback, contentType, acceptType) {\n+        return privateMethods.XMLHTTPRequest(constants.HTTP_POST, url, payload, successCallback, errorCallback,\n+                contentType, acceptType);\n+    };\n+\n+    /**\n+     * This method invokes return XMLHTTPRequest for put calls\n+     * @param url               target url.\n+     * @param payload           payload/data which need to be send.\n+     * @param successCallback   a function to be called if the respond if successful.\n+     * @param errorCallback     a function to be called if en error is reserved.\n+     * @param contentType        requested endpoint should be supported this media type\n+     * @param acceptType         this is the media type which is accepted\n+     */\n+    publicXMLHTTPInvokers.PUT = function (url, payload, successCallback, errorCallback, contentType, acceptType) {\n+        return privateMethods.XMLHTTPRequest(constants.HTTP_PUT, url, payload, successCallback, errorCallback,\n+                contentType, acceptType);\n+    };\n+\n+    /**\n+     * This method invokes return XMLHTTPRequest for delete calls\n+     * @param url                target url.\n+     * @param successCallback    a function to be called if the respond if successful.\n+     * @param errorCallback      a function to be called if en error is reserved.\n+     * @param contentType        requested endpoint should be supported this media type\n+     * @param acceptType         this is the media type which is accepted\n+     */\n+    publicXMLHTTPInvokers.DELETE = function (url, successCallback, errorCallback, contentType, acceptType) {\n+        var payload = null;\n+        return privateMethods.XMLHTTPRequest(constants.HTTP_DELETE, url, payload, successCallback, errorCallback,\n+                contentType, acceptType);\n+    };\n+\n+    /**\n+     * This method add Oauth authentication header to outgoing HTTPClient Requests if Oauth authentication is enabled.\n+     * @param method          HTTP request type.\n+     * @param url             target url.\n+     * @param payload         payload/data which need to be send.\n+     * @param successCallback a function to be called if the respond if successful.\n+     * @param errorCallback   a function to be called if en error is reserved.\n+     * @param contentType     requested endpoint should be supported this media type\n+     * @param acceptType      this is the media type which is accepted\n+     */\n+    privateMethods.HTTPRequest = function (method, url, payload, successCallback, errorCallback, contentType,\n+                                           acceptType) {\n+        var HttpClient = Packages.org.apache.commons.httpclient.HttpClient;","path":"apps/portal/controllers/apis/RESTClientInvoker.jag","position":147,"original_position":147,"commit_id":"aab4221b73c9273d90f955d73352e974e0754f7f","original_commit_id":"aab4221b73c9273d90f955d73352e974e0754f7f","user":{"login":"GPrathap","id":7587302,"avatar_url":"https://avatars.githubusercontent.com/u/7587302?v=3","gravatar_id":"","url":"https://api.github.com/users/GPrathap","html_url":"https://github.com/GPrathap","followers_url":"https://api.github.com/users/GPrathap/followers","following_url":"https://api.github.com/users/GPrathap/following{/other_user}","gists_url":"https://api.github.com/users/GPrathap/gists{/gist_id}","starred_url":"https://api.github.com/users/GPrathap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GPrathap/subscriptions","organizations_url":"https://api.github.com/users/GPrathap/orgs","repos_url":"https://api.github.com/users/GPrathap/repos","events_url":"https://api.github.com/users/GPrathap/events{/privacy}","received_events_url":"https://api.github.com/users/GPrathap/received_events","type":"User","site_admin":false},"body":"I had a chat with the person who implemented back-end APIs for file downloading in IoTS. So he also tried to use that HTTP client which Jaggery is proving but problem is that client doesn't support the stream processing like file downloading. So that is why he used Apache common HTTP client for that  so we can't change it ","created_at":"2016-05-12T08:47:05Z","updated_at":"2016-05-12T08:47:05Z","html_url":"https://github.com/wso2/carbon-dashboards/pull/202#discussion_r62984413","pull_request_url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202","_links":{"self":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/comments/62984413"},"html":{"href":"https://github.com/wso2/carbon-dashboards/pull/202#discussion_r62984413"},"pull_request":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202"}}},"pull_request":{"url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202","id":69673266,"html_url":"https://github.com/wso2/carbon-dashboards/pull/202","diff_url":"https://github.com/wso2/carbon-dashboards/pull/202.diff","patch_url":"https://github.com/wso2/carbon-dashboards/pull/202.patch","issue_url":"https://api.github.com/repos/wso2/carbon-dashboards/issues/202","number":202,"state":"open","locked":false,"title":"Adding feature to access the secured backend APIs at gadgets level","user":{"login":"GPrathap","id":7587302,"avatar_url":"https://avatars.githubusercontent.com/u/7587302?v=3","gravatar_id":"","url":"https://api.github.com/users/GPrathap","html_url":"https://github.com/GPrathap","followers_url":"https://api.github.com/users/GPrathap/followers","following_url":"https://api.github.com/users/GPrathap/following{/other_user}","gists_url":"https://api.github.com/users/GPrathap/gists{/gist_id}","starred_url":"https://api.github.com/users/GPrathap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GPrathap/subscriptions","organizations_url":"https://api.github.com/users/GPrathap/orgs","repos_url":"https://api.github.com/users/GPrathap/repos","events_url":"https://api.github.com/users/GPrathap/events{/privacy}","received_events_url":"https://api.github.com/users/GPrathap/received_events","type":"User","site_admin":false},"body":"If SSO is enabled, obtaining a token (OAuth2) using SAML Token and if SSO is disabled a token is generated (OAuth2) using password grant type. So when creating request from gadget level it will first redirected to remoteClient shindig feature. Afterwards, it will be redirected to either HTTPClient or XMLHTTPClient. This where an actual request is made to give backed REST service. If OAuth is enabled access token is being set in request header otherwise this part won't happen","created_at":"2016-05-11T13:38:11Z","updated_at":"2016-05-12T08:47:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c476361fdaae01085553365c2d0143e11a5506e1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202/commits","review_comments_url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202/comments","review_comment_url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/comments{/number}","comments_url":"https://api.github.com/repos/wso2/carbon-dashboards/issues/202/comments","statuses_url":"https://api.github.com/repos/wso2/carbon-dashboards/statuses/aab4221b73c9273d90f955d73352e974e0754f7f","head":{"label":"GPrathap:master","ref":"master","sha":"aab4221b73c9273d90f955d73352e974e0754f7f","user":{"login":"GPrathap","id":7587302,"avatar_url":"https://avatars.githubusercontent.com/u/7587302?v=3","gravatar_id":"","url":"https://api.github.com/users/GPrathap","html_url":"https://github.com/GPrathap","followers_url":"https://api.github.com/users/GPrathap/followers","following_url":"https://api.github.com/users/GPrathap/following{/other_user}","gists_url":"https://api.github.com/users/GPrathap/gists{/gist_id}","starred_url":"https://api.github.com/users/GPrathap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GPrathap/subscriptions","organizations_url":"https://api.github.com/users/GPrathap/orgs","repos_url":"https://api.github.com/users/GPrathap/repos","events_url":"https://api.github.com/users/GPrathap/events{/privacy}","received_events_url":"https://api.github.com/users/GPrathap/received_events","type":"User","site_admin":false},"repo":{"id":58538673,"name":"carbon-dashboards","full_name":"GPrathap/carbon-dashboards","owner":{"login":"GPrathap","id":7587302,"avatar_url":"https://avatars.githubusercontent.com/u/7587302?v=3","gravatar_id":"","url":"https://api.github.com/users/GPrathap","html_url":"https://github.com/GPrathap","followers_url":"https://api.github.com/users/GPrathap/followers","following_url":"https://api.github.com/users/GPrathap/following{/other_user}","gists_url":"https://api.github.com/users/GPrathap/gists{/gist_id}","starred_url":"https://api.github.com/users/GPrathap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GPrathap/subscriptions","organizations_url":"https://api.github.com/users/GPrathap/orgs","repos_url":"https://api.github.com/users/GPrathap/repos","events_url":"https://api.github.com/users/GPrathap/events{/privacy}","received_events_url":"https://api.github.com/users/GPrathap/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/GPrathap/carbon-dashboards","description":"","fork":true,"url":"https://api.github.com/repos/GPrathap/carbon-dashboards","forks_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/forks","keys_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/teams","hooks_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/hooks","issue_events_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/issues/events{/number}","events_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/events","assignees_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/assignees{/user}","branches_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/branches{/branch}","tags_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/tags","blobs_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/git/refs{/sha}","trees_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/statuses/{sha}","languages_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/languages","stargazers_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/stargazers","contributors_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/contributors","subscribers_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/subscribers","subscription_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/subscription","commits_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/commits{/sha}","git_commits_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/git/commits{/sha}","comments_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/comments{/number}","issue_comment_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/issues/comments{/number}","contents_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/contents/{+path}","compare_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/merges","archive_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/downloads","issues_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/issues{/number}","pulls_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/pulls{/number}","milestones_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/milestones{/number}","notifications_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/labels{/name}","releases_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/releases{/id}","deployments_url":"https://api.github.com/repos/GPrathap/carbon-dashboards/deployments","created_at":"2016-05-11T11:21:33Z","updated_at":"2016-05-11T11:21:37Z","pushed_at":"2016-05-11T12:31:07Z","git_url":"git://github.com/GPrathap/carbon-dashboards.git","ssh_url":"git@github.com:GPrathap/carbon-dashboards.git","clone_url":"https://github.com/GPrathap/carbon-dashboards.git","svn_url":"https://github.com/GPrathap/carbon-dashboards","homepage":null,"size":9179,"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":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"wso2:master","ref":"master","sha":"10f9934e4a58867115359b3150ef6f06128f6fc7","user":{"login":"wso2","id":533043,"avatar_url":"https://avatars.githubusercontent.com/u/533043?v=3","gravatar_id":"","url":"https://api.github.com/users/wso2","html_url":"https://github.com/wso2","followers_url":"https://api.github.com/users/wso2/followers","following_url":"https://api.github.com/users/wso2/following{/other_user}","gists_url":"https://api.github.com/users/wso2/gists{/gist_id}","starred_url":"https://api.github.com/users/wso2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wso2/subscriptions","organizations_url":"https://api.github.com/users/wso2/orgs","repos_url":"https://api.github.com/users/wso2/repos","events_url":"https://api.github.com/users/wso2/events{/privacy}","received_events_url":"https://api.github.com/users/wso2/received_events","type":"Organization","site_admin":false},"repo":{"id":36008880,"name":"carbon-dashboards","full_name":"wso2/carbon-dashboards","owner":{"login":"wso2","id":533043,"avatar_url":"https://avatars.githubusercontent.com/u/533043?v=3","gravatar_id":"","url":"https://api.github.com/users/wso2","html_url":"https://github.com/wso2","followers_url":"https://api.github.com/users/wso2/followers","following_url":"https://api.github.com/users/wso2/following{/other_user}","gists_url":"https://api.github.com/users/wso2/gists{/gist_id}","starred_url":"https://api.github.com/users/wso2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wso2/subscriptions","organizations_url":"https://api.github.com/users/wso2/orgs","repos_url":"https://api.github.com/users/wso2/repos","events_url":"https://api.github.com/users/wso2/events{/privacy}","received_events_url":"https://api.github.com/users/wso2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/wso2/carbon-dashboards","description":"","fork":false,"url":"https://api.github.com/repos/wso2/carbon-dashboards","forks_url":"https://api.github.com/repos/wso2/carbon-dashboards/forks","keys_url":"https://api.github.com/repos/wso2/carbon-dashboards/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wso2/carbon-dashboards/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wso2/carbon-dashboards/teams","hooks_url":"https://api.github.com/repos/wso2/carbon-dashboards/hooks","issue_events_url":"https://api.github.com/repos/wso2/carbon-dashboards/issues/events{/number}","events_url":"https://api.github.com/repos/wso2/carbon-dashboards/events","assignees_url":"https://api.github.com/repos/wso2/carbon-dashboards/assignees{/user}","branches_url":"https://api.github.com/repos/wso2/carbon-dashboards/branches{/branch}","tags_url":"https://api.github.com/repos/wso2/carbon-dashboards/tags","blobs_url":"https://api.github.com/repos/wso2/carbon-dashboards/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wso2/carbon-dashboards/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wso2/carbon-dashboards/git/refs{/sha}","trees_url":"https://api.github.com/repos/wso2/carbon-dashboards/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wso2/carbon-dashboards/statuses/{sha}","languages_url":"https://api.github.com/repos/wso2/carbon-dashboards/languages","stargazers_url":"https://api.github.com/repos/wso2/carbon-dashboards/stargazers","contributors_url":"https://api.github.com/repos/wso2/carbon-dashboards/contributors","subscribers_url":"https://api.github.com/repos/wso2/carbon-dashboards/subscribers","subscription_url":"https://api.github.com/repos/wso2/carbon-dashboards/subscription","commits_url":"https://api.github.com/repos/wso2/carbon-dashboards/commits{/sha}","git_commits_url":"https://api.github.com/repos/wso2/carbon-dashboards/git/commits{/sha}","comments_url":"https://api.github.com/repos/wso2/carbon-dashboards/comments{/number}","issue_comment_url":"https://api.github.com/repos/wso2/carbon-dashboards/issues/comments{/number}","contents_url":"https://api.github.com/repos/wso2/carbon-dashboards/contents/{+path}","compare_url":"https://api.github.com/repos/wso2/carbon-dashboards/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wso2/carbon-dashboards/merges","archive_url":"https://api.github.com/repos/wso2/carbon-dashboards/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wso2/carbon-dashboards/downloads","issues_url":"https://api.github.com/repos/wso2/carbon-dashboards/issues{/number}","pulls_url":"https://api.github.com/repos/wso2/carbon-dashboards/pulls{/number}","milestones_url":"https://api.github.com/repos/wso2/carbon-dashboards/milestones{/number}","notifications_url":"https://api.github.com/repos/wso2/carbon-dashboards/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wso2/carbon-dashboards/labels{/name}","releases_url":"https://api.github.com/repos/wso2/carbon-dashboards/releases{/id}","deployments_url":"https://api.github.com/repos/wso2/carbon-dashboards/deployments","created_at":"2015-05-21T11:25:31Z","updated_at":"2016-03-16T13:52:54Z","pushed_at":"2016-05-12T08:18:53Z","git_url":"git://github.com/wso2/carbon-dashboards.git","ssh_url":"git@github.com:wso2/carbon-dashboards.git","clone_url":"https://github.com/wso2/carbon-dashboards.git","svn_url":"https://github.com/wso2/carbon-dashboards","homepage":null,"size":37978,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":38,"mirror_url":null,"open_issues_count":9,"forks":38,"open_issues":9,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202"},"html":{"href":"https://github.com/wso2/carbon-dashboards/pull/202"},"issue":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/issues/202"},"comments":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/issues/202/comments"},"review_comments":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202/comments"},"review_comment":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/pulls/202/commits"},"statuses":{"href":"https://api.github.com/repos/wso2/carbon-dashboards/statuses/aab4221b73c9273d90f955d73352e974e0754f7f"}}}}