Skip to content

Commit 890e041

Browse files
committed
Fix up some debug messages
1 parent 49fb96f commit 890e041

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

os_capacity/prometheus.py

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ def get_capacity_per_flavor(placement_client, flavors):
1010
capacity_per_flavor = {}
1111

1212
for flavor in flavors:
13-
resources, traits = get_placement_request(flavor)
14-
max_per_host = get_max_per_host(placement_client, resources, traits)
13+
max_per_host = get_max_per_host(placement_client, flavor)
1514
capacity_per_flavor[flavor.name] = max_per_host
1615

1716
return capacity_per_flavor
@@ -46,7 +45,8 @@ def add_defaults(resources, flavor, skip_vcpu=False):
4645
return resources, required_traits
4746

4847

49-
def get_max_per_host(placement_client, resources, required_traits):
48+
def get_max_per_host(placement_client, flavor):
49+
resources, required_traits = get_placement_request(flavor)
5050
resource_str = ",".join(
5151
[key + ":" + str(value) for key, value in resources.items() if value]
5252
)
@@ -80,7 +80,7 @@ def get_max_per_host(placement_client, resources, required_traits):
8080
if max_counts:
8181
count_per_rp[rp_uuid] = min(max_counts)
8282
if not count_per_rp:
83-
print(f"# WARNING - no candidates for: {params}")
83+
print(f"# WARNING - no candidates hosts for flavor: {flavor.name} {params}")
8484
return count_per_rp
8585

8686

@@ -178,12 +178,52 @@ def print_host_details(compute_client, placement_client):
178178
for project, names in project_to_aggregate.items():
179179
for name in names:
180180
print(
181-
f'openstack_project_filter_aggregate{{project="{project}",aggregate="{name}"}} 1'
181+
f'openstack_project_filter_aggregate{{project_id="{project}",aggregate="{name}"}} 1'
182182
)
183183

184184

185-
def print_project_usage_(indentity_client, placement_client):
186-
pass
185+
def print_project_usage(indentity_client, placement_client, compute_client):
186+
projects = {proj.id: dict(name=proj.name) for proj in indentity_client.projects()}
187+
for project_id in projects.keys():
188+
# TODO(johngarbutt) On Xena we should do consumer_type=INSTANCE using 1.38!
189+
response = placement_client.get(
190+
f"/usages?project_id={project_id}",
191+
headers={"OpenStack-API-Version": "placement 1.19"},
192+
)
193+
response.raise_for_status()
194+
usages = response.json()
195+
projects[project_id]["usages"] = usages["usages"]
196+
197+
response = compute_client.get(
198+
f"/os-quota-sets/{project_id}",
199+
headers={"OpenStack-API-Version": "compute 2.20"},
200+
)
201+
response.raise_for_status()
202+
quotas = response.json().get("quota_set", {})
203+
projects[project_id]["quotas"] = dict(
204+
CPUS=quotas.get("cores"), MEMORY_MB=quotas.get("ram")
205+
)
206+
207+
# print(json.dumps(projects, indent=2))
208+
for project_id, data in projects.items():
209+
name = data["name"]
210+
project_usages = data["usages"]
211+
for resource, amount in project_usages.items():
212+
print(
213+
f'openstack_project_usage{{project_id="{project_id}",'
214+
f'project_name="{name}",resource="{resource}"}} {amount}'
215+
)
216+
217+
if not project_usages:
218+
# skip projects with zero usage?
219+
print(f"# WARNING no usage for project: {name} {project_id}")
220+
continue
221+
project_quotas = data["quotas"]
222+
for resource, amount in project_quotas.items():
223+
print(
224+
f'openstack_project_quota{{project_id="{project_id}",'
225+
f'project_name="{name}",resource="{resource}"}} {amount}'
226+
)
187227

188228

189229
def print_exporter_data(app):
@@ -193,3 +233,4 @@ def print_exporter_data(app):
193233
if __name__ == "__main__":
194234
conn = openstack.connect()
195235
print_host_details(conn.compute, conn.placement)
236+
print_project_usage(conn.identity, conn.placement, conn.compute)

0 commit comments

Comments
 (0)