Files
homelab/graphify-out/cache/ast/0a35dd44e77895b4f27d566cf738bf9bf39a40f8ab120276e6d929f228eb1a98.json
Hermes Agent service account d974c75d7c feat(jmri): headless JMRI server with Leviton layout power monitor and X11 GUI mode
- Stable udev device symlinks (/dev/jmri/nce, /dev/jmri/loconet, /dev/jmri/lcc)
- jmri-monitor: polls Leviton Decora Smart switch to start/stop JMRI automatically
  - Quiet hours 1-10 AM (no polling)
  - 30s off-delay before shutdown
- LCRR config cloned from Gitea (ssh://gitea.mk-labs.cloud:2221/rblundon/LCRR.git)
- ~/.jmri symlinked to LCRR repo for GitOps config management
- jmri-gui: X11 remote GUI access (PanelPro/DecoderPro) via ssh -X as jmri user
  - Stops daemon, launches GUI, restarts daemon on exit if layout still on
- jmri user gets login shell + SSH key for GUI sessions
- Full JRE installed (openjdk-21-jre) for AWT/X11 support
2026-07-29 00:43:23 -05:00

1 line
22 KiB
JSON

{"nodes": [{"id": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "label": "node-exporter.json", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L1"}, {"id": "main_node_exporter_inputs", "label": "__inputs", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L2"}, {"id": "main_node_exporter_elements", "label": "__elements", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L12"}, {"id": "main_node_exporter_requires", "label": "__requires", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L13"}, {"id": "main_node_exporter_annotations", "label": "annotations", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L45"}, {"id": "main_node_exporter_annotations_list", "label": "list", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L46"}, {"id": "main_node_exporter_editable", "label": "editable", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L68"}, {"id": "main_node_exporter_fiscalyearstartmonth", "label": "fiscalYearStartMonth", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L69"}, {"id": "main_node_exporter_gnetid", "label": "gnetId", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L70"}, {"id": "main_node_exporter_graphtooltip", "label": "graphTooltip", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L71"}, {"id": "main_node_exporter_id", "label": "id", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L72"}, {"id": "main_node_exporter_links", "label": "links", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L73"}, {"id": "main_node_exporter_livenow", "label": "liveNow", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L91"}, {"id": "main_node_exporter_panels", "label": "panels", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L92"}, {"id": "main_node_exporter_refresh", "label": "refresh", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22546"}, {"id": "main_node_exporter_schemaversion", "label": "schemaVersion", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22547"}, {"id": "main_node_exporter_style", "label": "style", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22548"}, {"id": "main_node_exporter_tags", "label": "tags", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22549"}, {"id": "main_node_exporter_templating", "label": "templating", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22550"}, {"id": "main_node_exporter_templating_list", "label": "list", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22551"}, {"id": "main_node_exporter_time", "label": "time", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22645"}, {"id": "main_node_exporter_time_from", "label": "from", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22646"}, {"id": "main_node_exporter_time_to", "label": "to", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22647"}, {"id": "main_node_exporter_timepicker", "label": "timepicker", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22649"}, {"id": "main_node_exporter_timepicker_refresh_intervals", "label": "refresh_intervals", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650"}, {"id": "main_node_exporter_timepicker_time_options", "label": "time_options", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662"}, {"id": "main_node_exporter_timezone", "label": "timezone", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22674"}, {"id": "main_node_exporter_title", "label": "title", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22675"}, {"id": "main_node_exporter_uid", "label": "uid", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22676"}, {"id": "main_node_exporter_version", "label": "version", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22677"}, {"id": "main_node_exporter_weekstart", "label": "weekStart", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22678"}], "edges": [{"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L2", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_elements", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L12", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_requires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L13", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_annotations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L45", "weight": 1.0}, {"source": "main_node_exporter_annotations", "target": "main_node_exporter_annotations_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L46", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_editable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L68", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_fiscalyearstartmonth", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L69", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_gnetid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L70", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_graphtooltip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L71", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L72", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L73", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_livenow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L91", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_panels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L92", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_refresh", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22546", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_schemaversion", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22547", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_style", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22548", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22549", "weight": 1.0}, {"source": "main_node_exporter_tags", "target": "ref_linux", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22549", "weight": 1.0, "context": "import"}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_templating", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22550", "weight": 1.0}, {"source": "main_node_exporter_templating", "target": "main_node_exporter_templating_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22551", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22645", "weight": 1.0}, {"source": "main_node_exporter_time", "target": "main_node_exporter_time_from", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22646", "weight": 1.0}, {"source": "main_node_exporter_time", "target": "main_node_exporter_time_to", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22647", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_timepicker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22649", "weight": 1.0}, {"source": "main_node_exporter_timepicker", "target": "main_node_exporter_timepicker_refresh_intervals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_5s", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_10s", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_30s", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_1m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_5m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_15m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_30m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_1h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_2h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_refresh_intervals", "target": "ref_1d", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22650", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker", "target": "main_node_exporter_timepicker_time_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_5m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_15m", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_1h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_6h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_12h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_24h", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_2d", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_7d", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "main_node_exporter_timepicker_time_options", "target": "ref_30d", "relation": "extends", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22662", "weight": 1.0, "context": "import"}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_timezone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22674", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22675", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_uid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22676", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22677", "weight": 1.0}, {"source": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "target": "main_node_exporter_weekstart", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22678", "weight": 1.0}]}