Add group-based filtering for metrics queries in service and route layers

- Updated `select_metrics_enabled` to include `group_id` filtering.
- Refactored query logic to handle `group_id` constraints consistently across services.
- Integrated `group_id` parameter in route handlers for metrics APIs.
This commit is contained in:
Aidaho
2025-11-20 12:02:31 +03:00
parent 1dde59e237
commit b45584d734
2 changed files with 5 additions and 9 deletions

View File

@@ -131,14 +131,14 @@ def select_servers_metrics_for_master(group_id: int):
out_error(e)
def select_metrics_enabled(service: Literal['haproxy', 'nginx', 'apache']):
def select_metrics_enabled(service: Literal['haproxy', 'nginx', 'apache'], group_id: int):
query_where = {
'haproxy': ((Server.haproxy_metrics == 1) & (Server.haproxy == 1)),
'nginx': ((Server.nginx_metrics == 1) & (Server.nginx == 1)),
'apache': ((Server.apache_metrics == 1) & (Server.apache == 1)),
}
try:
return Server.select(Server.ip).where(query_where[service] & (Server.enabled == 1)).execute()
return Server.select(Server.ip).where(query_where[service] & (Server.enabled == 1) & (Server.group_id == group_id)).execute()
except Exception as e:
out_error(e)
@@ -156,13 +156,10 @@ def select_table_metrics(group_id):
# Get servers with haproxy metrics enabled
server_query = Server.select(Server.ip, Server.hostname).where(
(Server.haproxy_metrics == 1) &
(Server.enabled == 1)
(Server.enabled == 1) &
(Server.group_id == group_id)
)
# Apply group filter if not admin group
if group_id != 1:
server_query = server_query.where(Server.group_id == group_id)
# Get list of server IPs
servers = list(server_query.execute())
if not servers:

View File

@@ -48,14 +48,13 @@ def metrics(service):
servers = ''
else:
services = '1'
servers = metric_sql.select_metrics_enabled(service)
servers = metric_sql.select_metrics_enabled(service, g.user_params['group_id'])
else:
servers = ''
except Exception as e:
return f'error: on Metrics page: {e}', 500
kwargs = {
'autorefresh': 1,
'servers': servers,
'service': service,
'services': services,