diff --git a/app.py b/app.py index c749956..fd307a4 100644 --- a/app.py +++ b/app.py @@ -345,22 +345,35 @@ def bgp_peer_history_data(neighbor_ip): start_date_str = request.args.get('start_date') end_date_str = request.args.get('end_date') + aggregation_interval_minutes = 10 + if start_date_str and end_date_str: start_date = datetime.fromisoformat(start_date_str) end_date = datetime.fromisoformat(end_date_str) + + duration_days = (end_date - start_date).total_seconds() / 86400 + if duration_days > 30: + aggregation_interval_minutes = 120 + elif duration_days > 7: + aggregation_interval_minutes = 60 + elif duration_days > 2: + aggregation_interval_minutes = 30 else: time_range = request.args.get('range', '24h') end_date = datetime.utcnow() if time_range == '7d': start_date = end_date - timedelta(days=7) + aggregation_interval_minutes = 30 elif time_range == '30d': start_date = end_date - timedelta(days=30) + aggregation_interval_minutes = 60 elif time_range == '90d': start_date = end_date - timedelta(days=90) + aggregation_interval_minutes = 120 else: start_date = end_date - timedelta(hours=24) - history_data = get_peer_history(neighbor_ip, start_date.isoformat(), end_date.isoformat()) + history_data = get_peer_history(neighbor_ip, start_date.isoformat(), end_date.isoformat(), aggregation_interval_minutes) labels = [item['timestamp'] for item in history_data] received_data = [item['prefixes_received'] for item in history_data] @@ -382,22 +395,35 @@ def total_routes_history_data(): start_date_str = request.args.get('start_date') end_date_str = request.args.get('end_date') + aggregation_interval_minutes = 10 + if start_date_str and end_date_str: start_date = datetime.fromisoformat(start_date_str) end_date = datetime.fromisoformat(end_date_str) + + duration_days = (end_date - start_date).total_seconds() / 86400 + if duration_days > 30: + aggregation_interval_minutes = 120 + elif duration_days > 7: + aggregation_interval_minutes = 60 + elif duration_days > 2: + aggregation_interval_minutes = 30 else: time_range = request.args.get('range', '24h') end_date = datetime.utcnow() if time_range == '7d': start_date = end_date - timedelta(days=7) + aggregation_interval_minutes = 30 elif time_range == '30d': start_date = end_date - timedelta(days=30) + aggregation_interval_minutes = 60 elif time_range == '90d': start_date = end_date - timedelta(days=90) - else: # Default to 24h + aggregation_interval_minutes = 120 + else: start_date = end_date - timedelta(hours=24) - history_data = get_total_routes_history(start_date.isoformat(), end_date.isoformat()) + history_data = get_total_routes_history(start_date.isoformat(), end_date.isoformat(), aggregation_interval_minutes) response_data = { "labels": sorted(list(set([item['timestamp'] for item in history_data]))),