Files
gilles 8a8641e9cd feat(widgets): implémentation Phase 4 — widgets Glance complets
- widget-network-scan : liste équipements avec état (online/offline),
  hostname, IP, vendor, badges services, tri online en premier
- widget-agent-metrics : barres CPU/RAM/disque/température par agent,
  code couleur ok (vert) / warn (orange) / crit (rouge)
- sentinelmesh.css : styles custom (points statut, badges, barres de
  progression animées) compatibles thèmes Glance
- glance-page-example.yaml : page Infrastructure prête à l'emploi
- Backend widgets enrichi : mac, ports, offline count, net_rx/tx_bps
- ROADMAP Phase 4 marquée complète

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 06:21:57 +02:00

77 lines
3.1 KiB
YAML

# Widget SentinelMesh — Métriques système
# À copier dans votre glance.yml
#
# Prérequis :
# - Backend SentinelMesh démarré (port 8080)
# - agent-metric en cours d'exécution sur chaque machine
# - Fichier CSS custom : assets/sentinelmesh.css
- type: custom-api
title: Métriques systèmes
cache: 5s
url: http://sentinelmesh:8080/api/v1/widgets/metrics
template: |
<ul class="list list-gap-15">
{{ range .JSON.Array "agents" }}
{{- $cpu := .Float "cpu_percent" -}}
{{- $ram := .Float "ram_percent" -}}
{{- $disk := .Float "disk_percent" -}}
{{- $temp := .Float "temperature_c" -}}
{{- $up := eq (.String "status") "online" -}}
<li class="sm-agent">
<div class="flex justify-between items-center margin-bottom-6">
<span class="size-h4 {{ if $up }}color-highlight{{ else }}color-negative{{ end }}">
{{ .String "hostname" }}
</span>
<span class="size-h6 color-paragraph"
{{ .String "last_seen" | parseTime "rfc3339" | toRelativeTime }}></span>
</div>
{{ if $up }}
<div class="sm-metric-row">
<span class="sm-metric-label size-h6 color-paragraph">CPU</span>
<div class="sm-bar-track">
<div class="sm-bar {{ if ge $cpu 85.0 }}sm-bar-crit{{ else if ge $cpu 60.0 }}sm-bar-warn{{ else }}sm-bar-ok{{ end }}"
style="width: {{ printf "%.0f" $cpu }}%"></div>
</div>
<span class="sm-metric-val size-h6">{{ printf "%.0f" $cpu }}%</span>
</div>
<div class="sm-metric-row">
<span class="sm-metric-label size-h6 color-paragraph">RAM</span>
<div class="sm-bar-track">
<div class="sm-bar {{ if ge $ram 90.0 }}sm-bar-crit{{ else if ge $ram 70.0 }}sm-bar-warn{{ else }}sm-bar-ok{{ end }}"
style="width: {{ printf "%.0f" $ram }}%"></div>
</div>
<span class="sm-metric-val size-h6">{{ printf "%.0f" $ram }}%</span>
</div>
<div class="sm-metric-row">
<span class="sm-metric-label size-h6 color-paragraph">Disque</span>
<div class="sm-bar-track">
<div class="sm-bar {{ if ge $disk 90.0 }}sm-bar-crit{{ else if ge $disk 75.0 }}sm-bar-warn{{ else }}sm-bar-ok{{ end }}"
style="width: {{ printf "%.0f" $disk }}%"></div>
</div>
<span class="sm-metric-val size-h6">{{ printf "%.0f" $disk }}%</span>
</div>
{{ if gt $temp 0.0 }}
<div class="sm-metric-row">
<span class="sm-metric-label size-h6 color-paragraph">Temp</span>
<div class="sm-bar-track">
<div class="sm-bar {{ if ge $temp 85.0 }}sm-bar-crit{{ else if ge $temp 70.0 }}sm-bar-warn{{ else }}sm-bar-ok{{ end }}"
style="width: {{ printf "%.0f" (mul (div $temp 100.0) 100.0) }}%"></div>
</div>
<span class="sm-metric-val size-h6">{{ printf "%.0f" $temp }}°C</span>
</div>
{{ end }}
{{ else }}
<p class="size-h6 color-negative">Agent hors ligne</p>
{{ end }}
</li>
{{ end }}
</ul>