mirror of
https://github.com/ail-project/ail-framework.git
synced 2025-09-07 15:42:39 +00:00
chg: [v4.0 AIL SYNC / AIL 2 AIL] SYNC Manager + fixs + views
This commit is contained in:
parent
966f61bb94
commit
997a2c602a
21 changed files with 2006 additions and 73 deletions
|
@ -45,6 +45,7 @@ from blueprints.import_export import import_export
|
|||
from blueprints.objects_item import objects_item
|
||||
from blueprints.hunters import hunters
|
||||
from blueprints.old_endpoints import old_endpoints
|
||||
from blueprints.ail_2_ail_sync import ail_2_ail_sync
|
||||
|
||||
|
||||
Flask_dir = os.environ['AIL_FLASK']
|
||||
|
@ -103,6 +104,7 @@ app.register_blueprint(import_export, url_prefix=baseUrl)
|
|||
app.register_blueprint(objects_item, url_prefix=baseUrl)
|
||||
app.register_blueprint(hunters, url_prefix=baseUrl)
|
||||
app.register_blueprint(old_endpoints, url_prefix=baseUrl)
|
||||
app.register_blueprint(ail_2_ail_sync, url_prefix=baseUrl)
|
||||
# ========= =========#
|
||||
|
||||
# ========= Cookie name ========
|
||||
|
|
247
var/www/blueprints/ail_2_ail_sync.py
Normal file
247
var/www/blueprints/ail_2_ail_sync.py
Normal file
|
@ -0,0 +1,247 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*-coding:UTF-8 -*
|
||||
|
||||
'''
|
||||
Blueprint Flask: crawler splash endpoints: dashboard, onion crawler ...
|
||||
'''
|
||||
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import random
|
||||
|
||||
from flask import Flask, render_template, jsonify, request, Blueprint, redirect, url_for, Response, make_response
|
||||
from flask_login import login_required, current_user, login_user, logout_user
|
||||
|
||||
sys.path.append('modules')
|
||||
import Flask_config
|
||||
|
||||
# Import Role_Manager
|
||||
from Role_Manager import create_user_db, check_password_strength, check_user_role_integrity
|
||||
from Role_Manager import login_admin, login_analyst, login_read_only
|
||||
|
||||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'packages'))
|
||||
import Tag
|
||||
|
||||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib'))
|
||||
import item_basic
|
||||
import Tracker
|
||||
|
||||
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'core'))
|
||||
import ail_2_ail
|
||||
|
||||
bootstrap_label = Flask_config.bootstrap_label
|
||||
|
||||
# ============ BLUEPRINT ============
|
||||
ail_2_ail_sync = Blueprint('ail_2_ail_sync', __name__, template_folder=os.path.join(os.environ['AIL_FLASK'], 'templates/ail_2_ail'))
|
||||
|
||||
# ============ VARIABLES ============
|
||||
|
||||
|
||||
|
||||
# ============ FUNCTIONS ============
|
||||
def api_validator(api_response):
|
||||
if api_response:
|
||||
return Response(json.dumps(api_response[0], indent=2, sort_keys=True), mimetype='application/json'), api_response[1]
|
||||
|
||||
def create_json_response(data, status_code):
|
||||
return Response(json.dumps(data, indent=2, sort_keys=True), mimetype='application/json'), status_code
|
||||
|
||||
# ============= ROUTES ==============
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_2_ail_dashboard():
|
||||
l_servers = ail_2_ail.get_all_running_sync_servers()
|
||||
l_servers = ail_2_ail.get_ail_instances_metadata(l_servers)
|
||||
return render_template("ail_2_ail_dashboard.html", l_servers=l_servers)
|
||||
|
||||
######################
|
||||
# #
|
||||
#### AIL INSTANCE ####
|
||||
|
||||
# # TODO: add more metadata => queues + connections
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/servers', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_servers():
|
||||
l_servers = ail_2_ail.get_all_ail_instances_metadata()
|
||||
return render_template("ail_servers.html", l_servers=l_servers)
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/view', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_view():
|
||||
ail_uuid = request.args.get('uuid')
|
||||
server_metadata = ail_2_ail.get_ail_instance_metadata(ail_uuid,sync_queues=True)
|
||||
server_metadata['sync_queues'] = ail_2_ail.get_queues_metadata(server_metadata['sync_queues'])
|
||||
|
||||
return render_template("view_ail_server.html", server_metadata=server_metadata,
|
||||
bootstrap_label=bootstrap_label)
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/add', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_add():
|
||||
if request.method == 'POST':
|
||||
register_key = request.form.get("register_key")
|
||||
ail_uuid = request.form.get("ail_uuid")
|
||||
url = request.form.get("ail_url")
|
||||
description = request.form.get("ail_description")
|
||||
pull = request.form.get("ail_pull")
|
||||
push = request.form.get("ail_push")
|
||||
|
||||
input_dict = {"uuid": ail_uuid, "url": url,
|
||||
"description": description,
|
||||
"pull": pull, "push": push}
|
||||
|
||||
if register_key:
|
||||
input_dict['key'] = request.form.get("ail_key")
|
||||
|
||||
print(input_dict)
|
||||
|
||||
res = ail_2_ail.api_create_ail_instance(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
|
||||
return redirect(url_for('ail_2_ail_sync.ail_server_view', uuid=res))
|
||||
else:
|
||||
|
||||
return render_template("add_ail_server.html")
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/edit', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_edit():
|
||||
ail_uuid = request.args.get('ail_uuid')
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/delete', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_delete():
|
||||
ail_uuid = request.args.get('uuid')
|
||||
input_dict = {"uuid": ail_uuid}
|
||||
res = ail_2_ail.api_delete_ail_instance(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
return redirect(url_for('ail_2_ail_sync.ail_servers'))
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/sync_queues', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_sync_queues():
|
||||
ail_uuid = request.args.get('uuid')
|
||||
sync_queues = ail_2_ail.get_all_unregistred_queue_by_ail_instance(ail_uuid)
|
||||
sync_queues = ail_2_ail.get_queues_metadata(sync_queues)
|
||||
|
||||
return render_template("register_queue.html", bootstrap_label=bootstrap_label,
|
||||
ail_uuid=ail_uuid, sync_queues=sync_queues)
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/sync_queues/register', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_sync_queues_register():
|
||||
|
||||
ail_uuid = request.args.get('ail_uuid')
|
||||
queue_uuid = request.args.get('queue_uuid')
|
||||
input_dict = {"ail_uuid": ail_uuid, "queue_uuid": queue_uuid}
|
||||
res = ail_2_ail.api_register_ail_to_sync_queue(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
return redirect(url_for('ail_2_ail_sync.ail_server_view', uuid=ail_uuid))
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/server/sync_queues/unregister', methods=['GET'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def ail_server_sync_queues_unregister():
|
||||
|
||||
ail_uuid = request.args.get('ail_uuid')
|
||||
queue_uuid = request.args.get('queue_uuid')
|
||||
input_dict = {"ail_uuid": ail_uuid, "queue_uuid": queue_uuid}
|
||||
res = ail_2_ail.api_unregister_ail_to_sync_queue(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
return redirect(url_for('ail_2_ail_sync.ail_server_view', uuid=ail_uuid))
|
||||
|
||||
####################
|
||||
# #
|
||||
#### SYNC QUEUE ####
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/sync_queues', methods=['GET'])
|
||||
# @login_required
|
||||
# @login_admin
|
||||
def sync_queues():
|
||||
ail_uuid = request.args.get('ail_uuid')
|
||||
l_queues = ail_2_ail.get_all_queues_metadata()
|
||||
return render_template("sync_queues.html", bootstrap_label=bootstrap_label,
|
||||
ail_uuid=ail_uuid, l_queues=l_queues)
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/sync_queue/view', methods=['GET'])
|
||||
# @login_required
|
||||
# @login_admin
|
||||
def sync_queue_view():
|
||||
queue_uuid = request.args.get('uuid')
|
||||
queue_metadata = ail_2_ail.get_sync_queue_metadata(queue_uuid)
|
||||
ail_servers = ail_2_ail.get_sync_queue_all_ail_instance(queue_uuid)
|
||||
queue_metadata['ail_servers'] = ail_2_ail.get_ail_instances_metadata(ail_servers)
|
||||
return render_template("view_sync_queue.html", queue_metadata=queue_metadata,
|
||||
bootstrap_label=bootstrap_label)
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/sync_queue/add', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@login_admin
|
||||
def sync_queue_add():
|
||||
if request.method == 'POST':
|
||||
queue_name = request.form.get("queue_name")
|
||||
description = request.form.get("queue_description")
|
||||
max_size = request.form.get("queue_max_size")
|
||||
|
||||
taxonomies_tags = request.form.get('taxonomies_tags')
|
||||
if taxonomies_tags:
|
||||
try:
|
||||
taxonomies_tags = json.loads(taxonomies_tags)
|
||||
except Exception:
|
||||
taxonomies_tags = []
|
||||
else:
|
||||
taxonomies_tags = []
|
||||
galaxies_tags = request.form.get('galaxies_tags')
|
||||
if galaxies_tags:
|
||||
try:
|
||||
galaxies_tags = json.loads(galaxies_tags)
|
||||
except Exception:
|
||||
galaxies_tags = []
|
||||
|
||||
tags = taxonomies_tags + galaxies_tags
|
||||
input_dict = {"name": queue_name, "tags": tags,
|
||||
"description": description,
|
||||
"max_size": max_size}
|
||||
|
||||
res = ail_2_ail.api_create_sync_queue(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
|
||||
return redirect(url_for('ail_2_ail_sync.sync_queue_view', uuid=res))
|
||||
else:
|
||||
return render_template("add_sync_queue.html", tags_selector_data=Tag.get_tags_selector_data())
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/sync_queue/edit', methods=['GET', 'POST'])
|
||||
# @login_required
|
||||
# @login_admin
|
||||
def sync_queue_edit():
|
||||
return ''
|
||||
|
||||
@ail_2_ail_sync.route('/settings/ail_2_ail/sync_queue/delete', methods=['GET'])
|
||||
# @login_required
|
||||
# @login_admin
|
||||
def sync_queue_delete():
|
||||
queue_uuid = request.args.get('uuid')
|
||||
input_dict = {"uuid": queue_uuid}
|
||||
res = ail_2_ail.api_delete_sync_queue(input_dict)
|
||||
if res[1] != 200:
|
||||
return create_json_response(res[0], res[1])
|
||||
return redirect(url_for('ail_2_ail_sync.sync_queues'))
|
||||
|
||||
#### JSON ####
|
||||
|
||||
## - - ##
|
|
@ -94,6 +94,34 @@ def get_all_obj_tags():
|
|||
return jsonify(res)
|
||||
return jsonify(Tag.get_all_obj_tags(object_type))
|
||||
|
||||
@tags_ui.route('/tag/taxonomies/tags/enabled/json')
|
||||
@login_required
|
||||
@login_read_only
|
||||
def tag_taxonomies_tags_enabled_json():
|
||||
return jsonify(Tag.get_taxonomies_enabled_tags(r_list=True))
|
||||
|
||||
@tags_ui.route('/tag/galaxies/tags/enabled/json')
|
||||
@login_required
|
||||
@login_read_only
|
||||
def tag_galaxies_tags_enabled_json():
|
||||
tags = Tag.get_galaxies_enabled_tags()
|
||||
return jsonify(Tag.get_tags_selector_dict(tags))
|
||||
|
||||
@tags_ui.route('/tag/taxonomie/tags/enabled/json')
|
||||
@login_required
|
||||
@login_read_only
|
||||
def tag_taxonomie_tags_enabled_json():
|
||||
taxonomie = request.args.get('taxonomie')
|
||||
return jsonify(Tag.get_taxonomie_enabled_tags(taxonomie, r_list=True))
|
||||
|
||||
@tags_ui.route('/tag/galaxy/tags/enabled/json')
|
||||
@login_required
|
||||
@login_read_only
|
||||
def tag_galaxy_tags_enabled_json():
|
||||
galaxy = request.args.get('galaxy')
|
||||
tags = Tag.get_galaxy_enabled_tags(galaxy, r_list=True)
|
||||
return jsonify(Tag.get_tags_selector_dict(tags))
|
||||
|
||||
@tags_ui.route('/tag/search/item')
|
||||
@login_required
|
||||
@login_read_only
|
||||
|
|
|
@ -59,6 +59,13 @@ for name, tags in clusters.items(): #galaxie name + tags
|
|||
def one():
|
||||
return 1
|
||||
|
||||
# TODO:
|
||||
# TODO:
|
||||
# TODO:
|
||||
# TODO:
|
||||
# TODO:
|
||||
# TODO:
|
||||
# # TODO: replace me with get_tag_selector_dict()
|
||||
def get_tags_with_synonyms(tag):
|
||||
str_synonyms = ' - synonyms: '
|
||||
synonyms = r_serv_tags.smembers('synonym_tag_' + tag)
|
||||
|
|
170
var/www/templates/ail_2_ail/add_ail_server.html
Normal file
170
var/www/templates/ail_2_ail/add_ail_server.html
Normal file
|
@ -0,0 +1,170 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-Framework</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="card my-3">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<h5 class="card-title">Create AIL Server</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<form action="{{ url_for('ail_2_ail_sync.ail_server_add') }}" method='post'>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-xl-9">
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-dark text-white"><i class="fas fa-quote-right"></i></div>
|
||||
</div>
|
||||
<input id="ail_uuid" name="ail_uuid" class="form-control" placeholder="AIL Server UUID" type="text" required>
|
||||
</div>
|
||||
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-secondary text-white"><i class="fas fa-server"></i></div>
|
||||
</div>
|
||||
<input id="ail_url" class="form-control" type="text" name="ail_url" placeholder="AIL Server URL">
|
||||
</div>
|
||||
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-info text-white"><i class="fas fa-pencil-alt"></i></div>
|
||||
</div>
|
||||
<textarea id="ail_description" name="ail_description" class="form-control" placeholder="AIL Server Description (optional)" rows="3"></textarea>
|
||||
</div>
|
||||
|
||||
<h5 class="mt-2 text-secondary">
|
||||
SYNC Modes:
|
||||
</h5>
|
||||
<div class="row">
|
||||
<div class="col-12 col-xl-6">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input class="custom-control-input" type="checkbox" value="True" id="pull" name="ail_pull" checked>
|
||||
<label class="custom-control-label" for="ail_pull"><h5>PULL</h5></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-xl-6">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input class="custom-control-input" type="checkbox" value="True" id="ail_push" name="ail_push" checked>
|
||||
<label class="custom-control-label" for="ail_push"><h5 class="">PUSH</h5></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="mt-2 text-secondary">
|
||||
Server Key <i class="fas fa-key"></i>:
|
||||
</h5>
|
||||
|
||||
<div class="d-flex mt-2">
|
||||
Generate Server Key
|
||||
<div class="custom-control custom-switch">
|
||||
<input class="custom-control-input" type="checkbox" name="register_key" value="True" id="register_key">
|
||||
<label class="custom-control-label" for="register_key">
|
||||
Register Server Key
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3" id="div_generate_key">
|
||||
<b>A new key will be generated for this AIL Server</b>
|
||||
</div>
|
||||
<div id="div_register_key">
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-danger text-white"><i class="fas fa-key"></i></div>
|
||||
</div>
|
||||
<input id="ail_key" class="form-control" type="text" minlength="56" maxlength="56" name="ail_key" placeholder="AIL key">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-xl-3">
|
||||
SYNC: create a new AIL Server
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<br>
|
||||
<button class="btn btn-primary mt-2">
|
||||
<i class="fas fa-plus"></i> Create AIL Server
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
$("#nav_ail_servers").addClass("active");
|
||||
$("#div_register_key").hide();
|
||||
|
||||
|
||||
$('#register_key').on("change", function () {
|
||||
register_key_input_controler();
|
||||
});
|
||||
});
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
function register_key_input_controler() {
|
||||
if($('#register_key').is(':checked')){
|
||||
$("#div_generate_key").hide();
|
||||
$("#div_register_key").show();
|
||||
}else{
|
||||
$("#div_generate_key").show();
|
||||
$("#div_register_key").hide();
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
139
var/www/templates/ail_2_ail/add_sync_queue.html
Normal file
139
var/www/templates/ail_2_ail/add_sync_queue.html
Normal file
|
@ -0,0 +1,139 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-Framework</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/tags.css') }}" rel="stylesheet" type="text/css" />
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/tags.js') }}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="card my-3">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<h5 class="card-title">Create SYNC Queue</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<form action="{{ url_for('ail_2_ail_sync.sync_queue_add') }}" method='post' onsubmit="SubmitCreateQueue();">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-xl-9">
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-dark text-white"><i class="fas fa-quote-right"></i></div>
|
||||
</div>
|
||||
<input id="queue_name" name="queue_name" class="form-control" placeholder="Queue Name" type="text" required>
|
||||
</div>
|
||||
|
||||
<div class="input-group form-group mb-2">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text bg-success"><i class="fas fa-water"></i></span>
|
||||
</div>
|
||||
<input class="form-control" type="number" id="queue_max_size" name="queue_max_size" min="1" value="100" required>
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text">Queue Max Size</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="input-group mb-2 mr-sm-2">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text bg-info text-white"><i class="fas fa-pencil-alt"></i></div>
|
||||
</div>
|
||||
<textarea id="queue_description" name="queue_description" class="form-control" placeholder="Sync Queue Description (optional)" rows="3"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="card my-4">
|
||||
<div class="card-header bg-secondary text-white">
|
||||
<b>Tags Filter</b>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% include 'tags/block_tags_selector.html' %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-xl-3">
|
||||
SYNC: create a new Sync Queue
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<button class="btn btn-primary mt-2">
|
||||
<i class="fas fa-plus"></i> Create Sync Queue
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
$("#nav_ail_servers").addClass("active");
|
||||
$("#div_register_key").hide();
|
||||
|
||||
|
||||
$('#register_key').on("change", function () {
|
||||
register_key_input_controler();
|
||||
});
|
||||
});
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
function SubmitCreateQueue() {
|
||||
var tags = ltags.getValue();
|
||||
var tagsgalaxy = ltagsgalaxies.getValue();
|
||||
console.log(tags);
|
||||
console.log(tagsgalaxy);
|
||||
$('#ltags').val(tags);
|
||||
$('#ltagsgalaxies').val(tagsgalaxy);
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
100
var/www/templates/ail_2_ail/ail_2_ail_dashboard.html
Normal file
100
var/www/templates/ail_2_ail/ail_2_ail_dashboard.html
Normal file
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-SYNC</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<h1>Connected Servers:</h3>
|
||||
|
||||
<table id="table_servers" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>uuid</th>
|
||||
<th>url</th>
|
||||
<th>description</th>
|
||||
<th>sync queues</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_server in l_servers %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_view') }}?uuid={{ dict_server['uuid'] }}">
|
||||
{{ dict_server['uuid']}}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ dict_server['url']}}</td>
|
||||
<td>{{ dict_server['description']}}</td>
|
||||
<td class="text-center">
|
||||
{% for queue_uuid in dict_server['sync_queues'] %}
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_view') }}?uuid={{queue_uuid}}">
|
||||
{{queue_uuid}}</br>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
$("#nav_ail_servers").addClass("active");
|
||||
|
||||
$('#table_servers').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 1, "desc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
106
var/www/templates/ail_2_ail/ail_servers.html
Normal file
106
var/www/templates/ail_2_ail/ail_servers.html
Normal file
|
@ -0,0 +1,106 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-SYNC</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="my-4">
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_add') }}">
|
||||
<button type="button" class="btn btn-primary">
|
||||
<i class="fas fa-plus"></i> Add AIL Server
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<table id="table_servers" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>uuid</th>
|
||||
<th>url</th>
|
||||
<th>description</th>
|
||||
<th>sync queues</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_server in l_servers %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_view') }}?uuid={{ dict_server['uuid'] }}">
|
||||
{{ dict_server['uuid']}}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ dict_server['url']}}</td>
|
||||
<td>{{ dict_server['description']}}</td>
|
||||
<td class="text-center">
|
||||
{% for queue_uuid in dict_server['sync_queues'] %}
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_view') }}?uuid={{queue_uuid}}">
|
||||
{{queue_uuid}}</br>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
$("#nav_ail_servers").addClass("active");
|
||||
|
||||
$('#table_servers').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 1, "desc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
110
var/www/templates/ail_2_ail/register_queue.html
Normal file
110
var/www/templates/ail_2_ail/register_queue.html
Normal file
|
@ -0,0 +1,110 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-Framework</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<h5 class="card-title">{{ail_uuid}} Register a SYNC Queue</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<table id="table_sync_queues" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>name</th>
|
||||
<th>uuid</th>
|
||||
<th>description</th>
|
||||
<th>max size</th>
|
||||
<th>Register Sync Queue</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_queue in sync_queues %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>{{ dict_queue['name']}}</td>
|
||||
<td>
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_view') }}?uuid={{ dict_queue['uuid'] }}">
|
||||
{{ dict_queue['uuid']}}
|
||||
</a>
|
||||
<div>
|
||||
{% for tag in dict_queue['tags'] %}
|
||||
<span class="badge badge-{{ bootstrap_label[loop.index0 % 5] }} pull-left">{{ tag }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{ dict_queue['description']}}</td>
|
||||
<td>{{ dict_queue['max_size']}}</td>
|
||||
<td class="text-right">
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_sync_queues_register') }}?ail_uuid={{ ail_uuid }}&queue_uuid={{ dict_queue['uuid'] }}">
|
||||
<button type="button" class="btn btn-primary"><i class="fas fa-plus"></i></button>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
|
||||
$('#table_sync_queues').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 0, "desc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
105
var/www/templates/ail_2_ail/sync_queues.html
Normal file
105
var/www/templates/ail_2_ail/sync_queues.html
Normal file
|
@ -0,0 +1,105 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-SYNC</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/popper.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="my-4">
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_add') }}">
|
||||
<button type="button" class="btn btn-primary">
|
||||
<i class="fas fa-plus"></i> Create Sync Queue
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<table id="table_servers" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>name</th>
|
||||
<th>uuid</th>
|
||||
<th>description</th>
|
||||
<th>max size</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_queue in l_queues %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>{{ dict_queue['name']}}</td>
|
||||
<td>
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_view') }}?uuid={{ dict_queue['uuid'] }}">
|
||||
{{ dict_queue['uuid']}}
|
||||
<div>
|
||||
{% for tag in dict_queue['tags'] %}
|
||||
<span class="badge badge-{{ bootstrap_label[loop.index0 % 5] }} pull-left">{{ tag }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ dict_queue['description']}}</td>
|
||||
<td>{{ dict_queue['max_size']}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
$("#navsync_queues").addClass("active");
|
||||
|
||||
$('#table_servers').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 1, "desc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
168
var/www/templates/ail_2_ail/view_ail_server.html
Normal file
168
var/www/templates/ail_2_ail/view_ail_server.html
Normal file
|
@ -0,0 +1,168 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-Framework</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<h5 class="card-title">{{server_metadata['uuid']}}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-right"><b>URL</b></td>
|
||||
<td>
|
||||
{{server_metadata['url']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Api Key</b></td>
|
||||
<td>
|
||||
{{server_metadata['api_key']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Description</b></td>
|
||||
<td>
|
||||
{{server_metadata['description']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Pull</b></td>
|
||||
<td>
|
||||
{{server_metadata['pull']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Push</b></td>
|
||||
<td>
|
||||
{{server_metadata['push']}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="my-4">
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_delete') }}?uuid={{server_metadata['uuid']}}">
|
||||
<button type="button" class="btn btn-danger">
|
||||
<i class="fas fa-trash-alt"></i> <b>Delete AIL Server</b>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-secondary text-white">
|
||||
<h6 class="card-title"><b>SYNC QUEUES:</b></h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_sync_queues') }}?uuid={{ server_metadata['uuid'] }}">
|
||||
<button type="button" class="btn btn-primary my-4">
|
||||
<i class="fas fa-plus"></i> <b>Register Sync Queue</b>
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<table id="table_sync_queues" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>name</th>
|
||||
<th>uuid</th>
|
||||
<th>description</th>
|
||||
<th>max size</th>
|
||||
<th>Unregister Queue</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_queue in server_metadata['sync_queues'] %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>{{ dict_queue['name']}}</td>
|
||||
<td>
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_view') }}?uuid={{ dict_queue['uuid'] }}">
|
||||
{{ dict_queue['uuid']}}
|
||||
</a>
|
||||
<div>
|
||||
{% for tag in dict_queue['tags'] %}
|
||||
<span class="badge badge-{{ bootstrap_label[loop.index0 % 5] }} pull-left">{{ tag }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{ dict_queue['description']}}</td>
|
||||
<td>{{ dict_queue['max_size']}}</td>
|
||||
<td class="text-right">
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_sync_queues_unregister') }}?ail_uuid={{ server_metadata['uuid'] }}&queue_uuid={{ dict_queue['uuid'] }}">
|
||||
<button type="button" class="btn btn-danger"><i class="fas fa-trash-alt"></i></button>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
|
||||
$('#table_sync_queues').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 0, "asc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
159
var/www/templates/ail_2_ail/view_sync_queue.html
Normal file
159
var/www/templates/ail_2_ail/view_sync_queue.html
Normal file
|
@ -0,0 +1,159 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>AIL-Framework</title>
|
||||
<link rel="icon" href="{{ url_for('static', filename='image/ail-icon.png')}}">
|
||||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap4.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap4.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include 'nav_bar.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
{% include 'settings/menu_sidebar.html' %}
|
||||
|
||||
<div class="col-12 col-lg-10" id="core_content">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<h4 class="card-title">SYNC Queue: {{queue_metadata['uuid']}}</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-right"><b>Name</b></td>
|
||||
<td>
|
||||
{{queue_metadata['name']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Tags Filter</b></td>
|
||||
<td>
|
||||
<div>
|
||||
{% for tag in queue_metadata['tags'] %}
|
||||
<span class="badge badge-{{ bootstrap_label[loop.index0 % 5] }} pull-left">{{ tag }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Description</b></td>
|
||||
<td>
|
||||
{{queue_metadata['description']}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-right"><b>Max Size</b></td>
|
||||
<td>
|
||||
{{queue_metadata['max_size']}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="my-4">
|
||||
<a href="{{ url_for('ail_2_ail_sync.sync_queue_delete') }}?uuid={{queue_metadata['uuid']}}">
|
||||
<button type="button" class="btn btn-danger">
|
||||
<i class="fas fa-trash-alt"></i> <b>Delete Sync Queue</b>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-secondary text-white">
|
||||
<h5 class="card-title"><b>AIL Server:</b></h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_add') }}">
|
||||
<button type="button" class="btn btn-primary my-4">
|
||||
<i class="fas fa-plus"></i> <b>Create AIL Server</b>
|
||||
</button>
|
||||
</a>
|
||||
|
||||
<table id="table_sync_queues" class="table table-striped border-primary">
|
||||
<thead class="bg-dark text-white">
|
||||
<tr>
|
||||
<th>uuid</th>
|
||||
<th>url</th>
|
||||
<th>description</th>
|
||||
<th>pull</th>
|
||||
<th>push</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size: 15px;">
|
||||
{% for dict_server in queue_metadata['ail_servers'] %}
|
||||
<tr class="border-color: blue;">
|
||||
<td>{{ dict_server['uuid']}}</td>
|
||||
<td>{{ dict_server['url']}}</td>
|
||||
<td>{{ dict_server['description']}}</td>
|
||||
<td>{{ dict_server['pull']}}</td>
|
||||
<td>{{ dict_server['push']}}</td>
|
||||
<td class="text-right">
|
||||
<a href="{{ url_for('ail_2_ail_sync.ail_server_sync_queues_unregister') }}?ail_uuid={{ dict_server['uuid'] }}&queue_uuid={{ queue_metadata['uuid'] }}">
|
||||
<button type="button" class="btn btn-danger"><i class="fas fa-trash-alt"></i></button>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('#nav_sync').removeClass("text-muted");
|
||||
|
||||
$('#table_sync_queues').DataTable({
|
||||
"aLengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 0, "asc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
function toggle_sidebar(){
|
||||
if($('#nav_menu').is(':visible')){
|
||||
$('#nav_menu').hide();
|
||||
$('#side_menu').removeClass('border-right')
|
||||
$('#side_menu').removeClass('col-lg-2')
|
||||
$('#core_content').removeClass('col-lg-10')
|
||||
}else{
|
||||
$('#nav_menu').show();
|
||||
$('#side_menu').addClass('border-right')
|
||||
$('#side_menu').addClass('col-lg-2')
|
||||
$('#core_content').addClass('col-lg-10')
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
|
@ -17,6 +17,29 @@
|
|||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h5 class="d-flex text-muted w-100" id="nav_sync">
|
||||
<span>AIL SYNC</span>
|
||||
</h5>
|
||||
<ul class="nav flex-md-column flex-row navbar-nav justify-content-between w-100"> <!--nav-pills-->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{url_for('ail_2_ail_sync.ail_2_ail_dashboard')}}" id="nav_ail_sync">
|
||||
<img src="{{ url_for('static', filename='image/ail.png')}}" alt="AIL servers" style="width:25px;">
|
||||
<span>AIL SYNC</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{url_for('ail_2_ail_sync.ail_servers')}}" id="nav_ail_servers">
|
||||
<i class="fas fa-server"></i>
|
||||
<span>Servers</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{url_for('ail_2_ail_sync.sync_queues')}}" id="navsync_queues">
|
||||
<i class="fas fa-stream"></i>
|
||||
<span>Sync queues</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h5 class="d-flex text-muted w-100" id="nav_settings">
|
||||
<span>Settings</span>
|
||||
</h5>
|
||||
|
|
108
var/www/templates/tags/block_tags_selector.html
Normal file
108
var/www/templates/tags/block_tags_selector.html
Normal file
|
@ -0,0 +1,108 @@
|
|||
<div class="input-group" >
|
||||
<input id="ltags" type="text" class="form-control" autocomplete="off" style="width: 760px" name="taxonomies_tags">
|
||||
</div>
|
||||
|
||||
<div class="dropdown">
|
||||
<button type="button" class="btn btn-info dropdown-toggle mt-1 mb-3" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id="dropdown-taxonomie">
|
||||
Taxonomie Selected
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-taxonomie"> <!-- TODO: make dropdown-scrollable -->
|
||||
<h6 class="dropdown-header">Taxonomie Tags</h6>
|
||||
<button class="dropdown-item" type="button" id="all-tags-taxonomies">All Tags <i class="fas fa-tags"></i></button>
|
||||
<div class="dropdown-divider"></div>
|
||||
{% for taxo in tags_selector_data['active_taxonomies'] %}
|
||||
<button class="dropdown-item" type="button" id="{{ taxo }}-id{{ loop.index0 }}">{{ taxo }}</button>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="input-group">
|
||||
<input id="ltagsgalaxies" type="text" class="form-control" autocomplete="off" style="width: 760px" name="galaxies_tags">
|
||||
</div>
|
||||
|
||||
<div class="dropdown">
|
||||
<button type="button" class="btn btn-info dropdown-toggle mt-1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id="dropdown-galaxy">
|
||||
Galaxy Selected
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-galaxy"> <!-- TODO: make dropdown-scrollable -->
|
||||
<h6 class="dropdown-header">Galaxy Tags</h6>
|
||||
<button class="dropdown-item" type="button" id="all-tags-galaxies">All Tags <i class="fas fa-tags"></i></button>
|
||||
<div class="dropdown-divider"></div>
|
||||
{% for galaxy in tags_selector_data['active_galaxies'] %}
|
||||
<button class="dropdown-item" type="button" id="{{ galaxy }}-idgalax{{ loop.index0 }}">{{ galaxy }}</button>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!--
|
||||
<button class="btn btn-primary" onclick="tagsSelector()">
|
||||
<i class="fas fa-plus"></i>
|
||||
Add Tags
|
||||
</button>
|
||||
-->
|
||||
|
||||
|
||||
<script>
|
||||
var ltags;
|
||||
var ltagsgalaxies;
|
||||
|
||||
$.getJSON("{{ url_for('tags_ui.tag_taxonomies_tags_enabled_json') }}",
|
||||
function(data) {
|
||||
|
||||
ltags = $('#ltags').tagSuggest({
|
||||
data: data,
|
||||
maxDropHeight: 200,
|
||||
name: 'ltags'
|
||||
});
|
||||
});
|
||||
|
||||
$.getJSON("{{ url_for('tags_ui.tag_galaxies_tags_enabled_json') }}",
|
||||
function(data) {
|
||||
|
||||
ltagsgalaxies = $('#ltagsgalaxies').tagSuggest({
|
||||
data: data,
|
||||
maxDropHeight: 200,
|
||||
name: 'ltagsgalaxies'
|
||||
});
|
||||
});
|
||||
|
||||
jQuery("#all-tags-taxonomies").click(function(e){
|
||||
//change input tags list
|
||||
$.getJSON("{{ url_for('tags_ui.tag_taxonomies_tags_enabled_json') }}",
|
||||
function(data) {
|
||||
ltags.setData(data)
|
||||
});
|
||||
});
|
||||
|
||||
jQuery("#all-tags-galaxies").click(function(e){
|
||||
$.getJSON("{{ url_for('tags_ui.tag_galaxies_tags_enabled_json') }}",
|
||||
function(data) {
|
||||
ltagsgalaxies.setData(data)
|
||||
});
|
||||
});
|
||||
|
||||
{% for taxo in tags_selector_data['active_taxonomies'] %}
|
||||
jQuery("#{{ taxo }}-id{{ loop.index0 }}").click(function(e){
|
||||
$.getJSON("{{ url_for('tags_ui.tag_taxonomie_tags_enabled_json') }}?taxonomie={{ taxo }}",
|
||||
function(data) {
|
||||
ltags.setData(data)
|
||||
});
|
||||
});
|
||||
{% endfor %}
|
||||
|
||||
{% for galaxy in tags_selector_data['active_galaxies'] %}
|
||||
jQuery("#{{ galaxy }}-idgalax{{ loop.index0 }}").click(function(e){
|
||||
$.getJSON("{{ url_for('tags_ui.tag_galaxy_tags_enabled_json') }}?galaxy={{ galaxy }}",
|
||||
function(data) {
|
||||
ltagsgalaxies.setData(data)
|
||||
});
|
||||
});
|
||||
{% endfor %}
|
||||
|
||||
// function tagsSelector() {
|
||||
// var tags = ltags.getValue()
|
||||
// var tagsgalaxy = ltagsgalaxies.getValue()
|
||||
// window.location.replace("myurl?tags=" + tags + "&tagsgalaxies=" + tagsgalaxy);
|
||||
//}
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue