Files
homelab-optimized/docker/monitoring/verify-dashboard-sections.sh
Gitea Mirror Bot febaf56ba4
Some checks failed
Documentation / Build Docusaurus (push) Has started running
Documentation / Deploy to GitHub Pages (push) Has been cancelled
Sanitized mirror from private repository - 2026-04-16 07:12:52 UTC
2026-04-16 07:12:52 +00:00

143 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# Comprehensive Dashboard Section Verification Script
# Tests each dashboard and its individual sections/panels
GRAFANA_URL="http://localhost:3300"
GRAFANA_USER="admin"
GRAFANA_PASS="REDACTED_PASSWORD"
echo "=== Comprehensive Dashboard Section Verification ==="
echo "Grafana URL: $GRAFANA_URL"
echo
# Function to test a metric query
test_metric() {
local metric="$1"
local description="$2"
local result=$(curl -s -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/datasources/proxy/1/api/v1/query?query=$metric" | jq '.data.result | length')
if [ "$result" -gt 0 ]; then
echo "$description: $result data points"
else
echo "$description: No data"
fi
}
# Function to test a dashboard's panels
test_dashboard_panels() {
local uid="$1"
local name="$2"
echo
echo "=== Testing $name Dashboard (UID: $uid) ==="
# Get dashboard JSON
local dashboard=$(curl -s -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/dashboards/uid/$uid")
local panel_count=$(echo "$dashboard" | jq '.dashboard.panels | length')
echo "📊 Total panels: $panel_count"
# Get template variables
echo
echo "🔧 Template Variables:"
echo "$dashboard" | jq -r '.dashboard.templating.list[] | " • \(.name): \(.current.text // "N/A")"'
# Test some key metrics based on dashboard type
echo
echo "📈 Testing Key Metrics:"
}
# Test API connectivity
echo "1. Testing API connectivity..."
if curl -s -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/health" | grep -q "ok"; then
echo "✅ API connectivity: OK"
else
echo "❌ API connectivity: FAILED"
exit 1
fi
# Test data source
echo
echo "2. Testing Prometheus data source..."
PROMETHEUS_STATUS=$(curl -s -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/datasources/1/health" | jq -r '.status')
echo "✅ Prometheus status: $PROMETHEUS_STATUS"
# Test Node Exporter Dashboard
test_dashboard_panels "rYdddlPWk" "Node Exporter Full"
# Test key Node Exporter metrics
test_metric "up%7Bjob%3D~%22.*-node%22%7D" "Node Exporter targets up"
test_metric "node_load1" "CPU Load (1m)"
test_metric "node_memory_MemAvailable_bytes" "Memory Available"
test_metric "node_filesystem_avail_bytes" "Filesystem Available"
test_metric "node_disk_io_time_seconds_total" "Disk I/O Time"
test_metric "node_network_receive_bytes_total" "Network Receive Bytes"
test_metric "node_cpu_seconds_total" "CPU Usage"
test_metric "node_boot_time_seconds" "Boot Time"
# Test Synology Dashboard
test_dashboard_panels "synology-dashboard-v2" "Synology NAS Monitoring"
# Test key Synology/SNMP metrics
test_metric "up%7Bjob%3D~%22.*-snmp%22%7D" "SNMP targets up"
test_metric "diskTemperature" "Disk Temperature"
test_metric "hrStorageSize" "Storage Size"
test_metric "hrStorageUsed" "Storage Used"
test_metric "sysUpTime" "System Uptime"
# Test Node Details Dashboard
test_dashboard_panels "node-details-v2" "Node Details"
# Test Infrastructure Overview Dashboard
test_dashboard_panels "infrastructure-overview-v2" "Infrastructure Overview"
echo
echo "=== Detailed Panel Testing ==="
# Test specific dashboard sections
echo
echo "🔍 Node Exporter Dashboard Sections:"
echo " Testing CPU, Memory, Disk, Network, and System panels..."
# CPU metrics
test_metric "100%20-%20%28avg%20by%20%28instance%29%20%28irate%28node_cpu_seconds_total%7Bmode%3D%22idle%22%7D%5B5m%5D%29%29%20*%20100%29" "CPU Usage Percentage"
# Memory metrics
test_metric "%28node_memory_MemTotal_bytes%20-%20node_memory_MemAvailable_bytes%29%20/%20node_memory_MemTotal_bytes%20*%20100" "Memory Usage Percentage"
# Disk metrics
test_metric "100%20-%20%28node_filesystem_avail_bytes%20/%20node_filesystem_size_bytes%29%20*%20100" "Disk Usage Percentage"
# Network metrics
test_metric "irate%28node_network_receive_bytes_total%5B5m%5D%29" "Network Receive Rate"
test_metric "irate%28node_network_transmit_bytes_total%5B5m%5D%29" "Network Transmit Rate"
echo
echo "🔍 Synology Dashboard Sections:"
echo " Testing Storage, Temperature, and System panels..."
# Storage metrics
test_metric "hrStorageUsed%20/%20hrStorageSize%20*%20100" "Storage Usage Percentage"
# Temperature metrics (if available)
test_metric "diskTemperature" "Disk Temperatures"
echo
echo "=== Target Health Summary ==="
# Get all targets and their health
echo "📡 All Prometheus Targets:"
curl -s -u "$GRAFANA_USER:$GRAFANA_PASS" "$GRAFANA_URL/api/datasources/proxy/1/api/v1/targets" | jq -r '.data.activeTargets[] | " \(if .health == "up" then "✅" else "❌" end) \(.labels.job): \(.labels.instance // "N/A") (\(.health))"'
echo
echo "=== Dashboard URLs ==="
echo "🌐 Access your dashboards:"
echo " • Node Exporter Full: $GRAFANA_URL/d/rYdddlPWk"
echo " • Synology NAS: $GRAFANA_URL/d/synology-dashboard-v2"
echo " • Node Details: $GRAFANA_URL/d/node-details-v2"
echo " • Infrastructure Overview: $GRAFANA_URL/d/infrastructure-overview-v2"
echo
echo "=== Verification Complete ==="
echo "✅ All dashboard sections have been tested"
echo "📊 Check the results above for any issues"
echo "🔧 Template variables and data sources verified"