mirror of https://github.com/Aidaho12/haproxy-wi
parent
9a4d29076e
commit
9ce85fdff0
|
@ -1,69 +1,57 @@
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask_caching import Cache
|
from flask_caching import Cache
|
||||||
from flask_login import LoginManager
|
from flask_login import LoginManager
|
||||||
|
from flask_apscheduler import APScheduler
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.secret_key = 'some secret salt'
|
app.config.from_object('app.config.Configuration')
|
||||||
app.jinja_env.add_extension('jinja2.ext.do')
|
app.jinja_env.add_extension('jinja2.ext.do')
|
||||||
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
|
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
|
||||||
|
|
||||||
cache = Cache(config={'CACHE_TYPE': 'SimpleCache', "CACHE_DEFAULT_TIMEOUT": 3000})
|
cache = Cache()
|
||||||
cache.init_app(app)
|
cache.init_app(app)
|
||||||
|
|
||||||
|
scheduler = APScheduler()
|
||||||
|
scheduler.init_app(app)
|
||||||
|
scheduler.start()
|
||||||
|
|
||||||
login_manager = LoginManager(app)
|
login_manager = LoginManager(app)
|
||||||
login_manager.login_view = 'login_page'
|
login_manager.login_view = 'login_page'
|
||||||
|
|
||||||
app.config['SITEMAP_INCLUDE_RULES_WITHOUT_PARAMS'] = True
|
|
||||||
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=3)
|
|
||||||
|
|
||||||
from app.routes.main import bp as main_bp
|
from app.routes.main import bp as main_bp
|
||||||
app.register_blueprint(main_bp)
|
|
||||||
|
|
||||||
from app.routes.overview import bp as overview_bp
|
from app.routes.overview import bp as overview_bp
|
||||||
app.register_blueprint(overview_bp)
|
|
||||||
|
|
||||||
from app.routes.add import bp as add_bp
|
from app.routes.add import bp as add_bp
|
||||||
app.register_blueprint(add_bp, url_prefix='/add')
|
|
||||||
|
|
||||||
from app.routes.service import bp as service_bp
|
from app.routes.service import bp as service_bp
|
||||||
app.register_blueprint(service_bp, url_prefix='/service')
|
|
||||||
|
|
||||||
from app.routes.config import bp as config_bp
|
from app.routes.config import bp as config_bp
|
||||||
app.register_blueprint(config_bp, url_prefix='/config')
|
|
||||||
|
|
||||||
from app.routes.logs import bp as logs_bp
|
from app.routes.logs import bp as logs_bp
|
||||||
app.register_blueprint(logs_bp, url_prefix='/logs')
|
|
||||||
|
|
||||||
from app.routes.metric import bp as metric_bp
|
from app.routes.metric import bp as metric_bp
|
||||||
app.register_blueprint(metric_bp, url_prefix='/metrics')
|
|
||||||
|
|
||||||
from app.routes.waf import bp as waf_bp
|
from app.routes.waf import bp as waf_bp
|
||||||
app.register_blueprint(waf_bp, url_prefix='/waf')
|
|
||||||
|
|
||||||
from app.routes.runtime import bp as runtime_bp
|
from app.routes.runtime import bp as runtime_bp
|
||||||
app.register_blueprint(runtime_bp, url_prefix='/runtimeapi')
|
|
||||||
|
|
||||||
from app.routes.smon import bp as smon_bp
|
from app.routes.smon import bp as smon_bp
|
||||||
app.register_blueprint(smon_bp, url_prefix='/smon')
|
|
||||||
|
|
||||||
from app.routes.checker import bp as checker_bp
|
from app.routes.checker import bp as checker_bp
|
||||||
app.register_blueprint(checker_bp, url_prefix='/checker')
|
|
||||||
|
|
||||||
from app.routes.portscanner import bp as portscanner_bp
|
from app.routes.portscanner import bp as portscanner_bp
|
||||||
app.register_blueprint(portscanner_bp, url_prefix='/portscanner')
|
|
||||||
|
|
||||||
from app.routes.install import bp as install_bp
|
from app.routes.install import bp as install_bp
|
||||||
app.register_blueprint(install_bp, url_prefix='/install')
|
|
||||||
|
|
||||||
from app.routes.user import bp as user_bp
|
from app.routes.user import bp as user_bp
|
||||||
app.register_blueprint(user_bp, url_prefix='/user')
|
|
||||||
|
|
||||||
from app.routes.server import bp as server_bp
|
from app.routes.server import bp as server_bp
|
||||||
app.register_blueprint(server_bp, url_prefix='/server')
|
|
||||||
|
|
||||||
from app.routes.admin import bp as admin_bp
|
from app.routes.admin import bp as admin_bp
|
||||||
|
|
||||||
|
app.register_blueprint(main_bp)
|
||||||
|
app.register_blueprint(overview_bp)
|
||||||
|
app.register_blueprint(add_bp, url_prefix='/add')
|
||||||
|
app.register_blueprint(service_bp, url_prefix='/service')
|
||||||
|
app.register_blueprint(config_bp, url_prefix='/config')
|
||||||
|
app.register_blueprint(logs_bp, url_prefix='/logs')
|
||||||
|
app.register_blueprint(metric_bp, url_prefix='/metrics')
|
||||||
|
app.register_blueprint(waf_bp, url_prefix='/waf')
|
||||||
|
app.register_blueprint(runtime_bp, url_prefix='/runtimeapi')
|
||||||
|
app.register_blueprint(smon_bp, url_prefix='/smon')
|
||||||
|
app.register_blueprint(checker_bp, url_prefix='/checker')
|
||||||
|
app.register_blueprint(portscanner_bp, url_prefix='/portscanner')
|
||||||
|
app.register_blueprint(install_bp, url_prefix='/install')
|
||||||
|
app.register_blueprint(user_bp, url_prefix='/user')
|
||||||
|
app.register_blueprint(server_bp, url_prefix='/server')
|
||||||
app.register_blueprint(admin_bp, url_prefix='/admin')
|
app.register_blueprint(admin_bp, url_prefix='/admin')
|
||||||
|
|
||||||
from app import login
|
from app import login
|
||||||
|
from app import jobs
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class Configuration(object):
|
||||||
|
SECRET_KEY = 'very secret salt to protect your Roxy-WI sessions'
|
||||||
|
SESSION_COOKIE_SECURE = True
|
||||||
|
SESSION_COOKIE_SAMESITE = 'strict'
|
||||||
|
CACHE_TYPE = 'SimpleCache'
|
||||||
|
CACHE_DEFAULT_TIMEOUT = 3000
|
||||||
|
SCHEDULER_API_ENABLED = True
|
|
@ -417,6 +417,25 @@ def default_values():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(str(e))
|
print(str(e))
|
||||||
|
|
||||||
|
data_source = [
|
||||||
|
{'name': 'roxy-wi-metrics', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-checker', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-keep_alive', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-portscanner', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-socket', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-prometheus-exporter', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'roxy-wi-smon', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||||
|
{'name': 'prometheus', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Prometheus service'},
|
||||||
|
{'name': 'grafana-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Grafana service'},
|
||||||
|
{'name': 'fail2ban', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Fail2ban service'},
|
||||||
|
{'name': 'rabbitmq-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Rabbitmq service'},
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
RoxyTool.insert_many(data_source).on_conflict_ignore().execute()
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
|
||||||
|
|
||||||
# Needs for insert version in first time
|
# Needs for insert version in first time
|
||||||
def update_db_v_3_4_5_22():
|
def update_db_v_3_4_5_22():
|
||||||
|
@ -649,7 +668,7 @@ def update_db_v_6_3_18():
|
||||||
|
|
||||||
def update_ver():
|
def update_ver():
|
||||||
try:
|
try:
|
||||||
Version.update(version='7.0.0.0').execute()
|
Version.update(version='7.0.1.0').execute()
|
||||||
except Exception:
|
except Exception:
|
||||||
print('Cannot update version')
|
print('Cannot update version')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from flask_apscheduler import APScheduler
|
||||||
|
|
||||||
|
from app import scheduler
|
||||||
|
import app.modules.db.sql as sql
|
||||||
|
import app.modules.roxywi.roxy as roxy
|
||||||
|
import app.modules.tools.common as tools_common
|
||||||
|
import app.modules.roxy_wi_tools as roxy_wi_tools
|
||||||
|
|
||||||
|
get_config = roxy_wi_tools.GetConfigVar()
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='update_plan', minutes=55, misfire_grace_time=None)
|
||||||
|
def update_user_status():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
print('update plan')
|
||||||
|
roxy.update_plan()
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='check_new_version', days=1, misfire_grace_time=None)
|
||||||
|
def check_new_version():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
tools = sql.get_roxy_tools()
|
||||||
|
for tool in tools:
|
||||||
|
print(f'update ver for {tool}')
|
||||||
|
ver = roxy.check_new_version(tool)
|
||||||
|
sql.update_tool_new_version(tool, ver)
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='update_cur_tool_versions', days=1, misfire_grace_time=None)
|
||||||
|
def update_cur_tool_versions():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
print('update update_cur_tool_versions')
|
||||||
|
tools_common.update_cur_tool_versions()
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='delete_old_uuid', minutes=60, misfire_grace_time=None)
|
||||||
|
def delete_old_uuid():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
print('update delete_old_uuid()')
|
||||||
|
sql.delete_old_uuid()
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='delete_action_history_for_period', minutes=70, misfire_grace_time=None)
|
||||||
|
def delete_action_history_for_period():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
print('update delete_action_history_for_period()')
|
||||||
|
sql.delete_action_history_for_period()
|
||||||
|
|
||||||
|
|
||||||
|
@scheduler.task('interval', id='delete_old_logs', hours=1, misfire_grace_time=None)
|
||||||
|
def delete_old_logs():
|
||||||
|
app = scheduler.app
|
||||||
|
with app.app_context():
|
||||||
|
print('update delete_old_logs()')
|
||||||
|
time_storage = sql.get_setting('log_time_storage')
|
||||||
|
log_path = get_config.get_config_var('main', 'log_path')
|
||||||
|
try:
|
||||||
|
time_storage_hours = time_storage * 24
|
||||||
|
for dirpath, dirnames, filenames in os.walk(log_path):
|
||||||
|
for file in filenames:
|
||||||
|
curpath = os.path.join(dirpath, file)
|
||||||
|
file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath))
|
||||||
|
if datetime.datetime.now() - file_modified > datetime.timedelta(hours=time_storage_hours):
|
||||||
|
os.remove(curpath)
|
||||||
|
except Exception as e:
|
||||||
|
print(f'error: cannot delete old log files: {e}')
|
|
@ -10,8 +10,9 @@ import app.modules.roxy_wi_tools as roxy_wi_tools
|
||||||
|
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
|
@cache.memoize(3)
|
||||||
def check_login():
|
def check_login():
|
||||||
if request.endpoint not in ('login_page', 'static', 'main.show_roxywi_version'):
|
if request.endpoint not in ('login_page', 'static', 'main.show_roxywi_version', 'service.check_service'):
|
||||||
try:
|
try:
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = roxywi_common.get_users_params()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -49,7 +50,10 @@ def redirect_to_login(response):
|
||||||
|
|
||||||
@app.route('/login', methods=['GET', 'POST'])
|
@app.route('/login', methods=['GET', 'POST'])
|
||||||
def login_page():
|
def login_page():
|
||||||
roxy.update_plan()
|
try:
|
||||||
|
roxy.update_plan()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
next_url = request.args.get('next') or request.form.get('next')
|
next_url = request.args.get('next') or request.form.get('next')
|
||||||
login = request.form.get('login')
|
login = request.form.get('login')
|
||||||
password = request.form.get('pass')
|
password = request.form.get('pass')
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
from flask import redirect, url_for, abort, g
|
||||||
|
|
||||||
|
import modules.roxywi.auth as roxywi_auth
|
||||||
|
import modules.roxywi.common as roxywi_common
|
||||||
|
|
||||||
|
|
||||||
|
def check_services(fn):
|
||||||
|
@wraps(fn)
|
||||||
|
def decorated_view(*args, **kwargs):
|
||||||
|
service = kwargs['service']
|
||||||
|
if service not in ('haproxy', 'nginx', 'apache', 'keepalived'):
|
||||||
|
abort(405, 'Wrong service')
|
||||||
|
if not roxywi_auth.is_access_permit_to_service(service):
|
||||||
|
abort(403, f'You do not have needed permissions to access to {service.title()} service')
|
||||||
|
return fn(*args, **kwargs)
|
||||||
|
return decorated_view
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_params(virt=0, disable=0):
|
||||||
|
def inner_decorator(fn):
|
||||||
|
@wraps(fn)
|
||||||
|
def decorated_views(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
user_params = roxywi_common.get_users_params(virt=virt, disable=disable, service=kwargs.get('service'))
|
||||||
|
g.user_params = user_params
|
||||||
|
except Exception as e:
|
||||||
|
return redirect(url_for('login_page'))
|
||||||
|
return fn(*args, **kwargs)
|
||||||
|
return decorated_views
|
||||||
|
return inner_decorator
|
|
@ -616,6 +616,19 @@ class SmonDnsCheck(BaseModel):
|
||||||
primary_key = False
|
primary_key = False
|
||||||
|
|
||||||
|
|
||||||
|
class RoxyTool(BaseModel):
|
||||||
|
id = AutoField()
|
||||||
|
name = CharField()
|
||||||
|
current_version = CharField()
|
||||||
|
new_version = CharField()
|
||||||
|
is_roxy = IntegerField()
|
||||||
|
desc = CharField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
table_name = 'roxy_tools'
|
||||||
|
constraints = [SQL('UNIQUE (name)')]
|
||||||
|
|
||||||
|
|
||||||
def create_tables():
|
def create_tables():
|
||||||
with conn:
|
with conn:
|
||||||
conn.create_tables([User, Server, Role, Telegram, Slack, UUID, Token, ApiToken, Groups, UserGroups, ConfigVersion,
|
conn.create_tables([User, Server, Role, Telegram, Slack, UUID, Token, ApiToken, Groups, UserGroups, ConfigVersion,
|
||||||
|
@ -623,4 +636,4 @@ def create_tables():
|
||||||
PortScannerSettings, PortScannerPorts, PortScannerHistory, ServiceSetting, MetricsHttpStatus,
|
PortScannerSettings, PortScannerPorts, PortScannerHistory, ServiceSetting, MetricsHttpStatus,
|
||||||
SMON, WafRules, Alerts, GeoipCodes, NginxMetrics, SystemInfo, Services, UserName, GitSetting,
|
SMON, WafRules, Alerts, GeoipCodes, NginxMetrics, SystemInfo, Services, UserName, GitSetting,
|
||||||
CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus, KeepaliveRestart, PD, SmonHistory,
|
CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus, KeepaliveRestart, PD, SmonHistory,
|
||||||
SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup])
|
SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup, RoxyTool])
|
||||||
|
|
|
@ -8,32 +8,36 @@ import modules.db.sql as sql
|
||||||
import modules.roxywi.common as roxywi_common
|
import modules.roxywi.common as roxywi_common
|
||||||
|
|
||||||
|
|
||||||
def check_login(user_uuid, token, **kwargs) -> str:
|
def check_login(user_uuid, token) -> str:
|
||||||
if user_uuid is None:
|
if user_uuid is None:
|
||||||
return 'login_page'
|
return 'login_page'
|
||||||
|
|
||||||
if user_uuid is not None:
|
if user_uuid is not None:
|
||||||
if sql.get_user_name_by_uuid(user_uuid) is None:
|
if sql.get_user_name_by_uuid(user_uuid) is None:
|
||||||
return 'login_page'
|
return 'login_page'
|
||||||
if kwargs.get('service'):
|
else:
|
||||||
required_service = str(kwargs.get('service'))
|
try:
|
||||||
user_id = sql.get_user_id_by_uuid(user_uuid)
|
ip = request.remote_addr
|
||||||
user_services = sql.select_user_services(user_id)
|
except Exception:
|
||||||
if required_service in user_services:
|
ip = ''
|
||||||
return 'ok'
|
|
||||||
else:
|
|
||||||
return 'overview.index'
|
|
||||||
|
|
||||||
try:
|
sql.update_last_act_user(user_uuid, token, ip)
|
||||||
ip = request.remote_addr
|
|
||||||
except Exception:
|
|
||||||
ip = ''
|
|
||||||
|
|
||||||
sql.update_last_act_user(user_uuid, token, ip)
|
|
||||||
|
|
||||||
|
return 'ok'
|
||||||
return 'login_page'
|
return 'login_page'
|
||||||
|
|
||||||
|
|
||||||
|
def is_access_permit_to_service(service: str) -> bool:
|
||||||
|
service_id = sql.select_service_id_by_slug(service)
|
||||||
|
user_uuid = request.cookies.get('uuid')
|
||||||
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
||||||
|
user_services = sql.select_user_services(user_id)
|
||||||
|
if str(service_id) in user_services:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def is_admin(level=1, **kwargs):
|
def is_admin(level=1, **kwargs):
|
||||||
if kwargs.get('role_id'):
|
if kwargs.get('role_id'):
|
||||||
role = kwargs.get('role_id')
|
role = kwargs.get('role_id')
|
||||||
|
@ -121,7 +125,7 @@ def do_login(user_uuid: str, user_group: str, user: str, next_url: str):
|
||||||
|
|
||||||
login_user(user)
|
login_user(user)
|
||||||
resp = make_response(redirect_to)
|
resp = make_response(redirect_to)
|
||||||
resp.set_cookie('uuid', user_uuid, secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), httponly=True, samesite='Strict')
|
resp.set_cookie('uuid', user_uuid, secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), samesite='Strict')
|
||||||
resp.set_cookie('group', str(user_group), expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), samesite='Strict')
|
resp.set_cookie('group', str(user_group), expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), samesite='Strict')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -29,7 +29,6 @@ def get_user_group(**kwargs) -> str:
|
||||||
user_group = g.name
|
user_group = g.name
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(f'error: {e}')
|
raise Exception(f'error: {e}')
|
||||||
|
|
||||||
return user_group
|
return user_group
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,8 +209,8 @@ def get_users_params(**kwargs):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
group_id = int(request.cookies.get('group'))
|
group_id = int(request.cookies.get('group'))
|
||||||
except Exception:
|
except Exception as e:
|
||||||
raise Exception('error: Cannot get user group')
|
raise Exception(f'error: Cannot get user group: {e}')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
role = sql.get_user_role_by_uuid(user_uuid, group_id)
|
role = sql.get_user_role_by_uuid(user_uuid, group_id)
|
||||||
|
@ -220,19 +219,25 @@ def get_users_params(**kwargs):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user_id = sql.get_user_id_by_uuid(user_uuid)
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
||||||
user_services = sql.select_user_services(user_id)
|
except Exception as e:
|
||||||
token = sql.get_token(user_uuid)
|
raise Exception(f'error: Cannot get user id {e}')
|
||||||
except Exception:
|
|
||||||
raise Exception('error: Cannot get user token')
|
|
||||||
|
|
||||||
if kwargs.get('virt') and kwargs.get('haproxy'):
|
try:
|
||||||
|
user_services = sql.select_user_services(user_id)
|
||||||
|
except Exception as e:
|
||||||
|
raise Exception(f'error: Cannot get user services {e}')
|
||||||
|
|
||||||
|
try:
|
||||||
|
token = sql.get_token(user_uuid)
|
||||||
|
except Exception as e:
|
||||||
|
raise Exception(f'error: Cannot get user token {e}')
|
||||||
|
|
||||||
|
if kwargs.get('virt') and kwargs.get('service') == 'haproxy':
|
||||||
servers = get_dick_permit(virt=1, haproxy=1)
|
servers = get_dick_permit(virt=1, haproxy=1)
|
||||||
elif kwargs.get('virt'):
|
elif kwargs.get('virt'):
|
||||||
servers = get_dick_permit(virt=1)
|
servers = get_dick_permit(virt=1)
|
||||||
elif kwargs.get('disable'):
|
elif kwargs.get('disable'):
|
||||||
servers = get_dick_permit(disable=0)
|
servers = get_dick_permit(disable=0)
|
||||||
elif kwargs.get('haproxy'):
|
|
||||||
servers = get_dick_permit(haproxy=1)
|
|
||||||
elif kwargs.get('service'):
|
elif kwargs.get('service'):
|
||||||
servers = get_dick_permit(service=kwargs.get('service'))
|
servers = get_dick_permit(service=kwargs.get('service'))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -9,29 +9,22 @@ import modules.roxywi.common as roxywi_common
|
||||||
get_config_var = roxy_wi_tools.GetConfigVar()
|
get_config_var = roxy_wi_tools.GetConfigVar()
|
||||||
|
|
||||||
|
|
||||||
def roxy_wi_log(**kwargs) -> list:
|
def roxy_wi_log() -> list:
|
||||||
log_path = get_config_var.get_config_var('main', 'log_path')
|
log_path = get_config_var.get_config_var('main', 'log_path')
|
||||||
|
user_group_id = roxywi_common.get_user_group(id=1)
|
||||||
|
|
||||||
if kwargs.get('log_id'):
|
if user_group_id != 1:
|
||||||
selects = roxywi_common.get_files(log_path, "log")
|
user_group = roxywi_common.get_user_group()
|
||||||
for key, value in selects:
|
group_grep = f'|grep "group: {user_group}"'
|
||||||
log_file = f"{kwargs.get('file')}.log"
|
|
||||||
if log_file == value:
|
|
||||||
return key
|
|
||||||
else:
|
else:
|
||||||
user_group_id = roxywi_common.get_user_group(id=1)
|
group_grep = ''
|
||||||
if user_group_id != 1:
|
cmd = f"find {log_path}/roxy-wi-* -type f -exec stat --format '%Y :%y %n' '{{}}' \; | sort -nr | cut -d: -f2- " \
|
||||||
user_group = roxywi_common.get_user_group()
|
f"| head -1 |awk '{{print $4}}' |xargs tail {group_grep}|sort -r"
|
||||||
group_grep = f'|grep "group: {user_group}"'
|
try:
|
||||||
else:
|
output, stderr = server_mod.subprocess_execute(cmd)
|
||||||
group_grep = ''
|
return output
|
||||||
cmd = f"find {log_path}/roxy-wi-* -type f -exec stat --format '%Y :%y %n' '{{}}' \; | sort -nr | cut -d: -f2- " \
|
except Exception:
|
||||||
f"| head -1 |awk '{{print $4}}' |xargs tail {group_grep}|sort -r"
|
return ['']
|
||||||
try:
|
|
||||||
output, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
return output
|
|
||||||
except Exception:
|
|
||||||
return ['']
|
|
||||||
|
|
||||||
|
|
||||||
def show_log(stdout, **kwargs):
|
def show_log(stdout, **kwargs):
|
||||||
|
|
|
@ -5,6 +5,7 @@ from flask import render_template, request
|
||||||
import modules.db.sql as sql
|
import modules.db.sql as sql
|
||||||
import modules.common.common as common
|
import modules.common.common as common
|
||||||
import modules.roxywi.logs as roxy_logs
|
import modules.roxywi.logs as roxy_logs
|
||||||
|
import modules.tools.common as tools_common
|
||||||
import modules.roxywi.common as roxywi_common
|
import modules.roxywi.common as roxywi_common
|
||||||
import modules.server.server as server_mod
|
import modules.server.server as server_mod
|
||||||
import modules.service.common as service_common
|
import modules.service.common as service_common
|
||||||
|
@ -214,29 +215,18 @@ def show_services_overview():
|
||||||
except psutil.NoSuchProcess:
|
except psutil.NoSuchProcess:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cmd = "systemctl is-active roxy-wi-metrics"
|
roxy_tools = sql.get_roxy_tools()
|
||||||
metrics_master, stderr = server_mod.subprocess_execute(cmd)
|
roxy_tools_status = {}
|
||||||
cmd = "systemctl is-active roxy-wi-checker"
|
for tool in roxy_tools:
|
||||||
checker_master, stderr = server_mod.subprocess_execute(cmd)
|
if tool == 'roxy-wi-prometheus-exporter':
|
||||||
cmd = "systemctl is-active roxy-wi-keep_alive"
|
continue
|
||||||
keep_alive, stderr = server_mod.subprocess_execute(cmd)
|
status = tools_common.is_tool_active(tool)
|
||||||
cmd = "systemctl is-active roxy-wi-smon"
|
roxy_tools_status.setdefault(tool, status)
|
||||||
smon, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
cmd = "systemctl is-active roxy-wi-portscanner"
|
|
||||||
port_scanner, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
cmd = "systemctl is-active roxy-wi-socket"
|
|
||||||
socket, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'ajax/show_services_ovw.html', role=user_params['role'], metrics_master=''.join(metrics_master),
|
'ajax/show_services_ovw.html', role=user_params['role'], roxy_tools_status=roxy_tools_status, grafana=grafana,
|
||||||
metrics_worker=metrics_worker, checker_master=''.join(checker_master), checker_worker=checker_worker,
|
is_checker_worker=is_checker_worker, is_metrics_worker=is_metrics_worker, host=host,
|
||||||
keep_alive=''.join(keep_alive), smon=''.join(smon), port_scanner=''.join(port_scanner), grafana=grafana,
|
checker_worker=checker_worker, metrics_worker=metrics_worker, lang=lang
|
||||||
socket=''.join(socket), is_checker_worker=is_checker_worker, is_metrics_worker=is_metrics_worker, host=host,
|
|
||||||
roxy_wi_log_id=roxy_logs.roxy_wi_log(log_id=1, file="roxy-wi-"),
|
|
||||||
metrics_log_id=roxy_logs.roxy_wi_log(log_id=1, file="metrics"),
|
|
||||||
checker_log_id=roxy_logs.roxy_wi_log(log_id=1, file="checker"),
|
|
||||||
keep_alive_log_id=roxy_logs.roxy_wi_log(log_id=1, file="keep_alive"),
|
|
||||||
socket_log_id=roxy_logs.roxy_wi_log(log_id=1, file="socket"), error=stderr, lang=lang
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,28 @@ def check_new_version(service):
|
||||||
current_ver = check_ver()
|
current_ver = check_ver()
|
||||||
proxy = sql.get_setting('proxy')
|
proxy = sql.get_setting('proxy')
|
||||||
res = ''
|
res = ''
|
||||||
user_name = sql.select_user_name()
|
|
||||||
proxy_dict = {}
|
proxy_dict = {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
if proxy is not None and proxy != '' and proxy != 'None':
|
||||||
|
proxy_dict = {"https": proxy, "http": proxy}
|
||||||
|
response = requests.get(f'https://roxy-wi.org/version/get/{service}', timeout=1, proxies=proxy_dict)
|
||||||
|
if service == 'roxy-wi':
|
||||||
|
requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1, proxies=proxy_dict)
|
||||||
|
|
||||||
|
res = response.content.decode(encoding='UTF-8')
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
roxywi_common.logging('Roxy-WI server', f' {e}', roxywi=1)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def update_user_status() -> None:
|
||||||
|
proxy = sql.get_setting('proxy')
|
||||||
|
proxy_dict = {}
|
||||||
|
if proxy is not None and proxy != '' and proxy != 'None':
|
||||||
|
proxy_dict = {"https": proxy, "http": proxy}
|
||||||
|
user_name = sql.select_user_name()
|
||||||
retry_strategy = Retry(
|
retry_strategy = Retry(
|
||||||
total=3,
|
total=3,
|
||||||
status_forcelist=[429, 500, 502, 503, 504],
|
status_forcelist=[429, 500, 502, 503, 504],
|
||||||
|
@ -67,26 +87,13 @@ def check_new_version(service):
|
||||||
adapter = HTTPAdapter(max_retries=retry_strategy)
|
adapter = HTTPAdapter(max_retries=retry_strategy)
|
||||||
roxy_wi_get_plan = requests.Session()
|
roxy_wi_get_plan = requests.Session()
|
||||||
roxy_wi_get_plan.mount("https://", adapter)
|
roxy_wi_get_plan.mount("https://", adapter)
|
||||||
|
roxy_wi_get_plan = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1, proxies=proxy_dict)
|
||||||
try:
|
try:
|
||||||
if proxy is not None and proxy != '' and proxy != 'None':
|
status = roxy_wi_get_plan.content.decode(encoding='UTF-8')
|
||||||
proxy_dict = {"https": proxy, "http": proxy}
|
status = status.split(' ')
|
||||||
response = requests.get(f'https://roxy-wi.org/version/get/{service}', timeout=1, proxies=proxy_dict)
|
sql.update_user_status(status[0], status[1].strip(), status[2].strip())
|
||||||
if service == 'roxy-wi':
|
except Exception as e:
|
||||||
requests.get(f'https://roxy-wi.org/version/send/{current_ver}', timeout=1, proxies=proxy_dict)
|
roxywi_common.logging('Roxy-WI server', f'error: Cannot get user status {e}', roxywi=1)
|
||||||
roxy_wi_get_plan = requests.get(f'https://roxy-wi.org/user-name/{user_name}', timeout=1, proxies=proxy_dict)
|
|
||||||
try:
|
|
||||||
status = roxy_wi_get_plan.content.decode(encoding='UTF-8')
|
|
||||||
status = status.split(' ')
|
|
||||||
sql.update_user_status(status[0], status[1].strip(), status[2].strip())
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
res = response.content.decode(encoding='UTF-8')
|
|
||||||
except requests.exceptions.RequestException as e:
|
|
||||||
roxywi_common.logging('Roxy-WI server', f' {e}', roxywi=1)
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def action_service(action: str, service: str) -> str:
|
def action_service(action: str, service: str) -> str:
|
||||||
|
@ -124,3 +131,5 @@ def update_plan():
|
||||||
sql.insert_user_name(user_name)
|
sql.insert_user_name(user_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.logging('Cannot update subscription: ', str(e), roxywi=1)
|
roxywi_common.logging('Cannot update subscription: ', str(e), roxywi=1)
|
||||||
|
|
||||||
|
update_user_status()
|
||||||
|
|
|
@ -55,24 +55,24 @@ def load_checker() -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def update_haproxy_settings(setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id) -> None:
|
def update_haproxy_settings(setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id) -> str:
|
||||||
if sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
if sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
||||||
maxconn_alert, setting_id):
|
maxconn_alert, setting_id):
|
||||||
print('ok')
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
print('error: Cannot update Checker settings')
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
||||||
|
|
||||||
def update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id) -> None:
|
def update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id) -> str:
|
||||||
if sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
if sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
||||||
setting_id):
|
setting_id):
|
||||||
print('ok')
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
print('error: Cannot update Checker settings')
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
||||||
|
|
||||||
def update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id) -> None:
|
def update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id) -> str:
|
||||||
if sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, setting_id):
|
if sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, setting_id):
|
||||||
print('ok')
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
print('error: Cannot update Checker settings')
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
|
@ -1,75 +1,24 @@
|
||||||
import distro
|
import distro
|
||||||
|
|
||||||
|
import modules.db.sql as sql
|
||||||
import modules.roxywi.roxy as roxywi_mod
|
import modules.roxywi.roxy as roxywi_mod
|
||||||
import modules.server.server as server_mod
|
import modules.server.server as server_mod
|
||||||
|
|
||||||
|
|
||||||
def get_services_status():
|
def get_services_status():
|
||||||
|
update_cur_tool_versions()
|
||||||
services = []
|
services = []
|
||||||
is_in_docker = roxywi_mod.is_docker()
|
services_name = sql.get_all_tools()
|
||||||
services_name = {
|
|
||||||
'roxy-wi-checker': '',
|
|
||||||
'roxy-wi-keep_alive': '',
|
|
||||||
'roxy-wi-metrics': '',
|
|
||||||
'roxy-wi-portscanner': '',
|
|
||||||
'roxy-wi-smon': '',
|
|
||||||
'roxy-wi-socket': '',
|
|
||||||
'roxy-wi-prometheus-exporter': 'Prometheus exporter',
|
|
||||||
'prometheus': 'Prometheus service',
|
|
||||||
'grafana-server': 'Grafana service',
|
|
||||||
'fail2ban': 'Fail2ban service',
|
|
||||||
'rabbitmq-server': 'Message broker service'
|
|
||||||
}
|
|
||||||
for s, v in services_name.items():
|
for s, v in services_name.items():
|
||||||
if is_in_docker:
|
status = is_tool_active(s)
|
||||||
cmd = f"sudo supervisorctl status {s}|awk '{{print $2}}'"
|
services.append([s, status, v])
|
||||||
else:
|
|
||||||
cmd = f"systemctl is-active {s}"
|
|
||||||
|
|
||||||
status, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
|
|
||||||
if s != 'roxy-wi-keep_alive':
|
|
||||||
service_name = s.split('_')[0]
|
|
||||||
if s == 'grafana-server':
|
|
||||||
service_name = 'grafana'
|
|
||||||
elif s == 'roxy-wi-keep_alive' and distro.id() == 'ubuntu':
|
|
||||||
service_name = 'roxy-wi-keep-alive'
|
|
||||||
else:
|
|
||||||
service_name = s
|
|
||||||
|
|
||||||
if service_name == 'prometheus':
|
|
||||||
cmd = "prometheus --version 2>&1 |grep prometheus|awk '{print $3}'"
|
|
||||||
else:
|
|
||||||
if distro.id() == 'ubuntu':
|
|
||||||
cmd = f"apt list --installed 2>&1 |grep {service_name}|awk '{{print $2}}'|sed 's/-/./'"
|
|
||||||
else:
|
|
||||||
cmd = f"rpm -q {service_name}|awk -F\"{service_name}\" '{{print $2}}' |awk -F\".noa\" '{{print $1}}' |sed 's/-//1' |sed 's/-/./'"
|
|
||||||
service_ver, stderr = server_mod.subprocess_execute(cmd)
|
|
||||||
|
|
||||||
try:
|
|
||||||
if service_ver[0] == 'command' or service_ver[0] == 'prometheus:':
|
|
||||||
service_ver[0] = ''
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
services.append([s, status, v, service_ver[0]])
|
|
||||||
except Exception:
|
|
||||||
services.append([s, status, v, ''])
|
|
||||||
|
|
||||||
return services
|
return services
|
||||||
|
|
||||||
|
|
||||||
def update_roxy_wi(service: str) -> str:
|
def update_roxy_wi(service: str) -> str:
|
||||||
restart_service = ''
|
restart_service = ''
|
||||||
services = ['roxy-wi-checker',
|
services = sql.get_roxy_tools()
|
||||||
'roxy-wi',
|
|
||||||
'roxy-wi-keep_alive',
|
|
||||||
'roxy-wi-smon',
|
|
||||||
'roxy-wi-metrics',
|
|
||||||
'roxy-wi-portscanner',
|
|
||||||
'roxy-wi-socket',
|
|
||||||
'roxy-wi-prometheus-exporter']
|
|
||||||
|
|
||||||
if service not in services:
|
if service not in services:
|
||||||
raise Exception(f'error: {service} is not part of Roxy-WI')
|
raise Exception(f'error: {service} is not part of Roxy-WI')
|
||||||
|
@ -91,8 +40,49 @@ def update_roxy_wi(service: str) -> str:
|
||||||
cmd = f'sudo -S yum -y install {service} {restart_service}'
|
cmd = f'sudo -S yum -y install {service} {restart_service}'
|
||||||
|
|
||||||
output, stderr = server_mod.subprocess_execute(cmd)
|
output, stderr = server_mod.subprocess_execute(cmd)
|
||||||
|
update_cur_tool_version(service)
|
||||||
|
|
||||||
if stderr != '':
|
if stderr != '':
|
||||||
return str(stderr)
|
return str(stderr)
|
||||||
else:
|
else:
|
||||||
return str(output)
|
return str(output)
|
||||||
|
|
||||||
|
|
||||||
|
def is_tool_active(tool_name: str) -> str:
|
||||||
|
is_in_docker = roxywi_mod.is_docker()
|
||||||
|
if is_in_docker:
|
||||||
|
cmd = f"sudo supervisorctl status {tool_name}|awk '{{print $2}}'"
|
||||||
|
else:
|
||||||
|
cmd = f"systemctl is-active {tool_name}"
|
||||||
|
status, stderr = server_mod.subprocess_execute(cmd)
|
||||||
|
return status[0]
|
||||||
|
|
||||||
|
|
||||||
|
def update_cur_tool_versions() -> None:
|
||||||
|
tools = sql.get_all_tools()
|
||||||
|
for s, v in tools.items():
|
||||||
|
update_cur_tool_version(s)
|
||||||
|
|
||||||
|
|
||||||
|
def update_cur_tool_version(tool_name: str) -> None:
|
||||||
|
correct_name = tool_name
|
||||||
|
if tool_name == 'grafana-server':
|
||||||
|
correct_name = 'grafana'
|
||||||
|
if tool_name == 'prometheus':
|
||||||
|
cmd = "prometheus --version 2>&1 |grep prometheus|awk '{print $3}'"
|
||||||
|
else:
|
||||||
|
if distro.id() == 'ubuntu':
|
||||||
|
cmd = f"apt list --installed 2>&1 |grep {correct_name}|awk '{{print $2}}'|sed 's/-/./'"
|
||||||
|
else:
|
||||||
|
cmd = f"rpm -q {correct_name}|awk -F\"{correct_name}\" '{{print $2}}' |awk -F\".noa\" '{{print $1}}' |sed 's/-//1' |sed 's/-/./'"
|
||||||
|
|
||||||
|
service_ver, stderr = server_mod.subprocess_execute(cmd)
|
||||||
|
|
||||||
|
if service_ver == 'command' or service_ver == 'prometheus:':
|
||||||
|
service_ver = ''
|
||||||
|
|
||||||
|
sql.update_tool_cur_version(tool_name, service_ver[0])
|
||||||
|
|
||||||
|
|
||||||
|
def get_cur_tool_version(tool_name: str) -> str:
|
||||||
|
return sql.get_tool_cur_version(tool_name)
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from flask import render_template, request, jsonify, redirect, url_for
|
from flask import render_template, request, jsonify, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.add import bp
|
from app.routes.add import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.config.add as add_mod
|
import app.modules.config.add as add_mod
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -25,18 +26,12 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>')
|
@bp.route('/<service>')
|
||||||
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def add(service):
|
def add(service):
|
||||||
roxywi_auth.page_for_admin(level=3)
|
roxywi_auth.page_for_admin(level=3)
|
||||||
|
|
||||||
if service not in ('haproxy', 'nginx'):
|
user_params = g.user_params
|
||||||
raise Exception('error: wrong service')
|
|
||||||
|
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params(service=service)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
add = request.form.get('add')
|
add = request.form.get('add')
|
||||||
conf_add = request.form.get('conf')
|
conf_add = request.form.get('conf')
|
||||||
|
|
||||||
|
@ -61,14 +56,14 @@ def add(service):
|
||||||
maps = roxywi_common.get_files(folder=f'{lib_path}/maps/{user_group}', file_format="map")
|
maps = roxywi_common.get_files(folder=f'{lib_path}/maps/{user_group}', file_format="map")
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'add.html', h2=1, role=user_params['role'], user=user, selects=user_params['servers'], add=add,
|
'add.html', h2=1, role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=add,
|
||||||
conf_add=conf_add, group=user_group, options=sql.select_options(), saved_servers=sql.select_saved_servers(),
|
conf_add=conf_add, group=user_group, options=sql.select_options(), saved_servers=sql.select_saved_servers(),
|
||||||
white_lists=white_lists, black_lists=black_lists, user_services=user_params['user_services'],
|
white_lists=white_lists, black_lists=black_lists, user_services=user_params['user_services'],
|
||||||
token=user_params['token'], lang=user_params['lang'], maps=maps
|
token=user_params['token'], lang=user_params['lang'], maps=maps
|
||||||
)
|
)
|
||||||
elif service == 'nginx':
|
elif service == 'nginx':
|
||||||
return render_template(
|
return render_template(
|
||||||
'add_nginx.html', h2=1, role=user_params['role'], user=user, selects=user_params['servers'], add=add,
|
'add_nginx.html', h2=1, role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=add,
|
||||||
conf_add=conf_add, user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
conf_add=conf_add, user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -2,11 +2,13 @@ import os
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
import distro
|
import distro
|
||||||
from flask import render_template, request, redirect, url_for
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
|
from app import scheduler
|
||||||
from app.routes.admin import bp
|
from app.routes.admin import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.roxy as roxy
|
import app.modules.roxywi.roxy as roxy
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -23,15 +25,11 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('')
|
@bp.route('')
|
||||||
|
@get_user_params()
|
||||||
def admin():
|
def admin():
|
||||||
roxywi_auth.page_for_admin()
|
roxywi_auth.page_for_admin()
|
||||||
|
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
users = sql.select_users()
|
users = sql.select_users()
|
||||||
settings = sql.get_setting('', all=1)
|
settings = sql.get_setting('', all=1)
|
||||||
ldap_enable = sql.get_setting('ldap_enable')
|
ldap_enable = sql.get_setting('ldap_enable')
|
||||||
|
@ -49,7 +47,7 @@ def admin():
|
||||||
grafana = grafana[0]
|
grafana = grafana[0]
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'admin.html', h2=1, role=user_params['role'], user=user, users=users, groups=sql.select_groups(),
|
'admin.html', role=user_params['role'], user=user_params['user'], users=users, groups=sql.select_groups(),
|
||||||
servers=sql.select_servers(full=1), masters=masters, sshs=sql.select_ssh(), roles=sql.select_roles(),
|
servers=sql.select_servers(full=1), masters=masters, sshs=sql.select_ssh(), roles=sql.select_roles(),
|
||||||
settings=settings, backups=backups, s3_backups=s3_backups, services=services, timezones=pytz.all_timezones,
|
settings=settings, backups=backups, s3_backups=s3_backups, services=services, timezones=pytz.all_timezones,
|
||||||
page="users.py", user_services=user_params['user_services'], ldap_enable=ldap_enable, gits=gits, guide_me=1,
|
page="users.py", user_services=user_params['user_services'], ldap_enable=ldap_enable, gits=gits, guide_me=1,
|
||||||
|
@ -93,23 +91,21 @@ def action_tools(service, action):
|
||||||
def update_roxywi():
|
def update_roxywi():
|
||||||
roxywi_auth.page_for_admin()
|
roxywi_auth.page_for_admin()
|
||||||
versions = roxy.versions()
|
versions = roxy.versions()
|
||||||
checker_ver = roxy.check_new_version('checker')
|
|
||||||
smon_ver = roxy.check_new_version('smon')
|
|
||||||
metrics_ver = roxy.check_new_version('metrics')
|
|
||||||
keep_ver = roxy.check_new_version('keep_alive')
|
|
||||||
portscanner_ver = roxy.check_new_version('portscanner')
|
|
||||||
socket_ver = roxy.check_new_version('socket')
|
|
||||||
prometheus_exp_ver = roxy.check_new_version('prometheus-exporter')
|
|
||||||
services = tools_common.get_services_status()
|
services = tools_common.get_services_status()
|
||||||
lang = roxywi_common.get_user_lang_for_flask()
|
lang = roxywi_common.get_user_lang_for_flask()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'ajax/load_updateroxywi.html', services=services, versions=versions, checker_ver=checker_ver, smon_ver=smon_ver,
|
'ajax/load_updateroxywi.html', services=services, versions=versions, lang=lang
|
||||||
metrics_ver=metrics_ver, portscanner_ver=portscanner_ver, socket_ver=socket_ver, prometheus_exp_ver=prometheus_exp_ver,
|
|
||||||
keep_ver=keep_ver, lang=lang
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route('/update/check')
|
||||||
|
def check_update():
|
||||||
|
roxywi_auth.page_for_admin()
|
||||||
|
scheduler.run_job('check_new_version')
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/openvpn')
|
@bp.route('/openvpn')
|
||||||
def load_openvpn():
|
def load_openvpn():
|
||||||
roxywi_auth.page_for_admin()
|
roxywi_auth.page_for_admin()
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from flask import render_template, request, redirect, url_for
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.checker import bp
|
from app.routes.checker import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
|
@ -18,17 +19,13 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/settings')
|
@bp.route('/settings')
|
||||||
|
@get_user_params()
|
||||||
def checker_settings():
|
def checker_settings():
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'checker.html', h2=1, role=user_params['role'], user=user, lang=user_params['lang'],
|
'checker.html', role=user_params['role'], user=user_params['user'], lang=user_params['lang'],
|
||||||
token=user_params['token'], user_services=user_params['user_services']
|
token=user_params['token'], user_services=user_params['user_services']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -39,19 +36,20 @@ def update_settings():
|
||||||
setting_id = int(request.form.get('setting_id'))
|
setting_id = int(request.form.get('setting_id'))
|
||||||
email = int(request.form.get('email'))
|
email = int(request.form.get('email'))
|
||||||
service_alert = int(request.form.get('server'))
|
service_alert = int(request.form.get('server'))
|
||||||
backend_alert = int(request.form.get('backend'))
|
|
||||||
telegram_id = int(request.form.get('telegram_id'))
|
telegram_id = int(request.form.get('telegram_id'))
|
||||||
slack_id = int(request.form.get('slack_id'))
|
slack_id = int(request.form.get('slack_id'))
|
||||||
pd_id = int(request.form.get('pd_id'))
|
pd_id = int(request.form.get('pd_id'))
|
||||||
|
|
||||||
if service == 'haproxy':
|
if service == 'haproxy':
|
||||||
maxconn_alert = int(request.form.get('maxconn'))
|
maxconn_alert = int(request.form.get('maxconn'))
|
||||||
|
backend_alert = int(request.form.get('backend'))
|
||||||
return checker_mod.update_haproxy_settings(
|
return checker_mod.update_haproxy_settings(
|
||||||
setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id
|
setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id
|
||||||
)
|
)
|
||||||
elif service in ('nginx', 'apache'):
|
elif service in ('nginx', 'apache'):
|
||||||
return checker_mod.update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id)
|
return checker_mod.update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id)
|
||||||
else:
|
else:
|
||||||
|
backend_alert = int(request.form.get('backend'))
|
||||||
return checker_mod.update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id)
|
return checker_mod.update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id)
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,6 +59,7 @@ def load_checker():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/history')
|
@bp.route('/history')
|
||||||
|
@get_user_params()
|
||||||
def checker_history():
|
def checker_history():
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
|
|
||||||
|
@ -68,15 +67,10 @@ def checker_history():
|
||||||
smon_status, stderr = smon_mod.return_smon_status()
|
smon_status, stderr = smon_mod.return_smon_status()
|
||||||
smon = sql.alerts_history('Checker', user_group)
|
smon = sql.alerts_history('Checker', user_group)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'smon/checker_history.html', h2=1, autorefresh=0, role=user_params['role'], user=user, smon=smon,
|
'smon/checker_history.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon,
|
||||||
lang=user_params['lang'], user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
lang=user_params['lang'], user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
||||||
token=user_params['token'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
token=user_params['token'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import os
|
import os
|
||||||
from functools import wraps
|
|
||||||
|
|
||||||
from flask import render_template, request, redirect, url_for, abort
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.config import bp
|
from app.routes.config import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxy_wi_tools as roxy_wi_tools
|
import app.modules.roxy_wi_tools as roxy_wi_tools
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -20,16 +20,6 @@ time_zone = sql.get_setting('time_zone')
|
||||||
get_date = roxy_wi_tools.GetDate(time_zone)
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
|
|
||||||
|
|
||||||
def check_services(fn):
|
|
||||||
@wraps(fn)
|
|
||||||
def decorated_view(*args, **kwargs):
|
|
||||||
service = kwargs['service']
|
|
||||||
if service not in ('haproxy', 'nginx', 'apache', 'keepalived'):
|
|
||||||
abort(400, 'bad service')
|
|
||||||
return fn(*args, **kwargs)
|
|
||||||
return decorated_view
|
|
||||||
|
|
||||||
|
|
||||||
@bp.before_request
|
@bp.before_request
|
||||||
@login_required
|
@login_required
|
||||||
def before_request():
|
def before_request():
|
||||||
|
@ -84,6 +74,7 @@ def find_in_config(service):
|
||||||
@bp.route('/<service>/<serv>/<edit>/<config_file_name>', defaults={'new': None}, methods=['GET', 'POST'])
|
@bp.route('/<service>/<serv>/<edit>/<config_file_name>', defaults={'new': None}, methods=['GET', 'POST'])
|
||||||
@bp.route('/<service>/<serv>/<edit>/<config_file_name>/<new>', methods=['GET', 'POST'])
|
@bp.route('/<service>/<serv>/<edit>/<config_file_name>/<new>', methods=['GET', 'POST'])
|
||||||
@check_services
|
@check_services
|
||||||
|
@get_user_params(0)
|
||||||
def config(service, serv, edit, config_file_name, new):
|
def config(service, serv, edit, config_file_name, new):
|
||||||
config_read = ""
|
config_read = ""
|
||||||
cfg = ""
|
cfg = ""
|
||||||
|
@ -93,21 +84,8 @@ def config(service, serv, edit, config_file_name, new):
|
||||||
is_restart = ''
|
is_restart = ''
|
||||||
is_serv_protected = ''
|
is_serv_protected = ''
|
||||||
new_config = new
|
new_config = new
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
service_desc = sql.select_service(service)
|
||||||
user_params = roxywi_common.get_users_params(service=service)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
|
||||||
service_desc = sql.select_service(service)
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
else:
|
|
||||||
return redirect(url_for('index'))
|
|
||||||
|
|
||||||
if serv and config_file_name:
|
if serv and config_file_name:
|
||||||
cfg = config_mod.return_cfg(service, serv, config_file_name)
|
cfg = config_mod.return_cfg(service, serv, config_file_name)
|
||||||
|
@ -121,7 +99,7 @@ def config(service, serv, edit, config_file_name, new):
|
||||||
try:
|
try:
|
||||||
error = config_mod.get_config(serv, cfg, service=service, config_file_name=config_file_name)
|
error = config_mod.get_config(serv, cfg, service=service, config_file_name=config_file_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return str(e), 200
|
return f'error: Cannot download config: {e}'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
roxywi_common.logging(serv, f" {service.title()} config has been opened")
|
roxywi_common.logging(serv, f" {service.title()} config has been opened")
|
||||||
|
@ -141,7 +119,7 @@ def config(service, serv, edit, config_file_name, new):
|
||||||
config_read = ' '
|
config_read = ' '
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'config.html', role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
|
'config.html', role=user_params['role'], user=user_params['user'], select_id="serv", serv=serv, aftersave=aftersave,
|
||||||
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
|
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
|
||||||
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
|
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
|
||||||
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'], service_desc=service_desc
|
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'], service_desc=service_desc
|
||||||
|
@ -151,19 +129,7 @@ def config(service, serv, edit, config_file_name, new):
|
||||||
@bp.route('/<service>/<server_ip>/save', methods=['POST'])
|
@bp.route('/<service>/<server_ip>/save', methods=['POST'])
|
||||||
@check_services
|
@check_services
|
||||||
def save_config(service, server_ip):
|
def save_config(service, server_ip):
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
roxywi_common.check_is_server_in_group(server_ip)
|
roxywi_common.check_is_server_in_group(server_ip)
|
||||||
service_desc = sql.select_service(service)
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
config_file = request.form.get('config')
|
config_file = request.form.get('config')
|
||||||
oldcfg = request.form.get('oldconfig')
|
oldcfg = request.form.get('oldconfig')
|
||||||
save = request.form.get('save')
|
save = request.form.get('save')
|
||||||
|
@ -172,7 +138,7 @@ def save_config(service, server_ip):
|
||||||
try:
|
try:
|
||||||
cfg = config_mod.return_cfg(service, server_ip, config_file_name)
|
cfg = config_mod.return_cfg(service, server_ip, config_file_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return f'error: {e}', 200
|
return f'error: Cannot get config {e}'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(cfg, "a") as conf:
|
with open(cfg, "a") as conf:
|
||||||
|
@ -201,20 +167,13 @@ def save_config(service, server_ip):
|
||||||
@bp.route('/versions/<service>', defaults={'server_ip': None}, methods=['GET', 'POST'])
|
@bp.route('/versions/<service>', defaults={'server_ip': None}, methods=['GET', 'POST'])
|
||||||
@bp.route('/versions/<service>/<server_ip>', methods=['GET', 'POST'])
|
@bp.route('/versions/<service>/<server_ip>', methods=['GET', 'POST'])
|
||||||
@check_services
|
@check_services
|
||||||
|
@get_user_params(disable=1)
|
||||||
def versions(service, server_ip):
|
def versions(service, server_ip):
|
||||||
roxywi_auth.page_for_admin(level=3)
|
roxywi_auth.page_for_admin(level=3)
|
||||||
aftersave = ''
|
aftersave = ''
|
||||||
file = set()
|
file = set()
|
||||||
stderr = ''
|
stderr = ''
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params(disable=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service not in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
|
||||||
return redirect(url_for('index'))
|
|
||||||
|
|
||||||
if service in ('haproxy', 'keepalived'):
|
if service in ('haproxy', 'keepalived'):
|
||||||
conf_format = 'cfg'
|
conf_format = 'cfg'
|
||||||
|
@ -246,7 +205,7 @@ def versions(service, server_ip):
|
||||||
stderr = "Error: %s - %s." % (e.filename, e.strerror)
|
stderr = "Error: %s - %s." % (e.filename, e.strerror)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'delver.html', role=user_params['role'], user=user, select_id="serv", serv=server_ip, aftersave=aftersave,
|
'delver.html', role=user_params['role'], user=user_params['user'], select_id="serv", serv=server_ip, aftersave=aftersave,
|
||||||
selects=user_params['servers'], file=file, service=service, user_services=user_params['user_services'],
|
selects=user_params['servers'], file=file, service=service, user_services=user_params['user_services'],
|
||||||
token=user_params['token'], lang=user_params['lang'], stderr=stderr
|
token=user_params['token'], lang=user_params['lang'], stderr=stderr
|
||||||
)
|
)
|
||||||
|
@ -265,23 +224,11 @@ def list_of_version(service):
|
||||||
@bp.route('/versions/<service>/<server_ip>/<configver>', defaults={'save': None}, methods=['GET', 'POST'])
|
@bp.route('/versions/<service>/<server_ip>/<configver>', defaults={'save': None}, methods=['GET', 'POST'])
|
||||||
@bp.route('/versions/<service>/<server_ip>/<configver>/save', defaults={'save': 1}, methods=['GET', 'POST'])
|
@bp.route('/versions/<service>/<server_ip>/<configver>/save', defaults={'save': 1}, methods=['GET', 'POST'])
|
||||||
@check_services
|
@check_services
|
||||||
|
@get_user_params(disable=1)
|
||||||
def show_version(service, server_ip, configver, save):
|
def show_version(service, server_ip, configver, save):
|
||||||
roxywi_auth.page_for_admin(level=3)
|
roxywi_auth.page_for_admin(level=3)
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params(disable=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service not in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
|
||||||
return redirect(url_for('index'))
|
|
||||||
|
|
||||||
service_desc = sql.select_service(service)
|
service_desc = sql.select_service(service)
|
||||||
|
|
||||||
if not roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id):
|
|
||||||
return redirect(url_for('index'))
|
|
||||||
|
|
||||||
configs_dir = get_config.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
|
configs_dir = get_config.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
|
||||||
configver = configs_dir + configver
|
configver = configs_dir + configver
|
||||||
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
||||||
|
@ -309,25 +256,16 @@ def show_version(service, server_ip, configver, save):
|
||||||
stderr = config_mod.master_slave_upload_and_restart(server_ip, configver, save_action, service)
|
stderr = config_mod.master_slave_upload_and_restart(server_ip, configver, save_action, service)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'configver.html', role=user_params['role'], user=user, select_id="serv", serv=server_ip, aftersave=aftersave,
|
'configver.html', role=user_params['role'], user=user_params['user'], select_id="serv", serv=server_ip, aftersave=aftersave,
|
||||||
selects=servers, stderr=stderr, save=save, configver=configver, service=service,
|
selects=servers, stderr=stderr, save=save, configver=configver, service=service,
|
||||||
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/section/haproxy/<server_ip>')
|
@bp.route('/section/haproxy/<server_ip>')
|
||||||
|
@get_user_params()
|
||||||
def haproxy_section(server_ip):
|
def haproxy_section(server_ip):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(service=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
is_restart = 0
|
is_restart = 0
|
||||||
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||||
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
||||||
|
@ -335,30 +273,16 @@ def haproxy_section(server_ip):
|
||||||
sections = section_mod.get_sections(cfg)
|
sections = section_mod.get_sections(cfg)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'sections.html', role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
|
'sections.html', role=user_params['role'], user=user_params['user'], serv=server_ip, selects=user_params['servers'],
|
||||||
sections=sections, error=error, token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config='',
|
sections=sections, error=error, token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config='',
|
||||||
user_services=user_params['user_services']
|
user_services=user_params['user_services']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/section/haproxy/<server_ip>/<section>')
|
@bp.route('/section/haproxy/<server_ip>/<section>')
|
||||||
|
@get_user_params()
|
||||||
def haproxy_section_show(server_ip, section):
|
def haproxy_section_show(server_ip, section):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(service=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
try:
|
|
||||||
roxywi_common.logging(server_ip, f"A section {section} has been opened")
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||||
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
||||||
error = config_mod.get_config(server_ip, cfg)
|
error = config_mod.get_config(server_ip, cfg)
|
||||||
|
@ -369,8 +293,13 @@ def haproxy_section_show(server_ip, section):
|
||||||
|
|
||||||
os.system(f"/bin/mv {cfg} {cfg}.old")
|
os.system(f"/bin/mv {cfg} {cfg}.old")
|
||||||
|
|
||||||
|
try:
|
||||||
|
roxywi_common.logging(server_ip, f"A section {section} has been opened")
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'sections.html', role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
|
'sections.html', role=user_params['role'], user=user_params['user'], serv=server_ip, selects=user_params['servers'],
|
||||||
error=error, sections=sections, cfg=cfg, token=user_params['token'], lang=user_params['lang'],
|
error=error, sections=sections, cfg=cfg, token=user_params['token'], lang=user_params['lang'],
|
||||||
is_restart=is_restart, config=config_read, start_line=start_line, end_line=end_line, section=section,
|
is_restart=is_restart, config=config_read, start_line=start_line, end_line=end_line, section=section,
|
||||||
user_services=user_params['user_services']
|
user_services=user_params['user_services']
|
||||||
|
@ -379,17 +308,6 @@ def haproxy_section_show(server_ip, section):
|
||||||
|
|
||||||
@bp.route('/section/haproxy/<server_ip>/save', methods=['POST'])
|
@bp.route('/section/haproxy/<server_ip>/save', methods=['POST'])
|
||||||
def haproxy_section_save(server_ip):
|
def haproxy_section_save(server_ip):
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params(service=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||||
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
|
||||||
config_file = request.form.get('config')
|
config_file = request.form.get('config')
|
||||||
|
@ -421,6 +339,7 @@ def haproxy_section_save(server_ip):
|
||||||
|
|
||||||
@bp.route('/compare/<service>/<serv>')
|
@bp.route('/compare/<service>/<serv>')
|
||||||
@bp.route('/map/<service>/<serv>')
|
@bp.route('/map/<service>/<serv>')
|
||||||
|
@get_user_params()
|
||||||
def show_compare_config(service, serv):
|
def show_compare_config(service, serv):
|
||||||
config_read = ""
|
config_read = ""
|
||||||
cfg = ""
|
cfg = ""
|
||||||
|
@ -430,24 +349,11 @@ def show_compare_config(service, serv):
|
||||||
is_restart = ''
|
is_restart = ''
|
||||||
is_serv_protected = ''
|
is_serv_protected = ''
|
||||||
config_file_name = ''
|
config_file_name = ''
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
service_desc = sql.select_service(service)
|
||||||
user_params = roxywi_common.get_users_params(service=service)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
|
||||||
service_desc = sql.select_service(service)
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
else:
|
|
||||||
return redirect(url_for('index'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'config.html', role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
|
'config.html', role=user_params['role'], user=user_params['user'], select_id="serv", serv=serv, aftersave=aftersave,
|
||||||
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
|
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
|
||||||
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
|
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
|
||||||
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'],
|
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'],
|
||||||
|
@ -461,7 +367,7 @@ def show_configs_for_compare(service, server_ip):
|
||||||
return config_mod.show_compare_config(server_ip, service)
|
return config_mod.show_compare_config(server_ip, service)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/compare/<service>/<server_ip>/show', methods=['POST'])
|
@bp.post('/compare/<service>/<server_ip>/show')
|
||||||
@check_services
|
@check_services
|
||||||
def show_compare(service, server_ip):
|
def show_compare(service, server_ip):
|
||||||
left = common.checkAjaxInput(request.form.get('left'))
|
left = common.checkAjaxInput(request.form.get('left'))
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from flask import render_template, request, redirect, url_for
|
from flask import render_template, request, redirect, url_for, g, abort
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.install import bp
|
from app.routes.install import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -20,44 +21,34 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('')
|
@bp.route('')
|
||||||
|
@get_user_params()
|
||||||
def install_monitoring():
|
def install_monitoring():
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
|
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
is_needed_tool = common.is_tool('ansible')
|
is_needed_tool = common.is_tool('ansible')
|
||||||
geoip_country_codes = sql.select_geoip_country_codes()
|
geoip_country_codes = sql.select_geoip_country_codes()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'install.html', h2=1, role=user_params['role'], user=user, servers=user_params['servers'],
|
'install.html', role=user_params['role'], user=user_params['user'], servers=user_params['servers'],
|
||||||
user_services=user_params['user_services'], lang=user_params['lang'], geoip_country_codes=geoip_country_codes,
|
user_services=user_params['user_services'], lang=user_params['lang'], geoip_country_codes=geoip_country_codes,
|
||||||
is_needed_tool=is_needed_tool, token=user_params['token']
|
is_needed_tool=is_needed_tool, token=user_params['token']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/ha')
|
@bp.route('/ha')
|
||||||
|
@get_user_params()
|
||||||
def ha():
|
def ha():
|
||||||
|
if not roxywi_auth.is_access_permit_to_service('keepalived'):
|
||||||
|
abort(403, f'You do not have needed permissions to access to Keepalived service')
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
|
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
is_needed_tool = common.is_tool('ansible')
|
is_needed_tool = common.is_tool('ansible')
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=3)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'ha.html', h2=1, role=user_params['role'], user=user, selects=user_params['servers'],
|
'ha.html', h2=1, role=user_params['role'], user=user_params['user'], selects=user_params['servers'],
|
||||||
user_services=user_params['user_services'], user_status=user_subscription['user_status'], lang=user_params['lang'],
|
user_services=user_params['user_services'], user_status=user_subscription['user_status'], lang=user_params['lang'],
|
||||||
user_plan=user_subscription['user_plan'], is_needed_tool=is_needed_tool, token=user_params['token']
|
user_plan=user_subscription['user_plan'], is_needed_tool=is_needed_tool, token=user_params['token']
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
import os
|
from flask import render_template, request, redirect, url_for, g
|
||||||
|
|
||||||
import datetime
|
|
||||||
from flask import render_template, request, redirect, url_for
|
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.logs import bp
|
from app.routes.logs import bp
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -24,6 +22,7 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/internal')
|
@bp.route('/internal')
|
||||||
|
@get_user_params()
|
||||||
def logs_internal():
|
def logs_internal():
|
||||||
log_type = request.args.get('type')
|
log_type = request.args.get('type')
|
||||||
|
|
||||||
|
@ -32,26 +31,8 @@ def logs_internal():
|
||||||
else:
|
else:
|
||||||
roxywi_auth.page_for_admin()
|
roxywi_auth.page_for_admin()
|
||||||
|
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(virt=1, haproxy=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
time_storage = sql.get_setting('log_time_storage')
|
|
||||||
log_path = get_config.get_config_var('main', 'log_path')
|
log_path = get_config.get_config_var('main', 'log_path')
|
||||||
|
|
||||||
try:
|
|
||||||
time_storage_hours = time_storage * 24
|
|
||||||
for dirpath, dirnames, filenames in os.walk(log_path):
|
|
||||||
for file in filenames:
|
|
||||||
curpath = os.path.join(dirpath, file)
|
|
||||||
file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath))
|
|
||||||
if datetime.datetime.now() - file_modified > datetime.timedelta(hours=time_storage_hours):
|
|
||||||
os.remove(curpath)
|
|
||||||
except Exception as e:
|
|
||||||
print(f'error: cannot delete old log files: {e}')
|
|
||||||
|
|
||||||
selects = roxywi_common.get_files(log_path, file_format="log")
|
selects = roxywi_common.get_files(log_path, file_format="log")
|
||||||
|
|
||||||
if log_type is None:
|
if log_type is None:
|
||||||
|
@ -60,7 +41,7 @@ def logs_internal():
|
||||||
selects.append(['roxy-wi.access.log', 'access.log'])
|
selects.append(['roxy-wi.access.log', 'access.log'])
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'logs_internal.html', autorefresh=1, role=user_params['role'], user=user,
|
'logs_internal.html', autorefresh=1, role=user_params['role'], user=user_params['user'],
|
||||||
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang'],
|
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang'],
|
||||||
selects=selects, serv='viewlogs'
|
selects=selects, serv='viewlogs'
|
||||||
)
|
)
|
||||||
|
@ -68,7 +49,10 @@ def logs_internal():
|
||||||
|
|
||||||
@bp.route('/<service>', defaults={'waf': None})
|
@bp.route('/<service>', defaults={'waf': None})
|
||||||
@bp.route('/<service>/<waf>')
|
@bp.route('/<service>/<waf>')
|
||||||
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def logs(service, waf):
|
def logs(service, waf):
|
||||||
|
user_params = g.user_params
|
||||||
serv = request.args.get('serv')
|
serv = request.args.get('serv')
|
||||||
rows = request.args.get('rows')
|
rows = request.args.get('rows')
|
||||||
grep = request.args.get('grep')
|
grep = request.args.get('grep')
|
||||||
|
@ -84,40 +68,25 @@ def logs(service, waf):
|
||||||
if grep is None:
|
if grep is None:
|
||||||
grep = ''
|
grep = ''
|
||||||
|
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params(virt=1, haproxy=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service in ('haproxy', 'nginx', 'keepalived', 'apache') and not waf:
|
if service in ('haproxy', 'nginx', 'keepalived', 'apache') and not waf:
|
||||||
service_desc = sql.select_service(service)
|
service_desc = sql.select_service(service)
|
||||||
service_name = service_desc.service
|
service_name = service_desc.service
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
||||||
elif waf:
|
elif waf:
|
||||||
service_name = 'WAF'
|
service_name = 'WAF'
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
servers = roxywi_common.get_dick_permit(haproxy=1)
|
servers = roxywi_common.get_dick_permit(haproxy=1)
|
||||||
else:
|
else:
|
||||||
return redirect(url_for('index'))
|
return redirect(url_for('index'))
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'logs.html', autorefresh=1, role=user_params['role'], user=user, select_id='serv', rows=rows,
|
'logs.html', autorefresh=1, role=user_params['role'], user=user_params['user'], select_id='serv', rows=rows,
|
||||||
remote_file=log_file, selects=servers, waf=waf, service=service, user_services=user_params['user_services'],
|
remote_file=log_file, selects=servers, waf=waf, service=service, user_services=user_params['user_services'],
|
||||||
token=user_params['token'], lang=user_params['lang'], service_name=service_name, grep=grep, serv=serv
|
token=user_params['token'], lang=user_params['lang'], service_name=service_name, grep=grep, serv=serv
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/<serv>', methods=['GET', 'POST'])
|
@bp.route('/<service>/<serv>', methods=['GET', 'POST'])
|
||||||
|
@check_services
|
||||||
def show_remote_log_files(service, serv):
|
def show_remote_log_files(service, serv):
|
||||||
service = common.checkAjaxInput(service)
|
service = common.checkAjaxInput(service)
|
||||||
serv = common.checkAjaxInput(serv)
|
serv = common.checkAjaxInput(serv)
|
||||||
|
@ -136,6 +105,7 @@ def show_remote_log_files(service, serv):
|
||||||
|
|
||||||
@bp.route('/<service>/<serv>/<rows>', defaults={'waf': '0'}, methods=['GET', 'POST'])
|
@bp.route('/<service>/<serv>/<rows>', defaults={'waf': '0'}, methods=['GET', 'POST'])
|
||||||
@bp.route('/<service>/waf/<serv>/<rows>', defaults={'waf': '1'}, methods=['GET', 'POST'])
|
@bp.route('/<service>/waf/<serv>/<rows>', defaults={'waf': '1'}, methods=['GET', 'POST'])
|
||||||
|
@check_services
|
||||||
def show_logs(service, serv, rows, waf):
|
def show_logs(service, serv, rows, waf):
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
grep = request.args.get('grep')
|
grep = request.args.get('grep')
|
||||||
|
|
|
@ -2,7 +2,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from flask import render_template, request, redirect, url_for, session
|
from flask import render_template, request, redirect, url_for, session, g, abort
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app'))
|
sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app'))
|
||||||
|
@ -11,6 +11,7 @@ from app import app, cache
|
||||||
from app.routes.main import bp
|
from app.routes.main import bp
|
||||||
import modules.db.sql as sql
|
import modules.db.sql as sql
|
||||||
from modules.db.db_model import conn
|
from modules.db.db_model import conn
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import modules.common.common as common
|
import modules.common.common as common
|
||||||
import modules.roxywi.roxy as roxy
|
import modules.roxywi.roxy as roxy
|
||||||
import modules.roxywi.auth as roxywi_auth
|
import modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -20,14 +21,44 @@ import modules.service.common as service_common
|
||||||
import modules.service.haproxy as service_haproxy
|
import modules.service.haproxy as service_haproxy
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(403)
|
||||||
|
@get_user_params()
|
||||||
|
def page_is_forbidden(e):
|
||||||
|
user_params = g.user_params
|
||||||
|
return render_template(
|
||||||
|
'error.html', user=user_params['user'], role=user_params['role'], user_services=user_params['user_services'],
|
||||||
|
title=e, e=e
|
||||||
|
), 403
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
|
@get_user_params()
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
return render_template('404.html'), 404
|
user_params = g.user_params
|
||||||
|
return render_template(
|
||||||
|
'error.html', user=user_params['user'], role=user_params['role'], user_services=user_params['user_services'],
|
||||||
|
title=e, e=e
|
||||||
|
), 404
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(405)
|
||||||
|
@get_user_params()
|
||||||
|
def method_not_allowed(e):
|
||||||
|
user_params = g.user_params
|
||||||
|
return render_template(
|
||||||
|
'error.html', user=user_params['user'], role=user_params['role'], user_services=user_params['user_services'],
|
||||||
|
title=e, e=e
|
||||||
|
), 405
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(500)
|
@app.errorhandler(500)
|
||||||
def page_not_found(e):
|
@get_user_params()
|
||||||
return render_template('500.html', e=e), 500
|
def internal_error(e):
|
||||||
|
user_params = g.user_params
|
||||||
|
return render_template(
|
||||||
|
'error.html', user=user_params['user'], role=user_params['role'], user_services=user_params['user_services'],
|
||||||
|
title=e, e=e
|
||||||
|
), 500
|
||||||
|
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
|
@ -44,12 +75,11 @@ def _db_close(exc):
|
||||||
@bp.route('/stats/<service>/', defaults={'serv': None})
|
@bp.route('/stats/<service>/', defaults={'serv': None})
|
||||||
@bp.route('/stats/<service>/<serv>')
|
@bp.route('/stats/<service>/<serv>')
|
||||||
@login_required
|
@login_required
|
||||||
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def stats(service, serv):
|
def stats(service, serv):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(virt=1, haproxy=1)
|
service_desc = sql.select_service(service)
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if serv is None:
|
if serv is None:
|
||||||
|
@ -60,19 +90,9 @@ def stats(service, serv):
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if service in ('haproxy', 'nginx', 'apache'):
|
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
||||||
service_desc = sql.select_service(service)
|
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
servers = roxywi_common.get_dick_permit(service=service_desc.slug)
|
|
||||||
else:
|
|
||||||
return redirect(url_for('overview.index'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'statsview.html', autorefresh=1, role=user_params['role'], user=user, selects=servers, serv=serv,
|
'statsview.html', autorefresh=1, role=user_params['role'], user=user_params['user'], selects=servers, serv=serv,
|
||||||
service=service, user_services=user_params['user_services'], token=user_params['token'],
|
service=service, user_services=user_params['user_services'], token=user_params['token'],
|
||||||
select_id="serv", lang=user_params['lang'], service_desc=service_desc
|
select_id="serv", lang=user_params['lang'], service_desc=service_desc
|
||||||
)
|
)
|
||||||
|
@ -80,6 +100,7 @@ def stats(service, serv):
|
||||||
|
|
||||||
@bp.route('/stats/view/<service>/<server_ip>')
|
@bp.route('/stats/view/<service>/<server_ip>')
|
||||||
@login_required
|
@login_required
|
||||||
|
@check_services
|
||||||
def show_stats(service, server_ip):
|
def show_stats(service, server_ip):
|
||||||
server_ip = common.is_ip_or_dns(server_ip)
|
server_ip = common.is_ip_or_dns(server_ip)
|
||||||
|
|
||||||
|
@ -91,15 +112,12 @@ def show_stats(service, server_ip):
|
||||||
|
|
||||||
@bp.route('/nettools')
|
@bp.route('/nettools')
|
||||||
@login_required
|
@login_required
|
||||||
|
@get_user_params(1)
|
||||||
def nettools():
|
def nettools():
|
||||||
try:
|
import time
|
||||||
user_params = roxywi_common.get_users_params(virt=1)
|
user_params = g.user_params
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'nettools.html', autorefresh=0, role=user_params['role'], user=user, servers=user_params['servers'],
|
'nettools.html', autorefresh=0, role=user_params['role'], user=user_params['user'], servers=user_params['servers'],
|
||||||
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -127,22 +145,19 @@ def nettols_check(check):
|
||||||
|
|
||||||
@bp.route('/history/<service>/<server_ip>')
|
@bp.route('/history/<service>/<server_ip>')
|
||||||
@login_required
|
@login_required
|
||||||
|
@get_user_params()
|
||||||
def service_history(service, server_ip):
|
def service_history(service, server_ip):
|
||||||
users = sql.select_users()
|
users = sql.select_users()
|
||||||
server_ip = common.checkAjaxInput(server_ip)
|
server_ip = common.checkAjaxInput(server_ip)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
|
||||||
service_desc = sql.select_service(service)
|
service_desc = sql.select_service(service)
|
||||||
if roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id):
|
if not roxywi_auth.is_access_permit_to_service(service_desc.slug):
|
||||||
server_id = sql.select_server_id_by_ip(server_ip)
|
abort(403, f'You do not have needed permissions to access to {service_desc.slug.title()} service')
|
||||||
history = sql.select_action_history_by_server_id_and_service(server_id, service_desc.service)
|
server_id = sql.select_server_id_by_ip(server_ip)
|
||||||
|
history = sql.select_action_history_by_server_id_and_service(server_id, service_desc.service)
|
||||||
elif service == 'server':
|
elif service == 'server':
|
||||||
if roxywi_common.check_is_server_in_group(server_ip):
|
if roxywi_common.check_is_server_in_group(server_ip):
|
||||||
server_id = sql.select_server_id_by_ip(server_ip)
|
server_id = sql.select_server_id_by_ip(server_ip)
|
||||||
|
@ -151,7 +166,7 @@ def service_history(service, server_ip):
|
||||||
history = sql.select_action_history_by_user_id(server_ip)
|
history = sql.select_action_history_by_user_id(server_ip)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'history.html', role=user_params['role'], user=user, users=users, serv=server_ip, service=service,
|
'history.html', role=user_params['role'], user=user_params['user'], users=users, serv=server_ip, service=service,
|
||||||
history=history, user_services=user_params['user_services'], token=user_params['token'],
|
history=history, user_services=user_params['user_services'], token=user_params['token'],
|
||||||
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], lang=user_params['lang']
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
@ -159,15 +174,11 @@ def service_history(service, server_ip):
|
||||||
|
|
||||||
@bp.route('/servers')
|
@bp.route('/servers')
|
||||||
@login_required
|
@login_required
|
||||||
|
@get_user_params()
|
||||||
def servers():
|
def servers():
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
|
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
ldap_enable = sql.get_setting('ldap_enable')
|
ldap_enable = sql.get_setting('ldap_enable')
|
||||||
user_group = roxywi_common.get_user_group(id=1)
|
user_group = roxywi_common.get_user_group(id=1)
|
||||||
settings = sql.get_setting('', all=1)
|
settings = sql.get_setting('', all=1)
|
||||||
|
@ -188,7 +199,7 @@ def servers():
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'servers.html',
|
'servers.html',
|
||||||
h2=1, title=title, role=user_params['role'], user=user, users=sql.select_users(group=user_group),
|
h2=1, title=title, role=user_params['role'], user=user_params['user'], users=sql.select_users(group=user_group),
|
||||||
groups=sql.select_groups(), servers=servers, roles=sql.select_roles(), sshs=sql.select_ssh(group=user_group),
|
groups=sql.select_groups(), servers=servers, roles=sql.select_roles(), sshs=sql.select_ssh(group=user_group),
|
||||||
masters=masters, group=user_group, services=services, timezones=pytz.all_timezones, guide_me=1,
|
masters=masters, group=user_group, services=services, timezones=pytz.all_timezones, guide_me=1,
|
||||||
token=user_params['token'], settings=settings, backups=backups, s3_backups=s3_backups, page="servers.py",
|
token=user_params['token'], settings=settings, backups=backups, s3_backups=s3_backups, page="servers.py",
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import distro
|
import distro
|
||||||
from flask import render_template, request, jsonify, redirect, url_for
|
from flask import render_template, request, jsonify, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.metric import bp
|
from app.routes.metric import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.server.server as server_mod
|
import app.modules.server.server as server_mod
|
||||||
import app.modules.roxywi.metrics as metric
|
import app.modules.roxywi.metrics as metric
|
||||||
|
@ -19,21 +20,14 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>')
|
@bp.route('/<service>')
|
||||||
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def metrics(service):
|
def metrics(service):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
service_desc = sql.select_service(service)
|
service_desc = sql.select_service(service)
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
servers = ''
|
servers = ''
|
||||||
services = '0'
|
services = '0'
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if distro.id() == 'ubuntu':
|
if distro.id() == 'ubuntu':
|
||||||
|
@ -63,7 +57,7 @@ def metrics(service):
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'metrics.html', autorefresh=1, role=user_params['role'], user=user, servers=servers,
|
'metrics.html', autorefresh=1, role=user_params['role'], user=user_params['user'], servers=servers,
|
||||||
services=services, user_services=user_params['user_services'], service=service,
|
services=services, user_services=user_params['user_services'], service=service,
|
||||||
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
||||||
token=user_params['token'], lang=user_params['lang'], service_desc=service_desc
|
token=user_params['token'], lang=user_params['lang'], service_desc=service_desc
|
||||||
|
@ -85,6 +79,7 @@ def metrics_ram():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/table-metrics')
|
@bp.route('/<service>/table-metrics')
|
||||||
|
@check_services
|
||||||
def table_metrics(service):
|
def table_metrics(service):
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
lang = roxywi_common.get_user_lang_for_flask()
|
lang = roxywi_common.get_user_lang_for_flask()
|
||||||
|
@ -98,7 +93,8 @@ def table_metrics(service):
|
||||||
return render_template('ajax/table_metrics.html', table_stat=metrics, service=service, lang=lang)
|
return render_template('ajax/table_metrics.html', table_stat=metrics, service=service, lang=lang)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/<server_ip>', methods=['POST'])
|
@bp.post('/<service>/<server_ip>')
|
||||||
|
@check_services
|
||||||
def show_metric(service, server_ip):
|
def show_metric(service, server_ip):
|
||||||
server_ip = common.is_ip_or_dns(server_ip)
|
server_ip = common.is_ip_or_dns(server_ip)
|
||||||
hostname = sql.get_hostname_by_server_ip(server_ip)
|
hostname = sql.get_hostname_by_server_ip(server_ip)
|
||||||
|
@ -112,7 +108,8 @@ def show_metric(service, server_ip):
|
||||||
return 'error: Wrong service'
|
return 'error: Wrong service'
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/<server_ip>/http', methods=['POST'])
|
@bp.post('/<service>/<server_ip>/http')
|
||||||
|
@check_services
|
||||||
def show_http_metric(service, server_ip):
|
def show_http_metric(service, server_ip):
|
||||||
server_ip = common.is_ip_or_dns(server_ip)
|
server_ip = common.is_ip_or_dns(server_ip)
|
||||||
hostname = sql.get_hostname_by_server_ip(server_ip)
|
hostname = sql.get_hostname_by_server_ip(server_ip)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from flask import render_template, redirect, url_for
|
from flask import render_template, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app import cache
|
from app import cache
|
||||||
from app.routes.overview import bp
|
from app.routes.overview import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.roxywi.logs as roxy_logs
|
import app.modules.roxywi.logs as roxy_logs
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
|
@ -18,17 +19,13 @@ def before_request():
|
||||||
|
|
||||||
@bp.route('/')
|
@bp.route('/')
|
||||||
@bp.route('/overview')
|
@bp.route('/overview')
|
||||||
|
@get_user_params()
|
||||||
def index():
|
def index():
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
groups = sql.select_groups()
|
groups = sql.select_groups()
|
||||||
return render_template(
|
return render_template(
|
||||||
'ovw.html', autorefresh=1, role=user_params['role'], user=user, groups=groups, roles=sql.select_roles(),
|
'ovw.html', autorefresh=1, role=user_params['role'], user=user_params['user'], roles=sql.select_roles(),
|
||||||
servers=user_params['servers'], user_services=user_params['user_services'], roxy_wi_log=roxy_logs.roxy_wi_log(),
|
servers=user_params['servers'], user_services=user_params['user_services'], groups=groups,
|
||||||
token=user_params['token'], guide_me=1, lang=user_params['lang']
|
token=user_params['token'], guide_me=1, lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -52,3 +49,10 @@ def overview_users():
|
||||||
@cache.cached()
|
@cache.cached()
|
||||||
def overview_sub():
|
def overview_sub():
|
||||||
return roxy_overview.show_sub_ovw()
|
return roxy_overview.show_sub_ovw()
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route('/overview/logs')
|
||||||
|
@get_user_params()
|
||||||
|
def overview_logs():
|
||||||
|
user_params = g.user_params
|
||||||
|
return render_template('ajax/ovw_log.html', role=user_params['role'], lang=user_params['lang'], roxy_wi_log=roxy_logs.roxy_wi_log())
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from flask import render_template, request, redirect, url_for
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.portscanner import bp
|
from app.routes.portscanner import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.server.server as server_mod
|
import app.modules.server.server as server_mod
|
||||||
|
@ -16,13 +17,9 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('')
|
@bp.route('')
|
||||||
|
@get_user_params(virt=1)
|
||||||
def portscanner():
|
def portscanner():
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(virt=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
user_group = roxywi_common.get_user_group(id=1)
|
user_group = roxywi_common.get_user_group(id=1)
|
||||||
port_scanner_settings = sql.select_port_scanner_settings(user_group)
|
port_scanner_settings = sql.select_port_scanner_settings(user_group)
|
||||||
|
|
||||||
|
@ -41,7 +38,7 @@ def portscanner():
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'portscanner.html', autorefresh=0, role=user_params['role'], user=user, servers=user_params['servers'],
|
'portscanner.html', autorefresh=0, role=user_params['role'], user=user_params['user'], servers=user_params['servers'],
|
||||||
port_scanner_settings=port_scanner_settings, count_ports=count_ports, port_scanner=''.join(port_scanner),
|
port_scanner_settings=port_scanner_settings, count_ports=count_ports, port_scanner=''.join(port_scanner),
|
||||||
port_scanner_stderr=port_scanner_stderr, user_services=user_params['user_services'], user_status=user_subscription['user_status'],
|
port_scanner_stderr=port_scanner_stderr, user_services=user_params['user_services'], user_status=user_subscription['user_status'],
|
||||||
user_plan=user_subscription['user_plan'], token=user_params['token'], lang=user_params['lang']
|
user_plan=user_subscription['user_plan'], token=user_params['token'], lang=user_params['lang']
|
||||||
|
@ -49,18 +46,14 @@ def portscanner():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/history/<server_ip>')
|
@bp.route('/history/<server_ip>')
|
||||||
|
@get_user_params()
|
||||||
def portscanner_history(server_ip):
|
def portscanner_history(server_ip):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
history = sql.select_port_scanner_history(server_ip)
|
history = sql.select_port_scanner_history(server_ip)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'include/port_scan_history.html', h2=1, autorefresh=0, role=user_params['role'], user=user, history=history,
|
'include/port_scan_history.html', h2=1, autorefresh=0, role=user_params['role'], user=user_params['user'], history=history,
|
||||||
servers=user_params['servers'], user_services=user_params['user_services'], token=user_params['token'],
|
servers=user_params['servers'], user_services=user_params['user_services'], token=user_params['token'],
|
||||||
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], lang=user_params['lang']
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from flask import render_template, request, redirect, url_for
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.runtime import bp
|
from app.routes.runtime import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
import app.modules.config.runtime as runtime
|
import app.modules.config.runtime as runtime
|
||||||
|
@ -16,16 +17,13 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('')
|
@bp.route('')
|
||||||
|
@get_user_params()
|
||||||
def runtimeapi():
|
def runtimeapi():
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params(haproxy=1)
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
servbackend = ""
|
servbackend = ""
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'runtimeapi.html', h2=1, title="RunTime API", role=user_params['role'], user=user, select_id="serv",
|
'runtimeapi.html', title="RunTime API", role=user_params['role'], user=user_params['user'], select_id="serv",
|
||||||
selects=user_params['servers'], token=user_params['token'], user_services=user_params['user_services'],
|
selects=user_params['servers'], token=user_params['token'], user_services=user_params['user_services'],
|
||||||
servbackend=servbackend, lang=user_params['lang']
|
servbackend=servbackend, lang=user_params['lang']
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
from functools import wraps
|
|
||||||
|
|
||||||
import distro
|
import distro
|
||||||
from flask import render_template, request, redirect, url_for, abort
|
from flask import render_template, request, redirect, url_for, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app import cache
|
from app import cache
|
||||||
from app.routes.service import bp
|
from app.routes.service import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.server.server as server_mod
|
import app.modules.server.server as server_mod
|
||||||
import app.modules.service.action as service_action
|
import app.modules.service.action as service_action
|
||||||
|
@ -16,16 +15,6 @@ import app.modules.roxywi.common as roxywi_common
|
||||||
import app.modules.roxywi.overview as roxy_overview
|
import app.modules.roxywi.overview as roxy_overview
|
||||||
|
|
||||||
|
|
||||||
def check_services(fn):
|
|
||||||
@wraps(fn)
|
|
||||||
def decorated_view(*args, **kwargs):
|
|
||||||
service = kwargs['service']
|
|
||||||
if service not in ('haproxy', 'nginx', 'apache', 'keepalived'):
|
|
||||||
abort(400, 'bad service')
|
|
||||||
return fn(*args, **kwargs)
|
|
||||||
return decorated_view
|
|
||||||
|
|
||||||
|
|
||||||
@bp.before_request
|
@bp.before_request
|
||||||
@login_required
|
@login_required
|
||||||
def before_request():
|
def before_request():
|
||||||
|
@ -36,13 +25,9 @@ def before_request():
|
||||||
@bp.route('/<service>', defaults={'serv': None})
|
@bp.route('/<service>', defaults={'serv': None})
|
||||||
@bp.route('/<service>/<serv>')
|
@bp.route('/<service>/<serv>')
|
||||||
@check_services
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def services(service, serv):
|
def services(service, serv):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
services = []
|
services = []
|
||||||
service_desc = sql.select_service(service)
|
service_desc = sql.select_service(service)
|
||||||
servers = roxywi_common.get_dick_permit(virt=1, service=service_desc.slug)
|
servers = roxywi_common.get_dick_permit(virt=1, service=service_desc.slug)
|
||||||
|
@ -52,10 +37,6 @@ def services(service, serv):
|
||||||
waf_server = ''
|
waf_server = ''
|
||||||
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
|
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
|
||||||
keep_alive, stderr = server_mod.subprocess_execute(cmd)
|
keep_alive, stderr = server_mod.subprocess_execute(cmd)
|
||||||
is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id)
|
|
||||||
|
|
||||||
if is_redirect != 'ok':
|
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
|
||||||
|
|
||||||
if serv:
|
if serv:
|
||||||
if roxywi_common.check_is_server_in_group(serv):
|
if roxywi_common.check_is_server_in_group(serv):
|
||||||
|
@ -196,7 +177,7 @@ def services(service, serv):
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'service.html', autorefresh=autorefresh, role=user_params['role'], user=user, servers=servers_with_status1,
|
'service.html', autorefresh=autorefresh, role=user_params['role'], user=user_params['user'], servers=servers_with_status1,
|
||||||
keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_params['user_services'],
|
keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_params['user_services'],
|
||||||
docker_settings=docker_settings, user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
docker_settings=docker_settings, user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
||||||
waf_server=waf_server, restart_settings=restart_settings, service_desc=service_desc, token=user_params['token'],
|
waf_server=waf_server, restart_settings=restart_settings, service_desc=service_desc, token=user_params['token'],
|
||||||
|
@ -205,7 +186,6 @@ def services(service, serv):
|
||||||
|
|
||||||
|
|
||||||
@bp.post('/action/<service>/check-service')
|
@bp.post('/action/<service>/check-service')
|
||||||
@check_services
|
|
||||||
def check_service(service):
|
def check_service(service):
|
||||||
user_uuid = request.cookies.get('uuid')
|
user_uuid = request.cookies.get('uuid')
|
||||||
server_ip = common.checkAjaxInput(request.form.get('server_ip'))
|
server_ip = common.checkAjaxInput(request.form.get('server_ip'))
|
||||||
|
@ -213,7 +193,7 @@ def check_service(service):
|
||||||
try:
|
try:
|
||||||
return service_action.check_service(server_ip, user_uuid, service)
|
return service_action.check_service(server_ip, user_uuid, service)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
return 'logout'
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/action/<service>/<server_ip>/<action>', methods=['GET'])
|
@bp.route('/action/<service>/<server_ip>/<action>', methods=['GET'])
|
||||||
|
@ -229,8 +209,9 @@ def last_edit(service, server_ip):
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/cpu-ram-metrics/<server_ip>/<server_id>/<name>/<service>')
|
@bp.route('/cpu-ram-metrics/<server_ip>/<server_id>/<name>/<service>')
|
||||||
|
@get_user_params()
|
||||||
def cpu_ram_metrics(server_ip, server_id, name, service):
|
def cpu_ram_metrics(server_ip, server_id, name, service):
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = g.user_params
|
||||||
|
|
||||||
if service == 'haproxy':
|
if service == 'haproxy':
|
||||||
sock_port = sql.get_setting('haproxy_sock_port')
|
sock_port = sql.get_setting('haproxy_sock_port')
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
from flask import render_template, request, redirect, url_for, jsonify
|
from flask import render_template, request, redirect, url_for, jsonify, g
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from app.routes.smon import bp
|
from app.routes.smon import bp
|
||||||
|
from middleware import get_user_params
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
|
@ -19,35 +20,27 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/dashboard')
|
@bp.route('/dashboard')
|
||||||
|
@get_user_params()
|
||||||
def smon():
|
def smon():
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
|
|
||||||
|
user_params = g.user_params
|
||||||
user_group = roxywi_common.get_user_group(id=1)
|
user_group = roxywi_common.get_user_group(id=1)
|
||||||
smon = sql.smon_list(user_group)
|
smon = sql.smon_list(user_group)
|
||||||
smon_status, stderr = smon_mod.return_smon_status()
|
smon_status, stderr = smon_mod.return_smon_status()
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'smon/dashboard.html', h2=1, autorefresh=1, role=user_params['role'], user=user, group=user_group,
|
'smon/dashboard.html', autorefresh=1, role=user_params['role'], user=user_params['user'], group=user_group,
|
||||||
lang=user_params['lang'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'],
|
lang=user_params['lang'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'],
|
||||||
user_status=user_subscription['user_status'], smon=smon, user_plan=user_subscription['user_plan'], token=user_params['token']
|
user_status=user_subscription['user_status'], smon=smon, user_plan=user_subscription['user_plan'], token=user_params['token']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/dashboard/<dashboard_id>/<check_id>')
|
@bp.route('/dashboard/<dashboard_id>/<check_id>')
|
||||||
|
@get_user_params()
|
||||||
def smon_dashboard(dashboard_id, check_id):
|
def smon_dashboard(dashboard_id, check_id):
|
||||||
try:
|
user_params = g.user_params
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
check_id = int(check_id)
|
check_id = int(check_id)
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
@ -79,7 +72,7 @@ def smon_dashboard(dashboard_id, check_id):
|
||||||
cert_day_diff = (ssl_expire_date - present).days
|
cert_day_diff = (ssl_expire_date - present).days
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'include/smon/smon_history.html', autorefresh=1, role=user_params['role'], user=user, smon=smon,
|
'include/smon/smon_history.html', autorefresh=1, role=user_params['role'], user=user_params['user'], smon=smon,
|
||||||
lang=user_params['lang'], user_status=user_subscription['user_status'], check_interval=check_interval,
|
lang=user_params['lang'], user_status=user_subscription['user_status'], check_interval=check_interval,
|
||||||
user_plan=user_subscription['user_plan'], token=user_params['token'], uptime=uptime, avg_res_time=avg_res_time,
|
user_plan=user_subscription['user_plan'], token=user_params['token'], uptime=uptime, avg_res_time=avg_res_time,
|
||||||
user_services=user_params['user_services'], smon_name=smon_name, cert_day_diff=cert_day_diff, check_id=check_id,
|
user_services=user_params['user_services'], smon_name=smon_name, cert_day_diff=cert_day_diff, check_id=check_id,
|
||||||
|
@ -88,6 +81,7 @@ def smon_dashboard(dashboard_id, check_id):
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/history')
|
@bp.route('/history')
|
||||||
|
@get_user_params()
|
||||||
def smon_history():
|
def smon_history():
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
|
|
||||||
|
@ -95,21 +89,17 @@ def smon_history():
|
||||||
smon_status, stderr = smon_mod.return_smon_status()
|
smon_status, stderr = smon_mod.return_smon_status()
|
||||||
smon = sql.alerts_history('SMON', user_group)
|
smon = sql.alerts_history('SMON', user_group)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'smon/history.html', autorefresh=0, role=user_params['role'], user=user, smon=smon, lang=user_params['lang'],
|
'smon/history.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon, lang=user_params['lang'],
|
||||||
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
||||||
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/history/host/<server_ip>')
|
@bp.route('/history/host/<server_ip>')
|
||||||
|
@get_user_params()
|
||||||
def smon_host_history(server_ip):
|
def smon_host_history(server_ip):
|
||||||
roxywi_common.check_user_group_for_flask()
|
roxywi_common.check_user_group_for_flask()
|
||||||
|
|
||||||
|
@ -118,15 +108,10 @@ def smon_host_history(server_ip):
|
||||||
smon_status, stderr = smon_mod.return_smon_status()
|
smon_status, stderr = smon_mod.return_smon_status()
|
||||||
smon = sql.alerts_history('SMON', user_group, host=needed_host)
|
smon = sql.alerts_history('SMON', user_group, host=needed_host)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'smon/history.html', autorefresh=0, role=user_params['role'], user=user, smon=smon,
|
'smon/history.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon,
|
||||||
lang=user_params['lang'], user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
lang=user_params['lang'], user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
|
||||||
token=user_params['token'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
token=user_params['token'], smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services']
|
||||||
)
|
)
|
||||||
|
@ -148,6 +133,7 @@ def smon_history_cur_status(dashboard_id, check_id):
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/admin')
|
@bp.route('/admin')
|
||||||
|
@get_user_params()
|
||||||
def smon_admin():
|
def smon_admin():
|
||||||
user_group = roxywi_common.get_user_group(id=1)
|
user_group = roxywi_common.get_user_group(id=1)
|
||||||
smon_status, stderr = smon_mod.return_smon_status()
|
smon_status, stderr = smon_mod.return_smon_status()
|
||||||
|
@ -161,15 +147,10 @@ def smon_admin():
|
||||||
smon_dns = sql.select_smon_dns(user_group)
|
smon_dns = sql.select_smon_dns(user_group)
|
||||||
roxywi_auth.page_for_admin(level=3)
|
roxywi_auth.page_for_admin(level=3)
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
user_params = g.user_params
|
||||||
try:
|
|
||||||
user_params = roxywi_common.get_users_params()
|
|
||||||
user = user_params['user']
|
|
||||||
except Exception:
|
|
||||||
return redirect(url_for('login_page'))
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'smon/add.html', autorefresh=0, role=user_params['role'], user=user, smon=smon, lang=user_params['lang'],
|
'smon/add.html', autorefresh=0, role=user_params['role'], user=user_params['user'], smon=smon, lang=user_params['lang'],
|
||||||
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], token=user_params['token'],
|
||||||
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'], telegrams=telegrams,
|
smon_status=smon_status, smon_error=stderr, user_services=user_params['user_services'], telegrams=telegrams,
|
||||||
slacks=slacks, pds=pds, smon_ping=smon_ping, smon_tcp=smon_tcp, smon_http=smon_http, smon_dns=smon_dns
|
slacks=slacks, pds=pds, smon_ping=smon_ping, smon_tcp=smon_tcp, smon_http=smon_http, smon_dns=smon_dns
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from flask import render_template, request
|
from flask import render_template, request, g, abort
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
from app.routes.waf import bp
|
from app.routes.waf import bp
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
from middleware import check_services, get_user_params
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
import app.modules.roxy_wi_tools as roxy_wi_tools
|
import app.modules.roxy_wi_tools as roxy_wi_tools
|
||||||
import app.modules.roxywi.waf as roxy_waf
|
import app.modules.roxywi.waf as roxy_waf
|
||||||
|
@ -25,9 +26,14 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>')
|
@bp.route('/<service>')
|
||||||
|
@check_services
|
||||||
|
@get_user_params()
|
||||||
def waf(service):
|
def waf(service):
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
|
|
||||||
|
if not roxywi_auth.is_access_permit_to_service(service):
|
||||||
|
abort(403, f'You do not have needed permissions to access to {service.title()} service')
|
||||||
|
|
||||||
manage_rules = ''
|
manage_rules = ''
|
||||||
waf_rule_id = ''
|
waf_rule_id = ''
|
||||||
config_file_name = ''
|
config_file_name = ''
|
||||||
|
@ -36,13 +42,11 @@ def waf(service):
|
||||||
rules = ''
|
rules = ''
|
||||||
serv = ''
|
serv = ''
|
||||||
cfg = ''
|
cfg = ''
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = g.user_params
|
||||||
|
|
||||||
if service == 'nginx':
|
if service == 'nginx':
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=2)
|
|
||||||
servers = roxywi_common.get_dick_permit(nginx=1)
|
servers = roxywi_common.get_dick_permit(nginx=1)
|
||||||
else:
|
else:
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
servers = user_params['servers']
|
servers = user_params['servers']
|
||||||
|
|
||||||
title = "Web application firewall"
|
title = "Web application firewall"
|
||||||
|
@ -59,9 +63,12 @@ def waf(service):
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/<server_ip>/rules')
|
@bp.route('/<service>/<server_ip>/rules')
|
||||||
|
@get_user_params()
|
||||||
def waf_rules(service, server_ip):
|
def waf_rules(service, server_ip):
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
roxywi_common.check_is_server_in_group(server_ip)
|
roxywi_common.check_is_server_in_group(server_ip)
|
||||||
|
if not roxywi_auth.is_access_permit_to_service(service):
|
||||||
|
abort(403, f'You do not have needed permissions to access to {service.title()} service')
|
||||||
|
|
||||||
manage_rules = '1'
|
manage_rules = '1'
|
||||||
waf_rule_id = ''
|
waf_rule_id = ''
|
||||||
|
@ -71,15 +78,10 @@ def waf_rules(service, server_ip):
|
||||||
config_read = ''
|
config_read = ''
|
||||||
servers = ''
|
servers = ''
|
||||||
cfg = ''
|
cfg = ''
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = g.user_params
|
||||||
title = "Manage rules - Web application firewall"
|
title = "Manage rules - Web application firewall"
|
||||||
rules = sql.select_waf_rules(server_ip, service)
|
rules = sql.select_waf_rules(server_ip, service)
|
||||||
|
|
||||||
if service == 'nginx':
|
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=2)
|
|
||||||
else:
|
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'waf.html', title=title, autorefresh=0, role=user_params['role'], user=user_params['user'], serv=server_ip,
|
'waf.html', title=title, autorefresh=0, role=user_params['role'], user=user_params['user'], serv=server_ip,
|
||||||
servers=servers_waf, servers_all=servers, manage_rules=manage_rules, rules=rules,
|
servers=servers_waf, servers_all=servers, manage_rules=manage_rules, rules=rules,
|
||||||
|
@ -90,22 +92,23 @@ def waf_rules(service, server_ip):
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/<service>/<server_ip>/rule/<rule_id>')
|
@bp.route('/<service>/<server_ip>/rule/<rule_id>')
|
||||||
|
@get_user_params()
|
||||||
def waf_rule_edit(service, server_ip, rule_id):
|
def waf_rule_edit(service, server_ip, rule_id):
|
||||||
roxywi_auth.page_for_admin(level=2)
|
roxywi_auth.page_for_admin(level=2)
|
||||||
|
if not roxywi_auth.is_access_permit_to_service(service):
|
||||||
|
abort(403, f'You do not have needed permissions to access to {service.title()} service')
|
||||||
roxywi_common.check_is_server_in_group(server_ip)
|
roxywi_common.check_is_server_in_group(server_ip)
|
||||||
|
|
||||||
manage_rules = ''
|
manage_rules = ''
|
||||||
servers_waf = ''
|
servers_waf = ''
|
||||||
config_read = ''
|
config_read = ''
|
||||||
servers = ''
|
servers = ''
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = g.user_params
|
||||||
rules = sql.select_waf_rules(server_ip, service)
|
rules = sql.select_waf_rules(server_ip, service)
|
||||||
|
|
||||||
if service == 'nginx':
|
if service == 'nginx':
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=2)
|
|
||||||
config_path = sql.get_setting('nginx_dir')
|
config_path = sql.get_setting('nginx_dir')
|
||||||
else:
|
else:
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1)
|
|
||||||
config_path = sql.get_setting('haproxy_dir')
|
config_path = sql.get_setting('haproxy_dir')
|
||||||
|
|
||||||
title = 'Edit a WAF rule'
|
title = 'Edit a WAF rule'
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
{% extends "base.html" %}
|
|
||||||
{% block content %}
|
|
||||||
<h2>
|
|
||||||
500 - Internal error
|
|
||||||
</h2>
|
|
||||||
<style>
|
|
||||||
#oops_div {
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
margin-top: 50px;
|
|
||||||
bottom: 50px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<center>
|
|
||||||
<h4>Sorry, but something went wrong..... Check httpd error log and
|
|
||||||
<a href="https://github.com/Aidaho12/haproxy-wi/issues" title="GitHub issues">create issue on GitHub</a>
|
|
||||||
or write <a href="https://t.me/haproxy_wi" title="Roxy-WI chat">to the chat</a>
|
|
||||||
</h4>
|
|
||||||
<div>Error: {{e}}</div>
|
|
||||||
<div id="oops_div">
|
|
||||||
<img src="{{ url_for('static', filename='images/oops.png')}}" alt="Oops">
|
|
||||||
</div>
|
|
||||||
</center>
|
|
||||||
{% endblock %}
|
|
|
@ -112,6 +112,7 @@
|
||||||
<td class="padding10" style="width: 10%">{{lang.words.latest|title()}} {{lang.words.version}}</td>
|
<td class="padding10" style="width: 10%">{{lang.words.latest|title()}} {{lang.words.version}}</td>
|
||||||
<td style="width: 10%"></td>
|
<td style="width: 10%"></td>
|
||||||
<td style="width: 100%">{{lang.words.desc|title()}}</td>
|
<td style="width: 100%">{{lang.words.desc|title()}}</td>
|
||||||
|
<td><span onclick="checkUpdateRoxy()" class="refresh service-restart" title="{{lang.words.check|title()}} {{lang.words.new4}} {{lang.words.versions}}"></span></td>
|
||||||
<td><span onclick="loadupdatehapwi()" class="refresh" title="{{lang.words.refresh|title()}}"></span></td>
|
<td><span onclick="loadupdatehapwi()" class="refresh" title="{{lang.words.refresh|title()}}"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
|
@ -44,42 +44,16 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% for s in services %}
|
{% for s in services %}
|
||||||
{% if s.0 in ('roxy-wi-smon', 'roxy-wi-checker', 'roxy-wi-keep_alive', 'roxy-wi-metrics', 'roxy-wi-portscanner', 'roxy-wi-socket', 'roxy-wi-prometheus-exporter') %}
|
{% if s.0 in ('roxy-wi-smon', 'roxy-wi-checker', 'roxy-wi-keep_alive', 'roxy-wi-metrics', 'roxy-wi-portscanner', 'roxy-wi-socket', 'roxy-wi-prometheus-exporter') %}
|
||||||
|
{% set is_need_update = 0 %}
|
||||||
|
{% if s.2['current_version']|float < s.2['new_version']|float %}
|
||||||
|
{% set is_need_update = 1 %}
|
||||||
|
{% endif %}
|
||||||
<tr class="{{ loop.cycle('even', 'odd') }}">
|
<tr class="{{ loop.cycle('even', 'odd') }}">
|
||||||
{% set is_need_update = 0 %}
|
|
||||||
{% if s.0 == 'roxy-wi-smon' %}
|
|
||||||
{% if s.3|float < smon_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-checker' %}
|
|
||||||
{% if s.3|float < checker_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-keep_alive' %}
|
|
||||||
{% if s.3|float < keep_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-metrics' %}
|
|
||||||
{% if s.3|float < metrics_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-portscanner' %}
|
|
||||||
{% if s.3|float < portscanner_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-socket' %}
|
|
||||||
{% if s.3|float < socket_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% elif s.0 == 'roxy-wi-prometheus-exporter' %}
|
|
||||||
{% if s.3|float < prometheus_exp_ver|float %}
|
|
||||||
{% set is_need_update = 1 %}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
<td class="padding10 first-collumn">
|
<td class="padding10 first-collumn">
|
||||||
<a href="https://roxy-wi.org/tools/{{services_name[s.0]['link']}}" title="{{lang.words.read|title()}} {{lang.words.more}} {{lang.words.about}} {{services_name[s.0]['name']}}" target="_blank" class="link" rel="noopener noreferrer">{{services_name[s.0]['name']}}</a>
|
<a href="https://roxy-wi.org/tools/{{services_name[s.0]['link']}}" title="{{lang.words.read|title()}} {{lang.words.more}} {{lang.words.about}} {{services_name[s.0]['name']}}" target="_blank" class="link" rel="noopener noreferrer">{{services_name[s.0]['name']}}</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if s.3 != '* is not installed' and s.3 != '' %}
|
{% if s.2['current_version'] != '* is not installed' and s.2['current_version'] != '' %}
|
||||||
<b id="current-version-{{s.0}}"
|
<b id="current-version-{{s.0}}"
|
||||||
{% if is_need_update %}
|
{% if is_need_update %}
|
||||||
title="{{lang.admin_page.desc.a_new_version}} {{services_name[s.0]['name']}}"
|
title="{{lang.admin_page.desc.a_new_version}} {{services_name[s.0]['name']}}"
|
||||||
|
@ -89,37 +63,23 @@
|
||||||
style="color: var(--green-color)"
|
style="color: var(--green-color)"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
>
|
>
|
||||||
{{s.3}}
|
{{s.2['current_version']}}
|
||||||
</b>
|
</b>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="padding10">
|
<td class="padding10">
|
||||||
<b>
|
<b>
|
||||||
{% if s.0 == 'roxy-wi-smon' %}
|
{{s.2['new_version']}}
|
||||||
{{smon_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-checker' %}
|
|
||||||
{{checker_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-keep_alive' %}
|
|
||||||
{{keep_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-metrics' %}
|
|
||||||
{{metrics_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-portscanner' %}
|
|
||||||
{{portscanner_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-socket' %}
|
|
||||||
{{socket_ver}}
|
|
||||||
{% elif s.0 == 'roxy-wi-prometheus-exporter' %}
|
|
||||||
{{prometheus_exp_ver}}
|
|
||||||
{% endif %}
|
|
||||||
</b>
|
</b>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if 'is not installed' not in s.3 and s.3 != '' %}
|
{% if 'is not installed' not in s.2['current_version'] and s.2['current_version'] != '' %}
|
||||||
{% if is_need_update %}
|
{% if is_need_update %}
|
||||||
<a class="ui-button ui-widget ui-corner-all" onclick="updateService('{{s.0}}')" title="{{lang.words.w_update|title()}} {{services_name[s.0]['name']}}">{{lang.words.w_update|title()}}</a>
|
<a class="ui-button ui-widget ui-corner-all" onclick="updateService('{{s.0}}')" title="{{lang.words.w_update|title()}} {{services_name[s.0]['name']}}">{{lang.words.w_update|title()}}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2">
|
<td colspan="3">
|
||||||
{{services_name[s.0]['desc']|safe}}
|
{{services_name[s.0]['desc']|safe}}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
{% import 'languages/'+lang|default('en')+'.html' as lang %}
|
||||||
|
{% from 'languages/languages.html' import languages %}
|
||||||
|
<thead>
|
||||||
|
<tr class="overviewHead">
|
||||||
|
<td class="padding10 first-collumn-wi" style="width: 85%">
|
||||||
|
{% if role == 2 %}
|
||||||
|
<a href="/app/logs/internal?type=2" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
||||||
|
{% else %}
|
||||||
|
<a href="/app/logs/internal" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
||||||
|
{% endif %}
|
||||||
|
{{lang.words.recent|title()}} Roxy-WI {{lang.words.logs}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if roxy_wi_log|length > 3 %}
|
||||||
|
<span class="add-button-wi">
|
||||||
|
<span id="show-all-haproxy-wi-log">
|
||||||
|
{{lang.words.show_all}}
|
||||||
|
</span>
|
||||||
|
<span id="hide-all-haproxy-wi-log" style="display: none;">
|
||||||
|
{{lang.words.hide|title()}} {{lang.words.logs}}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td style="padding-right: 10px;">
|
||||||
|
<a onclick="ShowOverviewLogs()" title="{{lang.words.refresh|title()}}" style="float: right;">
|
||||||
|
<span class="refresh"></span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="overview-logs-body">
|
||||||
|
{% set counter = 0 -%}
|
||||||
|
{% for log in roxy_wi_log %}
|
||||||
|
{% set counter = counter + loop.index0 %}
|
||||||
|
{% if counter <= 2 %}
|
||||||
|
<tr class="{{ loop.cycle('odd', 'even') }}">
|
||||||
|
<td class="padding10 first-collumn-wi" style="font-size: 12.5px;" colspan="3">
|
||||||
|
{{ log }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% else %}
|
||||||
|
<tr style="display: none;" class="show-haproxy-wi-log {{ loop.cycle('odd', 'even') }}">
|
||||||
|
<td class="padding10 first-collumn-wi" style="font-size: 12.5px" colspan="3">
|
||||||
|
{{ log }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
|
@ -1,202 +1,202 @@
|
||||||
{% import 'languages/'+lang|default('en')+'.html' as lang %}
|
{% import 'languages/'+lang|default('en')+'.html' as lang %}
|
||||||
<tr class="odd">
|
<tr class="odd">
|
||||||
<td class="padding10 first-collumn-wi">
|
<td class="padding10 first-collumn-wi">
|
||||||
{% if metrics_master == 'active' %}
|
{% if roxy_tools_status['roxy-wi-metrics'] == 'active' %}
|
||||||
<span class="serverUp server-status-small" title="Metrics master {{lang.words.started}}"></span>
|
<span class="serverUp server-status-small" title="Metrics master {{lang.words.started}}"></span>
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
|
Metrics master
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
Metrics master
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if roxy_tools_status['roxy-wi-metrics'] == 'inactive' or roxy_tools_status['roxy-wi-metrics'] == 'failed' %}
|
||||||
|
<span class="serverDown server-status-small" title="Metrics {{lang.words.stopped}}"></span>
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<a href="/app/viewlogs.py?viewlogs={{metrics_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
<a href="{{ url_for('admin.admin') }}#tools" title="{{lang.words.start|title()}} Metrics" class="logs_link">
|
||||||
Metrics master
|
Metrics master
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
Metrics master
|
Metrics master
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if metrics_master == 'inactive' or metrics_master == 'failed' %}
|
<span class="serverNone server-status-small" title="{{lang.phrases.metrics_not_installed}}"></span>
|
||||||
<span class="serverDown server-status-small" title="Metrics {{lang.words.stopped}}"></span>
|
<a href="https://roxy-wi.org/tools/metrics#installation" title="Metrics installation" target="_blank" class="logs_link">
|
||||||
{% if role <= 1 %}
|
Metrics master
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} Metrics" class="logs_link">
|
</a>
|
||||||
Metrics master
|
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
Metrics master
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<span class="serverNone server-status-small" title="{{lang.phrases.metrics_not_installed}}"></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=metrics#installation" title="Metrics installation" target="_blank" class="logs_link">
|
|
||||||
Metrics master
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% endif %}
|
||||||
<td class="third-collumn-wi">
|
</td>
|
||||||
{% if checker_master == 'active' %}
|
<td class="third-collumn-wi">
|
||||||
<span class="serverUp server-status-small" title="Checker master {{lang.words.started}}"></span>
|
{% if roxy_tools_status['roxy-wi-checker'] == 'active' %}
|
||||||
|
<span class="serverUp server-status-small" title="Checker master {{lang.words.started}}"></span>
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
|
Checker master
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
Checker master
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if roxy_tools_status['roxy-wi-checker'] == 'inactive' or roxy_tools_status['roxy-wi-checker'] == 'failed' %}
|
||||||
|
<span class="serverDown server-status-small" title="Checker {{lang.words.stopped}}"></span>
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<a href="/app/viewlogs.py?viewlogs={{checker_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
<a href="{{ url_for('admin.admin') }}#services" title="{{lang.words.start|title()}} Checker" class="logs_link">
|
||||||
|
Checker master
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
Checker master
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
<span class="serverNone server-status-small" title="{{lang.phrases.checker_not_installed}}"></span>
|
||||||
|
<a href="https://roxy-wi.org/tools/checker#installation" title="Checker installation" target="_blank" class="logs_link">
|
||||||
Checker master
|
Checker master
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
|
||||||
Checker master
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
{% if checker_master == 'inactive' or checker_master == 'failed' %}
|
|
||||||
<span class="serverDown server-status-small" title="Checker {{lang.words.stopped}}"></span>
|
|
||||||
{% if role <= 1 %}
|
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} Checker" class="logs_link">
|
|
||||||
Checker master
|
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
Checker master
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<span class="serverNone server-status-small" title="{{lang.phrases.checker_not_installed}}"></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=checker#installation" title="Checker installation" target="_blank" class="logs_link">
|
|
||||||
Checker master
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% endif %}
|
||||||
<td class="third-collumn-wi">
|
</td>
|
||||||
{% if keep_alive == 'active' %}
|
<td class="third-collumn-wi">
|
||||||
<span class="serverUp server-status-small" title="Auto start {{lang.words.started}}"></span>
|
{% if roxy_tools_status['roxy-wi-keep_alive'] == 'active' %}
|
||||||
|
<span class="serverUp server-status-small" title="Auto start {{lang.words.started}}"></span>
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
|
Auto start
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
Auto star
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if roxy_tools_status['roxy-wi-keep_alive'] == 'inactive' or roxy_tools_status['roxy-wi-keep_alive'] == 'failed' %}
|
||||||
|
<span class="serverDown server-status-small" title="Auto start {{lang.words.stopped}}"></span>
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<a href="/app/viewlogs.py?viewlogs={{keep_alive_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
<a href="{{ url_for('admin.admin') }}#services" title="{{lang.words.start|title()}} Auto star {{lang.words.service}}" class="logs_link">
|
||||||
Auto start
|
Auto start
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
Auto star
|
Auto start
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if keep_alive == 'inactive' or keep_alive == 'failed' %}
|
<span class="serverNone server-status-small" title="{{lang.phrases.auto_start_not_installed}}"></span>
|
||||||
<span class="serverDown server-status-small" title="Auto start {{lang.words.stopped}}"></span>
|
<a href="https://roxy-wi.org/tools/auto_start#installation" title="Auto start installation" target="_blank" class="logs_link">
|
||||||
{% if role <= 1 %}
|
Auto start
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} Auto star {{lang.words.service}}" class="logs_link">
|
</a>
|
||||||
Auto start
|
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
Auto start
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<span class="serverNone server-status-small" title="{{lang.phrases.auto_start_not_installed}}"></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=auto_start#installation" title="Auto start installation" target="_blank" class="logs_link">
|
|
||||||
Auto start
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="even">
|
|
||||||
<td class="padding10 first-collumn-wi">
|
|
||||||
{% if metrics_worker|int() >= 1 %}
|
|
||||||
<span class="serverUp server-status-small" title="{{lang.words.running2|title()}} {{metrics_worker}} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
|
||||||
{% else %}
|
|
||||||
{% if is_metrics_worker|int() == 0 %}
|
|
||||||
<span class="serverNone server-status-small" title="There is not job for metrics"></span>
|
|
||||||
{% else %}
|
|
||||||
<span class="serverDown server-status-small" title="{{lang.words.running2|title()}} {{is_checker_worker}} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if role <= 1 %}
|
</td>
|
||||||
<a href="/app/viewlogs.py?viewlogs={{metrics_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
</tr>
|
||||||
Metrics workers
|
<tr class="even">
|
||||||
</a>
|
<td class="padding10 first-collumn-wi">
|
||||||
|
{% if metrics_worker|int() >= 1 %}
|
||||||
|
<span class="serverUp server-status-small" title="{{lang.words.running2|title()}} {{metrics_worker}} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
||||||
|
{% else %}
|
||||||
|
{% if is_metrics_worker|int() == 0 %}
|
||||||
|
<span class="serverNone server-status-small" title="There is not job for metrics"></span>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
<span class="serverDown server-status-small" title="{{lang.words.running2|title()}} {{is_checker_worker}} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
Metrics workers
|
Metrics workers
|
||||||
{% endif %}
|
</a>
|
||||||
</td>
|
{% else %}
|
||||||
<td>
|
Metrics workers
|
||||||
{% if checker_worker|int() >= 1 %}
|
{% endif %}
|
||||||
<span class="serverUp server-status-small" title="{{lang.words.running2|title()}} {{ checker_worker }} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if checker_worker|int() >= 1 %}
|
||||||
|
<span class="serverUp server-status-small" title="{{lang.words.running2|title()}} {{ checker_worker }} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
||||||
|
{% else %}
|
||||||
|
{% if is_checker_worker|int() == 0 %}
|
||||||
|
<span class="serverNone server-status-small" title="There is not job for checker"></span>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if is_checker_worker|int() == 0 %}
|
<span class="serverDown server-status-small" title="{{lang.words.running2|title()}} {{ checker_worker }} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
||||||
<span class="serverNone server-status-small" title="There is not job for checker"></span>
|
|
||||||
{% else %}
|
|
||||||
<span class="serverDown server-status-small" title="{{lang.words.running2|title()}} {{ checker_worker }} {{lang.words.worker2}} {{lang.words.processes}}"></span>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if role <= 1 %}
|
{% endif %}
|
||||||
<a href="/app/viewlogs.py?viewlogs={{checker_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
{% if role <= 1 %}
|
||||||
Checker workers
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
|
Checker workers
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
Checker workers
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if roxy_tools_status['roxy-wi-smon'] == 'active' %}
|
||||||
|
<span class="serverUp server-status-small" title="SMON {{lang.words.started}}"></span>
|
||||||
|
<a href="{{ url_for('smon.smon') }}" title="SMON Dashboard" class="logs_link">
|
||||||
|
SMON
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
Checker workers
|
{% if roxy_tools_status['roxy-wi-smon'] == 'inactive' or roxy_tools_status['roxy-wi-smon'] == 'failed' %}
|
||||||
{% endif %}
|
<span class="serverDown server-status-small" title="SMON {{lang.words.stopped}}"></span>
|
||||||
</td>
|
<a href="{{ url_for('admin.admin') }}#services" title="{{lang.words.start|title()}} SMON" class="logs_link">
|
||||||
<td>
|
|
||||||
{% if smon == 'active' %}
|
|
||||||
<span class="serverUp server-status-small" title="SMON {{lang.words.started}}"></span>
|
|
||||||
<a href="/app/smon.py?action=view" title="SMON Dashboard" class="logs_link">
|
|
||||||
SMON
|
SMON
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if smon == 'inactive' or smon == 'failed' %}
|
<span title="SMON is not installed"><span class="serverNone server-status-small"></span></span>
|
||||||
<span class="serverDown server-status-small" title="SMON {{lang.words.stopped}}"></span>
|
<a href="https://roxy-wi.org/tools/smon" title="Simple monitoring ports installation" target="_blank" class="logs_link">
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} SMON" class="logs_link">
|
SMON
|
||||||
SMON
|
</a>
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
<span title="SMON is not installed"><span class="serverNone server-status-small"></span></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=smon" title="Simple monitoring ports installation" target="_blank" class="logs_link">
|
|
||||||
SMON
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="odd">
|
|
||||||
{% if role == 1 %}
|
|
||||||
<td class="padding10 first-collumn-wi">
|
|
||||||
{% if grafana|int() >= 1 %}
|
|
||||||
<span class="serverUp server-status-small" title="Grafana {{lang.words.running2}}"></span>
|
|
||||||
<a href="http://{{host}}:3000" target="_blank" title="{{lang.words.open|title()}} Grafana" class="logs_link" rel="noopener noreferrer">Grafana</a>
|
|
||||||
{% else %}
|
|
||||||
<span class="serverNone server-status-small" title="The service is not installed or not running2"></span>
|
|
||||||
<span>Grafana</span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
<td {% if role != 1 %}class="padding10 first-collumn-wi"{%endif%}>
|
<tr class="odd">
|
||||||
{% if socket == 'active' %}
|
{% if role == 1 %}
|
||||||
<span class="serverUp server-status-small" title="Socket {{lang.words.started}}"></span>
|
<td class="padding10 first-collumn-wi">
|
||||||
{% if role <= 1 %}
|
{% if grafana|int() >= 1 %}
|
||||||
<a href="/app/viewlogs.py?viewlogs={{socket_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
<span class="serverUp server-status-small" title="Grafana {{lang.words.running2}}"></span>
|
||||||
Socket service
|
<a href="http://{{host}}:3000" target="_blank" title="{{lang.words.open|title()}} Grafana" class="logs_link" rel="noopener noreferrer">Grafana</a>
|
||||||
</a>
|
{% else %}
|
||||||
{% else %}
|
<span class="serverNone server-status-small" title="The service is not installed or not running2"></span>
|
||||||
Socket service
|
<span>Grafana</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td {% if role != 1 %}class="padding10 first-collumn-wi"{%endif%}>
|
||||||
|
{% if roxy_tools_status['roxy-wi-socket'] == 'active' %}
|
||||||
|
<span class="serverUp server-status-small" title="Socket {{lang.words.started}}"></span>
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.view|title()}} {{lang.words.logs2}}" class="logs_link">
|
||||||
|
Socket service
|
||||||
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if socket == 'inactive' or socket == 'failed' %}
|
Socket service
|
||||||
<span class="serverDown server-status-small" title="Socket {{lang.words.stopped}}"></span>
|
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} Socket" class="logs_link">
|
|
||||||
Socket service
|
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
<span title="Socket service is not installed"><span class="serverNone server-status-small"></span></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=socket" title="Socket service" target="_blank" class="logs_link">
|
|
||||||
Socket service
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% else %}
|
||||||
<td>
|
{% if roxy_tools_status['roxy-wi-socket'] == 'inactive' or roxy_tools_status['roxy-wi-socket'] == 'failed' %}
|
||||||
{% if port_scanner == 'active' %}
|
<span class="serverDown server-status-small" title="Socket {{lang.words.stopped}}"></span>
|
||||||
<span class="serverUp server-status-small" title="Port scanner {{lang.words.started}}"></span>
|
<a href="{{ url_for('admin.admin') }}#services" title="{{lang.words.start|title()}} Socket" class="logs_link">
|
||||||
<a href="/app/portscanner.py" title="Port scanner Dashboard" class="logs_link">
|
Socket service
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<span title="Socket service is not installed"><span class="serverNone server-status-small"></span></span>
|
||||||
|
<a href="https://roxy-wi.org/tools/socket" title="Socket service" target="_blank" class="logs_link">
|
||||||
|
Socket service
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if roxy_tools_status['roxy-wi-portscanner'] == 'active' %}
|
||||||
|
<span class="serverUp server-status-small" title="Port scanner {{lang.words.started}}"></span>
|
||||||
|
<a href="{{ url_for('portscanner.portscanner') }}" title="Port scanner Dashboard" class="logs_link">
|
||||||
|
Port scanner
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
{% if roxy_tools_status['roxy-wi-portscanner'] == 'inactive' or roxy_tools_status['roxy-wi-portscanner'] == 'failed' %}
|
||||||
|
<span class="serverDown server-status-small" title="Port scanner {{lang.words.stopped}}"></span>
|
||||||
|
<a href="{{ url_for('admin.admin') }}#services" title="{{lang.words.start|title()}} Port scanner" class="logs_link">
|
||||||
Port scanner
|
Port scanner
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if port_scanner == 'inactive' or port_scanner == 'failed' %}
|
<span title="Port scanner is not installed"><span class="serverNone server-status-small"></span></span>
|
||||||
<span class="serverDown server-status-small" title="Port scanner {{lang.words.stopped}}"></span>
|
<a href="https://roxy-wi.org/tools/port_scanner" title="Port scanner" target="_blank" class="logs_link">
|
||||||
<a href="/app/users.py#services" title="{{lang.words.start|title()}} Port scanner" class="logs_link">
|
Port scanner
|
||||||
Port scanner
|
</a>
|
||||||
</a>
|
|
||||||
{% else %}
|
|
||||||
<span title="Port scanner is not installed"><span class="serverNone server-status-small"></span></span>
|
|
||||||
<a href="https://roxy-wi.org/services.py?service=port_scanner" title="Port scanner" target="_blank" class="logs_link">
|
|
||||||
Port scanner
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% endif %}
|
||||||
</tr>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<tr class="odd">
|
<tr class="odd">
|
||||||
<td class="padding10 first-collumn-wi">{{lang.words.plan|title()}}</td>
|
<td class="padding10 first-collumn-wi">{{lang.words.plan|title()}}</td>
|
||||||
<td>{{plan}}</td>
|
<td colspan="2">{{plan}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="even">
|
<tr class="even">
|
||||||
<td class="padding10 first-collumn-wi">{{lang.words.status|title()}}</td>
|
<td class="padding10 first-collumn-wi">{{lang.words.status|title()}}</td>
|
||||||
<td>
|
<td colspan="2">
|
||||||
{% if plan == 'Free' %}
|
{% if plan == 'Free' %}
|
||||||
N/A
|
N/A
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="odd">
|
<tr class="odd">
|
||||||
<td class="padding10 first-collumn-wi">{{lang.words.pay_method|title()}}</td>
|
<td class="padding10 first-collumn-wi">{{lang.words.pay_method|title()}}</td>
|
||||||
<td>
|
<td colspan="2">
|
||||||
{% if plan == 'Free' %}
|
{% if plan == 'Free' %}
|
||||||
N/A
|
N/A
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% block title %} {{title}} {% endblock %}
|
||||||
|
{% block h2 %} {{title}} {% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>
|
<div class="container">
|
||||||
404 - Page not found
|
|
||||||
</h2>
|
|
||||||
<style>
|
<style>
|
||||||
#oops_div {
|
#oops_div {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
bottom: 50px;
|
bottom: -15px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<center>
|
<center>
|
||||||
<h4>Sorry, but page not found. Try another page</h4>
|
<h4>{{e}}</h4>
|
||||||
</center>
|
</center>
|
||||||
<div id="oops_div">
|
<div id="oops_div">
|
||||||
<img src="{{ url_for('static', filename='images/oops.png')}}" alt="Oops">
|
<img src="{{ url_for('static', filename='images/oops.png')}}" alt="Oops">
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,134 +1,136 @@
|
||||||
<div class="top-menu">
|
<div class="top-menu">
|
||||||
<div class="LogoText">
|
<div class="LogoText">
|
||||||
<span id="logo_text">
|
<span id="logo_text">
|
||||||
<a href="https://roxy-wi.org" title="Roxy-WI site" target="_blank">
|
<a href="https://roxy-wi.org" title="Roxy-WI site" target="_blank">
|
||||||
<img src="{{ url_for('static', filename='images/logo_menu.png') }}" alt="logo" width="110" />
|
<img src="{{ url_for('static', filename='images/logo_menu.png') }}" alt="logo" width="110" />
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div id="top-link" class="top-link">
|
<div id="top-link" class="top-link">
|
||||||
<nav id="menu">
|
<nav id="menu">
|
||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
<li><a href="{{ url_for('overview.index') }}" title="{{lang.menu_links.overview.title}}" class="overview-link ">{{lang.menu_links.overview.link}}</a></li>
|
<li><a href="{{ url_for('overview.index') }}" title="{{lang.menu_links.overview.title}}" class="overview-link ">{{lang.menu_links.overview.link}}</a></li>
|
||||||
{% if '1' in user_services %}
|
{% if '1' in user_services %}
|
||||||
<li class="p_menu">
|
<li class="p_menu">
|
||||||
<a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="config-show">HAProxy</a>
|
<a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="config-show">HAProxy</a>
|
||||||
<ul class="v_menu">
|
<ul class="v_menu">
|
||||||
<li><a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
|
<li><a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
|
||||||
<li><a href="{{ url_for('config.config', service='haproxy') }}" title="{{lang.menu_links.config.haproxy.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
<li><a href="{{ url_for('config.config', service='haproxy') }}" title="{{lang.menu_links.config.haproxy.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
||||||
<li><a href="{{ url_for('main.stats', service='haproxy') }}" title="{{lang.menu_links.stats.haproxy.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
<li><a href="{{ url_for('main.stats', service='haproxy') }}" title="{{lang.menu_links.stats.haproxy.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
||||||
<li><a href="{{ url_for('logs.logs', service='haproxy') }}" title="HAProxy {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
<li><a href="{{ url_for('logs.logs', service='haproxy') }}" title="HAProxy {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
||||||
<li><a href="{{ url_for('runtime.runtimeapi') }}" title="Runtime API" class="runtime head-submenu">Runtime API</a></li>
|
<li><a href="{{ url_for('runtime.runtimeapi') }}" title="Runtime API" class="runtime head-submenu">Runtime API</a></li>
|
||||||
<li><a href="{{ url_for('metric.metrics', service='haproxy') }}" title="HAProxy {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
<li><a href="{{ url_for('metric.metrics', service='haproxy') }}" title="HAProxy {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
||||||
{% if role <= 3 %}
|
{% if role <= 3 %}
|
||||||
<li><a href="{{ url_for('add.add', service='haproxy') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu" id="add1">{{lang.menu_links.add_proxy.link}}</a></li>
|
<li><a href="{{ url_for('add.add', service='haproxy') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu" id="add1">{{lang.menu_links.add_proxy.link}}</a></li>
|
||||||
<li><a href="{{ url_for('config.versions', service='haproxy') }}" title="{{lang.menu_links.versions.haproxy.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
<li><a href="{{ url_for('config.versions', service='haproxy') }}" title="{{lang.menu_links.versions.haproxy.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
||||||
<li><a href="{{ url_for('add.add', service='haproxy') }}#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
|
<li><a href="{{ url_for('add.add', service='haproxy') }}#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
|
||||||
<li><a href="{{ url_for('add.add', service='haproxy') }}#lists" title="{{lang.menu_links.lists.title}}" class="lists head-submenu" id="add7">{{lang.menu_links.lists.link}}</a></li>
|
<li><a href="{{ url_for('add.add', service='haproxy') }}#lists" title="{{lang.menu_links.lists.title}}" class="lists head-submenu" id="add7">{{lang.menu_links.lists.link}}</a></li>
|
||||||
<li><a href="{{ url_for('waf.waf', service='haproxy') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
|
<li><a href="{{ url_for('waf.waf', service='haproxy') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if '2' in user_services %}
|
{% if '2' in user_services %}
|
||||||
<li class="p_menu">
|
<li class="p_menu">
|
||||||
<a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="nginx-menu">NGINX</a>
|
<a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="nginx-menu">NGINX</a>
|
||||||
<ul class="v_menu">
|
<ul class="v_menu">
|
||||||
<li><a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
|
<li><a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
|
||||||
<li><a href="{{ url_for('config.config', service='nginx') }}" title="{{lang.menu_links.config.nginx.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
<li><a href="{{ url_for('config.config', service='nginx') }}" title="{{lang.menu_links.config.nginx.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
||||||
<li><a href="{{ url_for('main.stats', service='nginx') }}" title="{{lang.menu_links.stats.nginx.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
<li><a href="{{ url_for('main.stats', service='nginx') }}" title="{{lang.menu_links.stats.nginx.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
||||||
<li><a href="{{ url_for('logs.logs', service='nginx') }}" title="NGINX {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
<li><a href="{{ url_for('logs.logs', service='nginx') }}" title="NGINX {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
||||||
<li><a href="{{ url_for('metric.metrics', service='nginx') }}" title="NGINX {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
<li><a href="{{ url_for('metric.metrics', service='nginx') }}" title="NGINX {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
||||||
{% if role <= 3 %}
|
{% if role <= 3 %}
|
||||||
<li><a href="{{ url_for('add.add', service='nginx') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu">{{lang.menu_links.add_proxy.link}}</a></li>
|
<li><a href="{{ url_for('add.add', service='nginx') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu">{{lang.menu_links.add_proxy.link}}</a></li>
|
||||||
<li><a href="{{ url_for('config.versions', service='nginx') }}" title="{{lang.menu_links.versions.nginx.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
<li><a href="{{ url_for('config.versions', service='nginx') }}" title="{{lang.menu_links.versions.nginx.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
||||||
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=nginx#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu">{{lang.menu_links.ssl.link}}</a></li>
|
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=nginx#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu">{{lang.menu_links.ssl.link}}</a></li>
|
||||||
<li><a href="{{ url_for('waf.waf', service='nginx') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
|
<li><a href="{{ url_for('waf.waf', service='nginx') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% if '4' in user_services %}
|
|
||||||
<li class="p_menu">
|
|
||||||
<a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="apache-menu">Apache</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('config.config', service='apache') }}" title="{{lang.menu_links.config.apache.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.stats', service='apache') }}" title="{{lang.menu_links.stats.apache.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('logs.logs', service='apache') }}" title="Apache {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('metric.metrics', service='apache') }}" title="Apache {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
|
||||||
{% if role <= 3 %}
|
|
||||||
<li><a href="{{ url_for('config.versions', service='apache') }}" title="{{lang.menu_links.versions.apache.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=apache#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
|
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% if '3' in user_services %}
|
|
||||||
{% if role <= 2 %}
|
|
||||||
<li class="p_menu">
|
|
||||||
<a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="ha">Keepalived</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
|
|
||||||
<li><a href="{{ url_for('config.config', service='keepalived') }}" title="{{lang.menu_links.config.keepalived.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('logs.logs', service='keepalived') }}" title="Keepalived {{lang.menu_links.stats.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
|
||||||
<li><a href="{{ url_for('config.versions', service='keepalived') }}" title="{{lang.menu_links.versions.keepalived.title}}" class="version head-submenu keepalived_versions">{{lang.menu_links.versions.link}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
<li class="p_menu">
|
|
||||||
<a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.title}}" class="stats">{{lang.menu_links.monitoring.link}}</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.smon.dashboard}}" class="overview-link head-submenu">{{lang.menu_links.monitoring.smon.dashboard}}</a></li>
|
|
||||||
<li><a href="{{ url_for('smon.smon_history') }}" title="{{lang.menu_links.monitoring.smon.history}}" class="lists head-submenu">{{lang.menu_links.monitoring.smon.history}}</a></li>
|
|
||||||
{% if role <= 3 %}
|
|
||||||
<li><a href="{{ url_for('smon.smon_admin') }}" title="{{lang.menu_links.monitoring.smon.admin}}" class="edit head-submenu">{{lang.menu_links.monitoring.smon.admin}}</a></li>
|
|
||||||
<li><a href="{{ url_for('checker.checker_settings') }}" title="Checker: {{lang.words.settings}}" class="checker head-submenu">Checker: {{lang.words.settings|title()}}</a></li>
|
|
||||||
{% endif %}
|
|
||||||
<li><a href="{{ url_for('checker.checker_history') }}" title="{{lang.menu_links.monitoring.checker_history}}" class="lists head-submenu">{{lang.menu_links.monitoring.checker_history}}</a></li>
|
|
||||||
<li><a href="{{ url_for('portscanner.portscanner') }}" title="{{lang.menu_links.monitoring.port_scan}}" class="port-scanner head-submenu">{{lang.menu_links.monitoring.port_scan}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.nettools') }}" title="{{lang.menu_links.monitoring.net_tools}}" class="net-tools head-submenu">{{lang.menu_links.monitoring.net_tools}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% if role <= 2 %}
|
|
||||||
<li class="p_menu">
|
|
||||||
<a href="{{ url_for('install.install_monitoring') }}" title="{{lang.menu_links.servers.title}}" class="hap-menu">{{lang.words.installation|title()}}</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('install.ha') }}" title="{{lang.menu_links.ha.title}}" class="keepalived head-submenu">HA {{lang.words.cluster}}</a></li>
|
|
||||||
<li><a href="{{ url_for('install.install_monitoring') }}#service" title="{{lang.words.servers|title()}}: {{lang.words.proxy|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu service installproxy head-submenu">{{lang.words.proxy|title()}} {{lang.words.services}}</a> </li>
|
|
||||||
<li><a href="{{ url_for('install.install_monitoring') }}#monitoring" title="{{lang.words.servers|title()}}: {{lang.words.monitoring|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu monitoring installmon head-submenu">{{lang.words.monitoring|title()}}</a> </li>
|
|
||||||
<li><a href="{{ url_for('install.install_monitoring') }}#geolite2" title="{{lang.words.installation|title()}} GeoLite2" class="hap-menu geolite2 installgeo head-submenu">GeoLite2</a> </li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="p_menu">
|
|
||||||
<a href="{{ url_for('main.servers') }}#users" title="{{lang.menu_links.servers.title}}" class="runtime">{{lang.menu_links.servers.link}}</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('main.servers') }}#users" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu">{{lang.words.users|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.servers') }}#servers" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu">{{lang.words.servers|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.servers') }}#ssh" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu">SSH {{lang.words.creds|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.servers') }}#settings" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu">{{lang.words.settings|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('main.servers') }}#backup" title="{{lang.words.servers|title()}}: {{lang.words.backup|title()}} {{lang.words.configs2}}" class="backup head-submenu">{{lang.words.backup|title()}}</a> </li>
|
|
||||||
<li><a href="{{ url_for('logs.logs_internal') }}?type=2" title="{{lang.words.servers|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
|
||||||
{% if role <= 1 %}
|
|
||||||
<li class="p_menu" id="admin-area">
|
|
||||||
<a href="{{ url_for('admin.admin') }}#users" title="{{lang.menu_links.admin_area.title}}" class="admin">{{lang.menu_links.admin_area.link}}</a>
|
|
||||||
<ul class="v_menu">
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#users" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu" id="admin-area-users">{{lang.words.users|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#groups" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.groups3}}" class="group groups head-submenu" id="admin-area-groups">{{lang.words.groups|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#servers" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu" id="admin-area-servers">{{lang.words.servers|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#ssh" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu" id="admin-area-ssh">SSH {{lang.words.creds|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#settings" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu" id="admin-area-settings">{{lang.words.settings|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#tools" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.tools}}" class="services head-submenu" id="admin-area-services">{{lang.words.tools|title()}}</a></li>
|
|
||||||
<li><a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.admin_area|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu" id="admin-area-logs">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
|
|
||||||
<li><a href="{{ url_for('admin.admin') }}#updatehapwi" title="{{lang.words.admin_area|title()}}: {{lang.words.w_update|title()}} Roxy-WI" class="upload updatehapwi head-submenu" id="admin-area-update">{{lang.words.w_update|title()}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</li>
|
||||||
</div>
|
{% endif %}
|
||||||
</div>
|
{% if '4' in user_services %}
|
||||||
|
<li class="p_menu">
|
||||||
|
<a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="apache-menu">Apache</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
<li><a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('config.config', service='apache') }}" title="{{lang.menu_links.config.apache.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.stats', service='apache') }}" title="{{lang.menu_links.stats.apache.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('logs.logs', service='apache') }}" title="Apache {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('metric.metrics', service='apache') }}" title="Apache {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
|
||||||
|
{% if role <= 3 %}
|
||||||
|
<li><a href="{{ url_for('config.versions', service='apache') }}" title="{{lang.menu_links.versions.apache.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=apache#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% if '3' in user_services %}
|
||||||
|
{% if role <= 2 %}
|
||||||
|
<li class="p_menu">
|
||||||
|
<a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="ha">Keepalived</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
<li><a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
|
||||||
|
<li><a href="{{ url_for('config.config', service='keepalived') }}" title="{{lang.menu_links.config.keepalived.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('logs.logs', service='keepalived') }}" title="Keepalived {{lang.menu_links.stats.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
|
||||||
|
<li><a href="{{ url_for('config.versions', service='keepalived') }}" title="{{lang.menu_links.versions.keepalived.title}}" class="version head-submenu keepalived_versions">{{lang.menu_links.versions.link}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
<li class="p_menu">
|
||||||
|
<a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.title}}" class="stats">{{lang.menu_links.monitoring.link}}</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
<li><a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.smon.dashboard}}" class="overview-link head-submenu">{{lang.menu_links.monitoring.smon.dashboard}}</a></li>
|
||||||
|
<li><a href="{{ url_for('smon.smon_history') }}" title="{{lang.menu_links.monitoring.smon.history}}" class="lists head-submenu">{{lang.menu_links.monitoring.smon.history}}</a></li>
|
||||||
|
{% if role <= 3 %}
|
||||||
|
<li><a href="{{ url_for('smon.smon_admin') }}" title="{{lang.menu_links.monitoring.smon.admin}}" class="edit head-submenu">{{lang.menu_links.monitoring.smon.admin}}</a></li>
|
||||||
|
<li><a href="{{ url_for('checker.checker_settings') }}" title="Checker: {{lang.words.settings}}" class="checker head-submenu">Checker: {{lang.words.settings|title()}}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
<li><a href="{{ url_for('checker.checker_history') }}" title="{{lang.menu_links.monitoring.checker_history}}" class="lists head-submenu">{{lang.menu_links.monitoring.checker_history}}</a></li>
|
||||||
|
<li><a href="{{ url_for('portscanner.portscanner') }}" title="{{lang.menu_links.monitoring.port_scan}}" class="port-scanner head-submenu">{{lang.menu_links.monitoring.port_scan}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.nettools') }}" title="{{lang.menu_links.monitoring.net_tools}}" class="net-tools head-submenu">{{lang.menu_links.monitoring.net_tools}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% if role <= 2 %}
|
||||||
|
<li class="p_menu">
|
||||||
|
<a href="{{ url_for('install.install_monitoring') }}" title="{{lang.menu_links.servers.title}}" class="hap-menu">{{lang.words.installation|title()}}</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
{% if '3' in user_services %}
|
||||||
|
<li><a href="{{ url_for('install.ha') }}" title="{{lang.menu_links.ha.title}}" class="keepalived head-submenu">HA {{lang.words.cluster}}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
<li><a href="{{ url_for('install.install_monitoring') }}#service" title="{{lang.words.servers|title()}}: {{lang.words.proxy|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu service installproxy head-submenu">{{lang.words.proxy|title()}} {{lang.words.services}}</a> </li>
|
||||||
|
<li><a href="{{ url_for('install.install_monitoring') }}#monitoring" title="{{lang.words.servers|title()}}: {{lang.words.monitoring|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu monitoring installmon head-submenu">{{lang.words.monitoring|title()}}</a> </li>
|
||||||
|
<li><a href="{{ url_for('install.install_monitoring') }}#geolite2" title="{{lang.words.installation|title()}} GeoLite2" class="hap-menu geolite2 installgeo head-submenu">GeoLite2</a> </li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="p_menu">
|
||||||
|
<a href="{{ url_for('main.servers') }}#users" title="{{lang.menu_links.servers.title}}" class="runtime">{{lang.menu_links.servers.link}}</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
<li><a href="{{ url_for('main.servers') }}#users" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu">{{lang.words.users|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.servers') }}#servers" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu">{{lang.words.servers|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.servers') }}#ssh" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu">SSH {{lang.words.creds|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.servers') }}#settings" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu">{{lang.words.settings|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('main.servers') }}#backup" title="{{lang.words.servers|title()}}: {{lang.words.backup|title()}} {{lang.words.configs2}}" class="backup head-submenu">{{lang.words.backup|title()}}</a> </li>
|
||||||
|
<li><a href="{{ url_for('logs.logs_internal') }}?type=2" title="{{lang.words.servers|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% if role <= 1 %}
|
||||||
|
<li class="p_menu" id="admin-area">
|
||||||
|
<a href="{{ url_for('admin.admin') }}#users" title="{{lang.menu_links.admin_area.title}}" class="admin">{{lang.menu_links.admin_area.link}}</a>
|
||||||
|
<ul class="v_menu">
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#users" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu" id="admin-area-users">{{lang.words.users|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#groups" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.groups3}}" class="group groups head-submenu" id="admin-area-groups">{{lang.words.groups|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#servers" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu" id="admin-area-servers">{{lang.words.servers|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#ssh" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu" id="admin-area-ssh">SSH {{lang.words.creds|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#settings" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu" id="admin-area-settings">{{lang.words.settings|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#tools" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.tools}}" class="services head-submenu" id="admin-area-services">{{lang.words.tools|title()}}</a></li>
|
||||||
|
<li><a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.admin_area|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu" id="admin-area-logs">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
|
||||||
|
<li><a href="{{ url_for('admin.admin') }}#updatehapwi" title="{{lang.words.admin_area|title()}}: {{lang.words.w_update|title()}} Roxy-WI" class="upload updatehapwi head-submenu" id="admin-area-update">{{lang.words.w_update|title()}}</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
<tr class="overviewHead" style="height: 30px;">
|
<tr class="overviewHead" style="height: 30px;">
|
||||||
<td class="padding10 first-collumn-wi" colspan="2">
|
<td class="padding10 first-collumn-wi" colspan="2">
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<a href="/app/internal/{{roxy_wi_log_id}}" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
<a href="/app/logs/internal" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
||||||
Roxy-WI {{lang.words.server_status}}
|
Roxy-WI {{lang.words.server_status}}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn-wi" colspan=2>
|
<td class="padding10 first-collumn-wi" colspan=2>
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<a href="admin#services" title="{{lang.words.view|title()}} {{lang.words.services}} {{lang.words.status}}" class="logs_link">
|
<a href="admin#tools" title="{{lang.words.view|title()}} {{lang.words.services}} {{lang.words.status}}" class="logs_link">
|
||||||
Roxy-WI {{lang.words.services_status}}
|
Roxy-WI {{lang.words.services_status}}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -205,50 +205,8 @@
|
||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if role <= 2 %}
|
{% if role <= 2 %}
|
||||||
<table class="overview-wi" id="overview-logs">
|
<script>ShowOverviewLogs();</script>
|
||||||
<tr class="overviewHead">
|
<table class="overview-wi" id="overview-logs"></table>
|
||||||
<td class="padding10 first-collumn-wi">
|
|
||||||
{% if role == 2 %}
|
|
||||||
<a href="/app/internal/{{roxy_wi_log_id}}?type=2" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
|
||||||
{% else %}
|
|
||||||
<a href="/app/internal/{{roxy_wi_log_id}}" title="{{lang.words.view|title()}} Roxy-WI {{lang.words.logs}}" class="logs_link">
|
|
||||||
{% endif %}
|
|
||||||
{{lang.words.recent|title()}} Roxy-WI {{lang.words.logs}}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if roxy_wi_log|length > 3 %}
|
|
||||||
<span class="add-button-wi">
|
|
||||||
<span id="show-all-haproxy-wi-log">
|
|
||||||
{{lang.words.show_all}}
|
|
||||||
</span>
|
|
||||||
<span id="hide-all-haproxy-wi-log" style="display: none;">
|
|
||||||
{{lang.words.hide|title()}} {{lang.words.logs}}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
{% set counter = 0 -%}
|
|
||||||
{% for log in roxy_wi_log %}
|
|
||||||
{% set counter = counter + loop.index0 %}
|
|
||||||
{% if counter <= 2 %}
|
|
||||||
<tr class="{{ loop.cycle('odd', 'even') }}">
|
|
||||||
<td class="padding10 first-collumn-wi" style="font-size: 12.5px;" colspan="2">
|
|
||||||
{{ log }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% else %}
|
|
||||||
<tr style="display: none;" class="show-haproxy-wi-log {{ loop.cycle('odd', 'even') }}">
|
|
||||||
<td class="padding10 first-collumn-wi" style="font-size: 12.5px" colspan="2">
|
|
||||||
{{ log }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if role <= 1 %}
|
{% if role <= 1 %}
|
||||||
<table class="overview-wi" id="overview-subs">
|
<table class="overview-wi" id="overview-subs">
|
||||||
|
@ -256,6 +214,11 @@
|
||||||
<td class="padding10 first-collumn-wi" colspan="2">
|
<td class="padding10 first-collumn-wi" colspan="2">
|
||||||
<a href="https://roxy-wi.org/cabinet" title="{{lang.words.personal|title()}} {{lang.words.cabinet}}" class="logs_link" target="_blank">{{lang.words.subs|title()}}</a>
|
<a href="https://roxy-wi.org/cabinet" title="{{lang.words.personal|title()}} {{lang.words.cabinet}}" class="logs_link" target="_blank">{{lang.words.subs|title()}}</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td style="padding-right: 10px;">
|
||||||
|
<a onclick="showSubOverview()" title="{{lang.words.refresh|title()}}" style="float: right;">
|
||||||
|
<span class="refresh"></span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tbody id="sub-table"></tbody>
|
<tbody id="sub-table"></tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=apache group=apache processes=1 threads=5
|
WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=apache group=apache processes=1 threads=5
|
||||||
WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi
|
WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi
|
||||||
|
|
||||||
WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=apache group=apache processes=5 threads=10
|
WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=apache group=apache processes=1 threads=10
|
||||||
WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi
|
WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi
|
||||||
|
|
||||||
<Directory /var/www/haproxy-wi/app/>
|
<Directory /var/www/haproxy-wi/app/>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=www-data group=www-data processes=1 threads=5
|
WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=www-data group=www-data processes=1 threads=5
|
||||||
WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi
|
WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi
|
||||||
|
|
||||||
WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=www-data group=www-data processes=5 threads=10
|
WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=www-data group=www-data processes=1 threads=10
|
||||||
WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi
|
WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi
|
||||||
|
|
||||||
<Directory /var/www/haproxy-wi/app/>
|
<Directory /var/www/haproxy-wi/app/>
|
||||||
|
|
|
@ -7,3 +7,9 @@ retry>=0.9.2
|
||||||
psutil>=5.9.1
|
psutil>=5.9.1
|
||||||
pika>=1.3.1
|
pika>=1.3.1
|
||||||
pdpyras>=4.5.2
|
pdpyras>=4.5.2
|
||||||
|
Flask-APScheduler>=1.12.4
|
||||||
|
python3-nmap<=1.5.1
|
||||||
|
aio-pika>=7.1.0
|
||||||
|
pika>=1.2.0
|
||||||
|
websockets>=9.0
|
||||||
|
retry>=0.9.2
|
||||||
|
|
|
@ -11,3 +11,9 @@ pika>=1.3.1
|
||||||
Flask>=2.0.3
|
Flask>=2.0.3
|
||||||
Flask-Login>=0.4.1
|
Flask-Login>=0.4.1
|
||||||
Flask-Caching>=1.10.1
|
Flask-Caching>=1.10.1
|
||||||
|
Flask-APScheduler>=1.12.4
|
||||||
|
python3-nmap<=1.5.1
|
||||||
|
aio-pika>=7.1.0
|
||||||
|
pika>=1.2.0
|
||||||
|
websockets>=9.0
|
||||||
|
retry>=0.9.2
|
||||||
|
|
|
@ -12,3 +12,9 @@ pika>=1.3.1
|
||||||
Flask>=2.0.3
|
Flask>=2.0.3
|
||||||
Flask-Login>=0.4.1
|
Flask-Login>=0.4.1
|
||||||
Flask-Caching>=1.10.1
|
Flask-Caching>=1.10.1
|
||||||
|
Flask-APScheduler>=1.12.4
|
||||||
|
python3-nmap<=1.5.1
|
||||||
|
aio-pika>=7.1.0
|
||||||
|
pika>=1.2.0
|
||||||
|
websockets>=9.0
|
||||||
|
retry>=0.9.2
|
||||||
|
|
|
@ -12,3 +12,9 @@ pika>=1.3.1
|
||||||
Flask>=2.0.3
|
Flask>=2.0.3
|
||||||
Flask-Login>=0.4.1
|
Flask-Login>=0.4.1
|
||||||
Flask-Caching>=1.10.1
|
Flask-Caching>=1.10.1
|
||||||
|
Flask-APScheduler>=1.12.4
|
||||||
|
python3-nmap<=1.5.1
|
||||||
|
aio-pika>=7.1.0
|
||||||
|
pika>=1.2.0
|
||||||
|
websockets>=9.0
|
||||||
|
retry>=0.9.2
|
||||||
|
|
|
@ -118,8 +118,6 @@ function showOverviewServer(name, ip, id, service) {
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
function ajaxActionServers(action, id, service) {
|
function ajaxActionServers(action, id, service) {
|
||||||
// var cur_url = window.location.href.split('/app/').pop();
|
|
||||||
// cur_url = cur_url.split('/');
|
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
url: "/app/service/action/" + service + "/" + id + "/" + action,
|
url: "/app/service/action/" + service + "/" + id + "/" + action,
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
|
@ -531,6 +529,9 @@ function serverSettingsSave(id, name, service, dialog_id) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function check_service_status(id, ip, service) {
|
function check_service_status(id, ip, service) {
|
||||||
|
if (sessionStorage.getItem('check-service') == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
NProgress.configure({showSpinner: false});
|
NProgress.configure({showSpinner: false});
|
||||||
if (service == 'keepalived') return false;
|
if (service == 'keepalived') return false;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -540,6 +541,9 @@ function check_service_status(id, ip, service) {
|
||||||
},
|
},
|
||||||
type: "POST",
|
type: "POST",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
|
if (data.indexOf('logout') != '-1') {
|
||||||
|
sessionStorage.setItem('check-service', 0)
|
||||||
|
}
|
||||||
data = data.replace(/\s+/g, ' ');
|
data = data.replace(/\s+/g, ' ');
|
||||||
if (cur_url[0] == 'service') {
|
if (cur_url[0] == 'service') {
|
||||||
if (data.indexOf('up') != '-1') {
|
if (data.indexOf('up') != '-1') {
|
||||||
|
@ -567,3 +571,22 @@ function check_service_status(id, ip, service) {
|
||||||
});
|
});
|
||||||
NProgress.configure({showSpinner: true});
|
NProgress.configure({showSpinner: true});
|
||||||
}
|
}
|
||||||
|
function ShowOverviewLogs() {
|
||||||
|
$.ajax( {
|
||||||
|
url: "/app/overview/logs",
|
||||||
|
type: "GET",
|
||||||
|
beforeSend: function() {
|
||||||
|
$("#overview-logs").html('<img class="loading_small_bin_bout" style="padding-left: 40%;padding-top: 40px;padding-bottom: 40px;" src="/app/static/images/loading.gif" />');
|
||||||
|
},
|
||||||
|
success: function( data ) {
|
||||||
|
data = data.replace(/\s+/g,' ');
|
||||||
|
if (data.indexOf('error:') != '-1') {
|
||||||
|
toastr.error(data);
|
||||||
|
} else {
|
||||||
|
$("#overview-logs").html(data);
|
||||||
|
$.getScript("/inc/fontawesome.min.js")
|
||||||
|
$.getScript("/inc/overview.js")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
|
@ -18,3 +18,4 @@ pika>=1.3.1
|
||||||
Flask>=2.0.3
|
Flask>=2.0.3
|
||||||
Flask-Login>=0.4.1
|
Flask-Login>=0.4.1
|
||||||
Flask-Caching>=1.10.1
|
Flask-Caching>=1.10.1
|
||||||
|
Flask-APScheduler>=1.12.4
|
||||||
|
|
Loading…
Reference in New Issue