{"action":"created","comment":{"url":"https://api.github.com/repos/apache/cloudstack/pulls/comments/41699540","id":41699540,"diff_hunk":"@@ -0,0 +1,214 @@\n+//Licensed to the Apache Software Foundation (ASF) under one\n+//or more contributor license agreements.  See the NOTICE file\n+//distributed with this work for additional information\n+//regarding copyright ownership.  The ASF licenses this file\n+//to you under the Apache License, Version 2.0 (the\n+//\"License\"); you may not use this file except in compliance\n+//with the License.  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+package org.apache.cloudstack.quota.dao;\n+\n+import com.cloud.exception.InvalidParameterValueException;\n+import com.cloud.utils.db.Filter;\n+import com.cloud.utils.db.GenericDaoBase;\n+import com.cloud.utils.db.SearchCriteria;\n+import com.cloud.utils.db.TransactionLegacy;\n+import com.cloud.utils.exception.CloudRuntimeException;\n+import org.apache.cloudstack.quota.vo.QuotaBalanceVO;\n+import org.apache.log4j.Logger;\n+import org.springframework.stereotype.Component;\n+\n+import javax.ejb.Local;\n+import java.math.BigDecimal;\n+import java.util.ArrayList;\n+import java.util.Date;\n+import java.util.List;\n+\n+@Component\n+@Local(value = { QuotaBalanceDao.class })\n+public class QuotaBalanceDaoImpl extends GenericDaoBase<QuotaBalanceVO, Long> implements QuotaBalanceDao {\n+    private static final Logger s_logger = Logger.getLogger(QuotaBalanceDaoImpl.class.getName());\n+\n+    @SuppressWarnings(\"deprecation\")\n+    @Override\n+    public QuotaBalanceVO findLastBalanceEntry(final Long accountId, final Long domainId, final Date beforeThis) {\n+        List<QuotaBalanceVO> quotaBalanceEntries = new ArrayList<>();\n+        final short opendb = TransactionLegacy.currentTxn().getDatabaseId();\n+        try {\n+            TransactionLegacy.open(TransactionLegacy.USAGE_DB).close();\n+            Filter filter = new Filter(QuotaBalanceVO.class, \"updatedOn\", false, 0L, 1L);\n+            SearchCriteria<QuotaBalanceVO> sc = createSearchCriteria();\n+            sc.addAnd(\"accountId\", SearchCriteria.Op.EQ, accountId);\n+            sc.addAnd(\"domainId\", SearchCriteria.Op.EQ, domainId);\n+            sc.addAnd(\"creditsId\", SearchCriteria.Op.EQ, 0);\n+            sc.addAnd(\"updatedOn\", SearchCriteria.Op.LT, beforeThis);\n+            quotaBalanceEntries = this.search(sc, filter);\n+        } catch (Exception e) {\n+            s_logger.error(\"QuotaBalanceDaoImpl::findLastBalanceEntry() failed due to: \" + e.getMessage());\n+            throw new CloudRuntimeException(\"Unable to find last quota balance entry for account\");\n+        } finally {\n+            TransactionLegacy.open(opendb).close();\n+        }\n+        return quotaBalanceEntries.size() > 0 ? quotaBalanceEntries.get(0) : null;\n+    }\n+\n+    @SuppressWarnings(\"deprecation\")\n+    @Override\n+    public QuotaBalanceVO findLaterBalanceEntry(final Long accountId, final Long domainId, final Date afterThis) {\n+        final short opendb = TransactionLegacy.currentTxn().getDatabaseId();\n+        List<QuotaBalanceVO> quotaBalanceEntries = new ArrayList<>();\n+        try {\n+            TransactionLegacy.open(TransactionLegacy.USAGE_DB).close();\n+            Filter filter = new Filter(QuotaBalanceVO.class, \"updatedOn\", true, 0L, 1L);\n+            SearchCriteria<QuotaBalanceVO> sc = createSearchCriteria();\n+            sc.addAnd(\"accountId\", SearchCriteria.Op.EQ, accountId);\n+            sc.addAnd(\"domainId\", SearchCriteria.Op.EQ, domainId);\n+            sc.addAnd(\"creditsId\", SearchCriteria.Op.EQ, 0);\n+            sc.addAnd(\"updatedOn\", SearchCriteria.Op.GT, afterThis);\n+            quotaBalanceEntries = this.search(sc, filter);\n+        } catch (Exception e) {\n+            s_logger.error(\"QuotaBalanceDaoImpl::findLaterBalanceEntry() failed due to: \" + e.getMessage());\n+            throw new CloudRuntimeException(\"Unable to find later quota balance entry\");\n+        } finally {\n+            TransactionLegacy.open(opendb).close();\n+        }\n+        return quotaBalanceEntries.size() > 0 ? quotaBalanceEntries.get(0) : null;\n+    }\n+\n+    @Override\n+    public void saveQuotaBalance(final List<QuotaBalanceVO> credits) {\n+        final short opendb = TransactionLegacy.currentTxn().getDatabaseId();\n+        try (TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.USAGE_DB)) {\n+            for (QuotaBalanceVO credit : credits) {\n+                persist(credit);\n+            }\n+        } catch (Exception e) {\n+            throw new CloudRuntimeException(\"Unable to save quota balance\");\n+        } finally {\n+            TransactionLegacy.open(opendb).close();\n+        }\n+    }\n+\n+    @SuppressWarnings(\"deprecation\")\n+    @Override\n+    public List<QuotaBalanceVO> findCreditBalance(final Long accountId, final Long domainId, final Date lastbalancedate, final Date beforeThis) {\n+        final short opendb = TransactionLegacy.currentTxn().getDatabaseId();\n+        List<QuotaBalanceVO> quotaBalances = new ArrayList<>();\n+        try {\n+            TransactionLegacy.open(TransactionLegacy.USAGE_DB).close();\n+            Filter filter = new Filter(QuotaBalanceVO.class, \"updatedOn\", true, 0L, Long.MAX_VALUE);\n+            SearchCriteria<QuotaBalanceVO> sc = createSearchCriteria();\n+            sc.addAnd(\"accountId\", SearchCriteria.Op.EQ, accountId);\n+            sc.addAnd(\"domainId\", SearchCriteria.Op.EQ, domainId);\n+            sc.addAnd(\"creditsId\", SearchCriteria.Op.GT, 0);\n+            if ((lastbalancedate != null) && (beforeThis != null) && lastbalancedate.before(beforeThis)) {\n+                sc.addAnd(\"updatedOn\", SearchCriteria.Op.BETWEEN, lastbalancedate, beforeThis);\n+            } else {\n+                return new ArrayList<QuotaBalanceVO>();\n+            }\n+            quotaBalances = search(sc, filter);\n+        } catch (Exception e) {\n+            s_logger.error(\"QuotaBalanceDaoImpl::findCreditBalance() failed due to: \" + e.getMessage());\n+            throw new CloudRuntimeException(\"Unable to find quota credit balance\");\n+        } finally {\n+            TransactionLegacy.open(opendb).close();\n+        }\n+        return quotaBalances;\n+    }\n+\n+    @SuppressWarnings(\"deprecation\")\n+    @Override\n+    public List<QuotaBalanceVO> findQuotaBalance(final Long accountId, final Long domainId, final Date startDate, final Date endDate) {\n+        final short opendb = TransactionLegacy.currentTxn().getDatabaseId();\n+\n+        List<QuotaBalanceVO> quotaUsageRecords = null;\n+        try (TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.USAGE_DB)) {\n+            SearchCriteria<QuotaBalanceVO> sc = createSearchCriteria();\n+            if (accountId != null) {\n+                sc.addAnd(\"accountId\", SearchCriteria.Op.EQ, accountId);\n+            }\n+            if (domainId != null) {\n+                sc.addAnd(\"domainId\", SearchCriteria.Op.EQ, domainId);\n+            }\n+            if ((startDate != null) && (endDate != null) && startDate.before(endDate)) {\n+                sc.addAnd(\"updatedOn\", SearchCriteria.Op.BETWEEN, startDate, endDate);\n+            } else {\n+                return new ArrayList<QuotaBalanceVO>();","path":"framework/quota/src/org/apache/cloudstack/quota/dao/QuotaBalanceDaoImpl.java","position":144,"original_position":144,"commit_id":"27fbac57a4c347abb27911eaae4e5ad8e4ade630","original_commit_id":"48b8023dc4b873d2c51bd650c9b8a4d1f8bcff79","user":{"login":"bhaisaab","id":95203,"avatar_url":"https://avatars.githubusercontent.com/u/95203?v=3","gravatar_id":"","url":"https://api.github.com/users/bhaisaab","html_url":"https://github.com/bhaisaab","followers_url":"https://api.github.com/users/bhaisaab/followers","following_url":"https://api.github.com/users/bhaisaab/following{/other_user}","gists_url":"https://api.github.com/users/bhaisaab/gists{/gist_id}","starred_url":"https://api.github.com/users/bhaisaab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhaisaab/subscriptions","organizations_url":"https://api.github.com/users/bhaisaab/orgs","repos_url":"https://api.github.com/users/bhaisaab/repos","events_url":"https://api.github.com/users/bhaisaab/events{/privacy}","received_events_url":"https://api.github.com/users/bhaisaab/received_events","type":"User","site_admin":false},"body":"Not much difference, done.","created_at":"2015-10-10T17:46:22Z","updated_at":"2015-10-10T17:46:22Z","html_url":"https://github.com/apache/cloudstack/pull/768#discussion_r41699540","pull_request_url":"https://api.github.com/repos/apache/cloudstack/pulls/768","_links":{"self":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/comments/41699540"},"html":{"href":"https://github.com/apache/cloudstack/pull/768#discussion_r41699540"},"pull_request":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/768"}}},"pull_request":{"url":"https://api.github.com/repos/apache/cloudstack/pulls/768","id":43838134,"html_url":"https://github.com/apache/cloudstack/pull/768","diff_url":"https://github.com/apache/cloudstack/pull/768.diff","patch_url":"https://github.com/apache/cloudstack/pull/768.patch","issue_url":"https://api.github.com/repos/apache/cloudstack/issues/768","number":768,"state":"open","locked":false,"title":"Quota","user":{"login":"bhaisaab","id":95203,"avatar_url":"https://avatars.githubusercontent.com/u/95203?v=3","gravatar_id":"","url":"https://api.github.com/users/bhaisaab","html_url":"https://github.com/bhaisaab","followers_url":"https://api.github.com/users/bhaisaab/followers","following_url":"https://api.github.com/users/bhaisaab/following{/other_user}","gists_url":"https://api.github.com/users/bhaisaab/gists{/gist_id}","starred_url":"https://api.github.com/users/bhaisaab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhaisaab/subscriptions","organizations_url":"https://api.github.com/users/bhaisaab/orgs","repos_url":"https://api.github.com/users/bhaisaab/repos","events_url":"https://api.github.com/users/bhaisaab/events{/privacy}","received_events_url":"https://api.github.com/users/bhaisaab/received_events","type":"User","site_admin":false},"body":"This pull request is for quota service implementation, divided into following commits:\r\n\r\nQuota server side implementation\r\na. Quota Framework plugin containing Daos\r\nb. Quota database plugin for quota APIs\r\nc. Quota Usage server enhancements\r\nd. Quota UI plugin\r\ne. Tests","created_at":"2015-09-01T05:16:25Z","updated_at":"2015-10-10T17:46:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a6967649e674c4d5534a32c1ba690430b526f448","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/apache/cloudstack/pulls/768/commits","review_comments_url":"https://api.github.com/repos/apache/cloudstack/pulls/768/comments","review_comment_url":"https://api.github.com/repos/apache/cloudstack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/cloudstack/issues/768/comments","statuses_url":"https://api.github.com/repos/apache/cloudstack/statuses/27fbac57a4c347abb27911eaae4e5ad8e4ade630","head":{"label":"shapeblue:quota-master","ref":"quota-master","sha":"27fbac57a4c347abb27911eaae4e5ad8e4ade630","user":{"login":"shapeblue","id":6001764,"avatar_url":"https://avatars.githubusercontent.com/u/6001764?v=3","gravatar_id":"","url":"https://api.github.com/users/shapeblue","html_url":"https://github.com/shapeblue","followers_url":"https://api.github.com/users/shapeblue/followers","following_url":"https://api.github.com/users/shapeblue/following{/other_user}","gists_url":"https://api.github.com/users/shapeblue/gists{/gist_id}","starred_url":"https://api.github.com/users/shapeblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shapeblue/subscriptions","organizations_url":"https://api.github.com/users/shapeblue/orgs","repos_url":"https://api.github.com/users/shapeblue/repos","events_url":"https://api.github.com/users/shapeblue/events{/privacy}","received_events_url":"https://api.github.com/users/shapeblue/received_events","type":"Organization","site_admin":false},"repo":{"id":35481491,"name":"cloudstack","full_name":"shapeblue/cloudstack","owner":{"login":"shapeblue","id":6001764,"avatar_url":"https://avatars.githubusercontent.com/u/6001764?v=3","gravatar_id":"","url":"https://api.github.com/users/shapeblue","html_url":"https://github.com/shapeblue","followers_url":"https://api.github.com/users/shapeblue/followers","following_url":"https://api.github.com/users/shapeblue/following{/other_user}","gists_url":"https://api.github.com/users/shapeblue/gists{/gist_id}","starred_url":"https://api.github.com/users/shapeblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shapeblue/subscriptions","organizations_url":"https://api.github.com/users/shapeblue/orgs","repos_url":"https://api.github.com/users/shapeblue/repos","events_url":"https://api.github.com/users/shapeblue/events{/privacy}","received_events_url":"https://api.github.com/users/shapeblue/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/shapeblue/cloudstack","description":"The upstream repository is at http://github.com/apache/cloudstack. This is ShapeBlue's support/patch branches and Apache CloudStack™ backup","fork":true,"url":"https://api.github.com/repos/shapeblue/cloudstack","forks_url":"https://api.github.com/repos/shapeblue/cloudstack/forks","keys_url":"https://api.github.com/repos/shapeblue/cloudstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shapeblue/cloudstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shapeblue/cloudstack/teams","hooks_url":"https://api.github.com/repos/shapeblue/cloudstack/hooks","issue_events_url":"https://api.github.com/repos/shapeblue/cloudstack/issues/events{/number}","events_url":"https://api.github.com/repos/shapeblue/cloudstack/events","assignees_url":"https://api.github.com/repos/shapeblue/cloudstack/assignees{/user}","branches_url":"https://api.github.com/repos/shapeblue/cloudstack/branches{/branch}","tags_url":"https://api.github.com/repos/shapeblue/cloudstack/tags","blobs_url":"https://api.github.com/repos/shapeblue/cloudstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shapeblue/cloudstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shapeblue/cloudstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/shapeblue/cloudstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shapeblue/cloudstack/statuses/{sha}","languages_url":"https://api.github.com/repos/shapeblue/cloudstack/languages","stargazers_url":"https://api.github.com/repos/shapeblue/cloudstack/stargazers","contributors_url":"https://api.github.com/repos/shapeblue/cloudstack/contributors","subscribers_url":"https://api.github.com/repos/shapeblue/cloudstack/subscribers","subscription_url":"https://api.github.com/repos/shapeblue/cloudstack/subscription","commits_url":"https://api.github.com/repos/shapeblue/cloudstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/shapeblue/cloudstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/shapeblue/cloudstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/shapeblue/cloudstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/shapeblue/cloudstack/contents/{+path}","compare_url":"https://api.github.com/repos/shapeblue/cloudstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shapeblue/cloudstack/merges","archive_url":"https://api.github.com/repos/shapeblue/cloudstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shapeblue/cloudstack/downloads","issues_url":"https://api.github.com/repos/shapeblue/cloudstack/issues{/number}","pulls_url":"https://api.github.com/repos/shapeblue/cloudstack/pulls{/number}","milestones_url":"https://api.github.com/repos/shapeblue/cloudstack/milestones{/number}","notifications_url":"https://api.github.com/repos/shapeblue/cloudstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shapeblue/cloudstack/labels{/name}","releases_url":"https://api.github.com/repos/shapeblue/cloudstack/releases{/id}","created_at":"2015-05-12T10:22:21Z","updated_at":"2015-05-12T10:27:05Z","pushed_at":"2015-10-10T13:52:52Z","git_url":"git://github.com/shapeblue/cloudstack.git","ssh_url":"git@github.com:shapeblue/cloudstack.git","clone_url":"https://github.com/shapeblue/cloudstack.git","svn_url":"https://github.com/shapeblue/cloudstack","homepage":"http://shapeblue.com/packages","size":495144,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"fddf59f8852000c5f3905197508d4cd129f6cc1b","user":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":9759448,"name":"cloudstack","full_name":"apache/cloudstack","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars.githubusercontent.com/u/47359?v=3","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/cloudstack","description":"Mirror of Apache Cloudstack","fork":false,"url":"https://api.github.com/repos/apache/cloudstack","forks_url":"https://api.github.com/repos/apache/cloudstack/forks","keys_url":"https://api.github.com/repos/apache/cloudstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/cloudstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/cloudstack/teams","hooks_url":"https://api.github.com/repos/apache/cloudstack/hooks","issue_events_url":"https://api.github.com/repos/apache/cloudstack/issues/events{/number}","events_url":"https://api.github.com/repos/apache/cloudstack/events","assignees_url":"https://api.github.com/repos/apache/cloudstack/assignees{/user}","branches_url":"https://api.github.com/repos/apache/cloudstack/branches{/branch}","tags_url":"https://api.github.com/repos/apache/cloudstack/tags","blobs_url":"https://api.github.com/repos/apache/cloudstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/cloudstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/cloudstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/cloudstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/cloudstack/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/cloudstack/languages","stargazers_url":"https://api.github.com/repos/apache/cloudstack/stargazers","contributors_url":"https://api.github.com/repos/apache/cloudstack/contributors","subscribers_url":"https://api.github.com/repos/apache/cloudstack/subscribers","subscription_url":"https://api.github.com/repos/apache/cloudstack/subscription","commits_url":"https://api.github.com/repos/apache/cloudstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/cloudstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/cloudstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/cloudstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/cloudstack/contents/{+path}","compare_url":"https://api.github.com/repos/apache/cloudstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/cloudstack/merges","archive_url":"https://api.github.com/repos/apache/cloudstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/cloudstack/downloads","issues_url":"https://api.github.com/repos/apache/cloudstack/issues{/number}","pulls_url":"https://api.github.com/repos/apache/cloudstack/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/cloudstack/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/cloudstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/cloudstack/labels{/name}","releases_url":"https://api.github.com/repos/apache/cloudstack/releases{/id}","created_at":"2013-04-29T22:27:12Z","updated_at":"2015-10-10T07:45:12Z","pushed_at":"2015-10-10T13:52:53Z","git_url":"git://github.com/apache/cloudstack.git","ssh_url":"git@github.com:apache/cloudstack.git","clone_url":"https://github.com/apache/cloudstack.git","svn_url":"https://github.com/apache/cloudstack","homepage":null,"size":760955,"stargazers_count":298,"watchers_count":298,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":384,"mirror_url":"git://git.apache.org/cloudstack.git","open_issues_count":106,"forks":384,"open_issues":106,"watchers":298,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/768"},"html":{"href":"https://github.com/apache/cloudstack/pull/768"},"issue":{"href":"https://api.github.com/repos/apache/cloudstack/issues/768"},"comments":{"href":"https://api.github.com/repos/apache/cloudstack/issues/768/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/768/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/768/commits"},"statuses":{"href":"https://api.github.com/repos/apache/cloudstack/statuses/27fbac57a4c347abb27911eaae4e5ad8e4ade630"}}}}