Skip to content

Commit

Permalink
Start adding tenant information
Browse files Browse the repository at this point in the history
  • Loading branch information
angelbarrera92 committed Mar 7, 2021
1 parent 150b2e6 commit 2936a5d
Show file tree
Hide file tree
Showing 8 changed files with 603 additions and 25 deletions.
57 changes: 51 additions & 6 deletions k8spin_reporter/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,24 @@ def asyncFeed():
feed.do_feed(db.engine)


@app.route("/debug")
def debug():
return render_template("debug.html")
@app.route("/organizations")
def organizations():
return render_template("organization.html")


@app.route("/organizations/<organization_id>")
def organization(organization_id):
return render_template("organization.html", organization_id=organization_id)


@app.route("/organizations/<organization_id>/tenants")
def tenants(organization_id):
return render_template("tenant.html", organization_id=organization_id)


@app.route("/organizations/<organization_id>/tenants/<tenant_id>")
def tenant(organization_id, tenant_id):
return render_template("tenant.html", organization_id=organization_id, tenant_id=tenant_id)


@app.route("/report")
Expand All @@ -37,11 +52,17 @@ def report():


@app.route("/api/organizations")
def organizations():
def api_organizations():
orgs = data.orgs(db.engine)
return jsonify(orgs)


@app.route("/api/organizations/<organization_id>")
def api_organization(organization_id):
orgs = data.org(db.engine, organization_id)
return jsonify(orgs)


@app.route("/api/organizations/<organization_id>/resources")
def org_resources(organization_id):
resources = data.org_current_resources(db.engine, organization_id)
Expand All @@ -50,22 +71,46 @@ def org_resources(organization_id):

@app.route("/api/organizations/<organization_id>/history")
def org_history(organization_id):
resources = data.org_history_resouces(db.engine, organization_id)
resources = data.org_history_resources(db.engine, organization_id)
return jsonify(resources)


@app.route("/api/organizations/<organization_id>/tenants")
def tenants(organization_id):
def api_tenants(organization_id):
tenants = data.tenants(db.engine, organization_id)
return jsonify(tenants)


@app.route("/api/organizations/<organization_id>/tenants/<tenant_id>")
def api_tenant(organization_id, tenant_id):
t = data.tenant(db.engine, organization_id, tenant_id)
return jsonify(t)


@app.route("/api/organizations/<organization_id>/tenants/<tenant_id>/history")
def tenant_history(organization_id, tenant_id):
resources = data.tenant_history_resources(db.engine, organization_id, tenant_id)
return jsonify(resources)


@app.route("/api/organizations/<organization_id>/tenants/<tenant_id>/spaces")
def spaces(organization_id, tenant_id):
spaces = data.spaces(db.engine, tenant_id)
return jsonify(spaces)


@app.route("/api/organizations/<organization_id>/tenants/<tenant_id>/spaces/<space_id>/resources")
def space_resources(organization_id, tenant_id, space_id):
resources = data.space_current_resources(db.engine, space_id)
return jsonify(resources)


@app.route("/api/organizations/<organization_id>/tenants/<tenant_id>/resources")
def tenant_resources(organization_id, tenant_id):
resources = data.tenant_current_resources(db.engine, tenant_id)
return jsonify(resources)


if __name__ == "__main__":
health = HealthCheck(app, "/health")
scheduler.init_app(app)
Expand Down
22 changes: 11 additions & 11 deletions k8spin_reporter/gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ def gen_org_resources(orgs, since, hour_step):
data.append({
"reported": data_date,
"organization_id": org.get("id"),
"cpu": random.randrange(1000, 20000, 1000),
"memory": random.randrange(8589934592, 17179869184, 1073741824),
"cpu": random.randrange(5, 10, 1),
"memory": random.randrange(512, 1024, 128),
})
return data

Expand All @@ -57,8 +57,8 @@ def gen_tenant_resources(tenants, since, hour_step):
data.append({
"reported": data_date,
"tenant_id": tenant.get("id"),
"cpu": random.randrange(1000, 2000, 1000),
"memory": random.randrange(4294967296, 8589934592, 1073741824),
"cpu": random.randrange(3, 5, 1),
"memory": random.randrange(128, 512, 128),
})
return data

