Merge pull request #170 from jabbate19/master

Make RTP View Not Awful
This commit is contained in:
Joe Abbate 2022-09-07 16:59:00 -04:00 committed by GitHub
commit 50855e3712
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 93 additions and 72 deletions

View file

@ -170,13 +170,12 @@ def forbidden(e):
@auth.oidc_auth
def list_vms(user_view=None):
user = User(session['userinfo']['preferred_username'])
rtp_view = False
connect_proxmox()
if app.config['FORCE_STANDARD_USER']:
user.rtp = False
if user_view and not user.rtp:
if user_view:
if not user.rtp:
abort(403)
elif user_view and user.rtp:
user_view = User(user_view)
vms = user_view.vms
for pending_vm in user_view.pending_vms:
@ -186,10 +185,6 @@ def list_vms(user_view=None):
vms[vms.index(vm)]['pending'] = True
else:
vms.append(pending_vm)
rtp_view = user_view.name
elif user.rtp:
vms = get_pool_cache(db)
rtp_view = True
else:
if user.active:
vms = user.vms
@ -202,7 +197,19 @@ def list_vms(user_view=None):
vms.append(pending_vm)
else:
vms = 'INACTIVE'
return render_template('list_vms.html', user=user, rtp_view=rtp_view, vms=vms)
return render_template('list_vms.html', user=user, user_view=user_view, vms=vms)
@app.route('/pools')
def list_pools():
user = User(session['userinfo']['preferred_username'])
if app.config['FORCE_STANDARD_USER']:
user.rtp = False
if not user.rtp:
abort(403)
connect_proxmox()
vms = get_pool_cache(db)
return render_template('list_pools.html', user=user, vms=vms)
@app.route('/isos')

View file

@ -55,6 +55,12 @@
</a>
</li>
{% if user.rtp %}
<li class="nav-item navbar-user dropdown">
<a class="nav-link" href="/pools">
<i class="fas fa-user"></i>
User Pools
</a>
</li>
<li class="nav-item navbar-user dropdown">
<a class="nav-link" href="/rq">
<i class="fas fa-tachometer-alt"></i>

View file

@ -0,0 +1,68 @@
{% extends "base.html" %}
{% block body %}
<div class="container">
<div class="row">
{% for pool in vms %}
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<div class="card bg-light mb-3">
<div class="card-header text-center">
<img class="user-img float-left" src="https://profiles.csh.rit.edu/image/{{ pool['user'] }}" title="{{ pool['user'] }}">
<h5 class="card-title user-title">
<a href="/user/{{ pool['user'] }}">
{{ pool['user'] }}
</a>
</h5>
<span class="float-right">{{ pool['num_vms'] }}</span>
</div>
<div class="card-body">
<div class="resource-bar">
<span class="float-left">CPU</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['cpu'] }}/{{ pool['limits']['cpu'] }}">
{% if pool['percents']['cpu'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% elif pool['percents']['cpu'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% endif %}
</div>
</div>
<div class="resource-bar">
<span class="float-left">MEM</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['mem'] }}GB/{{ pool['limits']['mem'] }}.0GB">
{% if pool['percents']['mem'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% elif pool['percents']['mem'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% endif %}
</div>
</div>
<div class="resource-bar">
<span class="float-left">DISK</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['disk'] }}GB/{{ pool['limits']['disk'] }}GB">
{% if pool['percents']['disk'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% elif pool['percents']['disk'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% endif %}
</div>
</div>
<div class="text-center">
<button class="btn btn-info proxstar-poolbtn edit-limit" data-user="{{ pool['user'] }}" data-cpu="{{ pool['limits']['cpu'] }}" data-mem="{{ pool['limits']['mem'] }}" data-disk="{{ pool['limits']['disk'] }}">EDIT</button>
{% if not pool['vms'] %}
<button class="btn btn-danger proxstar-poolbtn delete-user" data-user="{{ pool['user'] }}">DELETE</button>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}

View file

@ -3,11 +3,11 @@
<div class="container">
<div class="row">
{% if user['rtp'] and rtp_view != True %}
{% if user_view %}
<div class="col-md-12 col-sm-12">
<div class="card bg-light mb-3">
<div class="card-header text-center">
<h5 class="card-title">{{ rtp_view }}</h5>
<h5 class="card-title">{{ user_view.name }}</h5>
</div>
</div>
</div>
@ -28,7 +28,7 @@
</div>
</div>
</div>
{% elif rtp_view != True %}
{% else %}
{% for vm in vms %}
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<div class="card bg-light mb-3">
@ -45,66 +45,6 @@
</div>
</div>
{% endfor %}
{% else %}
{% for pool in vms %}
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
<div class="card bg-light mb-3">
<div class="card-header text-center">
<img class="user-img float-left" src="https://profiles.csh.rit.edu/image/{{ pool['user'] }}" title="{{ pool['user'] }}">
<h5 class="card-title user-title">
<a href="/user/{{ pool['user'] }}">
{{ pool['user'] }}
</a>
</h5>
<span class="float-right">{{ pool['num_vms'] }}</span>
</div>
<div class="card-body">
<div class="resource-bar">
<span class="float-left">CPU</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['cpu'] }}/{{ pool['limits']['cpu'] }}">
{% if pool['percents']['cpu'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% elif pool['percents']['cpu'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['cpu'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['cpu'] }}%"></div>
{% endif %}
</div>
</div>
<div class="resource-bar">
<span class="float-left">MEM</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['mem'] }}GB/{{ pool['limits']['mem'] }}.0GB">
{% if pool['percents']['mem'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% elif pool['percents']['mem'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['mem'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['mem'] }}%"></div>
{% endif %}
</div>
</div>
<div class="resource-bar">
<span class="float-left">DISK</span>
<div class="progress" data-toggle="tooltip" title="{{ pool['usage']['disk'] }}GB/{{ pool['limits']['disk'] }}GB">
{% if pool['percents']['disk'] <= 60 %}
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% elif pool['percents']['disk'] <= 80 %}
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% else %}
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="{{ pool['percents']['disk'] }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ pool['percents']['disk'] }}%"></div>
{% endif %}
</div>
</div>
<div class="text-center">
<button class="btn btn-info proxstar-poolbtn edit-limit" data-user="{{ pool['user'] }}" data-cpu="{{ pool['limits']['cpu'] }}" data-mem="{{ pool['limits']['mem'] }}" data-disk="{{ pool['limits']['disk'] }}">EDIT</button>
{% if not pool['vms'] %}
<button class="btn btn-danger proxstar-poolbtn delete-user" data-user="{{ pool['user'] }}">DELETE</button>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>