{{ _('OCPI Sync Overview') }}

{{ _('Review the last pull/push attempts per module and retry failed exports.') }}

{% if error %} {% endif %}
{{ _('OCPI payload tester') }}

{{ _('Upload OCPI data, validate per version, and optionally push it. Enable the dry-run switch to avoid persisting changes.') }}

{{ _('Sync status') }}
{{ _('Last pull') }}/{{ _('Last push') }} / {{ _('Last retry') }}
{% set module_labels = {"locations": _("Locations"), "tariffs": _("Tariffs"), "tokens": _("Tokens"), "sessions": _("Sessions"), "cdrs": _("CDRs")} %} {% for entry in summary %} {% endfor %}
{{ _('Module') }} {{ _('Last pull') }} {{ _('Last push') }} {{ _('Last retry') }}
{{ module_labels.get(entry.module, entry.module|capitalize) }} {{ render_run(entry.pull) }} {{ render_run(entry.push) }} {{ render_run(entry.retry) }}
{{ _('Sync logs') }}
{{ _('Recent scheduler results') }}
{% set direction_labels = {"pull": _("Pull"), "push": _("Push"), "retry": _("Replay")} %} {% if logs %} {% for entry in logs %} {% endfor %} {% else %} {% endif %}
{{ _('Module') }} {{ _('Direction') }} {{ _('Job') }} {{ _('Backend') }} {{ _('Result') }} {{ _('Duration') }} {{ _('Status code') }} {{ _('Response') }} {{ _('Created') }}
{{ module_labels.get(entry.module, entry.module|capitalize) }} {{ direction_labels.get(entry.direction, entry.direction|capitalize) }} {{ entry.job_name or '—' }} {{ entry.backend_name or entry.backend_id or '—' }} {% if entry.success %} {{ _('Success') }} {% else %} {{ _('Failed') }} {% endif %} {% if entry.duration_ms is not none %} {{ entry.duration_ms }} ms {% else %} — {% endif %} {{ entry.status_code or '—' }} {{ entry.detail or '—' }} {{ entry.created_at or '—' }}
{{ _('No logs yet.') }}
{{ _('Dead-letter queue') }}
{{ _('Replay') }}
{% if dead_letter %} {% for entry in dead_letter %} {% endfor %} {% else %} {% endif %}
{{ _('Record type') }} {{ _('Backend') }} {{ _('Station') }} {{ _('Transaction') }} {{ _('Retry count') }} {{ _('Status code') }} {{ _('Response') }} {{ _('Created') }} {{ _('Actions') }}
{{ entry.record_type|upper }} {{ entry.backend_name or entry.backend_id or '—' }} {{ entry.station_id or '—' }} {{ entry.transaction_id or '—' }} {{ entry.retry_count }} {{ entry.response_status or '—' }} {{ entry.response_body or '—' }} {{ entry.created_at or '—' }}
{{ _('No data yet.') }}
{{ _('Scheduler jobs') }}
{{ _('Interval') }} (s)
{% if jobs %} {% for job in jobs %} {% endfor %} {% else %} {% endif %}
{{ _('Job') }} {{ _('Interval') }} {{ _('Mode') }} {{ _('Status') }}
{{ job.name }} {{ job.interval }} {{ job.mode or '—' }} {% if job.running %} {{ _('Running') }} {% else %} {{ _('Stopped') }} {% endif %}
{{ _('No data yet.') }}