mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-02-12 21:11:53 +00:00
commit
50855e3712
4 changed files with 93 additions and 72 deletions
|
@ -170,13 +170,12 @@ def forbidden(e):
|
||||||
@auth.oidc_auth
|
@auth.oidc_auth
|
||||||
def list_vms(user_view=None):
|
def list_vms(user_view=None):
|
||||||
user = User(session['userinfo']['preferred_username'])
|
user = User(session['userinfo']['preferred_username'])
|
||||||
rtp_view = False
|
|
||||||
connect_proxmox()
|
connect_proxmox()
|
||||||
if app.config['FORCE_STANDARD_USER']:
|
if app.config['FORCE_STANDARD_USER']:
|
||||||
user.rtp = False
|
user.rtp = False
|
||||||
if user_view and not user.rtp:
|
if user_view:
|
||||||
|
if not user.rtp:
|
||||||
abort(403)
|
abort(403)
|
||||||
elif user_view and user.rtp:
|
|
||||||
user_view = User(user_view)
|
user_view = User(user_view)
|
||||||
vms = user_view.vms
|
vms = user_view.vms
|
||||||
for pending_vm in user_view.pending_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
|
vms[vms.index(vm)]['pending'] = True
|
||||||
else:
|
else:
|
||||||
vms.append(pending_vm)
|
vms.append(pending_vm)
|
||||||
rtp_view = user_view.name
|
|
||||||
elif user.rtp:
|
|
||||||
vms = get_pool_cache(db)
|
|
||||||
rtp_view = True
|
|
||||||
else:
|
else:
|
||||||
if user.active:
|
if user.active:
|
||||||
vms = user.vms
|
vms = user.vms
|
||||||
|
@ -202,7 +197,19 @@ def list_vms(user_view=None):
|
||||||
vms.append(pending_vm)
|
vms.append(pending_vm)
|
||||||
else:
|
else:
|
||||||
vms = 'INACTIVE'
|
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')
|
@app.route('/isos')
|
||||||
|
|
|
@ -55,6 +55,12 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% if user.rtp %}
|
{% 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">
|
<li class="nav-item navbar-user dropdown">
|
||||||
<a class="nav-link" href="/rq">
|
<a class="nav-link" href="/rq">
|
||||||
<i class="fas fa-tachometer-alt"></i>
|
<i class="fas fa-tachometer-alt"></i>
|
||||||
|
|
68
proxstar/templates/list_pools.html
Normal file
68
proxstar/templates/list_pools.html
Normal 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 %}
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% if user['rtp'] and rtp_view != True %}
|
{% if user_view %}
|
||||||
<div class="col-md-12 col-sm-12">
|
<div class="col-md-12 col-sm-12">
|
||||||
<div class="card bg-light mb-3">
|
<div class="card bg-light mb-3">
|
||||||
<div class="card-header text-center">
|
<div class="card-header text-center">
|
||||||
<h5 class="card-title">{{ rtp_view }}</h5>
|
<h5 class="card-title">{{ user_view.name }}</h5>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% elif rtp_view != True %}
|
{% else %}
|
||||||
{% for vm in vms %}
|
{% for vm in vms %}
|
||||||
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
|
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
|
||||||
<div class="card bg-light mb-3">
|
<div class="card bg-light mb-3">
|
||||||
|
@ -45,66 +45,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% 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 %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue