diff --git a/flamenco/dashboard/application/__init__.py b/flamenco/dashboard/application/__init__.py index 70360de9..2bbddc38 100644 --- a/flamenco/dashboard/application/__init__.py +++ b/flamenco/dashboard/application/__init__.py @@ -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') diff --git a/flamenco/dashboard/application/controllers/managers.py b/flamenco/dashboard/application/controllers/managers.py new file mode 100644 index 00000000..edd50362 --- /dev/null +++ b/flamenco/dashboard/application/controllers/managers.py @@ -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'] = '' + 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/') +def view(manager_id): + manager = http_server_request('get', '/managers/{0}'.format(manager_id)) + return render_template('managers/view.html', manager=manager) + diff --git a/flamenco/dashboard/application/templates/layout.html b/flamenco/dashboard/application/templates/layout.html index 2aa60a08..3616c13b 100644 --- a/flamenco/dashboard/application/templates/layout.html +++ b/flamenco/dashboard/application/templates/layout.html @@ -74,6 +74,9 @@ {% block nav %} {% endblock %} + + Managers + Workers diff --git a/flamenco/dashboard/application/templates/managers/index.html b/flamenco/dashboard/application/templates/managers/index.html new file mode 100644 index 00000000..3153c0b0 --- /dev/null +++ b/flamenco/dashboard/application/templates/managers/index.html @@ -0,0 +1,134 @@ +{% extends "layout.html" %} +{% block nav %} + + Managers + + +{% endblock %} + +{% block body %} + + + + + + + + Hostname + UUID + IP Address + Port + Connection + + + + + + + + + Hostname + UUID + IP Address + Port + Connection + + + + + + +{% endblock %} + +{% block footer_scripts %} + +{% endblock %} diff --git a/flamenco/dashboard/application/templates/managers/view.html b/flamenco/dashboard/application/templates/managers/view.html new file mode 100644 index 00000000..0607f942 --- /dev/null +++ b/flamenco/dashboard/application/templates/managers/view.html @@ -0,0 +1,37 @@ +{% extends "layout.html" %} +{% block footer_scripts %} + +{% endblock %} +{% block body %} + + + + + + {{manager['id']}} + + + + + + ip_address: {{ manager['ip_address'] | default('N/A')}} + port: {{ manager['port'] | default('N/A')}} + uuid: {{ manager['uuid'] | default('N/A')}} + settings: {{ manager['settings'] | default('N/A')}} + + + + + +{% endblock %} diff --git a/flamenco/server/application/modules/managers/__init__.py b/flamenco/server/application/modules/managers/__init__.py index 051f40e9..259d06d6 100644 --- a/flamenco/server/application/modules/managers/__init__.py +++ b/flamenco/server/application/modules/managers/__init__.py @@ -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
ip_address: {{ manager['ip_address'] | default('N/A')}}
port: {{ manager['port'] | default('N/A')}}
uuid: {{ manager['uuid'] | default('N/A')}}
settings: {{ manager['settings'] | default('N/A')}}