{% extends "base.html" %} {% from "partials/components.html" import page_header, collapse, stat_card, table, action_btn %} {% from "partials/icons.html" import check, refresh_cw, save, settings, server, database, cloud_download, rotate_cw %} {% block title %}Dashboard - Compose Farm{% endblock %} {% block content %}
{{ page_header("Compose Farm", "Cluster overview and management") }}
{% include "partials/stats.html" %}
{{ action_btn("Apply", "/api/apply", "primary", "Make reality match config", check()) }} {{ action_btn("Refresh", "/api/refresh", "outline", "Update state from reality", refresh_cw()) }} {{ action_btn("Pull All", "/api/pull-all", "outline", "Pull latest images for all stacks", cloud_download()) }} {{ action_btn("Update All", "/api/update-all", "outline", "Update all stacks (pull + build + down + up)", rotate_cw()) }}
{% include "partials/terminal.html" %}
{% if config_error %} {% include "partials/config_error.html" %} {% endif %}
{% call collapse("Edit Config", badge="compose-farm.yaml", icon=settings(), checked=config_error) %}
{% endcall %}
{% include "partials/pending.html" %}
{% include "partials/stacks_by_host.html" %}
{% call collapse("Hosts (" ~ (hosts | length) ~ ")", icon=server()) %} {% call table() %} Name Address User Port {% for name, host in hosts.items() %} {{ name }} {{ host.address }} {{ host.user }} {{ host.port }} {% endfor %} {% endcall %} {% endcall %} {% call collapse("Raw State", badge="compose-farm-state.yaml", icon=database()) %}
{% endcall %}
{% endblock %}