All checks were successful
CI / ci (push) Successful in 14s
- Introduced a new `stats.py` module to encapsulate dashboard statistics building and cache key constants. - Refactored `views.py` to utilize the new `build_stats` function for constructing metrics context, improving code organization and readability. - Updated Prometheus query handling to streamline metrics fetching with a new `fetch_dashboard_metrics` function. - Enhanced test cases to reflect changes in metrics fetching and context building, ensuring accurate functionality. - Added new HTML templates for displaying detailed resource allocation and flavor statistics on the dashboard.
72 lines
3.8 KiB
HTML
72 lines
3.8 KiB
HTML
<!-- AUDIT CONTROL -->
|
|
<section aria-label="Audit analysis">
|
|
<div class="card bg-base-100 shadow-sm" id="auditSection">
|
|
<div class="card-body p-5">
|
|
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-3 mb-4">
|
|
<div>
|
|
<h2 class="text-lg font-semibold">Audit Analysis</h2>
|
|
<div class="text-base text-base-content/60 mt-0.5">Select an audit to analyze resource distribution</div>
|
|
</div>
|
|
<div class="flex items-center gap-2">
|
|
<span class="text-xs text-base-content/60" id="auditsCount">{% if skeleton %}Loading…{% else %}{{ audits|length }} available{% endif %}</span>
|
|
<div class="dropdown dropdown-end no-print">
|
|
<label tabindex="0" class="btn btn-xs btn-ghost">
|
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
</svg>
|
|
Info
|
|
</label>
|
|
<div tabindex="0" class="dropdown-content z-[1] card card-compact w-64 p-2 shadow bg-base-100">
|
|
<div class="card-body">
|
|
<div class="text-xs space-y-1">
|
|
<div class="flex justify-between">
|
|
<span class="text-base-content/60">Strategy:</span>
|
|
<span id="previewStrategy">Balanced</span>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<span class="text-base-content/60">Scope:</span>
|
|
<span id="previewScope">Full Cluster</span>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<span class="text-base-content/60">CPU Weight:</span>
|
|
<span id="previewCpu">1.0</span>
|
|
</div>
|
|
<div class="flex justify-between">
|
|
<span class="text-base-content/60">RAM Weight:</span>
|
|
<span id="previewRam">1.0</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-col md:flex-row gap-3">
|
|
<select id="auditSelector" class="select select-bordered select-sm flex-1" {% if skeleton %}disabled{% endif %}>
|
|
{% if skeleton %}
|
|
<option value="">Loading…</option>
|
|
{% else %}
|
|
{% for audit in audits %}
|
|
<option value="{{ audit.id }}"
|
|
data-cpu="{{ audit.cpu_weight }}"
|
|
data-ram="{{ audit.ram_weight }}"
|
|
data-scope="{{ audit.scope }}"
|
|
data-strategy="{{ audit.strategy }}"
|
|
data-goal="{{ audit.goal }}">
|
|
{{ audit.name }} ({{ audit.created_at|date:"M d" }})
|
|
</option>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</select>
|
|
<button type="button" onclick="loadSelectedAudit()" class="btn btn-primary btn-sm gap-2 no-print">
|
|
<svg class="w-4 h-4 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"/>
|
|
</svg>
|
|
Load Analysis
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|