mirror of https://github.com/D4-project/d4-core
chg; [Analyzer Queue UI] add queue creator template + bug fix
parent
4d55d601a1
commit
10430135d1
|
@ -10,6 +10,7 @@ import redis
|
||||||
|
|
||||||
sys.path.append(os.path.join(os.environ['D4_HOME'], 'lib/'))
|
sys.path.append(os.path.join(os.environ['D4_HOME'], 'lib/'))
|
||||||
import ConfigLoader
|
import ConfigLoader
|
||||||
|
import d4_type
|
||||||
|
|
||||||
### Config ###
|
### Config ###
|
||||||
config_loader = ConfigLoader.ConfigLoader()
|
config_loader = ConfigLoader.ConfigLoader()
|
||||||
|
@ -31,29 +32,32 @@ def is_valid_uuid_v4(uuid_v4):
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def sanitize_uuid(uuid_v4):
|
def sanitize_uuid(uuid_v4, not_exist=False):
|
||||||
if not is_valid_uuid_v4(uuid_v4):
|
if not is_valid_uuid_v4(uuid_v4):
|
||||||
uuid_v4 = str(uuid.uuid4())
|
uuid_v4 = str(uuid.uuid4())
|
||||||
|
if not_exist:
|
||||||
|
if exist_queue(uuid_v4):
|
||||||
|
uuid_v4 = str(uuid.uuid4())
|
||||||
return uuid_v4
|
return uuid_v4
|
||||||
|
|
||||||
|
def sanitize_queue_type(format_type):
|
||||||
|
try:
|
||||||
|
format_type = int(format_type)
|
||||||
|
except:
|
||||||
|
format_type = 1
|
||||||
|
if format_type == 2:
|
||||||
|
format_type = 254
|
||||||
|
return format_type
|
||||||
|
|
||||||
|
def exist_queue(queue_uuid):
|
||||||
|
return r_serv_metadata.exists('analyzer:{}'.format(queue_uuid))
|
||||||
|
|
||||||
def get_all_queues(r_list=None):
|
def get_all_queues(r_list=None):
|
||||||
res = r_serv_metadata.smembers('all_analyzer_queues')
|
res = r_serv_metadata.smembers('all_analyzer_queues')
|
||||||
if r_list:
|
if r_list:
|
||||||
return list(res)
|
return list(res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def get_all_queues_standard_format(r_list=None):
|
|
||||||
res = r_serv_metadata.smembers('all_analyzer_queues')
|
|
||||||
if r_list:
|
|
||||||
return list(res)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def get_all_queues_standard_extended_format(r_list=None):
|
|
||||||
res = r_serv_metadata.smembers('all_analyzer_queues')
|
|
||||||
if r_list:
|
|
||||||
return list(res)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def get_all_queues_by_type(format_type, r_list=None):
|
def get_all_queues_by_type(format_type, r_list=None):
|
||||||
'''
|
'''
|
||||||
Get all analyzer Queues by type
|
Get all analyzer Queues by type
|
||||||
|
@ -72,12 +76,24 @@ def get_all_queues_by_type(format_type, r_list=None):
|
||||||
return list(res)
|
return list(res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def get_all_queues_by_extended_type(extended_type, r_list=None):
|
||||||
|
res = r_serv_metadata.smembers('analyzer:254:{}'.format(extended_type))
|
||||||
|
if r_list:
|
||||||
|
return list(res)
|
||||||
|
return res
|
||||||
|
|
||||||
def get_all_queues_group_by_type(format_type, r_list=None):
|
def get_all_queues_group_by_type(format_type, r_list=None):
|
||||||
res = r_serv_metadata.smembers('analyzer_uuid_group:{}'.format(format_type))
|
res = r_serv_metadata.smembers('analyzer_uuid_group:{}'.format(format_type))
|
||||||
if r_list:
|
if r_list:
|
||||||
return list(res)
|
return list(res)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def get_all_queues_group_by_extended_type(extended_type, r_list=None):
|
||||||
|
res = r_serv_metadata.smembers('analyzer_uuid_group:254:{}'.format(extended_type))
|
||||||
|
if r_list:
|
||||||
|
return list(res)
|
||||||
|
return res
|
||||||
|
|
||||||
def get_all_queues_by_sensor_group(format_type, sensor_uuid, r_list=None):
|
def get_all_queues_by_sensor_group(format_type, sensor_uuid, r_list=None):
|
||||||
print('sensor:queues:{}:{}'.format(format_type, sensor_uuid))
|
print('sensor:queues:{}:{}'.format(format_type, sensor_uuid))
|
||||||
res = r_serv_metadata.smembers('sensor:queues:{}:{}'.format(format_type, sensor_uuid))
|
res = r_serv_metadata.smembers('sensor:queues:{}:{}'.format(format_type, sensor_uuid))
|
||||||
|
@ -106,7 +122,24 @@ def get_queue_max_size(queue_uuid):
|
||||||
max_size = LIST_DEFAULT_SIZE
|
max_size = LIST_DEFAULT_SIZE
|
||||||
return max_size
|
return max_size
|
||||||
|
|
||||||
def get_queue_metadata(queue_uuid, format_type=None, f_date='str_date'):
|
def get_queue_size(queue_uuid, format_type, extended_type=None):
|
||||||
|
if format_type==254:
|
||||||
|
if not extended_type:
|
||||||
|
extended_type = get_queue_extended_type(queue_uuid)
|
||||||
|
length = r_serv_analyzer.llen('analyzer:{}:{}'.format(extended_type, queue_uuid))
|
||||||
|
else:
|
||||||
|
length = r_serv_analyzer.llen('analyzer:{}:{}'.format(format_type, queue_uuid))
|
||||||
|
if length is None:
|
||||||
|
length = 0
|
||||||
|
return length
|
||||||
|
|
||||||
|
def get_queue_format_type(queue_uuid):
|
||||||
|
return r_serv_metadata.hget('analyzer:{}'.format(queue_uuid), 'type')
|
||||||
|
|
||||||
|
def get_queue_extended_type(queue_uuid):
|
||||||
|
return r_serv_metadata.hget('analyzer:{}'.format(queue_uuid), 'metatype')
|
||||||
|
|
||||||
|
def get_queue_metadata(queue_uuid, format_type=None, extended_type=None, f_date='str_date', force_is_group_queue=False):
|
||||||
dict_queue_meta = {}
|
dict_queue_meta = {}
|
||||||
dict_queue_meta['uuid'] = queue_uuid
|
dict_queue_meta['uuid'] = queue_uuid
|
||||||
dict_queue_meta['size_limit'] = get_queue_max_size(queue_uuid)
|
dict_queue_meta['size_limit'] = get_queue_max_size(queue_uuid)
|
||||||
|
@ -116,10 +149,21 @@ def get_queue_metadata(queue_uuid, format_type=None, f_date='str_date'):
|
||||||
if dict_queue_meta['description'] is None:
|
if dict_queue_meta['description'] is None:
|
||||||
dict_queue_meta['description'] = ''
|
dict_queue_meta['description'] = ''
|
||||||
|
|
||||||
if format_type:
|
if not format_type:
|
||||||
dict_queue_meta['length'] = r_serv_analyzer.llen('analyzer:{}:{}'.format(format_type, queue_uuid))
|
format_type = get_queue_format_type(queue_uuid)
|
||||||
if dict_queue_meta['length'] is None:
|
dict_queue_meta['format_type'] = format_type
|
||||||
dict_queue_meta['length'] = 0
|
if format_type==254:
|
||||||
|
if not extended_type:
|
||||||
|
extended_type = get_queue_extended_type(queue_uuid)
|
||||||
|
dict_queue_meta['extended_type'] = extended_type
|
||||||
|
|
||||||
|
dict_queue_meta['length'] = get_queue_size(queue_uuid, format_type, extended_type=extended_type)
|
||||||
|
|
||||||
|
if force_is_group_queue:
|
||||||
|
dict_queue_meta['is_group_queue'] = True
|
||||||
|
else:
|
||||||
|
dict_queue_meta['is_group_queue'] = False
|
||||||
|
|
||||||
return dict_queue_meta
|
return dict_queue_meta
|
||||||
|
|
||||||
def edit_queue_description(queue_uuid, description):
|
def edit_queue_description(queue_uuid, description):
|
||||||
|
@ -138,7 +182,15 @@ def edit_queue_max_size(queue_uuid, max_size):
|
||||||
# create queu by type or by group of uuid
|
# create queu by type or by group of uuid
|
||||||
# # TODO: add size limit
|
# # TODO: add size limit
|
||||||
def create_queues(format_type, queue_uuid=None, l_uuid=[], queue_type='list', metatype_name=None, description=None):
|
def create_queues(format_type, queue_uuid=None, l_uuid=[], queue_type='list', metatype_name=None, description=None):
|
||||||
queue_uuid = sanitize_uuid(queue_uuid)
|
if not d4_type.is_accepted_format_type(format_type):
|
||||||
|
return {'error': 'Invalid type'}
|
||||||
|
|
||||||
|
ormat_type = sanitize_queue_type(format_type)
|
||||||
|
|
||||||
|
if format_type == 254 and not d4_type.is_accepted_extended_type(metatype_name):
|
||||||
|
return {'error': 'Invalid extended type'}
|
||||||
|
|
||||||
|
queue_uuid = sanitize_uuid(queue_uuid, not_exist=True)
|
||||||
r_serv_metadata.hset('analyzer:{}'.format(queue_uuid), 'type', format_type)
|
r_serv_metadata.hset('analyzer:{}'.format(queue_uuid), 'type', format_type)
|
||||||
edit_queue_description(queue_uuid, description)
|
edit_queue_description(queue_uuid, description)
|
||||||
|
|
||||||
|
@ -151,6 +203,7 @@ def create_queues(format_type, queue_uuid=None, l_uuid=[], queue_type='list', me
|
||||||
if format_type == 254:
|
if format_type == 254:
|
||||||
# TODO: check metatype_name
|
# TODO: check metatype_name
|
||||||
r_serv_metadata.sadd('{}:{}:{}'.format(analyzer_key_name, format_type, metatype_name), queue_uuid)
|
r_serv_metadata.sadd('{}:{}:{}'.format(analyzer_key_name, format_type, metatype_name), queue_uuid)
|
||||||
|
r_serv_metadata.hset('analyzer:{}'.format(queue_uuid), 'metatype', metatype_name)
|
||||||
else:
|
else:
|
||||||
r_serv_metadata.sadd('{}:{}'.format(analyzer_key_name, format_type), queue_uuid)
|
r_serv_metadata.sadd('{}:{}'.format(analyzer_key_name, format_type), queue_uuid)
|
||||||
|
|
||||||
|
@ -193,9 +246,23 @@ def flush_queue(queue_uuid, format_type):
|
||||||
r_serv_analyzer.delete('analyzer:{}:{}'.format(format_type, queue_uuid))
|
r_serv_analyzer.delete('analyzer:{}:{}'.format(format_type, queue_uuid))
|
||||||
|
|
||||||
def remove_queues(queue_uuid, format_type, metatype_name=None):
|
def remove_queues(queue_uuid, format_type, metatype_name=None):
|
||||||
|
try:
|
||||||
|
format_type = int(format_type)
|
||||||
|
except:
|
||||||
|
print('error: Invalid format type')
|
||||||
|
return {'error': 'Invalid format type'}
|
||||||
|
|
||||||
if not is_valid_uuid_v4(queue_uuid):
|
if not is_valid_uuid_v4(queue_uuid):
|
||||||
|
print('error: Invalid uuid')
|
||||||
return {'error': 'Invalid uuid'}
|
return {'error': 'Invalid uuid'}
|
||||||
|
|
||||||
|
if not exist_queue(queue_uuid):
|
||||||
|
print('error: unknow queue uuid')
|
||||||
|
return {'error': 'unknow queue uuid'}
|
||||||
|
|
||||||
|
if format_type==254 and not metatype_name:
|
||||||
|
metatype_name = get_queue_extended_type(queue_uuid)
|
||||||
|
|
||||||
# delete metadata
|
# delete metadata
|
||||||
r_serv_metadata.delete('analyzer:{}'.format(queue_uuid))
|
r_serv_metadata.delete('analyzer:{}'.format(queue_uuid))
|
||||||
|
|
||||||
|
@ -212,7 +279,6 @@ def remove_queues(queue_uuid, format_type, metatype_name=None):
|
||||||
analyzer_key_name = 'analyzer'
|
analyzer_key_name = 'analyzer'
|
||||||
|
|
||||||
if format_type == 254:
|
if format_type == 254:
|
||||||
# TODO: check metatype_name
|
|
||||||
r_serv_metadata.srem('{}:{}:{}'.format(analyzer_key_name, format_type, metatype_name), queue_uuid)
|
r_serv_metadata.srem('{}:{}:{}'.format(analyzer_key_name, format_type, metatype_name), queue_uuid)
|
||||||
else:
|
else:
|
||||||
r_serv_metadata.srem('{}:{}'.format(analyzer_key_name, format_type), queue_uuid)
|
r_serv_metadata.srem('{}:{}'.format(analyzer_key_name, format_type), queue_uuid)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*-coding:UTF-8 -*
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
import time
|
||||||
|
import uuid
|
||||||
|
import redis
|
||||||
|
|
||||||
|
sys.path.append(os.path.join(os.environ['D4_HOME'], 'lib/'))
|
||||||
|
import ConfigLoader
|
||||||
|
|
||||||
|
### Config ###
|
||||||
|
config_loader = ConfigLoader.ConfigLoader()
|
||||||
|
r_serv_metadata = config_loader.get_redis_conn("Redis_METADATA")
|
||||||
|
config_loader = None
|
||||||
|
### ###
|
||||||
|
|
||||||
|
def get_all_accepted_format_type(r_list=False):
|
||||||
|
res = r_serv_metadata.smembers('server:accepted_type')
|
||||||
|
if r_list:
|
||||||
|
if res:
|
||||||
|
return list(res)
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
return res
|
||||||
|
|
||||||
|
def get_all_accepted_extended_type(r_list=False):
|
||||||
|
res = r_serv_metadata.smembers('server:accepted_extended_type')
|
||||||
|
if r_list:
|
||||||
|
if res:
|
||||||
|
return list(res)
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
return res
|
||||||
|
|
||||||
|
def is_accepted_format_type(format_type):
|
||||||
|
return r_serv_metadata.sismember('server:accepted_type', format_type)
|
||||||
|
|
||||||
|
def is_accepted_extended_type(extended_type):
|
||||||
|
return r_serv_metadata.sismember('server:accepted_extended_type', extended_type)
|
|
@ -34,6 +34,7 @@ import Analyzer_Queue
|
||||||
# Import Blueprint
|
# Import Blueprint
|
||||||
from blueprints.restApi import restApi
|
from blueprints.restApi import restApi
|
||||||
from blueprints.settings import settings
|
from blueprints.settings import settings
|
||||||
|
from blueprints.analyzer_queue import analyzer_queue
|
||||||
|
|
||||||
baseUrl = ''
|
baseUrl = ''
|
||||||
if baseUrl != '':
|
if baseUrl != '':
|
||||||
|
@ -107,6 +108,7 @@ login_manager.init_app(app)
|
||||||
# ========= BLUEPRINT =========#
|
# ========= BLUEPRINT =========#
|
||||||
app.register_blueprint(restApi)
|
app.register_blueprint(restApi)
|
||||||
app.register_blueprint(settings)
|
app.register_blueprint(settings)
|
||||||
|
app.register_blueprint(analyzer_queue)
|
||||||
# ========= =========#
|
# ========= =========#
|
||||||
|
|
||||||
# ========= LOGIN MANAGER ========
|
# ========= LOGIN MANAGER ========
|
||||||
|
@ -516,53 +518,29 @@ def server_management():
|
||||||
description = 'Please update your web server'
|
description = 'Please update your web server'
|
||||||
|
|
||||||
list_analyzer_uuid = []
|
list_analyzer_uuid = []
|
||||||
for analyzer_uuid in redis_server_metadata.smembers('analyzer:{}'.format(type)):
|
for analyzer_uuid in Analyzer_Queue.get_all_queues_by_type(type):
|
||||||
size_limit = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'max_size')
|
list_analyzer_uuid.append(Analyzer_Queue.get_queue_metadata(analyzer_uuid, format_type=type))
|
||||||
if size_limit is None:
|
|
||||||
size_limit = analyzer_list_max_default_size
|
|
||||||
last_updated = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'last_updated')
|
|
||||||
if last_updated is None:
|
|
||||||
last_updated = 'Never'
|
|
||||||
else:
|
|
||||||
last_updated = datetime.datetime.fromtimestamp(float(last_updated)).strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
description_analyzer = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'description')
|
|
||||||
if description_analyzer is None:
|
|
||||||
description_analyzer = ''
|
|
||||||
len_queue = redis_server_analyzer.llen('analyzer:{}:{}'.format(type, analyzer_uuid))
|
|
||||||
if len_queue is None:
|
|
||||||
len_queue = 0
|
|
||||||
list_analyzer_uuid.append({'uuid': analyzer_uuid, 'description': description_analyzer, 'size_limit': size_limit,'last_updated': last_updated, 'length': len_queue})
|
|
||||||
|
|
||||||
for analyzer_uuid in Analyzer_Queue.get_all_queues_group_by_type(type):
|
for analyzer_uuid in Analyzer_Queue.get_all_queues_group_by_type(type):
|
||||||
list_analyzer_uuid.append(Analyzer_Queue.get_queue_metadata(analyzer_uuid, type))
|
list_analyzer_uuid.append(Analyzer_Queue.get_queue_metadata(analyzer_uuid, format_type=type, force_is_group_queue=True))
|
||||||
|
|
||||||
list_accepted_types.append({"id": int(type), "description": description, 'list_analyzer_uuid': list_analyzer_uuid})
|
list_accepted_types.append({"id": int(type), "description": description, 'list_analyzer_uuid': list_analyzer_uuid})
|
||||||
|
|
||||||
list_accepted_extended_types = []
|
list_accepted_extended_types = []
|
||||||
|
l_queue_extended_type = []
|
||||||
for extended_type in redis_server_metadata.smembers('server:accepted_extended_type'):
|
for extended_type in redis_server_metadata.smembers('server:accepted_extended_type'):
|
||||||
|
list_accepted_extended_types.append({"name": extended_type, 'list_analyzer_uuid': []})
|
||||||
|
|
||||||
list_analyzer_uuid = []
|
for extended_queue_uuid in Analyzer_Queue.get_all_queues_by_extended_type(extended_type):
|
||||||
for analyzer_uuid in redis_server_metadata.smembers('analyzer:254:{}'.format(extended_type)):
|
l_queue_extended_type.append(Analyzer_Queue.get_queue_metadata(extended_queue_uuid, format_type=254, extended_type=extended_type))
|
||||||
size_limit = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'max_size')
|
|
||||||
if size_limit is None:
|
for extended_queue_uuid in Analyzer_Queue.get_all_queues_group_by_extended_type(extended_type):
|
||||||
size_limit = analyzer_list_max_default_size
|
l_queue_extended_type.append(Analyzer_Queue.get_queue_metadata(extended_queue_uuid, format_type=254, extended_type=extended_type, force_is_group_queue=True))
|
||||||
last_updated = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'last_updated')
|
|
||||||
if last_updated is None:
|
|
||||||
last_updated = 'Never'
|
|
||||||
else:
|
|
||||||
last_updated = datetime.datetime.fromtimestamp(float(last_updated)).strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
description_analyzer = redis_server_metadata.hget('analyzer:{}'.format(analyzer_uuid), 'description')
|
|
||||||
if description_analyzer is None:
|
|
||||||
description_analyzer = ''
|
|
||||||
len_queue = redis_server_analyzer.llen('analyzer:{}:{}'.format(extended_type, analyzer_uuid))
|
|
||||||
if len_queue is None:
|
|
||||||
len_queue = 0
|
|
||||||
list_analyzer_uuid.append({'uuid': analyzer_uuid, 'description': description_analyzer, 'size_limit': size_limit,'last_updated': last_updated, 'length': len_queue})
|
|
||||||
|
|
||||||
list_accepted_extended_types.append({"name": extended_type, 'list_analyzer_uuid': list_analyzer_uuid})
|
|
||||||
|
|
||||||
return render_template("server_management.html", list_accepted_types=list_accepted_types, list_accepted_extended_types=list_accepted_extended_types,
|
return render_template("server_management.html", list_accepted_types=list_accepted_types, list_accepted_extended_types=list_accepted_extended_types,
|
||||||
server_mode=server_mode,
|
server_mode=server_mode,
|
||||||
|
l_queue_extended_type=l_queue_extended_type,
|
||||||
nb_sensors_registered=nb_sensors_registered, nb_sensors_pending=nb_sensors_pending,
|
nb_sensors_registered=nb_sensors_registered, nb_sensors_pending=nb_sensors_pending,
|
||||||
default_analyzer_max_line_len=default_analyzer_max_line_len,
|
default_analyzer_max_line_len=default_analyzer_max_line_len,
|
||||||
blacklisted_ip=blacklisted_ip, unblacklisted_ip=unblacklisted_ip,
|
blacklisted_ip=blacklisted_ip, unblacklisted_ip=unblacklisted_ip,
|
||||||
|
@ -788,30 +766,6 @@ def uuid_change_description():
|
||||||
else:
|
else:
|
||||||
return jsonify({'error':'invalid uuid'}), 400
|
return jsonify({'error':'invalid uuid'}), 400
|
||||||
|
|
||||||
# # TODO: check analyser uuid dont exist
|
|
||||||
@app.route('/add_new_analyzer')
|
|
||||||
@login_required
|
|
||||||
@login_user_basic
|
|
||||||
def add_new_analyzer():
|
|
||||||
format_type = request.args.get('type')
|
|
||||||
user = request.args.get('redirect')
|
|
||||||
metatype_name = request.args.get('metatype_name')
|
|
||||||
analyzer_description = request.args.get('analyzer_description')
|
|
||||||
analyzer_uuid = request.args.get('analyzer_uuid')
|
|
||||||
if is_valid_uuid_v4(analyzer_uuid):
|
|
||||||
try:
|
|
||||||
format_type = int(format_type)
|
|
||||||
if format_type < 0:
|
|
||||||
return 'type, Invalid Integer'
|
|
||||||
except:
|
|
||||||
return 'type, Invalid Integer'
|
|
||||||
|
|
||||||
Analyzer_Queue.create_queues(format_type, queue_uuid=analyzer_uuid, l_uuid=[], queue_type='list', metatype_name=metatype_name, description=analyzer_description)
|
|
||||||
if user:
|
|
||||||
return redirect(url_for('server_management'))
|
|
||||||
else:
|
|
||||||
return 'Invalid uuid'
|
|
||||||
|
|
||||||
@app.route('/empty_analyzer_queue')
|
@app.route('/empty_analyzer_queue')
|
||||||
@login_required
|
@login_required
|
||||||
@login_user_basic
|
@login_user_basic
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*-coding:UTF-8 -*
|
||||||
|
|
||||||
|
'''
|
||||||
|
Flask functions and routes for the rest api
|
||||||
|
'''
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import redis
|
||||||
|
|
||||||
|
sys.path.append(os.path.join(os.environ['D4_HOME'], 'lib'))
|
||||||
|
import ConfigLoader
|
||||||
|
import Analyzer_Queue
|
||||||
|
|
||||||
|
from flask import Flask, render_template, jsonify, request, Blueprint, redirect, url_for, Response
|
||||||
|
from flask_login import login_required, current_user
|
||||||
|
|
||||||
|
from Role_Manager import login_admin, login_user_basic
|
||||||
|
from Role_Manager import create_user_db, edit_user_db, delete_user_db, check_password_strength, generate_new_token, gen_password, get_all_role
|
||||||
|
|
||||||
|
# ============ BLUEPRINT ============
|
||||||
|
|
||||||
|
analyzer_queue = Blueprint('analyzer_queue', __name__, template_folder='templates')
|
||||||
|
|
||||||
|
# ============ VARIABLES ============
|
||||||
|
|
||||||
|
### Config ###
|
||||||
|
config_loader = ConfigLoader.ConfigLoader()
|
||||||
|
r_serv_metadata = config_loader.get_redis_conn("Redis_METADATA")
|
||||||
|
r_serv_db = config_loader.get_redis_conn("Redis_SERV")
|
||||||
|
config_loader = None
|
||||||
|
### ###
|
||||||
|
|
||||||
|
# ============ FUNCTIONS ============
|
||||||
|
|
||||||
|
|
||||||
|
# ============= ROUTES ==============
|
||||||
|
|
||||||
|
@analyzer_queue.route("/analyzer_queue/create_queue", methods=['GET'])
|
||||||
|
@login_required
|
||||||
|
@login_user_basic
|
||||||
|
def create_analyzer_queue():
|
||||||
|
return render_template("analyzer_queue/queue_creator.html")
|
||||||
|
|
||||||
|
@analyzer_queue.route("/analyzer_queue/create_queue_post", methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
@login_user_basic
|
||||||
|
def create_analyzer_queue_post():
|
||||||
|
l_queue_meta = ['analyzer_type', 'analyzer_metatype', 'description', 'analyzer_uuid']
|
||||||
|
queue_type = request.form.get("analyzer_type")
|
||||||
|
queue_metatype = request.form.get("analyzer_metatype")
|
||||||
|
queue_description = request.form.get("description")
|
||||||
|
queue_uuid = request.form.get("analyzer_uuid")
|
||||||
|
|
||||||
|
queue_type = Analyzer_Queue.sanitize_queue_type(queue_type)
|
||||||
|
|
||||||
|
# unpack uuid group
|
||||||
|
l_uuid = set()
|
||||||
|
l_invalid_uuid = set()
|
||||||
|
for obj_tuple in list(request.form):
|
||||||
|
if obj_tuple not in l_queue_meta:
|
||||||
|
sensor_uuid = request.form.get(obj_tuple)
|
||||||
|
if Analyzer_Queue.is_valid_uuid_v4(sensor_uuid):
|
||||||
|
l_uuid.add(sensor_uuid)
|
||||||
|
else:
|
||||||
|
if sensor_uuid:
|
||||||
|
l_invalid_uuid.add(sensor_uuid)
|
||||||
|
|
||||||
|
l_uuid = list(l_uuid)
|
||||||
|
l_invalid_uuid = list(l_invalid_uuid)
|
||||||
|
if l_invalid_uuid:
|
||||||
|
return render_template("analyzer_queue/queue_creator.html", queue_uuid=queue_uuid, queue_type=queue_type, metatype_name=queue_metatype,
|
||||||
|
description=queue_description, l_uuid=l_uuid, l_invalid_uuid=l_invalid_uuid)
|
||||||
|
|
||||||
|
res = Analyzer_Queue.create_queues(queue_type, queue_uuid=queue_uuid, l_uuid=l_uuid, metatype_name=queue_metatype, description=queue_description)
|
||||||
|
if isinstance(res,dict):
|
||||||
|
return jsonify(res)
|
||||||
|
if res:
|
||||||
|
return redirect(url_for('server_management', _anchor=res))
|
|
@ -0,0 +1,7 @@
|
||||||
|
<div class="input-group mb-1">
|
||||||
|
<input type="text" class="form-control col-10 {%if error%}is-invalid{%else%}is-valid{%endif%}" name="{{sensor_uuid}}" value="{{sensor_uuid}}">
|
||||||
|
<span class="btn btn-danger input-group-addon delete-field col-2"><i class="fa fa-trash"></i></span>
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
Please provide a valid UUID v4.
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,158 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>D4-Project</title>
|
||||||
|
<link rel="icon" href="{{ url_for('static', filename='img/d4-logo.png')}}">
|
||||||
|
<!-- Core CSS -->
|
||||||
|
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
|
||||||
|
<link href="{{ url_for('static', filename='font-awesome/css/font-awesome.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/popper.min.js')}}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='js/bootstrap.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>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.popover{
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
{% include 'navbar.html' %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card mb-3 mt-1">
|
||||||
|
<div class="card-header text-white bg-dark">
|
||||||
|
<h5 class="card-title">Create Analyzer Queue</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<form action="{{ url_for('analyzer_queue.create_analyzer_queue_post') }}" method="post" enctype=multipart/form-data onsubmit="submitPaste()">
|
||||||
|
|
||||||
|
<div class="form-group mb-4">
|
||||||
|
<label for="analyzer_type"><b>Analyzer Type</b></label>
|
||||||
|
<input class="form-control col-md-4" type="number" name="analyzer_type" id="analyzer_type" value="{%if queue_type%}{{queue_type}}{%else%}1{%endif%}" min="1" max="254" required>
|
||||||
|
<input class="form-control" type="text" name="analyzer_metatype" id="analyzer_metatype_name" placeholder="Meta Type Name" {%if metatype_name%}value="{{metatype_name}}"{%endif%}>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group my-2">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<button class="btn btn-outline-secondary" type="button" onclick="generate_new_uuid();"><i class="fa fa-random"></i></button>
|
||||||
|
</div>
|
||||||
|
<input class="form-control col-md-4" type="text" name="analyzer_uuid" id="analyzer_uuid" {%if queue_uuid%}value="{{queue_uuid}}"{%endif%} required placeholder="Analyzer uuid - (Optional)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group my-2">
|
||||||
|
<input class="form-control" type="text" name="description" id="analyzer_description" {%if description%}value="{{description}}"{%endif%} required placeholder="Description - (Optional)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="container-id-to-import">
|
||||||
|
|
||||||
|
<p>Create Queue by Group of UUID</p>
|
||||||
|
|
||||||
|
<div for="first_sensor_uuid"><b>Sensor UUID</b></div>
|
||||||
|
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="form-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="fields">
|
||||||
|
|
||||||
|
{% if l_uuid %}
|
||||||
|
{% for sensor_uuid in l_uuid %}
|
||||||
|
{% with sensor_uuid=sensor_uuid, error=False%}
|
||||||
|
{% include 'analyzer_queue/block_add_sensor_to_group_block.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endfor %}
|
||||||
|
<br>
|
||||||
|
{% endif %}
|
||||||
|
{% if l_invalid_uuid %}
|
||||||
|
{% for sensor_uuid in l_invalid_uuid %}
|
||||||
|
{% with sensor_uuid=sensor_uuid, error=True%}
|
||||||
|
{% include 'analyzer_queue/block_add_sensor_to_group_block.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endfor %}
|
||||||
|
<br>
|
||||||
|
{% endif %}
|
||||||
|
<div class="input-group mb-1">
|
||||||
|
<input type="text" class="form-control col-10" name="first_sensor_uuid" id="first_sensor_uuid">
|
||||||
|
<span class="btn btn-info input-group-addon add-field col-2"><i class="fa fa-plus"></i></span>
|
||||||
|
</div>
|
||||||
|
<span class="help-block" hidden>Export Objects</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<button class="btn btn-info" type="submit">Create Queue</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% include 'navfooter.html' %}
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("#nav-sensor").addClass("active");
|
||||||
|
{%if queue_type!=2 and queue_type!=254%}
|
||||||
|
$('#analyzer_metatype_name').hide();
|
||||||
|
{%endif%}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var input_part_1 = '<div class="input-group mb-1"><input type="text" class="form-control col-10" name="'
|
||||||
|
var input_part_2 = '"></div>'
|
||||||
|
var minusButton = '<span class="btn btn-danger input-group-addon delete-field col-2"><i class="fa fa-trash"></i></span>'
|
||||||
|
|
||||||
|
$('.add-field').click(function() {
|
||||||
|
var new_uuid = uuidv4();
|
||||||
|
var template = input_part_1 + new_uuid + input_part_2;
|
||||||
|
var temp = $(template).insertBefore('.help-block');
|
||||||
|
temp.append(minusButton);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.fields').on('click', '.delete-field', function(){
|
||||||
|
console.log($(this).parent());
|
||||||
|
$(this).parent().remove();
|
||||||
|
//$.get( "#")
|
||||||
|
});
|
||||||
|
|
||||||
|
function uuidv4() {
|
||||||
|
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
|
||||||
|
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#analyzer_type').on('input', function() {
|
||||||
|
if ($('#analyzer_type').val() == 2 || $('#analyzer_type').val() == 254){
|
||||||
|
$('#analyzer_metatype_name').show()
|
||||||
|
} else {
|
||||||
|
$('#analyzer_metatype_name').hide()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function generate_new_uuid(){
|
||||||
|
$.getJSON( "{{url_for('generate_uuid')}}", function( data ) {
|
||||||
|
console.log(data['uuid'])
|
||||||
|
$( "#analyzer_uuid" ).val(data['uuid']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -231,11 +231,12 @@
|
||||||
<div class="card-body text-dark">
|
<div class="card-body text-dark">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xl-8">
|
<div class="col-xl-10">
|
||||||
<table class="table table-striped table-bordered table-hover" id="myTable_1">
|
<table class="table table-striped table-bordered table-hover" id="myTable_1">
|
||||||
<thead class="thead-dark">
|
<thead class="thead-dark">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
|
<th>Group</th>
|
||||||
<th style="max-width: 800px;">uuid</th>
|
<th style="max-width: 800px;">uuid</th>
|
||||||
<th style="max-width: 800px;">last updated</th>
|
<th style="max-width: 800px;">last updated</th>
|
||||||
<th style="max-width: 800px;">Change max size limit</th>
|
<th style="max-width: 800px;">Change max size limit</th>
|
||||||
|
@ -246,8 +247,13 @@
|
||||||
{% for type in list_accepted_types %}
|
{% for type in list_accepted_types %}
|
||||||
{% if type['list_analyzer_uuid'] %}
|
{% if type['list_analyzer_uuid'] %}
|
||||||
{% for analyzer in type['list_analyzer_uuid'] %}
|
{% for analyzer in type['list_analyzer_uuid'] %}
|
||||||
<tr>
|
<tr id="{{analyzer['uuid']}}">
|
||||||
<td>{{type['id']}}</td>
|
<td>{{type['id']}}</td>
|
||||||
|
{%if analyzer['is_group_queue']%}
|
||||||
|
<td class="text-center"><i class="fa fa-group"></i></td>
|
||||||
|
{%else%}
|
||||||
|
<td></td>
|
||||||
|
{%endif%}
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
{{analyzer['uuid']}}
|
{{analyzer['uuid']}}
|
||||||
|
@ -284,6 +290,7 @@
|
||||||
<thead class="thead-dark">
|
<thead class="thead-dark">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Type Name</th>
|
<th>Type Name</th>
|
||||||
|
<th>Group</th>
|
||||||
<th style="max-width: 800px;">uuid</th>
|
<th style="max-width: 800px;">uuid</th>
|
||||||
<th style="max-width: 800px;">last updated</th>
|
<th style="max-width: 800px;">last updated</th>
|
||||||
<th style="max-width: 800px;">Change max size limit</th>
|
<th style="max-width: 800px;">Change max size limit</th>
|
||||||
|
@ -291,60 +298,49 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="analyzer_accepted_extended_types_tbody">
|
<tbody id="analyzer_accepted_extended_types_tbody">
|
||||||
{% for type in list_accepted_extended_types %}
|
{% for dict_queue in l_queue_extended_type %}
|
||||||
{% if type['list_analyzer_uuid'] %}
|
<tr>
|
||||||
{% for analyzer in type['list_analyzer_uuid'] %}
|
<td>{{dict_queue['extended_type']}}</td>
|
||||||
<tr>
|
{%if dict_queue['is_group_queue']%}
|
||||||
<td>{{type['name']}}</td>
|
<td class="text-center"><i class="fa fa-group"></i></td>
|
||||||
<td>
|
{%else%}
|
||||||
<div class="d-flex">
|
<td></td>
|
||||||
{{analyzer['uuid']}}
|
{%endif%}
|
||||||
<a href="{{ url_for('remove_analyzer') }}?redirect=1&type=254&metatype_name={{type['name']}}&analyzer_uuid={{analyzer['uuid']}}" class="ml-auto">
|
<td>
|
||||||
<button type="button" class="btn btn-outline-danger px-2 py-0"><i class="fa fa-trash"></i></button>
|
<div class="d-flex">
|
||||||
</a>
|
{{dict_queue['uuid']}}
|
||||||
</div>
|
<a href="{{ url_for('remove_analyzer') }}?redirect=1&type=254&metatype_name={{dict_queue['extended_type']}}&analyzer_uuid={{dict_queue['uuid']}}" class="ml-auto">
|
||||||
{%if analyzer['description']%}
|
<button type="button" class="btn btn-outline-danger px-2 py-0"><i class="fa fa-trash"></i></button>
|
||||||
<div class="text-info"><small>{{analyzer['description']}}</small></div>
|
</a>
|
||||||
{%endif%}
|
</div>
|
||||||
</td>
|
{%if dict_queue['description']%}
|
||||||
<td>{{analyzer['last_updated']}}</td>
|
<div class="text-info"><small>{{dict_queue['description']}}</small></div>
|
||||||
<td>
|
{%endif%}
|
||||||
<div class="d-xl-flex justify-content-xl-center">
|
</td>
|
||||||
<input class="form-control mr-lg-1" style="max-width: 100px;" type="number" id="max_size_analyzer_{{analyzer['uuid']}}" value="{{analyzer['size_limit']}}" min="0" required="">
|
<td>{{dict_queue['last_updated']}}</td>
|
||||||
<button type="button" class="btn btn-outline-secondary" onclick="window.location.href ='{{ url_for('analyzer_change_max_size') }}?analyzer_uuid={{analyzer['uuid']}}&redirect=0&max_size_analyzer='+$('#max_size_analyzer_{{analyzer['uuid']}}').val();">Change Max Size</button>
|
<td>
|
||||||
</div>
|
<div class="d-xl-flex justify-content-xl-center">
|
||||||
</td>
|
<input class="form-control mr-lg-1" style="max-width: 100px;" type="number" id="max_size_analyzer_{{dict_queue['uuid']}}" value="{{dict_queue['size_limit']}}" min="0" required="">
|
||||||
<td>
|
<button type="button" class="btn btn-outline-secondary" onclick="window.location.href ='{{ url_for('analyzer_change_max_size') }}?analyzer_uuid={{dict_queue['uuid']}}&redirect=0&max_size_analyzer='+$('#max_size_analyzer_{{dict_queue['uuid']}}').val();">Change Max Size</button>
|
||||||
<a href="{{ url_for('empty_analyzer_queue') }}?redirect=1&type=254&metatype_name={{type['name']}}&analyzer_uuid={{analyzer['uuid']}}">
|
</div>
|
||||||
<button type="button" class="btn btn-outline-danger"><i class="fa fa-eraser"></i></button>
|
</td>
|
||||||
</a>
|
<td>
|
||||||
<button type="button" class="btn btn-outline-info ml-xl-3" onclick="get_analyser_sample('{{type['name']}}', '{{analyzer['uuid']}}');"><i class="fa fa-database"></i> {{analyzer['length']}}</button>
|
<a href="{{ url_for('empty_analyzer_queue') }}?redirect=1&type=254&metatype_name={{dict_queue['extended_type']}}&analyzer_uuid={{dict_queue['uuid']}}">
|
||||||
</td>
|
<button type="button" class="btn btn-outline-danger"><i class="fa fa-eraser"></i></button>
|
||||||
</tr>
|
</a>
|
||||||
{% endfor %}
|
<button type="button" class="btn btn-outline-info ml-xl-3" onclick="get_analyser_sample('{{dict_queue['extended_type']}}', '{{dict_queue['uuid']}}');"><i class="fa fa-database"></i> {{dict_queue['length']}}</button>
|
||||||
{% endif %}
|
</td>
|
||||||
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xl-4">
|
<div class="col-xl-2">
|
||||||
<div class="card border-dark mt-3" style="max-width: 18rem;">
|
<a href="{{ url_for('analyzer_queue.create_analyzer_queue') }}" class="ml-auto">
|
||||||
<div class="card-body text-dark">
|
<button type="button" class="btn btn-primary"><i class="fa fa-plus"></i> Add New Analyzer Queue</button>
|
||||||
<h5 class="card-title">Add New Analyzer Queue</h5>
|
</a>
|
||||||
<input class="form-control" type="number" id="analyzer_type" value="1" min="1" max="254" required>
|
|
||||||
<input class="form-control" type="text" id="analyzer_metatype_name" placeholder="Meta Type Name">
|
|
||||||
<div class="input-group">
|
|
||||||
<div class="input-group-prepend">
|
|
||||||
<button class="btn btn-outline-secondary" type="button" onclick="generate_new_uuid();"><i class="fa fa-random"></i></button>
|
|
||||||
</div>
|
|
||||||
<input class="form-control" type="text" id="analyzer_uuid" required placeholder="Analyzer uuid">
|
|
||||||
</div>
|
|
||||||
<input class="form-control" type="text" id="analyzer_description" required placeholder="Optional Description">
|
|
||||||
<button type="button" class="btn btn-outline-primary mt-1" onclick="window.location.href ='{{ url_for('add_new_analyzer') }}?redirect=1&type='+$('#analyzer_type').val()+'&analyzer_uuid='+$('#analyzer_uuid').val()+'&metatype_name='+$('#analyzer_metatype_name').val()+'&analyzer_description='+$('#analyzer_description').val();">Add New Analyzer</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -430,7 +426,7 @@ if (tbody.children().length == 0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#accepted_type').on('input', function() {
|
$('#accepted_type').on('input', function() {
|
||||||
if ($('#accepted_type').val() == 254){
|
if ($('#analyzer_type').val() == 2 || $('#accepted_type').val() == 254){
|
||||||
$('#extended_type_name').show()
|
$('#extended_type_name').show()
|
||||||
} else {
|
} else {
|
||||||
$('#extended_type_name').hide()
|
$('#extended_type_name').hide()
|
||||||
|
@ -438,7 +434,7 @@ $('#accepted_type').on('input', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#analyzer_type').on('input', function() {
|
$('#analyzer_type').on('input', function() {
|
||||||
if ($('#analyzer_type').val() == 254){
|
if ($('#analyzer_type').val() == 2 || $('#analyzer_type').val() == 254){
|
||||||
$('#analyzer_metatype_name').show()
|
$('#analyzer_metatype_name').show()
|
||||||
} else {
|
} else {
|
||||||
$('#analyzer_metatype_name').hide()
|
$('#analyzer_metatype_name').hide()
|
||||||
|
|
Loading…
Reference in New Issue