mirror of
https://github.com/WGDashboard/WGDashboard-PRW.git
synced 2026-08-04 15:02:59 +00:00
feat: configurable loglevel
This commit is contained in:
+5
-3
@@ -7,19 +7,21 @@ peer_mtu = 1420
|
|||||||
peer_keep_alive = 21
|
peer_keep_alive = 21
|
||||||
|
|
||||||
[Server]
|
[Server]
|
||||||
app_port = 10086
|
hostname = 0.0.0.0
|
||||||
|
port = 10086
|
||||||
|
debug_enabled = true
|
||||||
wg_conf_path = /etc/wireguard
|
wg_conf_path = /etc/wireguard
|
||||||
awg_conf_path = /etc/amnezia/amneziawg
|
awg_conf_path = /etc/amnezia/amneziawg
|
||||||
app_prefix =
|
app_prefix =
|
||||||
app_ip = 0.0.0.0
|
|
||||||
auth_req = true
|
auth_req = true
|
||||||
version = v4.3.2
|
version = v5.0.0
|
||||||
dashboard_refresh_interval = 60000
|
dashboard_refresh_interval = 60000
|
||||||
dashboard_peer_list_display = grid
|
dashboard_peer_list_display = grid
|
||||||
dashboard_sort = status
|
dashboard_sort = status
|
||||||
dashboard_theme = dark
|
dashboard_theme = dark
|
||||||
wgdashboard_apikey = false
|
wgdashboard_apikey = false
|
||||||
dashboard_language = en-US
|
dashboard_language = en-US
|
||||||
|
log_level = DEBUG
|
||||||
|
|
||||||
[Account]
|
[Account]
|
||||||
username = admin
|
username = admin
|
||||||
|
|||||||
+21
-4
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/env python3
|
#!/bin/env python3
|
||||||
|
|
||||||
import logging as log
|
import logging as log
|
||||||
|
from logging.config import dictConfig
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
import json
|
import json
|
||||||
@@ -8,29 +9,45 @@ import os
|
|||||||
|
|
||||||
from modules.config.reader import reader
|
from modules.config.reader import reader
|
||||||
from modules.database.database import database
|
from modules.database.database import database
|
||||||
|
|
||||||
from modules.utilities.utilities import utilities as util
|
from modules.utilities.utilities import utilities as util
|
||||||
|
from modules.utilities.logger import setup_logger
|
||||||
|
|
||||||
from modules.routes.routes import routes
|
from modules.routes.routes import routes
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
log.basicConfig(level=log.DEBUG)
|
# Read the config file (ini)
|
||||||
|
|
||||||
ok, config_contents = reader.read_config()
|
ok, config_contents = reader.read_config()
|
||||||
if not ok:
|
if not ok:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
found, config_server = util.filter_config(config_contents, 'SERVER')
|
||||||
|
|
||||||
|
# Configure the loglevel of WGDashboard
|
||||||
|
wanted_loglevel = config_server.get('log_level', 'DEBUG').upper()
|
||||||
|
setup_logger(wanted_loglevel)
|
||||||
|
|
||||||
|
# Get the database configuration from thee config
|
||||||
found, config_database = util.filter_config(config_contents, 'DATABASE')
|
found, config_database = util.filter_config(config_contents, 'DATABASE')
|
||||||
if not found:
|
if not found:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
# Make the engine and create the infrastructure
|
||||||
ok, engine, session = database.create_session(config_database)
|
ok, engine, session = database.create_session(config_database)
|
||||||
ok = database.ensure_contents(engine)
|
ok = database.ensure_contents(engine)
|
||||||
|
|
||||||
|
# Configure the Flask app
|
||||||
app = flask.Flask("WGDashboard", template_folder=os.path.abspath("./static/dist/WGDashboardAdmin"))
|
app = flask.Flask("WGDashboard", template_folder=os.path.abspath("./static/dist/WGDashboardAdmin"))
|
||||||
app.register_blueprint(routes)
|
app.register_blueprint(routes)
|
||||||
|
|
||||||
app.wgdashboard_config = config_contents
|
app.wgd_config = config_contents
|
||||||
app.engine = engine
|
app.engine = engine
|
||||||
app.db_session = session
|
app.db_session = session
|
||||||
|
|
||||||
app.run(debug=True, use_reloader=False)
|
debug_enabled = config_server.get('debug_enabled', False)
|
||||||
|
hostname = config_server.get('hostname', '0.0.0.0')
|
||||||
|
port = config_server.get('port', '10086')
|
||||||
|
app.run(
|
||||||
|
debug=debug_enabled,
|
||||||
|
host=hostname,
|
||||||
|
port=port,
|
||||||
|
use_reloader=False)
|
||||||
@@ -19,20 +19,14 @@ class checks():
|
|||||||
]
|
]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.debug('searching predefined locations for the config file, takes first one.')
|
|
||||||
|
|
||||||
for path in possible_config_locations:
|
for path in possible_config_locations:
|
||||||
log.debug(f'testing path: {path}')
|
|
||||||
|
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
log.debug(f'found a file at: {path}')
|
|
||||||
return True, path
|
return True, path
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
return False, ''
|
return False, ''
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.error(f'error occured while searching for the config file: {err}')
|
|
||||||
return False, ''
|
return False, ''
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -43,19 +37,13 @@ class checks():
|
|||||||
config = cp.ConfigParser()
|
config = cp.ConfigParser()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log.debug('looking through the given config file')
|
|
||||||
|
|
||||||
config.read(config_path)
|
config.read(config_path)
|
||||||
|
|
||||||
if len(config.sections()) == 0:
|
if len(config.sections()) == 0:
|
||||||
log.error('empty config, no sections')
|
|
||||||
return False, {}
|
return False, {}
|
||||||
|
|
||||||
for section in config.sections():
|
for section in config.sections():
|
||||||
log.debug(f'checking integrity of section: {section}')
|
|
||||||
|
|
||||||
if len(config.items(section)) == 0:
|
if len(config.items(section)) == 0:
|
||||||
log.warn(f'empty section: {section}, removing at runtime due to irrelevance')
|
|
||||||
config.remove_section(section)
|
config.remove_section(section)
|
||||||
|
|
||||||
config_dict = {}
|
config_dict = {}
|
||||||
@@ -66,9 +54,7 @@ class checks():
|
|||||||
return True, config_dict
|
return True, config_dict
|
||||||
|
|
||||||
except cp.ParsingError as err:
|
except cp.ParsingError as err:
|
||||||
log.error(f'error parsing the ini config file: {err}')
|
|
||||||
return False, {}
|
return False, {}
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.error(f'error occured while looking through the config file: {err}')
|
|
||||||
return False, {}
|
return False, {}
|
||||||
@@ -4,10 +4,9 @@ import flask
|
|||||||
|
|
||||||
def make_resp_obj(success: bool = True, message: str = "", data: dict = {}, http_code: int = 200) -> flask.wrappers.Response:
|
def make_resp_obj(success: bool = True, message: str = "", data: dict = {}, http_code: int = 200) -> flask.wrappers.Response:
|
||||||
response = flask.make_response({
|
response = flask.make_response({
|
||||||
"status": success,
|
|
||||||
"message": message,
|
"message": message,
|
||||||
|
"status": success,
|
||||||
"data": data
|
"data": data
|
||||||
}, http_code
|
}, http_code)
|
||||||
)
|
|
||||||
|
|
||||||
return response
|
return response
|
||||||
@@ -13,7 +13,7 @@ def auth_required():
|
|||||||
if flask.request.method.lower() == "options":
|
if flask.request.method.lower() == "options":
|
||||||
return make_resp_obj(True, "", flask.jsonify({"status": True}), 200)
|
return make_resp_obj(True, "", flask.jsonify({"status": True}), 200)
|
||||||
|
|
||||||
ok, config_server = utilities.filter_config(flask.current_app.wgdashboard_config, 'SERVER')
|
ok, config_server = utilities.filter_config(flask.current_app.wgd_config, 'SERVER')
|
||||||
if not ok:
|
if not ok:
|
||||||
return make_resp_obj(False, "Internal Error", {}, 500)
|
return make_resp_obj(False, "Internal Error", {}, 500)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/env python3
|
||||||
|
|
||||||
|
from logging.config import dictConfig
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setup_logger(level: str = 'DEBUG') -> None:
|
||||||
|
dictConfig({
|
||||||
|
'version': 1,
|
||||||
|
'formatters': {
|
||||||
|
'default': {
|
||||||
|
'format': '[%(asctime)s] [%(levelname)s] in [%(module)s] %(message)s'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'console': {
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'default',
|
||||||
|
'level': level
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'root': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': level
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
'werkzeug': { # make werkzeug logs match
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': level,
|
||||||
|
'propagate': False
|
||||||
|
},
|
||||||
|
'flask.app': { # make Flask internal logs match
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': level,
|
||||||
|
'propagate': False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -35,5 +35,3 @@ class utilities():
|
|||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.critical('failed to create directory')
|
log.critical('failed to create directory')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user