Expand Down Expand Up @@ -86,8 +86,8 @@ def gen_space_resources(spaces, since, hour_step):
data.append({
"reported": data_date,
"space_id": space.get("id"),
"cpu": random.randrange(0, 1000, 1000),
"memory": random.randrange(1073741824, 4294967296, 1073741824),
"cpu": random.randrange(1, 3, 1),
"memory": random.randrange(128, 512, 128),
})
return data

Expand All @@ -103,8 +103,8 @@ def gen_space_usage(spaces, since, hour_step):
"organization_id": space.get("organization_id"),
"tenant_id": space.get("tenant_id"),
"space_id": space.get("id"),
"cpu": random.randrange(0, 1000, 100),
"memory": random.randrange(0, 2147483648, 104857600),
"cpu": random.randrange(1, 2, 1),
"memory": random.randrange(16, 256, 16),
})
return data

Expand All @@ -123,11 +123,11 @@ def gen_sql(data, table_name):

if __name__ == "__main__":
since = datetime.datetime.now() - datetime.timedelta(days=10)
orgs = gen_orgs(5)
orgs = gen_orgs(1)
org_resources = gen_org_resources(orgs, since, 1)
tenants = gen_tenant(orgs, 20)
tenants = gen_tenant(orgs, 1)
tenant_resources = gen_tenant_resources(tenants, since, 1)
spaces = gen_spaces(tenants, 100)
spaces = gen_spaces(tenants, 2)
space_resources = gen_space_resources(spaces, since, 1)
space_usage = gen_space_usage(spaces, since, 1)

Expand Down
174 changes: 173 additions & 1 deletion k8spin_reporter/k8spin_reporter/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,26 @@ def orgs(db_engine):
return data


def org(db_engine, organization_id):
data = []
query = f"""
SELECT id,name
FROM organization
WHERE
id = "{organization_id}"
"""
rows = db.query(db_engine, query)
for r in rows:
data.append({
"id": r[0],
"name": r[1]
})
if len(data) == 1:
return data[0]
else:
raise Exception("TBD: Multiple results")


def org_current_resources(db_engine, organization_id):
data = []
query = f"""
Expand Down Expand Up @@ -57,9 +77,92 @@ def org_current_resources(db_engine, organization_id):
return data[0]


def tenant_current_resources(db_engine, tenant_id):
data = []
query = f"""
SELECT t1.allocated_cpu, t1.allocated_memory, t2.used_cpu, t2.used_memory
FROM
(
SELECT t2.tenant_id as tenant_id, t2.cpu as allocated_cpu, t2.memory as allocated_memory FROM
(
SELECT cpu,memory, max(id) id
FROM tenant_resources
GROUP BY tenant_id
) t1, tenant_resources t2
WHERE t1.id = t2.id
) t1,
(
SELECT t2.tenant_id as tenant_id, sum(t2.cpu) as used_cpu, sum(t2.memory) as used_memory FROM
(
SELECT tenant_id, space_id, max(id) id
FROM space_usage
GROUP BY tenant_id, space_id
)
t1, space_usage t2
WHERE t1.id = t2.id
GROUP BY t2.tenant_id
) t2
WHERE t1.tenant_id = t2.tenant_id
AND t1.tenant_id = "{tenant_id}"
"""
rows = db.query(db_engine, query, False)
for r in rows:
data.append({
"allocated_cpu": r[0],
"allocated_memory": r[1],
"used_cpu": r[2],
"used_memory": r[3],
})
if len(data) != 1:
return None
return data[0]


def space_current_resources(db_engine, space_id):
data = []
query = f"""
SELECT t1.allocated_cpu, t1.allocated_memory, t2.used_cpu, t2.used_memory
FROM
(
SELECT t2.space_id as space_id, t2.cpu as allocated_cpu, t2.memory as allocated_memory FROM
(
SELECT cpu,memory, max(id) id
FROM space_resources
GROUP BY space_id
) t1, space_resources t2
WHERE t1.id = t2.id
) t1,
(
SELECT t2.space_id as space_id, sum(t2.cpu) as used_cpu, sum(t2.memory) as used_memory FROM
(
SELECT space_id, max(id) id
FROM space_usage
GROUP BY space_id
)
t1, space_usage t2
WHERE t1.id = t2.id
GROUP BY t2.space_id
) t2
WHERE t1.space_id = t2.space_id
AND t1.space_id = "{space_id}"
"""
rows = db.query(db_engine, query, False)
for r in rows:
data.append({
"allocated_cpu": r[0],
"allocated_memory": r[1],
"used_cpu": r[2],
"used_memory": r[3],
})
if len(data) != 1:
return None
return data[0]

# TODO: Currently it returns up to 7 days of data. Aggregated by day.
# TODO: Make it configurable by day, hour...
def org_history_resouces(db_engine, organization_id):


def org_history_resources(db_engine, organization_id):
data = []
query = f"""
SELECT used.day, allocated.allocated_cpu, used.used_cpu, allocated.allocated_memory, used.used_memory
Expand Down Expand Up @@ -103,6 +206,53 @@ def org_history_resouces(db_engine, organization_id):
return data


