Adding Managers list
This commit is contained in:
@@ -85,12 +85,14 @@ def list_integers_string(string_list):
|
||||
from application.controllers.main import main
|
||||
from application.controllers.jobs import jobs
|
||||
from application.controllers.workers import workers
|
||||
from application.controllers.managers import managers
|
||||
from application.controllers.settings import settings
|
||||
from application.controllers.projects import projects
|
||||
from application.controllers.render import render
|
||||
app.register_blueprint(main)
|
||||
app.register_blueprint(jobs, url_prefix='/jobs')
|
||||
app.register_blueprint(workers, url_prefix='/workers')
|
||||
app.register_blueprint(managers, url_prefix='/managers')
|
||||
app.register_blueprint(settings, url_prefix='/settings')
|
||||
app.register_blueprint(projects, url_prefix='/projects')
|
||||
app.register_blueprint(render, url_prefix='/render')
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
import json
|
||||
from flask import (redirect,
|
||||
render_template,
|
||||
request,
|
||||
url_for,
|
||||
Blueprint)
|
||||
|
||||
from application import app
|
||||
from application import http_server_request
|
||||
|
||||
BRENDER_SERVER = app.config['BRENDER_SERVER']
|
||||
|
||||
# Name of the Blueprint
|
||||
managers = Blueprint('managers', __name__)
|
||||
|
||||
|
||||
@managers.route('/')
|
||||
def index():
|
||||
managers = http_server_request('get', '/managers')
|
||||
managers_list = []
|
||||
|
||||
for key in managers:
|
||||
val = managers[key]
|
||||
val['checkbox'] = '<input type="checkbox" value="' \
|
||||
+ str(val['id']) + ';' + str(val['id']) + '"/>'
|
||||
managers_list.append({
|
||||
"DT_RowId": "manager_" + str(val['id']),
|
||||
"0": val['checkbox'],
|
||||
"1": key,
|
||||
"2": val['uuid'],
|
||||
"3": val['ip_address'],
|
||||
"4": val['port'],
|
||||
"5": val['connection'],
|
||||
"6": val['id'],
|
||||
})
|
||||
|
||||
entries = json.dumps(managers_list)
|
||||
|
||||
return render_template('managers/index.html',
|
||||
entries=entries,
|
||||
title='managers')
|
||||
|
||||
|
||||
@managers.route('/edit', methods=['POST'])
|
||||
def edit():
|
||||
worker_ids = request.form['id']
|
||||
worker_status = request.form['status'].lower()
|
||||
|
||||
#worker_config = {'system': 'linux',
|
||||
# 'blender': 'local'}
|
||||
params = dict(id=worker_ids, status=worker_status)
|
||||
#'config': worker_config}
|
||||
http_server_request('post', '/managers', params)
|
||||
|
||||
return redirect(url_for('managers.index'))
|
||||
|
||||
|
||||
@managers.route('/view/<manager_id>')
|
||||
def view(manager_id):
|
||||
manager = http_server_request('get', '/managers/{0}'.format(manager_id))
|
||||
return render_template('managers/view.html', manager=manager)
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
{% block nav %}
|
||||
{% endblock %}
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li {% if title == 'managers': %} class="active"{% endif %}>
|
||||
<a href="{{ url_for('managers.index') }}">Managers</a>
|
||||
</li>
|
||||
<li {% if title == 'workers': %} class="active"{% endif %}>
|
||||
<a href="{{ url_for('workers.index') }}">Workers</a>
|
||||
</li>
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block nav %}
|
||||
<ul class="nav navbar-nav navbar-left">
|
||||
<span class="navbar-brand">Managers</span>
|
||||
<!--<li>
|
||||
<div class="btn-group navbar-btn" role="group" aria-label="...">
|
||||
<button type="button" class="btn btn-default" id="workers-disable" status="disabled">Disable</button>
|
||||
<button type="button" class="btn btn-default" id="workers-enable" status="enabled">Enable</button>
|
||||
</div>
|
||||
<div class="btn-group navbar-btn" role="group" aria-label="...">
|
||||
<button type="button" class="btn btn-default disabled">Restart</button>
|
||||
<button type="button" class="btn btn-default disabled">Delete</button>
|
||||
</div>
|
||||
</li>-->
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-condensed" id="workers">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="5%"><input class="check-all" type="checkbox"></th>
|
||||
<th width="20%">Hostname</th>
|
||||
<th width="20%">UUID</th>
|
||||
<th width="20%">IP Address</th>
|
||||
<th width="20%">Port</th>
|
||||
<th width="20%">Connection</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Hostname</th>
|
||||
<th>UUID</th>
|
||||
<th>IP Address</th>
|
||||
<th>Port</th>
|
||||
<th>Connection</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer_scripts %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
|
||||
var data = {{ entries | safe }};
|
||||
|
||||
// TODO change to managers
|
||||
var workersTable = $('#workers').dataTable({
|
||||
"bProcessing": true,
|
||||
"iDisplayLength": 25,
|
||||
"aaData": data,
|
||||
"aoColumns": [
|
||||
{ "bSortable": false },
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
$('td:eq(1)', nRow).html('<a href="/managers/view/' + aData[2] + '"> ' + aData[1] + ' </a>');
|
||||
if (aData[5] == "offline"){
|
||||
$('td:eq(5)', nRow).html('<span class="label label-danger">offline</span>');
|
||||
} else if (aData[5] == "online"){
|
||||
$('td:eq(5)', nRow).html('<span class="label label-success">online</span>');
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$("div.toolbar").html('Custom tool bar! Text/images etc.');
|
||||
|
||||
|
||||
$(document).on("click", "#managers-enable, #managers-disable", function() {
|
||||
|
||||
var managers = new Array();
|
||||
|
||||
var checkbox_list = $( "tbody input:checked" );
|
||||
for (var i = checkbox_list.length - 1; i >= 0; i--) {
|
||||
var checkbox = checkbox_list[i];
|
||||
managers.push($(checkbox).val());
|
||||
};
|
||||
|
||||
if (managers.length == 0) {
|
||||
$.growl("Please select one or more managers", {
|
||||
type: "warning"
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
workers_ids = managers.join();
|
||||
|
||||
status = $(this).attr('status');
|
||||
params = { 'id' : workers_ids, 'status' : status}
|
||||
|
||||
$.post("/managers/edit", params)
|
||||
.done(function(data_fun) {
|
||||
// console.log('Managers ' + workers_ids + ' updated : ' + status);
|
||||
$.growl('Managers ' + workers_ids + ' ' + status);
|
||||
// redrawing the table to display changes
|
||||
|
||||
var j = 0;
|
||||
for (var i = 0; i < managers.length; i++) {
|
||||
for (var j = 0; j < data.length; j++) {
|
||||
id = data[j][6]+';'+data[j][8];
|
||||
if (id == managers[i]) {
|
||||
workersTable.fnUpdate(status, j, 5);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
workersTable.fnDraw();
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on("click", ".check-all", function(){
|
||||
$("table input[type=checkbox]").attr('checked', $(this).is(':checked'));
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,37 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block footer_scripts %}
|
||||
<script type="text/javascript">
|
||||
$("#worker_refresh").click(function() {
|
||||
console.log('Button Refresh worker');
|
||||
location.reload();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div class="row">
|
||||
<div class="span10">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
{{manager['id']}}
|
||||
<a id="worker_refresh" href="#" class="glyphicon glyphicon-refresh pull-right"></a>
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>ip_address: {{ manager['ip_address'] | default('N/A')}}</p>
|
||||
<p>port: {{ manager['port'] | default('N/A')}}</p>
|
||||
<p>uuid: {{ manager['uuid'] | default('N/A')}}</p>
|
||||
<p>settings: {{ manager['settings'] | default('N/A')}}</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p class="pull-right">
|
||||
<span>load-average
|
||||
</span>
|
||||
</p>
|
||||
<br class='clearfix'/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -1,5 +1,6 @@
|
||||
import logging
|
||||
import uuid
|
||||
import requests
|
||||
from flask import request
|
||||
from flask import jsonify
|
||||
from flask.ext.restful import Resource
|
||||
@@ -14,6 +15,8 @@ from application.utils import list_integers_string
|
||||
|
||||
from application.modules.managers.model import Manager
|
||||
|
||||
from requests.exceptions import ConnectionError
|
||||
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('port', type=int)
|
||||
parser.add_argument('name', type=str)
|
||||
@@ -72,12 +75,34 @@ class ManagerListApi(Resource):
|
||||
"name" : manager.name,
|
||||
"ip_address" : manager.ip_address,
|
||||
"port" : manager.port,
|
||||
"connection" : 'online'
|
||||
"connection" : 'online',
|
||||
"uuid": manager.uuid
|
||||
}
|
||||
return jsonify(managers)
|
||||
|
||||
|
||||
class ManagerApi(Resource):
|
||||
def get(self, manager_uuid):
|
||||
try:
|
||||
manager = Manager.query.filter_by(uuid=manager_uuid).one()
|
||||
except NoResultFound:
|
||||
logging.warning("No manager found in Database")
|
||||
return '', 404
|
||||
manager_dict = {
|
||||
'id': manager.id,
|
||||
'ip_address': manager.ip_address,
|
||||
'port': manager.port,
|
||||
'uuid': manager.uuid,
|
||||
}
|
||||
url = 'http://' + manager.ip_address+':'+str(manager.port)+'/settings'
|
||||
try:
|
||||
r = requests.get(url)
|
||||
manager_dict['settings'] = r.text
|
||||
except ConnectionError:
|
||||
logging.error(
|
||||
'Can not connect with the Manager {0}'.format(manager.uuid))
|
||||
return jsonify(manager_dict)
|
||||
|
||||
def patch(self, manager_uuid):
|
||||
from application.modules.tasks import TaskApi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user