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>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# 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>
|
||||
Reference in New Issue
Block a user