def tenant_history_resources(db_engine, organization_id, tenant_id):
data = []
query = f"""
SELECT used.day, allocated.allocated_cpu, used.used_cpu, allocated.allocated_memory, used.used_memory
FROM (
SELECT tenant_id, day, sum(cpu) as used_cpu, sum(memory) as used_memory
FROM (
SELECT tenant_id, space_id, strftime('%Y%m%d', reported) as day, avg(cpu) as cpu, avg(memory) as memory
FROM space_usage
WHERE
organization_id = "{organization_id}"
AND
tenant_id = "{tenant_id}"
GROUP BY tenant_id, space_id, strftime('%Y%m%d', reported)
)
GROUP BY tenant_id, day
) used,
(
SELECT tenant_id, strftime('%Y%m%d', reported) as day, avg(cpu) as allocated_cpu, avg(memory) as allocated_memory
FROM tenant_resources
WHERE tenant_id = "{tenant_id}"
GROUP BY tenant_id, strftime('%Y%m%d', reported)
) allocated
WHERE used.tenant_id = "{tenant_id}"
AND used.tenant_id = allocated.tenant_id
AND used.day = allocated.day
ORDER BY used.day DESC
LIMIT 7;
"""
rows = db.query(db_engine, query, False)
for r in rows:
data.append({
"day": r[0],
"allocated_cpu": r[1],
"used_cpu": r[2],
"allocated_memory": r[3],
"used_memory": r[4],
})
return data


def tenants(db_engine, organization_id):
data = []
query = f"""
Expand All @@ -119,6 +269,28 @@ def tenants(db_engine, organization_id):
return data


def tenant(db_engine, organization_id, tenant_id):
data = []
query = f"""
SELECT id,name
FROM tenant
WHERE
organization_id = "{organization_id}"
AND
id = "{tenant_id}"
"""
rows = db.query(db_engine, query)
for r in rows:
data.append({
"id": r[0],
"name": r[1]
})
if len(data) == 1:
return data[0]
else:
raise Exception("TBD: Multiple results")


def spaces(db_engine, tenant_id):
data = []
query = f"""
Expand Down
24 changes: 23 additions & 1 deletion k8spin_reporter/queries.sql
Original file line number Diff line number Diff line change
Expand Up @@ -199,4 +199,26 @@ LIMIT 24;



-- WHERE organization_id = "d831bb55-b4fd-4971-8230-4fdd0141d3b2"
-- WHERE organization_id = "d831bb55-b4fd-4971-8230-4fdd0141d3b2"


-- Tenant CPU and Memory configurable

SELECT * FROM tenant_resources WHERE
tenant_id = "31fc7679-3ba5-4983-812d-f2340bc03233"
ORDER BY id desc LIMIT 1;


SELECT id FROM space WHERE
tenant_id = "31fc7679-3ba5-4983-812d-f2340bc03233";


SELECT * FROM space_resources WHERE
space_id = "78aa18f1-4526-4d08-9720-5970e7259a81"
ORDER BY id desc LIMIT 1;


SELECT * FROM space_resources WHERE
space_id = "26c13dbb-569e-414f-907a-ce473ac43f8a"
ORDER BY id desc LIMIT 1;

Loading

0 comments on commit 2936a5d

Please sign in to comment.