diff --git a/nixos/mirai/services/default.nix b/nixos/mirai/services/default.nix index 1fce02f4..233446d1 100644 --- a/nixos/mirai/services/default.nix +++ b/nixos/mirai/services/default.nix @@ -17,7 +17,7 @@ ./resolved.nix ./searxng.nix ./tailscale.nix - ./grafana.nix + # ./grafana.nix ./excalidraw.nix # ./desmos.nix diff --git a/nixos/mirai/services/grafana.nix b/nixos/mirai/services/grafana.nix index d92bef24..9d6be3e5 100644 --- a/nixos/mirai/services/grafana.nix +++ b/nixos/mirai/services/grafana.nix @@ -8,8 +8,26 @@ http_port = 3011; }; "auth.proxy" = { - enabled = true; + enabled = false; header_name = "Remote-User"; + header_property = "username"; + auto_sign_up = true; + sync_ttl = 60; + whitelist = "127.0.0.1"; + headers = "Name:Remote-Name Email:Remote-Email"; + enable_login_token = false; + }; + users = { + default_theme = "dark"; + home_page = "d/monitoring-homepage"; + auto_assign_org = true; + auto_assign_org_id = 1; + auto_assign_org_role = "Admin"; + }; + security = { + allow_embedding = true; + cookie_secure = false; + disable_gravatar = true; }; }; provision = { @@ -26,14 +44,44 @@ ]; dashboards.settings.providers = [ { - name = "system"; + name = "homepage"; orgId = 1; - folder = "System"; + folder = ""; type = "file"; disableDeletion = false; updateIntervalSeconds = 10; allowUiUpdates = true; - options.path = "/etc/grafana/dashboards"; + options.path = "/etc/grafana/dashboards/homepage"; + } + { + name = "multi-device"; + orgId = 1; + folder = "Multi-Device Monitoring"; + type = "file"; + disableDeletion = false; + updateIntervalSeconds = 10; + allowUiUpdates = true; + options.path = "/etc/grafana/dashboards/multi-device"; + } + { + name = "device-specific"; + orgId = 1; + folder = "Device-Specific"; + type = "file"; + disableDeletion = false; + updateIntervalSeconds = 10; + allowUiUpdates = true; + options.path = "/etc/grafana/dashboards/device-specific"; + } + { + name = "legacy"; + orgId = 1; + folder = "Legacy Dashboards"; + type = "file"; + disableDeletion = false; + updateIntervalSeconds = 10; + allowUiUpdates = true; + options.path = "/etc/grafana/dashboards/legacy"; } ]; }; @@ -155,13 +203,6 @@ settings = { access_control = { rules = [ - { - domain = "grafana.darksailor.dev"; - policy = "bypass"; - resources = [ - "^/api([/?].*)?$" - ]; - } { domain = "grafana.darksailor.dev"; policy = "one_factor"; @@ -184,15 +225,25 @@ }; }; - # Provision dashboards directly + # Provision dashboards in organized folders environment.etc = { - "grafana/dashboards/system-dashboard.json".source = ./grafana/system-dashboard.json; - "grafana/dashboards/processes-dashboard.json".source = ./grafana/processes-dashboard.json; - "grafana/dashboards/multi-device-system-dashboard.json".source = - ./grafana/multi-device-system-dashboard.json; - "grafana/dashboards/multi-device-processes-dashboard.json".source = - ./grafana/multi-device-processes-dashboard.json; - "grafana/dashboards/device-specific-system-dashboard.json".source = - ./grafana/device-specific-system-dashboard.json; + # Homepage dashboard (root level) + "grafana/dashboards/homepage/homepage-dashboard.json".source = + ./grafana/homepage/homepage-dashboard.json; + + # Multi-device dashboards + "grafana/dashboards/multi-device/multi-device-system-dashboard.json".source = + ./grafana/multi-device/multi-device-system-dashboard.json; + "grafana/dashboards/multi-device/multi-device-processes-dashboard.json".source = + ./grafana/multi-device/multi-device-processes-dashboard.json; + + # Device-specific dashboards + "grafana/dashboards/device-specific/device-specific-system-dashboard.json".source = + ./grafana/device-specific/device-specific-system-dashboard.json; + + # Legacy dashboards + "grafana/dashboards/legacy/system-dashboard.json".source = ./grafana/legacy/system-dashboard.json; + "grafana/dashboards/legacy/processes-dashboard.json".source = + ./grafana/legacy/processes-dashboard.json; }; } diff --git a/nixos/mirai/services/grafana/README.md b/nixos/mirai/services/grafana/README.md index f57e168c..cf919e75 100644 --- a/nixos/mirai/services/grafana/README.md +++ b/nixos/mirai/services/grafana/README.md @@ -2,9 +2,23 @@ This directory contains Grafana dashboards configured to monitor multiple NixOS devices: `mirai`, `tsuba`, and `ryu`. -## Dashboard Overview +## Homepage Dashboard -### 1. Multi-Device System Metrics (`multi-device-system-dashboard.json`) +When you access Grafana at `grafana.darksailor.dev`, you'll be greeted with the **Monitoring Hub Homepage** that provides: + +- **Device Status Overview**: Real-time status table showing CPU, memory, disk usage, and uptime for all devices +- **Dashboard Navigation**: Color-coded tiles linking to all monitoring dashboards +- **Quick Actions**: Direct links to Prometheus targets, dashboard management, and documentation +- **Organized Layout**: Dashboards are grouped by category for easy navigation + +## Dashboard Organization + +Dashboards are organized into folders for better management: + +### **📊 Multi-Device Monitoring** +Located in `multi-device/` folder: + +#### 1. Multi-Device System Metrics - **Purpose**: Compare system metrics across all devices on a single dashboard - **Features**: - Device filtering via template variable (can select one, multiple, or all devices) @@ -16,17 +30,7 @@ This directory contains Grafana dashboards configured to monitor multiple NixOS - System uptime tracking - Load average trends -### 2. Device-Specific System Dashboard (`device-specific-system-dashboard.json`) -- **Purpose**: Detailed system monitoring for a single selected device -- **Features**: - - Device selection via template variable - - Detailed CPU, memory, and disk metrics - - Network and disk I/O operations - - System status indicators - - Load average trends (1m, 5m, 15m) - - Enhanced visualizations with thresholds and color coding - -### 3. Multi-Device Process Monitoring (`multi-device-processes-dashboard.json`) +#### 2. Multi-Device Process Monitoring - **Purpose**: Monitor processes across all devices - **Features**: - Device filtering for process metrics @@ -36,7 +40,21 @@ This directory contains Grafana dashboards configured to monitor multiple NixOS - Process I/O throughput monitoring - Process count tracking per device -### 4. Legacy Dashboards +### **🔍 Device-Specific** +Located in `device-specific/` folder: + +#### Device-Specific System Dashboard +- **Purpose**: Detailed system monitoring for a single selected device +- **Features**: + - Device selection via template variable + - Detailed CPU, memory, and disk metrics + - Network and disk I/O operations + - System status indicators + - Load average trends (1m, 5m, 15m) + - Enhanced visualizations with thresholds and color coding + +### **📚 Legacy Dashboards** +Located in `legacy/` folder: - `system-dashboard.json`: Original single-device system dashboard - `processes-dashboard.json`: Original single-device process dashboard @@ -76,13 +94,20 @@ All multi-device dashboards include a `$device` template variable that allows: The variable automatically populates with available devices based on Prometheus metrics. -## Usage Tips +## Usage Guide -1. **Quick Overview**: Start with the multi-device system dashboard to get an overview of all devices -2. **Detailed Analysis**: Use device-specific dashboards for in-depth analysis of a particular device -3. **Process Monitoring**: Use the multi-device process dashboard to track resource-intensive processes across devices -4. **Filtering**: Use the device template variable to focus on specific devices of interest +### Getting Started +1. **Homepage First**: Visit `grafana.darksailor.dev` to see the homepage with device overview +2. **Dashboard Navigation**: Click on the colored tiles to access different dashboard categories +3. **Quick Status Check**: Use the device status table on the homepage for immediate health overview + +### Dashboard Navigation Tips +1. **Multi-Device Comparison**: Start with multi-device dashboards to compare all systems +2. **Deep Dive Analysis**: Use device-specific dashboards for detailed single-device monitoring +3. **Process Troubleshooting**: Use multi-device process dashboard to identify resource issues +4. **Template Variables**: Use the device dropdown to filter by specific devices 5. **Time Ranges**: Adjust time ranges based on your monitoring needs (default: last 1 hour) +6. **Folder Organization**: Browse dashboards by category using the folder structure ## Customization @@ -114,4 +139,25 @@ All dashboard queries use the `device=~"$device"` filter to support multi-device ### Performance - Limit the number of devices selected simultaneously for better performance - Adjust refresh rates if dashboards become slow -- Consider shorter time ranges for detailed analysis \ No newline at end of file +- Consider shorter time ranges for detailed analysis + +## Homepage Features + +### Device Status Table +- Real-time overview of all monitored devices +- Color-coded status indicators (UP/DOWN) +- CPU, memory, and disk usage percentages +- System uptime tracking +- Automatically updates every 30 seconds + +### Dashboard Categories +- **Blue**: Multi-Device System monitoring +- **Green**: Device-Specific detailed monitoring +- **Purple**: Multi-Device Process monitoring +- **Orange**: Legacy single-device dashboards + +### Quick Actions +- **Prometheus Targets**: Direct link to check scrape target health +- **Dashboard Management**: Access to Grafana's dashboard browser +- **Data Sources**: Manage Prometheus and other data sources +- **Documentation**: Link to setup and usage documentation \ No newline at end of file diff --git a/nixos/mirai/services/grafana/STRUCTURE.md b/nixos/mirai/services/grafana/STRUCTURE.md new file mode 100644 index 00000000..b51d6d28 --- /dev/null +++ b/nixos/mirai/services/grafana/STRUCTURE.md @@ -0,0 +1,161 @@ +# Grafana Dashboard Structure + +## Directory Layout + +``` +dotfiles/nixos/mirai/services/grafana/ +├── README.md # Main documentation +├── STRUCTURE.md # This file - structure overview +├── homepage/ +│ └── homepage-dashboard.json # Main homepage dashboard +├── multi-device/ +│ ├── multi-device-system-dashboard.json # System metrics across devices +│ └── multi-device-processes-dashboard.json # Process monitoring across devices +├── device-specific/ +│ └── device-specific-system-dashboard.json # Single device detailed view +└── legacy/ + ├── system-dashboard.json # Original system dashboard + └── processes-dashboard.json # Original process dashboard +``` + +## Dashboard Hierarchy + +``` +🏠 Homepage (monitoring-homepage) +├── Device Status Overview Table +├── Quick Dashboard Links +└── Action Buttons + │ + ├── 📊 Multi-Device Monitoring/ + │ ├── Multi-Device System (multi-device-system) + │ └── Multi-Device Processes (multi-device-processes) + │ + ├── 🔍 Device-Specific/ + │ └── Device System Dashboard (device-system-${device}) + │ + └── 📚 Legacy Dashboards/ + ├── Legacy System (system-metrics) + └── Legacy Processes (process-metrics) +``` + +## Dashboard Features Matrix + +| Dashboard | Device Filter | Comparison | Time Series | Status | Process Data | +|-----------|--------------|------------|-------------|---------|--------------| +| Homepage | ❌ | ✅ | ❌ | ✅ | ❌ | +| Multi-Device System | ✅ | ✅ | ✅ | ✅ | ❌ | +| Multi-Device Processes | ✅ | ✅ | ✅ | ❌ | ✅ | +| Device-Specific | ✅ | ❌ | ✅ | ✅ | ❌ | +| Legacy System | ❌ | ❌ | ✅ | ✅ | ❌ | +| Legacy Processes | ❌ | ❌ | ✅ | ❌ | ✅ | + +## User Journey Flow + +``` +1. User visits grafana.darksailor.dev + ↓ +2. Homepage loads automatically + ↓ +3. User sees device status overview + ↓ +4. User clicks dashboard tile based on need: + │ + ├── Multi-Device System → Compare all devices + ├── Device-Specific → Deep dive single device + ├── Multi-Device Processes → Process monitoring + └── Legacy → Original dashboards + ↓ +5. User uses template variables to filter data + ↓ +6. User navigates between dashboards using links +``` + +## Configuration Mapping + +| Grafana Folder | File Path | Provision Path | +|----------------|-----------|----------------| +| Root | `homepage/` | `/etc/grafana/dashboards/homepage/` | +| Multi-Device Monitoring | `multi-device/` | `/etc/grafana/dashboards/multi-device/` | +| Device-Specific | `device-specific/` | `/etc/grafana/dashboards/device-specific/` | +| Legacy Dashboards | `legacy/` | `/etc/grafana/dashboards/legacy/` | + +## Metrics Coverage + +### System Metrics (Node Exporter - Port 9100) +- ✅ CPU usage and load average +- ✅ Memory utilization (used/total) +- ✅ Disk usage and I/O operations +- ✅ Network interface statistics +- ✅ SystemD service status +- ✅ System uptime and boot time + +### Process Metrics (Process Exporter - Port 9256) +- ✅ CPU usage per process group +- ✅ Memory usage (resident/virtual) +- ✅ Process I/O operations (read/write) +- ✅ Process count and lifecycle +- ✅ Process resource trends + +## Device Labels + +| Device | Type | Architecture | Services | +|--------|------|--------------|----------| +| mirai | server | x86_64 | Grafana, Prometheus, Caddy | +| tsuba | server | aarch64 | Media services, NAS | +| ryu | desktop | x86_64 | Gaming, Development | + +## Color Coding + +### Dashboard Categories +- 🔵 **Blue**: Multi-Device System monitoring +- 🟢 **Green**: Device-Specific detailed monitoring +- 🟣 **Purple**: Multi-Device Process monitoring +- 🟠 **Orange**: Legacy single-device dashboards + +### Status Indicators +- 🟢 **Green**: Service UP / Normal operation +- 🔴 **Red**: Service DOWN / Critical threshold +- 🟡 **Yellow**: Warning threshold +- 🔵 **Blue**: Information / Navigation + +## Dashboard UIDs Reference + +| Dashboard | UID | URL Path | +|-----------|-----|----------| +| Homepage | `monitoring-homepage` | `d/monitoring-homepage` | +| Multi-Device System | `multi-device-system` | `d/multi-device-system` | +| Multi-Device Processes | `multi-device-processes` | `d/multi-device-processes` | +| Device-Specific | `device-system-${device}` | `d/device-system-mirai` | +| Legacy System | `system-metrics` | `d/system-metrics` | +| Legacy Processes | `process-metrics` | `d/process-metrics` | + +## Refresh Rates + +- Homepage: 30 seconds +- Multi-Device dashboards: 30 seconds +- Device-Specific: 30 seconds +- Legacy dashboards: 30 seconds + +## Template Variables + +### Device Selection ($device) +- **Type**: Query variable +- **Query**: `label_values(up, device)` +- **Multi-select**: Yes (for multi-device dashboards) +- **Include All**: Yes +- **Current Values**: mirai, tsuba, ryu + +## Quick Access URLs + +- Homepage: `https://grafana.darksailor.dev/d/monitoring-homepage` +- Multi-Device System: `https://grafana.darksailor.dev/d/multi-device-system` +- Prometheus Targets: `https://prometheus.darksailor.dev/targets` +- Dashboard Browser: `https://grafana.darksailor.dev/dashboards` + +## Maintenance Notes + +- Dashboards auto-update from provisioned files +- New devices appear automatically when exporters are configured +- Template variables refresh every page load +- Dashboard folders are recreated on Grafana restart +- Homepage is set as default landing page for all users \ No newline at end of file diff --git a/nixos/mirai/services/grafana/device-specific-system-dashboard.json b/nixos/mirai/services/grafana/device-specific/device-specific-system-dashboard.json similarity index 100% rename from nixos/mirai/services/grafana/device-specific-system-dashboard.json rename to nixos/mirai/services/grafana/device-specific/device-specific-system-dashboard.json diff --git a/nixos/mirai/services/grafana/homepage/homepage-dashboard.json b/nixos/mirai/services/grafana/homepage/homepage-dashboard.json new file mode 100644 index 00000000..c6691a97 --- /dev/null +++ b/nixos/mirai/services/grafana/homepage/homepage-dashboard.json @@ -0,0 +1,956 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1000, + "panels": [], + "title": "Infrastructure Monitoring Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 1, + "text": "DOWN" + }, + "1": { + "color": "green", + "index": 0, + "text": "UP" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "CPU %" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Memory %" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Disk %" + }, + "properties": [ + { + "id": "unit", + "value": "percent" + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "expr": "up{job=\"node\"}", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "expr": "100 - (avg by (device) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "expr": "((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes) * 100", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "expr": "100 - ((node_filesystem_avail_bytes{mountpoint=\"/\",fstype!=\"tmpfs\"} * 100) / node_filesystem_size_bytes{mountpoint=\"/\",fstype!=\"tmpfs\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "expr": "time() - node_boot_time_seconds", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "", + "refId": "E" + } + ], + "title": "Device Status Overview", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true, + "fstype": true, + "mountpoint": true, + "mode": true + }, + "indexByName": {}, + "renameByName": { + "Value #A": "Status", + "Value #B": "CPU %", + "Value #C": "Memory %", + "Value #D": "Disk %", + "Value #E": "Uptime", + "device": "Device" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 1001, + "panels": [], + "title": "System Monitoring Dashboards", + "type": "row" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 0, + "y": 10 + }, + "id": 2, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Dashboard,Description\nMulti-Device System,\"Compare CPU, memory, disk & network across all devices\"" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Multi-Device System Dashboard", + "url": "d/multi-device-system" + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 8, + "y": 10 + }, + "id": 3, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Dashboard,Description\nDevice-Specific System,\"Detailed monitoring for individual devices with enhanced visualizations\"" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Device-Specific Dashboard", + "url": "d/device-system-${device}" + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 16, + "y": 10 + }, + "id": 4, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Dashboard,Description\nMulti-Device Processes,\"Monitor processes across all devices with resource usage tracking\"" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Multi-Device Process Dashboard", + "url": "d/multi-device-processes" + } + ] + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 1002, + "panels": [], + "title": "Legacy Dashboards", + "type": "row" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 5, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Dashboard,Description\nLegacy System,\"Original single-device system monitoring dashboard\"" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Legacy System Dashboard", + "url": "d/system-metrics" + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 6, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Dashboard,Description\nLegacy Processes,\"Original single-device process monitoring dashboard\"" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Legacy Process Dashboard", + "url": "d/process-metrics" + } + ] + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 1003, + "panels": [], + "title": "Quick Actions", + "type": "row" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 20 + }, + "id": 7, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Action\nView Prometheus Targets" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Open Prometheus Targets", + "url": "https://prometheus.darksailor.dev/targets", + "targetBlank": true + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 20 + }, + "id": 8, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Action\nManage Dashboards" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Browse All Dashboards", + "url": "dashboards" + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "light-blue", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 20 + }, + "id": 9, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Action\nData Sources" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "Manage Data Sources", + "url": "datasources" + } + ] + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "color-background" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 20 + }, + "id": 10, + "options": { + "cellHeight": "lg", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": false + }, + "pluginVersion": "8.0.0", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content", + "stringInput": "Action\nDocumentation" + } + ], + "title": "", + "transformations": [], + "type": "table", + "links": [ + { + "title": "View Setup Documentation", + "url": "https://github.com/uttarayan21/dotfiles/tree/main/nixos/mirai/services/grafana", + "targetBlank": true + } + ] + } + ], + "refresh": "30s", + "schemaVersion": 30, + "style": "dark", + "tags": [ + "homepage", + "overview", + "monitoring" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Monitoring Hub - Homepage", + "uid": "monitoring-homepage", + "version": 1 +} diff --git a/nixos/mirai/services/grafana/processes-dashboard.json b/nixos/mirai/services/grafana/legacy/processes-dashboard.json similarity index 100% rename from nixos/mirai/services/grafana/processes-dashboard.json rename to nixos/mirai/services/grafana/legacy/processes-dashboard.json diff --git a/nixos/mirai/services/grafana/system-dashboard.json b/nixos/mirai/services/grafana/legacy/system-dashboard.json similarity index 100% rename from nixos/mirai/services/grafana/system-dashboard.json rename to nixos/mirai/services/grafana/legacy/system-dashboard.json diff --git a/nixos/mirai/services/grafana/multi-device-processes-dashboard.json b/nixos/mirai/services/grafana/multi-device/multi-device-processes-dashboard.json similarity index 100% rename from nixos/mirai/services/grafana/multi-device-processes-dashboard.json rename to nixos/mirai/services/grafana/multi-device/multi-device-processes-dashboard.json diff --git a/nixos/mirai/services/grafana/multi-device-system-dashboard.json b/nixos/mirai/services/grafana/multi-device/multi-device-system-dashboard.json similarity index 100% rename from nixos/mirai/services/grafana/multi-device-system-dashboard.json rename to nixos/mirai/services/grafana/multi-device/multi-device-system-dashboard.json diff --git a/nixos/ryu/services/openrgb.nix b/nixos/ryu/services/openrgb.nix index 8ca29e81..a48c0498 100644 --- a/nixos/ryu/services/openrgb.nix +++ b/nixos/ryu/services/openrgb.nix @@ -1,5 +1,6 @@ -{...}: { +{ ... }: +{ services = { - hardware.openrgb.enable = false; + hardware.openrgb.enable = true; }; }