Skip to content

Commit 205c00f

Browse files
committed
Add per host capacity details (ignoring flavors)
1 parent 890e041 commit 205c00f

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

os_capacity/prometheus.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,15 @@ def print_host_details(compute_client, placement_client):
173173
)
174174
free_space_found = True
175175
if not free_space_found:
176+
# TODO(johngarbutt) allocation candidates only returns some not all candidates!
176177
print(f"# WARNING - no free spaces found for {hostname}")
177178

178179
for project, names in project_to_aggregate.items():
179180
for name in names:
180181
print(
181182
f'openstack_project_filter_aggregate{{project_id="{project}",aggregate="{name}"}} 1'
182183
)
184+
return resource_providers
183185

184186

185187
def print_project_usage(indentity_client, placement_client, compute_client):
@@ -226,11 +228,46 @@ def print_project_usage(indentity_client, placement_client, compute_client):
226228
)
227229

228230

231+
def print_host_usage(resource_providers, placement_client):
232+
for name, data in resource_providers.items():
233+
rp_id = data["uuid"]
234+
response = placement_client.get(
235+
f"/resource_providers/{rp_id}/usages",
236+
headers={"OpenStack-API-Version": "placement 1.19"},
237+
)
238+
response.raise_for_status()
239+
rp_usages = response.json()["usages"]
240+
resource_providers[name]["usages"] = rp_usages
241+
242+
for resource, amount in rp_usages.items():
243+
print(
244+
f'openstack_hypervisor_usage{{hypervisor="{name}",'
245+
f'resource="{resource}"}} {amount}'
246+
)
247+
248+
response = placement_client.get(
249+
f"/resource_providers/{rp_id}/inventories",
250+
headers={"OpenStack-API-Version": "placement 1.19"},
251+
)
252+
response.raise_for_status()
253+
inventories = response.json()["inventories"]
254+
resource_providers[name]["inventories"] = inventories
255+
256+
for resource, data in inventories.items():
257+
amount = data["total"] - data["reserved"]
258+
print(
259+
f'openstack_hypervisor_allocatable_capacity{{hypervisor="{name}",'
260+
f'resource="{resource}"}} {amount}'
261+
)
262+
# print(json.dumps(resource_providers, indent=2))
263+
264+
229265
def print_exporter_data(app):
230266
print_host_free_details(app.compute_client, app.placement_client)
231267

232268

233269
if __name__ == "__main__":
234270
conn = openstack.connect()
235-
print_host_details(conn.compute, conn.placement)
271+
resource_providers = print_host_details(conn.compute, conn.placement)
236272
print_project_usage(conn.identity, conn.placement, conn.compute)
273+
print_host_usage(resource_providers, conn.placement)

0 commit comments

Comments
 (0)