{% extends "cms/base.html" %} {% block title %}Fleet{% endblock %} {% block extra_head %} {% endblock %} {% block cms_content %}

Fleet

Latest FT OS
v{{ latest_version }}
Target release
{% if online_count %}{% else %}{% endif %}
Reporting
{{ online_count }}
{% if online_count %} Seen within 3h {% else %} No check-ins in 3h {% endif %}
{% if behind_count %}{% else %}{% endif %}
Behind on FT OS
{{ behind_count }}
{% if behind_count %} Upgrade available {% else %} All current {% endif %}
Never connected
{{ never_count }}
Need a key
Installs
{% for row in rows %} {% empty %} {% endfor %}
Site FT OS Server OS Python/Django Database Plan Last seen Key
{% if row.is_reference %} {% elif row.never_seen %} {% elif row.obj.is_online %} {% else %} {% endif %}
{{ row.obj.name }}
{{ row.obj.primary_domain }}
{% if row.obj.reported_version %} {% if row.obj.reported_version == latest_version %} v{{ row.obj.reported_version }} {% elif row.obj.reported_version|slice:":2" == latest_version|slice:":2" %} v{{ row.obj.reported_version }} {% else %} v{{ row.obj.reported_version }} {% endif %} {% else %} — {% endif %} {% if row.obj.os_name %}{{ row.obj.os_label }}{% else %}—{% endif %} {% if row.obj.python_version %}
{{ row.obj.python_version }}
{{ row.obj.django_version }}
{% else %}—{% endif %}
{% if row.obj.db_engine %} {{ row.obj.db_engine }} {% else %} — {% endif %} {% firstof row.obj.get_plan_display row.obj.plan %} {% if row.seen_short %}{{ row.seen_short }} ago{% else %}Never{% endif %} {% if row.is_reference %} — {% else %}
{% csrf_token %}
{% endif %}
No tenants found.
{% if page_obj.has_other_pages %}
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }} — {{ total_count }} tenant site{{ total_count|pluralize }}
{% if page_obj.has_previous %} {% endif %} {% for num in page_obj.paginator.page_range %} {% if num == page_obj.number %} {{ num }} {% elif num >= page_obj.number|add:'-2' and num <= page_obj.number|add:'2' %} {{ num }} {% endif %} {% endfor %} {% if page_obj.has_next %} {% endif %}
{% endif %}
Connecting a Site
Check-in endpoint
{{ checkin_url }}
Issue a key on the row above, then add these three lines to that server's .env file.
FT_CONTROL_URL={{ checkin_url }}
FT_TENANT_SLUG=<tenant slug>
FT_TENANT_KEY=<key issued above>
Test it without changing anything, then schedule it hourly.
venv/bin/python manage.py ft_checkin --settings=config.settings.production --dry-run
About the Fleet
Each site reports in hourly with a signed request. {{ company }} replies with the plan and modules that site should have, and the site applies them to its own database. No client data crosses between sites and {{ company }} never connects in to a client server. A site that stops reporting keeps serving normally; only directives arrive late. Version upgrades are recorded here but never applied automatically.
{% endblock %}