mirror of
				https://github.com/ComputerScienceHouse/proxstar.git
				synced 2025-03-09 15:40:09 +00:00 
			
		
		
		
	
						commit
						50855e3712
					
				
					 4 changed files with 93 additions and 72 deletions
				
			
		| 
						 | 
				
			
			@ -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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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="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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue