René's URL Explorer Experiment


Title: Introduce Quota resource statement API by winterhazel · Pull Request #13236 · apache/cloudstack · GitHub

Open Graph Title: Introduce Quota resource statement API by winterhazel · Pull Request #13236 · apache/cloudstack

X Title: Introduce Quota resource statement API by winterhazel · Pull Request #13236 · apache/cloudstack

Description: Description This PR introduces the quotaResourceStatement API to the Quota plugin. This API allows viewing the Quota consumption associated with a specific resource. It will be used by the Quota UI rework in a separate PR. In addition, some adjustments were made in the quotaStatement API in order to allow including the consumption of subdomains in the resulting statement. Types of changes Breaking change (fix or feature that would cause existing functionality to change) New feature (non-breaking change which adds functionality) Bug fix (non-breaking change which fixes an issue) Enhancement (improves an existing feature and functionality) Cleanup (Code refactoring and cleanup, that may add test cases) Build/CI Test (unit or integration test code) Feature/Enhancement Scale or Bug Severity Feature/Enhancement Scale Major Minor How Has This Been Tested? I tested the API by fuzzing its parameters for root admin, domain admin, and user accounts. In the tests, I validated that the API returned the expected response while performing correct permission checking. Environment configuration My environment had two domains: ROOT and d1. MariaDB [cloud]> select uuid,name,path,parent from domain; +--------------------------------------+------+------+--------+ | uuid | name | path | parent | +--------------------------------------+------+------+--------+ | de3f3dfb-f84b-11f0-8ace-32e0826870ba | ROOT | / | NULL | | dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d | d1 | /d1/ | 1 | +--------------------------------------+------+------+--------+ Each domain had a domain admin (dr for ROOT and d1 for d1) and a user account (ur for ROOT and u1 for d1). ROOT also had a project and the root admin. MariaDB [cloud]> select uuid,account_name,domain_id,role_id from account; +--------------------------------------+--------------------------+-----------+---------+ | uuid | account_name | domain_id | role_id | +--------------------------------------+--------------------------+-----------+---------+ | f684aae8-f84b-11f0-8ace-32e0826870ba | system | 1 | 1 | | f684da1a-f84b-11f0-8ace-32e0826870ba | admin | 1 | 1 | | 17dfdcce-fd02-46d0-85ae-7de91fda634c | baremetal-system-account | 1 | 4 | | aaba75a0-a575-41be-80e1-dbea14c10e51 | dr | 1 | 3 | | feaffae2-7ba4-45dc-b46f-20ae86192685 | d1 | 2 | 3 | | 2f49212d-d6d5-437b-800d-a7bb4a8def4b | u1 | 2 | 4 | | b029e8b8-e539-4d1a-906d-3d4f2fb36b82 | ur | 1 | 4 | | b14100c6-d9f6-450e-87a2-0833bb45e5f8 | PrjAcct-aa-1 | 1 | NULL | +--------------------------------------+--------------------------+-----------+---------+ Test 1 (user accounts) id: returns the statement scoped to the owning account when the caller has access to it, and an error when it does not. (u1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46531524, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 5.69112164, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (u1) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource. accountid: returns the statement scoped to the provided account if accessible, or an empty list otherwise. (u1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b (u1) { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46531524, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 5.69112164, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (u1) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b (u1) { "quotaresourcestatement": { "items": [], "totalquota": 0, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } projectid: returns the statement scoped to the provided project if accessible, or an exception otherwise. (u1) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc 🙈 Error: (HTTP 432, error code 9999) The API [quotaResourceStatement] does not exist or is not available for this account/user in project [c1ce41c4-7b01-4386-8264-479db5ace0bc]. (ur) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc { "quotaresourcestatement": { "items": [ { "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42573923, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 22.20631686, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } isrecursive: ignored for user accounts. (ur) 🐱 > quota resourcestatement id=db0db635-df4d-42bb-9aca-19cc3d986ca0 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=true { "quotaresourcestatement": { "items": [ { "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46247754, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 18.9019186, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (ur) 🐱 > quota resourcestatement id=db0db635-df4d-42bb-9aca-19cc3d986ca0 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=false { "quotaresourcestatement": { "items": [ { "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46247754, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 18.9019186, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } Test 2 (domain admins) id: returns the statement scoped to the caller's domain. (d1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46531524, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 14.60737768, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (d1) 🐱 > quota resourcestatement id=db0db635-df4d-42bb-9aca-19cc3d986ca0 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42775528, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 25.15400928, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (d1) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [], "totalquota": 0, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } accountid: returns the statement scoped to the provided account if accessible, or an exception otherwise. (d1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46531524, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 11.44631141, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (d1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=feaffae2-7ba4-45dc-b46f-20ae86192685 { "quotaresourcestatement": { "items": [ { "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685", "enddate": "2026-05-26T20:59:59-0300", "quotaconsumed": 3.16106627, "startdate": "2026-05-25T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" } ], "totalquota": 3.16106627, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (d1) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=f684da1a-f84b-11f0-8ace-32e0826870ba 🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource. projectid: returns the statement scoped to the provided project if accessible, or an exception otherwise. (d1) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc 🙈 Error: (HTTP 531, error code 4365) Account Account [{"accountName":"d1","id":5,"uuid":"feaffae2-7ba4-45dc-b46f-20ae86192685"}] does not have permission to operate within domain id=de3f3dfb-f84b-11f0-8ace-32e0826870ba (dr) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc { "quotaresourcestatement": { "items": [ { "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42573923, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.76108809, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } isrecursive: allows domain admins to generate the statement including usage records of subdomains. (dr) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=true { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 52.70616739, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (dr) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=false { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 33.79573569, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } Test 3 (root admins) id: returns the statement of any resource without limiting. (admin) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.76534465, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=ab6b1ced-d36e-4436-aad2-e78e06005350 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42801677, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.76291791, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=db0db635-df4d-42bb-9aca-19cc3d986ca0 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42775528, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.75638356, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42670996, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.7583256, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } accountid: returns the statement scoped to the provided account. (admin) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b { "quotaresourcestatement": { "items": [ { "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b", "enddate": "2026-05-24T20:59:59-0300", "quotaconsumed": 2.46531524, "startdate": "2026-05-23T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 11.44631141, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=feaffae2-7ba4-45dc-b46f-20ae86192685 { "quotaresourcestatement": { "items": [ { "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685", "enddate": "2026-05-26T20:59:59-0300", "quotaconsumed": 3.16106627, "startdate": "2026-05-25T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" } ], "totalquota": 3.16106627, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=53c791d2-ac8f-4acb-9246-3a2b9eb354ea startdate=2026-01-01 enddate=2027-01-01 usagetype=1 accountid=f684da1a-f84b-11f0-8ace-32e0826870ba { "quotaresourcestatement": { "items": [], "totalquota": 0, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } projectid: returns the statement scoped to the provided project. (admin) 🐱 > quota resourcestatement id=6d7b3c73-7f06-4f23-9210-3af5889790d1 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc { "quotaresourcestatement": { "items": [ { "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42573923, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 39.76108809, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } isrecursive: allows admins to generate the statement including usage records of subdomains. (admin) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 33.79573569, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=true { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 52.70616739, "unit": "Compute*Month", "usagename": "RUNNING_VM" } } (admin) 🐱 > quota resourcestatement id=e4e91818-cbb5-401a-bb42-35d976ea4e01 startdate=2026-01-01 enddate=2027-01-01 usagetype=1 isrecursive=false { "quotaresourcestatement": { "items": [ { "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba", "enddate": "2026-05-21T20:59:59-0300", "quotaconsumed": 1.42880073, "startdate": "2026-05-20T21:00:00-0300", "tariffid": "2b9671f8-a0ec-4127-bcc8-69413375c3c6", "tariffname": "RUNNING_VM" }, ... ], "totalquota": 33.79573569, "unit": "Compute*Month", "usagename": "RUNNING_VM" } }

Open Graph Description: Description This PR introduces the quotaResourceStatement API to the Quota plugin. This API allows viewing the Quota consumption associated with a specific resource. It will be used by the Quota UI...

X Description: Description This PR introduces the quotaResourceStatement API to the Quota plugin. This API allows viewing the Quota consumption associated with a specific resource. It will be used by the Quota UI...

Opengraph URL: https://github.com/apache/cloudstack/pull/13236

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:f8d968f8-e154-7669-ad08-f521e6330a69
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id914A:27F80E:AA40DF:E68ECA:6A4D7436
html-safe-nonce67ffe582e943917c70c3dd10a3784b5139a0b8925608bb8d1249f61b34be1a25
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5MTRBOjI3RjgwRTpBQTQwREY6RTY4RUNBOjZBNEQ3NDM2IiwidmlzaXRvcl9pZCI6IjMxMTA0NjM3NjQ3Nzc3NTk3OTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac70af1d33bcecf48d001f818d04008678473188fe40f8fee6307b18b303232a9d
hovercard-subject-tagpull_request:3743590343
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/apache/cloudstack/pull/13236/files
twitter:imagehttps://avatars.githubusercontent.com/u/25729641?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/25729641?s=400&v=4
og:image:altDescription This PR introduces the quotaResourceStatement API to the Quota plugin. This API allows viewing the Quota consumption associated with a specific resource. It will be used by the Quota UI...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonec78260c7b3f4ac4b0356c8208537f05406a3a2d46a9ec3f735b372dcc519c39e
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/apache/cloudstack git https://github.com/apache/cloudstack.git
octolytics-dimension-user_id47359
octolytics-dimension-user_loginapache
octolytics-dimension-repository_id9759448
octolytics-dimension-repository_nwoapache/cloudstack
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id9759448
octolytics-dimension-repository_network_root_nwoapache/cloudstack
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release399fff412f48461d435721c009efc17ea44be72f
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/apache/cloudstack/pull/13236/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fapache%2Fcloudstack%2Fpull%2F13236%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fapache%2Fcloudstack%2Fpull%2F13236%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=apache%2Fcloudstack
Reloadhttps://github.com/apache/cloudstack/pull/13236/files
Reloadhttps://github.com/apache/cloudstack/pull/13236/files
Reloadhttps://github.com/apache/cloudstack/pull/13236/files
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
apache https://github.com/apache
cloudstackhttps://github.com/apache/cloudstack
Notifications https://github.com/login?return_to=%2Fapache%2Fcloudstack
Fork 1.3k https://github.com/login?return_to=%2Fapache%2Fcloudstack
Star 3k https://github.com/login?return_to=%2Fapache%2Fcloudstack
Code https://github.com/apache/cloudstack
Issues 536 https://github.com/apache/cloudstack/issues
Pull requests 268 https://github.com/apache/cloudstack/pulls
Discussions https://github.com/apache/cloudstack/discussions
Actions https://github.com/apache/cloudstack/actions
Projects https://github.com/apache/cloudstack/projects
Wiki https://github.com/apache/cloudstack/wiki
Security and quality 0 https://github.com/apache/cloudstack/security
Insights https://github.com/apache/cloudstack/pulse
Code https://github.com/apache/cloudstack
Issues https://github.com/apache/cloudstack/issues
Pull requests https://github.com/apache/cloudstack/pulls
Discussions https://github.com/apache/cloudstack/discussions
Actions https://github.com/apache/cloudstack/actions
Projects https://github.com/apache/cloudstack/projects
Wiki https://github.com/apache/cloudstack/wiki
Security and quality https://github.com/apache/cloudstack/security
Insights https://github.com/apache/cloudstack/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fapache%2Fcloudstack%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fapache%2Fcloudstack%2Fissues%2Fnew%2Fchoose
winterhazelhttps://github.com/winterhazel
apache:mainhttps://github.com/apache/cloudstack/tree/main
scclouds:quota-statement-detailshttps://github.com/scclouds/cloudstack/tree/quota-statement-details
Conversation 47 https://github.com/apache/cloudstack/pull/13236
Commits 8 https://github.com/apache/cloudstack/pull/13236/commits
Checks 27 https://github.com/apache/cloudstack/pull/13236/checks
Files changed https://github.com/apache/cloudstack/pull/13236/files
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
Introduce Quota resource statement API https://github.com/apache/cloudstack/pull/13236/files#top
Show all changes 8 commits https://github.com/apache/cloudstack/pull/13236/files
af17bc9 Introduce Quota resource statement API winterhazel May 11, 2026 https://github.com/apache/cloudstack/pull/13236/commits/af17bc916b4996276ea497234d0be5b6482833e9
12ef94b Merge remote-tracking branch 'origin/main' into quota-statement-details winterhazel May 25, 2026 https://github.com/apache/cloudstack/pull/13236/commits/12ef94bbde326d3ad8f656b62787ab4a9f96c5ce
b0ba9a1 Fix pre-commit winterhazel May 25, 2026 https://github.com/apache/cloudstack/pull/13236/commits/b0ba9a11f553f515157b55663be0a219f57dde11
d6e7a9f Add additional unit tests winterhazel May 25, 2026 https://github.com/apache/cloudstack/pull/13236/commits/d6e7a9f467cac989ed2d8b6777a5c85a4168fb2e
f3feb29 Persist all Quota usage related entries inside the same transaction winterhazel May 27, 2026 https://github.com/apache/cloudstack/pull/13236/commits/f3feb29b856f19c4fde5df2d9ae583a6cad50364
dd8a848 Fix checkstyle winterhazel May 27, 2026 https://github.com/apache/cloudstack/pull/13236/commits/dd8a84868ca335157d4fe7094991ae5d42363c35
ff5b47d Merge remote-tracking branch 'upstream/main' into quota-statement-det… winterhazel Jun 8, 2026 https://github.com/apache/cloudstack/pull/13236/commits/ff5b47d0106f3af3449dbbd7ffd5243a559a9e59
511d107 Convert if to else winterhazel Jun 11, 2026 https://github.com/apache/cloudstack/pull/13236/commits/511d1077bd5393592551ccc76b6883705cbd36be
Clear filters https://github.com/apache/cloudstack/pull/13236/files
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
ApiConstants.java https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
schema-42210to42300.sql https://github.com/apache/cloudstack/pull/13236/files#diff-c2a347e8868908a473213b79695fd81420bee5f97f09c1e1c0d488529e17c80e
QuotaManagerImpl.java https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
QuotaTypes.java https://github.com/apache/cloudstack/pull/13236/files#diff-1a15c534918234fded1f7454808c724b2abe2754315db8754dea1fa2899a1ffb
QuotaUsageJoinDao.java https://github.com/apache/cloudstack/pull/13236/files#diff-16df2541be9fb69012185263cb99d4df2fc53be3e69dd78632b25188c0fa9e42
QuotaUsageJoinDaoImpl.java https://github.com/apache/cloudstack/pull/13236/files#diff-1672993bc9f11d5489fc8514960a42ea787cc429d1dda3954c075f894a50964e
QuotaManagerImplTest.java https://github.com/apache/cloudstack/pull/13236/files#diff-dc23096ca6cb97e6bc49877b5f4d1e242ab2ec4ef7b18e7400611e41d3b81ad0
QuotaResourceStatementCmd.java https://github.com/apache/cloudstack/pull/13236/files#diff-3bf3e904891461dae6ad229bc4b33c9ac0397a9d21613ec9aa131b9cef9a116c
QuotaStatementCmd.java https://github.com/apache/cloudstack/pull/13236/files#diff-5ac32cbf94dbaa8ab7c1ff2991c7ba420f390d0eb4b29473650d4ddc31837306
QuotaResourceStatementItemResponse.java https://github.com/apache/cloudstack/pull/13236/files#diff-baac2ba3932209248ebcf80c63fdbcb5e152314f53f32d27b9375344ba264b70
QuotaResourceStatementResponse.java https://github.com/apache/cloudstack/pull/13236/files#diff-45a766ab25e06ebf986bda31487ee0c1470f337e88193d0a69892ebca8e96fc1
QuotaResponseBuilder.java https://github.com/apache/cloudstack/pull/13236/files#diff-362a9863bf911c35f0a20eed9c172f8d1a1cd646f9207a47d901382e525d0c3a
QuotaResponseBuilderImpl.java https://github.com/apache/cloudstack/pull/13236/files#diff-99eb47fe5012ce9667429b55783615fe5191a7298fb056695f34d1179c408b88
QuotaStatementResponse.java https://github.com/apache/cloudstack/pull/13236/files#diff-f1022954c76f5264b2c49b35eea1f3588b280293ee708b02810f37c2b21677d8
QuotaService.java https://github.com/apache/cloudstack/pull/13236/files#diff-d5422918e8a83ab9759fbf71445c8c54e60d4f03bd26bc2ddaca2f3f39d485e4
QuotaServiceImpl.java https://github.com/apache/cloudstack/pull/13236/files#diff-9c5c65d522d65aef1cd3ac9e269c5ae9e33965ece8b5971ae30799c6f38dc428
QuotaResponseBuilderImplTest.java https://github.com/apache/cloudstack/pull/13236/files#diff-d98e63d5feb4bb44192f3ed4e95833b33f4f4f7464271568fc769c220bee623f
QuotaServiceImplTest.java https://github.com/apache/cloudstack/pull/13236/files#diff-59a6866a99cda5c82ad38df9fed7070d5c2342604ee30df7bbeb245ef888a458
api/src/main/java/org/apache/cloudstack/api/ApiConstants.javahttps://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
View file https://github.com/scclouds/cloudstack/blob/511d1077bd5393592551ccc76b6883705cbd36be/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/apache/cloudstack/pull/13236/{{ revealButtonHref }}
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
https://github.com/apache/cloudstack/pull/13236/files#diff-72d5bf21c12ffd0a3c2d3a6033ec70ae5ba6c31338e915fe65df1b7a67827a9e
engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sqlhttps://github.com/apache/cloudstack/pull/13236/files#diff-c2a347e8868908a473213b79695fd81420bee5f97f09c1e1c0d488529e17c80e
View file https://github.com/scclouds/cloudstack/blob/511d1077bd5393592551ccc76b6883705cbd36be/engine/schema/src/main/resources/META-INF/db/schema-42210to42300.sql
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/apache/cloudstack/pull/13236/{{ revealButtonHref }}
https://github.com/apache/cloudstack/pull/13236/files#diff-c2a347e8868908a473213b79695fd81420bee5f97f09c1e1c0d488529e17c80e
framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.javahttps://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
View file https://github.com/scclouds/cloudstack/blob/511d1077bd5393592551ccc76b6883705cbd36be/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/apache/cloudstack/pull/13236/{{ revealButtonHref }}
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
https://github.com/apache/cloudstack/pull/13236/files#diff-3ef93b2e53e1019d79ed24a5d06838c9acdd87aa2d7b0b65d41df0cfe640d5a1
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
Please reload this pagehttps://github.com/apache/cloudstack/pull/13236/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.