mirror of https://github.com/Aidaho12/haproxy-wi
v8.2.1: Refactor server IP handling, update metric timestamp logic, and improve service configuration error handling
- Extracted `server_ip` for consistent use across server creation workflows. - Replaced `datetime.now()` with `datetime.utcnow()` for metric timestamp standardization. - Enhanced exception handling and logging in service configuration to improve debuggability.master
parent
073a86be80
commit
f08a049d72
|
@ -59,8 +59,7 @@ def select_metrics(serv, service, **kwargs):
|
||||||
query = model.select().where(model.serv == serv)
|
query = model.select().where(model.serv == serv)
|
||||||
|
|
||||||
# Add time-based filtering
|
# Add time-based filtering
|
||||||
from datetime import datetime, timedelta
|
now = datetime.utcnow()
|
||||||
now = datetime.now()
|
|
||||||
|
|
||||||
if time_range == '1':
|
if time_range == '1':
|
||||||
# Last 1 minute
|
# Last 1 minute
|
||||||
|
@ -83,7 +82,6 @@ def select_metrics(serv, service, **kwargs):
|
||||||
|
|
||||||
# Order by date
|
# Order by date
|
||||||
query = query.order_by(model.date.asc())
|
query = query.order_by(model.date.asc())
|
||||||
|
|
||||||
# For longer time ranges, we can sample the data to reduce the number of points
|
# For longer time ranges, we can sample the data to reduce the number of points
|
||||||
# This is similar to the original SQL's "group by `date` div X" or "rowid % X = 0"
|
# This is similar to the original SQL's "group by `date` div X" or "rowid % X = 0"
|
||||||
if mysql_enable == '1' and time_range not in ('1', '30'):
|
if mysql_enable == '1' and time_range not in ('1', '30'):
|
||||||
|
|
|
@ -178,24 +178,31 @@ def overview_backends(server_ip: str, service: str) -> Union[str, dict]:
|
||||||
if service not in ('nginx', 'apache'):
|
if service not in ('nginx', 'apache'):
|
||||||
format_file = config_common.get_file_format(service)
|
format_file = config_common.get_file_format(service)
|
||||||
config_dir = config_common.get_config_dir(service)
|
config_dir = config_common.get_config_dir(service)
|
||||||
cfg = config_common.generate_config_path(service, server_ip)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sections = section_mod.get_sections(config_dir + roxywi_common.get_files(config_dir, format_file)[0], service=service)
|
config_file = roxywi_common.get_files(config_dir, format_file, server_ip)
|
||||||
|
if len(config_file) == 0:
|
||||||
|
raise 'there is no config file'
|
||||||
|
sections = section_mod.get_sections(config_dir + config_file[0], service=service)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
cfg = config_common.generate_config_path(service, server_ip)
|
||||||
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
|
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
config_mod.get_config(server_ip, cfg, service=service)
|
config_mod.get_config(server_ip, cfg, service=service)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise e
|
raise Exception('Cannot get config file: ' + str(e))
|
||||||
try:
|
try:
|
||||||
sections = section_mod.get_sections(cfg, service=service)
|
sections = section_mod.get_sections(cfg, service=service)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise e
|
raise Exception(f'Cannot get sections: {e}')
|
||||||
else:
|
else:
|
||||||
sections = {}
|
sections = {}
|
||||||
|
try:
|
||||||
sections_not_formated = section_mod.get_remote_sections(server_ip, service)
|
sections_not_formated = section_mod.get_remote_sections(server_ip, service)
|
||||||
|
except Exception as e:
|
||||||
|
raise Exception(f'Cannot format backends: {e}')
|
||||||
|
|
||||||
for section in sections_not_formated.split('\r'):
|
for section in sections_not_formated.split('\r'):
|
||||||
if section == '\n':
|
if section == '\n':
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -169,10 +169,11 @@ class ServerView(MethodView):
|
||||||
description: Server creation successful
|
description: Server creation successful
|
||||||
"""
|
"""
|
||||||
group = SupportClass.return_group_id(body)
|
group = SupportClass.return_group_id(body)
|
||||||
|
server_ip = str(body.ip)
|
||||||
|
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'hostname': body.hostname,
|
'hostname': body.hostname,
|
||||||
'ip': str(body.ip),
|
'ip': server_ip,
|
||||||
'group_id': group,
|
'group_id': group,
|
||||||
'type_ip': body.type_ip,
|
'type_ip': body.type_ip,
|
||||||
'enabled': body.enabled,
|
'enabled': body.enabled,
|
||||||
|
@ -191,11 +192,11 @@ class ServerView(MethodView):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return roxywi_common.handler_exceptions_for_json_data(e, 'Cannot create a server')
|
return roxywi_common.handler_exceptions_for_json_data(e, 'Cannot create a server')
|
||||||
|
|
||||||
roxywi_common.logging(body.ip, f'A new server {body.hostname} has been created', login=1, keep_history=1, service='server')
|
roxywi_common.logging(server_ip, f'A new server {body.hostname} has been created', login=1, keep_history=1, service='server')
|
||||||
try:
|
try:
|
||||||
server_mod.update_server_after_creating(body.hostname, str(body.ip))
|
server_mod.update_server_after_creating(body.hostname, server_ip)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.logging(body.ip, f'Cannot get system info from {body.hostname}: {e}', login=1, keep_history=1, service='server', mes_type='error')
|
roxywi_common.logging(server_ip, f'Cannot get system info from {body.hostname}: {e}', login=1, keep_history=1, service='server', mes_type='error')
|
||||||
|
|
||||||
if self.is_api:
|
if self.is_api:
|
||||||
return IdResponse(id=last_id).model_dump(mode='json'), 201
|
return IdResponse(id=last_id).model_dump(mode='json'), 201
|
||||||
|
@ -207,7 +208,7 @@ class ServerView(MethodView):
|
||||||
lang = roxywi_common.get_user_lang_for_flask()
|
lang = roxywi_common.get_user_lang_for_flask()
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'groups': group_sql.select_groups(),
|
'groups': group_sql.select_groups(),
|
||||||
'servers': server_sql.select_servers(server=body.ip),
|
'servers': server_sql.select_servers(server=server_ip),
|
||||||
'lang': lang,
|
'lang': lang,
|
||||||
'masters': server_sql.select_servers(get_master_servers=1),
|
'masters': server_sql.select_servers(get_master_servers=1),
|
||||||
'sshs': cred_sql.select_ssh(group=group),
|
'sshs': cred_sql.select_ssh(group=group),
|
||||||
|
|
Loading…
Reference in New Issue