{% extends "base.html" %} {% from "_macros.html" import no_data with context %} {% block title %}Trends{% endblock %} {% macro forecast_cell(fc) -%} {% if fc.soon %}⚠ {{ fc.text }} {% elif fc.status == 'growing' %}{{ fc.text }} {% elif fc.status == 'stable' %}{{ fc.text }} {% else %}{{ fc.text }}{% endif %} {% if fc.confidence_note %}
{{ fc.confidence_note }}
{% endif %} {%- endmacro %} {% block content %}

Trends

{% if not snap %} {{ no_data() }} {% else %}
Used IPs (idle ENIs included) per successful snapshot in the window: {{ data.snapshots }} snapshot(s). The forecast is a linear regression over the window: "full in ~N days" while usage grows toward the limit (usable addresses), else "stable/declining". Fewer than {{ min_points }} points give a low-confidence forecast. Set a scheduled refresh in Settings to collect history.
{% for v in data.vpcs if not vpc or v.key == vpc %}

{{ v.key }} {{ v.name }} · {{ v.cidr }} · {{ v.latest }} of {{ v.capacity }} usable subnet IPs used

{{ chart(v) }}
VPC forecast: {{ forecast_cell(v.forecast) }} {% if v.forecast.status in ('growing', 'stable') %}
trend {{ '%+.2f' % v.forecast.slope_per_day }} IPs/day
{% endif %}
Limit: the usable addresses of its current subnets.
{% for s in data.subnets[v.key] %} {% else %} {% endfor %}
SubnetNameCIDRHistoryUsed / limitTrend (IPs/day)Forecast
{{ s.key }} {{ s.name }} {{ s.cidr }} {{ chart(s, width=180, height=40, compact=true) }} {{ s.latest }} / {{ s.capacity }} {% if s.forecast.status in ('growing', 'stable') %}{{ '%+.2f' % s.forecast.slope_per_day }}{% else %}–{% endif %} {{ forecast_cell(s.forecast) }}
No subnets
VPC data points ({{ v.points | length }}) {% for t, n in v.points %}{% endfor %}
Snapshot takenUsed IPs
{{ t | localtime }}{{ n }}
{% else %}
No successful snapshots in the last {{ windows[window] }}.
{% endfor %} {% endif %} {% endblock %}