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
Aidaho 2025-07-11 10:06:50 +03:00
parent 073a86be80
commit f08a049d72
3 changed files with 19 additions and 13 deletions

View File

@ -59,8 +59,7 @@ def select_metrics(serv, service, **kwargs):
query = model.select().where(model.serv == serv)
# Add time-based filtering
from datetime import datetime, timedelta
now = datetime.now()
now = datetime.utcnow()
if time_range == '1':
# Last 1 minute
@ -83,7 +82,6 @@ def select_metrics(serv, service, **kwargs):
# Order by date
query = query.order_by(model.date.asc())
# 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"
if mysql_enable == '1' and time_range not in ('1', '30'):

View File

@ -178,24 +178,31 @@ def overview_backends(server_ip: str, service: str) -> Union[str, dict]:
if service not in ('nginx', 'apache'):
format_file = config_common.get_file_format(service)
config_dir = config_common.get_config_dir(service)
cfg = config_common.generate_config_path(service, server_ip)
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:
cfg = config_common.generate_config_path(service, server_ip)
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
try:
config_mod.get_config(server_ip, cfg, service=service)
except Exception as e:
raise e
raise Exception('Cannot get config file: ' + str(e))
try:
sections = section_mod.get_sections(cfg, service=service)
except Exception as e:
raise e
raise Exception(f'Cannot get sections: {e}')
else:
sections = {}
sections_not_formated = section_mod.get_remote_sections(server_ip, service)
try:
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'):
if section == '\n':
continue

View File

@ -169,10 +169,11 @@ class ServerView(MethodView):
description: Server creation successful
"""
group = SupportClass.return_group_id(body)
server_ip = str(body.ip)
kwargs = {
'hostname': body.hostname,
'ip': str(body.ip),
'ip': server_ip,
'group_id': group,
'type_ip': body.type_ip,
'enabled': body.enabled,
@ -191,11 +192,11 @@ class ServerView(MethodView):
except Exception as e:
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:
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:
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:
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()
kwargs = {
'groups': group_sql.select_groups(),
'servers': server_sql.select_servers(server=body.ip),
'servers': server_sql.select_servers(server=server_ip),
'lang': lang,
'masters': server_sql.select_servers(get_master_servers=1),
'sshs': cred_sql.select_ssh(group=group),