{% extends layout %} {% import "macros.html" as m %} {% block content %}

Sources are declared in configuration, where the whole set is reviewable in one place. There is no page that creates one: a connector holds credentials and reaches into a remote system, and declaring one from a browser would make this surface a way to point the installation somewhere new.

{% if panels.connectors.ok %} {% if panels.connectors.data.connectors %} {% for item in panels.connectors.data.connectors %} {#- Aggregate counts only. A walk adapting to source latency reads as progress here rather than as a stalled run; nothing about which pages or spaces is surfaced. -#} {% endfor %}
NameTypeFull inventoryEnabledInstalledLast syncOutcomeRetryEnumerationStatusDocuments
{{ item.name }} {{ item.type }} {{ item.full_inventory_authority or '—' }} {{ 'yes' if item.enabled else 'no' }} {{ 'yes' if item.installed else 'no — the plugin is not installed' }} {{ item.last_synced_at or 'never' }} {{ item.last_outcome or '—' }} {{ 'yes' if item.retry_required else 'no' }} {%- if item.last_lifecycle and item.last_lifecycle.enumeration_failure_code -%} stopped: {{ item.last_lifecycle.enumeration_failure_code }} {%- elif item.last_lifecycle and item.last_lifecycle.enumeration_timeout_retries -%} {{ item.last_lifecycle.enumeration_timeout_retries }} timeout retr{{ 'y' if item.last_lifecycle.enumeration_timeout_retries == 1 else 'ies' }}, page size {{ item.last_lifecycle.enumeration_page_size or '—' }} {%- elif item.last_lifecycle and item.last_lifecycle.enumeration_reached_empty_page -%} reached explicit end {%- else -%}—{%- endif -%} {{ item.status or '—' }} {{ item.documents if item.documents is not none else '—' }}

{% else %}{{ m.empty('No connectors are configured.') }}{% endif %} {% else %}{{ m.failed(panels.connectors) }}{% endif %} {% endblock %}