{{ _('Chargepoint Monitoring Dashboard') }}

{{ _('Availability') }}
{{ summary.availability_pct }}%
{{ _('Longest connection duration') }}
{{ summary.longest.duration }}
{{ summary.longest.station_id or '-' }}
{{ _('Shortest connection duration') }}
{{ summary.shortest.duration }}
{{ summary.shortest.station_id or '-' }}

{{ _('OCPP Broker Endpoint:') }} {{ PROXY_BASE_WS }} | {{ _('Broker status:') }} {% if broker_status.reachable %} {{ _('Reachable') }} {% else %} {{ _('Not reachable') }} {% if broker_status.error %}
{{ broker_status.error }}{% endif %} {% endif %}

{{ _('Broker API Endpoint:') }} {{ PROXY_BASE_URL }} | {{ _('API status:') }} {% if broker_status.api_reachable %} {{ _('Reachable') }} {% else %} {{ _('Not reachable') }} {% if broker_status.api_error %}
{{ broker_status.api_error }}{% endif %} {% endif %}

{% set conn_metrics = broker_status.connection_metrics or {} %} {% set conn_total = conn_metrics.get('total') or {} %}

{{ _('Connection stats:') }} {% if conn_total %} {{ _('Success rate') }}: {% if conn_total.success_rate is not none %}{{ (conn_total.success_rate * 100) | round(1) }}%{% else %}-{% endif %} | {{ _('Average RTT') }}: {% if conn_total.avg_rtt_ms is not none %}{{ conn_total.avg_rtt_ms | round(1) }} ms{% else %}-{% endif %} | {{ _('p95 RTT') }}: {% if conn_total.p95_rtt_ms is not none %}{{ conn_total.p95_rtt_ms | round(1) }} ms{% else %}-{% endif %} | {{ _('Uptime') }}: {% if conn_total.uptime_ratio is not none %}{{ (conn_total.uptime_ratio * 100) | round(1) }}%{% else %}-{% endif %} {% else %} {{ _('Not available') }} {% if broker_status.connection_error %}
{{ broker_status.connection_error }}{% endif %} {% endif %}

{% set warnings = broker_status.connection_warnings or [] %} {% if warnings %}

{{ _('Connection quality warnings:') }}

{% endif %} {% set reconnect_warnings = broker_status.reconnect_warnings or [] %} {% if reconnect_warnings %}

{{ _('Reconnect warnings:') }}

{% endif %} {% set db_metrics = broker_status.db_pool_metrics or {} %} {% set db_warnings = broker_status.db_pool_warnings or [] %}

{{ _('DB pool:') }} {% if db_metrics %} {{ _('size') }}: {{ db_metrics.size if db_metrics.size is not none else '-' }} | {{ _('free') }}: {{ db_metrics.freesize if db_metrics.freesize is not none else '-' }} | {{ _('in use') }}: {{ db_metrics.in_use if db_metrics.in_use is not none else '-' }} | {{ _('waiting') }}: {{ db_metrics.waiting if db_metrics.waiting is not none else '-' }} | {{ _('avg acquire') }}: {% if db_metrics.latency_avg_ms is not none %}{{ db_metrics.latency_avg_ms | round(1) }} ms{% else %}-{% endif %} | {{ _('p95 acquire') }}: {% if db_metrics.latency_p95_ms is not none %}{{ db_metrics.latency_p95_ms | round(1) }} ms{% else %}-{% endif %} {% else %} {{ _('Not available') }} {% if broker_status.db_pool_error %}
{{ broker_status.db_pool_error }}{% endif %} {% endif %}

{% if db_warnings %}

{{ _('Database pool warnings:') }}

{% endif %} {% set log_queue_metrics = broker_status.ocpp_log_queue_metrics or {} %} {% set log_queue_warnings = broker_status.ocpp_log_queue_warnings or [] %}

{{ _('OCPP log queue:') }} {% if log_queue_metrics %} {{ _('size') }}: {{ log_queue_metrics.size if log_queue_metrics.size is not none else '-' }} | {{ _('capacity') }}: {{ log_queue_metrics.maxsize if log_queue_metrics.maxsize is not none else '-' }} | {{ _('remaining') }}: {{ log_queue_metrics.remaining_capacity if log_queue_metrics.remaining_capacity is not none else '-' }} | {{ _('fill') }}: {% if log_queue_metrics.fill_ratio is not none %}{{ (log_queue_metrics.fill_ratio * 100) | round(1) }}%{% else %}-{% endif %} | {{ _('drops') }}: {{ log_queue_metrics.drop_count if log_queue_metrics.drop_count is not none else 0 }} | {{ _('recent drops') }}: {{ log_queue_metrics.recent_drop_count if log_queue_metrics.recent_drop_count is not none else 0 }} {% if log_queue_metrics.last_drop_display %} | {{ _('last drop') }}: {{ log_queue_metrics.last_drop_display }} {% elif log_queue_metrics.last_drop_at %} | {{ _('last drop') }}: {{ log_queue_metrics.last_drop_at }} {% endif %} {% else %} {{ _('Not available') }} {% if broker_status.ocpp_log_queue_error %}
{{ broker_status.ocpp_log_queue_error }}{% endif %} {% endif %}

{% if log_queue_warnings %}

{{ _('OCPP log queue warnings:') }}

{% endif %}

{% if marked_wallboxes %}
{{ _('Marked Wallboxes') }}

{{ _('Entries from manual checks and automatic fault detection.') }}

{% for mark in marked_wallboxes %} {% if mark.source_url %} {% set source_url = mark.source_url %} {% elif mark.station_id %} {% set source_url = '/' + (mark.station_id | trim('/')) %} {% else %} {% set source_url = None %} {% endif %} {% set details_source = (mark.station_id or source_url or '').strip('/') %} {% set details_source = details_source.split('/')[-1] %} {% endfor %}
{{ _('Wallbox') }} {{ _('Reason') }} {{ _('Source') }} {{ _('Target') }} {{ _('Marked') }} {{ _('Error history') }} {{ _('OCPP log') }} {{ _('View config') }} {{ _('Service') }} {{ _('Action') }}
{{ mark.station_id }} {{ mark.reason }} {% if mark.source == 'fault_detection' %} {{ _('Fault detection') }} {% else %} {{ _('Manual') }} {% endif %} {{ mark.target or '-' }} {% set ts = mark.marked_at %} {% if ts %}{{ ts }}{% else %}-{% endif %} {% if mark.station_id %} {% else %}-{% endif %} {% if details_source %} {% else %}-{% endif %} {% if source_url %} {% else %}-{% endif %} {% if not mark.service_requested_at %} {% else %} {% set service_title = mark.service_requested_at and _('Service request sent on {timestamp}', timestamp=mark.service_requested_at) or _('Service request sent') %} {% endif %}
{% endif %}
{% for row in rows %} {% set station_id = row.source_url.split('/')[-1] %} {% set normalized_station_id = station_normalized_lookup.get(station_id, station_id) %} {% set station_anchor = station_card_anchors.get(normalized_station_id, station_card_anchors.get(station_id)) %} {% if not station_anchor %} {% set sanitized_station_id = station_id|replace('/', '-')|replace(' ', '-')|replace(':', '-') %} {% set station_anchor = 'station-card-' ~ sanitized_station_id %} {% endif %} {% set normalized_source = row.source_url.lstrip('/') %} {% set alt_source = '/' ~ normalized_source %} {% set is_connected = normalized_source in durations or alt_source in durations or normalized_station_id in durations %} {% set last_connected_raw = row.last_connected %} {% set last_connected_str = last_connected_raw|string %} {% set has_last_connected = last_connected_raw is not none and last_connected_str|trim|lower != 'none' %} {% if is_connected %} {% set indicator_state = 'status-indicator--online' %} {% set indicator_label = _('Connected') %} {% elif has_last_connected %} {% set indicator_state = 'status-indicator--offline' %} {% set indicator_label = _('Disconnected') %} {% else %} {% set indicator_state = 'status-indicator--unknown' %} {% set indicator_label = _('Never connected') %} {% endif %} {%- set q = qualities.get(row.source_url.lstrip('/'), qualities.get('/' ~ row.source_url.lstrip('/'), qualities.get(normalized_station_id))) -%} {% set highlight_active = (normalized_station_id in highlighted_station_ids) or (station_id in highlighted_station_ids) %}
{{ station_id }} {% if row.comment %} – {{ row.comment }} {% endif %} {% if row.location_link %} {% endif %}
{{ indicator_label }} {% set charge_state = station_charge_states.get(normalized_station_id) or station_charge_states.get(station_id) or station_charge_states.get(row.source_url.lstrip('/')) or station_charge_states.get(row.source_url) %} {% if charge_state and charge_state.key != 'unknown' %} {{ charge_state.label }} {% endif %} {% set ocpp_version = ocpp_versions.get(normalized_station_id) or ocpp_versions.get(station_id) or ocpp_versions.get(normalized_source) or ocpp_versions.get(row.source_url) or ocpp_versions.get('/' ~ normalized_source) %} {% if not ocpp_version %} {% set ocpp_version = 'Auto' %} {% endif %} OCPP {{ ocpp_version }} {% if row.activity == 'block' %} {{ _('Block') }} {% else %} {{ _('Allow') }} {% endif %}
{% if row.webui_remote_access_url %} {{ _('WebUI Remote') }} {% endif %} {% if row.load_management_remote_access_url %} {{ _('Load Management') }} {% endif %}
{{ _('Connected') }} {{ durations.get(row.source_url.lstrip('/'), durations.get('/' ~ row.source_url.lstrip('/'), durations.get(normalized_station_id, '00:00:00'))) }}
{{ _('Quality') }} {%- if q is not none -%}{{ q }}%{%- else -%}-{% endif %}
{{ _('Reconnect counter') }} {{ row.reconnect_count }}
{{ _('Target WS URL') }} {% if row.ws_url %}{{ row.ws_url }}{% else %}-{% endif %}
{{ _('Last connected') }} {% if has_last_connected %}{{ last_connected_str }}{% else %}-{% endif %}
{% endfor %}
{{ _('No charge point selected (max. {limit})', limit=max_compare_wallboxes) }}