From 5a70460e89a62b0fd322d2148d6e6645ed65cc93 Mon Sep 17 00:00:00 2001 From: Snarf Date: Thu, 12 Nov 2026 16:57:08 -0500 Subject: [PATCH] feat: add homelab deployment configs, documentation, and automation scripts --- docker-deployments/heimdall.yml | 33 +- docker-deployments/shepherd.yml | 21 + docs/snarfnet_homelab_topology.html | 1029 +++++++++++++++++ docs/snarfnet_homelab_topology.png | Bin 0 -> 807517 bytes homelab-gitops-repo | 2 +- scripts/add_kuma_bookmarks.py | 58 + scripts/add_topology_to_homepage.py | 26 + scripts/add_zabbix_devices.py | 118 ++ scripts/apply_full_homepage.py | 250 ++++ scripts/apply_grafana_dashboards.py | 33 + scripts/apply_grafana_server_side.py | 20 + scripts/apply_homepage.py | 31 + scripts/apply_prom_grafana.py | 45 + scripts/apply_prom_update.py | 36 + scripts/capture_screenshot.py | 27 + scripts/cat_prom_conf.py | 13 + scripts/check_aero_metrics_sources.py | 24 + scripts/check_argo_secret.py | 16 + scripts/check_argocd_apps.py | 73 ++ scripts/check_argocd_resources.py | 29 + scripts/check_authentik_proxy_providers.py | 24 + scripts/check_awx_monitor.py | 16 + scripts/check_cm_json.py | 17 + scripts/check_dcgm_status.py | 21 + scripts/check_deleted_at.py | 26 + scripts/check_deployment_spec.py | 14 + scripts/check_direct_apis.py | 24 + scripts/check_down_monitors.py | 41 + scripts/check_gaming_pc.py | 17 + scripts/check_glances_host.py | 19 + scripts/check_gotify_files.py | 13 + scripts/check_gotify_idx.py | 22 + scripts/check_gotify_mount.py | 16 + scripts/check_gotify_service.py | 19 + scripts/check_grafana_api.py | 27 + scripts/check_grafana_dashboards_live.py | 15 + scripts/check_grafana_diff.py | 14 + scripts/check_grafana_info.py | 21 + scripts/check_grafana_internal.py | 23 + scripts/check_grafana_load.py | 17 + scripts/check_grafana_mounts.py | 19 + scripts/check_grafana_rollout.py | 13 + scripts/check_grafana_secret.py | 15 + scripts/check_grafana_sqlite.py | 30 + scripts/check_grafana_success.py | 17 + scripts/check_ha_proxy_js.py | 31 + scripts/check_harvester_capacity.py | 25 + scripts/check_harvester_prom.py | 21 + scripts/check_harvester_storage.py | 33 + scripts/check_heartbeats.py | 20 + scripts/check_heimdall_active.py | 31 + scripts/check_heimdall_integrity.py | 22 + scripts/check_heimdall_pinned.py | 27 + scripts/check_heimdall_python.py | 24 + scripts/check_homepage_api.py | 26 + scripts/check_homepage_info.py | 11 + scripts/check_homepage_pod_logs.py | 16 + scripts/check_homepage_rbac.py | 21 + scripts/check_homepage_routes.py | 15 + scripts/check_icon_resolver.py | 18 + scripts/check_kuma_db_backups.py | 21 + scripts/check_kuma_details.py | 23 + scripts/check_kuma_live_status.py | 27 + scripts/check_kuma_live_status2.py | 25 + scripts/check_kuma_logs.py | 20 + scripts/check_kuma_mariadb.py | 17 + scripts/check_kuma_notif.py | 16 + scripts/check_kuma_slugs.py | 17 + scripts/check_kuma_sp_schema.py | 20 + scripts/check_live_cm.py | 13 + scripts/check_longhorn_source.py | 17 + scripts/check_longhorn_svc.py | 19 + scripts/check_mdi_icons.py | 17 + scripts/check_monitoring_ns.py | 17 + scripts/check_monitoring_spaceport.py | 13 + scripts/check_nas_backups.py | 18 + scripts/check_nas_ports.py | 12 + scripts/check_nvidia_host.py | 17 + scripts/check_nvidia_output.py | 15 + scripts/check_pkg_icons.py | 17 + scripts/check_pod_logs.py | 16 + scripts/check_ports.py | 24 + scripts/check_prom_elsewhere.py | 14 + scripts/check_prom_live_targets.py | 29 + scripts/check_prom_metrics.py | 21 + scripts/check_prom_pods.py | 13 + scripts/check_prom_sa.py | 18 + scripts/check_prom_targets.py | 19 + scripts/check_prom_targets2.py | 13 + scripts/check_prometheus.py | 15 + scripts/check_prometheus_spaceport.py | 17 + scripts/check_real_gotify.py | 24 + scripts/check_running_mounts.py | 15 + scripts/check_sc_aerodrome.py | 15 + scripts/check_shepherd.py | 19 + scripts/check_spacedock_prom.py | 24 + scripts/check_status_page.py | 13 + scripts/check_status_page_schema.py | 13 + scripts/check_storage_and_drives.py | 58 + scripts/check_swarm_networks.py | 21 + scripts/check_swarm_services_all.py | 14 + scripts/check_tmp_file.py | 11 + scripts/check_unhealthy_pods.py | 16 + scripts/check_unifi_client.py | 40 + scripts/check_zabbix_templates.py | 41 + scripts/create_argo_token.py | 13 + scripts/deploy_heimdall_fixed.py | 66 ++ scripts/deploy_node_exporter.py | 72 ++ scripts/deploy_node_exporter_spaceport.py | 72 ++ scripts/deploy_shepherd.py | 63 + scripts/find_all_prom.py | 14 + scripts/find_all_weather_entities.py | 26 + scripts/find_ha_api.py | 16 + scripts/find_ha_api2.py | 19 + scripts/find_ha_entities.py | 28 + scripts/find_homepage_icons.py | 20 + scripts/find_longhorn_config.py | 19 + scripts/find_nvml.py | 15 + scripts/find_peanut_code.py | 13 + scripts/find_proxy.py | 15 + scripts/find_proxy_files.py | 13 + scripts/find_settings.py | 16 + scripts/find_uptimekuma_files.py | 13 + scripts/find_utils.py | 13 + scripts/fix_gotify_sort_key.py | 35 + scripts/fix_homepage_icons.py | 42 + scripts/fix_homepage_manifest.py | 156 +++ scripts/generate_ai_dashboard.py | 279 +++++ .../generate_systems_container_dashboards.py | 246 ++++ scripts/get_argo_token.py | 15 + scripts/get_gitea_token.py | 18 + scripts/get_zabbix_metadata.py | 36 + scripts/grep_icon_source.py | 17 + scripts/inspect_85776.py | 26 + scripts/inspect_api_pages.py | 13 + scripts/inspect_app_tree.py | 13 + scripts/inspect_customapi.py | 36 + scripts/inspect_glances_proxy.py | 26 + scripts/inspect_gotify_db.py | 34 +- scripts/inspect_grafana_proxy.py | 27 + scripts/inspect_grafana_widget_component.py | 13 + scripts/inspect_ha_widget_code.py | 18 + scripts/inspect_ha_widget_files.py | 18 + scripts/inspect_heimdall_db.py | 22 + scripts/inspect_heimdall_schema.py | 28 + scripts/inspect_heimdall_users.py | 28 + scripts/inspect_heimdall_watchtower.py | 26 + scripts/inspect_homepage_backend.py | 25 + scripts/inspect_homepage_fs.py | 32 + scripts/inspect_homepage_info_widgets.py | 29 + scripts/inspect_homepage_k8s.py | 20 +- scripts/inspect_homepage_k8s_code.py | 27 + scripts/inspect_homepage_k8s_conf.py | 30 + scripts/inspect_homepage_k8s_longhorn.py | 20 + scripts/inspect_homepage_logs.py | 26 + scripts/inspect_homepage_pod.py | 30 + scripts/inspect_icon_component.py | 17 + scripts/inspect_k8s_multi.py | 27 + scripts/inspect_kuma_details.py | 29 + scripts/inspect_kuma_node.py | 28 + scripts/inspect_kuma_proxy.py | 26 + scripts/inspect_kuma_schema.py | 25 + scripts/inspect_lh_conf.py | 19 + scripts/inspect_longhorn_data.py | 27 + scripts/inspect_npm_adv.py | 25 + scripts/inspect_npm_hosts.py | 40 +- scripts/inspect_peanut_widget.py | 13 + scripts/inspect_portainer_glances.py | 21 + scripts/inspect_portainer_header.py | 26 + scripts/inspect_portainer_proxy.py | 28 + scripts/inspect_prom_manifest.py | 26 + scripts/inspect_prom_widget.py | 21 + scripts/inspect_routes.py | 13 + scripts/inspect_service_widgets.py | 19 + scripts/inspect_skeleton_settings.py | 17 + scripts/inspect_uptime_kuma.py | 30 + scripts/inspect_use_widget_api.py | 13 + scripts/inspect_widget_endpoints.py | 14 + scripts/inspect_widget_files.py | 16 + scripts/inspect_widget_proxies.py | 21 + scripts/list_app.py | 17 + scripts/list_homepage_widgets.py | 20 + scripts/list_st_entities.py | 23 + scripts/ls_peanut.py | 13 + scripts/patch_aerodrome_prom.py | 16 + scripts/populate_group.py | 26 + scripts/populate_status_page.py | 30 + scripts/populate_uptime_kuma.py | 170 +++ scripts/query_nas_from_swarm.py | 52 + scripts/query_synology_dsm_storage.py | 62 + scripts/read_widget_components.py | 19 + scripts/recover_uptime_kuma.py | 176 +++ scripts/remediate_heimdall.py | 138 +++ scripts/remediate_swarm_services.py | 46 + scripts/remote_inspect_heimdall.py | 31 + scripts/remove_pihole_stack.py | 28 + scripts/reset_grafana_pass.py | 15 + scripts/restart_homepage.py | 25 + scripts/restructure_homepage_cm.py | 34 + scripts/search_next_api.py | 15 + scripts/setup_argo_account.py | 16 + scripts/setup_homepage_rbac.py | 61 + scripts/setup_kuma_tags_status_pages.py | 298 +++++ scripts/sync_argocd_app.py | 44 + scripts/sync_homepage.py | 23 + scripts/test_aerodrome_prom.py | 6 + scripts/test_ai_metrics.py | 20 + scripts/test_argo_api.py | 8 + scripts/test_audit_devices.py | 19 + scripts/test_cluster_widgets.py | 76 ++ scripts/test_dcgm.py | 9 + scripts/test_dcgm_metrics.py | 12 + scripts/test_dcgm_nvml.py | 74 ++ scripts/test_dcgm_pull.py | 12 + scripts/test_deploy_dcgm.py | 59 + scripts/test_from_host.py | 25 + scripts/test_gitea_widget.py | 9 + scripts/test_glances_endpoint.py | 15 + scripts/test_gotify_health.py | 16 + scripts/test_grafana_admin.py | 8 + scripts/test_grafana_sa.py | 14 + scripts/test_grafana_token.py | 11 + scripts/test_grafana_yaml.py | 16 + scripts/test_group_sql.py | 20 + scripts/test_ha_template.py | 22 + scripts/test_homepage_backends.py | 31 + scripts/test_homepage_http.py | 11 + scripts/test_homepage_static.py | 13 + scripts/test_homepage_tempest_api.py | 19 + scripts/test_info_widgets.py | 16 + scripts/test_kubelet_token.py | 19 + scripts/test_kuma_failing_monitors.py | 23 + scripts/test_kuma_internal.py | 9 + scripts/test_kuma_live.py | 8 + scripts/test_kuma_slug.py | 9 + scripts/test_kuma_status_pages.py | 20 + scripts/test_peanut.py | 7 + scripts/test_pod_ha.py | 18 + scripts/test_portainer_auth.py | 13 + scripts/test_portainer_endpoint.py | 17 + scripts/test_portainer_key.py | 15 + scripts/test_prom_data.py | 14 + scripts/test_prom_rbac.py | 56 + scripts/test_pull_node_exporter.py | 14 + scripts/test_rancher_api.py | 19 + scripts/test_rancher_customapi.py | 18 + scripts/test_rancher_token.py | 30 + scripts/test_service_widgets_all.py | 23 + scripts/test_tempest_entities.py | 20 + scripts/test_urls_quick.py | 11 + scripts/update_grafana_manifest.py | 97 ++ scripts/update_grafana_sa.py | 14 + scripts/update_grafana_yaml.py | 129 +++ scripts/update_homepage_bookmarks.py | 45 + scripts/update_homepage_manifest.py | 194 ++++ scripts/update_prom_manifest.py | 147 +++ scripts/update_shepherd_env.py | 45 + scripts/upload_topology_to_homepage.py | 43 + scripts/verify_grafana_dashboard.py | 36 + scripts/verify_heimdall_clean.py | 29 + scripts/verify_kuma_live.py | 22 + scripts/verify_node_metrics.py | 16 + snarfnet-game-seeds/README.md | 73 ++ snarfnet-game-seeds/core/manager.py | 164 +++ snarfnet-game-seeds/scripts/setup-host.sh | 96 ++ .../seeds/enshrouded.seed.yaml | 42 + .../seeds/farming-simulator-25.seed.yaml | 41 + .../seeds/stationeers.seed.yaml | 44 + snarfnet-game-seeds/seeds/valheim.seed.yaml | 47 + snarfnet-game-seeds/seeds/vrising.seed.yaml | 43 + 270 files changed, 9709 insertions(+), 47 deletions(-) create mode 100644 docker-deployments/shepherd.yml create mode 100644 docs/snarfnet_homelab_topology.html create mode 100644 docs/snarfnet_homelab_topology.png create mode 100644 scripts/add_kuma_bookmarks.py create mode 100644 scripts/add_topology_to_homepage.py create mode 100644 scripts/add_zabbix_devices.py create mode 100644 scripts/apply_full_homepage.py create mode 100644 scripts/apply_grafana_dashboards.py create mode 100644 scripts/apply_grafana_server_side.py create mode 100644 scripts/apply_homepage.py create mode 100644 scripts/apply_prom_grafana.py create mode 100644 scripts/apply_prom_update.py create mode 100644 scripts/capture_screenshot.py create mode 100644 scripts/cat_prom_conf.py create mode 100644 scripts/check_aero_metrics_sources.py create mode 100644 scripts/check_argo_secret.py create mode 100644 scripts/check_argocd_apps.py create mode 100644 scripts/check_argocd_resources.py create mode 100644 scripts/check_authentik_proxy_providers.py create mode 100644 scripts/check_awx_monitor.py create mode 100644 scripts/check_cm_json.py create mode 100644 scripts/check_dcgm_status.py create mode 100644 scripts/check_deleted_at.py create mode 100644 scripts/check_deployment_spec.py create mode 100644 scripts/check_direct_apis.py create mode 100644 scripts/check_down_monitors.py create mode 100644 scripts/check_gaming_pc.py create mode 100644 scripts/check_glances_host.py create mode 100644 scripts/check_gotify_files.py create mode 100644 scripts/check_gotify_idx.py create mode 100644 scripts/check_gotify_mount.py create mode 100644 scripts/check_gotify_service.py create mode 100644 scripts/check_grafana_api.py create mode 100644 scripts/check_grafana_dashboards_live.py create mode 100644 scripts/check_grafana_diff.py create mode 100644 scripts/check_grafana_info.py create mode 100644 scripts/check_grafana_internal.py create mode 100644 scripts/check_grafana_load.py create mode 100644 scripts/check_grafana_mounts.py create mode 100644 scripts/check_grafana_rollout.py create mode 100644 scripts/check_grafana_secret.py create mode 100644 scripts/check_grafana_sqlite.py create mode 100644 scripts/check_grafana_success.py create mode 100644 scripts/check_ha_proxy_js.py create mode 100644 scripts/check_harvester_capacity.py create mode 100644 scripts/check_harvester_prom.py create mode 100644 scripts/check_harvester_storage.py create mode 100644 scripts/check_heartbeats.py create mode 100644 scripts/check_heimdall_active.py create mode 100644 scripts/check_heimdall_integrity.py create mode 100644 scripts/check_heimdall_pinned.py create mode 100644 scripts/check_heimdall_python.py create mode 100644 scripts/check_homepage_api.py create mode 100644 scripts/check_homepage_info.py create mode 100644 scripts/check_homepage_pod_logs.py create mode 100644 scripts/check_homepage_rbac.py create mode 100644 scripts/check_homepage_routes.py create mode 100644 scripts/check_icon_resolver.py create mode 100644 scripts/check_kuma_db_backups.py create mode 100644 scripts/check_kuma_details.py create mode 100644 scripts/check_kuma_live_status.py create mode 100644 scripts/check_kuma_live_status2.py create mode 100644 scripts/check_kuma_logs.py create mode 100644 scripts/check_kuma_mariadb.py create mode 100644 scripts/check_kuma_notif.py create mode 100644 scripts/check_kuma_slugs.py create mode 100644 scripts/check_kuma_sp_schema.py create mode 100644 scripts/check_live_cm.py create mode 100644 scripts/check_longhorn_source.py create mode 100644 scripts/check_longhorn_svc.py create mode 100644 scripts/check_mdi_icons.py create mode 100644 scripts/check_monitoring_ns.py create mode 100644 scripts/check_monitoring_spaceport.py create mode 100644 scripts/check_nas_backups.py create mode 100644 scripts/check_nas_ports.py create mode 100644 scripts/check_nvidia_host.py create mode 100644 scripts/check_nvidia_output.py create mode 100644 scripts/check_pkg_icons.py create mode 100644 scripts/check_pod_logs.py create mode 100644 scripts/check_ports.py create mode 100644 scripts/check_prom_elsewhere.py create mode 100644 scripts/check_prom_live_targets.py create mode 100644 scripts/check_prom_metrics.py create mode 100644 scripts/check_prom_pods.py create mode 100644 scripts/check_prom_sa.py create mode 100644 scripts/check_prom_targets.py create mode 100644 scripts/check_prom_targets2.py create mode 100644 scripts/check_prometheus.py create mode 100644 scripts/check_prometheus_spaceport.py create mode 100644 scripts/check_real_gotify.py create mode 100644 scripts/check_running_mounts.py create mode 100644 scripts/check_sc_aerodrome.py create mode 100644 scripts/check_shepherd.py create mode 100644 scripts/check_spacedock_prom.py create mode 100644 scripts/check_status_page.py create mode 100644 scripts/check_status_page_schema.py create mode 100644 scripts/check_storage_and_drives.py create mode 100644 scripts/check_swarm_networks.py create mode 100644 scripts/check_swarm_services_all.py create mode 100644 scripts/check_tmp_file.py create mode 100644 scripts/check_unhealthy_pods.py create mode 100644 scripts/check_unifi_client.py create mode 100644 scripts/check_zabbix_templates.py create mode 100644 scripts/create_argo_token.py create mode 100644 scripts/deploy_heimdall_fixed.py create mode 100644 scripts/deploy_node_exporter.py create mode 100644 scripts/deploy_node_exporter_spaceport.py create mode 100644 scripts/deploy_shepherd.py create mode 100644 scripts/find_all_prom.py create mode 100644 scripts/find_all_weather_entities.py create mode 100644 scripts/find_ha_api.py create mode 100644 scripts/find_ha_api2.py create mode 100644 scripts/find_ha_entities.py create mode 100644 scripts/find_homepage_icons.py create mode 100644 scripts/find_longhorn_config.py create mode 100644 scripts/find_nvml.py create mode 100644 scripts/find_peanut_code.py create mode 100644 scripts/find_proxy.py create mode 100644 scripts/find_proxy_files.py create mode 100644 scripts/find_settings.py create mode 100644 scripts/find_uptimekuma_files.py create mode 100644 scripts/find_utils.py create mode 100644 scripts/fix_gotify_sort_key.py create mode 100644 scripts/fix_homepage_icons.py create mode 100644 scripts/fix_homepage_manifest.py create mode 100644 scripts/generate_ai_dashboard.py create mode 100644 scripts/generate_systems_container_dashboards.py create mode 100644 scripts/get_argo_token.py create mode 100644 scripts/get_gitea_token.py create mode 100644 scripts/get_zabbix_metadata.py create mode 100644 scripts/grep_icon_source.py create mode 100644 scripts/inspect_85776.py create mode 100644 scripts/inspect_api_pages.py create mode 100644 scripts/inspect_app_tree.py create mode 100644 scripts/inspect_customapi.py create mode 100644 scripts/inspect_glances_proxy.py create mode 100644 scripts/inspect_grafana_proxy.py create mode 100644 scripts/inspect_grafana_widget_component.py create mode 100644 scripts/inspect_ha_widget_code.py create mode 100644 scripts/inspect_ha_widget_files.py create mode 100644 scripts/inspect_heimdall_db.py create mode 100644 scripts/inspect_heimdall_schema.py create mode 100644 scripts/inspect_heimdall_users.py create mode 100644 scripts/inspect_heimdall_watchtower.py create mode 100644 scripts/inspect_homepage_backend.py create mode 100644 scripts/inspect_homepage_fs.py create mode 100644 scripts/inspect_homepage_info_widgets.py create mode 100644 scripts/inspect_homepage_k8s_code.py create mode 100644 scripts/inspect_homepage_k8s_conf.py create mode 100644 scripts/inspect_homepage_k8s_longhorn.py create mode 100644 scripts/inspect_homepage_logs.py create mode 100644 scripts/inspect_homepage_pod.py create mode 100644 scripts/inspect_icon_component.py create mode 100644 scripts/inspect_k8s_multi.py create mode 100644 scripts/inspect_kuma_details.py create mode 100644 scripts/inspect_kuma_node.py create mode 100644 scripts/inspect_kuma_proxy.py create mode 100644 scripts/inspect_kuma_schema.py create mode 100644 scripts/inspect_lh_conf.py create mode 100644 scripts/inspect_longhorn_data.py create mode 100644 scripts/inspect_npm_adv.py create mode 100644 scripts/inspect_peanut_widget.py create mode 100644 scripts/inspect_portainer_glances.py create mode 100644 scripts/inspect_portainer_header.py create mode 100644 scripts/inspect_portainer_proxy.py create mode 100644 scripts/inspect_prom_manifest.py create mode 100644 scripts/inspect_prom_widget.py create mode 100644 scripts/inspect_routes.py create mode 100644 scripts/inspect_service_widgets.py create mode 100644 scripts/inspect_skeleton_settings.py create mode 100644 scripts/inspect_uptime_kuma.py create mode 100644 scripts/inspect_use_widget_api.py create mode 100644 scripts/inspect_widget_endpoints.py create mode 100644 scripts/inspect_widget_files.py create mode 100644 scripts/inspect_widget_proxies.py create mode 100644 scripts/list_app.py create mode 100644 scripts/list_homepage_widgets.py create mode 100644 scripts/list_st_entities.py create mode 100644 scripts/ls_peanut.py create mode 100644 scripts/patch_aerodrome_prom.py create mode 100644 scripts/populate_group.py create mode 100644 scripts/populate_status_page.py create mode 100644 scripts/populate_uptime_kuma.py create mode 100644 scripts/query_nas_from_swarm.py create mode 100644 scripts/query_synology_dsm_storage.py create mode 100644 scripts/read_widget_components.py create mode 100644 scripts/recover_uptime_kuma.py create mode 100644 scripts/remediate_heimdall.py create mode 100644 scripts/remediate_swarm_services.py create mode 100644 scripts/remote_inspect_heimdall.py create mode 100644 scripts/remove_pihole_stack.py create mode 100644 scripts/reset_grafana_pass.py create mode 100644 scripts/restart_homepage.py create mode 100644 scripts/restructure_homepage_cm.py create mode 100644 scripts/search_next_api.py create mode 100644 scripts/setup_argo_account.py create mode 100644 scripts/setup_homepage_rbac.py create mode 100644 scripts/setup_kuma_tags_status_pages.py create mode 100644 scripts/sync_argocd_app.py create mode 100644 scripts/sync_homepage.py create mode 100644 scripts/test_aerodrome_prom.py create mode 100644 scripts/test_ai_metrics.py create mode 100644 scripts/test_argo_api.py create mode 100644 scripts/test_audit_devices.py create mode 100644 scripts/test_cluster_widgets.py create mode 100644 scripts/test_dcgm.py create mode 100644 scripts/test_dcgm_metrics.py create mode 100644 scripts/test_dcgm_nvml.py create mode 100644 scripts/test_dcgm_pull.py create mode 100644 scripts/test_deploy_dcgm.py create mode 100644 scripts/test_from_host.py create mode 100644 scripts/test_gitea_widget.py create mode 100644 scripts/test_glances_endpoint.py create mode 100644 scripts/test_gotify_health.py create mode 100644 scripts/test_grafana_admin.py create mode 100644 scripts/test_grafana_sa.py create mode 100644 scripts/test_grafana_token.py create mode 100644 scripts/test_grafana_yaml.py create mode 100644 scripts/test_group_sql.py create mode 100644 scripts/test_ha_template.py create mode 100644 scripts/test_homepage_backends.py create mode 100644 scripts/test_homepage_http.py create mode 100644 scripts/test_homepage_static.py create mode 100644 scripts/test_homepage_tempest_api.py create mode 100644 scripts/test_info_widgets.py create mode 100644 scripts/test_kubelet_token.py create mode 100644 scripts/test_kuma_failing_monitors.py create mode 100644 scripts/test_kuma_internal.py create mode 100644 scripts/test_kuma_live.py create mode 100644 scripts/test_kuma_slug.py create mode 100644 scripts/test_kuma_status_pages.py create mode 100644 scripts/test_peanut.py create mode 100644 scripts/test_pod_ha.py create mode 100644 scripts/test_portainer_auth.py create mode 100644 scripts/test_portainer_endpoint.py create mode 100644 scripts/test_portainer_key.py create mode 100644 scripts/test_prom_data.py create mode 100644 scripts/test_prom_rbac.py create mode 100644 scripts/test_pull_node_exporter.py create mode 100644 scripts/test_rancher_api.py create mode 100644 scripts/test_rancher_customapi.py create mode 100644 scripts/test_rancher_token.py create mode 100644 scripts/test_service_widgets_all.py create mode 100644 scripts/test_tempest_entities.py create mode 100644 scripts/test_urls_quick.py create mode 100644 scripts/update_grafana_manifest.py create mode 100644 scripts/update_grafana_sa.py create mode 100644 scripts/update_grafana_yaml.py create mode 100644 scripts/update_homepage_bookmarks.py create mode 100644 scripts/update_homepage_manifest.py create mode 100644 scripts/update_prom_manifest.py create mode 100644 scripts/update_shepherd_env.py create mode 100644 scripts/upload_topology_to_homepage.py create mode 100644 scripts/verify_grafana_dashboard.py create mode 100644 scripts/verify_heimdall_clean.py create mode 100644 scripts/verify_kuma_live.py create mode 100644 scripts/verify_node_metrics.py create mode 100644 snarfnet-game-seeds/README.md create mode 100644 snarfnet-game-seeds/core/manager.py create mode 100644 snarfnet-game-seeds/scripts/setup-host.sh create mode 100644 snarfnet-game-seeds/seeds/enshrouded.seed.yaml create mode 100644 snarfnet-game-seeds/seeds/farming-simulator-25.seed.yaml create mode 100644 snarfnet-game-seeds/seeds/stationeers.seed.yaml create mode 100644 snarfnet-game-seeds/seeds/valheim.seed.yaml create mode 100644 snarfnet-game-seeds/seeds/vrising.seed.yaml diff --git a/docker-deployments/heimdall.yml b/docker-deployments/heimdall.yml index 95dd37f..71e10d1 100644 --- a/docker-deployments/heimdall.yml +++ b/docker-deployments/heimdall.yml @@ -1,20 +1,33 @@ +version: "3.8" + services: heimdall: image: lscr.io/linuxserver/heimdall:latest ports: - - "85:80" - - "403:443" + - target: 80 + published: 85 + mode: ingress + - target: 443 + published: 403 + mode: ingress environment: - PUID=1000 - PGID=1000 - TZ=America/New_York volumes: - - heimdall_config:/config + - type: bind + source: /var/lib/docker-data/heimdall/config + target: /config + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.hostname == snshpd4lnxswm01 + restart_policy: + condition: on-failure -volumes: - heimdall_config: - driver: local - driver_opts: - type: nfs - o: "addr=14.10.10.71,rw,nfsvers=4" - device: ":/volume1/docker/heimdall/" \ No newline at end of file +networks: + default: + name: homelab_public + external: true diff --git a/docker-deployments/shepherd.yml b/docker-deployments/shepherd.yml new file mode 100644 index 0000000..426ed39 --- /dev/null +++ b/docker-deployments/shepherd.yml @@ -0,0 +1,21 @@ +version: "3.8" + +services: + shepherd: + image: containrrr/shepherd:latest + environment: + - SLEEP_TIME=24h + - IGNORELIST_SERVICES=nginx-proxy-manager_app nginx-proxy-manager_backup + - UPDATE_OPTIONS=--with-registry-auth + - ROLLBACK_FAILURE=true + - TZ=America/New_York + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.role == manager + restart_policy: + condition: on-failure diff --git a/docs/snarfnet_homelab_topology.html b/docs/snarfnet_homelab_topology.html new file mode 100644 index 0000000..fbccd05 --- /dev/null +++ b/docs/snarfnet_homelab_topology.html @@ -0,0 +1,1029 @@ + + + + + + SnarfNet Homelab Architecture & Topology + + + + + + +
+
+
+ 🪐 +

+ SnarfNet | Infrastructure & Topology +

+ + ALL CLUSTERS ACTIVE + +
+

+ Complete operational schematic mapping dual-WAN routing, VLAN segmentation, 4 compute clusters (Aerodrome, Spaceport, Spacedock, Shipyard), AI inference fabrics, and storage layers. +

+
+ + +
+
+ + ⌘K +
+ +
+
Topology Release
+
Phase 8 • Nov 2026
+
+
+
+ + +
+ + +
+ + +
+
+
+

+ + Network VLAN Fabric +

+ 8 Zones +
+ +
+
+
+ VLAN 1 LAN / Core +
UDM-SE Gateway, Core Switches
+
+ 14.44.4.0/25 +
+ +
+
+ VLAN 2 Management +
APs, USP RPS, iDRAC, Switches
+
+ 140.44.44.0/24 +
+ +
+
+ VLAN 20 Compute Fleet +
K3s Aerodrome, Spaceport, Swarm
+
+ 140.44.4.0/25 +
+ +
+
+ VLAN 3 Spacedock Lab +
Harvester HCI Virtualization
+
+ 140.44.1.0/24 +
+ +
+
+ VLAN 40 Storage SAN +
SnarfNAS (DS416play), SN-NAS (RS810+)
+
+ 14.10.10.0/25 +
+ +
+
+ VLAN 50 Smart Home +
Home Assistant, NUT, Tempest
+
+ 14.4.4.0/25 +
+ +
+
+ VLAN 60 HA Interconnect +
Keepalived VIPs & Sync Heartbeats
+
+ 140.4.4.0/25 +
+ +
+
+ VLAN 30 Media Clients +
Smart TVs, Apple TVs, Streaming
+
+ 192.168.1.0/25 +
+
+
+ + +
+

Topology Key

+
+
+ Core Backbone +
+
+ K3s Compute +
+
+ Harvester HCI +
+
+ Swarm Fleet +
+
+ Cloudflare / Tunnel +
+
+ High Availability +
+
+
+
+ + +
+ + +
+
+ +
+
Public Internet
+
Primary WAN: 174.106.252.96
+
+
+ + +
+ +
+
+ WAN 1: Fiber ONT +
+
1 Gbps Symmetric
+
10G SFP+ to UDM-SE
+
+ + +
+
+ WAN 2: 5G Backup +
+
Cellular Standby
+
GbE RJ45 Failover
+
+
+ + +
+ +
+
+ + +
+
+ +
+
+
+ šŸ›”ļø +
+
+

+ UniFi Dream Machine Special Edition (UDM-SE) +

+
Gateway VIP: 14.44.4.1 • UniFi OS v4.1 • WireGuard Server
+
+
+
+ + 10G SFP+ Backbone + +
+
+ + +
+
+
+ ⚔ Routing & QoS +
+
    +
  • • Inter-VLAN Wire-Speed L3
  • +
  • • Smart Queues & FQ-CoDel
  • +
  • • VLAN 20 Compute Priority
  • +
+
+ +
+
+ šŸ”’ Edge Security +
+
    +
  • • Suricata IPS/IDS Level 5
  • +
  • • Deep Packet Inspection
  • +
  • • Strict LAN/IoT Isolation
  • +
+
+ +
+
+ šŸŽÆ Core Port Forwards +
+
    +
  • • 80/443 → 140.44.4.74 (NPM Host)
  • +
  • • 10051/52 → 140.44.4.51 (Zabbix)
  • +
  • • 8443/27015 → 14.4.4.15 (PC)
  • +
+
+
+
+ + +
+
+
šŸ”€
+
+
USW Enterprise Core Switches
+
2.5G PoE+ to APs, 10G SFP+ to Racks
+
+
+ +
+
šŸ“¶
+
+
UniFi Wi-Fi 6 Enterprise Fleet
+
SSIDs: SnarfNet-IoT, SnarfNet-5G, Trusted
+
+
+
+ +
+ + +
+ + +
+

+ + Edge Access & Ingress +

+ +
+
+
+ Cloudflare Zero Trust + cloudflared +
+

Outbound-only secure tunnel routes *.snarfnet.net without opening inbound WAN router ports.

+
+ +
+
+ Tailscale Mesh VPN + 100.64.0.0/10 +
+

Subnet routers provide direct wireguard access to all 8 VLANs from mobile devices.

+
+ +
+
+ Authentik Conditional MFA + SSO & Auth +
+

Client IP evaluation: Internal VLANs bypass MFA for frictionless use; external WAN enforces Passkeys/MFA.

+
+
+
+ + +
+
+

+ 🧠 AI Inference Pipeline +

+ Tesla T4s + Hailo +
+ +
+
+ 1. Frontend + Open WebUI (:8080) +
+
↓
+
+ 2. Reasoning + vLLM DeepSeek-R1 +
+
↓
+
+ 3. Execution + Triton + Qdrant +
+
+
+ +
+ +
+ + +
+
+
+

+ Compute Clusters & Workload Fleet +

+

All compute clusters operate on VLAN 20 (140.44.4.0/25) with dedicated VIPs and Longhorn block fabrics.

+
+
+ 29 Physical Nodes + 400+ Containers +
+
+ + +
+ + +
+
+
+
+
+ +

Cluster A: Aerodrome

+ Rancher Local +
+
+ 10 Nodes • 3 Control Plane + 7 Workers • Debian 12 (arm64) • MetalLB: 140.44.4.28-39 +
+
+
+
40 CPU Cores
+
65.5 GiB RAM Total
+
+
+ + +
+
+ ctl01-03: 140.44.4.11-13 +
+
+ wrk01-04: 140.44.4.21-24 +
+
+ wrk05-07: 140.44.4.25-27 +
+
+
Storage Type: Longhorn
+
Storage Total: 818 GiB
+
+
+ + +
+
Active Workloads & VIPs
+
+ +
+
+
+ šŸ„ Rancher Management +
+
aerodrome.snarfnet.net
+
+ :443 +
+ +
+
+
+ šŸ”‘ Authentik SSO Portal +
+
authentik.snarfnet.net
+
+ VIP .29 +
+ +
+
+
+ šŸ“Š Grafana Telemetry +
+
grafana.snarfnet.net
+
+ VIP .32 +
+ +
+
+
+ šŸ“ˆ Prometheus TSDB +
+
39 Targets (cAdvisor + Nodes)
+
+ :9090 +
+ +
+
+
+ 🟢 Uptime Kuma Probes +
+
uptime.snarfnet.net (35 Mon.)
+
+ VIP .28 +
+ +
+
+
+ šŸ¦… AWX Ansible Controller +
+
awx.snarfnet.net
+
+ VIP .30 +
+ +
+
+
+
+ + +
+
+
+
+
+ +

Cluster B: Spaceport

+ GitOps Core +
+
+ 10 Nodes • 4 Control Plane + 6 Workers • RPi 5 (arm64) • MetalLB: 140.44.4.57-65 +
+
+
+
40 CPU Cores
+
54.0 GiB RAM Total
+
+
+ + +
+
+ ctl01-04: 140.44.4.41-44 +
+
+ wrk01-03: 140.44.4.51-53 +
+
+ wrk04-06: 140.44.4.54-56 +
+
+
Storage Type: Longhorn
+
Storage Total: 1.14 TiB
+
+
+ + +
+
Active Workloads & VIPs
+
+ +
+
+
+ šŸ™ ArgoCD Reconciler +
+
argo.snarfnet.net (15 Apps)
+
+ Node .51 +
+ +
+
+
+ šŸµ Gitea Repositories +
+
git.snarfnet.net
+
+ VIP .62 +
+ +
+
+
+ šŸ  Homepage Dashboard +
+
homepage.snarfnet.net
+
+ VIP .60 +
+ +
+
+
+ šŸ›”ļø Zabbix Core Server +
+
zabbix.snarfnet.net (28 Hosts)
+
+ VIP .61 +
+ +
+
+
+ āš™ļø Semaphore Ansible +
+
semaphore.snarfnet.net
+
+ VIP .58 +
+ +
+
+
+ šŸ‘Øā€šŸ’» Coder Dev Cloud +
+
coder.snarfnet.net
+
+ VIP .63 +
+ +
+
+
+
+ + +
+
+
+
+
+ +

Cluster C: Spacedock (Harvester HCI)

+ GPU Inference +
+
+ 4 Physical Nodes • AMD64 Server Architecture • Dedicated Tesla T4 AI Compute +
+
+
+
224 CPU Cores
+
503 GiB RAM Total • 4x Tesla T4 GPUs
+
+
+ + +
+
+ Node 01: 140.44.4.81 +
+
+ Node 02: 140.44.4.82 +
+
+ Node 03: 140.44.4.83 +
+
+ Node 04: 140.44.4.84 +
+
+ + +
+
Active Workloads & Inference Services
+
+ +
+
+
+ 🌾 Harvester HCI Console +
+
harvester.spacedock.snarfnet.net
+
+ VLAN 3 +
+ +
+
+
+ 🧠 vLLM DeepSeek-R1-14B +
+
Reasoning Planner (.81)
+
+ :30805 +
+ +
+
+
+ šŸ’Ž vLLM Gemma-4-12B +
+
Coding Specialist (.82)
+
+ :30804 +
+ +
+
+
+ šŸ¤– vLLM Qwen 2.5-7B +
+
Instruction Following (.84)
+
+ :30800 +
+ +
+
+
+ šŸ”± Triton Inference Server +
+
Decision Engine (.83)
+
+ :30803 +
+ +
+
+
+ ⚔ Qdrant Vector Engine +
+
Semantic Vector Store (.82)
+
+ :30633 +
+ +
+
+
+
+ + +
+
+
+
+
+ +

Cluster D: Shipyard (Docker Swarm)

+ Swarm VIP: 140.44.4.70 +
+
+ 5 RPi 5 Nodes • Keepalived VRRP VIP • Host-Mode Ingress • Portainer EE 2.45 +
+
+
+
20 CPU Cores
+
20.0 GiB RAM Total
+
+
+ + +
+
+ Swm01: .71 +
+
+ Swm02: .72 +
+
+ Swm03: .73 +
+
+ NPM: .74 +
+
+ Swm05: .75 +
+
+ + +
+
Active Workloads & Stacks
+
+ +
+
+
+ 🚢 Portainer Enterprise +
+
shipyard.snarfnet.net
+
+ :9443 +
+ +
+
+
+ 🌐 NGINX Proxy Manager +
+
Host Mode Ingress (.74)
+
+ :80/:443 +
+ +
+
+
+ šŸ”” Gotify Notifications +
+
gotify.snarfnet.net
+
+ :8090 +
+ +
+
+
+ 🧭 Heimdall Landing +
+
portal.snarfnet.net
+
+ :85 +
+ +
+
+
+ šŸ’» MeshCentral Remote +
+
mesh.snarfnet.net
+
+ :8086 +
+ +
+
+
+ šŸ“¦ Homebox Inventory +
+
homebox.snarfnet.net
+
+ :3100 +
+ +
+
+
+
+ +
+
+ + +
+ + +
+
+
+ šŸ’¾ +

Storage SAN & Distributed Volumes (VLAN 40)

+
+ 14.10.10.0/25 +
+ +
+ +
+
+
+ SnarfNAS (Synology DS416play) + 14.10.10.72 +
+

Synology DiskStation DS416play desktop appliance, primary NFS/SMB target, media libraries, Time Machine, and Hyper Backup replication.

+
+
+
Drives: 4 Drives
+
Total Storage: 16 TiB Total
+
+
+ + +
+
+
+ SN-NAS (Synology RS810+) + 14.10.10.71 +
+

Synology RackStation RS810+ 1U rackmount appliance, dedicated Btrfs backup pool, iSCSI targets, and Snapshot Replication.

+
+
+
Drives: 4 Drives
+
Total Storage: 37 TiB Total
+
+
+ + +
+
+
+ Longhorn Spaceport Storage + 140.44.4.41-56 +
+

Replicated distributed block storage across Spaceport workers backing Gitea, Semaphore, Jenkins, and Technitium DNS.

+
+
+
Drives: 10 Disks
+
Total Storage: 1.14 TiB Total
+
+
+ + +
+
+
+ Longhorn Aerodrome Storage + 140.44.4.11-27 +
+

Replicated low-latency distributed block storage backing Prometheus, Grafana, Authentik, AWX, and databases.

+
+
+
Drives: 7 Disks
+
Total Storage: 818 GiB Total
+
+
+ + +
+
+
+ + + Harvester HCI Distributed Storage (Spacedock Cluster) + + 140.44.1.0/24 (VLAN 3) +
+

Multi-node hypervisor storage fabric across 4 physical Harvester nodes backing VM virtual disks, container rootfs, and AI model inference storage.

+
+
+
Drives: 35 Disks (across 4 nodes)
+
Total Storage: 46.41 TiB Total (46.22 TiB avail)
+
+
+
+
+ + +
+
+
+ šŸ” +

Smart Home & Edge AI Fabric (VLAN 50)

+
+ 14.4.4.0/25 +
+ +
+
+
+ Home Assistant Yellow + 14.4.4.20:8123 +
+

Primary smart home automation hub, Zigbee/Z-Wave networks, Matter, local voice processing.

+
+ +
+
+ Tempest Weather Station + Direct HA Telemetry +
+

Local UDP & cloud backyard weather station (Temp, Feels Like, Humidity, Wind Speed rounded to 0.1°).

+
+ +
+
+ NUT Master Daemon + 14.4.4.44:3493 +
+

Network UPS Tools master daemon monitoring central battery units, broadcast shutdown signals.

+
+ +
+
+ Hailo-8 Edge NPU Node + 140.44.4.7:8000 +
+

Dedicated Raspberry Pi 5 with 26 TOPS Hailo-8 AI acceleration running lightweight local LLMs.

+
+
+
+ +
+ +
+ + + + + + diff --git a/docs/snarfnet_homelab_topology.png b/docs/snarfnet_homelab_topology.png new file mode 100644 index 0000000000000000000000000000000000000000..326d93770e18ab43c4adbacd386944df1f509159 GIT binary patch literal 807517 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%0ARWM&glYI*~b0;u{ETA!u6yYK>58^lfPX6?A9lf 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�ixk0`P!0S8KVV*;6&M#f80!;hA_9h|ehro1xa zqXMKNY{ve0)s%5*Kt5r|4+xv=z%eFd4d6Ecma%^kbzIJCEc&@DO5WKZqW4tsMQ=h9 zpi;}W_cXWZgnugk_UDdoQB1Mu%nt8y#d%>z@kyN%15vK040M-Vgn`fZaq>_%nyDbT zDyNS2wPM)~@9N}IeToWskz`FVEPKZyrVTrrE znKV96q)1HpPD1kj9WJdnDK&}^V7a;`rl+Hc69yZ}3aFH~kWWvLzp?RvFN!%6tonNh zB+5^UD&*`O+@FECy4{}NxdBZCSoqrcTkm8V{4v%`etbM0xE-(QT>R>1oXwu|W_B0J zr{1a~n%=Xs-gmsmugy=ZqE|jv)L2Wj`^IQ{Fw$AJtykR?i!`Mn zugSp2S|DgRm~BC5-7Z^%T!(e7?3}d%;OYeDVo}5VHz?QJzXYK?tt zP=TaER{Mh5Wr>BQXnKw3%RXDV0*fobfnQSP)y>5X1r2rijKu|oW2w%!YdxDC7bLs& zm-VbuA6Bo=2JAUGSy@Za<6 zUgCpTF(~CT^9U>38`)oj@q|i=3h~{~TVL`V=tI`OaV$>d$N7Hw6+*7>OCAxg`0Bn} z?KdA?k6sNGk+4t5b`MsS;&fj#y$Cgdl#hg}bDuh!+rtIzW*+GPL9o!ifgX!`KRRhR|1aUOw^COA=jJo> zGa<%q#n5`cBM)4!E4_k%+MgdSo{B>^k^7uU2CsDw>R^df`#mL+$`5BT!9&4`b|aSS zeRZNcyv?TZXB!9TZ*`ANV}*IEkJE&5L8hMJP5LjigRk5C<4?)yZX4HHsb7Cc$CDhj zC`qf^#iJFX@gCsguiMS^ayL^yQWZlC>V=oj7bZ5rlW}8Ro=+*A{vOtHqK_`?_`+kE z{9)h9Gc%#Er#o8;PQDyWIjEL+K}J6#3t$8St z(s`XT;?{Xz6vy%jCTehpu)TRxn*Yv1tGq8r99q)$)dH~WrEK2_LsqRr=ex8f0CD39 z!A=*&rg;W=$WOuF000#{nz#^P*j40r^GAVSz(!A6%+D(;E373YPKi`IBXi^La5?Fe zl~i9QppgjhCuYoJC0y&`&wn9gbIypF`HELMA2~Ue3hlRX0^1|UQDWeF(FR8gTe4UO zn-Ao6k6bb6;8g;=u{Vv^{JgNj@bGWT{h_D8;3ee(0cmbCc$Jv%!)b9q^P6FiQdKaqX* zf@MtdPz7sHK8Dt(m$PYSdsl{gDSE-Bvg7PEmZ}}#o$|a&0}=MLoV4A*wYZ)HA1I;} z`%|`-LXvrdBjo>|2G7inX0AaZ{5D$ z5TIG3C(UyI!paO;L?%{=aQ*nZLvBXi-)(KUBm&YuW52~BpQ%$-GkJ?|3N`lI{Pw`B zVTMJz8p`gESmSEzABC=?S z*J&{(dVod1ar!1yxKks-0?2gek3PrWH~JvTj|nF8IQP07KV%IcXtg>W6?e%KaSU22 z$~!trrN__Bd~C5nP8C|yck4Uu36-{DqQmv_X?R_>L8C>F;gb{|LdG}(a{pksy1378 zW%TuKdw-v@xyWkt0nQn4HIv!CZ0l$^J+mOV^V9kBrcG&Sw%7UD=FCjX-Q9P3A#)}@ zo83lxZs3KhzV|)8@M>mKl7{A|<&~9=%K{3i#pbiZ{wBxe(;ftyKa0Lbf=1N!+igJS z<)`h5e6;ZbtW=LDbVR<%!YWECea~wY_NjRaRkGZ-gF?0thU+dP7f@hFz>Pz#nG1LG zx4(?Jb#w(gno5Z$Gl} zKiI=hj5a?|s=f8<&#kYoSCfQ^*-WQi!MmhB-&SXzWFvH8;^SWD2q9d~Mt@(NZL*v! z$u%+wg*Z%w5=y$k&=m-OtSmwaxG5nS4jnN^AD9x)Zy5t)8=5ikIi?*?tER z$%Q+SJqWYjcI(Y;9c~ph<*rRzkH^RLuKId`9~IkS5;4a=@YYI-R3$Es>ZbVlhKJb) zXPzg*GLqX*ebv-Fl=K#^gjWsq5eBTOb^twP7tj=E&V#R#wY8=8?AY;A5j0b7td)D! z?*xEbjW^^6 z4>g{^OoG!`J#`O1CEw^Aj~~SC+8cXga+WX4&X-?y8zX}or49_4M+_b>D`EhG2klW@ z-unwyP4C(e-vH)ukGR#!Ut~YVjb=(~MJMk28N#|*W!PL@TFb{7BQW}#_7lVrY}ZPOTiMZB zR`>wnMSwe9iHXs2!8^q$~-WOF*rXeMQAq{@*`A z0Ub5v#kcb)}2MvhwD`jIDD{nj-z!yvaHGrk+2B!vnIduvqR0Xh3Fr=r5^gjDr`@R8I%9du;NOSn})erE37e`^Ybu z#)TU}r6_9=ft{#}9}Cd|3%rSDex^Lt0EpV7=^Ae;Kq-6n74mFs*&22*YH-NtRM>7! ztY3y}LNXYfxeUZYMCiKGpm z>4+QGfY_K8B#jUSm9R0NZyyQy&Wly;rjW%DYTU0F2&W*dgbW2bPl7Ui0fA#5OVAA5 zq?|6YvVh_D`>T%|X@Ot0GXXj|Qqg3$lBc=dHw5y5<_6mRf#wj9A|N=TM<*nh6Ay*X zGx{??v!Xad5-S6+X9D=kSr zA#_2$FW0#YOvr={MANb?D_HW!j*q^1!^R*kC%pOSp_3?>9usi{L+}>uZWU`ISK2%# zS)svU1PHmk!R(bbtZWhMuRaC_+X?xl=S?wW$sMEIc%pn85vpjVUa*tSkyI z#l^_Y4PTaC$^&*+rqki_wG8?T-FniKjz92V(5&r!$$&kvww40(aA^|>`zL2gw>edO zj2iE9kcJt?A?^4*2fsMjJ=$XawA(x!Hy95@i`tt(5{Vj&$4C$ylJ?_!qcjb{*dXfA zSnT!D$6x|P;P~ph8`G5}wY7=GeezcQ9~Q8!`jg##8>+UAXlrj_R@ahV)|2B67% z+D?~dp}ST?3ev*ki^j)8!RzF??OBWb700W+_Rt^9{=!@^dgIR*1`ys3omtEro3S0R zAfI3L`~L+HPM)wLAO}z9eI9`I)Nf5X5Kedm@#xI%WLO2Xnf96KHLT@NBBfAa7_!l$ zy~aTLSXGXul~#2yb{tC=PqDf?JJXXiYE8Lco4nO5o39=j;oo|O8c=0dI8s@T^gfX05a!4r82&q`9e>}yn_tf5%)2BWLT``juXYBAvC0h028{2 z;*?S*1@;>MBqm-)M^9h69`D-T_iQYc1-34ZzoX72kNEw&sKBC-;wPy`eN#&*wA?Jt zR`s;+6KPokku?tv-FE;@YR<3CjUK_!CFdZzh?=L*)U4+6K6!LV@q$roNLpBiPKm{U zUvW?w6koV04Fx#Rbk7P_35Bcv-XsXY1O7;tf=Gt_l`t=(m? zG&%W6LyOEOU+x3foiIEosmr=+7UyxBRBSRcK9F)lg#g>^kJLx zUD!$+i)z{=!oSSG#dq)2Oti%-p#3Hw;QkSw5D+JMxwd8|bAFBsvABW59ufVEd^CBL zzR2Qe%&4pr%2V?Bhe@hzejimbUR4Ss2rVj^!LK4Wi&m*gv*|rYxb>kfQ46KJqGz^ zk_$pSX!a{vMpuG@lzMuU`}-xLq6t60)5V99>wjS>l>FjoON#DREz+xz-i6c92H0Jnd&-a90ElADa{Lh6Bhwg2K&q?4LSgYHi zbHijuSs5dz#HPWGZ&h6#Kc|HKzA`t7YGYw*VR`$8tw%svL4zQRutz`j$iL3&OVyMm zgo(3Fu&(3xpL(5?&icLC{+qvh0}>No5Jg{u|K@c(BPL;jcvOB(ieujxjr|5c&2krE zJ%WBwQd(J3p2tZ@JHNUzBk`npB1i=<_q2tGoQ=Hwp07Gv>vmC?A?aglYd~#1wLtm6 zTE00W__?a<-tqZ*(gn&&AU+Wb?b_SG-8D%}N^3!stL>`J$(e<#^9v}$y{t1`39NvCNjqi4)x3Bp&l{2*MKpw6;s3#!BH2C7x%;sTPrV%q zp7VoSJdcDnKRYYk<;pyG90G-KjLi~kPZ2*UVeH0Ha?K1(_lvLq!Ki&{vh`O_mA(ZJ z56-hcl$p(1SaBv52 zgb-DcB_+?y(danDMk+^9A5hiLy^=BZUssKyc(I)@n2Qi-;#5_&)5!Z!SXd}5I2#D)tWjVWCSIclgQs3qNP+82H|Tcsg z|KOG$)ZSojrC4JIDULl6mh0ClmjXIHpG{SI@ql7&x0kP83{0-`y5yl7VQ6kA8lpySsalzFx*x@j(nuBOly-9TN#%dtXx6}M}A z6L44ius`*BiOlbYK1CI2&O*l*E}uudDvf5I@|5&QtFPNO{fj_D8JKRC&;HZNk?ruj zSKKAjrV>p@{-rpG6>1R>uZh0a?d;=ZT2mA@UXe~>y47tnla>GabD6BX#9Ho-${YHF&gK3hExwj`-~lvK7$k}z-6XJf>@iAjL-z3sv< z1dA$P!coSCcX`IZhJ~a!ABcLwyIe91Ue6llDWenDw5Yz7T}7@4LcOYGL0S_H8=KZR zN}XlKn8gg+yh=yi5N`a4_wN>_Ou!$MMb;!u0)3fan9DBm8Vs}qiS(ihqf$+8v`BH} zEd2Zn$h`Qo(HnT1($#fpp~^h*f!%t9om*1Sj3ApmNCI2m%BQ_h{Xy!Cf zHgdw#csHB_40z#7a)<-DOEhVP3xe*M+8SnQoGf26QX$bHkSU;EH3G_z1&k)zo7~&R z4DDaN{j8H?uhZIdsGvz_mDp4oZW2qv^~dRpXqk<44Lr;h-YBYr{QJ#0K-eW-uF) zw5KI+|C}uA70o_x+y%Gv*W}oSEw5J}^<0hiT9H*f^|$Uw=TmGOUQ0nCRnKyE%3RO= zEcx&jxI_I$wk@{toXY3z5p!P^-Z>5r?X&9<^Nbt$?W2)!zL=Bea|?atpXoAS%sq1d z{Z5|`D-XE#+*~uHZ`QOpDOBRxydQEOdW7sQgN+u8*FK*pv>hR(ihl<<7F36o1 zKdb`v?Rd4N^(}wr)zm2`+y1h?ndfhyJ9*l?k#~I1D_@fq_?AT&nb>EdD}U|ysdPPeYujFYAoEX8%zx;vdPd>Q?GW6Z0x#l z-lLJ>x)01^zi;aLT&=Az;a9WxM$3YOE9Q!SY;A?@ExE0PldpRD7)_66(!a2i(tkD# zW;soQ_PG<-TC&FfjO*V`B^Ww49WW315w+XeX>;}tea66V=AIJT?;?+)^XZ$Qq2)mb z5`or2UpkWg-k#$3s{<^`)`q7NT#O&xlhNkqBBoxj|(H{)+j?;)iIHV@cu#{QYM=oZgr^zn%d z+#hHz;NwjONtj=p(UdD9_MbBc_{w*=&8U-wt%RHbDt1?>c<>kmF#m_TDTfO{Llr4C zI@m!!1rbVhtO_W#ZstCkH9(;;tnA=LrCaC_E;7xVE%aI`(^S)YQgZ1(P5o4NZfeA( zo(ylJR=%HmjP!Bna6c35lHfV>QAUW%P+XY*?Z^4=+m0kpT8|ucnmVAFD_h^fst#N*7S6_(Rz>Yaj2PR> zUkN=&f))@OSge=9OvfEHUgV04404d`7l(nfXZlHH=%N@=ow8%Lq_}?Q@%IMWk2^Dno(1kokU$hPta?UV;rrCt<|!wVVai(*dULp zLbWl7B0*m9!&+f5sAxrXpy;6D*_iB0XMB_M4tJMVyjG3`ABRy~KZsf$h`|dsH8xpO zSO4ZCXr2ur46 zNeR*{{(kKh(8(F5@?D+=Bf>o5_k8ra_S4t4&Fk1DUn#|{q-j%$fCw!MTx$5YJOBLW8z_ug2Wrw zljS!@lI)mn;09E-kPJ~5$)6`Zn6DrA_1OT=h&+-Yz8+aJoPZ2Vby7N_t&A#D0#xvCgEj=Jc}#|h=n%&YvXUp2y0)bXhn<%__wuI4D1tY34|Y}{i9*E*I9aY-MyC1*f#odc1d?$&rhkNz4FJ(M20!`z_iv0Cdg7i=yedY!-@oAWXmdH zr2Y@B*5s_lJ?*RhIX!)H;-EM#GWu~ukV+nm`c^30K)f&R&58-L22?=EFJnp7PeTos7p~ww)&gGaEcHT_g-DjqaMOQdWum1(=u`Hhz z5R)VFxchW1e0?pXXWHV{vl47;Ff9KSsbQWAjMe=^;T4@YPb?}(oX|AK4gC||3DDF0 zsE6g?YU=&s4lJNNSZ_7AF3}B?k}e$J>R_?`zA~q+DApd<7_A6ElnD#^UnGB zfJwKh9?Lxg4En$4jB%G6T=RYX2@78(nbqc4!oBpPij^4Uq|2{`3;7$^U(Da#W1$J2 z$0N~m%VVFS;@c8`nzJS4VOs6%TatODU`WRD_4U9Ze5GAH1?`nk=wPL5tGiQ2WluQ9 zg}?h$x#2^0?Z`Wq$3{TsgSR_Ieb@0^Z+eSe|0#P*#f)}fwAOs1^gzzE@S!7f>qFdP z)bBfqNV%0(wKx7=cPw%m0q)xB#}C+D6~@e%tXq6ZnS-X7y`#?VqhpbPzIg?=UoUAe z8-1M47spV83xMXHQD=QBf>_#DgWk!)$%4>k*@~hvab{+8L@5wp?p0yKQf<;aCt`O- zraG#jHAv7a7h@Z6KSDKdHa>ri-F8ov6UnX_DjgfxUxMVl=;31!mcR*sJ>oNj`;~=b zR+(}1o2u+JmfZp!O^MET7)+5dOmh%y3_2Qn!~^QbKQMtd`NsitW|md5JQ&1{{qER= z@*=bOl_B=dOBqEzbv=1VZAV0Z)i~N7S)DSd4W)GCM>IUo8PC%a zt{3%JldEg`cO5fx+--Xe78GexnZ-?3jaJ!rpkSgUidGI`6fj{znsU##9uZ`J1~VkK zB+vGnwC$I7*UT_F644E%82Z2G+otHRys>dBFIynYe@p$bS05ENix8Vt;7byr{GJoe z!wiKfH@!2Pqe&eKu=d&GgNc#UGl6{p=3JF+<>}%FFn^b^qLmGG7us#Nh5^?T-J_tU zy+Z?tOwlAf%Ez-`V#Lv~RBk1h8yMhpBtRr@)aw3fbd}7<>{0@I2Mdc$4f|`3GAx>V zsr9pqmWmHj+yRR0OnAAsS@l>jJ}TDTZ7Da?AG;X}w-O9w)Ki>q9gBE_-rnAmQ~Y8t z|9ee*K+rLc?Ht4Uq9b~G=;@b zd9)v->VMw_wUM&yj4piY^qhUz-n{g#VC)$>Y=9R@t)D9gJA39~s;;=+>A=;l{iOCK z{t#@}&v`l;>Pzmeb*|W`%MBn1T@n54&xeVdFhJONnDJ=9e&<}Feb?p4&GmU}rWYGS zjv~1>^t{K@3V61w%#MLrrB?QTj`BS6SL3{rpRt0oxL-!MS*pf`i+Q<}WEUl;X<7e= zGRb{pVizuIDETkL9DB#BW=$d>E43~c`UdGv0#7|JZ>9$bj!fa{6%QsL@mn?fGs+U{ z)WOt8qVY#NxTl)df+wcyQ8Z73{n&^nV;kC5L*R5GDZFRh0{8`ctZCrV{Gab#k0(xG zkGB}{AQ^iz4qt8Urzr%)uEDtO5&kc+6XblnTZg(T$6_0Wu)sX3p|M}=I&T&xQ@rR> zueEW=WE~;>$MfR3a=&2k0Ai&i-MVvvjxnGlbV zfDSYswX+RkrPvLjjTBZ+9D4LG)G7ic~& zeY`$)Cle0li7c+nB&GdWflcE4YnRW{I5k)@EVj2?-P~U1Ngfu;Irgm(etO-w`le>y zVT+HJk-}}7_Apz^#JQc0W?oAIBT7wB4M!%;vZlb8B}j|Z*@7^!sQCo2yfZL?1Ma?G z6Y-qJ)lt>=_Ws~+Z0n+|;GP(SnaLt z4h{~!y@g=8Yx`m-0mEcnkn6a*ZBl(EadSzbn*;4Bqu<~AbEGPe)1RnyAsWC+yviob zPT#xW#}0*GRzL~mmAlV9@~M}^S`3soa(-Jf^xnNwtA47*Il1S=87qcX>?2>zpDnFw z;;PJ@FZ7LewN<^eOgc-&t1oIEWB8~^-OguQgX&_hub2M@{j8tPu0(=uQ0ag9l?6;r zOqM^X7GKJEiB-oMW~qurq+qwZ(TE>huZjc<;Q9!mNM59gh=~wVOnuEoutaLhzIxje z8i(I0SxgFI#sgx!l&1qar8;1l(*7Gx4}cFvJ}Qr>sErJkOBpXMOiZZKwXgm7i|NaY zCh_N2i2DX0_8M^%4ITnCRjMP3YRbxCw=rF_5Rt0YPF+#d)W5&ZRPY86SN4H!(8mF7 zAf~B#8xcqt?-OJTWsLu9H4{4tOa2ueHi*ddFjhhu?=dI=Wp#j#^p@zMht0+F2YN6$ z^S7MMqgX^)?S~G^gd6dE_y$)X#6e8BNZ-i2A7!!6)Rl5-$b3t^8m!~%IRO~*e2ZY7 z`KfTlT)u3`F2S**SG6jgam-3EtxrYma(>S6udI#6ZSQP12nfCY|9ynjT#d5oKi-l27usE-#pJ&<#lu6T>foi0PBEx22`cJ1PXR5>iw{QO=Uw4eUVU z$*ZJPL5*6!_8bFkCJ*<`OU*KhMkVkgGM%&QcA(pw;}1jk8m>$`Vo;li214(QlX!Fb zQc~R+0@4>o<+Jt6FC{&X_kAFt8#PtnlkB8NeEk@hb@wK=eJ7jU3j;BK1rcpFm!de8 ziFL;kNA*x(RG*Cv<2(#FB+)TYLNyaz@hS|QjSR5H2h|;l%h=y=y;o8W`FAf6#gjSL zf3L4Et>lc*CI4tJv?7W^vD*+gdRwJn?P#aNw;8+Z%v$5lt?u1J8~jl#7D+4Li;zHm zBLVf{oB@nf$<~P<94j48227p*DfagAx7c8mqR)jqPu=6cE5MIY{fu;%i;I`eFMva` z48G^shL;%DcyS}ajM*TB^zN^@KL<6m&NW#B$lhDsuAOmG<Adbh34ZoG$0rTX`%~6h$ISm-Grb-O1(+GXxag?LI-xwj6ue2iI_?9f2IK7FSpYEF&<0gAXq)9U7?k9e5^oQmOV zA%VSXK}H?g4XJpiK+7dGkO(7tSp)Om7TCW(*WcFGdT3CkdC(o~L^NugaK6@^8?K5z zK$@CWv$BBP$XGT;FCwn29li32RhRLmb{Q2I5^|YopyU(fCwcoSwh0lZgY7L zWMH`eI!rM4o^}w7CTzj#*E>20M3y(%Jl?Docg?evePdJ_ zi5)w=J-G&w%&_4`6JJnR`HqmuOT- zU0^4+{NVaMV+I9LZ5VcXu-d5PuTvfS?bkrf--?9aTmG~JwZ-xV>%|@0U&hvS#5kw0 zZ}jtL>%wpux$&^g+@C1Uv*AbdG7Nw##vBhY^KMTmv#mbUu{~YlH>noh6B!u(K=M0p z!MM>#dfxe-;GCxi%Ya_~VNog+|GvNI`8OTa=3zDuXtyFj#k)x*9ba#toryzVQ@b@T zclu9UC%fYxBeA!8EN^H&!icwOMb7gFih!XaJcFL_gP;<5o`K-%QZvLSo*M6@5ZU>L z)~UPV;N2N3Bo;@lj1J4J1d;#Pr03w1o6@DkY`Bf0rYs#y4I(1$qiTK58Bm zu^9A0^CHl7-OuC~^7Sdj=?q%pjKs+lYz5{PWXoQ{WEAZ)rdbrF!`&O2_60lVV#$vr z=94~LXC>Y|VIQCyvm!`yQfQw`SW7Ba*75fK3)sW`1Eo>y+~4vL35>}LeDjhdXs$fS0#V<7o>TN9l^oMh2Y9jx^c7t62a+q<8sco-eizPLOBgk-M6Uv7|;o)Y> zJ0AW+n>r1#AzYhz2n)SUk4phICYhxRNjz`7o_sF$r!~|2;0%?<_OYte94bA~69+)G zX=~Y-vvI;OI1~g6j`AI}GKC3wwH6l;iXxbj-3V|^&RJk_W?}_>NOFn2{>98a^LglO z6?jD%92?>FjBB|ZCEkb&kNq(_;u0oFP_m|3h$y3>XMu)d7IfEETw1R9aTqz&#r;} zzTSI*I>yVIFEZ3UVU!OMHZL@cO;>)z(UM%rOH6#W>OG*y*%Gjj*|h)|dBj>TTgA+u zJt6xo)R}I7t(8}Y7FPOA2NHCAC>V=UXxRNz<@8lhg2xo`hsyb?tn`85L> zjBs+{AxUTNSB{Z7JpUDzB566b{GjU*8XuQIv4V}1d>+62AUGbU_))S@67kIJtxCUd zc}hCVR8zjAy9RtKX;%WFeLwdodxbc~(ZpeM8>!?ekmOCM7^b`LvY~0kh@3`p18>f; zb3(jBHD|2z?yrJGdV`y-TA8sTTV6Yx4Si~=rNgFO)kq1qAN}lJv2SsFfp<}7d6|2V zU$6!3_$=w{lMYQ$6=+p-aDcA$))VpTN? z7TyNWS2_Crw$r?A-k^r|Wf2Zr^znxzGR$=go9Z%ey!)BJ3Xiw8KIX=v81lw|HuIxc zQTnCVh!M zBN#yKy*OLO>u3bTW~v*}?LL~dV0s)q6)M{G&c|TtzyS13H>T(FzB%6ld4nHMyH9xo zzR0OS1qq1Fz;S@DN1LhShGJfe41=6+nDn80(n)2>Eyd72;Tgf+cy*a08+21_)I7D2 zY`gU+<)$X0;v&;=JB6s5D%QHKc2e{`zz5g*l7-gqvYhU?f|fJ9P6myxlU_AercC!8 zXU-=_UYqJuCo(*)pN)^E+IeNp0#`VB<+AO}%15Kh7-r=S8qLwlz4^$c&cbWF91Kzw zKh#`wZ*%x?fxgmzS|j$fGC+nWjY=D0hf6R;GiSGGzCk6A6OFcOFJ^mz7(@=nU^?r5 z_R0_NhWzVU`tW4F41x4N@bWX3alJZXZ$!OS7ngg_`Xa{*W{{-y(OEhV2{kUT*VJrR zJXbGz`~OIvBYQ5OwV$3{fVVuWl$7EpJ=F6wGSZF?EIAk zeBB9>vqH&A80Z+;n8JNs(wQPNWvFdaM`bGsb3NL~`{bGnc3~YugoJcp=pn&$oR~d^ zfZhBGQhxX%?A2s6)y|6d)hkPGq_402?hlmSdVEgf^`K6*kjcaYbbHTQ0HZIu|LaXv z{~uLn`4DBeb$t~D6%YZDZjkO~fB`{LKtQ@1qh^&a;4p3{!D2L?~_3JM*CBKtIvDW^6W;>Nqm|lRW_ZNLKX$}wBN=Y{sAuTYE688 zu-2;b3UBtc$$Hk)8?!MI{wxIcmIBoQ@98SKF&!#C1~V$I91{~JIuplXNCmDGX|pPA zfIQ|Cw13{pk0Afg=+I{_N}h{mhJ%K}nUUp1g@g#uuL_!B<9scv$Tdz31?H~_0@f`k zT3bV;G6IAcj#$Am9}`t>y$kv31e-n+B1Ib2+v{Ke!tye*s%bIDQ5iCep<)M zA6mLLT_gp2w{v+`=WB0=Tgfs2{Z0_?2GxvDoe{pi`#r1d^g^4-FumS##L#(pc2VBt zg+0V6-a;38jpYzi#hia;C@DvSyeM^3qv(JTm9MYVT1+C8bxdDM-@LJ4Uw|nD9A^st z`)xX+nv!yqVxfZ6*FAVs8L!Q~E+_A|KkYvq8^Poua*C+&_lEpTMhpFj^}ucsJ`#f` zWRI~+z-3c@^q;ka0!`Hs+F*XtVZ7qzkSEj$V;OK;GFwYp9@5o%dMc%34N{{`3te^H z95N1|lvg#HAbZxk4Z3(~KlXy0BS_I=y0?dVzHVT1LB$V2dr}uzqi4}~e^U8uGi3rZPgZW29QjYC-Y{d`;cWyZ77UE-jZd-gZ!9JD@-|>~r|EIys2h z9->oqX1-8LYTcr?I~>(HQnA3yQ10n$<@Mg3<7B|p}i;=>B!yr%;jrE{TfYR;}Bsv)a=6Y(f} z-+=hozo*W)*{m1pzA?eytg`kK=4u~%y?mn65s2amdAs(tN~2sj#o55$10G=7??%<_ZdQ@YnNrdPh){t^z35;sR2RW zCB*DJ9goXKdnI4Qdp(IZxi?=L@Mp;m??>l4@pMEROBh6K93YdVW@}mMMAM%2U2;8G-{-eP`EZMP{YHdH$vT2=fv_xgxt~aXa<7B1k=dwD#i}hJ#l{^TJy&Q z<&8BAHmwQSv^pU#_|zs}4*w7lH36A1)1L#n>n!FG!_!^Uc74y@?b0 z8qxQy*%wtscr@LXh)al_JoQ9org*9iZU;sBFU z#fi}S9GBvILrHK_GD5s>bE6pxq3#{ch5xdgN2KC+U;j+RyDDbKE;C0icCI|5Ojhe! z!vQA%yHtt|bM0cDAXwHYb5YaKHs0WvHRGEA*A#|bWV3+|7H$W5(|p00>owVxr;VvZ zbNSvX?o2m6HRXb@Sh)F^m{|&n3PKm&jn>S=02M+nxN1!aS#a8-JSIK}7ED z(a=yE)q@VG?5K^`vQNaW0ge5x88oXmNX;!Qc@qS$@3#}M?rOhtgAxH`Z8LeW;$=Zu&ATG+c&KcA|8nfi&+FTtxINy3fH>X#T=C$?(;XK+q2m&Sbt*4hFd&?6 z;0IX{Q#Q+-X+{X4Vo6bz)pjxAb{4f{v=DM|ZfIzT-QK$UFE$qVW;MX7EC48BeM2{T zQP|P`(eNm==RbDgJ%L~>s^zHh`*kL*u{m4Ol}_{xd&K>1*TMJYDPHEBisc-X|4>zr~M8r|&O}u|}^v z99*jhB*RsB#WOoypF2_x)DcGX@_Jf+ME_Ee$lKbdA$*G19t!`y^4}Tsd7;WIwJ7*S zPv5Nzu{$ipT-U>go#GY?DgjTOEL#yOQxWVJ%r}7Az=T;Y1!|yDFtp}ua2QbmN*oTC z{AYD!!CJ&cvF~_;MPiIWWcqdjRV+)x)6?7P;H0wht?{>EjfP;ZW~J4N@9^2;D(d;G_#Ym`8-yG+7XKpaYw8eoez zNO)?X`po0wsMCM9YBCsHkL%ps%{>0mI~0-dC*SsSRp6V#js_oWiJNu3Ra^hKF}AFR zbf~C?eD!X(Tw?Cb6^CJKcw5lf7uEtNC(z7pI5N3Fs_s}AlHlH5*rr%m+>?Vq6;25A zbm>fn9x~AIh!qQtRC*SRZnf`(j4N1(u;Nt*B^cYx~gW``~roh;{Uc zB=6fF=67%wZoU(UB_uI#b?+5-;dD4#;rXzEwq4WpaJA~m-fPGvis$NFn51zsMY0^ZxxTAwe7Gn5~>qT`B8 z6IjyoO&d9fXf?dkG=|_O+gvOr|2H&k31Mw4{Mba$wK5g4m0gP7JO%T|)E7=Gu3vX@ zTx#+p73_#14vWtNwTP@l1=6aPi(e1kKU2a3gzBgUALnJkI}a=zvi9!3KNokX{t8qs zD481aMZq-?JIA(CY4rR%AeaJvAP4(aq>;;qNma7Z>wga^HhS4_8ZH(BWdCn6kEaBm zja~XyIX1x(p+A`tOJAEy#4a?ldO*xc`WZc?^z#miK-KcE-W~fxpp4Kqz#%l`zAt7VR$Y$OAdi(Y3H=KYA zTtZ4&;RM27-R#-&xZ9mb*6Y3zpJJO4xtzH(!hBrR>KRqvlgKR3y&hU9s?JA|Tw>86 z%gW`Xq&sA=x&FTwy&+msdZ^msmD-(oRzRgtJT+C!6$V9k-zwX1n!~JD(Yu$_4NZI( zO1Z*DW}FeVq05wLKiY!s%bW3QZ)64!V5IFM%I(#4?_S#vdc<_0&10p9-S0kP-tJZT zRDb_aMAIWwWzBhnFZlFUK&kBV$?Yp%kpV}4T(ktYp!-oIjLFW!`x}C;_l~uQ_1*sa zu)6JveePdQD_)16xEW{Jyj9wjo;EU|Du`?wr@CNVTnM{7|D+5Aw1Cvzc<-YMH3P%H zZAeD{t%*{3`N@rm1qK|=iOJH{g< zgIpnN{x&j~MCC`f{rlf8)zuLMyw=cO4s&dmt1e8%0WF+_hMIH!xO^+COT}b+hu^$$ z4Mjyj+C6DU_qb$x``aZRw!i05a})7CR?FpZmgt;_Mw>r(E6+0HqZ!QvvSp8n7&X{Sk(@02C>ZbXTuv&TtYaYw{To4}YI>h;;RCn|P`lJj!1 z%NVUzXay@~0k*BNx0l4(d%B8J*S-CbGm0k`1AY5vUxhJiT7RVhXC7nRl@55n%cuFK z;MJ|eNlC?lTzg=SF#Q?s6dvI{Yv;+NZ2QLYV&-xE<@Pz=#h*zmX(xYNScY3U6I67E zInd`?vzg1T(OgyHmSZ1Nn!Rmd|G69U1(^%FYZr~)+yOnNG5N9&-BIxY21&v(;Fvdt zgIsT90_A_V;4=$zF|qI@6#sasKx#u;vcxi)Rs@I|In_S=JGdj9EjxWS*0SHe$;!%V zd3?B@Sz4N#n?7n}ntc10n0Ti{nc^H~!$~?$P0g<=&!SGGB*=S77{!lepf2^I{~L*5 ziOODrN0TjvK|#O4se~WY?8Yp?l1_42Q3S92Gq(B~t)f+ikaQ-29|Zck1QJCz4%J(@ zUiQ(lsv=!jrg(iCMabvkRzu2PuQnSp9LvfC-dbs^3I{IR<#cwg-K;Mp{c9(FcbU}} zQ!!N?-+aQtK8~ep6Q!{}U(#-~z0X|oENwfPzq|7)ge(7XO1Eo+M@ksAK8`4VT9~t* zEvJ;|b*-J$8(l--5h6-F9?@2AE3S8n=eYir^>{-0DC=}I-tDSp_FAdQ4KU4jP_NU0 zGz|_seEttN;{I62Iu<>0TcZGZAF0W@%*is9sQ1E$Asa z%9M_HU)ITiaW8sWsX_YXPQ6d8B?*CpkWU{9ETG>tpjDgdURPCA#L^erbC9W7kASND z)+FFpCBhgyggJ?nRB9gl|vgD}59?f=Vj(=ugB$6iP~$mGqnRXU#^xGYAOKjtC>C z^dBAP^&h-w;|gI>8FFB%fYaaN#IMmq8;jRZi+p6>`(EeT)zo?F`M55WuXRl*MBZ;x zV*io-cSOp`E(NIX+qR8{e=ojZ8c{VRdP zFOdD}iH~CfKpZ-mr54yKS2c5Qr=5^=6TE|v2I9K8xB{^*O{LW6HH?ccV-PAsY>-Wq z-P@|Dj;gA^-@jjW_C|&Vv4dtlw-YyvcfWlXBFZl7hlnQA5yB7^>HeS~CwH)an0<*g z-}3zLYH4Xq^<*_L8E%po3O%`gLM>x=9B!D?PUnXm?`9&1vNR(Bsn7! zIM_SZ$-`rsXXZX`eXH!gy87-X(DUWcURSl$_^%pvnN`>EN&czW0TGKpyaMjrUgj$_ z*>3*jdUbV&ua63ML(lSBuN4d*hgaigdY&{Rw_ENnUMG6(_2h!D#@trCJTNMuL@UMV5?$oGBkC#qSglU}(V@>Br98E*)La$Jr9!o76ekZH^g1tN z)Ki#%mU^45>GY{*3-t94DD)xd%yN&=#)jpzP$LLRzLhWXhBUifp&ZCH}h%SF_GmM?jZh~m7b=K2|nk#qH zGrqTJE5uGkw+0!%Y2%jMXZTRDNN?^Y6m6F4{b{9Q$XZSU&qstF-2RQFE1ceD)~#N0 zas&G0R}%m!!L$XFjQ7mR&4-qSB^v&nwbl3gU)3-F(*h97Xb%WCR&7p~o2X#E#o4K; zp3+XIx#qi0Hm@xv)A_WajG=8^$k;Xh2pw^i+a;MMSI-c&nueCLI_@L-(0_b;a9%22 zd$$*o+pFsWe!C|b<}@?$>=6sCG&{ z_Y7!g!8z$gH9t6{6@tzm73138#KLU`qEr5X1cqSu4 z8wbQm2Ta0>h1MojhL$&pRUm7$Nwqb#l{x*Dd@OpO@7R3qj4Ojps`{oYy@!*9cXrph zBwlCzZn1~XeRe=T<1)uU;|<{=@alFY3uMA#tZ%BS`qRR~M2F9jfhkdgEflK?6d&!Q~&PtNm%$!^3hM8rNf2P>$#QC|#i{m4c2 z(V}pAVrpt)B0etRl^8)b!i0-mV?Uc_8zoFt7O1XRgWXPnZYui1MopxFBv!Y!Mz6{q z-dMahCQEZF^fv55Np6TRIwYRxVr-Z8mzoYY#508&7?q>4H|KZ`mk0YjiiQnM@&c~uE z#@}<$o|i$8(JK#^BQjO{`~9V*rKe(n@6@rI=hg)%Jgt*X zyoB%#-vVAcgZ0LZsZBzcZ(5CHl|x}e2F2}>>}oy#mWlZ3QX(rNd%?ko`XEsb0;i#3 zKFhN=AwC_P&gTts6)|OHBR+`;Zu`;CN&k&M~5-g4SROppXAd&ngZ&&6S zsR^z&U5IMx9!jb4fu*E{e*#8SiGJNf;Q+oKWZCN!u}y3zTy6&ray=y+Gs$4f;0Guz z5(z#|*H&kW*%Y|C$?U-BaPFkP*k-P%rKP2*8C=CT?g%{;(5|yyt}~C7!HG^|egM+= z0Y%uP?swfPE8e#(+0I-8!>2ll*01I=3yoo67xL3So5z%uFXIyS@+G43CbH%}K^6IV z=;%V3v+E<;hsYLyVd|n`M1d@D#!csm1eeu%BwTn2fILjOzX;BeV6P_Qs=Z{CY~OsA z0#hafID|bKL1KQCwiqWy_C4QeG@$iJnJvnvBHfJqKX51sb6RWjn(`ynei$%*`BtCS zU9>Uf9{fVODR=Mko~T~xIc+=LZ?qR8Ddk+58>{7yLZ%~b(h(^nsnYLJgPE}|UU&Fo zpE1Vt6a_rPv6oJvX`sGP@_zbE1`nq0@#Gl>qtGrtg`A8WdT|+0^WdA@LA_4Q(t`wB zqrEw{`&4C;uP5co1cu-Grtg$5$^F!}hfyencSKyj|L}}k9`hGgf^P1%Fh2n>2_6mv z5}?!}+39rkVi1xvVYYo5iWJLOH)K>scxJtAm43tO}6>)Dd2N@b# zyr?uHVcDWpeqq;Dz0+R*y=F>ZjjWcf<3SQ`=H%G-Pf+py<3z;rKD`36F9F#jnQIx-q$+*vdE&I$reG9MPX`OEY>syYiTPWMgOBQbSPIrselKiH$Ze{7wyMjnw z#8>8f#w@amrF=KWMl!u(929b-3r2z2Z~x+S%I>iJ#aBjv8@@+me^boYV>PLomtX;^UoW+U~*qi&t~nZni6u$pC3@jGUe3V(9VeNZj{^nqhIybkB-g zdcYGXHT{d%HFnkujjGj$S*b(~`YgW?69fWggFp|W;$)1TQ7pfZ?sAl`m8yMlwA@v? z3$!D-d4&nJd>_2wfG6D)iu@5)isWB zi|<=DHXD-3@p+HZGv;K25&DB3PZgbVgA`u^6-Z{SsgFIE0vZ z|DYi6ZsGAk03LL#uIDr~Fd__Vy}Dv!;U^r?u;43-o1Not5KI|i!!$jAk?^~Hi6EM*iQ5F<{ll{ zR1H@9wYV@kQjOX7JHimsgSdv0k{aY_NA`GS=Xm9COiXFa zaAxL_MKzkmcS#+g{8_A6I6;mOPAx~P=^!U6Tc&@{sUCs*$@jNrJ9)1l)S;<1&ygGJ zU86;_OX6(ER-yFgUXF%ARB=DQ8tnnidx|a`t{RHvcIixg^IRco1_R>)R##V}Mkb>3 zRXH^mn4E`)kB&5&$JcdN;C57U83bN_fQ3^L1MOX%X@e+j{#BQTf6})6Tt3A{&m4(p z@;wJE@VhztE&)X;WALOBjb5BzLSkZKX3E^$vYz|q7e%+aF{ma_fvToPh|Lsf7~)9G zuOrteho6GFqp7B;%%}ceoDzf`EipDZNg_Qs+w_swjp7eCha=kGf}aYRN+4=7S%!K5 z2hb05(zM1u{+K}U)xNNS!};%~qLnJ%S-;~7LJUeq9 z{lKgb0M~~1`hLBt*$PCBLw&BUt||;L^1gqTe7^Osg?GL^bb= zB_$;!;fiYiAl*Cf8^#g8yGPA!hqU$|>kK9tCXuYwwM52BHd!&onwXj5cFw$F+krpg|8b=SnyV9v+R2f=z;;RHFSbNfHR&JTAPnR4_FqB_T5>ppy_5^@uqg)m#R$LnMb{{K^!BUMR1z->55N3v1zF)}5# z0J#%YWe$s@U}PVP-S{d*9uHd>)YQ2C*GUGfk|$4B$O?~N4_L>kLSCvr9PIuML~iS= zDHEx{q!X%6hfH}AVCh}H^Jkj*3c^d)PR*wTbF06pCC6GQ?nxG#Lic;;<{E;oO^~75 zyrrS_QHX1naVMEi!3{%NBjkRRuj}e+Q!3Ao$Bc(lJw>YGWcv}86XxT(RyH<1$OKv& z7TLBElGmfZUq!cm+gPew;iTh7GY!tAb>W!;@HR;a>SXga5@xGMucHRnR&A7sCXGE0 zVfD`k`pdbuZ#OiN1DE;Na?tH2&iiA94M@s^|IhOu%d2QHQb2=4IpRUMVxDQ6rk{B( zSyJ4O3^we&q(zjWUB}gAQF0bLN}gA!H{gg}M<~2s(dW<<)|Ym~oXKKho3+D6EGo~~ z?BV}O+a7K*o*sbsyQ%3kA3j~(5fSd^f<7T8pdQ2!@cd=Oe{<%Dtopb9)?;F1DJm0q z1K1rawSA#=^<3&%?ux*Izoe)%;NOCOeYS(tz?8_O6mM=OR)V-&MNi<_93n|`YBGQN zTjbg^Xg;5t^l*M^Z-K@@#idZaL^(KX6tHE%311WqS%HQaFB#443=(r&glmh6(*AZy zEYN|mS2`2(M^j8lN&sgp6zi5{pUtQ^qFw1gzqxyYsIX^EquBQ2VUb*wTYPyKk z8@!H;0p)}g`Y`}2rq`8{Z3uampo4l|x=a{cLv&8LLB(@Q>lM&t2WF1{=*$d>gLhZ75nH(ZGpiGvn4E zd=J(KSn!tK#YNvHjI8m8@8{TH0_4{Bm>PIE7UNs$+W%<*w|cJ$iF6RFqd+;m-!fG< zD$_ZC1!HAM?2#e9h^Tv5ukD%`liN<;T2?*`EPUQ=RCZAym5?2EZlmxH?e2|5BHzM< zCtRc@AF$BjF5RejzmezT-44v93Xs=5%T;!qJ#GD}lG0D4b97upa|=P^j;tV|21#-j zlRpRCct{m60R-cNBu3&%BYhdy{Hvhih@nnzPn)Df^+^kG39m^nJEQ0VGlS2El9p0G3=F^Pgc+5 z^}e`eTKV92CYfVHrH$KWc`w)&2rSnfQrT?}G_FZUDI(xPyyl|D+t-YtVx%as9i+x~ zWD*2LKr$kVVDQBG^%nzzaQ3s;(+Mx%i+=?8if;``z!z0Nf7d1pB_hMt?hQy@#tf+3 zcN&SdQ?GdW8cX{j*wTA1iq@Bj-F?kp)*rv}cvOE&f2=pl#F^~XSs@o8hUwX(?dz}* zhwj0LFc3ghEFM?>QKMSf>``M-#QhyZTxeGP#g4 z(!twG4n59|tz|#;M}*jSzn%}EN2F=x`*CE$j=qFUcDx>BZ!0K;*J{|)u5FGsMcaFN z5nYGz3u2;RYK~6BjZ@!E2lN{(j3pYdYOG=w(&-!TVf%)TXIk>y~X@9aJQW`uSDr%aBR0b1?@GXUQTbss#|7z9;d zXPIimLd_`NaBm0FY$FK*+Iu_wOvvQi)9F#)8)KtB1$^hkf#m;i=GfFGFolq=u%2Yi z{z%y8NAK8;(`wghg15)Bd@CyiIIFklbd~po^_P;%D}>Kjy#iW&OGSLK10&ggMKmP8 zH%NDm9hn77wpPg6Iu1CHTy?!fQ$k}a}P&m@P3a!d# zYmxjhx;>b3y-m#KTW!j7ivauH>6#CKAFnR~@pq?4|2q2>#nYy{hyk@SA7l@HroEkH zZIJbdaqMzdyv@DA{0ySe>An#!b3pJG`)G#E_gY_@x9t(!b`u^?S;P)ASxT)VtAAV` zGnO2~_B6hh+ws|F9vK!tAU()}2_&C*+fC%@UIMNg)vrQ0KcIlghuJ#jC!t41vN{7w zBvMGy=rh7xn1i3AoPZzW4F}bN9oq^_YiUf7+XC`|fa`ys*ABxNPTW_lbbB z+(H59b4Uz{dw)T^n5R4N7QbRITV-dGKBZHN*cobLW&+&~sVBabAzH6-Tk$}#EOQar zxr>}`ZtC=U5!%4|yQS?^zoew(U*TWp#4Ff~n76h};pTEXHoR zZEtP))e>O5k*aE*<*VdsOXmFu{p+xyAmD;yfw28B&-yet_!C-3UEFe_2(tQ`D^P;@ z!w7H>{F{@bV`U}oee~DcMlEfdvXl=fe_LivJ}Bj`%;-UYmEyEq-WHcIaL0O~Te|Z= zj&dhnc{79>+x#ov{F5$FMI{;~Dw=Ee1w`n-^C}P4L%GNTdXUhQdIM>UKy))<{$vSZ zsOzB#e^d_v)A0#pGXgCrRFs4M*fCatQ$#82N{LvM?59Js9<7m|>^nyT);!vGc-I66 zWLZk11XUWed<=$SKF;fUr^B)otZb#q>HM~_qy!6$+=t2y4Quo-3&r9*o*am2q*q5Uvb15l5I7U{vX|HT>bMy>oWg(dGwx3aV#V$I zl}vt&ot4!>xx)lQeiZE=F<8#u`rYEH?K@Z<;$cAlQ8KacFMZp26`$>$fs>rootA`! zgXUe5vYFZ1c_bOI^)THC$$zZ5+X-S|CTrNuld5!z0D%?~o6it{_vOGONLLqf;+8*B z@9%eis|H4%Wjr?_%wY3{=cn-sQ|s(E5|a@K?0oh@~gz2{9Q&3^Vn{SY-i1)8f0f82Ms=xY&S{_@Zr)n^}ujj1O%__Oh; z=QFR`37BgZP!1Yi3pCr2EoPx61OMcD1pH*hipB}Jp|}0A156i)`SY_sSoa%ap{@Y8 z`a5Np35(1dib7izaTIJr1}>MI;um~NT8t_0m*y8GCikDok9}Ce`JJK~bZ}tRk&hjh z>da{|Ykz4bkojo1=-`{sf_nFl)Ac0o~}p9{CnJ^uIBf*MGq&t z`n_$9sT;Xlfo~2MxEvSx3nkJdO}5a%PA{&d{B9eici<&9^U%6Y{P)goZqr}YqXkTx zt<`ue0f1(P4gKWi$o&4dMjOsQc5f)t_U|kPpjaYvca+$p!1B~%B&wS}0x2EQF#Bd* zlk0)K-srf~V=&)ybMOUO^AfuIPxfi(XtxODu$})+)Di?h?ewe;2fm{wHO5*#W{%Y$ zJFy9B7Dps{@B7C+EAwNCB_snu#y%?&uGo=1>j92K2p_3r3b`o)G=tl7)E!*#HftS{vr>a@efT;)N`3M^?DdAcT^{CZ2Ar)QUDontfB%=G z0R(AZgkFF9egyisU67|9ixE2*UuI`B$gsoKynQJiI?~%eNcZ@X!WU*hQaPmY>XJ^pA6jzM}7GHu+i~Xa$`bnzIjK;KtC}yLoj)xebb? zxYmzYX_WCO?phvc85x1cfQFfsa=*V_`q$$-va%6#iui1LXIC3oaXb(ENsl}(`zCWC z*u>m_)2pj(y7qYv3K@&~WJiRId9RUYmiY;Z32JI;Etd~Or}+XO0B22GaZwRD$n}h2 z0~YZ9*Kjh|0cfRx_#-jD>$PfIapAn0ZcY4y%-Jqe*$t+Wi!XA(QXA}XU8(q(V|4tE zScN{-!K(u>QVMPL?_^%@m-!07HO1ki;5DOck*4AdW>q!b2R7dr7U}nNRFxiSO2)&q zcQ-D+e;^krb!F}dN~eN?iPAp{;_qpO!U! ztob$?_)y;jVji4;TiryfX1~BRqjH){^H5fxXU-D@#hpkEMfZ0ofj!MiMJYnUre_^F z3)Ww)N7Z>DyJ1V9Iwh~o-ro!pdFra9H8p*_J_WG`*_5O^8G;NTkoHx4`=%v) zTArA#`OI-N?^WA%KTa)qzn|j5#fenah+uwR|ASZZV&+hWucnNpfCaK%y|p1KVkw7K zQ_0ZqMC|PdoTY$(`?B-e(sJ*4yf-C!z=b2$>Bv=X>w6V@uiNl9j`76OLPu1 z(eLgbQps}9F{}@*yrQw0b?-le6K;~g%KFkj4!DtboSb8r=CL#12S0hr*4W-=p|(EG}(@Nlko6?0d(-C-S`C=68MO2 zqvQx<*H>Ar{|bD}oKEtR3q*TC_H1?RRi`3Af)*f2n<*iEyFjjpbwc8h{-g}@0p^?g zS1G}b`};Gs@Msa^GW7S|u7<4ALiq+fhg@J;kpvTS8D90i2Mp9hP2FEX z?lhhKQ}03>zR9cgI5gvqMTlP4R=O-#DDkJB! zJ>2E^(~8U>e?uN36d8}uLd+n}-F+?EpI zA3r!P$AdVGC0A~5Z|OC4RpL`pu6x*6huL};nzxLrvh*Ks=yuYb%!W=j_#^OHn~i!$ z#a5bcn+^xpvG{CK_zmyy!EIN?T-)h@p{Oe~_8tD-M8X3Sw$id+sL01x$IZ*5@7Nb? z42!wBw0k_h=;2%7jp7x#J>;67pXcP{42xOBg;NTGy3L}<7V8}brqq4SpivW9J~!7X zTzNYt=4E##XlrvE4D^F^u?7H>xd~)kcM&Zw&%h9e&L(I#FkSLiYen-TJ`Q%|9*xD# z&M!(8M@Lz;()y(DT_Ho#@&iOX`_{xN8vMMQV>$PGT(%V1$CeZC zU#rU}&9{0B?AbsE(20i(P~p#l6N{AVOsVBUMS?1 zY)e|B22Z*fd^Wb8mIkQ7TH4yC8Mp;!?aRVy*cb)}p^!$&Bw^@$6ORRPws+gby3?-~ zoFJQt+!o#W25UESb8V}l0c)%AHFQNGC}$A~_`7tD$&I$JM3*-*i(|}db_siTTPKpvdnUQcGj&YALHn-=gD($t}j>{8O4dZ>6F=&The*Sc)Gi!;$nhnfF zyo3Pi3Y*=wEy%7=j!M$6#>VNN;xF#|>{?ouan}uh%_4nQB<^Lqp$zlsDlLcnR8jZr za?IW9hLEi#jssJ#Y`w&xr7GWm%+lZz%3osB;o7Ls_h6@#Qehe;>XR6jzBb0klOWR z{K(Sv)`vba`S6<4!Z@J+{4{{{Sc^^VmqnIIBP|{-46@s-VB@y+ocKNt+*>;JrEU+vn zV0iR!>RI-#=u@>Rv9W8uzTiPGYurGuvstVs{778RYrT8MRC;p`J&(nO^MjgZp_@CH zwKXGytQ3H;ReeEsMMs|7=%zoi3XBKxbc1VA;{Gbg%{O21xUDKFf%PeKrp(Ue{e^4> zy}~c^*inST&sj6{J-bix+SOIZ*2IoFS(Q8-u+Irgb$CwnN2e8{az9-JanRC!gz zFr=O&=f{P}MpsC;m*QpO2wQF6h-gd^5qSsmfTkw{j)*H*m?<}Nm;w?5DqTc z@pD{sEEtQ7$QiXVBBJ1&WI4@86-+Cj%oKDp2%%jT2wJZ8`!1Q1qpf;ukkcdnR_Y%#dRv2T zFh+Hqx9W||9=%3!Xb3LULa6d(G6^_w^UXO4&4}js;?7_)eT6mpYaxhd!u~V#BJ7Ab z<(iG->~D;5g@Yj-{)7x-8p5eU$#hKjBkkqGF~jTG0s0S@zBV`ZQ-hjZCPT~aJ1sH8 zF(XSp11gFSxkg{E$NnTxOTIbS3%9*F{*yTUKKtcL{jSr>!!TBzcjcd=qJ#Cw5&gCc z_~YH0u)v)iIwr9oH?^?wc+M-U>1LS+>~jGgo}u(r>v`YD{bf>+Yi*sI(B<90RLxCP z>1o7i`eOQT@lc_YD}9mqN{@#-q>73P5_y_VEV)2l7S2*{15;Q?D_+rPU0?O@+QKuH zXf7rA>TuRukt?TXPVDUB3}0@!9P#xz3kBb#$lwTgc0sY282k5{Kp%<25>pdD(QLE{ zdvyKoBBs0;y3!(^m^FEn^zpP3mm4^#t}X_zxb2AWtizU~MB}G?*YqSRP zm9&304BQeFO*rasf%4w0r9=C2W^~7`5EhFd6m(9F|EhVRy>hp|H<4eW-DcR+@5a`8 ze0PG|ZCC3JKlg>tH9amm4GZlYa&7zU9|9*5XVdto=((8Uc{Qqc=clZuM^c10M2aX`4W5%GL`9>n_uJ{uQHw2wt9Snc0>8o+*g(ZXlA?v+?j7TXfO z^$bq;5VqLtKEY)JKbKge{Z__snwTU%ILy#`HIA47Gf=Qd#R^P4)Ol+7B(AalK7gRqIM+?||FR#$y!2EaXxyPgY1XaePd-T18#4{7Sf5obKtafW zpqZ*CD_CY`EDc8G8$T#35T4M}m>wrG4rGH)`Bbcyr*NGh`wAAj&7ENhdG{sC-5vjz zjvM}o=BN~2TY~iD0mM9-b>=#Oy0vYrtfzPlhr9LZHva-dj!>zKHV~$9+f&=|z&;b( zb9+&pwIOxEE|jc=m8=1!&ZxT#6q*OQe?LPhh2!o?foz`MSbE;YV4Y7pNQuP08{q&K z=*72w_;}>b*df%*sZ+~Sj<@qkQ`?W0FzWzK4j~$>iWVs+^YF2n+?<%Eb3H=(UuwiK zfwrvs3gqmk>_|rSt_bG0p%-B=k`+lgY^`_^r*t$0BoLHn-#K&tr=tP2fx$Uw2d`5R^ zcJ^)}>k(@#&c@1XE!cNH`Eps;X?Ju@MKQyE?+$&YY@ys>4R3C44(ooa!m6xcyw(t= z^TNWYXr{Dn^9Q>TR|nJi{O4y0?ahYiZf;J-5bUt)sqNcpG1j;4huMv=nDo%H^~1*w(jucxHv@ zr?@M0dypX5QAV^N^AGTa&!+5(DIkF6gtzcESdcE?WaKEpEKMoZEF&}X)A3H*6{qDz z*%p`_d_omKd7*%uvSWR8U-|oKFe4*Q=KM>EZ!ww{rqwm+6v+~1X#{N;-teq&4cU%y zBYmNW^?uPamr2ktHT|D^l6k|8j0)YLj&4(N}Gw(Fo>er@wk9kY4 z0n~Xc3a3ZQdqd1JZxRi%^PxWCe@3k7Br_Uu;nIMFqV{_A-(2B-p7RVHPnKKF9-& zCAd_*`lYr~K-2OI?2zz}m0_D?ux4R=FsTF2(UtWkdfUMGn92x9fw_s5{V2nWabWwk z%d@|euP6#dqu^qa%QE)=kEpYbYr5~dIE?}dh`^{JAfSYl^Z*eAB&9n?cf;sV8b(N$ zf{N1JU86w|7~S2Y`}uiY_kBPA^BQd9_l@&8=Y3jE6o@rdmu1-~-B5)dx@0rE!0$7Z0HV)ouBfo&uZwAr6V+Sn`{QBrO)=gHOlrFn@&*ySrpHyu;A`7-axe9kVI9wYja2W|^59oks24 z-?rSJ7diNBt6B_adMkQ+BT)SFUYFlBXJ%%a{U(#A9trzSzdkQc;<%n97xl0)Hg1dS zkk)K$!u!0J>fh)&z1pj(e`@uh$m5Yj``PZ8$8^fo^zHrm43DHph1OENCyG6RTmixWb>gN{&V;({^ zc{S1aNk(fJL?5L_4jS5$@YR~w>v3W^o=jL#{HBRiGkcu-*VrsL@EHO|h9)QKv_!rk(Xm*?QJnXZVwz8!08)9h|_8>Ywu!kxTvph?4D z*VyX4z5;KjO_$kPBCdxG(biBS>&V(;t`aH*SYO#(270E}z{YY*OY15*bHfxN4qUzI zJKF2xxFV`bE01G=gQ_Vdj9q^*yI2@Agt${!KexX`VHiJn5U9Aglot0ojI?@P?EEa+|9vzhd3 z`hPtDmO>23ntP^hGa@RM&gIBnDhV@dtlgB-ubS(+G-V(q$i_-l@2ss)LL$vuTy`rqXs2~C`jtOB85B(>(Yx&Q}$sI=`hl}=!7N3FbtO{33^gSNL--c;X-CV8?dI{km6&2*# z!GECN_I~VVWV(~jOLo*)i1^6 z2Jk2Q#J%ovDKfUMCff2E;Y;r`g0&7-*_l!ZhUR!83b5^*ruRPMiFKdi)Z{xa4ckQ%-5S5Qci2c{VD(wIvps~C=U?Jd&FGia5Natz zGp}E(N7Y@>eqF&nalnU~MPVa}>?y!gu*Xzcg02ukvcL4{n-jJOTx3d*-$s$bhz?VhG6_U#nm8ju5qOYw*tb@ytEXp+ z%G8aY+z6XJrGgy~W6=n2he%@M;(Ae1wUyI(-z}snJ=T~9&yKfsbEG9*O?@-y!ZTC- zhJ3^{$vlsoq|mZKPcN{bxg`B2<(wfEWgt! zIQRHVlz2#40DnSrOdE*Y^!W$-@6nw9)dDyZxUtLun*2xle_e1j@93Y$ziIF8cA02E zAx#LPK7#r^dD=-R@jXjTgdZWc8!cX;y?=!^u#Q1-@Cm)w)7G~SCI}Y+`kM{sRqQ~v zhej)Z`2i0wf>{A7o+_TK4rO1h@5>~MKQ5SnXO0Z+bCj|Y7mJASG0{3-jO4f0BL;lR zBL_Dr4@oRCMQTcGJ6GFAvrO#pA|io&@c!lzNxao{(GkINSXfLUoaedcuG_nw61D}+ zpS!Xik~k$Y%VaP$pyzN7YDLXO@t!LtSelw_g9)yOGsK4{_$SVeW{Se8v1PX;q6`yy z59(5;IT}y)W18`-iFo`?J=;$wxEFI6vx6%6ubmP=o0uj!Tbf&Fy2Yt7G>yw)IT`H_ zO%FI}4ZFtZJzEM4zx>i2jENb^;M%xZYxz(=gli+(xElbo2|f~aDzR(6`y6n(7}3_9 zp7$~Ew6TW^Am7$EG^nbm(p4IxOX&Sz7Y+|)%_5d34Uu8=2BTy@+5q9^SdK7M?lDGIw~lLUUeJ;T8P5K z>y`ffq8Q@b*_55&ptd3~_Gj3XgZ5A2i>A>;1{?%}qM^~`3y(QHFuLXe<9j;AeCT}{ zG>e5XpStoU<6!ydOKWhA<}b3+()u@|`Q)MG>eAtA+I(z3_aXV>iv`kSF5^s&|Ma_0 zhZ_T=n01Wnymmdb#UG|#s}G!B9d5M+)(JRlw0){U`0%_Nu?3++^*qfeA99|p#*t6B zqzg;oK}Ox*`OCI?IktV_d72J!gai~dZ4qOc>vN$rv^LLoN9l2O6E5!+uCfHQdH{ z$M6`+3?~V{vnLwo% zlVPPiC4m?mC;y}(l7$rikJ28##`zo*Q;_=_upv3Un=$2=musXwo!i_7@y{QUN!2yN2MZCiNcWnJD|K^ z?0_;1TFB$s-~eeAumJc5RiqG|K3T%p!E1K4J3H&+^$v(CX7WKFTUEe1>VbY-$*bf; zgX{4f(OMqyHG(Me>$;$;E7@cKFFMb~Zm>(45DdS6RmX&ET<^)6Pt^=66RuXrkO>hF z^e{4JT+z8SqUe?t7-ESjArSXrsepWc3DoF)y{tK0ey_6fS)!DabDKULKUQM|Hux5q@w84Sk>9sfDPKw)m`7;0!raYEdwiMV!M2hEyyByQ&zd5{7uMs ziT$UrxEC7mKmma$ALwq7zOw=bOd&wMBA)2`v2Fs+O znbXhw`$^5UHr6bQtxpTAv;=sFn!WSm0_^!c*iJAa6Gx*(#|*HrBM0nx_dsKXWU1)n z01C|rrAW|b?AR8z61YTitku0z%Si_G&Esw<>jBlY%*_sV_VeX_j|35;K)iiywC9cO zr4hSww$jk=55f|&PKK~V)|ifM&6>BJAC8}`nUxKNW5S!Xu<@NGed?r=TDbrYgL{KN{pF6RcXYRm#E*Lp#tz~S!RSWEcVJ(>~2tRqAey=DM}I~%vsO}6@zF&0=jCA z7db&7knQTbACFcrc@=`~S=nB`AMTM+P?COufw_=UQDCS6?p_;F{17RrGCDTOJ%%qE zAv`^Up_(oJWaHm8&BK85n51K|6$nt)J*(ENZv4^?l)y?qgxWzwJfANEi`qjI+YR*D z^=9((LnMAm}yQrYLkos2D9k7mo@$eqO|sBoyhizGEN zwMET2JC=}%fz{MsOdV@2E?TqDG?rDdw9i??9w41`8iBFT)T%u>IWb879$tGLQjWgX zQIt@W!_YxdrpP{WB&OW5SbV4ZQ=JVE=)?HxKuR3ZXbeb0DJgV+ICdoZq&)ipNtF{S-iiT?yrJu z(_>?E3U_XQXiEZ(*s}mWNDp>8#Skxfid_nF2!*!HhXMX5h>>zZ==18ZBbfZZF7`j@ z#Bh1GHHs)7qt#DzbOf&;36WLT>cSkINM;AFXO`jG;A6m;@HE%cv#=GKCH?U5jN%tJ z_!Qm2SfUBeN3(Skv(eU`hR3%&eeFiA|z{54lFymeS$X*n%DAe zeYgxCVRrqR4ojKBkRKlpwBnWL@0}G*sDXg`gurN7_H2A1lu>)Q>tBOlL|>DEJ))`u z;Shd0?VbVY&N#eX0iFg}6fFK%c7~KK?)rSUWp5X3G5d$tA=(4QX9W>Hw{T)8Bgb+{&di}}DY_Q2^F|+$Il;U);*tRl0?l`LJB_-vq=uE3p7wrsXGOZkXgcq; zFGrR-_#BX5^f5wXG&L!*zr;ZiNr{OLb2r8|Hmu*v%PUk>$I>Zx2D@I4{r;VlnV@Q@ zYqJC4XyN2#uNq2`e5Y8Hk&z*kt1T;Qt^EGwWo3g{jLwJdPa>sil8b-3j8HlpR{sor z82MBKsU{4r->70%i=}o_!`-@nSs#O`30C4*&sGAJugZ>l16H@tk)HLrpSiN$>LQo^ zg&lJ8tOz2V(GzgwhfzIk49sxQe7GPjheOw;XQ`~f4AghBrdc72@q_zniWC2WySIj7@zm~B zx|p!t6~U5VuD)-isQ2~8;8~txnh!#=Mbvs%;L751Q9S#0b|X9#-LBF6g)(`j^>frB zm&_l_E>^ehJ2 zL684E1g4|{XEZ0U-m=&-r#lMFMLQtO>g+(v+)X(FNx&x{a3|mcE)L%yNSDx$xXSx) z0!`+Fg@MEP%|PFc#Rpl+=|4-@EP z29-sLY&Ow(2GD&fW>fI>x$H?8C_j!lPRk-PyIhNRhm=hl6Rv#Q-K^oFr89^7^&(e2) zHW_N*vz{t8cRdpob@DKQNqj`=Bb2^__|fAh6%-W~hTba*BMa5Am5@-{T3U>9QitZF zfffJITH8O!vei^{;$#tBK3+b^p?{08*CuC1p_H1wT_N5x8)7||sEKJy{+|BBn#W%yN)P53w zodn5lpeG;(&9R?`0P4BgD*uYpvq6YORiQ10k!yhpGgLfq1KONAX?hS~&ZW_<6%$7T zfak9~Q?8Ksun{&h)Yiszt45R>`T1WawMKQP!iP0RSR9@ z`U%|~41NGrCs2uE8-V3=hjGe+fEQ~DY8y=q_?;2}O9&B*5}Y5ZH9l+?px_kQCxDN8 z{)q%GD42w~0T*|3elR(i066)zAXMb?uIUM21b+v9fQ1izxzD>B&++U7+mJ`Gpc-9= ziHB|f?tjkDX3ILgMx;^Skw43Gf5fB1H+@Xl*hO>lgDhqGcHnOUgUaIEl*BQ}CegH((<6%gX|G7PC%PLQa zgXNW?oYF##_wbm%f0QftMn=VOi=&^8myWdebw5yYwAp$$Ja_b6Tp~n+0GyGYd_CWn z_^m)yDc$RcG1=VITtgk~eKPEy<=uw8N=p$oG!#>_px5j^?hVA^>=fKc?c}+BC2=&} z$Z}g6HecJ9XG*#?tzW%+$Jq6)?TXjNK(~DL&zK_5wa-?ag}uQ|T@Laf!K3kNn32|Q zRwiw2b?wP*Jpl6?c)8M3Z=Ii?1w$PH`$mn={xReC??8tHhuFQ(cvD`JVp=u!(_3TNo+nF%8PuaoK=86xTAGknR$+V| zSap{BUkR@iR`kB%<$W!B+qn=!Bl=ca7nv1vnBH&Dur=|wQ=K91GlKSVr-v(ditCSo zL7+*l>-^=nnTezcMh-}FT9V&h&O0D8=i#$g+#+_9+?Oj2Fvwbe6ixSj(6XyJC5f2JO<`~_H@7P1Gu}JTUi6AXV1uG z_NBa+7mnZ$>BltNo12`&^{PyYjV5ipQ$Q9*>&B&5ZgsPiK_axNu59ZhwPFA~?+3k{ zKA$Iv-dnQbu`qD&Qa9x+U@gemDP;&(diYH z8ej-I-=F7QtNfMiQ%O-tF<51aotP*QLg41keOdV{5fKyDMlE*q=hSBM0}2_(U|P^~ z5i8EA8!s0nm~HrDIgVTh(+`S=0==F3zx9zjK^x}6Rm}liI zFH-tgD7&ir9<4l37J?Lr=9#t{ye+q`AT0V(zP$pko-MyP!@NE((Z8K9wwnomo|%-S zXsS2e+9`=UFwoa{KG|YzZ=2!NO`*wNyI$6Em+F(27JtC@=aY(-Uh|=-7au3-E(}IS~d6P|ae#d|r-Mp;x-!X1;&-S%cop zz-5JgR8&~ldxn{|rP=i1)>%dNb$g)i^+ChAhh%b#`ELbHJ>S8;nt6!bG=R2Yl+0!J zqW_JnN*@b-`MYNXzDI6O=mJf z8CXNZkb?fT=lrKtr}!l;OHmcWj3`%Ia*aZ*8lh_Z4MWI%U0&8SaKBTobg0`qzCPdM z9j-U-kY@AVBhATCOclKys2G}WcEcCumR!u@-a7&QsuYnZ5YM{m@el*^_Q&u%O6ZKw zdYwyES(E?zu3!l}?6QM!BHRCn5lGot*;z47t}C_NH;tB;A8#1Gt$j+M0(wNlchm7`N3+P&yQh>`^HrmH!4C%EqULJ% z^Wsc?j%JZ*5<5FP*lr17D(xP!Y>!7%PvQAW()tfoCV6D3eNic{b9pp~cY7|8b;la6 zl=3;yy;K5 zl(=>TBp`gWi~`;zk>lcW+oUJ%*xkv>N@vFyO0?) z;DUP2RZsVo8Vp=Tv5iyCdpe~qBy3f9&Vx_cgmp2Do3t)jPLOB@)*8g*u_qbV{zSe}5J>W~)LUA7_t z8kLWsCs3P(=d-Ea&C{HVhUeqpmB^#_kk!zaMbp*901WFq%2(nvFO#)ZdLVbK%mH)k za)Q~KtVXPje+nhn&1hagHvUjpCu)~{YGPdI?RaPr6`ijSGXVmb`b(}(3+@i1%oNt+Z!AI z{*45^_q>u0W+4I%kj5fRge8y13eW~34fBhTIYOk zda~h%4{C?gqu);~ZhKU6E6F(k)LfSB@YKc-wu0$%7CR>^Z6MxRe)hx7)s`5E$YPO43n53fA;^&7X!otG&tOdQ8!9X7P$#3`JVtw0+?R*yc#`rzD z91A(QW8h86_6!Xb8#9CeNk_>KAEO8;&_~VJB5Gcx`Tsg3B7$Z9tmH8tq?_S$y(pa% z_SkN4lv((+4Sc9HB=Rx4NeZ;_P5jCFRj9o&i=q0nAL+P+6!B?kDjIw#G^xqi-XWf- z2W`7ctyv=QgDDcK8PyD^u7T#H?!VX_1HoW4W(0BWOaFq)^@(~2spoFMFO3D<^E|2cKY&EPF~jS zUomlO{3^q5U3Y#c_+QQ4KM_Rz&~?yt?4bWp4W}2Y z4ekb#XcHm3B#?Fln+@v9&&@q9(9YJ<(c$3r5@=fLy(RGAS`O5ftxmO8+tJbrdwuRn ztAoL^ec1ePxqh_J7f{4i^ZOl&+ZOv{Q5-x8j5;AeM?ssZ! z5nTM(#%79rxUcteHo5t&8j4U%>%Om_qo%qVU5vXOEbkJthp!}d1mMpeQ3|aVJNSB| zD#yZOZbI*GX>)=N{no~77A_fcRPlw4HOa#zqs%wgXY83(4$kam41CUL+i{uyC{l=7 z0h}g8K|#-pVuPv(YK8T4=A#&;YB-gc)6GTrYAY|0CH59L{nHy9N^muz5fE<(kKU$MhJR6VzLpC|ydjBeEH% zmw_Mqe4XLog3y_O8s{AWq`Ufp7M;@#%XhbR$?a+uvS(K{tWm9oDQfEX=eZmAAv$-0MibkjlO*?JmG3FnL-$!LO2Qx9HRx`sVT$% zkuB>m2Ly(pyKr0%@C=s>?D;y^lUFuB3D}^AJtm;P!etlcf>h5nVwYM3-GLgvBHHNg z3(X7#o0Zjucq=ps;X_4tK=rSH$qRmYc$Qire)M7$bJcrA=2sRSOJfO-U;t|u^FRN| zQjj=lx`~IL#sl&Yrh?8J0aT=}ef+9GV#ZHq*x^7m0S--rsmo_hxTMy1FDI0b8`j&b ztRDvINoe@2LiJAuHxFpbAxMsg%<#efTn9VkAu<1~v(0;Lid!B=#_!D25~iE&L2vgg zMn=MvbEDxZc}m&h{#1Lw1q%-kA5JZ_x$Ag;*VO4>YJZwu(jx0)VBjaGT5-*{J5>c8 z{XB*j8TkOrWj-)M%y4!vr>n0m=!$eKM>mZo4aS)w`}Hf|+RDCI$UUlXZE(_1?tQqc zo3qK9MX?U2^=>V{f%j=$UUuQnpPc?)uXuR8*E4u38PF>>GCt9_Mnrv^c@gu(;2J*@ zwqFOFU8{JjB$WmR`!jtfrW)Msd8qh#`Cd=($MTswbagShdH|D%dDyj~>5TjSY*uE% z%+&nSsDT|pI#QX^rSF23Oiv;v%w-B#+tCe?kNqr2`ne4r1 zL?TVOP5M+FfIUdJ_q~>`>bsQ4SGNRPjbDCl7P^SNqs8G2Wyl1_hzH})PPh0^vED!L zJ56y~$pG$T$Pdo1A2Q8A?5hFtrz0cZV^8*RagBEel6WO-$FHcb`v8 z+v@a64$|#dCfxmhff^U{r?$ne=Hs=;+Mj~!OiaHH9A1qsk4h_V_AkRpn!xbWpZB%i`@`sBE@yV$QF-%Y;vEShK2j< z4u6>4*65CX{pD=kahS8FzWU{S1FMV6@qlQJ?Ud`@qsaA45A@#$e1(Q`hH(UCnvRtK zk>?fx_m^im19*4-0M=52e|LM=>+;gVp?0f+XIOxN@yRcTpWdi4>E1xPNLmqB&()OQ zwEmq6jDBuga*_7>KErUoS(51Lnkrsi{?R!KKA%r6IbV$9Ib7A&1 zLN)r-t!DP_5;zLVE66R>cyRdE;pvwMYRDP*`2A*&yk9}wTV>)*&+wS!_^6L7)XYge zKY9>RSzR5_IZU)j^uR#-O2yZ%=+a8TjBzR}XE}aOxaiy=mi_)t z$zSnk$Zn>0KRtV5;?Ex%F;PG{LB!}B@ASHSshRhL-kD{i@Ax#22xRXVqft;jYf~W( zR3#7Yb#40g>uQ*{kaAZooZVJ6{U3VIV(e<4+d3hc_c~~ts;agRohZB$$vA9W9Ia^7 zj6D`|X*p4Ip6YpgkSFf1BgS}0GVHa))G-504xeZ_X~Wjq<|s`SW!IIdmSHV* zUTa~gnCh>L0Y9~D!q_o`|m>T3tlbP z6i;cr=6SA+j2eZ^eYua1jL)5ph1;1M4obqlwl_e#O}Qp065MDtZQo(zFWW_=~Xd*+fq1%EbLNmi=(@(22)KuE3<2mk$$RwEHmaPyCe zaC;9wG7^ZTZRtAw`u!`pP!xX}vYFAC(S3zea`(Z>%1J^$_*aux8sA#=m+Bu$O<2HU z9R6a!K5-CWgaTF}TPmwGyF8f{Kp8s&poHL(VmiwD{y(oIS3H9@vJz{4C{j_ksq$2Mq0(pLFhviiNX^ii!>5aHSpldU|?>dg(?h zR6ue_ax(Io>Pn(s(NIgPCf{YCJn4>sg9K!S?AuOZAORsUdn6-1F%1@rlPW%91&+0QSz)4RZf^ z37S3j!W=XKt^$@FL9TJNS!lMCR*Nz#4W;*j!s*w{H_2R{98s{S6u$wxcE8g7IzN+i zTc7Q~K*WcCdq#Tf>z9}a3HU@rU>JPyUlE_%7a=~S#FKx%c0c|zj@k6X?yTfMlPXr6 zt#U-G!|J8T<<<)hk{^%Wg;E(EI5EgG&%5mcjq30wRADhHfITa{W%?`VUM?hx?*5lx zV}B}stP>Qmj!iLf6`0o1fNh8LVLwfRg)S|rjmaf}0lAI7m z2u2Ah#Fb#V^k|6nixe{ga2awJ(S6+&m9IERM^S= z3W>}TA%ly@h=&aB8GBOW?vMKsRQ1~e?!+C)(@N>>6hVI2O2Rzfd&^OkykMSH1-HAhS7 z`>K!B3ypiU0O!-S#>mNP>4Kdo)rBU?Z!M4CDrqNiu)v#^pJ`YG`Q?O8$W8n~UJNAo zJN!JRdzJn1Z0X7^^z0xV;-=%_F^QTq1S*|@S_-*Vq67|GP-~WSr4ahx7y(A&sP2+v zTv!%|$=?(~qiPoUo2bAJvmecPdN&(o9yc6RUU*}Ko7#yTWprU9N28H1>2R3gdYq#n zQ;Q0P{M@|WP2UNlux~9_azffdwu~&PWMFUPt$HhQkLm0KLR@%^hI)`d9t`*Q-E_~9 zM!x7j=48R>&d|>*c5%LLmV@X${ckFyI&-8s^@IIL%mv2A8Xi2V$kySaO%ZTl(k;z8 zr`M%Y4L<8O>T>j^N~+-`Ii?smTj7^R9%Cnym$FMAf=oeAryrCi6=@Sta~x{*LCJzY zdUQN%J@W&d_F-a%o*pCGyp2nNg6p^4wGXh6Nbt_vaKfF9uUF+VUumHspD?8OY@-Mf zP!a}gFrDq$%Hk<3vJZqTI<2!s!nwQU#r(Vh7PaRvHBp9GdxhF90sqxebI`X&w}xPn zx>1^2fm}Qd1f{E0@KdgoBkhT9b`9Ml>Tgc-hG6s(K9;(HI9!^P{;&2FWKXAS&3&3! z&~O+S*@~qs#k?Gb@!tIJ}Wg0Hiv+t%=lX`cfn?5)O}+piW^8mm5c z0j^VzT>53Z6o1^;Hnu|_5Kdk^dE79?L8yz^AmS0zx^!DBatK=bZ~&CTH*iY3D*OeJ zByJ#N`{YK)<}Icmk&nL?K-vNb9f-p}Z6mYj-qz31U0}GcC$g2NVM9@$EsPuy-8J0m z%l?qM)^TAMNsP9B4)D))NbHfP9Qx7XFXPVVRyYM2CbGx_mBRD>P*FihdsMyv+T{py zq|$Tl6Tze|mB$q`tdZkKF|op60Vxkf>AnF8;CFm zXuuygx6GphOu+XJx3tV816c1jMT$HY&<81mNjql+I_-W+$8h?c^M2JMO6KR|YkN)` z&im&qDX!&F)qFb>9Kva?=0Xb+E`8ILe2kWp*IA~Z3d6J8E$JT1wTD!dUIq}5n=aA8 zE>b1uiDb^KK82yI#nt`fB%j%hCh7l=NF=!VA;o1bLaq)e($m9oaVHR9lc%0#N-sgGPiUDi%w8CyD$K+A2}>@(weBi zS%_B6d_x@xKb}1oyXo?Q>lvAU*htT7EPL$%I-&*o)`SS#Gce3=Hn<*#@E_x^J4dep zmF!&QHSv+9ASPC|?&_2IE3g{_(mhK7%@=FLQ-?hI7Bv z;11jv1VAEnZ*tNwGzN*$yL?23giS<){~Ef}He*J}`UEEM;~_7rjz71>@WYKL_%^uv zJwJ3m>!_UIf(aRfsO3O8v&^xeb*UpGIRE%FoOC6q`V>Puqr*2&s>xzAH$;Gvjecye zG`CfZhkx-ku#Ev4(~VpmpBU?hnut~-_EuIDvYQHY-G(HE(t=DOP01bdub?od1`1K) ztW;KVj)Trvv~12Z>xX!aBob(#%e6QmI6Jt^t`XLWdSMA>?qr~YD{&jR&Hm9j8zt5h z#N47_T~QzM$=3Xk17d~FW(&k2(>-5pexLpLCZ0sUB9A48zuy8af($D^W24Ul0H53*Z?Y9s42{Rp@cGJEbis z$k$w2`$B{v_gkUub`-@I+i$d^>C4TrcfC5#DoyzbzCO}}ewGmVL%~9y(kK!s$Q6Oh zKtBF7L-1|83s*Mqi(cY{oOib#6ARHxIityynR7WWacyiN6v6LdY-*c=y9k?x?_%$b zM0&VD1X`)%luzbzpGmw`6nb6xPx+`$V+iH6(=&`p;$bM=QN;!Hx!@-c%l0rvV9(giQ-hJ2ebHopFLr ztuicXhgn&FvuZMOhe3%|Vl?BmLPo+Pif~+s(TaM6X%eU221K9})2qQ$#8YcLf9rkwXTpVuOX{J)A zMwF8N=Ww#S0Vee+0#>LI;|`0VEX+QsE4n7L{JqCp*@f6|@fA#mzH-5;>1PXj00_2UNoNzOKT+bh6up zpxTk7-i>P!nz!hsdxI~HHtbUDYln8$@_9jpgncUXKY4uarT$tETfWACdt?G72MO#> z*4139F9>6hullj~ArlSI<(8u+680W$9>MY5maz4S7fKo>etI9H?o`B;TOy z&wW!i`yZ3if}h6N6#gg^ECHWXRP!x4aSupB(-TWmmOqV0}D`nL%@f(U2= zmk9(+(Rg^9OxCaZYzYPOxvNDwRZq1+8KAM#x262!`M?Awj1Wk_dUWaPXX?kwpB-YJ z19*RQuQ8c>Q=ofCg$h`6E6ZS5wHZ0m`nptXDom*t4u?JKZEY_$9ysgye5q7avfFfETm}-I&}KsV*LdrM8g01}f;U zurLcc%Lru5IlAFx^dX*H;4m#J#(_ftLC?>oJ_oxcDsqk+xDPZM(>`Pfq`U~+1=Srk zkyGg}^PHe3tukf99yOR`Ir&ve;!et978tR0p*@5euQ9ERb3NdE^V)jznXgS` zizi~UY=uc7l^YPtEwa6U!2beyDOSl+nvP~ky!1;1*Ym1^b&tmZUfZhLeJfm@z z%D!1pSh(irw{N*kx3?Y|L!vvjqs>3+QN0LoQArU4O_ta6AJ~RrY&rlgPVn75Tnfg0 zJdh#693TJo+kA4CZ_@7G7LUbLeY72J5I#q<>mMW+*0`Fw$nok5pz%BC_*{2CqD@Ip zOV9S$i{^hs#TCDpIaA$qI4}nI&`)yX%gcAj=Ja$76t5O)EI8C}GWUiBHZmf_gR^~? zo!S8;?Af0&rF)~fdcd^gzx+ECXu6PDiOZEvfIp@|-tVd^z2@f|6x;w9%^BGMGsyjH zjXZ0i+0Dk->Gxoyn5LS_?C<%bZLwsZN+*WD4&>sH=N_=0AFp(fJw0Vo#5fEd)cC*3 zJl;SgYc`P3t0HEUva$PVXY5hmVOY?G7O ztvp_dmLf>yNc<>g6FsquSz5}eNfwSY1)uNJlPUh$CX&OW>KdnP?|Ns7$DLzty^afB zF7p}qB{6{8^LjA&JKa_5?b1|a{7Q5mf_6fxHCPGFMLkvN&h$7OuJl2g{VPu&Z}iWM z-lnzjlKpQd;hhE^v-k6<2N>tB`rOo|$?7kg^oa$Xb}M642p}cS;a7)czELNqO~_n- zzr*@;hhIYOwq5BCt83)uW@aTibAoEv_KVLh*VXcQx>tGMk*O-CV-m2bx5l zHKnF|b&XG|(G>UqZMLc^DrD>iKJ%Z**}d1Yzcjr~vqX4%9Ms>Rx5y34wCw*#2k`Qr z_G;{>e5NbMBIV?)ZDO*8tWaeP(kk@C0GiaZt!fgeo4Q+;7Tew0szasO;T|vt^Z1Q^i{z*)L~X_ac;_d+H}IC*!A*b`nJwxvlf*tZH%B!6(Bd|)HzT0? zle~z-=*+_6fz3MZg&iAHZ^Xi`4$95l)P=DKM@)=44qoAJur?{%CD>^7!$E39@a*BY|!oP zxf|i#%fMy6KH>zvG4}PNegH!Q@>D_Nx_w-=M$gv*m&AK;56s>M{<^&cVCqU}D_9o^ zgUq6$;xttshh8AGBYd-Z!(p+gdCk{YMDKl!6G1N`zB_dp1JvOA=Ho>`3p!h!ux>yPqRrM*P2Ktt|=!P?`8f@*$C_ihu!*)+*;7k&;TA6W}_3N6Yu!ABootxryFma zJtCS)iE4MDAv7Qpi1&~b6h7B&T1kK(qnrm7DYtjREoa8Ynq02Ww)67==i$|KeSR(? zA|mqLoZ_?Erl!*-4-IRcw4=0h&37Lp(}!#U45j#cD=TZAZD8u|1q{GF+}(lYAj3~m z2j~ea);$*0P6E8cbWLk(Yr-?MqMkp$*TF_tf00UrJWc*=d*zrr1rt|B*XEcqAMFLW z`w~yj{%2_5Xk0BP24?)E-kXQSyu9NKh^RV~C0>9d$^kic{V96he0oeutb^8V6;c=x z_Bu$Nd|XY|YCo*wZzDQv9}O44z`n$>!+AYu{5r0eb5Q7+X7jjHp|Bg9>M}cR^p(xQ zi5L18v9%w$g3OxsLde~*OimnQJFBs&6->p?$XG#m$D$cn zFAgTrgh_6)mPAX^=4+j=+o5K&=S~9eMRHh=Q(pE*U_3K8$C>*g?Xtc8p7+nYifCE~RbJm;Kg3soT`>uN*IGidUw!&Z zSEH!ZV*;G+hfoP$3t*5B6f#uU1BDDJU0*IcThlknlyfb$hQrn`(Yqf!JM0tqdRgHJ zk-#tVf5h{3Fya!ewaX_`xgXngBFf~I5$9pb(=jZ|iae-q9}vdiBDV6QC+9x4!9ysvC}-4F5aNC7 zioyD|Ps`Qz1Dua^=mzNL-HBAp-M&F(l-*87u_zY7E>?cV`0LjM%kp>xgb#thos&9w z^)@y>tcoSfNa1tm@1Iq6NTlL^43#8OqsX`yh`dGvUnS-jr-(;)zI))noq`KhII)SA|DqjRccYl^OrH=4kYjIG+i}Ng> zY%g|Jo*5`46R5Vs{^-7(LO}@h)R?}uO{%Q6Bn-MZ=yrj%$u2yS&#K=;{4x-D$zAb=e~%|L~twN(+p$Qj88jufZpE$qj=Vm1*jZ zhNh}SH#VkOxVVPds8HdD;nXiZcCQECFAm86DbNew*K}>Uk~GN`R(u|UyJ9BTpE`+g zG!(_wKkanYT&OZz_9e~4VM{^O+Gbe830cdAS^qSl<7{ub>8eS+X4cDF*IQT7ekh4h z%*UZi76=>un@#~U=uDj-RFL{J(^55SAUU3dt1v) z33xX=w-3q|)Mo!T_iHZw;&?mFySKNeTWwo^7V_?Rs39P1h-#vQu_@JIBm{Wg6fAA` zjhq=zf~HfA9PV7ARZmG-JGf7ge;QuG%Tb}8gg;-cH2h8XP?V_o)h7|6K|1!nemdpB zj3Ve;6(gA4?^2|&t+EhJJKghTn!mZWBC65n1kX=1UYC;R?-`umpROF}y9_3pt_TY^ z+@X>YcZYen314qgcq}G3{O)oi@NV~XhDFX%^@Myr$5e)wdk1%wuDu2C)$V|Um0k!3 z2>(99HQm@rW81cEqj65qG8lJZ98ci8{fI_ zz2E)^=j=Ue)~uOl7TYq!Z2_{J#}E>_(KKOT3vt?mB7x`Scjpic*gdM&ej$&+VF5M= z6Ap)O+0LIlwqer|^@;e?aXtEZV^|x7QzCI>1lEf~zgk z@sdMTKC9$rkp;4%>x{VTu*7v{u_{&0d=Me!<%k1UZEg=q$@7(xpgo zP7(9@lgiAT@f+N=uBsKlchXUI;lGy8gVO<+(uN)Aqa@G>JZO+%JVEkVNlA%ftok-T zt3#h$+J+@T%es20^}G7N{UbXDgi4%>?VvI>TmiCD)Z2W z#EIEDB5E1pHre)`KBu=l!K77P9DN?hx=vuALVli>4fs#{j)6?=i%+WBUxV&!88c-;;BjUp?cj^d76N zE<4W<&tSVYt3SHZxt3LGZs$93$!rfxyk5;;qOB0QlUP|ANLxwu6SHvSYkDC+SWRFj ztY7U#TrW5L_7K$xc&r|87^-EsOQObf)QdZwmJPch47v5{b8Ak{tGh#Edo8x!q(;P* zKt1j1?xse&bp%yaO|sepyMWUQW_PAve4hlzdxjLC&!+=PYCAZXJPm%eOOsx6iQBFh zNJci5NFw-2di)A8w55Rd4^5F>HOG3dD2ZLE?nY}Inx=n2?(RsrIu|LBS;Ahl81yqm z6v^+KURkMbMr$O&c||+1!y|dN{@DBV=Pl9#-AwOjBUA$jso)u_>5Rgoq+yooJSyv@ z)7LNmlx(-VsPAXn!!SsJARTIGM&}G0lk~nP;Mi}#x@7{xNzN0wFYPPqWLomQe!vnV zd0VMbx3-k-i=7hCEEBq*ToEYd+1l#FiFbr0VHEmuhM#(3?PZN$IBmv)t*VKpk7$12#9~A2OF+|4MFpb8e@VT=_a|O3;+u%WVtOAIm^vrCz7NeoNTz!^Z1oXP~fe33NV- zH8m3*nu-qu$oyFIY;EC2+{zg|V6Q0k)7(PAN^ucTma zVIv`0@aK1xVJ~pe&f995lmb%;^%+J+{B-qOY$akr4+nV_pd2Vvytcaqs`Q1Qw+|D$ zKh0$g8{eCOT2=afHv_^~{;d9&8C(p#yzUQhUv1M64E>*s?!Ue3($0!Xr05q)x@3v>~Wx}6Vi;GZtuAHNXp3%ZUSI9q%PJ|2kZ ztZ{jgXFMU2l+vU!ZP9f|h*DIg1sF4HUGRJh!J8*XHeuXrBQ+yfJGk6{TX(oOd)77% z2`_GU;%0a@O>4nMRwJm!>&OaJG?)5(&Qn<0k@~m4oo`notVbernb!h1f3K z(fBlYAZd=_Q}N)~$LMIv+blKKq6rfyCP5&?HHc);u(L*HgQ$RLRd)TxVnNYw7TBPA zYCHeDO-x4V#cowo2sC9!;AW@;1lx&?(yn1A%bK1m3^d2@lm_LZu&{V%bhUn71I_m73Eb$fp>f~-X9*m(T>c9@(XHF#Zb%P&?H(s57mveaoSooA_3gNbUO&?1$qcTr!u~3Q z`lH*?#NlSEP4qRN=j3J3f>*>A&$)qGiJviK*e=*09G8Qi`a~kHf|ebcmS1K|e(`T8 zsxL~^E~!^x^2T8qnu@4(pR>GB9SrY~%lq$?ImGu@I3;W8OUEQ?@kq-!!jbNzUl@@AJtLQkRx#&}M2h@h3T%|8x z9?>XZ_O(gRu!(k5w0ih*`6ws3;Cy4lOF*$I_jbQjDZomB;x?2sFhH5{l3sQeVFsP= zH_Jytwl_fYKw$js>DXf_&QjSgmWv{6gQ>cRgs;&fBS_lAv0EUx$WeVpNjKAq)@&<2ysl=f;99*cQV90<5T z0u1w(QNA@LHWffEfz@Jhl@;XGDc_MPnxW^R%)0&ZYTl=9=NE61_9Z9jd0Ml& z3mKe>fw6CDTIgcGxFBFk>Dv~`AEdVQ<}=F0JS>JK;+5Yudz zmINNP-it`YQJy5pPNy6Cb{iZiCO?O-5fmh#crcU8`i!4w?7{pap0gf*q8rd{bD{rs z-u|-8BHNiw+?d%Bmw%TEs@ozX%jhG_?5-S^Q~Dw6b@Wn%_e%@&r_ThD!p8Mkbn2OO z+&RYN8%J?JjaC!h(4R0(Yw>DX!<=u*b_rHRc%G%d%^`=#vtFdc+HlN*r9}UbczfdA zFG-LZ8M?#M&{wmyu-8_T1m|3&C~zv0*DyD=us77#KXd=Jr%oz^rqmR{JeDXI!`_KG zqig`hiJqXg#Hb|2PKgZ=bD!CC)5#5 zIfkd$qDV^~$14$uM?jX&$i&DnhN2Zque{Kiy~Iae!%E%AN-tLzYg3OZz>*507F#E+ zdmz#QPSW038B7DtJJp?Yvh(+MO*n{te1CY7^53N-2z{wJ2j#`wX=w$*B)t)}M0 zWoSs)x={fz>AjdSHxdJHh-1WbxTRLYk4Iao$;~|rR4-PP*3gJc4!`Z5p{|C8Ba;{- zuiak3w0R;~6?l@obGktqYjI{3xp(vY@Co_fWkr@DM6%s(($~@ps?ihqnnyPevX7fS z-2>o-CrduAD1Sum?zo-A*QN3dKX;hrl+HCs;`&O z(9k%O6eh^)tNZy=rx11qiqCZNIKaH3HWU++?#Ml5^0h+JtngjdQ~~3A!48dOeOUi} zUvb9U+(x2G?c|Mo$giIMDBqN;`U={rR!%DMBAPFzrQ0Y681Rz9**o0PWLj;Ygmf*Y z>V!S_Q`}iOre5M|1N{DRvZC3(XgaMaATtnW{}E%)9iCqXh8-nr++nS$elXqB>5q4u z)%hCjz}9@>QrU5C_-j{MTD9&dg_9T@ndk1;Cl=cys&)8)o$ zX7h*N%|g10@GAlwiyu6hVs?QFn4K2LtF6521M>(1z0+fKSQdEwY-D{lH+b9Xf|m=L zrsU(}-$_Lk=L*<-q6*n4N1U_<6$z;CbO@nbI|)UdZdxr-Orw%PyHzMGv706eH7{;07 z&I`|@^W_3eRs^iMj)~o)4PH9%>U4$9f4?^$P&=t05;r?dW+d0VBrg88)+^VS8P>oa z?bLqH1$5rp(+n!FGdfr!MwuMjGDOQSJ++4Vz9p%ru_%tc{{;uASM)Rk@6I+wzcRTT z&R@w=n@l$jQ2Fcev(O#pc*I%lKkB!K#62E-i^kIKkJ-<-x`V6E5Vu&#*|pqOD$s=h z`*Tk63)gwv!O*w`pDheFi&0o9(Qniya7%jQ9?6O@%lAwKaCN06wq~G#H<)c-^6#;w zC}brnRH%~In2=R6Us%M{rU;IMmVijfWL|~H=UqIAKL@ixLYT*u7!AP##`x{mMDp0O zdE%bx(E(}`igJHekS4MR6ADQX2};c8eMnP5ceMM3pvJ>tIGT!%BWML4%0h?>ezJUm z9J%mC2muVp`Hqh6+iRjpKfbt0!9%0)Xv}AGcutarN@O;Yn=2r} zo@FOk>wKY_@Bf(WV5C0gBzrJZ;p5-w%h6%~jo1(2SudfR(ESkVG1NvZFb=56x4{G2RK z=*?biOAGpeF*s(x09Ig6#)t8dqg!sa08p zgQDk^Eojv zni*?Q^>&C4YUIR8l6i(1k-xG`f2T64i^na8R z4vEyM*UkHYgQGkH2RaGD97iV{CQM$~ETL?}xp;HgK=eX0z;aJmSVToUmcwEw6$4iS zB}7|%Ok8Tvn~%URNTmTW5N%7pASA?%F);EYrf<~2vQOK$EC`e!H%05j?0iQ__b4J1 zlQJfVxD_^Gwl&zYm|Lo*OZYujWE0pKC`Zxi!IMO&@HUWng=lw}W+}am; z_H+YAfPq)?DfM^)G|K^Dr_GP7chhPAd&y_lsN;14gGbP#%v-9zAJTkt{9==u>XgYe#iMB&q1&e>m|!}Go>z!thInXd z?)CCwUQ|Q|sy*lzogS}bReZy3$=Sy_uEY4GMRD%U!*>^%Vd zXd7nr)HKqt{$kHX6W){U3G1E=yDuF$LEZH%8KY&!ryL!gOYG;CmXs`jm`-nbhP{_{ z*@uE_iC+h8K$)gk*yNDU;1msv+K?K=`DBZoNauXwjf+WMh+ zTl?_S9}Z)z^%*D(QW--!CKt|BpXc>F!IO7>mN;)&E3 ztWKh)_z5~V;dW?Zja~;~s+epQ(NxP+cll_nQ67$i5$S7h$#pXnNtY5Z|rA$s834mvbC~qYd1*)W=cDL+_p7JE@-1&*~T7yT2E*2VA;S;^0Jt!5l&LDiu<%N0qfVUPFpm&nssN~o_#8G2ypACtWeG0WUgL;-`ZKJajzGv)ZIT@Z$VydXL^vP8~N@)L;vT~xo78-_(g^JZ`FWy zZro8hIh*bmb_Nb2p&$rbA)f_Hkav>lO57(oy;Q`!x&wKBLL(g?D4A=Ew6CyOidBhS zcLY`M;k7nXCp`0`r@k@y4d)hsY_>%r2>hr*!ZG;w-okE0$j@-AN-H{}?EU66CI6?Q zNJ$mSA10Xuz0$|UOhTv*gXj^_xoAgk%f&mihHdXm9s+ zu*Btr&e3ELIn-rlWQ5wv&dTC6Uf}rga{zcOFqwwoe(7&Rm`lGRMtevQ!#eMLWZ+hY1P z@C-bBzHiD7PHdw6BE)WNmX)%#@E;Iqw%}@V;odW`%429Mvn$fTY6Pw7Z1HFYqn5+c zTl1y|h}D~-HZ--!?(dYi*B`*m?Ckn6Fh&M*#L_cdx@DBfM@sf+XiCQ2TvFCkqsC83 zqF6$+m!iGGuZ_Zu7L!5fLeohh3}6AwD7q?Tqs`#zNntqwWzp_hCL9R0(}hfpn%uB1 z!^{Ti>LkP~?J_kxSy{F{Exo^gGp#omv>JQ**jDtBFnkBlssII17zs$(MbBtpk=Cxy zwZ7*D823gbT0OzS_;z@x{<-2e@P0smF9oNHO@q0KI*-N^A>*cgNi2+N1L=`FL*Nk* zpfSfM#=D>WhhK}exBUeCUa?kA(lKc8xvlcNhiMrHMRJ{+iADQ=#|no^Rkt_)Er~Ew zmX|HTSp{2y)=F_+sxW{xxpc&!k+7N3`+nz<{9D9h5PT`|_x4W66id3u7i@$TqL=iP zml`kGkq@EIECFBqk(RAQd|XT@*W9kHTc{mB(uJCrzY{)0I;>#ExpP_tI{}?ABe>?r zFOcI9(J0^Xxk3K+GBU*n2LlQsIsLNuDbSgS>jy;-U*IUYZ8QA(Vbs8ssA&4lB+SVZ zroboLu}`L1-ej@;ibP^Mqne)3AZ9>%%s;0P$7C>Ru1R0FHqwv@t2cF!S25!y@`O7| zqr(1_2M*{pzJxX`b}r*h1&t4jv-uW80yiFu9`h&7woVue3oBVC?n0t$EERI?hS!Fz zwJ``x;Txhy;Xk(*8NsDihZkj>7jw56lz_IXl^SkQJ^>yxrs?+qj)D>kf~kbtof!i{ zUZgk7uTDRdrxdD{wPPu&w7bP@U635s`}!bu#sh4?&6X-j_`EJWOry&@S4i0u)f6AHe zpKhu6ggDnk&2|*Bmx(EQe*>vEpZ3<3j z(0dq%fJvlhZ?SU>k+H%I1+~_YoPG4a!UC~X@@8RHttmZ;$}N4(08i8!W8s9cWrCRV zdsv_$eE-TW!1Y@Y`W60u3_XDE6-`=ELqmKvc-7o%fQJh2HCnOB1;sMNbfln6%?!oz zmWrJKBW7X+-84;bTEW>|9g0(|H~x%~c!ZEHHUBhPT(QB7TLiX&aF)hdRN_G} zy<1qIfkj@cP@xLELwx`lAm-$3?bE1)Rf9!!1D@%oqS-8;)Ol6IT8O}U1N7OhKvO=- z!f8o1vKOf3#0@QN?X73(dP(1;q(VjPb-sLE@ragv6cfBpAdZDRBIa?d%Vn=|?U@HV z`JJe6H0}K8Lh`=h(Tak5Yl|CVB~V-t($fKf{{LD46zNn6V`%H`hy@T59V9__c68?d z-7ME^M|lzw6!gCLb^6TlN4b2*IU}Vno0DUE!%P2I7>HvZrAaSZ$J%WS@I44*BH~l~ zAF>JU8BZv2X8H&3`b#+(YDUFnJR29D(KQ=arOfS7g4S*4DosX6G*QV!6anyJjjyDW zhemio{TWg(%5}B4k0ne=Q4V>u8SFWQ-`n!mWhrABF~KPXz2>L2r6TyT(wX60{rSst zeq_+86o(bodXWPPrmRLGemRqa?9SQ(fh6f~BTo(B*E!;(!IMJSq672MPK%%wBR;<6 zu74Nxek+@szpPbvO~|U;K7K(}L0&5U4MzPsHE|l?3mF`Qi~Z2Te4zDv^5B4yhv#u^ zm!Ej8RqqQe#{T}beviL^`(H9XZ8vl7Wv6j&y8!6pBRKyAU@A~gLq}sftv48>VjuKU z>8k0PlR#)X2MNVT$_n>_#9eb=G2wCoIdlkO9iFdGzryi&xjY=)Py%}ZG=dQHV8JNJ z<-5D5(7+VCwLb0997-A*eqLUP3+n8E=wp_5S+GW`(9A)C$@%&7v*htz*K=?=kVp+B z4NS>EQ26-+bSrgOI4k6JqqiVaK38zfQ8Zj4jeoC0Q*-rhl&`!CAibNZVK(&UB8`y7 zadfP;*mdBJ!Gju&9^?L4moF15Jgb^2_Kxt%YzoBvsxL79>Za+Z*w*op8)&CFA|1fRl?iR;mIV1VF& z_{iaQ=AIi=IyaYmv8CB)hq^Wo$pN_+pYLq>m;Ve4Z^tBg1@qwf5$O%T8&j@Lz-4u| zf6mZ~J%iFbens6EA-u7%iLrk#$S*)37y%Ct+IJXyx!L9jsj8Y>DM@1!EW>bkJoQ#I zPrg@G5!ZCmi3$RD5WGX9hjr-|-r$RlFb%Jji`WQP=x&Nvu7O2go9innF=(qY!>!>C zDn`S|8TULYtd+<|6M#zN5;)B+!WmErfmJ(gZprGILt_GjZb)~$Mv~T2xGa-?8RQ0x zJx?YTxqgp7xL5gouq^XraY(5bC^59cft~I(nzv-XwXbzOcRcxP@eJ_gPd63M>|V_E zNh)tVoFCtBkFtWRcGOW*{3ZBqMAc8`UYGPvqd+jWxJ+Kp@1bKibiGAa6wb?vG_Sq1 zn+(Jt0VrNk)sdE1Df+MM{wV-77bRIG>iKe+Vho$I?TCJB20$&%n0OmNzUc7WrVC80 zj9AteHUYXOE4!sY6TJ*ir$Sw^b^3}8rO^9pnvy6d!;(*jktrx8-s z#UG`R@btl|stU=oht2QY@;#&(XCP_A4rK45p}m^4ebY#!%VcU|=5W9|dS z>xFUw#tMBoc9?xbP6MkBEF%r75uv-YGA?9uheBwV@m7vMFkY@I2RjoC_3)+8#=e#&}u z&rtjz5{^Ifu7wgYqOD1(p#c@a^_#2?>?5%7A`sNt92*7A|Ft9F%2S@o2xk7PI7gnL zCAM;+YoR#d+R(6o0<(JBC&ZDK+4dUO9J&Zlr$sWt@ENr z2n{%GqCAQKHxWs8d}H)-mX)NP6(d^oTyMBM-{jD3C<~TlD=P^}CRyS~DAXgjA*@^@ zmXo5BsdIEmKjx9jBGp5G__h5lEh{sf{(MU~^bW7**Sr4^KG_!dUubJ4$5%Sgn2c)6 z)nYGcZ>OtisZ%V?#yU(|M)q)|!op%iWZ|Tl>Z&V*w5uHyqkmLmSwT-C{F1J#u z^4h|jaj#pgQ7KYswq*^Y*Agb#syPC>b`LE-9&qxmdo7!Q z#%ZLty88Q!cw|0(azf^d^J)-zk*J>3&r*$KB`p7}2w>{$+*1XTRrUq01?)-X8BFlkYBPzzrwV(K9%v4t*Y z&@{6OO&`&WQF?!82hI8~n)UHPsiQ++HTL9`byS0tClz%1Ab?E@@MVYLKMe7r9FWyX znWSM_nixQ6xizuXkP$?*iQ*sO#iz8RaO7U?kqKujaL|Ytv)mZ*;^*M%SRJsPT%;Uo zk=M{TB!5ZDS3~4wPBaX_2$YC&R_U zVYf92%i-+kCdU^C+cUHI(vD(Ujz(IlmymXH;K7Wqhe?-mwb>Z^CzgM)E-`01Xc^i_ zpXv1ys;#yDQ=-c9>u^Uo5Vps@R^)Xnwu#MvNekk0l7l%7g#U6F(7`q-Csm075_mI6 zC93?b1|`m<0=X%pdIU~1Kij%sX3RBee1k(h3tc^KI0X*dVunhUv zc*Pb` z*GRg8n7Fy3vxXnl<~@Doa6?zoih_uK57BTGP8Y`J2RfM!10Z z4L5^5$B>(%3gpB}IMrT;k_vj6X7xS};SW%~$tyx`yT7l;thFXR#w>b?`Ojkqu)s`_ zt%9Zy!eGOM{eBCBb0HBg9q_Elu2BO+*L0OXl=LO|kAyq)vNEG>%l0k~Hj>(_$cVDu z@F~tUQy5hKRlv+*=ppf&tVk+;L^rwy7n$S5PhP#PNJLZmLiFvJTqGzBD_<%rB9pk# zgnl%ol?6%ug(j9`3#B@lk|+vexp9#$#7P(HMKTy5WQSNcmZ!^p1dKf_JF7ZFEeiVn zuOnDE{c39qONVZ*)gNb;NRNgyJ0Y*`kdVZ%B74Du?nRdw--OJ8F%3Jhdf*Jx$K43} zUV{>Me~5ZNU+K?^@--gqN@8O<5(OpweV#T>*%Rnc% zz$b^=_0-Tm)DOZ8eR}Uib9}W~O!>yOX~k`{6;7<4Z^D)_&wOUzRnNtN6X zUQ1Fg`^AGoQDPxStmzHFW(={>2oF$HX8Q*g>LeAFe{-`%T|3JZ;^6E@=ljM(7;uJ= za0qq>=#=GULrrT?mq6@ALN#^$JPWTH!JY$KBGkh^4!}+wt>uaNa}CF1L_xLQvg-N= zRkU9bGy#`RNDzvf2MyAiiw8EvrO}z5@DZy5$osc# zN=dfVRfX2933~?2bKk@@bn%oOtmN3jx|zcKv3AZ_O*=S5)&`fFtsknyn0x=+sO5c? z19UOf6tJ?~H!0k6ujOs*WkF$a)S$UqD|z`v$Hi&u`}74#0e>YPO=hF%cY5jSzO4QA zYjZu$ags2RMm}FE^!5Ap5eD=Za(*EHpaFE_B;Z zgTH&NuCF^2>%17YKa%h}L1-GEHt%u>3va3N{PlTT<=I1szd!3>HHuCx9u9tbf{qfF zDqOM{$7!(IWTd0I50+w>GH4-BTWizg7@f3XxWAaSy5OKV3tOJEwR5)^RNu`C06Uw zm%TmrkNfH!2Q^3ApWUpxcnWcUxGOVa2yQj%i;zKIf}kg=`EAz{cugr`J;pE?#nBAV zxc*&YHU8ksVGxF{1P6Iu>!lv+yVjHr>R9iBHaNi60tqg`Q zE_8Tgju?;VGyY!-_<;{f#}kxYm+AmAYO+K-eImY<-)bKr;_R@TIAS&#W5>S=$HAHQ z^4O`w$Jl16w;0e~qmxQmJh4z6O-|=>1b#&DVC^9rKgkSL+d9)qJQYce+li4#Hfh;( zp;Rx7JpnFxMJtweWTIy$*|~jnqw>^M&ofG_SiPCzKa5XQF@#3dHPdujM7iO<6aHC+ zbsT|V&jw9kEzxhuWicwvGLUyG9iHelvvR2F=^V94>ZPftB_EuqYZC=X_x6fOz}|=6 ztljJRfFTc@MZm2j#6L07mPrUCIkX(Fxx* zSMM1~mb?=qw9psKbP9UL`A1o(<@SeMk-lkH=>K#m;c z`2IBX@YHIZ?Lpm#`DrrB7~tma9#=ttlAK6#^W&(slR76{EdS15O_d^S%EOC!FcLRn5JmNy_{S+~~)l(jiUJG`n8^#H@eZ+<>2lK7= zN?#BwiBWexZyK8asa3IwM)X*2{8mrcpa!oYW^^cVHOW6L=cRAl%;#@7n_@$9K`%uS zs+iu+i+KMqTFvRJm86ptWl_|IMvP#g#vu>7wwanWk#BN-OMxL3^3l4_n(eeBlq2>R z#Zo2i;DU2jW4)jXJsX91Z=cZq^8mQa`1;Xk`skTB55M>L5hbdE#`mx7 ztlZRzlT#M#H|fSvhE-CUmw6_HWeBL}mc{oDrh-|jB{&$s(QmQ!gYhGdrZFEDY#S6B zl24wl(d2)LYze_9SNH^4pv`IY>44t-eHBoTXEC_mIO~TmHBQbwq0~G)D&>a;&^I?X z6I02lsfKEK-jSy#Cp!lRn7AjOAM4f2)dU}7Hum}Qj6HSJ(S%+X2dn;%#Gu`y-!cVV zt`bF0X7a1$Fmmwtj7ck~cShPDjlWNag~5Q!`P8{THX44~->uM{plOJSi5Zdob%*EU zYn2*Ydb?`1IesYb)(IPZ`c<4GbC?IH?%t>o>pV#MNx<_S$%y%kbGEk!+MG>-_U+tX zVXG2AVY)jvJ(BUXBJ6jwk<(1BO=jUfJG4Mqn-?b*I zTI<8PK#C#fIJSc+;^OIV8`sAoEGoq7pQAbZKmxfiWp&l$exFWfkNpW=hhB;{-&Th;&@H>isZ{RA!a@VfCCZFBHehZG^!lTt&-< z2qMX8w0Ir|gQiDpewVg%;G7Z%0o-dZ>iI*gi!K?Mv$DB!va;*|=)Tg~wEX;~S?z+p zxQUtXlxDY<95&Pb33PgqbX~k#09<++JChW9>#)Dg7w`d^g<5^pBwY#(_Td5Mwj|)l zb9E4;yciepW6BtJ*0KIbg zG+Lj3TedhyWAD@9Wll5yIF$# zuwm{zPd~f#ub-_8R35LNhez4P)ht5SGHi$&){(XT^^;NFOE*%7@I9< z!NrJ8_z**|bo=n2QDvehG+S;HSM`Srf3g)(yFxZZ{3Eo_@GuLnT9Ctl=mlrUtZ{0@Y(L6XihgC1efaa+`XUm8r zJV&L~TA!qsnWEi)R)kEyZsQw~@E4L6SFj3)u?mJswQibooWSq_ zV7X{ED54YqFuSLrYfCN8tJ|N;=!j;c+<2>@y5QMBn73L~nnbMmXjd0Hx--v+B>9LS0=&J?~NnK*_N1>kqc` zqi}gTQ0>EhBSA2uU=$%Qqco`sxOGVt1SY0)Xv~-}L##=bnki_lsh~R6nR@uKDOo_f zMjzxPN4T4Zx)}CN*X4OwBp1@ba-xyMprV1>HH?cYN(+zGkSWv0&{i@+vSA_T(nVL% z)8}*iy7u`YxXM;Ui`6&1$%Ok}B+vO)rytP~0zG2{ALru=U%ZJefhb zf*7;LVtbc5hWvb?3Vb4JBAU&7p~fPII3Y3d_2E?kdPBahk&2|_@aX7e{^-vh=1@Uh zy>p;zQL)8DrU1s-7m^M8$u^Q#;aMVccL$dzyVt6!?Dgdew43o1qUtFh9Lsxw`r;Tu zVOG+fFQ*uE7axy1-iRr~gEV_f0V!R4&hj)uQlU{M;^K45Hat5Yi3}?Zj=@*_T)psE zV4*ZLB3T?Zksis13m|~vG4FT-r3qG{RK*)nH!Nw6o;A1kdf-J_OJDbE9OJi#)q7eD z^`_?K4zA-xrpzu!H@C6L$=BPzoh{J4NAKGSkKdOmsSEWxi5KhjXmlR?`uZq_rx|r$ zR;^5=!@mjfcfSuU6e;10s}Bwix?f8BKOFKie}Sa&Kmw!Ekd^lf7qXc8_VyNK-|k}l z3L;d+_odpx%l1Qm1U{{B0nJv4Fb@w8U==I|U2RYPhL`L9AvR+d=z{__{VLsiH5)}S z_#K~9NIGM?CdCeZ4n5n>rVqAs_m_I}!@?Ybw6tIschM7@pTy*3ke(|l-iOcTN(6fj zJ0K1r+~P}pc9c!5BFywLk9voVQpVJMso&v41v1xWYY-9c_+0gF@jiC*m<^i1&4Rf* z-96T3Vqy6_xt=d^38FZ@=eq^1=QYd`Tv{IXUKr`!6EVG6$$7bf8a2@a5MTbNiP#}i zxAuZ*-uU#bLvX{ZF~5ORMJ04i{cJ}8YZH49{~i4D(PhGumq+j23e!A;eSl>?l#B4y z4EJWO;Y(c%+uS~ClcZjf!PQk!zD$Y2_r$Cfb#&x0Cb;xJym63Mf-sr5JP9p99na01 zE%CFgB_R-&Wsz#D8(F0~^qrN>g^>y_fMnHEQ_`Prgfm`KHqlB$>Qw0k$$YuVC$wr; zx1|-omhkQT=x!1@b%cbLl8fLhpOGj^T)4^UyiaXQ{j8H;S(+NhRA9b79|Tkte0t#7`p|rhgEcy)lO4Aacel zDM7MoHEf+o!7aUmMULJY>!>f z{b8mDuJgD3k6lBl9xfN}Z$Ev(^b$4zAZ`dJ>Ak1G(OTF7nzHf5yecM{OkA%o!F=(X zq>+Gm*i};m^C#glCRO+fb5rwk%7H8U&dJpkYa#xEiBJQ~dA-?=&+J8DIseE0CM*G7 z%Aj3;_?0f=@pPD!{hJlRYQGj!rg-+k!rgo^3#r~oI|=ure;p1Xy%N53-#*k-_00-* zxxi!oZeU1M)NKnJ1!x2AvR^Yiiibz!_tPlp>Nod%_i5&>Z#kfaB86ZXWrPPOcwxBh z2zk>f3J*&%yE(F0rIij?=0XltTGPE81+=%|b?HytA^pUo@s#M%^i;=8jksZ3)}SV2 zvUD`vOc`dv82IGKL4el8--;pWl!fNlE(EXuS5BQWk(UC>uptv``ej9OF*uGhh2e9{$|MO_mdT=abbVohYt1PX$cE3 zMCFVtq-7KjW`iyS_3jsQUukpd1^d|!HV5m`uHGYvu%|89@!!1z1EvKg8I7=af1%HX zPoLR(f_{g7N%c9yL*=`_ci-Q~Fv60KBity`kLIa}{AMG~j=K2oI|0Pg0+v`_O;)f%r*)Yu}PEXl>bf{jr3=SMaMJ zAVNZ;;-ghl;n&$-x?1nlH#>G<@wuJZ`(>K=?F%v#Wo3cm>7+ z=ibf0-9C3Zc`o&Z{9Lx}t5q_g^rXLHpuW+JA1A&ZUf%D6Vm73>51x!ggyaGGqZR^7 z6ENP(&_dfEHZXrgAN5M4wW|k+j1O#u@mEz23YI~wD;z;1O(0>5w3Cd+J!PU<%xCsO zQooim|H>+X!?zCS1)YwIDNC)^L{(bqdWUswCw0ak6aDNsQ*qsv%MHt!Fm=*pUu5|I zT0me66S>sbcaf8n#`3XV+AdIboWbFxi@H*JRtaZJU#A+va53w(Gs_`+lGOy$}1>wa@D~*Rj@r z!4j(lKU9EOPq>}-ZGJ4Rw<;-Qr0Q<^k_td`AFE7Yf-J91PA<|&PNM$IbvjRzK_T+#a|c@jv*q;O=B=HaQvYOg zxZ4BDOgQY$m>e)(oZj}9gOE-**p^;jU%?p9m;NHzOy%z-G;OMfp}$&fH14)p^MKjB z4U{@+aQYBn(Z0T2dLt8SGSzP?^g%bbw01*xdGji-(dVRUSH4)?w@Qg7L-%-&O6-DW z7D`khupL~^(|!>?=@0Ra@v1^8uv)CF)T-tk4n@Pm-(B7cveHVy9J$S99$Sy6zb@QO z5~%epKnpH)YK}Qss<$(^uAMdUa(Rs3rJHOGFmAqqx~i>qWmZ`}n@>hI*3AQ;qOnW4O|iZoVo6{Lr=OYbu)!<9Ob z7H&K=e1iuR6p^3tgg_cD&s=0luzH>6<*7``oOOpFIW_gZH((~NYF)khXcm|_olREZ zMQt^H|C6Zdq^yKM!M@UlY%#NO*;2vkZJ!2LaeeH9u}#`*euDJ)u~3dG-iV1NzrHT8 zIA0%eGkgUx#B!D#`=5ly^me<=@ zBY}n#c1~-{b+Lo4?zg!iCwX~sX{W5@A_^Z1Aa(vw>wHHo+7@i_BMBml`uDyKr!tR3 ztTs~~7c!c&%rAdaGcnz)_~hVL-NezqSXf~?d!RTn{+&jmRK4u|i;|x2to zR{i-x#kq+pvOY-ol%aJTAd{qW4MjzVLo23)3<^qeW=>8#7s^`M`8SU{But1*riLVw zYIPRtv)w!i8N{#FhgF*h2lo#*7R&9&e@Q9uGx61$EZolDz_hikTat@xf2O3TYis07 z^#1wtCt$M`ntW+EL)qiSaTnSV4-l`)&S!Ruc>lanieaz^LaTh<#0&lX#_wZ$-KVo< zF3V!2NK`e}fY;Q#I11K?_k1SdhneH<+7h%#v({-(WEAXlW+_9PDZ9b#|@5 zX}uQsGvb&X1GMSFmRqW_SmA!={}jplIjRJdlWhO>e+5SnRxZ(6x4ACuiFG|6lwxz> z=34Xfm&D^@9lGj<%cAGv-*|6MB&rh$aYcWFcZ%J!{U_=gf!I}1PW-) z{efU~WODyOLd^EsRc_R!hvjcB6)F9LG=nt(wY6$5qiPBJA35~I2P;`4p$4G{&l2rQ z@;@;?5Wn_JV(8_J1alCwBENK$6uJcr5NzN5DkL%32^Nf~%X%h><0cXNP6=#cCE4!f z>TrdlLc|pm^1lz_P@-x+V;lbzcfa8It=Wj0Kbb_jU#gcKyWBpNUqK7Qgaa07kd27_ zj6erdudDqJ*5p4ad5T#voKH-_w`TNgxaXOlA@-k&%%NX&9~W@NlpS_(CHCBe44{=J$fsDyhL`m%nPGeTu){ zN}oy85!{}xjmvno9=tR(dRH%LFjYW=@5eXKsM`%OAHm|)u64C`etw9)8GN_rXAX*T zWi-*NAQ*RdE*772F4$}F5)e!WY{4>!VH_bA7u&d$_#2P0&U7qA$}O!qV&Z%IkM_{{DW}5SFNNo zrTch9?g^PT2VeeF-qZ>s6aA?xq@Cm-CrA3>D&bZAd|$lUU(*4pTHyPhRo&F|>N#{V z)%k?U!EJsH38COH@I>l3{xtt~$phqgeWR3q?HHNKzvX&do%KrNQJ>X`?Ef zIxRXpsX02pioc``@CuK?`Qw0uCPO26KeL-BV!HHXQXGfRT~7JMH%y$)gU{ryNSObO z@d5Ah=N(I2u>w8n^tyV}#cI{=nq#r~<9V1W-S`{!vh?Akw)E66 zJTfvkh{NtFho%eH3!GQ)kN4Z^Lw$XOJr=F=`5J#`WbL|gYyE%ab)+DPrNFUI0$@Fb zU7Ry{9d8`3Ko}GNIWRyW?P7a?L)sTstbhPRCqSz0*$5f*@yk!UbLTWs+Z$%m+sT3o z0Tg++-AYSK%hv%W99{(MlYX^JOX*Z~S#92L`0Y<02HqY>x|-r=xxG$y+}%mi$xL0X zFoQ1bPHSCyfI8QWp3C>TzgH6585#KAFZ<3JS767i$wk314iV*WAy?iKo6+S&UORKo zz-X^ejj+z?c>oSF>24q-w8HnP#KA;UrNeh2|5&MYMaRN22CTd9@kBg|T03_t+TATd z>CBeHG#%=P5B|`18-PTSdIT{AJ3e>dp2V4Z=Zyu?^wx_0s?KDN=zKY>W?QvIs)EF# z_}<#uj_>N~N@;rRHR#NkrsQU1q~*o){W4<*Jsutb0l-g=2ob+4;M;)TMZ12XSR}qP z7_1iq6jK|UIQo_R5dGIi1JX;+r`W1w8w`LjsT;pgirRWIW_Yf~+T~7n@Di!s47GGT z6qOA|L2RcoKXdBza%G+G{zHlISOgejv&E;P=Ia$E`^@jx)|7X4(qc_#*gB(G8JOPe zq%Rl4gd>Le3dS@m2~HI8)<^#)U5Ky?J<1b)c(6P^5wwh+uQop1-GTD>4Y;@d!ZW#^ zB#eLrfC6V;*BkR;%$N5jDgJo~EZUdNNrE<@8?DyfF2})6(GBUI^Ku-Y?Mke9kbuLX zzPh?tY3u+3=FZXCIi1Clg{nb^DK0%7VNpX6WV^MM-$lK5a>8-_Y@DaB7lqG*tXh*DkM~x+@H@QDIqO3_|P|3pOLXvD1|p)R`eSQ^J#>d-fcd5i{qD&N7 z7xiI$){<0hknAUtuAOjo&8zB0OC9sMM=QJG=H__S4#q>O)}s*@eml)tKto*#%CRWH zCV>GW>Xyi#Z; zshKy6k){=LE!ZS4AoOtGx4$K zkY{xClu(UVA=?laYvIs7cpBU`^H^hQEarEI7w-s|UgNqZ#9eS=Bi(6$ymGy0jdwt& zRRg@DfO@ZolNp?2JITYX0+(s9F^xM%=yP5sL3pw zM!VW#K;>Hx|78aw1Pj)<%fZ_|um?lq)sCI5P=BngwF7^9_wxq__3LYSJROzPOhv#V zBcCl->^hgJP`_>_S60&2X?d4O46*#W=hx`9^89B*&4z5gfH)vwu~;~e(T-Z)z#VS>7kRo z4pP#7gCpesrdgYL!bj2_5*aR{sF*15ZNiO(h($y_!TYU^9mkfnrtUU8TcvCn`=YPv zz3$?Ge?2=<#YQmrkk`)P-cQ0^T6}!QvF?UZexSltscLomxuDg|C-*{|z11m5Mb_o@ zFxgjxw^Fz2{QY9#Z+3dL3u8H@7dPeYua_?U&B?jd!7p0E2fnRdf97;|hB}#X^{(9B zH}9LG->Ch4La*bzN{w|~Zc*)NEna^x&IE9#Bc?*3(|vY=kI={@u2TCOO>m4$Z*4oz z{tk8b9$9r4K3TNWSgZftq-5uau)jjdbtf>3^RH9P#3X)t>G5Njo9fzOdSbppEM6E` z{Gkx`&zGy#Nu4Hva`2eVetEu(wXnNZO}QYPc)X0rtFR`QsaS(f9332rwVN&mBh7*S z>IjFax3fVW){_bL*=_l@i`PhF>1>$8r)wBSGS>go0;cYcXUCRDt{=|b@x0&m{}p^{ zx$XyAt#fF%IzXuf4gCv7A$r{zo7eWZ?!sm6)v4=XGu0Twl!^!5aQ!@@5)vrzh@_NG=HDtCqq;Q`$w6C?NHS}I=hRd~>yoa?( zr!iIP4?X;XeZK56Px070*y|mpB7goiK7Sf|v2_d-NT1AS6Yw}7zS>sJ(UB8RdykIA zcbCkYu@~k0`GHeJ5ZQm64cP8xA8&Mog9g@`T@^s@+hTkTX7d+oEvH0VoAsswe=;-H zGz=t^#%W~sV>7ee8*B+~{)5GMh59TAuE-UzmnWp@+%Md8*aKA0&2 zp95r3HFwCVKb}_JzyRczqF7umH6py96E+46<+~+fX=bgStRjXJ3L2>QN(1q+KwfX> zxS-ge;GGMe_69v!hm7PD7EV8RM1FFLnCzz7AfhggMnU|*M>xa;EH#T)(Ube)aDn0L zdc9(z^b;fn;3g%vJD}o>>r%)a^LQ9M;V)FFq?oTHjzqaI$CIX zzxL;ZM+gUfWpHC>TLP;OlM#iaQmL}a)PMa1$^NMmhNXs83aHc!KUpcE*{Tb?HJ0%- z^)NAsNv6202pao%6nbxU)QNVmSTx(L)Monx-euZNpOF@&v&M8EPq$T!+U}^oE^?u) zdj()&V0^Y8svjXB-Wcj?hev;QX<=c?6FiyT8bx}2?yFB~%gfg~f66U!Y6$Bro%sPx z#aI?AZ+L~l!2NOWeW3L6u!|F&Dnt}d1N^B2TJi|e~pS*z^T*`Li;>4!YSQqfb=QD83_*p4S}Nd=Gz zUw6ce>AIBjHd-7lRxA9|hdG2=QYkv!85#LM4^0JC=#w8bmm0@^{>Xg~AV<{{-sG_8 zNfn&R^e)-Rci%%tkGIZbsn;+ondtT1!)A*6-N-<;4o$L~BZcU9Wxp#Hsf%d(8-z%N zG+c~`U4MDB5GO4LTCZ>~+KM?D89_lIm^h$G^O>EPU~ZSTY~I`E0Dgj3S2oen z5)QVGf%diOZR$2QG4UV4lwMx*KHIfwmhUe`0Q5AY~e z_k$UazLczH*vrJVTD}*CDAL>84HEU_fboF|7y1iJwTk!q7-CNBPnAl0&vbhIlN4iN zaI1~?=FQwxicom#~~Y(+f%r_&fOCL*`d|B7>P`cAr7~@i8Iy@LYk0Ae`UqJbuXhGtLvz0I$9WD zzN7#YK`NM7`pIEITpaug!!)W9GUhNcg+K6id=j&AWH}`sXk~(iQeI@LFyC-+EgG4o zA&?dk1^S!mgAP;SS>!EA<0tG`1fFpG${E`^e)H;28ev!hZqPysxWbZ`i4kImMUiNI zNTz`TMMWhI>gPZ4ZTZ71q8qfc8pKLFvuF#>ZUbmrUu@HOT zID}dO>3JQ`vpQe0ixN_q9^;rVSf<@Sz!(6RFtNc!q2G0(p(EkRRc|`iMg3^Wl+?EC zFWHBaudvFg?vltD4+Lx+uA>$i3W16^=c+d$y@bt3+>S5p4A&aXdkV#*!2h=Z;!Sio)rzRq>EyCE}(wVz73 z0w(xySLOMbe^C?G=ADvProz|Z1m?I3F4*}nrS`Fww4PNhs#h2hu&O#zV+9sOBnQQM zys*DtmBC#WS}IOg_Jj2&FKge-Y}IO68O-==+2^abllwj1Q&`c$F%vx3mFrGqHkW^I zOH0o0Mas=?m_-MtdpEs>L9fem6V`1~jUL8oWS5t&SCLQWreJ4$xU7@Nw#Mx0`qPA} zmyWjgP*uDf@C#J79*FEh0b}e}%BNvV*n-IXBV$SFpcFDrhCQfB91&wRLfjuB>wfU+2pfqX~F{zFK8gl6HHn<2f?`0p~s&ogN+*HkH{mU3W;FQ363*e%aAw zvv&mdcp(%V6o^c~Rc(Lx5E?3`P&j$E>D|B45!~B%ib%u)dko_h9F1?iT6q|R)U~v1 z>az+Ecc4;!Qm{Vy2aXNEG4+y~@p2v<-`(AzV9^|YVdOJA;&X6_Xm)2~<6sBYrV*^V zl$@Vy1Yfpz-R59Ngaq~<2v%$oozIrYLps#kpLTig#b|QynOvCeX2S}|$jQz>j6a<> zKVj2PcV#+<>4vK`0Xt!1U`>zp>c{Zt!dF<+B=;xp%aJ zU*98t)`$>)j%a4|B0g^dcxQOGw(RErPu<(;kH~G7B%X2dGSjXBHZ94G6VPHyH0W6A z<)0*l;lhI^H)FEm^do{N7R*eEmnyjp!*(ZSlF?H2stG`h<-Q;yGT&0zf|N47Vbo~f z65)m)Pd_74#2*kLQNbcZD6k6;p$!uuR{CnxV$5l<+)-5A>0qP=0#f7>%R;`X3MDB< zCxnT^--a>Thu5LmUm9X^3$mc`cGb-ow_?V)W0d`d(e!>-Z!4r0Vx~5{C(7_>v%Q|P)0BmG24Ag~R)Am>H6`mRxiDSWB|>(3nz(tSE$z}SpbsN~L<9=GI=TNU_IvE=bp*V0L6LO}Cy+1=he5O9g-8rON^v3uye zzij`C;3qdH(0=h0T1$jjqt@cz zrrr2>lrC|#E;@GNx(U6$qNJs2zZ)tFOl`Hof7=n#C^@cXC2^N(zFQrd$8#>5Dcp>; z)*6#+kF=)h07pV>-M?ZF{LkQ%J#oLiH~5Hf!?4QR^s9Y$wkG+p5u4}r;`+QP+7fJf z&2DaO4RO5%`OCw3U%EBXI{0*pa`3lguh0DB7@U^lP>N3Pv5`8pwnHAoOD43!G;O%D zLNTem&zDG{UhUy;H_7&c9@FhJq@^joc^oY*t-!ET-rU?jG2u8I19sI+PnPd?s!S6_ zz*$lo==b)PkPz&AxfU)XdUacMaJ+wffc)8F`7(2-{zC=@#ez$6rXZn((6O%j=}DP? zBK=seW_M?2D!Zef9hiBLkso}0(f;-{n9m2)3^kZ9(pT`fof$+EYW^1RyZ#Loj;Z)z zJoPatZp~CWa0h?dGbbD1gSb5qR;_qa%!+?jqnj`U2_l{x(rK(+G`~vrF+c1=z*AA^rfoH zx8uVj$+>4i6X7F`k~CACk%)3K!=@xLBQO-YVaZ!Kh}Dh4uKUL#p9!HRG_tLsXr`Vr z5l}ytFUX*(ILZK1A5>FzJOg`VZ!uZ1_x5zwTd&s$S`MN8SL>%}D^XbbuhuwY4Znk% zzyt5uNqV@$p6--)U7ryz?67dX9KDX+IO62*^Esj=I~iMHfJevXl@_Z{$s zEJ}XE!n2GF-jDk2Qz@#0b|@F~)yvv0nXmEFVgK%nIpeB+kQKDkvMln?F7ZcjkKS{Sakl+>1w0iTojJ<11T1^|Hxk_=> zy19wo5~5~`NHFK%Wv_8GA20lsLR}wpNWZ!7JNhZI*d7%@$;NOO%77i<`UBp4K_VME zt)=m?t$7S4Ei%Qwt2dv*=>3m|qK)ZmShEBSnJc>VyGDmt^f1Nu1F|85?`s#oY+I~T zxEO!%{GS#;%MMzj7}VN83G!ZNDS7;yoiXkkJyvsaxCaGg;o3*$P382j9@gH?|J$)@ zg$iJAIoS|N^H3kMVnDwH89U#@LqccX{-S-j;W2^EVUz?vIwR0noM0u(mvdIigI+Lm z5S|>odLsiP=5C+KTN(`ct&gviR0e;^TW|f9+9}MOXQoYEM;35R2`pA-vKfaPMbi5$ zm|zpnE%BWwB2Gy=qK?*-DOb&!A*o|r-OZ8)e?x#eVrONovfUMq{~q~%cB{1Hx;r?r z*1q;|zUpxC&vy)rTmR)}GMzS{3Qi{_u(9K44Q`#E>kgT~!{>`RYgy5%va_)b4-Bx= zAf+bi2=5m};4;7MCudJhjJ)1I5|osfPVs)0+wE?8we_s`y-#lgLTyG$0+(~;@uPwH zf(NoYQa7tdH3ji>m**-A3jhoGjWJ*dpzXdE9l&!vvpO!btgS4JY`8;+M-j*SwRB%9 z)~W5pY083YK*!K%1-J*VNb7c@rXx)~=P+lmuWT&N1A0Pa9=8g*#R%J}UE&JwywJ7i3DE7Jq z8$YQ*m_d(MC}02y3}I_ZuFK8SS7Wxe;b7#eX2`gSw}ZDE-7i2lQbbh`4hs_(2dvG7 zn(3JDFL&6FX9_UL1ax_86Nw^#(d}YBkI}~miPw_zk7*W#oLs05v zNmhJPOgtt^(2FogfI=kG>UPasl!bzgc2cfkdXv z0#hOH=A!d8Iw0cm?z%9s^i-AOz>~jXYCXO0KK*v}m=-@q`VZ>s% ztn)xNse7Dj>`WGae~vf}_8*Y8oroe>ZEI^eUuiIY$ast)JfMBsT32f@7h0%7AY*4@ zayYJi-hv^Ok}=jN0*t2AA+S|-Iv<>iRT6u}k*$txs%QStNGH6@MT@Dkz_3XK=>9L) z@XN{MWJURNm74ZX)xLnUA1XeIh}Uy_X8^GEp#VtZv*&PZ*3X-jq?wfl&q~URq#ZqarScZ9jy$`DVsC`zs8!kl)Sh(I(q$36h zc@J5%I_9_GXgnV!m6{6ep_O+TvgpHQlD45*Wi~l6H5ZiF+A@8~{=CY7Uok`5`aMrCgH11lDDr!J6Mh8@yf`=a=MT zT2$6B$Gc@iqN>Zwi`E;`QW9;>thjQC$->c@euQ`x>YsJLznfE)j*|LJmY`JXljf_+ zIDg_g%UBK3eJfwJ9G9A1h1xIZ@@jnzURmWFQsRLp$%y}|S+x6Ws@q2MOT8^mb71@R-N11)J+6WpI zlQj~WUNQ!soPmTlOGO`-J1NgDdLt^ctz+d#8M(m$t~vaofa~qq;=*>DuFPx!-h3%X zOG|5`)jk2$$EyB6?Jh$6y1Jhqo>?xroc{vJ4#D_>1HY4h|Fj;! zsxy*2p6;Z<57^r5e6OnN(&99pJl)yXYQ5V`)~t2lhE-vIMKnHFvG61UoTaJ?K&(?i*T&X5@MNg zA@B=}6(d<=%mBfV_J7N9lAJ`-e0cTPC^Z??5rt-@ITg`pSH)Cy(C!Y-_~x-)V>@% zhM`bDg?>M1VV#kf%qzf5R`wLGZZy0UgrvT)q5& z3@xAG_Bk3mU&ZeJ?3ngc)25B>Qu$H$aL|)|$L!8DJMZAP5Q0D5Uf5A8;*e53J~NNd zR&}B3d2pzB*PEl_&_&}_x?M!0VI(*_}k!JIe75{}i(2KZrCaF3*!8XPhL{>$&v9 zCRzxxb+2AK=dKt9ybTy^f`xn-FXqiiPrM8KRm3sS#hS~sd26Dfs?7#ZBNUe-M+DpL z7)*C&I&vyhBAuo7_MTkDyFG%Yr=u%$*bRe>Wd_VR?#LK-zT@D;dVqkF&F~G$W<+{q z%2=6IRlhx6gx7U5>hWe(0rPml=RUqO`XsONAE#Tbi}2azZL|(KR%AW3fZSW#;`Xm! zj)1ktu0(PrXjKTaR4xyC-rqlph&!;vR`ow`4In}qj7*TIdN-1xacfnoYJ|*k2&_re58O7PX;Ipuf)Sae zKLOb@U#zW3qz4W4;`Pcu6o?-o5J0UQ-tPqx^aCn)q;i8_1Sm;PGa{FHi4fA?{>eb+ z05|3^fPsrTEe{YOmU+gaeOUNRgG>!cL7IzgO7!Y>thaG{bK*}T>dZ1shQ3CngY=XVN)9o?}n>6E0%9UuXKe_UTE8?PZcf4!{ zfi$I1a^&F5ydUq99L=pa!c~@$q5eP1Eh)^9oc0eiC~{nD6nlgB2176r(jNP@dw8ny zwf6_h@27r5wI{|u{6pAe+=+=PN^9U~R&WC|c;3SMzFD1>?!RDiCJ+(s-Q)LF42E&; zK`$`73oQS>OtK(hsv4}Vl$+}KN3^Wpk&aCO2y&MI5YzlF1*TF4p(Cz>tN1Myw@*|j zzaU>a_IJJ5U*Nc*&t&pFzohEXzvc6ZsFtvqP>z~qEu2W$w%1XKm&=+tAnCvOU>Q~i zlAEUz#ZJjek@wx!aq)&nU{U|grnV)o$p!!%skI)VE`);8LT{KBWUTI&aAv5U*C*bK zbF+tb2|{>bS=|3iv5$wz*$)`R{-#-wL?~B^N1Ro?t-BUch_G|d#~z68jew7=GdSJB z8JQv8p@+NHJ^N#93^c74`j{2#4RE0HfVe5M*S=oGxLh*zi3$A z+N3*iRDH5Wq(x+;M}s(K?$kZe#>oeSl2alz8Nue*`ibF{LMLppC{JbU*FeFi;02-I zCsVMNgAxBj#oLfY`3$DVGi#By6nz;ssx>}CXm}1Or538fR#Z~ALAI^8|6LG&y%BPK zjc|_y%lMR_pB?A~^;xqnCHitUMs#YNd72-3a({IeSa;ay^+-@Urxz-3X!t+kia5o{ z5q@Jch#pzAVf2>6I4`@d7JjpzRymEo4h=cCkX?AJbjeP(CyR!X?_eNo1wD|LanL(} zly7!8CYF%hPZDs|JM*3=ZlXE0IeIZO*2AiPsDi%f+J)}fGRc?Sy^vx ztcHZb8_Rs_qRLJJgP@~PR2@?Cg(d|VKdM_xce`-Wb2tSTGXI<7aMq z6y>eW^9KMnrKLaOevn*9*|lRE1B0k5a!D;yKTq8tg$LlCnLt(9;s1t~u`=MGq8X}a ztM5J=FWJWdd%m}nK6pMVl}PO>sIey^$jP-sYdALR2E7tW(hWQIj3HqwjPafP0<&pb zRXLojt{(Ov*KLl>$P@@X23%L5;m5;yTqcL3Xmxv&r@m4#_9G5BS0@%DZ`$xi4Wlx;Pt^f35 zl%BSA^8KF{0FS1X2tRwlsTBT0Y*Nv?gX%tTB2Kqc34xI@{=-ThUJM;kH5aZ$S+&oT ziGknxR9Fq!$`{JiIYuKp)Ek!G50{IGm4|5^E1p!~%DlkhI}N>By9F@vQn`i5tNsA& z)IDgxifUjA%yK6tLIc^PAZ}*M)m1~0eNfeeG)u}(O*!qNl&YY)Cgs;ItVuuYPEMkJ zq);P1CDv-Y&^HPFY}dvb6t(@%P|FI9HKrP*>D4~)WW>KS-4p-4+~83HR|_abC@4!$pcfVe!>I?fb%)n+e2`&Q<|QuXd4(6 zN-TIh&*Lmsy*uk%@)m1A8rZM(V>zF{?E=uStNGbk^M45{Q<*&bL|^A>mCQ9LC@5gM ziLlqGzG7m2yo^n`U?!R^pS2&HI5OAVpXy%wiI->N~;db{3G$>QRN3t~VXQ$}oIZ8r%Ci$x946yEUG& zSg`(4%l~r$x#{@ippeh&ngkyopPHMj-_Jkad@Ad7u^iZBe(`RQ-oyO$ajd$DyIkIz zMgACwge5Md)S#4*xpky4J5y$)JLsu6Dc=)n_?H$5_R3P%@*U!wWWH3Lz5-jTnwToKF#s2A)PmC1F2UlW&@PB773l ziiuD{emyU?F}p|?M_J8(fYJOB^n_g(kj(sqU~#-3ydeb0Zi$Ph>|M*P^QA}u^3lJ~wZ zyU+a?|H(V5e|e@9=PDv4C7Erl(IwtH3mu-J z?AQGN{5()nINw*%_D*^Da^%FEZC307g=fF*ei=h(Mfy_(-F&?H(7w)oLyLoeRAp(d z`VthE^xf)Zgx}vbd5^05;GEUwDoVTQ0gnwb(H98zUeQCB=?tiCNufHvuN>UG&-#0! zqN8`{9g_gCIC9d#n47qw_Wqw)4Xw*roGzF6Ino<6-srR+3v*Rc?z8RTn~!C;-LA(R_`W-siBE94 z5FNlhDMZ5iezt`9^2?riW_ffzN5AsIir4yy@Ys}@&-jlaXj(Mzm*9u)x>@@s*wCr| zmE$V_)D6+(YvFd)0zggeXkS(D=jTx zk=TUZ#i1UjospgTdBuWQkbf#RYg}SlSWweHo;#D%{{t`|&|&ME#V}976&H_++-;Tn z$=es1`FB`}A)B0rkS|901l}AM!;O|wRQ@ZnfeTZovWj?O&j~$@ha6E>sQu@)6KC*) z{Eg&=_So39AS0V!bnlzE@JQkROr{F-{qLaTZIN2yq-2yd6`19RlGMgub!-$P8#L8F zej+D!04y%}x}650QrNFK-6<)r-Qm9A5PQ9_aLvDj`v4X%UyqLn(b6l52P7q1H%f}> z$lIf?6Udk^_4CP6BKCtos`)$i6-Hs@%MLmh0?3@W(T5Fe^2Fp{C1R-l?=Z{x#9w3Ied5!h8!ihBh5H1S7ho+EHxILmT z!0DQjnHbpxKIC9y2ZG>$+mdH@XQ0j%D5C8)qely@KnjK&x`>ZQi=}}qTPqe*@Kk}& zIi=inN7U-Ev9k$?YzI!2akCMQ>c4t=xtm$+1ib#f%s^WjeswhZShw)>=dq9gLJHk3 zFZT$!-H6zhOP@E73u;ZSP(SdE2j0Iqz8&f6OhhKr9{!8t^IXcZ0d)%p33azOQ}{Lb zP>8i^lU+SRNit+XGGr}eL)tvPy+PQ#+87rdR?G$n-)WMS@(aXx@okRsGt#O~?nC_zR;$(j3Q57i^!GdK*kf%k{`B61vCyvYHuUdC0#>sr5@0HH==ADlrG8wjatm0sEJ=VCl| z_HW-u_@C|CAVu(mb0N=3WKOv?%TW`TyMuNj2rJbek!WU^*H)p;CGVA32gm}CE$ZV4ZPbwuKL@r2f zQW16=?5qE35E5@Gpd8-nhLi;5gXe-^}v%}t~x=O?jT)hKYR{bXHl_CjjJ@LA7Tvj{Y6VTm*vs5#{0(j8h)o&rOv z$NE$8&47&)CJ8wQz0N&xW`ZTbn~yl*8*?wA;1HLj`wzg{KQ{yM`UN%c91D9|?Pd~V<6qZ{l*sk!W2=M8wE!h{owbD!*x4?twX=4VyqQBSrU zJW{GNIkwKlG&ri;n1WbpkNrln&B3mhfTOEygM1_`h1*~?f8r&1H=<8*d*eWtL&%~x zd=CT}cXr?3->rn!g%?K0h7g)S!hnWH*u}*|33Kk7(WB-<=@% zozwpIX0B3|n2^v-Jt-|M$C?W%)zaL|wcK^-4`WLqQ~c6{pH-0Um83AJszbV1rvCWx z{`%}{q%}^6jeT^sS2Nt*xmMwhowz*-6$0LxhpCn{&L>2_r`ac3#4{i{&Vj3-kB+B@lP|ukw|{( zZ#H*z6~@ZZ7VkULNxPe$o;R6f-$IM?tQTen@Xp5D9Y#378_ZYT2Ja}_J~t3@8ZB2B z^oOE;D`JK)n3RfB>}tla!7v>rPk>pra@O9D$f>8KVtEgeS1UQ)I2PuQZwQ+lZtdV@ zVL8XqOe(R%fOgDyyuc5)bV(J^;xWCh;i7z$QwS)IwmN^m=jQgRIi3iLY~Eho`N>!~ zFxi|BLnC=_T=fCdLhIv69?FwpkJWOc=J^$@j_d2E9B#Mn!2lRtiy4bSUU!>r&iHk6 znxmOL-Nmj__?!|Rw-Y|F=c6tc{{1_n)ODVwmjukCKN^V|$(z<3E>7j?>E&d12ZjfdD#5=teT_R7F4|uRqPI&qB(nib(ujaw5r!Qm7w&Qf90g$J$9$879k2Y!$Ql( z#)iB4c*w)kxXc-unKWtvPfr2lr6Z?E=>=Z?&@a5%bx#Cw!x7aN_-rlVy*m4lEx zoo~Q9d6q;q9isHdDQih_Y0RET%Ra{k^E#PYg9}%6Ecsl}70m+vgOXr5_7Ot_F0^Hu zfC)pcnD`iaxLm2A1$Pq0L~$GYcVV9hQ-fiEsPJ7RCBnsaKerlJ_j245U0B`J^jNdi zF^yq=z!7l5K5BnDTy7w}U@TXAJzA|7%A}Wc@`LT4EthdxfkhZ+;Q)^^;-nAgvly=_ ziAFOkF*UFp<09P+gw(Di!xI0y@3+yoo8|e5qp`I5v);DpY#||=%T-eaS~&EXdY;il zI;*v*ghf1km3y?6%@fE6`ZbXzIo{+`i%Kefi=1k^MYhByR^@eEG z+3tQbg`1K6dAt1)bE{J-iwkx1@nAAp!zvteLO?)Zl!#9z>#aRI`%~R|VnTG5dRnb;0HcNjSXW# zVUAOh98`Yd*sqaHvZnMM31k^hgX{8UVSARs6%(W#_((>v9vjADZT0LqN(saNsL2j? z@(L*1D#Y=@XeN;~tx%^??9qIAf}iG~?+|614I?L|A0~}22@$UlF;t+{H0g4#Ls#AL z0_&~t|DD9dNk^~0^8aZ8&Yv$WDAu(?%FtFn zLI6I~eVO{zmALL8_q{yg`M>abhUez96Vpxj(n6Eh}!KNsy z^_N?FTOpe?BOQDwhiOl)eUBP9hD+;LXZ`RA(F##170MlMM;)Bb+eRaF#2}(oGeIk` zN!Pt@o;Mz0FpkH0g=3)Z;o#$L%Ub;Na98N#88(11W9tq33N)hhc?)F-rZ+fmlZ)2^ z1ImYd1?OU|)B-Mqzj$&15+5)ektxx2WHd)XU_i;vDx&eA8~Ki`GK%J4cW zMRW3ZGm+DmWwd*=Z@B0W0wE&NNerT7A5|7b^+t;sbWb<6ITuq%{M&}b!nJnS*Yv7I z!Od{s=LAT_C(|W;DfD?fPdYUk1~v131P`0_IA=ktK9G=_Eb828Ob`Yegck7s`chQ;x8? z#JpiAh(9w{8m$ooP?w0;+Z+M#;jBz^?{9$y>b9HPsywA&GW)u)FBK@N^6q9vgZbbXb zs*JIUnGi8u>A{{Ov&lV2+zgdt+}&?!<}5WL-u(Z#`m3n8x;9!DMS>()Ai*tI2=4Cg z?yiNqyA#|41SbS{cXxMpcXtZgGvB|~X=m@c=7MT9=NPX%z4z-)D>({?voqDPp(!%T zEywrkE%Dk z_J)MFDcYX^*Ma2Cb^gt`VMv*Eomg^vt&(p~)vR=LWR2Dast)!xjMW)c-(iIR zs~GC}iZeYhy`DS)qd>H+icxFaXPSp{SGG_|v<_NDAR_B)dqf^4XnThEJfI;zs+th= zo1GJPfOk;OsGfz~;o8@YBv(j#Ts=WTg9YjUMv<@nV)e1-yZRoH5Uhur zTcdj;c|SR|)_sSTLc@mpLs=u-RRBvsA7p#TNQ1ARuf4$(3ZE46=o98*69EzN$XG_%`*i+l|fjAt#_4iSMQH)m4|Z zl|(GY>3Fr>IW4I`HoaV-L{wdUFoy4qx+$3CI9RQMpms0WnnV=Ya;p024|MYeE;=T9 z7Q2tbX6IXj?FNVaDXH31ViDcL(Q}Y!&uSxTo!OQmtp|SQFTl8}Eu?_FWbW;5VT14O zawY&}gUfz_=+GP*udfh`tt!H50r>7y5*R zS(hDqRPhN)yy}-eWt?>o5f@;`htxUCrZ;|at$Lev+s=fC3$dPacITI`RtBUb?5qU6 z{rx=RX7f4NaM^H(c$eL|A8l;Pv%IRk)*4PG(s{T%?;{5X2hmj1(tqF1sg+D*a&T=u zedO_QzPYsHa|Ew$2TQ?Tn;y;omD1PGPAfUN=(sSOD{gu-YvMlY3wwR$`{)bBv9xs3 z{<=Oi^^{1FzqXbmasvo)A~0ypCo8)~HD(ObI=6u;@#gBCHzF+h&Fl&7Iwn|qBdJWQ ztEx;(EGd|$ZaZOuhlgh{s>b6^vunNu+Zlm}(r}m?j#-Tn=VxxVmm+0-To8>MNaSn7 zFJ^V=-x{7%3DOzX-!Ez=<)-aVtOO!!$m&%$$-x@HKoHoftHC8EkBbmuFFSat*V*Yc z@XMKI73NZ*IOY<9A#-VejIOv^bJm5;~j@SDTx^~Srmodq2vk=*kZ-O5^(Z!h|PW%JGbBG8h zOMg$aE=C7@^v7-vI&MxXxb$hukw?=K6W4CS1bz#f9vS_D_;G?Um5V6S^?a`K8Lpt!nP9kjLFQRAt!a41e0`NOIBbZM8U zsINp-Kc4h)b?4l!Iy}SU5Veq+%`_u!e%e+|I*oBdHIA%zFzr2oxd|@`W2@Hhs~U{; z;*hwPanKzS5x>{)5-vLWh^~^Dv_w=T2&3BH^V?D#9bfe{xd}tv+3`rA!Uu~C`xA{> zM7kQbXvv15c&m0wHWf+w=SbMNT_DdKG73xSvB6wfqx{pS(#*7klGyE~siCgEKA6Zj zk`MrWd76$;`m*z7Kn@F`@Z4lpMow-5@YZX+zP7~Ya(3Gawg>q6RC=3hQ!2H=yn;<; zJG=MI*v$+sBmspAX>W#mftOKiTTTv6TJ^`bn~4}cms7VD7wcoO`40P6QK0$&@IzLdgH172&E@9WSf9UJu5N2ry*To1h8w~=Mo6q;l4Hpni!i!2n6cm2iko>M@ z8}*I3yDv=$@mh`6E36tC8t><88};5R^JSU_5K&GPN98>R_p6Jhgew7~6TNPn&05P_?NM@>R(%`eU7{>Lmx&38(IwSD zNK}-y@O_j?E@Z9{)#ybAt8^!j2Sqf>hm(f}DP65X=fvd0B!HZ>KY|^t^tgSG4zk$9 zX3K64#ycQKSZ$XOKi@>1G~a<84}cnJHM$X{MYm**_xbd(bhK2hK*s&5FRbRT4JQW| z095ht88~=oa=vVxk(xC5Uc7Y*y#9GbC-hbPt2#EW!`VH>=&)qjGdC#Ur1^%Xm}j+_0K$C$mnnw6Vv1!Bl_)Re?*vQaoJAG9tMpeFyf51cup0ub?1HY*P2h7>7TF>1GB(j@+2nOr^##!|&%N^^b8r zhnp+~YrWw?DHZkMB&HHb_2*+H*&fsLiZ6TgY()|Y1q>dvh=eckoizvJMn79#V>;+1 zVIh#xacHr`A7K9wXHSf2F*gyQ!}xG-!^7V`+}-&AclKuBiPNl_Zp%4bu4%7Wbh_Dm zDMPH;xI{gj8B&SbL^%bDQb?+&Em4VY4^eccD0o+Uaq;zGJp-J5#N&C7g7rwcX^!(j zMr9AwDxx$FXqQ9N~Tj;(V(#6Ifd3=u9<_!lVFJGZ3xLAYb=}&4^%+KGZs_rh_lCxN1evJdv zTbRI17d;EQxw4SowWdNaDvcRfA|B{~r!5;_(T~p(bFYPU{kQa~x_~LlKEhQWE8$&)i+B<(l zL|g?t%cKtI05OQnZ+cqp9ArO*Z-21(r6jdAsx?P2XlTo8k3v&O|2wrTN3U9QpLy@IX3esQU#dPTZI}6~jyS$wI6G&G4+8V4LN8d_ZL{S9sx2?6U-ujh= zf}zTL;2zNU@;=(FZ}?uMJiLVj{8|F$rdIQ<=5-c6RH|O<#VQEnS?TH5ZK!^vWaO^L zvt3>5TdPes5)wmC?(TM-`Vcao;2q@UCx1qz(VMMT?M(DX;j&tk3JG1=+q2Kqs@qv@ zw7DkVc6xM8L7l+gS7`aJ)ZeiU-AKKH?>4b}?l)XJak{cbv$);^thKmWqt9dZl6nad zW*=@ZgJiCbEt_lU=@Ix30F@mXo2-OHnEuHhF>&Di?o|**>LNu4T;O0lh6*xp@||YC zURlq5O|H44lI|Bv_@y3A>FDDrfmq)Db;cW&0`pmBjsK-ja_Lb6(uQCBN~9@GVLtlky=x&L=SBWP(`~xla>bJc3k`J<(6U2t zijnC+x&i&D43b|z)DJ{zx5;duX{CkI+lL#=*o;3B|(&ds^0q*Y8uSvj0oZb014B8f+X1Uiwn zrA0*0FLF!Ck3dX9M195)9-w#7Rrb(O4@t@9!`+Nkzot?_+6Fr-586>tNA@Nj6HkyE zPIhxNdRmPWJy9`GL|a{M;p(gj!=`|`23H|QS6R25lT@nMNm+1&8A(J*S-MMq<4smo zp{#1_0MUB48+-4S1Ay7{zyjB~Kx?Bz7%D2pR}2CUCuUw=0*yi-6IQZ);`6*VkeYHC z6ciMJiRM3p&*ze3-NIVg^JRO7F1>|*>*>ln%WHeX_rbfy;_Nqr92K3o_g;YD`nTnw zsgFyt+jolPD8C&J}edL0vP~hwH13sr0eYUT+ z3-VFm+i;&0fE};3xCR5xkB)|30i)p`u+@xXd_+Wvby6o$xBvjZ!#9hr9qiPDlICKy zVSl!KhuRY&o6c^tJGgZ*o{^lGGE@fv*BMVXqNAe&q;Zl%I@v2+rOcQ%@@3lZWFnNH z)_aVp(GRVUXHJ;`>j<)(1-@?GAJp`1t@y|6oGI?=#1vgq#0Bx&+ug)7+dxl=kN*p! z093civ2%ac(qOaBX@44|zXM;t4opYCmGq*4IEGvR2v1Q45+N}sf7)0jx*aX9(c!CF zG+0v+2eXuc*oHU7WY5ZA2nb5b$?}zl7v~n-{%w|&nDb~HMiurNS-SCcCvwou)aL^; z+AK968R%G7S%o~iE3mf3HNISO-W+dwcxLXvx5WenTsn2a7xh7Tt=NT)`=b$v?}5Jt z;S-7({4EC+9S_gJ9|sxzUcS^7RRT|@$t@RJ8Xn*gK2W}Rg+hFIC|dO-kK6=ZKsD940g6xdBfyz z*E&R;ll-INiYY0Y5b&rT7aUOK(-JK-EO6p)fxS}kbJy_+ZW`=Qf4*U+L0=%yfORAs zqgW8}eIB1^uMnmO3M;3l@MVBh44E(@Dk_cp>52cfjL@%Xh_3CjtNY1+F4%QgjaJXz z&S|xBYXETlKYj_0I6ps6IZ7GC2ye$k3I!xgn3_N3Y-Eww4+rGZ0p<7cop6j4CSA|M zW$3b4G~Tnzm@5p-Q{CM~RA+dUyFBpWt0q`PMcrCoU;mWYM>W^%91-fVrSA&(aJXco zF4$-%lxqA{jq>Y+FpjuWlvgi2uT#{`yyoMMa<3Wc0JV2!LfvC zd~I86yTJPWyNTVqfe>so7Nh>7e;XW^iFysND|YzsOr?HbZSsa2DlsWbt+QBod6}X6 ziHOJRwt1Ptv=1x<>uhEu<&i!Ewpg=}(3wF!xb4S^J|w*`e@Ye-N8XQOlHe;nZ;!9; zR~zhHaQyv7pfCER{K>i3yt)>|nSsAqwQ)u7kAz5_j-05m^R^0KD;dG)5?Fx=tO)#;Z$PYWKs+g`*9zXkj=tg#vSSvkwM0w z@2Dj=0$SrtZ*X6edf-k8qkS+`X}Fo#kSw~@ zItL))fa-6YYM7Ri0&3#^=ER?Rq;8{5_uX913m%Es8~L!QLspsv^R3lrfR?}WU1xsp znvR+pe7{0iS&&_6Hn)()$;oMV0livd`i?*s8JKEbbi@H(nC#&5MUCCai#X_kQ+wX6 zsaVh8!fp7;W4Z9^$MZ-Qlu6LM07s*H%|O3LCCoB3Z-+uIlUWaR*oTPY5@UDV#5u?| zL|o(tfa=YBIu{i{ogT(&$L^eM)|vx1Qq}vreb4vsp#ZiwJoJ4FbVwrCYt^^sm;YbU zmgAvpysr{enrc9&W%Bpa)%K7;Y$LK!QbP65G>87tfLnF`TFp;sfh?=dxCjQcpQ%VO zL!y4U{{EG~#wcuzZ06AW;~E!C6wOTsXD%g)L8r}Xc^^4v**+{jaeH|yE-MLkdm`6v zhLzQ-f5AXSt#UalE-j^YMR@?GSEC~d<9?{<&W_zd_DICI)VhtzAh!1B^AHY46YG~F z&)gAth0D3*=0;kGM!*&T@B(@06wt|!zQLsBemMPYGL{Osr|%!^C6rX!Uc3PZF)n>& zRz`-7y?vE7DC4GyAujHY_sN*7LGjO@Kkv_O*sIUYo^FThe;XYiDhqywda}D;3#aqp zq|A(IH9&-(=o&ZJwC#FOOr+__SK3Xz2%68c%@qE=L^1f2c>^=BAXY--!+Z_rXS;wjsxwldy9CzJ<2qmolQ(I(u>+(@43ol zJv70Q3k5PM*Tmem?9SV_F}ThhvAhnChnHJI4vsgp>0ESbNXVpJ;l09Q1ASzGW55p< zmbtODvyuu`^6#Xh8P6sK<7Zo4qO(zjj{WnqB|^{jlP^<$2d)-y7b?if$ed3XA?L;A zZ%*jcI_}0#%d~u21kv?w}KbOij5sIISPI#2&xUpPkz- z>{z6vqyQb6r!{zXY{jR#p~m;|a;qBjJ`)~L%^~m_h3n(tyi5hC%>jlHOBO&CNsyuqGTT3n3ti6Gk2CN6<q z+Erve7lfZzBv*uns;3JX@A9f8-z#?mxrP?jR~c3RbzQ#i4@1Ds_S6hRjnj@yu-KVv zX@4-3YB+Y-QY*I0FHi>}VPl53sd@*G%eerFyG9v)u!M*@&~hHPC|0>Q@Kg`GMe_+_ zb>8NC9T$4;cB18}#t)=(9Bz+Wjb#o>V{c}EHTn4knSB}p`<-%(rO9RbV;``6r}pl4 zD2a4;tmID)l-{4w6;%8P#+V5IE78ysrw@g|g1u-d*paTqXle{b_&?FtPKW3s<8-(~ zgk@}c)(D%_N!a(DL)1bTc%zfmn>%|3ACv?>@$0&07fe>p%5KNtl2N)XoMpJ#1lkFA z*}We=;C$o=O|$m#q;7Gid+0M?wKG;Y7}BH>oO)u<)x_ay0pFeU_YEXa`1Lv1+ZQR+ z^pB-AeDzD6`vi|@=VA|g9!agodD~%9hVyVC;+UYVoo+c>T9jXMY^h0Jb3!H$un!Qa zIL91B-)nCUEDH)8r{y_1CwLeVke=WQC_ZV&Yc(N+O7@F%r1e;0il@4 z`x^8b{+qz$@Zp=)aoTD=#sU#YYZ&!27ChJXTibJ<`M_M`Co(d!VHQgqH5t&zHW(_V zCIXm-v;4JLH9q^ z2T|it$8yE}7miy@P3oIyfR0r={Jr;X?>PLGk;UDnsOhVbi*rJqxQJiPRkBHBAtVJI zLq=lXA%^y-hQy4t%tyioT|=j?!IebNDm?$?^4y6@38ZeT{VOabZi+}b5HkL@(dM13 z$Ds#On_H-rP0BI8D_s5=0Egl*L2!<9qwnVC0T{$Kn%DFL^@s0komM$c!J+2^48bcw zYq@s8spxK4SXiFz7u7A`QL$L|2Ou4q-a8nA*1OV0Mrs9BzYls!oW3(7G^~y$(R6-_7pd1^3_Upem_}!H;w`+B}1m(zD3y$*{pa# z=r&ss?eogG^KUZvk$yh9e|U9Qc<7<+ z9ILRxf}b;-xxn~(5Tb&Re4@J~<<*9|R;za&eMJjHk;6p%U6oE7)sw^Sox zf|?qv4yiSANe}fWR*gKE)chI~%8@a1pmtdMLJuM({M$Kr0phgDEp8nKEZV7mwA#H* zx4IKL&>_B@Et~-w@{q#9-CRmIW;6iPQIb@WA(ar03yPXuG1RnFpvWJnCcBCt?|0hM z$J$Qyw_YPlnd4h!c|>CUt4}h=%D7aTJNCOuW88$g3aO*SP}nMy;lK1<)XC{oZujNf z>%rgJdm+Z6ip~ZPk2QG528Wq2PDImhx|jFvb!?fd`z^@l|IPvm*%~4fBZ~KPSHJj8vA?9G z=K+L5Cha48435*HXM5nMm_pt)w6syG>ij?G?8F%7mUMfyc-ESwWPO=>xG9 z!XerAl6YR(#cz)*#D@mE2gn1H|yITBWus!qiG)w z&56QjZ;a*tP^lMX$g7vo$QaSp1UMW>9T<^^!@q^e&27-FZX0!HP`+*1-(S8gKmS$y(Ir zr}YdG$>sZZcQU+&ID@j%Fo`^Dyh!`d$o`%F=!s*-G=UgQ2CB^g%a)iW<3o~ktKURD zXjLs}RX@7lcz-(S)U3#TTcCSM8kvRKfc&K{7 z4`K?Op})W4Nxx`-NZQAKEIHJw#@}9>(NoF9#4Xx35(7jy2jkds_AmDv5?h5{-MGU5 z4y|+|k#XDO36fOk)W&h8CEZecGYOTaU`K7YW;b8Hq0bm?r$tCq#akjU$(MM78}OH9dlMvH%YM$L`S#}N>lP1x^GF183V})C zu3?jwwzCS2`TTb!tSjMHvk;I7-xC^}--S4gZjx2GDYE6`O5st^)YOpjWd9OiX zAn9QyI_)K_+1l&+! zc4MMRvh?Bjq+7KIKAulY$9@^P_&KM@qp8$<0D_N}_K2Obm7b&Fk<8r@{ZHz|2$iZI zh8OtVfj@$R%t&F~RJ5lON^!U_r%1dS8BIwe(J49cs&bmZC`6hgn~cfnn~x|;SSexd z7`)X~tOy zp_h5zESPcL=FyR>E#>KiYHvL!aeF7J5Vm3YmR>QCqg8Drxk(=8g&9+RYFoxzCuKB#BPM*8e~eH1YQ$YaLK`2vWt9|a zK~(cNr5B=1fl2~te8WWhzcW~28WUSph301FF)@fmW+RM3*ssPdXX|`c+A>Ivu?JSF zp0+fGyr}JR+2*$I_?;~ROtrId7N zcpmp26=dS@x(#-!l+2$lKe0($%r;J?*|t?Z0UJA3+rWxH21JhQ=}!aEe7-BqYdM+H zZa!WcKF{bC`AE^t zMKk$9L9ki8&all7K--7U;e_=Z5`zW4EiB;G1T!pFVk#2mCz?rhj!%qey^b{i2s5JR z?g>lF+iGxOac(FzwpVze08|b<_e?L*$K%isy=X(rIDuz!mnx3T=tDDVKh4C5ku`^t z^1I&t2y+n^k4~AS;7xL;k=Eq>Ky}473_~Qjj!3+S_Q6c>F{uCAG)mD*O(}{tp$f*E z6pwKwmq|G$%=QEf1889Dj?9akPsA|(N$?`h_e^v=?=?G2kS=FTXfzF1)@Ho7rIc1z zR~;N2=Dlyw^;eJo{892%_C-rIH z!P!xZ(N`B(P4V7B3=(iOW(ki%byYh!Ivmg0`V~N7w)@=imGd1;WG>~HUdh~1!He37 z|8Tlaj>3gS!i{d2h)2(|FZsE}V%2t)Ku);a@Nj;{6)^VW+%LplNhsL%7QHbqFp5pw z#e{VUSs7ZMb}@1@Xbx^U+O(?#dX0eh7+XwCtQ**;A3CI6=LVnBvu}V*zw&%8RD$vT@`|!3D=Rw@<-LEs zH-c?`gnCE(6A|CIfZ@aMg1kIBjcbM5w&&Hze4gpLFEEq!DrC(Q3=BfOXpyKNhjK;3 zg@{>f3w8#{FI-kXr4GXvQBTPpxzmkUiWPqWj_;4S1H32Cec~XnycW(Px1d*b^z3qf zVt3U<=mA?<*<=!((zcELnerRnWD1yHCzpJxQ_-Iekaj|@L`8-9nC?44WZdDhf;|V2 z^{eZ8PP93Fk=wt2C+*ah~Iyptx8evB? zAJ@6qvC7dm&^X)9r0 z`IQn|oaB~ot0un3RDIQ1B|T@8Cu=%aN=caGI;m2|m0z(2C|gN7k>k#~>BCjIi| z@gJy!NlSJH?BrJqF23L(Iqrzg<^)SIO*3ZVvY8xCb|K3~13SPCz##{K&4Ydhk9!z_ zA2zI8-L{BrB<00QK>v;(;3(4Wz+ib;YXG>9o^C-L7K_Dffk2D7;x5HrYe6`V+vEMM zEuZ~c4mvtHAUGxaSfDc5)#lxC?AX@7VLbKDqh?>G>x=VFe>aLd_B#Z#sfjVG)#PUg zW@?h}`~E;~Mz-mtn5bxfZ?6f+#QAK!Z)wOJ7*UDx@(}0fK9>E^`2}*2lmsSlBNeUe z4`&a3D`M3N_?-23H#gAJ0P=B%!l%vX`_{tW4Dhz7*c!I|w@Y$BKr1+<06!z6mW=HA zp5W1NZ=tJeZX=UxV5Vngeck3L{(Y_t_wDwuAU!<;;rix%vE6Y8C9T^csH^{jBBWHS z!_l=EVVR#b?K(n0yFWP-(@aIG-pD*nfwcD!UuV{w#rtX%LOpuv8rMau##n`>fIt_( zoGiaRBMVsev#RU&0&ekVt0|5fz8zb0=1TwnfFelUOuXS-=b-IfK-J{?Hv7jM5TF^OkIKznXpeZN20--Xx^27kbJONMfS4RwFG$N$#BF9^8_#Zs=t=Wx4t zB~DlpaqHG_;peX%j#5Q>041Wc;IFSbp-UE`)2Uc6mL7EmB&evdVZyl3{e{rVyd99bwv`=neZ!CUwHlNt$bp_ZAj|Y6S2Lk$SNC-FGBYNZh0`GciNK? zd2`FZ^u5AS1Tkj~vL%El#%dO}7E*(x7h<28Y<^K#8U>j~rykcNEW3{n-o6MH+D#ez1NyL(Xs_Nd8C#b}8b>n&%Cr&`?;fLlI` z(|v!eVdHSJO2&p5|*AEVtt17OqU z;OO}Le6a?ER*nHTRt4B&tljqk*rAyZZbI^B>7{@TfvB+*rgbL=C-q9ZbpSwn2Y^x- z&n;k5k9yhyEEwTJK3uFemDsF>8i_@hJ-c|H)R*ab*>C?55^H`q#KBCax9^V7@pL+y zuN#Rf{Gn@!zr2Ov_cWfubTXYs1%R9c^W_FTgUPz-saRR`0Go>WT}J)t%CvGGxNG^G zHa~we;o@ommIid%t(yfh9ad}AXNg4>z@8ZuqPBm$+^8TrnNG(a`_EXsAT{wX?)R6{(N!|4>PHvWW39m6-umt zS3AfmMfVi+C50>tULxq5mKX?BRFQZ4`(|Ya>HD`C>hDXieDSw6AI_4lckqcoOq4Hz z;S)*ANzpN^_j;DMJ3G*Ea+K089G|k8QlOhPB9ffDNmR?#Gc!_ne6Ed~nryURD=a5; zFCWVbE8+PIS_(YN8Q!7UzHv6XPWZQZW-pOZ@vgic$X529g&ru9{6_G=s+hR;@9_b4 zB(JZ~qy3TyUu{Rb{cmi)trQhCkNqghYVHE!P!u(RVC8CC&KT!6^i1lYkpPP%CNtyS%6S8`atva3W+M|=%lh(a z+!!qEXtSGj9#9V4%Yzasl8Tw6RKm344B%GwT^3J|g!;6EP7M;l=O}SVGwEzOkI5@L z#-*9+`n_Hm?9j8SDG=h2~0qneW@sC2LOYZ7m_&8~0VPeZ$47!pu-3 z8~}poYeB|*H#J|bwf7R_o;0nj&}l=)Yn7PEhsgF<-Do5TUWtr|fCD4mPYH=_LHF|g zpr_}eG98{xcB0aiS8kD|xzgRlP~d94zt3o<$x2PCx8KPZf2_S|)yA$U3}7z3nPImL#I zA`B$C>CiY~X1PRkAy93*Uu2^sKZQTmTTqVFO?pCv7h)gEnrzLW%LGorbsT@9!EzpO@n6 z4y+7_m5=A$984<`vRbWvXtY)};hcpdkJYvxqv5lG=*R#3HRx7?976s1QMD)G>wdNP zkc7mMxj8CbiR+It?&f{JKen>$YW93roOs4{oCB&8rG}@nyM8RvQj9C! z=3GYGZ19k<=4Y{vPX+3}1>LmxjEvW@;yQqXKviS+z4!7F5GaT~bF6j*`Uv~C7ZLui zKzz)|;9zJw=324L2*3a*>$#&Ip2Zpj_H=irvRZbJwEzU@Ou=|G7Vqr%_#fsBVUGZ5 zA7>{A`Eozp1q*v>1W9pmfK({l)$MHdd_Ir$C)vDtS(Na7e~RfJx0#AZ$vj*;Sq(-2 z8t7+WNm^L5^N>+v(wdTya@T*la4_a8S6w$bIeGZZz+yR%!@YPJ{)o0S48Tf)gxfni zF$5f{B`#yYBG%L09iO}KS?4<7iO}b6jt#JXe%vmRgG0jpK=5tW-rgQ_{7Mm2uGevu z(XjFU%BJgZj8=9JdF8&eQnQX`J2_f%$wXMNY8?qe;I$BK52=YOs@n zG>L{Pew(m(SU_q)5oKX1ULX3eaAvHbrz*HuZh^lt0DbZjdKqE;e{h|~TA~~-(HQpc zspzu|yb}7L?F@~r8Q5}s|Bc@bF!pbs#v#3dN(c^apy7b-aIQhGdRxlbKY`VJ9m;WK zbo92Z#r5uR&GZU5%}XDxa(RD)^UNy(kuoPMaeOZp{SUg`IXY34$PTJy*#{VGO#8JQ zA(4bEXH3TLQQ-a1lE~OdZV63B$A-4n*BbPX9MY4F-=_D*G;4*!wLUIvwZp=~ZmE*j zjE4#o-R6+NN>#}}u;S1)9ixc`aX`t8=FsE(qKbZ}4qOO2tHzFCEVBO~7co>-}M)rQ`91>PMS*TS9!oAD`DjFc8t#h(E-+LmmmL zI|Z7&ECLQF3;|lT>UIaU9uf;e4u?}ftBU@0ccENKOB<5jQd`?=<=*;yy$Mbapx_e{ z6qg%pJzrC4ZySw5?gwHr0Lq3vd!_3&WUbx1#k-|`_Y`0yA$-mVH`P*QyQzT(@o={8 z%QRUdyzNZ=UEO>6kc!!I&XMQMK2*M3Xw1aeSa4n^-1*hk1b-{$ZW0y_#`gYx{ZlSf!eHgusBngQzF$G28u@JL<$Jq4D2n|KS9Fvok^{_pE=?RGj zB;1sh9`aE*f8bCEFm69}z9vQ_?}8&^t^vo~E&^FW&7&)}tYI3lAy#sqy zEe=_~uNfT?wFmyG2Ogk7UEX3;rK-g!@V&^=_O%;oV~jh6ZqOdelk&i5e~1o%L+A*S zue|D8<1O5XTwSoerL!f4p(1uW+rlKIOHReiA|1Yn{p-Qqhm(~}+=MroFYTMVVMo;s z0t?kA#ANaPYn6eIM=z*Vj+wk4s-h6h$bh65B2A%m6fNzH7d$<+RjIhY9`13K!?CMWT&a`U)r&R4x7uEhO*w5fcpMYqi&rw7{{oA0&u2^b&Q5nM^8 zoRN+ywy2f?UdD0&rb54}L@ryQ_fBF(B>>2)(-V32L^?}>Q6ZAmL(7HFZzj|E{;c+p zPft%UdfrcC!8e#No&q*uRSYOV42;QmY9XMMS#S5rSpUfo;1N7s zyfVGPkQtg!Wj065g{QxoA6vm;vthS+Swz904i61gZ*fskRZVIMc?OWk{kk3U2N&|?f_FaI zapV-^5QpX5ab!z$aL)-B=3Mh?SxBLo^!L>?`=ovRoQ|cSX;JbeaImBvy?)Ez4^ZA5 zlSrqdx_VXq%t~X*4?*x~xl4O!a;NoPN7N{x?IJ-LuocQn>gN5MS2p}fMT9P^*rCMn z^0LQXYcD_b|G2N3y^wHii|?dFQizK^IAYU0^kJa}TGj}ZWy!T&m*~3`i%G`pbNn~{ zEABSl$1%VY2ralK^CV;N4Ko zkIO}RKo);Jm5GgtNl6~=6g|t!>FL^cqg*3|dg|{uKS9{E>i-AzFs_}WJ?9yIC|%i9~AB{U*#wbIEl8>ank8D|O27Dg_TR%#zU5gC&b;-0=?wJk)Wtjwm2C z;=k&Z@6HLd78S;akx3RaqFJ8tSApoZUEak2KJKWWU&SQT}Ivt{;n#O1i4NXG3GLbuL zVkxd76O5rx7WV<^@wwBnp9Wc`QcwL6<)Cb^b_M`l&q|Y00R~N)?FyJmENh5!?&VcB zi}(4W<2lx1iorgmI3A7u3)8F)i}Z`U_&1haWuvg&A9-K5m@`yWl$1bV&7?f#kkh+l z2}63KdNN7U>arh0qa@3v`mD0WmOA7qg&rtG?4uTMIss(TX#%M2$(rs3Mj|?re^O1B1&o;YdXNk zX**&u5~^;$)30}a%7lhXY5){r03i-GGunaQcZt7vdB2F$zr)hV$dFlqz!m^Z(G{Ne z)gWmck|w!HsGBYsJLp!*m_q<#-#aPBTQv<@^ABGl5MG0huJ`p&J~1p5dgO8xV`b2a zG-69o!rTabhQv`${9hfda-;&b3{Pc%RTzMRweIb*5M!W@p>RZI;{IQzWh>4Lj6Ln=UeGG^~*1%;5+VE3B zw4WT@EdT%|bW)E^g~Y^AEr@F$KQbwW-tes#x@!cPVlh?LrHCA(z<=w3<2Y0*N-9a! z&x#0I`h6Q3MUpGY|PjJ9V=SGzT8+PaB`zzz6Ep!5(GCMI8o)|fvmsv?6-@tR+I zaIvq&0=d($RE8sgZ(v2mxu09ijw-BT;B zaCfvJgiL>3m}DklQGK3Nf8`yFkMJWZv6T|$pw0EG*GlI#N7{uce8-e1^%fgXF#k`s z7aVJkuH0h%sS!#QjZh*#I9p3V5^F4l(M`~^hEq2H z%^XS~T15HGdmzfpf}RM!2qwK97Nk<2|MhT>_cn5G*b7Khp#^F{r|FLBu<+p@9yQXS zs!hD^q+gs`zlc^~MI$W^i3Lc4f1wc(%_$2Bj43H$gDG?Bk`(mfXmWusV&Qh1LNZ?( zt1I=0^gj@Qo09IDg!Bh?rXJQ8>*H@!*J+a1=7EC~;-=<*a*Exic4CL?iRCInQ9Tgz z24jSMiYdQe8R#eE|7S=_SzzVXt#-dCUCJ>Nz^abjVa$Uz!RSy!pQLXl)evt_tGcf= zY(iEb9*GuaUfl!Rl*;;9OF01V6!jkxGUre!WcQsSFS3a`(qN1lQt4w(Xs%hVADg7S zjPPR=Yy2I_5GVZ5q*_gF(tkU7M`aD8O42Zv?VLdLmqFp-Ju4y^G1aB`+$^FO#3`Ar z8R+(`t)d${|3jrjcVC8HUSp}-(jI8J`?AjhPo2JW?WXSkr@?BFBLJ>Kk-AF zVTx7JMxi+^5EF2fRKMMp1jUvFvZYJN9|?1-?f{3x>mmvDUXFfYapht3e-v}P(os2T zeN*=jCNpOyO0YY^XL-6W@#v#{m-Nh*tPhM@y8JSI0qVw)1^tGPBtq+Ev7utIBhOYl zc#~GDkS7v>&A?Avin((%YO?=FQ4-+7A%w9B{Dlp1%<<=h{}*_pUZg!iT@nwzreKhI zB;zdZS{d2gTZ-?+NwE@bvsR#(!M6kgnoUWEYXy_2rDhGTm_DT)_>I#_x;8wBD#t{t z=ak|VOMCw*hIeOo1100|pNNPSZ9+#7y};srd==j<@Q_x1k`4Li&Z(TIxRg060^;P_6$3K>$9ZqoLu zB3W1k8E@5d9C4zpzZh#~(8S$AFXj9ivLZH3i-|EIv#J&r=lp+o`sS!g`>5^7O~&LV z+qUf{bF$rJH`$o%I@xuyG1)lTHQ9E3=Xu}te)qp;t+Vd?hmC7r``X+b{!)F*LU68P z7aJl=y7*?}$r^W6(vtU2BXQ2~PSsy6!BdFp0Ugk(S4pMVn(BrJ1Exs?lob`UnkD~R zkqSu3wI*|mtt+kp04wci>FRFgLymuGTWVB8F_^kb-dM}qtF(A_v@B~OniRd=MZe`rog z!OM1cDJQ;+z3TKcpAoYC3zQPbW-`wjzw0Y&0{<~|at>z_>Z&hyEEoB0av=HuKRK8J z6RU7N1y&ma`k`2L9y67kjWdo}oqtNC`xLdPC4AqD_|HTaL9efj)3SgBfhnJuPMfU> zz-f0VA~4k}IFCW6050-PJ-*sb=%Ga1`@aUFxyoNT@(Zw{YuTcedEyJ5b4;2ihQYWh zk_EWd7>p~rwB|OkJ>Mc7WG1M%@xQI?N~N<2pb;Mc{@GE@5%a3SzH3LKd@HX?Y3QP2 z`!Yp9!wI({u}e5Zg>Ow3JIA4VBppIbT9mz|Gc;XT&UU8}HFhH}*&hAx4QUJ89kluM zJu&2dq2JdPAa$!uskd0F$6|38%PLtZdb=MHT}HH_L`dw|Jgv=S;9_aibr3x_uL z^GNA`opA*j1}YQ-rsEPV|* zC-I*(VFaI8m8!o{6@T{rel|RQ|DyVBWvkZ0#el26w;zMDP(l>#M?yXzKl^$D61LN~ z)ba_`Q(BtVc`I<6p(KbI0f7ZQZ%jcgdc%as0L~@LFDKPK6y36OS61|ehj-6UmlhT_ zG=6IIc)zb&kt_5xJvUx>vh?)-ToZvUol8oo>DNs-8iQx0CZF99Vc(URhJH-MP(^RI zgh4kEd3_Qm{;YK1G$p@hpoC|j4E%jg(JtFIB_$jCF%_q+(*PQ|Q-xz-U6>Q;#)Mz0 z195!O!4-c>(m*v~&!E*My9GSIZ3d?-=#7nk&14g&&j%LZ2F#q3JdbdRh68e|RU;pu zir+S5ryJtNPvpvDb2kLNa42~Oek)rwq+ltCiHY@->RJb40WJAS8RH?(vX!u1r##pk zkj)H{->W_f0wbhA`BhTW#=eJ^ggViL)8imTM3UEQDP6Kd7lUV$Rv1{jniQc5 z13hXvDD&RYtOTs8&&I=XeY2qw)qId8>W`j8FP#_uVqP(FJYBTV$%i1Rqy2;GTp&5E z3SoRA%$N4Y<{Fp_D%|WTo1tl9%?}-_m>TU>7DSZ9q)rZzmJDm_|9jOF;iQ%BJE#h1 z=-*gh2Z7c>%m3WDIk`B(9$3%qY0-hjGOiFKsdG&`R;rRgD++HX5%X1@XwMq(WfUj* zqn8&SHxQL)T^#NW9izb(j`G$l`YR&RMxegURL3dW%Xk+ZV`u^LQKI8_ngVm`_-2gP zs{Hy$A_mxh>AU2zx`dHPrHRJdf7lfxv44*=LKQIvWr>MnmOH{0<;H&#Hx~>c%#Ixd z6|;m({1th@9c(lR7TG5aHfH-dmL&9ZTk9NGoqkBe+??|ndhG56MQW}A*7RgQwlB;W z#d2vpwHP+fu&xZ11LpTmQv-e6z*J=2!pa8w1XjzGx#^v0G$b);>4gQza)i7lbEI(9v@GNXS6N z*snQ2h2kEDxqRZ0Y67EVe{e#zvn@N@=;CE!nd2`xg_cYQ5_SGkjSn(^`P1>fO%R}1 zou}0cGAWHqq}SlvjXrSwWcD7u)W8QwWi{Uzo0zN%g4CMu?0lISK- zq)L}H)rhR}8!N7-ip^9BpWLLUE_tDCR?u(m#fG`wSCq8c;rrQR5eb{03Gc^!rH?Q3 zk>1zx(b#M}seO65@TKNdYVuttUgtjrzlf$1%~Zob6WS?`RMHzm80#qBeIYk0Zdu0B zg;?gMC@ummEG{mM#E;6j>VOtNiwg@B_cF*Yw+gwbbK=e4BAHOY8;uK@t}z?fGD{-e z?f+Q#fi%he0~J{j)c0p8jE|X;^X+Wgn)ZHKRaHREm--oP$FeE>qc!t!hJ##oHVgrd zg;)bzR*`YVa&kwH=;hEIU9>C8ITQS0R8_9RWopt_#$DGDw`@ev6>slO`)re8ZF3cj zZBOFN_y4hg0R_|`q9;uiX141CwtAzBNEO%sZ~QGZsC>n|?W&M%00) zDeU^(Chus!J|a;LXM{*uK{~nd^;pt(k&qCH;oy$?Hee$M-g8iXrksf?(2f>k0|Hp= z%FELo|J!BegRvYunxLAam9UJhoh;Lr=4j>TXa0k5)xQ*T%F$85GO6023GINhDNh-x5AqaFu7}YRz%+B=vkD(${gcxXhG*)Ktaj#ep-55L0Y`fAQ%xl_RZ>-=3?7xMTVL+4W|L5!v-wpX zN#H)`%VQvHUBo(ssMO0BmRLHnu>mO*IwB4j_AdX>K7&-&{54ddV{(F(nicrSv!Sm7 zH0+KRqaYM%z9L2^u<}v1lb+bv^b6cNNh6P~srLV8F~SlUi^ubua`LNNRN#F0Gg9CQ z8;S8(E!cO2s|6P$ zg6f{l%G`uH7;}YTv4Lg{*s8mjhT!cdYH!BHfT?XW!?wub)Yha*74>Uo@a}oElFhhY z*Ol!$=8Jk;lR&<#x`KkI1aw@{Ph(@Smm@U}B=BiIC@C2ldRd+6a8^0V60RFAGF^EM z3Hd=r#xOS@EidCL&%wzVDji~~_GpWTj!mi;CD9UUNBa{tB%q2Gx^6sN(KoUy2s*pk z%OR{2Idz*`xq>^NuWyvn*3Jeg8s5=$M)eE<@c!2hT1JBXZ-mNZni)pZ<=qA~LeU$4s#?ibjcwA|3%PFiy&X%`;4GzuT?Kx@`W(w`BAg z5W_-lg3Ag;=#L^PY~nLBj0ELIAx%V1Me*2(k+Rl-kj#pcm-d&;5*xVnMXbm@VBpXuYQ(|^m(!*yQvL^mXk;iW zsqb#}cflx*`v*m*spqk&zta7Sm!bgvK!kFMQ!#^mE-`g8R}IMmv`L-FV+B`zvWAie zq1kO|SoxJ8PGr7fSRJFb>@f@KFQEPRr8RyU3h1dvJlSRzt?Glcw+%>^j5e?NRgq$Q*!B_z|Z(l|g%;Fzru_LX6_ie=J&_3_wOsMn?J#Ep36r)=sFt+EgSwJe-?T){!&PA*$qnD*QK0Cu1=l_(W5J zKi-4{-(e2Bu^1a-gR!#3U5utCRvq>r1>WU2rpAod9 z0J|_5S23eQEFyFRL#;hiL|&I8a_O&zbuJHXd^2O9>?-7RT25dsz9u#Y7g;m`2Z5ac z-n8&0&7u;m2N9gkG*}I#0|3V_xNwT>KN(f5Ol9OC9s}G;fwm!o;)#IxZi0FQ-s*^m zvdjv(groL+u~j9ww4Wa9SI22SExaw;^E{_n0Q{0)FIuCH0oI}r%$4hmA_v^43X)kDiyAIG9ABMrh~_UEXQqbqlLv*JhNRt{2&9}&`k7s#ffQdA6ZPSOFW z30plmDLcZ2he=N171g|hCBPK??}+^OG=78N5fzu`wK|com!6*c627QDJqydlQcC&` zXfPxLiSG-es{q(V{#d@ZDwNz}Q&8YM~f_`@9o3LnW3k5mfJAmH}_;msKy`mF0-H3vh!(*pRP zrAFEU2uP`fa#cOtyy_!+*s*XWf9Obrax__x_XR~@-HWmnr#j~~0TbIOjlMsw%%QG6 zKwl9*I?Thf4~r%Ax`07c zQ&s!Pq-83;_u(g8XBK`}7s76*o=O+^ z06gP#-;D9|qn>@NXmB&OeE@reKRUO%22%U$Ebie9s|=}a>TdGfrm|BUJG)I!vEc~| zhvI%Z?EpdsBwE(|7?>X?wG0`V7(x;Np_6I=y#h=1vtny;C0T_PefM8~pE8gmW#4P` zi85Zc!?G+_E^+hHJ+F(?Q1RI)1Oz(U+MbUR|6W$>W(1t^G~$jsym~zZLTu+WsB38Y zgE^|FOEq6#WH;$6r|-udBBP`CGW&yq4#A^PfdHgcY)^xFXXm#Wo^P{g$^JWAi&On3 z1RWIvQai(&!oFrT1_c@|Fjn~lW$t(IC(v7Ehd|@TRfS8SZa?&!^6ZxM_2iEQ?|A-@m;GLPco5X-`iwTH7Lan11d8x0Cs`z z!X+R08zPJZ96=+Vaav{A;kT~al(W%Xd(o&ZaPy{{+-Sga_QS$Is~LYO8X>(4bPo;P z3HsXjwJbr-)d!lbB<*NBUrD&nEG_(sM#E)cOjq8=uVZiQ_-oCVJogkVEO7IaosHGW zLh0j^Y?6&l#gcz3UjovIqVOxPJDT$6E%B4Iv#j&f&R@4CH?(h4*-}q7b^`NM`pjR0+Cj$+HRu|5H!2*rTQY@)P`fTJYW7%wyfXuvn!{iBJ62dj-tz@g06$yyaf&)^WO42@T2Ea2D|L|@bP&_NI0yZq_xKP@4y}@_lg2Ab(4XJN4_iO!TVbZNthX{EzRl7zewO z6Yf{6D1$I}@g8%Zul$j*w%tc;W#uS_1T!rEfmr}Wbb>rIbUY1RC(y?Fzw^2)>yo-q z1j{n>Z-TTxpiXhW`FvHt)|t^fG~z7371JwShtgH}`efzelaW4>`HgUVk(QP1k>u$6 zw|S+KH_)K=v=na$(F_>HK#&!er!l%0IV}dHln>1rY;}9ymmbeDLDuxjscUIH-s5~$ zR?$R9#Ath;PQxPM$Bfn0U9npz5dRtj4#d`LOOUEfFDQyC;Ux&hmg#2Dn z2su1oo9!(pb8}WYJS4rICtRjh+U)hLRaB-5g5BKit!7#R0vN`w5(_KnD}_F;f^Sq& zUlTxu!&NTez_oZkkEh;eY3eS~KHGA#> zzvD+stI^_4Fq|mhbq6PnYAV;8L8$vJalib@vZv~=IL1+7&)C!c7Q)-bxL#CQOk{MP z&~26f%8K?@g{>b*Lp45G=Wqi3#A_%ucFS1M@}8ZG$>FoRs}*`~y=rEqtKns6V95V< zA#7bd{Fh)Yxw@srgF{*6{C5-ZyNt`rFEf=Q5&OU3&6AOlX=~Q71XZ${n->dTY{u#h zD`kfqFUD>aqJh6Pd!1Z>%y;cT@q|U==KrvOWr3`$EHIHhom-E=cse(u!`;pjWoh{r zTppY2>ms8$B_+u$wSes zBbI?zn2WlWMz!HBI)WZ|>88_s_4~`CG~_CWo-#G38T`YyVAwpM&r)2&6fZR$o6S)K zy7A7=GLvUmn>5O)fjP_h2Ut8M97!A@3iQAue$E@yjtiT83Hx}p6O+u^q8y$V`Kz*hWvkF>|dCfBmNIFb!`OdKyWp`4?Y z>4j0h9~|T{Ay2IpWL-59Ms~ahIE_OfV!(NcTL}BrarbA zA8{W|b`hH35DDrqLP(kPzfTbwce~=Ce4Iyn4}~)VPDgD95ZVdC9K8S^9}^p0ML_}4 zd}U2f!Drxa80y=<$@8V-VminqNE;d)G@U9` z=C_|qrUeVZFoR9;_S)av=qx)g6d zvVbJX)8KP=r<1&BX^UID{O+oI^A=!<)M1?V-mN`7?_)7Q?QO8^!QBCVSIj>cV2jMb z%gZVJ`Lt~;p7iGr0fC@At)S06TjgPgR2*JVG^KfQG1v)>D3fB{&-LV)r|@zg%4nGH zAFGvWYG_@qx9|7H3-6)|L^IKPMjRb!+ew$k;7(QERq@_hOy&O6(TJ?%Kb+vlY0$l1 z%(Bep6}+@!BF_h_c|jUL;)k9=K+(~SIs1(?uJ}JcAGVst6VX;~`ePE?E!$yYVD@}I z=p`Jbwz5##R?&BxZ7ye87ZwU{s5Eg~g7rpt5OH~!j7JWAcNyfr~Bfz(OAT! z<@J~qpb-4p(vCRX{Ji%NH5Eph?ea)seSJL{M0K#nBlW>zKyTn(ZU%2S>f++!bcQhT z*Tnp}`_U7A+Y13Z*Woy#!NP1V zOGZzzpDFUK^t&wos+YNXv9xpedr<1^xT|>`<<2jRILJl{Rqv4TE zUamFPqlxT(9xK!Zqe{tnh)NZJrzmt6+c@^4Mmdt4FChYD3f9%9KZNCU@Cr^s_xoQZ zVW?(D`~0+h|6_3=aS(OmyXM z3?QDmb?n?4eib7OBO~MF zNfufj81Z5UdQJ@oL*(&zJuZ14nbSCU0;Ygyj)$%ipg&R0MT3cJ% zCdnUObT=YwFh_4&((&t}T|<$w!z1OQWi_qZBv-(>|L&O2?FDI?FMP&;N+CBU-UF@T zC@7kVOVcwkP)S+Y@YndSGxvFRpIM8?lGrV!9HDtSy|ds=&vUG^;2%shBR$)@(XpgF z37SL1NlR59`873*6|Z}3vBK|nw>T(-JZ4tnKYyzJLM=*B#^WN)(wLsuY<19e+WlvF zx=1|DubYr3Y<+^~GOZWrN9feg9^6R|hV7YPb#5&zoan7hG=<)@V%4Sv zEOSY(T+76;)jQ`fNb(6CiA2I;eBEzvz+|DW`18g&sF^R?nl=Rm2l&)g%vYcr=m~-R zoS91$Ggfb4%4WRXl^=GYaCG-{GjNNHpisDBe9+UcmWYFkgmm^;6h>6@_yUEsy^Cs2 z@V>3p>b_f-JiReM5~0?Gn4Y8ykdk{DEIz5UY#G-Y@|2#wjJl=QWIsO?&C~@bC@@}{ zI^Se;-O3d#9LkO=Vu6k*IVibdo7Q{dT;K$qXYkx#B!#{?7I0UwV_1g5!07nBI=_M= zvS{WGKx5HADnbmXvj{LmYm(jk0vuR~w0}T_CoT9w4j6zKnjo$T3fL7Q2BG}!OPV?9voUJ6!C@)n( zL^{CgmZHr(*7EHSLvi+GIy>F`2!iI|@wCrxEj!9-*{r%BS}`J;$>{P$(hhniiNQqNUZ}?D4oXBz}Pc_JVzBhSSSGaFzj1TXK7= zb}=y=URIb}b>!r1E;n^XEcbTOAMYN(igAA}stz?NYb&c8sFNShHaU&1w!y(bQL*KA z-s{6TOyosWa^1*5j2Yn@wZoQ+(={(=(M8p{p?OW|=u#f$CcT%H8(^|qQ4#rxMoB>q zc2*|xLg6yM>duuyhdR)fRjFoT40FChm{ zQ9-bKXjrec6+9>AcN$23nw`8MAXfo^xKWBLhORs<{`z=9hpXY*P7?_PUonYQ46{#3 zZEAuEFvYAhFqVvR^ZJ4zb(EeLmmvoREL&+m!mS)^>}Z(jtjj7FS&|$`n7;dbl`uo+ z?SN0MD%4zLO{GFA9mhf=KZ)0AGB?ku>ku6ef@|d6ztGpr3!H(_p) z{EnT0P^#2M1f79z{uO-BY9Ny?|5OHOA1NxXey;Ewr*z)oF4aT}zG=Cs?M|M0@UGVb z0lPiSpVZ)xtKFP?N5N-&=(4hs-Z?iI35Pu*CT<8_#!V5q5tov3(E9k8_PCtkpX)DR z7#jhLlaadXU5lapGI$)~V45MT^%$OcF{Q1LXP)6^@arR(p%F(Q>_413>Em&k%Vm0y z{d`DPyHx41_`sM|365MUz_N#fF{}al_0mH9$QP1n1_qj{Z!6Tc0qb3_PqU`no4>~M z`@|_AHjw+i9*J6G!J%>>U+x3kzJ0aAKMpV?3??sS7z(VZu2#HA#6T~Xpo@=F$&9fU z9IlAyStplXtbR^7>=hp8vI8B-mMRZnkx(=&`nTdoRySDW%{z*?ySZst%d%o@Ezkw) zYw6{!ljDst`14d9&al1Jjn8KeDQAZ;EMIqalEb0=mhg~tGqv}W#e49cTsfxY^&(fs zOV|I!#z0$N)5hDGf8}XfJlQSNZ-PuL=zi8qDvol#HJmIShD;!M(0HF$#oCNhHI$Nq zm06gj;W?WR&Qn*YiIxb}N4XTzs$1JlgEKR2%<4lS(>(&5>+9EH*W5N|^_3H>TEL0s zcW~I0=dsg&okW$AmU=)WL>4F!(w59_zsM{&!`KOE00(%%N#@3+8R zYpvIq)Jhq?qbb6EJIAG+7yqiEKa1SyXJ$xZ(pEzwQSjT1i5B9BU{u)U%s|nb(c|amD1brT(VxsKq>?FFGskq|WlG%(%x&7Z2xBOSe zQ@6s3h87hG)YRsgv>RIifIBdjNlQy7oE*_bh znwI2oo`UZY!2c}dI#M=rIQ~0SzI8SA_iXjVBRcs3QuFG5xmTEIh**t?cM}s+ z54#O~931X|J{X;MAUK2PFrGV}m}|^UOHC%?^`-F<`P|g;OY|V(HlEuZuaS{af0Iqj znj+%4qSpFw1rGvP?hcD53~gK;-5b6}TSgel=IZXO65tfvyQ!@C&Sqz2;4pRFS?I|l zK!d;Kx&AO$@qbvr_>JL~mxrpH${lyv}F5gXQFxoyZCcAKqIZulmH@+}w`w1OwJP;Ao#FCKv=3B&aG0`Oxto zsGV%&bJA7i`Pn($(rt}O>`~pOY#AufKWADkR$_5ex$&ryr&A{CQoP@J^k?xT{(Nn~12M6GJ`iXF*4<0p z4~fKd(D!~9M-}=rPc(S(WqTSj@&X?45Ft4CY9dL)$W!rXQ-CjzDd>vZnixn0Cwo>= z2uI@N`#$(76+B;Oo?&-|}_2Hc#8L`vk*^B(?8*xq_QdxfmNL zL^W++t=P?yZW0BvtbV3Hs)c-+{dmMO6$$3nKLdx5)Q?Bb54|;?!7#X zloW7zK}TI%TU~nqg>~mnR@?3Ie5Ju<&An=ke$(^)rm}WOH+Gty4lCXEr%$q_OCa^nI$LfTS5pBe-^;3_kYub&4SiSt9pp3& zWNg@=li9kaNEDC6&H)?ocNT7r~1wm$L_fC@F#gCxm@1i zd4nH$X<5<#bCdZoW>yhC|4!NSpT)OgddynB8vbnFMs`k0^D#TQ!+Qt5Hq0EBh#ago zzRn*uI~s!Bx>BQ4uULO~mygptIGM_2^F2c5-iQgMrDc+0TlM^QSxDkN z)plsC1s-=@s~}{RJLb9XtuV+tHhUYUzjcP%!)}0x+b+X!pNM!hE4GrrVIjgz{(A zrUo*`g@lre8S>`(3;DVv$9UvaG*umi2D0L%h^?aThtp8u^>W5HSC1y)rs?CoXy9^e zZVUP~Z4~ggnj6_*CS8U+hhsq2i1fvk=H=`jk1`!c^j1=%?s9J}92IR1got z`MO?N`)sYDu>kIzz3lnCc-++M`ZY-R>L;FpKYle8rBOD0k>_{#vxS;sAmDj042;Z# zS=ZUomX{OPe56}bAwavXC8vrEiw@H#N|4AX$ulz2HLjj`Ofqni?@3JgUyh{Tjr9J8 z)ZnwYoEp2S!B2_5_v!wce;6y<;_>a`ncSt{jj}^?_4|Y~<7r~5fu=grZ*s=D`-Opm zd2V7p9WB%Xk$4cOWXNJ;Ju5VmQ)wiJgo^1S#@dod$aQ<>RqXt0JLioMnrJw0$w6iz$J%GEXt6#x#4uZKNSTPHV$_A-yg_zeqdq` z!I9~o%v?OUKBm7ize^Zp2)WAX5Jfn-*8Mvig+E`%sRo*W!yNNwsN|!Gf?8VeB<&KsW6N?MN5$(hc#(L@plE&2DW_RLvkt&1iy8C_-LVZ-l zbZgsqk0wHr!>wVZeDbd#Dq>QNum!GP@i7bnIGn^jK0n9e03(|>fsbm|RC@ONBvbV2 zOT*4Wp~E!kD`oeSwN(d6hYN@kz##)rL#C`Nkc#-SYQ(5eQNuy86z8?DoXL=4n#;%EyA>@brM|00ZyP#Lk&!mek)l&rjE;r>7?^4l7*l>(&5pG~n=` zwiQ@e?YPEZ8Uq92DZ8L?yUZbYcIXu@{gnTUP1epVCRTw-9(wU0Rkmau<}XwLfNUs6 z(CtOX^6-#Y8U?Hh@iE_I>#F9O?S|vkvuT049)14QA}mz4W|jhVGpqC~^{D^p%|%Ps zj-s`z5Wj`(2oW{-5+w~Tr?lPx-2Af&a;eH23{6#!kbDJ{bX;j}FU`RUs?JY!I2mj9 zbl2dj^Vr&p?X{0JuufORYL?mZsmIVPS4obw4-GrIfaeh!OPV4EaJI!rvLTH&< zuE2hoznEqv#2Tu44|;Dyyfrv9cXqfKNmhi3+>mNGU(_QcoQ&9(GAzg*!ib(Fx#m5- zek~p;eh$}2j5ttFL)G9xDN&0rz52L=`D`miMR)#{hD2R_|_`VG<`(K(7H4);bgc-ZAJGa`W0#O}hr-iK`a zz{8iiQ!xFvpVJvRFo#H6$R_9NctIVsHn!^9+fUTU#yXbi+Y6G)(me|GMbeY~0`%?) zT3KQs25{l;@=N!x6^ddLWOLvD=-Rd&dr9U?S?~=Zr>jN{S)@B+TCpT*|vzx*ADP?8$4@pAv+_ak(-}lr92+%^4w|Jmg!y#S@5$75N+k@>frl88(17 z*FuaRmfg24OO`X+{)-bt>Mox38wT%xxWr1ypAW4+1K3EYx7yFwTWo*)TVl-;H>6{?F%SbJmCgDi}i4|x_SUR-FqP#p|3}ZE-Rqb#jcEu>P(+>{Z+x!NsIfYCYWK-`m@(tf+`1oGLG)={c-<^_;T0Iv{WqJ{Qck#^V`^ z$qpm`kY=8;0S~PxBy}`QAu3i&*M)l9@WD6T&?zif96U*o}cbAEbqssgq+WwJPaL|TP#s!WYY6BydwvR zFG3fkb!25rD-Wenh;&;X3ITyS!jUM^sm=NHHvwNF zY{UtE*3FIsaRXs z(VcqIi@PnNZ+q~1d#_+4^YKD(2}N&eFp=tV<2AYLPc>!3&wfsi&Uof2dT1$P@s4>*SC3vs-oK zxO(u9U~Mf)Z|~uU?=pPsRQUV;o7E$lwd&8dMJc=mb_`ISrnX3g99J6}#CEH#<=|}X zEyQ`9=z5)fddq*)Ne2RT1k;($g|6u|2T6gM&hrke1 zkfv6(&byF|4D^@Ds|K}v%!S*zU4T|@018DrB%h&tB0OaEgeaWRWS9g+>-lbSjku=v z?yc+mNu&YQDss>gyZoR^F`{dsqNIhImoWo^1pf#0!d`l*u3(u@WNveXU?a^w_1}GW zCEA|l%w*gHI|l zTS2!HxS27Nv6^60LHL)1VEAd>Q#uD`dRnYIGMAHv0xDV!HI@;9{fGR49?eA-*Gm5U z>nu$KvJ*jk?s#PTAt`+3o-#|HuP8Gtwu)Z3P<#7k1PItzM>4p` z7E{{{Cqm*xul^oeg^f47J^Enrk65!A_6ayCXwK8G7N%X_4{LKBH8oC;6ep?o*?Gnx zz4bYF(;_dXcNiNxdEYsS=l04lEQ*YlmrH<`YOAO~C^xofI6ElL^Y4BL#mPHQ%gOmI zqbyCi7R5{c8UslOX3eE-xg+Wd-5iFis;a&`j02gWh~T{}rT7R6o$~!R+LaHdvY;@C z8daCbW@kyKm^j#DMef1$L3@bF0TD64ns{@>1-!H5I<1w6546$wbTWc49M!pY8We5V z!qM!lITZncNn35|pB;vHqrH8hvfeEC0|YIlw%FcZ%{(x{XDp!!W8KM4Oi0iM6B3sL zs!15~8AoQUO^cY8VBYAIYACrwB+?=qvYdN5MsO8yRDDJ*CzoeFSP6E>iq^YsF*qMC zHW$IWYdt8LXJ&0&jxITT6!KL8iPp3%vR943%tE~J)GSjVk}CjNk0yC6#QIL~25F$8 zEPOj%nH?4@hK+SZf;u>0W%_IS*jX7Ebni-XG6Fj<1o}&f5&)7B9;$9aq)P@)EJCR~ z7;|s?X(Ga2wQ}|{Ie1ZN*_H_Z;R?svWc)E3?346|Td+RM_EgYd!fyW5Fk#%X-x|v6 ze(o~j%v}!h`OMftIro`Y;ITfuEmr`E$$v)U$BA=*1&9kmS{r<$Tb)aH9B&V*w{g#2 ze=q&)pm>y-Qkxd~jc=ApaB_->KWyyYQv&Cy6-&jDDLQu+(vspykw4;? zFd0co$88MhM~UWtJp)X(00b)zY&L6RJTcPBM#XWnx`fH|zW9kJ&YT$iy76)a1#@M+ zx`dT_$P_<%O5Oiz7|g*^C8=yYGkPO(qwnKEQuor>_h2rZCeWL0!oZ6GeF}ljjxBKU zQKyZn!p;mmQb}1~VqD?GOiyz@3LR#=b^7-hS@asD1+FWb&n_a-%mFQDVx-|p4DI7R zF~sPHT0b#C_v%4adj6feg?E!f`7eS7MrlOBaALvUJ%q0Jgy(|NIHyvo{<#2=F-l|0 zjUBNU&j+4CjL1DkxSw5WlkCIQrJrPkk8)iUNFL19fb`7|UtA(YSxd7#)8{*)b~abN+ncyNpUuv%nAG{5U_)C@OPj@QkB$rkdTVKF?h}rRW*Kw|T<0YA zfSYPEg#(y8|60ZHx*;LN@N_%vJfn;Uwoy_HY=Nyfc$B>5;skGcE>B|Z+IQN^mMz^# zJ2!PR=tgcDFsB&`IuBhD0l=VL!InM-zJves*nbfV%FLJ*8D8%@+a~!d0xU-HXRP<| zw!7T2AQzcNQ^Dh|2=Er^b$Zm)EqwJY(!YsNJgUzY9&cE2MIreFG)7q98wA#S3P<>ki!k#2aCdf zvehSJeW=W`XCQbJWbmXYHe*yH1r_(+czt7 z>HB|7onv@iVb`sj#3Qau_ZX9;nS~NcTfWRx`%9UK>yJR~vGM+C{bU~KqpyZtV?VDlp};L^K#`FMyy>2W zqPn$7uYIUwb=e{%3nc5s+nP}MRl>rw5ejET_h_O~Jatzc>9*&+rhiwRtk!C&Q|$S3|HR20evw-KHt8K zMPlz-U&8nF_%xS2#%2)LQ&xZ2AVQ25z{z;s9oGYrFwj8R^)~dX2at1s_9mFPx$F&+ zWYf^G(AL+t^Ro&6)37jCAX-u7yF8)722%KQW+~=lF)jIIYiT~BSXOQs_vL%|xs$6C z`gd5i|EJbupZt$ngNF7S)297?-t<;lHjz=HfDf>B!XkbDfx{iRT2^%rJ8K0<6{Voh zSnCbsqe%%-3iiIJk0i77O36Fs=}xPBMH(%z<`l;PV@82)iYHOLG9jgvNl!v(xt+}F znN59_W%XX?T^S29TX1FH%ta|qRm#5&BbirJWs{meEQ?n!RG^H0-jh>P;5X9FjND%? zI%7Dyvtz8Env=u&T4=DPtOA~FRWN&U=hpk<`|arFAr6NrLn}hYDd3|NX*^1Vv~qR%&OZu2$c|73Hx8Q96oy9et( zVwlC(LnEMYXzDpL7W;KvY=Q+rk^04?vze@=37LlByp<(FFP7&CbjJUEBJTZJ)R9nZ?Xg#UdoR$p?KRM+fr7bL&U6vJ zV$0Ax7dPKh5Ts@vGR`uKp1f)-$EKVP&jjyjvJli)4)fB6A)5@1eSHgBi|kZQUpoe~ z-4hHVd6`x1j46kXsdT4tMjBUe=vtiGYP~ae%sT`^j|IZ}^dQYR9?BevYX&m5H*Vk-K6BMB)(iGm}# z>m`WBcA(_J+7qdN8);uY6vWArF3zK<+cclVQ52XHNc#dODS&y4;R1O_eF`^b4!(XS z1l5qHf}Wms5&})F$l>Y8kXaHe#L4an$ip+b7{qc45BK$4@<_kSas<5Mv2Zm<}_W1`mUy;3K;Oow6t0K3PBCt`!XLQzLj z66jn1bo2W8Q(RIKfG+1;ww%zZm(({MeFSX;Sj`t_%!dbnPO0r-LP!ED@njeM5jpVLTm)L zPgCX6Bx5G_L@M~Xo1LZtPgDRGWis$Atc$MK_P)=P0H&C-P+G28)gZ)1ncjGvW3UFf z?)b+YEN;-%7V@dpRYUsOC zMw*fEN5FjL5;50L!$8BL{vx(Y*KuntL+95Q#S2`(v;jb0rb}nQwICEq31i^=wlUA zix0I#_xqcH`*FHN6mzgb2rT+=_e*bNNzNO#3x&&E6fG({k^5y=+)@{i(cb5O-{;wW zc0f53+H)TWJ@^buh@kaT)6mcQ?eHtF4v?V7Q}eySN#Fvhry^2lUj9T+sI>O0(u=^; zgiz{lZ}1QFT(;`h2MIaCzY2}rv7fpn(7bawD$&!T(L!bmnO*B8WWsqAf6nlWM?4i< z7H@d|io8tHDmE$yUN#vR2*5rP*e%4LtKg;OD4mb!E#my*v;s=e5W~VUL77_lvn}#5xu$I*{ z9adXV0|CxsHL*m&>n%AI4;B@vDUCe zCmU^`*Z0m9*k-j9ya~NOalKPpvUA#Pcmt*6R>L0+E8NSYGqjyq-OL;|H0al(A3k3V zw|$JcK4(Td-$OV}>px89)^BGw>-v{7kUa*s8x@vam58{l zJ|UA0=iHlopR*QyWHHk|K7pn4fPJb9+sZ*@n>9CI;9ebXS=7qaKD3fxa?Y%*+?*DC z;V;$9SuG@5-}_URXy~=Kuh^~C{(cj;T9!YlOaDGTg~}+OS>M9jcx0j|IMptCu@OH> zEg*E3s#)oNn4+5swVbZ9vz+4C$NlxJ^``#0ge~1lDl>4RvkN2L>UIRzqm-zbH-Gsl z{kRqFgp0Bmc%9~bi4eh3EgBK05tTJFl=0q38MA>b#^%5?P+UNd$*}^;*Liew0h~Ld z`0OH*u^AKG1`wi3({|Kb@h6*Ca|to`KYC1j^T6&|75Dbv_W_pPG>4G+GqpG=II{yzTJu4laGX z>vEgpbrBsGS6yE2x&0o-LY$SYp{5p1BtQoOU7uEW8Mj6Vrx*kBW(zr(S~<|Mptuo2C{u?-Vr&As@T#_h+* zRv$j;d7Z06hJ@@5bCAd*p@(+9Q6WsP@eoT`u=WseWY z6$f|o?8s^467gg4TNW)I2K8~MqT^y{qi<<1z$g2!)rTPM3hLG*4KNWkgr2jTihocGIw)*{^_X*uHBo~cd$kwBxSycML zp%7(c6gFRiKq48eU+@2|^mXgL_Re}0K2FRVsUGyY>Bg&`KmlaF_mEXTBx-O!|8?fN zG1Y*b$R4mvZ5QR|CmR#RAt&YZ8!#WtMEK8t%L*ZD4DRS@sWo-NJ2OTHW`K@G%1DCg zeZNa)?s^2hM>Kp!gR>n5^7WZ@J?S$@!Hiw(`!*ac#&Im=ln*+BU^ZA=rRLT+a*c4g zkFzqJZ~H>vE8)D^sjIv4S;++mts%SM_m&bMFc{gq?w;@0W3+6|aBC1olD8)aJ_gVS zK$&f=`}>5ai}b2eewLOGFV|6sE!YP1KdBw*uj3x6_x9vC(w@#%E&r)0$^h2`0fA(O zh=WKvdoMhO>47zWher5(d%SN4saU7skAbu4VwTbhW;oYFyq7i;`qpatqELA_GBuG~ z|EX2e%uy)<14o6^YSdPv^Ja6S^-x%ehT8*eop4ERkBXwDcira9xu?!}UF3eXLH{wN zR^N8DEk>W_HQ(P4&rZ1D=2Py_)fMar-=2@0tm2@M@{r{+(4iEWOjDKGV@te4N>c!= z0^>_nwo)ClEfCkasfPR7xEut&#Gxw&j)wG##%F^XmEKYd+c&uIH`T+r7JhYAnBX;u@?X4Dz#Js90XH)$+rfmQ{CH_u zna;<~%ZNunaIl|Je=futf%Jt1GER@#ACCkVi&?tYz$fhC!NGifz^+y@$$$D(k}KTw zFr;g5zB#YUU_p}Sx1sFgewEgj4ZJtXT9@7F>%waDX8Kn7o1{zeMi0REnBA${^ za1(Vkd7qF2#sFWt|1#oCzOEbm&Z$TvZQA_+iF=+BYuLR9_wLV(Ct}DyIN{DOz=(jr zR4s9*e!}*l^8`*b*h zUHeGu=3Td6bbX9cVn3XxLN4J5nrQjxcM3>^PcV?$*Du*W&QXOL`7%b_(r!Kt6BQ9*x<3H>T8q>1KqC zST5v|x{_ot^sV>#il!3~kq9c(-tzhoJDr3 zA-oW8dQhJhnqFDs9L~-_C^mxi)x)OYqyl0lk%99ICGMHk^>yrNR^zhwE39iCVExQ^ z!^OoM+_Y3NY#k}DuIRUSJ858>v7pK7vyW%8)N|aeLdzv8l#DT{X5BeDC`4Y~p6u&% zRI{sr;k;{>Kj1$eF&!C`Mkr;tzZ(LX;9#e5=(#((=M?nJq8`a96A-V-BrDVG(4 z)=EW*ha8U6C9-paigpoAyyH(`&M4mfY6(~vh+_o9{S}(DaSmUlCRyx9pa>Sz4|MHZ zG+mw}pczH!plrJE)r@Qm;K8WTowel{0WvH|IzmK46|Yq84uolblk^N!LP03Kk}=*T7ea!Nr=_aM$+CJB}&Nr82kwRjbg`7~ zM9G)K0+9wXyE%F$gXQz$D_5tc_sKLd*WJ4$Ybj4ib`seIvYJvO5by1Pbf)kg#!hrK zRd0r5bKH7?O(WLppSmn?Xjj|cNlR?b3uUI=&$jvi^xO>wPA!*yzyI7QK`nsvxyAaq zk_Qzv2X~Ll&^N>DF+LF-@XSo|x{26US|YVt4mSz3H<4e(gbj&pJ58tYoSsfEFWV>v zC+tb$D^D|&WOKADcE8hLU}JjM-WLLSC@7m{0D?Qn|T(z%- zz`^xil!G2-+VIurt>2acSotBLzqOOWN4r#wtbh!y_YC3$UzPH-S1*A4Hgk#Asc1hA zWrWp#W!N^5B2ZSRE>gz4ndneSd;frk&obYP@2E1V#i&ZuO6e$i4Vb?VK*=mo?QUP1d>E5Z+=DUyaCL4ABuy&!4M=t2E%PldnQ@qHgTn>!KRBe z;dr$xAw5z12~xv?i>cFh_&%F~UqX0tRT`s?F8FCXf&~c=_i{jdoT^OBQ<9fFMEfVw zCKJK8nW0j=kyO@H8-*-LJddD&i-M>d5>(MgJKD#U?%nHgoT>=3t0?9!giTGw6MVeG zY3&{>^Pw9P4e#$@srZBHVI{dw%eAJ%PzX3AHY?A$Z~gI7zdl_g5_lm}Bg-`%T#e)= z8^gl2L^8pDU(08}OAezKdD3-bn4_@Ry5baGb< z3o2bEiH_%I+1<}SU~Kbw5jkn}vd`C>nO_pawvGIDuN7V7ZgVOsCXUjSM`1bo=b-i_@;l>qEHK|MtZ z$1bqkl9MD>bWm+$d0eQ4=6mLmPbK8tdo_zw*Ft-$_Q~&M#<7L;iO9UMzgS~cxhjXi z6Uq3cSK~mu&Ek4Tjku%oTW`RaOw8Odp9CE5-*veQy`>_HP)uP;XYOQu{0&G z7}En34BuP{7B}tHpa6Y}&xNJNNR9VKP1UUvk;XM#rhHW^vr9(iZ=-@KE5QO9o@n<; zNZ4&6bm0qmhi(hhK|<*#cU@glMoYa4ig%t8_r(WwDiD3J=#E`v`P2_(2KMMAgjuug z4`a&)Hfq)yX2HOq>JSJk8yzT9BjwT83}x;VFSDT3Qi+tN;$PU@hmFp z5&-+VnxG#aH{IP$*ujiTOWAaOxVP){vLro?6u%sxRZR$B6iinnL{4H6`x)2l@JwWF z*rW->e}P7}DU0n~*&Bi8L!Jr8|8fCe1Uz2dRla?T=89w@58U!T=BbrD^;hG#GYHrq z57WZM>5t6>##r`S?XEmREO@`I@=_#}l&82imdFX|c0^N3gt!~yVo&!3K5=q#QUa;b zUDXdzoi}T;X>sZvZE$P9*4)&!ly?ZhPWS^#>&BP?!p=x+^7cFwSX3=6AH=#yNSH;* z9jA_CoDzE9%@QTE8rM_-lPH~y7DjCA&B4mRR?q0od3R^xV8r`=wI8R=0!`ELZ}p44 z+=NXIA;KE|G~;T)bce3@dv#4iTufZBDgP|&sS}S&D=2!VPjM>h>a;dB!Tq6#=GE~f z#XoBVGl#{7pMMitFSR;PqaN!x z@CS%i;)6pYa=TozsFJx2Wu5Y@s7RG!C0>TR>rs(^yqq`V%a1Y;#_IsHcyD+D$~l|h zUxH57Al)-Le>ep}A)4jlvNyuQJR%s|uc48KZKVYM7I*prd($WtiTg27l<^8ly`sy( z@B?j$9jhaxde^ZS?XJbWCtQI(2A##vIBfj8NzXptMcZ4eWsapGN00MBkcmc1�%s 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ℑP-cvh`I!D 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�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
    >_tLcGZnyUbC2PP^$Eq$arJcubi0Z(t7VPL) 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 z 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 D-7G<> literal 0 HcmV?d00001 diff --git a/homelab-gitops-repo b/homelab-gitops-repo index 7b2dd24..c7eb47f 160000 --- a/homelab-gitops-repo +++ b/homelab-gitops-repo @@ -1 +1 @@ -Subproject commit 7b2dd24526eab8f630631b41c28bf01acd0aec90 +Subproject commit c7eb47f6d8d9d030b82d6786da7c1ed3c2a954e5 diff --git a/scripts/add_kuma_bookmarks.py b/scripts/add_kuma_bookmarks.py new file mode 100644 index 0000000..4c082b3 --- /dev/null +++ b/scripts/add_kuma_bookmarks.py @@ -0,0 +1,58 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) +cm = docs[2] + +bookmarks_yaml = """- Quick Links: + - GitHub: + - abbr: GH + href: https://github.com/ + - UniFi Site Manager: + - abbr: UI + href: https://unifi.ui.com/ + - Cloudflare: + - abbr: CF + href: https://dash.cloudflare.com/ +- Grafana Telemetry: + - Systems Performance: + - abbr: SYS + href: https://grafana.snarfnet.net/d/snarfnet-systems/52f6861 + - Container Workloads: + - abbr: K8S + href: https://grafana.snarfnet.net/d/snarfnet-containers/f09f93a6-kubernetes-containers-and-workloads + - AI Stack Intelligence: + - abbr: AI + href: https://grafana.snarfnet.net/d/snarfnet-ai-stack/snarfnet-ai-stack-and-inference-intelligence +- Uptime Status Pages: + - Unified Overview: + - abbr: ALL + href: https://uptime.snarfnet.net/status/default + - Core & VIP Fabric: + - abbr: VIP + href: https://uptime.snarfnet.net/status/core + - GitOps & CI/CD: + - abbr: OPS + href: https://uptime.snarfnet.net/status/gitops + - Edge & Ingress: + - abbr: EDG + href: https://uptime.snarfnet.net/status/edge +""" + +cm['data']['bookmarks.yaml'] = bookmarks_yaml + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("Updated bookmarks in homepage.yaml successfully!") + diff --git a/scripts/add_topology_to_homepage.py b/scripts/add_topology_to_homepage.py new file mode 100644 index 0000000..f8184d2 --- /dev/null +++ b/scripts/add_topology_to_homepage.py @@ -0,0 +1,26 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) +cm = docs[2] + +services = yaml.safe_load(cm['data']['services.yaml']) +bookmarks = yaml.safe_load(cm['data']['bookmarks.yaml']) + +cm['data']['services.yaml'] = yaml.dump(services, sort_keys=False, default_flow_style=False, allow_unicode=True) +cm['data']['bookmarks.yaml'] = yaml.dump(bookmarks, sort_keys=False, default_flow_style=False, allow_unicode=True) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("Cleaned up unicode strings in homepage.yaml!") diff --git a/scripts/add_zabbix_devices.py b/scripts/add_zabbix_devices.py new file mode 100644 index 0000000..3276d8d --- /dev/null +++ b/scripts/add_zabbix_devices.py @@ -0,0 +1,118 @@ +import json +import ssl +import urllib.request + +ZABBIX_URL = "http://140.44.4.60:8888/api_jsonrpc.php" +ZABBIX_USER = "Admin" +ZABBIX_PASS = "zabbix" + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +def zbx_call(method, params, auth=None): + payload = {"jsonrpc": "2.0", "method": method, "params": params, "id": 1} + headers = {"Content-Type": "application/json-rpc"} + if auth: + headers["Authorization"] = f"Bearer {auth}" + req = urllib.request.Request(ZABBIX_URL, data=json.dumps(payload).encode("utf-8"), headers=headers, method="POST") + with urllib.request.urlopen(req, timeout=10, context=ctx) as r: + resp = json.loads(r.read().decode("utf-8")) + if "error" in resp: + raise RuntimeError(f"Zabbix error in {method}: {resp['error']}") + return resp["result"] + +auth = zbx_call("user.login", {"username": ZABBIX_USER, "password": ZABBIX_PASS}) + +# Check existing host names +existing_hosts = zbx_call("host.get", {"output": ["hostid", "host", "name"]}, auth) +existing_names = {h["host"].lower(): h["hostid"] for h in existing_hosts} + +# Create host groups if not exist +groups = zbx_call("hostgroup.get", {"output": ["groupid", "name"]}, auth) +group_map = {g["name"]: g["groupid"] for g in groups} + +for gname in ["Network Devices", "Environmental & Sensors", "Management & IPMI"]: + if gname not in group_map: + res = zbx_call("hostgroup.create", {"name": gname}, auth) + group_map[gname] = res["groupids"][0] + print(f"Created Host Group: {gname} (ID: {group_map[gname]})") + +devices_to_add = [ + { + "host": "idrac-spacedock4", + "name": "Dell PowerEdge R730 Node 4 iDRAC (idrac-spacedock4)", + "ip": "140.44.44.124", + "group": "Management & IPMI" + }, + { + "host": "usw-agg-core", + "name": "UniFi Switch Aggregation 10G Core", + "ip": "14.44.4.26", + "group": "Network Devices" + }, + { + "host": "usw-24-poe-closet", + "name": "UniFi Switch 24 PoE Closet", + "ip": "14.44.4.61", + "group": "Network Devices" + }, + { + "host": "usw-pro-24-poe-compute", + "name": "UniFi Switch Pro 24 PoE Compute", + "ip": "14.44.4.107", + "group": "Network Devices" + }, + { + "host": "usw-flex-attic", + "name": "UniFi Switch Flex Attic", + "ip": "14.44.4.98", + "group": "Network Devices" + }, + { + "host": "usw-flex-garage", + "name": "UniFi Switch Flex Garage", + "ip": "14.44.4.96", + "group": "Network Devices" + }, + { + "host": "tempest-weather-station", + "name": "Tempest Weather Station Gateway", + "ip": "14.4.4.47", + "group": "Environmental & Sensors" + }, + { + "host": "sense-energy-monitor", + "name": "Sense Home Energy Gateway", + "ip": "14.4.4.48", + "group": "Environmental & Sensors" + } +] + +for dev in devices_to_add: + hname = dev["host"] + if hname.lower() in existing_names: + print(f"[EXISTS] {hname}") + continue + params = { + "host": dev["host"], + "name": dev["name"], + "interfaces": [ + { + "type": 1, # Agent / ICMP + "main": 1, + "useip": 1, + "ip": dev["ip"], + "dns": "", + "port": "10050" + } + ], + "groups": [{"groupid": group_map[dev["group"]]}], + "templates": [{"templateid": "10564"}] # ICMP Ping + } + try: + res = zbx_call("host.create", params, auth) + print(f"[CREATED] {dev['name']} ({dev['ip']}) -> HostID {res['hostids'][0]}") + except Exception as e: + print(f"[FAILED] {dev['name']}: {e}") + diff --git a/scripts/apply_full_homepage.py b/scripts/apply_full_homepage.py new file mode 100644 index 0000000..ed6c12f --- /dev/null +++ b/scripts/apply_full_homepage.py @@ -0,0 +1,250 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) +cm = docs[2] + +services_yaml = """- Critical Services: + - Authentik: + icon: authentik.png + href: https://authentik.snarfnet.net + description: SSO & Identity Management + - PeaNUT UPS: + icon: peanut.png + href: https://portal.snarfnet.net + description: UPS Power & Battery Monitor + - Unifi Controller: + icon: unifi.png + href: https://unifi.ui.com + widget: + type: unifi + url: https://140.44.44.1 + username: Snarf + password: Katzir476!!! + +- GitOps & Automation: + - Gitea: + icon: gitea.png + href: https://git.snarfnet.net + description: Git Repositories + widget: + type: gitea + url: https://git.snarfnet.net + key: f19e772cf54e40ceb2befe452e2bc24dd81fdb71 + - ArgoCD: + icon: argocd.png + href: https://argo.snarfnet.net + description: Declarative GitOps Reconciler + widget: + type: argocd + url: https://argo.snarfnet.net + key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0 + - AWX Automation: + icon: awx.png + href: https://awx.snarfnet.net + description: Ansible Automation Controller + - Semaphore: + icon: semaphore.png + href: https://semaphore.snarfnet.net + description: Playbook Execution Engine + +- Storage & Clusters: + - Longhorn Aerodrome: + icon: longhorn.png + href: https://longhorn.aerodrome.snarfnet.net + description: Aerodrome Distributed Flash Storage + - Longhorn Spaceport: + icon: longhorn.png + href: https://longhorn.spaceport.snarfnet.net + description: Spaceport Distributed Block Storage + - Rancher (Aerodrome): + icon: rancher.png + href: https://aerodrome.snarfnet.net + description: Kubernetes Management Console + widget: + type: customapi + url: https://aerodrome.snarfnet.net/v3/clusters/local + headers: + Authorization: "Bearer kubeconfig-u-aqzkufonck4hmbd:bw22b96nv8844k8w5r8lzpz8gnk22tjwj95j6nkzr7hd5dhm4bs6z7" + mappings: + - field: capacity.cpu + label: CPU Cores + - field: capacity.pods + label: Max Pods + - field: state + label: Cluster State + - Harvester HCI (Spacedock): + icon: harvester.png + href: https://harvester.spacedock.snarfnet.net + description: HCI Virtualization Hypervisors + widget: + type: customapi + url: https://aerodrome.snarfnet.net/v3/clusters/c-cclnt + headers: + Authorization: "Bearer kubeconfig-u-aqzkufonck4hmbd:bw22b96nv8844k8w5r8lzpz8gnk22tjwj95j6nkzr7hd5dhm4bs6z7" + mappings: + - field: capacity.cpu + label: CPU Cores + - field: capacity.pods + label: Max Pods + - field: state + label: HCI State + - Portainer Swarm: + icon: portainer.png + href: https://shipyard.snarfnet.net + description: Docker Swarm Container Fleet + widget: + type: portainer + url: https://140.44.4.71:9443 + env: 3 + key: ptr_TCVm8ujeB4zT0oRejyMCwKw5enaPG/uKj1KuF0uOWX8= + +- Infrastructure & Observability: + - NGINX Proxy Manager: + icon: nginx-proxy-manager + href: https://nginx.snarfnet.net + description: Reverse Proxy & SSL Certificates + - Uptime Kuma: + icon: uptime-kuma + href: https://uptime.snarfnet.net + description: Multi-Endpoint Availability Probes + widget: + type: uptimekuma + url: http://140.44.4.28:448 + slug: default + - Zabbix: + icon: zabbix.png + href: https://zabbix.snarfnet.net + description: Infrastructure Metrics & Alarms + - Grafana: + icon: grafana.png + href: https://grafana.snarfnet.net + description: Real-Time Metrics & AI Dashboards + widget: + type: grafana + url: https://grafana.snarfnet.net + username: admin + password: Katzir476!!! + - Core Node Glances: + icon: glances.png + href: http://140.44.4.11:61208 + description: Host Resource Monitor + +- Environment & Weather: + - Tempest Weather Station: + icon: weather.png + href: https://snarfhome.snarfnet.net + description: Backyard Weather Telemetry + widget: + type: homeassistant + url: http://14.4.4.20:8123 + key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4 + custom: + - template: "{{ states('sensor.st_00158555_temperature') | float(0) | round(1) }} °F" + label: Outdoor Temp + - template: "{{ states('sensor.st_00158555_feels_like') | float(0) | round(1) }} °F" + label: Feels Like + - template: "{{ states('sensor.st_00158555_humidity') | float(0) | round(1) }} %" + label: Humidity + - template: "{{ states('sensor.st_00158555_wind_speed') | float(0) | round(1) }} mph" + label: Wind Speed +""" + +settings_yaml = """title: SnarfNet Operations & Telemetry +headerStyle: boxed +color: slate +theme: dark +statusStyle: badge +background: + image: https://i.imgur.com/hOzzkCY.jpeg + blur: sm + opacity: 50 + brightness: 50 +cardBlur: sm +quicklaunch: + searchDescriptions: true + hideInternetSearch: true + hideVisitURL: true + hideVersion: true +layout: + Critical Services: + icon: mdi-shield-check + style: row + columns: 3 + GitOps & Automation: + icon: mdi-git + style: row + columns: 4 + Storage & Clusters: + icon: mdi-server-network + style: row + columns: 3 + Infrastructure & Observability: + icon: mdi-chart-timeline-variant + style: row + columns: 3 + Environment & Weather: + icon: mdi-weather-partly-cloudy + style: row + columns: 1 +showStats: true +providers: + longhorn: + url: http://longhorn-backend.longhorn-system.svc.cluster.local:9500 +""" + +widgets_yaml = """- kubernetes: + cluster: + show: true + cpu: true + memory: true + show_names: true + nodes: + show: false +- longhorn: + total: true + nodes: false +- resources: + label: System + backend: resources + cpu: true + expanded: true + memory: true + disk: / +- search: + provider: duckduckgo + target: _blank +""" + +bookmarks_yaml = """- Quick Links: + - GitHub: + - abbr: GH + href: https://github.com/ + - UniFi Site Manager: + - abbr: UI + href: https://unifi.ui.com/ + - Cloudflare: + - abbr: CF + href: https://dash.cloudflare.com/ +""" + +cm['data']['services.yaml'] = services_yaml +cm['data']['settings.yaml'] = settings_yaml +cm['data']['widgets.yaml'] = widgets_yaml +cm['data']['bookmarks.yaml'] = bookmarks_yaml +cm['data']['kubernetes.yaml'] = "mode: cluster\n" + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("Saved clean homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml successfully!") diff --git a/scripts/apply_grafana_dashboards.py b/scripts/apply_grafana_dashboards.py new file mode 100644 index 0000000..581237c --- /dev/null +++ b/scripts/apply_grafana_dashboards.py @@ -0,0 +1,33 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "r", encoding="utf-8") as f: + grafana_yaml = f.read() + +stdin, stdout, stderr = c.exec_command("cat > /tmp/grafana_updated.yaml") +stdin.write(grafana_yaml) +stdin.close() +stdout.channel.recv_exit_status() + +print("Applying Grafana manifests:") +print(run("kubectl apply -f /tmp/grafana_updated.yaml")) + +print("\nRestarting Grafana:") +print(run("kubectl rollout restart deployment/grafana -n default")) +print(run("kubectl rollout status deployment/grafana -n default --timeout=60s")) + +print("\nWaiting for Grafana to finish initialization...") +time.sleep(10) + +c.close() + diff --git a/scripts/apply_grafana_server_side.py b/scripts/apply_grafana_server_side.py new file mode 100644 index 0000000..800c39c --- /dev/null +++ b/scripts/apply_grafana_server_side.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +print("Applying server-side:") +print(run("kubectl apply -f /tmp/grafana_full.yaml --server-side --force-conflicts")) +print("\nRollout restart:") +print(run("kubectl rollout restart deployment/grafana -n default")) +print(run("kubectl rollout status deployment/grafana -n default --timeout=60s")) + +c.close() + diff --git a/scripts/apply_homepage.py b/scripts/apply_homepage.py new file mode 100644 index 0000000..4378880 --- /dev/null +++ b/scripts/apply_homepage.py @@ -0,0 +1,31 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if out: + print(out) + if err: + print("[stderr]", err) + return out + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + content = f.read() + +stdin, stdout, stderr = c.exec_command('cat > /tmp/homepage.yaml') +stdin.write(content) +stdin.close() +stdout.read() + +run("ls -lh /tmp/homepage.yaml") +run("kubectl apply -f /tmp/homepage.yaml") +run("kubectl rollout restart deployment/homepage-2-1744068158 -n infrastructure") +run("kubectl rollout status deployment/homepage-2-1744068158 -n infrastructure --timeout=60s") + +c.close() diff --git a/scripts/apply_prom_grafana.py b/scripts/apply_prom_grafana.py new file mode 100644 index 0000000..a5b755a --- /dev/null +++ b/scripts/apply_prom_grafana.py @@ -0,0 +1,45 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +with open("homelab-gitops-repo/manifests/aerodrome/prometheus/prometheus.yaml", "r") as f: + prom_yaml = f.read() + +stdin, stdout, stderr = c.exec_command("cat > /tmp/prometheus.yaml") +stdin.write(prom_yaml) +stdin.close() +stdout.channel.recv_exit_status() + +print("Applying Prometheus:") +print(run("kubectl apply -f /tmp/prometheus.yaml")) + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "r") as f: + grafana_yaml = f.read() + +stdin, stdout, stderr = c.exec_command("cat > /tmp/grafana_full.yaml") +stdin.write(grafana_yaml) +stdin.close() +stdout.channel.recv_exit_status() + +print("\nApplying Grafana configuration & dashboards:") +print(run("kubectl apply -f /tmp/grafana_full.yaml")) + +print("\nRestarting Grafana:") +print(run("kubectl rollout restart deployment/grafana -n default")) +print(run("kubectl rollout status deployment/grafana -n default --timeout=60s")) + +print("\nChecking Prometheus pod:") +time.sleep(5) +print(run("kubectl get pods -l app.kubernetes.io/name=prometheus")) + +c.close() + diff --git a/scripts/apply_prom_update.py b/scripts/apply_prom_update.py new file mode 100644 index 0000000..6ccc438 --- /dev/null +++ b/scripts/apply_prom_update.py @@ -0,0 +1,36 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +with open("homelab-gitops-repo/manifests/aerodrome/prometheus/prometheus.yaml", "r", encoding="utf-8") as f: + prom_yaml = f.read() + +stdin, stdout, stderr = c.exec_command("cat > /tmp/prometheus_updated.yaml") +stdin.write(prom_yaml) +stdin.close() +stdout.channel.recv_exit_status() + +print("Applying Prometheus:") +print(run("kubectl apply -f /tmp/prometheus_updated.yaml")) + +print("\nRestarting Prometheus:") +print(run("kubectl rollout restart deployment/prometheus -n default")) +print(run("kubectl rollout status deployment/prometheus -n default --timeout=60s")) + +print("\nWaiting 15 seconds for scrape loop...") +time.sleep(15) + +print("\nPrometheus active targets count:") +print(run("kubectl exec deployment/prometheus -- wget -qO- http://localhost:9090/api/v1/targets | grep -o '\"health\":\"up\"' | wc -l")) + +c.close() + diff --git a/scripts/capture_screenshot.py b/scripts/capture_screenshot.py new file mode 100644 index 0000000..56bd062 --- /dev/null +++ b/scripts/capture_screenshot.py @@ -0,0 +1,27 @@ +import subprocess +import os + +edge_path = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" +out_png = os.path.abspath("docs/snarfnet_homelab_topology.png") +html_url = "file:///" + os.path.abspath("docs/snarfnet_homelab_topology.html").replace("\\", "/") + +cmd = [ + edge_path, + "--headless", + "--disable-gpu", + "--no-sandbox", + "--hide-scrollbars", + "--window-size=1920,2400", + f"--screenshot={out_png}", + html_url +] + +print("Running cmd:", " ".join(cmd)) +res = subprocess.run(cmd, capture_output=True, text=True, timeout=30) +print("Return code:", res.returncode) +print("Stdout:", res.stdout) +print("Stderr:", res.stderr) +print("File exists?", os.path.exists(out_png)) +if os.path.exists(out_png): + print("File size:", os.path.getsize(out_png)) + diff --git a/scripts/cat_prom_conf.py b/scripts/cat_prom_conf.py new file mode 100644 index 0000000..751b32a --- /dev/null +++ b/scripts/cat_prom_conf.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/prometheus -- cat /etc/prometheus/prometheus.yml")) +c.close() + diff --git a/scripts/check_aero_metrics_sources.py b/scripts/check_aero_metrics_sources.py new file mode 100644 index 0000000..63cb2ce --- /dev/null +++ b/scripts/check_aero_metrics_sources.py @@ -0,0 +1,24 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Nodes on Aerodrome:") +print(run("kubectl get nodes -o wide")) + +print("\nDaemonSets on Aerodrome:") +print(run("kubectl get ds -A")) + +print("\nServices matching metrics:") +print(run("kubectl get svc -A | grep -E 'metric|node|cadvisor|exporter'")) + +print("\nKubelet metrics on node 140.44.4.11 (port 10250 or 10255):") +print(run("curl -sk https://localhost:10250/metrics/cadvisor | head -n 10")) + +c.close() + diff --git a/scripts/check_argo_secret.py b/scripts/check_argo_secret.py new file mode 100644 index 0000000..2aa2e15 --- /dev/null +++ b/scripts/check_argo_secret.py @@ -0,0 +1,16 @@ +import paramiko +import base64 + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Argo initial secret:") +print(run("kubectl get secret argocd-initial-admin-secret -n infrastructure -o jsonpath='{.data.password}'")) + +c.close() + diff --git a/scripts/check_argocd_apps.py b/scripts/check_argocd_apps.py new file mode 100644 index 0000000..dfb4386 --- /dev/null +++ b/scripts/check_argocd_apps.py @@ -0,0 +1,73 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0" +headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" +} + +try: + resp = requests.get("https://argo.snarfnet.net/api/v1/applications", headers=headers, verify=False, timeout=10) + data = resp.json() + items = data.get("items", []) + print(f"Total Applications: {len(items)}\n") + + out_of_sync = [] + synced = [] + + for app in items: + name = app.get("metadata", {}).get("name") + sync_status = app.get("status", {}).get("sync", {}).get("status") + health_status = app.get("status", {}).get("health", {}).get("status") + dest_server = app.get("spec", {}).get("destination", {}).get("server") + dest_ns = app.get("spec", {}).get("destination", {}).get("namespace") + repo = app.get("spec", {}).get("source", {}).get("repoURL") + path = app.get("spec", {}).get("source", {}).get("path") + + # Check operation or sync conditions/messages + operation_state = app.get("status", {}).get("operationState", {}) + op_phase = operation_state.get("phase") + op_msg = operation_state.get("message") + conditions = app.get("status", {}).get("conditions", []) + + info = { + "name": name, + "sync": sync_status, + "health": health_status, + "dest_ns": dest_ns, + "dest_server": dest_server, + "repo": repo, + "path": path, + "op_phase": op_phase, + "op_msg": op_msg, + "conditions": conditions + } + + if sync_status != "Synced" or health_status not in ["Healthy", None]: + out_of_sync.append(info) + else: + synced.append(info) + + print(f"=== OUT OF SYNC / DEGRADED APPS ({len(out_of_sync)}) ===") + for a in out_of_sync: + print(f"\nApp: {a['name']}") + print(f" Sync: {a['sync']} | Health: {a['health']}") + print(f" Dest: {a['dest_ns']} on {a['dest_server']}") + print(f" Path: {a['path']}") + if a['op_phase']: + print(f" Op Phase: {a['op_phase']}") + if a['op_msg']: + print(f" Op Msg: {a['op_msg']}") + if a['conditions']: + print(f" Conditions: {a['conditions']}") + + print(f"\n=== SYNCED APPS ({len(synced)}) ===") + for a in synced: + print(f" {a['name']}: Sync={a['sync']}, Health={a['health']}, NS={a['dest_ns']}") + +except Exception as e: + print("Error querying Argo CD API:", e) + diff --git a/scripts/check_argocd_resources.py b/scripts/check_argocd_resources.py new file mode 100644 index 0000000..8195023 --- /dev/null +++ b/scripts/check_argocd_resources.py @@ -0,0 +1,29 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0" +headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" +} + +resp = requests.get("https://argo.snarfnet.net/api/v1/applications", headers=headers, verify=False, timeout=10) +data = resp.json() +items = data.get("items", []) + +for app in items: + name = app.get("metadata", {}).get("name") + sync = app.get("status", {}).get("sync", {}).get("status") + health = app.get("status", {}).get("health", {}).get("status") + resources = app.get("status", {}).get("resources", []) + + out_resources = [r for r in resources if r.get("status") != "Synced" or r.get("health", {}).get("status") not in ["Healthy", None]] + + print(f"[{name}] Sync: {sync}, Health: {health}, Total Resources: {len(resources)}") + if out_resources: + print(f" -> Out-of-sync / unhealthy resources:") + for r in out_resources: + print(f" {r.get('kind')}/{r.get('name')}: Sync={r.get('status')}, Health={r.get('health', {}).get('status')}") + diff --git a/scripts/check_authentik_proxy_providers.py b/scripts/check_authentik_proxy_providers.py new file mode 100644 index 0000000..fc33dcb --- /dev/null +++ b/scripts/check_authentik_proxy_providers.py @@ -0,0 +1,24 @@ +import urllib.request, ssl, json + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +AK_BASE = "https://authentik.snarfnet.net" +AK_TOKEN = "SnarfNetPermanentAutomationToken2026" + +def req(endpoint): + url = f"{AK_BASE}/api/v3/{endpoint}" + r = urllib.request.Request(url, headers={"Authorization": f"Bearer {AK_TOKEN}"}) + with urllib.request.urlopen(r, timeout=10, context=ctx) as res: + return json.loads(res.read().decode()) + +print("=== Authentik Providers (Proxy) ===") +providers = req("providers/proxy/") +for p in providers.get("results", []): + print(p["pk"], p["name"], p.get("internal_host"), p.get("external_host"), p.get("mode")) + +print("\n=== Authentik Outposts ===") +outposts = req("outposts/instances/") +for o in outposts.get("results", []): + print(o["pk"], o["name"], o["type"], [p for p in o.get("providers", [])]) diff --git a/scripts/check_awx_monitor.py b/scripts/check_awx_monitor.py new file mode 100644 index 0000000..0b679c2 --- /dev/null +++ b/scripts/check_awx_monitor.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, name, type, url, port, accepted_statuscodes_json FROM monitor WHERE name LIKE '%AWX%';" """)) +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT * FROM heartbeat WHERE monitor_id IN (SELECT id FROM monitor WHERE name LIKE '%AWX%') ORDER BY id DESC LIMIT 5;" """)) + +c.close() + diff --git a/scripts/check_cm_json.py b/scripts/check_cm_json.py new file mode 100644 index 0000000..2f2d072 --- /dev/null +++ b/scripts/check_cm_json.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('kubectl get cm homepage-2-1744068158 -n infrastructure -o json') +import json +cm = json.loads(o.read().decode()) +print("Data keys in ConfigMap:", list(cm.get('data', {}).keys())) +print("\n--- settings.yaml ---") +print(cm.get('data', {}).get('settings.yaml')) +print("\n--- widgets.yaml ---") +print(cm.get('data', {}).get('widgets.yaml')) + +c.close() + diff --git a/scripts/check_dcgm_status.py b/scripts/check_dcgm_status.py new file mode 100644 index 0000000..2ab6f36 --- /dev/null +++ b/scripts/check_dcgm_status.py @@ -0,0 +1,21 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; {cmd}'") + out = stdout.read().decode().strip() + return out + +time.sleep(5) +print("Pods status:") +print(run("kubectl get pods -n ai-stack -l app.kubernetes.io/name=dcgm-exporter -o wide")) +print("Logs from one pod:") +pod = run("kubectl get pod -n ai-stack -l app.kubernetes.io/name=dcgm-exporter -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl logs -n ai-stack {pod} --tail=20")) + +c.close() + diff --git a/scripts/check_deleted_at.py b/scripts/check_deleted_at.py new file mode 100644 index 0000000..b7ca7c0 --- /dev/null +++ b/scripts/check_deleted_at.py @@ -0,0 +1,26 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("""python3 -c " +import sqlite3 +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +for r in cur.execute('SELECT id, user_id, title, pinned, \"order\", deleted_at FROM items LIMIT 10;').fetchall(): + print(r) +" """) + +c.close() + diff --git a/scripts/check_deployment_spec.py b/scripts/check_deployment_spec.py new file mode 100644 index 0000000..242d0d5 --- /dev/null +++ b/scripts/check_deployment_spec.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl get deployment grafana -o jsonpath='{.spec.template.spec.containers[0].volumeMounts}'")) + +c.close() + diff --git a/scripts/check_direct_apis.py b/scripts/check_direct_apis.py new file mode 100644 index 0000000..b57cb33 --- /dev/null +++ b/scripts/check_direct_apis.py @@ -0,0 +1,24 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def test(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res[:300]) + if err: + print("[stderr]", err[:200]) + +test("curl -m 3 -s -I http://140.44.4.28:448/ || echo 'Timeout 140.44.4.28:448'") +test("curl -m 3 -s -I http://140.44.4.31:448/ || echo 'Timeout 140.44.4.31:448'") +test("curl -m 3 -s http://140.44.4.70:8050/api/v1/devices || echo 'Failed PeaNUT'") +test("curl -m 3 -s -H 'Authorization: token 47c10c54574131c007302b246352f653facb5062' http://140.44.4.62:90/api/v1/user || echo 'Failed Gitea'") + +c.close() diff --git a/scripts/check_down_monitors.py b/scripts/check_down_monitors.py new file mode 100644 index 0000000..c622dbb --- /dev/null +++ b/scripts/check_down_monitors.py @@ -0,0 +1,41 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +try: + r = requests.get("http://140.44.4.28:448/api/status-page/heartbeat/default", verify=False, timeout=10) + data = r.json() + heartbeats = data.get("heartbeatList", {}) + down = [] + up = [] + + # Also fetch status page monitor list to map IDs to names + r_sp = requests.get("http://140.44.4.28:448/api/status-page/default", verify=False, timeout=10) + sp_data = r_sp.json() + + id_to_name = {} + for group in sp_data.get("publicGroupList", []): + for m in group.get("monitorList", []): + id_to_name[str(m.get("id"))] = m.get("name") + + for mid, beats in heartbeats.items(): + name = id_to_name.get(str(mid), f"Monitor #{mid}") + if beats: + last = beats[-1] + if last.get("status") == 1: + up.append((name, last.get("ping"))) + else: + down.append((name, last.get("msg"))) + + print(f"Total Monitors: {len(heartbeats)}") + print(f"Up: {len(up)} | Down: {len(down)}") + if down: + print("\nDown Monitors:") + for name, msg in down: + print(f" āŒ {name}: {msg}") + else: + print("\nAll monitors are UP! šŸŽ‰") +except Exception as e: + print("Error:", e) + diff --git a/scripts/check_gaming_pc.py b/scripts/check_gaming_pc.py new file mode 100644 index 0000000..93590c0 --- /dev/null +++ b/scripts/check_gaming_pc.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Ping 140.44.4.80:") +print(run("ping -c 2 -W 1 140.44.4.80 || true")) +print("ARP table for bc:24:11:67:16:cd:") +print(run("ip neigh | grep -i 'bc:24:11:67:16:cd' || arp -a | grep -i 'bc:24:11:67:16:cd' || true")) + +c.close() + diff --git a/scripts/check_glances_host.py b/scripts/check_glances_host.py new file mode 100644 index 0000000..bdce4d3 --- /dev/null +++ b/scripts/check_glances_host.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +print("ps aux | grep glances:") +print(run("ps aux | grep glances")) + +print("\nnetstat / ss listening:") +print(run("ss -tulpn | grep 61208 || ss -tulpn | grep glances")) + +c.close() + diff --git a/scripts/check_gotify_files.py b/scripts/check_gotify_files.py new file mode 100644 index 0000000..a940d96 --- /dev/null +++ b/scripts/check_gotify_files.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("ls -la /mnt/swarm_shared/legacy_volumes/gotify/_data/")) + +c.close() diff --git a/scripts/check_gotify_idx.py b/scripts/check_gotify_idx.py new file mode 100644 index 0000000..d2bce9b --- /dev/null +++ b/scripts/check_gotify_idx.py @@ -0,0 +1,22 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +py_script = """import sqlite3 +conn = sqlite3.connect('/mnt/swarm_shared/legacy_volumes/gotify/gotify.db') +cur = conn.cursor() +indexes = cur.execute("SELECT name, sql FROM sqlite_master WHERE type='index' AND tbl_name='applications'").fetchall() +for idx in indexes: + print(idx) +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/check_idx.py && python3 /tmp/check_idx.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) + +c.close() + diff --git a/scripts/check_gotify_mount.py b/scripts/check_gotify_mount.py new file mode 100644 index 0000000..262180c --- /dev/null +++ b/scripts/check_gotify_mount.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +print("Gotify inspect mounts:") +print(run("docker service inspect gotify_gotify --format '{{json .Spec.TaskTemplate.ContainerSpec.Mounts}}'")) + +c.close() + diff --git a/scripts/check_gotify_service.py b/scripts/check_gotify_service.py new file mode 100644 index 0000000..d1df80e --- /dev/null +++ b/scripts/check_gotify_service.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +print("Gotify service ps:") +print(run("docker service ps gotify_gotify --no-trunc | head -n 10")) + +print("\nGotify service logs:") +print(run("docker service logs gotify_gotify --tail=25")) + +c.close() + diff --git a/scripts/check_grafana_api.py b/scripts/check_grafana_api.py new file mode 100644 index 0000000..06132d1 --- /dev/null +++ b/scripts/check_grafana_api.py @@ -0,0 +1,27 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +auth = ('admin', 'd0KJLZJXUrbIhW1sjU8lrdFYj7VXts26V7Jw7xQr') + +try: + r = requests.get('https://grafana.snarfnet.net/api/datasources', auth=auth, verify=False, timeout=10) + print("Datasources Status:", r.status_code) + if r.status_code == 200: + for ds in r.json(): + print(f" - ID: {ds.get('id')}, Name: {ds.get('name')}, Type: {ds.get('type')}, URL: {ds.get('url')}, isDefault: {ds.get('isDefault')}") +except Exception as e: + print("Error getting datasources:", e) + +try: + r = requests.get('https://grafana.snarfnet.net/api/search', auth=auth, verify=False, timeout=10) + print("Dashboards Status:", r.status_code) + if r.status_code == 200: + dashboards = r.json() + print(f"Total dashboards: {len(dashboards)}") + for d in dashboards[:15]: + print(f" - {d.get('title')} (uri: {d.get('uri')}, type: {d.get('type')})") +except Exception as e: + print("Error getting dashboards:", e) + diff --git a/scripts/check_grafana_dashboards_live.py b/scripts/check_grafana_dashboards_live.py new file mode 100644 index 0000000..2561a4c --- /dev/null +++ b/scripts/check_grafana_dashboards_live.py @@ -0,0 +1,15 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +auth = ("admin", "Katzir476!!!") +url = "https://grafana.snarfnet.net/api/search" + +resp = requests.get(url, auth=auth, verify=False, timeout=10) +print("Status:", resp.status_code) +dashboards = resp.json() +print(f"Total Dashboards Found: {len(dashboards)}") +for d in dashboards: + print(f" - [{d.get('type')}] Title: {d.get('title')} | UID: {d.get('uid')} | URL: {d.get('url')}") + diff --git a/scripts/check_grafana_diff.py b/scripts/check_grafana_diff.py new file mode 100644 index 0000000..58e43f7 --- /dev/null +++ b/scripts/check_grafana_diff.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl diff -f /tmp/grafana_full.yaml || true")) + +c.close() + diff --git a/scripts/check_grafana_info.py b/scripts/check_grafana_info.py new file mode 100644 index 0000000..00daaf8 --- /dev/null +++ b/scripts/check_grafana_info.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Namespaces on Aerodrome:") +print(run("kubectl get ns")) + +print("Grafana pod:") +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print(pod) +print("Grafana admin secret:") +print(run("kubectl get secret grafana -o jsonpath='{.data.admin-password}' | base64 -d")) + +c.close() + diff --git a/scripts/check_grafana_internal.py b/scripts/check_grafana_internal.py new file mode 100644 index 0000000..f0c9f77 --- /dev/null +++ b/scripts/check_grafana_internal.py @@ -0,0 +1,23 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print("Pod:", pod) +print("ConfigMap grafana:") +print(run("kubectl get cm grafana -o yaml")) + +print("Testing local curl inside pod to localhost:3000/api/health:") +print(run(f"kubectl exec {pod} -- wget -qO- http://localhost:3000/api/health")) + +print("Grafana env:") +print(run(f"kubectl exec {pod} -- env | grep -i grafana")) + +c.close() + diff --git a/scripts/check_grafana_load.py b/scripts/check_grafana_load.py new file mode 100644 index 0000000..34275cc --- /dev/null +++ b/scripts/check_grafana_load.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print("Grafana pod:", pod) +print("Grafana provisioning logs:") +print(run(f"kubectl logs {pod} | grep -i -E 'provision|datasource|dashboard' | tail -n 25")) + +c.close() + diff --git a/scripts/check_grafana_mounts.py b/scripts/check_grafana_mounts.py new file mode 100644 index 0000000..5159306 --- /dev/null +++ b/scripts/check_grafana_mounts.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl exec {pod} -- ls -la /etc/grafana/provisioning/datasources")) +print(run(f"kubectl exec {pod} -- cat /etc/grafana/provisioning/datasources/datasources.yaml")) +print(run(f"kubectl exec {pod} -- ls -la /etc/grafana/provisioning/dashboards")) +print(run(f"kubectl exec {pod} -- cat /etc/grafana/provisioning/dashboards/dashboards.yaml")) +print(run(f"kubectl exec {pod} -- ls -la /var/lib/grafana-dashboards")) + +c.close() + diff --git a/scripts/check_grafana_rollout.py b/scripts/check_grafana_rollout.py new file mode 100644 index 0000000..5691662 --- /dev/null +++ b/scripts/check_grafana_rollout.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl get pods -l app.kubernetes.io/name=grafana")) +c.close() + diff --git a/scripts/check_grafana_secret.py b/scripts/check_grafana_secret.py new file mode 100644 index 0000000..35d699f --- /dev/null +++ b/scripts/check_grafana_secret.py @@ -0,0 +1,15 @@ +import paramiko +import base64 +import json + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('kubectl get secret grafana -n default -o json') +data = json.loads(o.read().decode()).get('data', {}) +for k, v in data.items(): + print(k, ":", base64.b64decode(v).decode('utf-8', errors='ignore')) + +c.close() + diff --git a/scripts/check_grafana_sqlite.py b/scripts/check_grafana_sqlite.py new file mode 100644 index 0000000..c19a07d --- /dev/null +++ b/scripts/check_grafana_sqlite.py @@ -0,0 +1,30 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +py_script = """import sqlite3 +conn = sqlite3.connect('/tmp/grafana_real.db') +cur = conn.cursor() +tables = [t[0] for t in cur.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()] +for t in tables: + if 'source' in t or 'dash' in t or 'user' in t: + print('Matching table:', t) + +print('--- data_source content ---') +for row in cur.execute('SELECT * FROM data_source').fetchall(): + print(row) + +print('--- dashboard content ---') +for row in cur.execute('SELECT id, title, slug, uid FROM dashboard').fetchall(): + print(row) +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/inspect_grafana.py && python3 /tmp/inspect_grafana.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) + +c.close() diff --git a/scripts/check_grafana_success.py b/scripts/check_grafana_success.py new file mode 100644 index 0000000..63c25ee --- /dev/null +++ b/scripts/check_grafana_success.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print("Grafana pod:", pod) +print("Provisioning logs:") +print(run(f"kubectl logs {pod} | grep -i -E 'provision|datasource|dashboard'")) + +c.close() + diff --git a/scripts/check_ha_proxy_js.py b/scripts/check_ha_proxy_js.py new file mode 100644 index 0000000..0499797 --- /dev/null +++ b/scripts/check_ha_proxy_js.py @@ -0,0 +1,31 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +py_cmd = """ +node -e ' +const fs = require("fs"); +const content = fs.readFileSync("/app/.next/server/pages/api/services/proxy.js", "utf8"); +const idx = content.indexOf("states/"); +if (idx !== -1) { + console.log("Found states/ at", idx); + console.log(content.slice(Math.max(0, idx - 500), idx + 1000)); +} else { + const idx2 = content.indexOf("homeassistant"); + console.log("Found homeassistant at", idx2); + console.log(content.slice(Math.max(0, idx2 - 500), idx2 + 1000)); +} +' +""" +stdin, stdout, stderr = c.exec_command(f'kubectl exec -n infrastructure {pod} -- sh -c \'{py_cmd}\'') +print(stdout.read().decode()) +print(stderr.read().decode()) + +c.close() diff --git a/scripts/check_harvester_capacity.py b/scripts/check_harvester_capacity.py new file mode 100644 index 0000000..a9a3aa2 --- /dev/null +++ b/scripts/check_harvester_capacity.py @@ -0,0 +1,25 @@ +import paramiko, json + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +cmd = "echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; kubectl get nodes -o json'" +stdin, stdout, stderr = c.exec_command(cmd) +out = stdout.read().decode() +data = json.loads(out) + +total_cpu = 0 +total_mem_kb = 0 +for n in data['items']: + cpu = int(n['status']['capacity']['cpu']) + mem_str = n['status']['capacity']['memory'] + if mem_str.endswith('Ki'): + mem_kb = int(mem_str[:-2]) + total_cpu += cpu + total_mem_kb += mem_kb + +ram_gib = total_mem_kb / (1024 * 1024) +print(f"Spacedock Harvester: nodes = {len(data['items'])}, cpu = {total_cpu}, ram = {ram_gib:.1f} GiB") +c.close() + diff --git a/scripts/check_harvester_prom.py b/scripts/check_harvester_prom.py new file mode 100644 index 0000000..05f7070 --- /dev/null +++ b/scripts/check_harvester_prom.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; {cmd}'") + out = stdout.read().decode().strip() + return out + +print("=== Check all in cattle-monitoring-system on Harvester ===") +print(run("kubectl get all -n cattle-monitoring-system")) + +print("\n=== Check CRDs in monitoring ===") +print(run("kubectl get crd | grep -i monitoring")) + +print("\n=== Check Prometheus resources ===") +print(run("kubectl get prometheus -A")) + +c.close() diff --git a/scripts/check_harvester_storage.py b/scripts/check_harvester_storage.py new file mode 100644 index 0000000..c52cb17 --- /dev/null +++ b/scripts/check_harvester_storage.py @@ -0,0 +1,33 @@ +import paramiko, json + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + full_cmd = "echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; " + cmd + "'" + stdin, stdout, stderr = c.exec_command(full_cmd) + return stdout.read().decode().strip() + +print("=== Blockdevices on Harvester ===") +print(run("kubectl get blockdevices.harvesterhci.io -A -o wide")) + +print("\n=== Longhorn storage on Harvester nodes ===") +out = run("kubectl get nodes.longhorn.io -n longhorn-system -o json") +data = json.loads(out) +total_max = 0 +total_avail = 0 +num_disks = 0 +for n in data['items']: + disks = n.get('status', {}).get('diskStatus', {}) + for d_name, d_val in disks.items(): + num_disks += 1 + total_max += d_val.get('storageMaximum', 0) + total_avail += d_val.get('storageAvailable', 0) + +tib = total_max / (1024**4) +avail_tib = total_avail / (1024**4) +print(f"Harvester Disks: {num_disks}, Total Storage: {tib:.2f} TiB, Available: {avail_tib:.2f} TiB") + +c.close() + diff --git a/scripts/check_heartbeats.py b/scripts/check_heartbeats.py new file mode 100644 index 0000000..96bfcf4 --- /dev/null +++ b/scripts/check_heartbeats.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print(f"Pod: {pod}") +print("Recent heartbeats summary:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e 'USE kuma; SELECT status, count(*) FROM heartbeat GROUP BY status;'")) + +print("\nSample recent heartbeats:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e 'USE kuma; SELECT m.name, h.status, h.msg, h.ping FROM heartbeat h JOIN monitor m ON h.monitor_id = m.id ORDER BY h.time DESC LIMIT 15;'")) + +c.close() + diff --git a/scripts/check_heimdall_active.py b/scripts/check_heimdall_active.py new file mode 100644 index 0000000..bf92d95 --- /dev/null +++ b/scripts/check_heimdall_active.py @@ -0,0 +1,31 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("""python3 -c " +import sqlite3 +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +print('Active items (deleted_at IS NULL):', cur.execute('SELECT count(*) FROM items WHERE deleted_at IS NULL;').fetchone()[0]) +print('Deleted items (deleted_at IS NOT NULL):', cur.execute('SELECT count(*) FROM items WHERE deleted_at IS NOT NULL;').fetchone()[0]) +print('Active items duplicates:') +print(cur.execute('SELECT count(*), title FROM items WHERE deleted_at IS NULL GROUP BY title HAVING count(*) > 1;').fetchall()) +print('Active pinned items:') +for r in cur.execute('SELECT id, title, \"order\", pinned FROM items WHERE deleted_at IS NULL AND pinned = 1 ORDER BY \"order\";').fetchall(): + print(r) +" """) + +c.close() + diff --git a/scripts/check_heimdall_integrity.py b/scripts/check_heimdall_integrity.py new file mode 100644 index 0000000..e70d767 --- /dev/null +++ b/scripts/check_heimdall_integrity.py @@ -0,0 +1,22 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("sqlite3 /mnt/nfs_shares/heimdall/www/app.sqlite 'PRAGMA integrity_check;'") +run("sqlite3 /mnt/nfs_shares/heimdall/www/app.sqlite 'SELECT count(*), title FROM items GROUP BY title HAVING count(*) > 1;'") +run("sqlite3 /mnt/nfs_shares/heimdall/www/app.sqlite 'SELECT id, title, pinned, \"order\" FROM items ORDER BY \"order\", title LIMIT 30;'") + +c.close() + diff --git a/scripts/check_heimdall_pinned.py b/scripts/check_heimdall_pinned.py new file mode 100644 index 0000000..e1d05a3 --- /dev/null +++ b/scripts/check_heimdall_pinned.py @@ -0,0 +1,27 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("""python3 -c " +import sqlite3 +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +print('Active items breakdown:') +for r in cur.execute('SELECT id, user_id, title, url, pinned, \"order\", deleted_at FROM items WHERE deleted_at IS NULL LIMIT 20;').fetchall(): + print(r) +" """) + +c.close() + diff --git a/scripts/check_heimdall_python.py b/scripts/check_heimdall_python.py new file mode 100644 index 0000000..f9d0d8c --- /dev/null +++ b/scripts/check_heimdall_python.py @@ -0,0 +1,24 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +run("which sqlite3 || echo 'sqlite3 not installed on host'") +run("python3 -c \"import sqlite3; con=sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite'); cur=con.cursor(); print(cur.execute('PRAGMA integrity_check;').fetchall()); print('Total items:', cur.execute('SELECT count(*) FROM items;').fetchone()[0]); print('Duplicates:', cur.execute('SELECT count(*), title FROM items GROUP BY title HAVING count(*) > 1;').fetchall())\"") + +c.close() + diff --git a/scripts/check_homepage_api.py b/scripts/check_homepage_api.py new file mode 100644 index 0000000..d53f66b --- /dev/null +++ b/scripts/check_homepage_api.py @@ -0,0 +1,26 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +s = requests.Session() +r = s.get('https://homepage.snarfnet.net/api/services', verify=False) +print("Status /api/services:", r.status_code) +try: + data = r.json() + print("Services JSON keys/length:", len(data)) + for group in data: + for title, items in group.items(): + print(f"Group: {title}") + for item in items: + print(f" - {item.get('name')}: widget={item.get('widget')}") +except Exception as e: + print("Error:", e, r.text[:200]) + +r2 = s.get('https://homepage.snarfnet.net/api/widgets', verify=False) +print("Status /api/widgets:", r2.status_code) +try: + print("Widgets:", json.dumps(r2.json(), indent=2)) +except Exception as e: + print("Error widgets:", e, r2.text[:200]) + diff --git a/scripts/check_homepage_info.py b/scripts/check_homepage_info.py new file mode 100644 index 0000000..0a78f3a --- /dev/null +++ b/scripts/check_homepage_info.py @@ -0,0 +1,11 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) +_, o, _ = c.exec_command('kubectl get deployment homepage-2-1744068158 -n infrastructure -o jsonpath="{.spec.template.spec.containers[0].image}"') +print("Image:", o.read().decode()) +_, o, _ = c.exec_command('kubectl logs deployment/homepage-2-1744068158 -n infrastructure --tail=20') +print("Logs:\n", o.read().decode()) +c.close() + diff --git a/scripts/check_homepage_pod_logs.py b/scripts/check_homepage_pod_logs.py new file mode 100644 index 0000000..ee01dd8 --- /dev/null +++ b/scripts/check_homepage_pod_logs.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print("Logs from Homepage pod:") +print(run(f"kubectl logs -n infrastructure {pod} --tail=30")) + +c.close() + diff --git a/scripts/check_homepage_rbac.py b/scripts/check_homepage_rbac.py new file mode 100644 index 0000000..62001f2 --- /dev/null +++ b/scripts/check_homepage_rbac.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print("Pod:", pod) + +print("Check can-i list nodes:") +print(run(f"kubectl auth can-i list nodes --as=system:serviceaccount:infrastructure:default")) +print("Check can-i get nodes.metrics.k8s.io:") +print(run(f"kubectl auth can-i get nodes.metrics.k8s.io --as=system:serviceaccount:infrastructure:default")) + +c.close() + diff --git a/scripts/check_homepage_routes.py b/scripts/check_homepage_routes.py new file mode 100644 index 0000000..bdbaf4a --- /dev/null +++ b/scripts/check_homepage_routes.py @@ -0,0 +1,15 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +s = requests.Session() +r = s.get('https://homepage.snarfnet.net', verify=False) +print("Page length:", len(r.text)) +import re +apis = re.findall(r'/api/[a-zA-Z0-9_/]+', r.text) +print("Found API routes:", set(apis)) + +# Also test hitting the Home Assistant custom widget api if any +# In Homepage, the widget endpoint is /api/widgets/homeassistant or similar or /api/services/... +# Let's check pod files to see what routes exist + diff --git a/scripts/check_icon_resolver.py b/scripts/check_icon_resolver.py new file mode 100644 index 0000000..36907b4 --- /dev/null +++ b/scripts/check_icon_resolver.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +# Search for github raw or cdn in server.js or .next +print(run(f"kubectl exec -n infrastructure {pod} -- grep -rn 'cdn.jsdelivr.net' /app/.next/server/ | head -n 5")) +print(run(f"kubectl exec -n infrastructure {pod} -- grep -rn 'dashboard-icons' /app/src/")) + +c.close() + diff --git a/scripts/check_kuma_db_backups.py b/scripts/check_kuma_db_backups.py new file mode 100644 index 0000000..d52ab00 --- /dev/null +++ b/scripts/check_kuma_db_backups.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print("Pod:", pod) +print("Check for any .sql or .db files in /app/data:") +print(run(f"kubectl exec -n monitoring {pod} -- find /app/data -name '*.sql*' -o -name '*.db*' -o -name '*.bak*'")) + +print("\nCheck Notification in DB:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb -u root --socket=/app/data/run/mariadb.sock -e 'USE kuma; SELECT id, name, type, is_default FROM notification;'")) + +c.close() + diff --git a/scripts/check_kuma_details.py b/scripts/check_kuma_details.py new file mode 100644 index 0000000..670206a --- /dev/null +++ b/scripts/check_kuma_details.py @@ -0,0 +1,23 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +print("Monitors count:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT count(id) FROM monitor;'")) + +print("\nStatus page count:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT * FROM status_page;'")) + +print("\nGroup count:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT * FROM `group`;'")) + +c.close() + diff --git a/scripts/check_kuma_live_status.py b/scripts/check_kuma_live_status.py new file mode 100644 index 0000000..e635b47 --- /dev/null +++ b/scripts/check_kuma_live_status.py @@ -0,0 +1,27 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("=== Uptime Kuma Pods ===") +print(run("kubectl get pods -n monitoring -o wide")) + +print("\n=== Uptime Kuma Deployment & Volumes ===") +print(run("kubectl get deployment -n monitoring uptime-kuma-2-1756668961 -o yaml | grep -A 10 volumes")) + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma-2-1756668961 -o jsonpath='{.items[0].metadata.name}'") +print(f"\n=== Current Pod: {pod} ===") + +print("\n=== Query MariaDB monitors table ===") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb -u root --socket=/app/data/run/mariadb.sock -e 'USE kuma; SELECT count(*) FROM monitor; SELECT id, name, type, active FROM monitor;'")) + +print("\n=== Files in /app/data ===") +print(run(f"kubectl exec -n monitoring {pod} -- ls -la /app/data")) + +c.close() + diff --git a/scripts/check_kuma_live_status2.py b/scripts/check_kuma_live_status2.py new file mode 100644 index 0000000..185e529 --- /dev/null +++ b/scripts/check_kuma_live_status2.py @@ -0,0 +1,25 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +pod = "uptime-kuma-2-1756668961-7cbccffbbb-mbb64" +print(f"=== Querying Pod: {pod} ===") +print("Query MariaDB monitor count:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb -u root --socket=/app/data/run/mariadb.sock -e 'USE kuma; SELECT count(*) FROM monitor;'")) + +print("Query all monitors:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb -u root --socket=/app/data/run/mariadb.sock -e 'USE kuma; SELECT id, name, type, active FROM monitor;'")) + +print("\nFiles in /app/data:") +print(run(f"kubectl exec -n monitoring {pod} -- ls -la /app/data")) + +c.close() + diff --git a/scripts/check_kuma_logs.py b/scripts/check_kuma_logs.py new file mode 100644 index 0000000..fc5984c --- /dev/null +++ b/scripts/check_kuma_logs.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = "uptime-kuma-2-1756668961-7cbccffbbb-mbb64" +print("=== Error log from /app/data/error.log ===") +print(run(f"kubectl exec -n monitoring {pod} -- tail -n 50 /app/data/error.log")) + +print("\n=== Recent pod logs ===") +print(run(f"kubectl logs -n monitoring {pod} --tail=60")) + +c.close() + diff --git a/scripts/check_kuma_mariadb.py b/scripts/check_kuma_mariadb.py new file mode 100644 index 0000000..f34edd6 --- /dev/null +++ b/scripts/check_kuma_mariadb.py @@ -0,0 +1,17 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +cmd = """kubectl exec -n monitoring uptime-kuma-2-1756668961-6656d4d5c6-z5cz9 -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT count(*) AS monitor_count FROM monitor; SELECT id, name, type, active FROM monitor LIMIT 15; SELECT * FROM notification;" """ +_, stdout, stderr = c.exec_command(cmd) +print(stdout.read().decode()) +err = stderr.read().decode() +if err: + print("[stderr]", err) + +c.close() + diff --git a/scripts/check_kuma_notif.py b/scripts/check_kuma_notif.py new file mode 100644 index 0000000..bd7a38f --- /dev/null +++ b/scripts/check_kuma_notif.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb -u root --socket=/app/data/run/mariadb.sock -e 'USE kuma; SELECT * FROM notification;'")) + +c.close() + diff --git a/scripts/check_kuma_slugs.py b/scripts/check_kuma_slugs.py new file mode 100644 index 0000000..88ff619 --- /dev/null +++ b/scripts/check_kuma_slugs.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print("group:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'DESCRIBE `group`;'")) +print("\nmonitor_group:") +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'DESCRIBE monitor_group;'")) + +c.close() diff --git a/scripts/check_kuma_sp_schema.py b/scripts/check_kuma_sp_schema.py new file mode 100644 index 0000000..4aae54d --- /dev/null +++ b/scripts/check_kuma_sp_schema.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +print("--- STATUS PAGE SCHEMA ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; DESCRIBE status_page; DESCRIBE \`group\`; DESCRIBE monitor_group;" """)) + +print("\n--- CURRENT GROUPS ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT * FROM \`group\`;" """)) + +c.close() + diff --git a/scripts/check_live_cm.py b/scripts/check_live_cm.py new file mode 100644 index 0000000..2405f5b --- /dev/null +++ b/scripts/check_live_cm.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('kubectl get cm homepage-2-1744068158 -n infrastructure -o yaml') +cm_yaml = o.read().decode() +start = cm_yaml.find('settings.yaml:') +print(cm_yaml[start:start+400]) + +c.close() + diff --git a/scripts/check_longhorn_source.py b/scripts/check_longhorn_source.py new file mode 100644 index 0000000..d13312c --- /dev/null +++ b/scripts/check_longhorn_source.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod:', pod) +print('Search for longhorn in /app/src or /app:') +print(run(f'kubectl exec -n infrastructure {pod} -- grep -rn "Missing Longhorn URL" /app')) + +c.close() + diff --git a/scripts/check_longhorn_svc.py b/scripts/check_longhorn_svc.py new file mode 100644 index 0000000..5aecde9 --- /dev/null +++ b/scripts/check_longhorn_svc.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +print("Spaceport longhorn-system services:") +print(run("kubectl get svc -n longhorn-system")) + +print("\nSpaceport ingress:") +print(run("kubectl get ingress -n longhorn-system")) + +c.close() + diff --git a/scripts/check_mdi_icons.py b/scripts/check_mdi_icons.py new file mode 100644 index 0000000..5c5d38f --- /dev/null +++ b/scripts/check_mdi_icons.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +print("Checking mdi weather in @mdi/js:") +print(run(f"kubectl exec -n infrastructure {pod} -- node -e \"const mdi = require('@mdi/js'); console.log('mdiWeatherStation:', !!mdi.mdiWeatherStation); console.log('mdiWeatherPartlyCloudy:', !!mdi.mdiWeatherPartlyCloudy);\"")) + +c.close() + diff --git a/scripts/check_monitoring_ns.py b/scripts/check_monitoring_ns.py new file mode 100644 index 0000000..9064ee8 --- /dev/null +++ b/scripts/check_monitoring_ns.py @@ -0,0 +1,17 @@ +import paramiko + +def check_ns(ip, name): + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + print(f"=== {name} ({ip}) ===") + _, o, _ = c.exec_command("kubectl get all -n monitoring") + print(o.read().decode()) + if name == 'Aerodrome': + _, o, _ = c.exec_command("kubectl get all -n cattle-monitoring-system") + print("cattle-monitoring-system:\n", o.read().decode()) + c.close() + +check_ns('140.44.4.11', 'Aerodrome') +check_ns('140.44.4.41', 'Spaceport') + diff --git a/scripts/check_monitoring_spaceport.py b/scripts/check_monitoring_spaceport.py new file mode 100644 index 0000000..5e659c6 --- /dev/null +++ b/scripts/check_monitoring_spaceport.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl get all -n monitoring")) +c.close() + diff --git a/scripts/check_nas_backups.py b/scripts/check_nas_backups.py new file mode 100644 index 0000000..1b128d9 --- /dev/null +++ b/scripts/check_nas_backups.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Check /mnt/nfs_shares/backups:") +print(run("ls -la /mnt/nfs_shares/backups")) + +print("Create /mnt/nfs_shares/game-backups:") +print(run("mkdir -p /mnt/nfs_shares/game-backups && ls -la /mnt/nfs_shares/game-backups")) + +c.close() + diff --git a/scripts/check_nas_ports.py b/scripts/check_nas_ports.py new file mode 100644 index 0000000..cfb7747 --- /dev/null +++ b/scripts/check_nas_ports.py @@ -0,0 +1,12 @@ +import socket + +for ip in ['14.10.10.71', '14.10.10.72']: + print(f"\nChecking ports on {ip}:") + for port in [22, 80, 111, 161, 443, 445, 2049, 5000, 5001]: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1.0) + res = s.connect_ex((ip, port)) + if res == 0: + print(f" Port {port} OPEN") + s.close() + diff --git a/scripts/check_nvidia_host.py b/scripts/check_nvidia_host.py new file mode 100644 index 0000000..9f686b7 --- /dev/null +++ b/scripts/check_nvidia_host.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c '{cmd}'") + return stdout.read().decode().strip() + +print("Check nvidia-smi:") +print(run("which nvidia-smi || nvidia-smi")) +print("Check GPU devices:") +print(run("ls -l /dev/nvidia*")) + +c.close() + diff --git a/scripts/check_nvidia_output.py b/scripts/check_nvidia_output.py new file mode 100644 index 0000000..8b6f6fc --- /dev/null +++ b/scripts/check_nvidia_output.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c '{cmd}'") + return stdout.read().decode().strip() + +print("nvidia-smi output:") +print(run("/usr/local/bin/nvidia-smi")) + +c.close() + diff --git a/scripts/check_pkg_icons.py b/scripts/check_pkg_icons.py new file mode 100644 index 0000000..778d099 --- /dev/null +++ b/scripts/check_pkg_icons.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +print("Checking package.json dependencies:") +print(run(f"kubectl exec -n infrastructure {pod} -- grep -E 'mdi|icon|simple' /app/package.json")) + +c.close() + diff --git a/scripts/check_pod_logs.py b/scripts/check_pod_logs.py new file mode 100644 index 0000000..0de851c --- /dev/null +++ b/scripts/check_pod_logs.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod:', pod) +print('Recent pod logs:') +print(run(f'kubectl logs -n infrastructure {pod} --tail=50')) +c.close() + diff --git a/scripts/check_ports.py b/scripts/check_ports.py new file mode 100644 index 0000000..7ceaa21 --- /dev/null +++ b/scripts/check_ports.py @@ -0,0 +1,24 @@ +import socket + +hosts = [ + ('140.44.4.11', 9100, 'Aerodrome Master 01'), + ('140.44.4.41', 9100, 'Spaceport Master 01'), + ('140.44.4.71', 9100, 'Shipyard Swarm'), + ('140.44.4.81', 9100, 'Harvester Node 01'), + ('140.44.4.81', 9400, 'Harvester Node 01 DCGM'), + ('140.44.4.11', 10250, 'Aerodrome Kubelet'), + ('140.44.4.41', 10250, 'Spaceport Kubelet'), + ('140.44.4.60', 8888, 'Zabbix Web'), + ('140.44.4.64', 10051, 'Zabbix Server'), +] + +for ip, port, desc in hosts: + s = socket.socket() + s.settimeout(1.5) + try: + s.connect((ip, port)) + print(f"[OPEN] {ip}:{port} ({desc})") + s.close() + except Exception as e: + print(f"[CLOSED/ERR] {ip}:{port} ({desc}) - {e}") + diff --git a/scripts/check_prom_elsewhere.py b/scripts/check_prom_elsewhere.py new file mode 100644 index 0000000..16f8858 --- /dev/null +++ b/scripts/check_prom_elsewhere.py @@ -0,0 +1,14 @@ +import paramiko + +def check_host(ip, name, cmd): + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + print(f"=== {name} ({ip}) ===") + _, o, _ = c.exec_command(cmd) + print(o.read().decode()) + c.close() + +check_host('140.44.4.71', 'Swarm', 'docker service ls; docker ps | grep -i prom') +check_host('140.44.44.121', 'Spacedock', 'kubectl get pods,svc -A | grep -i prom') + diff --git a/scripts/check_prom_live_targets.py b/scripts/check_prom_live_targets.py new file mode 100644 index 0000000..00ec97e --- /dev/null +++ b/scripts/check_prom_live_targets.py @@ -0,0 +1,29 @@ +import paramiko +import json + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +out = run("kubectl exec deployment/prometheus -- wget -qO- http://localhost:9090/api/v1/targets") +data = json.loads(out) +print("=== ACTIVE TARGETS ===") +for t in data.get('data', {}).get('activeTargets', []): + print(f"[{t.get('health')}] pool: {t.get('scrapePool')} | job: {t.get('labels', {}).get('job')} | instance: {t.get('labels', {}).get('instance')} | url: {t.get('scrapeUrl')}") + if t.get('lastError'): + print(f" ERROR: {t.get('lastError')}") + +print("\n=== SAMPLE NODE EXPORTER QUERY ===") +out = run("kubectl exec deployment/prometheus -- wget -qO- 'http://localhost:9090/api/v1/query?query=count(node_cpu_seconds_total{mode=\"idle\"})_by_(instance)'") +print(out) + +print("\n=== SAMPLE CADVISOR QUERY ===") +out = run("kubectl exec deployment/prometheus -- wget -qO- 'http://localhost:9090/api/v1/query?query=count(container_cpu_usage_seconds_total)'") +print(out) + +c.close() + diff --git a/scripts/check_prom_metrics.py b/scripts/check_prom_metrics.py new file mode 100644 index 0000000..17eaca3 --- /dev/null +++ b/scripts/check_prom_metrics.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("--- PROMETHEUS TARGETS ---") +print(run("curl -s http://localhost:9090/api/v1/targets | jq -r '.data.activeTargets[] | \"\\(.labels.job) -> \\(.scrapeUrl) (\\(.health))\"' | head -n 30")) + +print("\n--- SAMPLE NODE METRICS ---") +print(run("curl -s 'http://localhost:9090/api/v1/query?query=node_cpu_seconds_total' | jq -r '.data.result | length'")) + +print("\n--- SAMPLE CONTAINER METRICS ---") +print(run("curl -s 'http://localhost:9090/api/v1/query?query=container_cpu_usage_seconds_total' | jq -r '.data.result | length'")) + +c.close() + diff --git a/scripts/check_prom_pods.py b/scripts/check_prom_pods.py new file mode 100644 index 0000000..4a540ab --- /dev/null +++ b/scripts/check_prom_pods.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl get pods -A | grep -E 'prom|grafana|node-exporter|cadvisor'")) +c.close() + diff --git a/scripts/check_prom_sa.py b/scripts/check_prom_sa.py new file mode 100644 index 0000000..d856365 --- /dev/null +++ b/scripts/check_prom_sa.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Prometheus Deployment / ServiceAccount:") +print(run("kubectl get deployment prometheus -o yaml | grep -E 'serviceAccount|image'")) + +print("\nClusterRoles / RoleBindings for prometheus:") +print(run("kubectl get clusterrolebindings | grep -i prom")) + +c.close() + diff --git a/scripts/check_prom_targets.py b/scripts/check_prom_targets.py new file mode 100644 index 0000000..7990c8f --- /dev/null +++ b/scripts/check_prom_targets.py @@ -0,0 +1,19 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Prometheus pod status:") +print(run("kubectl get pods -l app.kubernetes.io/name=prometheus")) + +print("\nPrometheus targets:") +print(run("kubectl exec deployment/prometheus -- wget -qO- http://localhost:9090/api/v1/targets")) + +c.close() + diff --git a/scripts/check_prom_targets2.py b/scripts/check_prom_targets2.py new file mode 100644 index 0000000..20907ce --- /dev/null +++ b/scripts/check_prom_targets2.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/prometheus -- wget -qO- http://localhost:9090/api/v1/targets")) +c.close() + diff --git a/scripts/check_prometheus.py b/scripts/check_prometheus.py new file mode 100644 index 0000000..fea5221 --- /dev/null +++ b/scripts/check_prometheus.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Aerodrome Prometheus pods & svc:") +print(run("kubectl get pods,svc -A | grep -i prometheus")) + +c.close() + diff --git a/scripts/check_prometheus_spaceport.py b/scripts/check_prometheus_spaceport.py new file mode 100644 index 0000000..582b1a6 --- /dev/null +++ b/scripts/check_prometheus_spaceport.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Spaceport namespaces:") +print(run("kubectl get ns")) +print("Spaceport Prometheus:") +print(run("kubectl get pods,svc -A | grep -i prometheus")) + +c.close() + diff --git a/scripts/check_real_gotify.py b/scripts/check_real_gotify.py new file mode 100644 index 0000000..aad2c33 --- /dev/null +++ b/scripts/check_real_gotify.py @@ -0,0 +1,24 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +py_script = """import sqlite3 +conn = sqlite3.connect('/mnt/swarm_shared/legacy_volumes/gotify/_data/gotify.db') +cur = conn.cursor() +print('=== REAL GOTIFY DB APPLICATIONS ===') +cols = [c[1] for c in cur.execute('PRAGMA table_info(applications)').fetchall()] +print('Cols:', cols) +for r in cur.execute('SELECT * FROM applications').fetchall(): + print(r) +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/check_real_gotify.py && python3 /tmp/check_real_gotify.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) + +c.close() + diff --git a/scripts/check_running_mounts.py b/scripts/check_running_mounts.py new file mode 100644 index 0000000..3df281e --- /dev/null +++ b/scripts/check_running_mounts.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl get pod {pod} -o jsonpath='{{.spec.containers[0].volumeMounts}}'")) + +c.close() + diff --git a/scripts/check_sc_aerodrome.py b/scripts/check_sc_aerodrome.py new file mode 100644 index 0000000..0629f8f --- /dev/null +++ b/scripts/check_sc_aerodrome.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Storage classes on Aerodrome:") +print(run("kubectl get sc")) + +c.close() + diff --git a/scripts/check_shepherd.py b/scripts/check_shepherd.py new file mode 100644 index 0000000..d4beabb --- /dev/null +++ b/scripts/check_shepherd.py @@ -0,0 +1,19 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, _ = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + +run("docker service ps shepherd_shepherd") +run("docker service logs --tail 30 shepherd_shepherd") +c.close() + diff --git a/scripts/check_spacedock_prom.py b/scripts/check_spacedock_prom.py new file mode 100644 index 0000000..23f9a08 --- /dev/null +++ b/scripts/check_spacedock_prom.py @@ -0,0 +1,24 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect("140.44.44.121", username="rancher", password="Katzir476!", timeout=10) +chan = c.invoke_shell() +time.sleep(2) +if chan.recv_ready(): + chan.recv(4096) + +def run(cmd): + chan.send(cmd + "\r\n") + time.sleep(3) + out = "" + while chan.recv_ready(): + out += chan.recv(8192).decode(errors='ignore') + return out + +print("Spacedock / Harvester pods with prom:") +print(run("sudo kubectl get pods,svc -A | grep -i prom")) + +c.close() + diff --git a/scripts/check_status_page.py b/scripts/check_status_page.py new file mode 100644 index 0000000..17f06f7 --- /dev/null +++ b/scripts/check_status_page.py @@ -0,0 +1,13 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +cmd = """kubectl exec -n monitoring uptime-kuma-2-1756668961-8c5dc549c-jfwhc -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, slug, title, published FROM status_page;" """ +_, stdout, _ = c.exec_command(cmd) +print(stdout.read().decode()) +c.close() + diff --git a/scripts/check_status_page_schema.py b/scripts/check_status_page_schema.py new file mode 100644 index 0000000..9d2f2f3 --- /dev/null +++ b/scripts/check_status_page_schema.py @@ -0,0 +1,13 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +cmd = """kubectl exec -n monitoring uptime-kuma-2-1756668961-8c5dc549c-jfwhc -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; DESCRIBE status_page; DESCRIBE status_page_cname;" """ +_, stdout, _ = c.exec_command(cmd) +print(stdout.read().decode()) +c.close() + diff --git a/scripts/check_storage_and_drives.py b/scripts/check_storage_and_drives.py new file mode 100644 index 0000000..f7d2cb8 --- /dev/null +++ b/scripts/check_storage_and_drives.py @@ -0,0 +1,58 @@ +import paramiko, json + +# 1. Check Spaceport & Aerodrome disks +for name, ip in [('Aerodrome', '140.44.4.11'), ('Spaceport', '140.44.4.41')]: + try: + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + _, o, _ = c.exec_command('kubectl get nodes.longhorn.io -n longhorn-system -o json') + data = json.loads(o.read().decode()) + total_max = 0 + total_avail = 0 + num_disks = 0 + for n in data['items']: + disks = n.get('status', {}).get('diskStatus', {}) + for d_name, d_val in disks.items(): + num_disks += 1 + total_max += d_val.get('storageMaximum', 0) + total_avail += d_val.get('storageAvailable', 0) + + tib = total_max / (1024**4) + gib = total_max / (1024**3) + avail_gib = total_avail / (1024**3) + print(f"{name} Longhorn -> Disks: {num_disks}, Total Storage: {tib:.2f} TiB ({gib:.0f} GiB), Available: {avail_gib:.0f} GiB") + c.close() + except Exception as e: + print(f"{name} -> error: {e}") + +# 2. Query Zabbix for NAS storage & drives +import urllib.request, ssl +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +ZABBIX_URL = "http://140.44.4.60:8888/api_jsonrpc.php" +def zbx(method, params, auth=None): + payload = {"jsonrpc": "2.0", "method": method, "params": params, "id": 1} + headers = {"Content-Type": "application/json-rpc"} + if auth: + headers["Authorization"] = f"Bearer {auth}" + req = urllib.request.Request(ZABBIX_URL, data=json.dumps(payload).encode('utf-8'), headers=headers, method="POST") + with urllib.request.urlopen(req, timeout=10, context=ctx) as r: + resp = json.loads(r.read().decode()) + return resp.get("result", {}) + +try: + token = zbx("user.login", {"username": "Admin", "password": "zabbix"}) + hosts = zbx("host.get", {"filter": {"name": ["SN-NAS (DS920+)", "SnarfNAS (DS1821+)", "SN-NAS", "SnarfNAS"]}}, token) + print("\nZabbix NAS Hosts:") + for h in hosts: + print(h["hostid"], h["host"], h["name"]) + # Get items for storage / disks + items = zbx("item.get", {"hostids": h["hostid"], "search": {"name": "space"}}, token) + for it in items[:5]: + print(" ", it["name"], it.get("lastvalue")) +except Exception as e: + print("Zabbix error:", e) + diff --git a/scripts/check_swarm_networks.py b/scripts/check_swarm_networks.py new file mode 100644 index 0000000..35ecf37 --- /dev/null +++ b/scripts/check_swarm_networks.py @@ -0,0 +1,21 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("docker network ls") +run("docker service inspect heimdall_heimdall --format '{{json .Spec.TaskTemplate.Networks}}'") + +c.close() + diff --git a/scripts/check_swarm_services_all.py b/scripts/check_swarm_services_all.py new file mode 100644 index 0000000..f8d0a49 --- /dev/null +++ b/scripts/check_swarm_services_all.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('docker ps --format "{{.Names}}\t{{.Image}}\t{{.Ports}}"') +print(o.read().decode()) + +_, o2, _ = c.exec_command('docker service ls') +print(o2.read().decode()) + +c.close() + diff --git a/scripts/check_tmp_file.py b/scripts/check_tmp_file.py new file mode 100644 index 0000000..e4ff796 --- /dev/null +++ b/scripts/check_tmp_file.py @@ -0,0 +1,11 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('grep -A 20 "widgets.yaml:" /tmp/homepage.yaml') +print(o.read().decode()) + +c.close() + diff --git a/scripts/check_unhealthy_pods.py b/scripts/check_unhealthy_pods.py new file mode 100644 index 0000000..14a16d6 --- /dev/null +++ b/scripts/check_unhealthy_pods.py @@ -0,0 +1,16 @@ +import paramiko + +def check(ip, name): + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + print(f"=== {name} ({ip}) Non-running Pods ===") + _, o, _ = c.exec_command("kubectl get pods -A --no-headers | grep -v -E 'Running|Completed'") + res = o.read().decode().strip() + print(res if res else "All pods are Running/Completed!") + c.close() + +check('140.44.4.11', 'Aerodrome') +print() +check('140.44.4.41', 'Spaceport') + diff --git a/scripts/check_unifi_client.py b/scripts/check_unifi_client.py new file mode 100644 index 0000000..bb4a796 --- /dev/null +++ b/scripts/check_unifi_client.py @@ -0,0 +1,40 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +s = requests.Session() +login_url = "https://140.44.44.1/api/auth/login" +login_payload = {"username": "Snarf", "password": "Katzir476!!!"} + +try: + r = s.post(login_url, json=login_payload, verify=False, timeout=5) + print("UniFi login:", r.status_code) + + # Query clients + r = s.get("https://140.44.44.1/proxy/network/api/s/default/stat/sta", verify=False, timeout=5) + if r.status_code == 200: + clients = r.json().get("data", []) + print(f"Total active clients: {len(clients)}") + target_mac = "bc:24:11:67:16:cd" + found = False + for c in clients: + if c.get("mac") == target_mac: + print("FOUND CLIENT:", json.dumps(c, indent=2)) + found = True + break + if not found: + print(f"Client {target_mac} not active. Checking configured/known clients...") + r2 = s.get("https://140.44.44.1/proxy/network/api/s/default/rest/user", verify=False, timeout=5) + if r2.status_code == 200: + known = r2.json().get("data", []) + for k in known: + if k.get("mac") == target_mac: + print("FOUND IN KNOWN USERS:", json.dumps(k, indent=2)) + found = True + break + if not found: + print(f"MAC {target_mac} not found in UniFi.") +except Exception as e: + print("UniFi error:", e) + diff --git a/scripts/check_zabbix_templates.py b/scripts/check_zabbix_templates.py new file mode 100644 index 0000000..16c71db --- /dev/null +++ b/scripts/check_zabbix_templates.py @@ -0,0 +1,41 @@ +import json +import ssl +import urllib.request + +ZABBIX_URL = "http://140.44.4.60:8888/api_jsonrpc.php" +ZABBIX_USER = "Admin" +ZABBIX_PASS = "zabbix" + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +def zbx_call(method, params, auth=None): + payload = {"jsonrpc": "2.0", "method": method, "params": params, "id": 1} + headers = {"Content-Type": "application/json-rpc"} + if auth: + headers["Authorization"] = f"Bearer {auth}" + req = urllib.request.Request(ZABBIX_URL, data=json.dumps(payload).encode("utf-8"), headers=headers, method="POST") + with urllib.request.urlopen(req, timeout=10, context=ctx) as r: + resp = json.loads(r.read().decode("utf-8")) + if "error" in resp: + raise RuntimeError(f"Zabbix error in {method}: {resp['error']}") + return resp["result"] + +auth_token = zbx_call("user.login", {"username": ZABBIX_USER, "password": ZABBIX_PASS}) + +# Get host groups +groups = zbx_call("hostgroup.get", {"output": ["groupid", "name"]}, auth_token) +print("=== Host Groups ===") +for g in groups: + print(f"ID: {g['groupid']}, Name: {g['name']}") + +# Get ICMP Ping template +templates = zbx_call("template.get", { + "output": ["templateid", "name"], + "filter": {"name": ["ICMP Ping", "Chassis by IPMI", "Dell iDRAC by SNMP", "Ubiquiti UniFi by SNMP"]} +}, auth_token) +print("\n=== Templates ===") +for t in templates: + print(f"ID: {t['templateid']}, Name: {t['name']}") + diff --git a/scripts/create_argo_token.py b/scripts/create_argo_token.py new file mode 100644 index 0000000..8c43c69 --- /dev/null +++ b/scripts/create_argo_token.py @@ -0,0 +1,13 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +url = "https://argo.snarfnet.net/api/v1/session" +r = requests.post(url, json={"username": "admin", "password": "BbfHh3B-j6aHg3A-"}, verify=False) +admin_tok = r.json().get('token') +headers = {"Authorization": f"Bearer {admin_tok}"} + +tok_url = "https://argo.snarfnet.net/api/v1/account/homepage/token" +r_tok = requests.post(tok_url, headers=headers, json={"expiresIn": 0}, verify=False) +print("ArgoCD Token:", r_tok.json().get('token')) diff --git a/scripts/deploy_heimdall_fixed.py b/scripts/deploy_heimdall_fixed.py new file mode 100644 index 0000000..b69dc71 --- /dev/null +++ b/scripts/deploy_heimdall_fixed.py @@ -0,0 +1,66 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +new_compose = '''version: "3.8" + +services: + heimdall: + image: lscr.io/linuxserver/heimdall:latest + ports: + - target: 80 + published: 85 + mode: ingress + - target: 443 + published: 403 + mode: ingress + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/New_York + volumes: + - type: bind + source: /var/lib/docker-data/heimdall/config + target: /config + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.hostname == snshpd4lnxswm01 + restart_policy: + condition: on-failure +''' + +sftp = c.open_sftp() +with sftp.file('/tmp/heimdall_compose.yml', 'w') as f: + f.write(new_compose) +sftp.close() + +# Also save into /var/lib/docker-data/heimdall/compose.yml for persistence +run("cp /tmp/heimdall_compose.yml /var/lib/docker-data/heimdall/compose.yml") + +# Redeploy +run("docker stack deploy -c /tmp/heimdall_compose.yml heimdall") +time.sleep(6) +run("docker stack ps heimdall") +run("curl -s -I http://127.0.0.1:85 | head -n 5") + +c.close() + diff --git a/scripts/deploy_node_exporter.py b/scripts/deploy_node_exporter.py new file mode 100644 index 0000000..652e1b4 --- /dev/null +++ b/scripts/deploy_node_exporter.py @@ -0,0 +1,72 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +test_script = """ +cat << 'EOF' | kubectl apply -f - +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: node-exporter + namespace: kube-system + labels: + app.kubernetes.io/name: node-exporter +spec: + selector: + matchLabels: + app.kubernetes.io/name: node-exporter + template: + metadata: + labels: + app.kubernetes.io/name: node-exporter + spec: + hostNetwork: true + hostPID: true + tolerations: + - operator: "Exists" + containers: + - name: node-exporter + image: prom/node-exporter:v1.8.2 + args: + - "--path.procfs=/host/proc" + - "--path.sysfs=/host/sys" + - "--path.rootfs=/host/root" + - "--web.listen-address=0.0.0.0:9100" + ports: + - name: metrics + containerPort: 9100 + hostPort: 9100 + volumeMounts: + - name: proc + mountPath: /host/proc + readOnly: true + - name: sys + mountPath: /host/sys + readOnly: true + - name: root + mountPath: /host/root + readOnly: true + volumes: + - name: proc + hostPath: + path: /proc + - name: sys + hostPath: + path: /sys + - name: root + hostPath: + path: / +EOF + +kubectl rollout status daemonset/node-exporter -n kube-system --timeout=60s +""" + +print(run(test_script)) +c.close() + diff --git a/scripts/deploy_node_exporter_spaceport.py b/scripts/deploy_node_exporter_spaceport.py new file mode 100644 index 0000000..6b7012c --- /dev/null +++ b/scripts/deploy_node_exporter_spaceport.py @@ -0,0 +1,72 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +test_script = """ +cat << 'EOF' | kubectl apply -f - +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: node-exporter + namespace: kube-system + labels: + app.kubernetes.io/name: node-exporter +spec: + selector: + matchLabels: + app.kubernetes.io/name: node-exporter + template: + metadata: + labels: + app.kubernetes.io/name: node-exporter + spec: + hostNetwork: true + hostPID: true + tolerations: + - operator: "Exists" + containers: + - name: node-exporter + image: prom/node-exporter:v1.8.2 + args: + - "--path.procfs=/host/proc" + - "--path.sysfs=/host/sys" + - "--path.rootfs=/host/root" + - "--web.listen-address=0.0.0.0:9100" + ports: + - name: metrics + containerPort: 9100 + hostPort: 9100 + volumeMounts: + - name: proc + mountPath: /host/proc + readOnly: true + - name: sys + mountPath: /host/sys + readOnly: true + - name: root + mountPath: /host/root + readOnly: true + volumes: + - name: proc + hostPath: + path: /proc + - name: sys + hostPath: + path: /sys + - name: root + hostPath: + path: / +EOF + +kubectl rollout status daemonset/node-exporter -n kube-system --timeout=60s +""" + +print(run(test_script)) +c.close() + diff --git a/scripts/deploy_shepherd.py b/scripts/deploy_shepherd.py new file mode 100644 index 0000000..61a2ef0 --- /dev/null +++ b/scripts/deploy_shepherd.py @@ -0,0 +1,63 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +print("=== 1. Removing Old Failing Watchtower Stack ===") +run("docker stack rm watchtower") +time.sleep(5) + +shepherd_compose = '''version: "3.8" + +services: + shepherd: + image: containrrr/shepherd:latest + environment: + - SLEEP_TIME=24h + - BLACKLIST_SERVICES=nginx-proxy-manager_app nginx-proxy-manager_backup + - UPDATE_OPTIONS=--with-registry-auth + - ROLLBACK_FAILURE=true + - TZ=America/New_York + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.role == manager + restart_policy: + condition: on-failure +''' + +sftp = c.open_sftp() +with sftp.file('/tmp/shepherd_compose.yml', 'w') as f: + f.write(shepherd_compose) +sftp.close() + +print("\n=== 2. Deploying Swarm-Native Shepherd Stack ===") +run("docker stack deploy -c /tmp/shepherd_compose.yml shepherd") +time.sleep(6) + +run("docker stack ls") +run("docker stack ps shepherd") +run("docker service logs --tail 20 $(docker service ls -q -f name=shepherd) 2>/dev/null || true") + +c.close() +print("\n=== Shepherd Deployment Complete ===") + diff --git a/scripts/find_all_prom.py b/scripts/find_all_prom.py new file mode 100644 index 0000000..94577b9 --- /dev/null +++ b/scripts/find_all_prom.py @@ -0,0 +1,14 @@ +import paramiko + +def find_prom(ip, name): + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + print(f"=== {name} ({ip}) ===") + _, o, _ = c.exec_command("kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}/status: {.metadata.name}{ \"\\t\" }{.spec.containers[*].image}{\"\\n\"}{end}' | grep -i prom") + print(o.read().decode()) + c.close() + +find_prom('140.44.4.11', 'Aerodrome') +find_prom('140.44.4.41', 'Spaceport') + diff --git a/scripts/find_all_weather_entities.py b/scripts/find_all_weather_entities.py new file mode 100644 index 0000000..70a1d3b --- /dev/null +++ b/scripts/find_all_weather_entities.py @@ -0,0 +1,26 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +ha_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4" + +cmd = f"""curl -s -H "Authorization: Bearer {ha_token}" -H "Content-Type: application/json" http://14.4.4.20:8123/api/states""" +_, stdout, stderr = c.exec_command(cmd) +raw = stdout.read().decode() + +try: + states = json.loads(raw) + weather_station_entities = [s for s in states if any(k in s['entity_id'].lower() for k in ['back_yard', 'weather_station', 'tempest', 'rain', 'wind', 'humidity'])] + print(f"\nFound {len(weather_station_entities)} matching entities:") + for s in weather_station_entities: + print(f" - {s['entity_id']} = {s['state']} (unit: {s.get('attributes', {}).get('unit_of_measurement')}, name: {s.get('attributes', {}).get('friendly_name')})") +except Exception as e: + print("Error:", e) + +c.close() + diff --git a/scripts/find_ha_api.py b/scripts/find_ha_api.py new file mode 100644 index 0000000..e76d49b --- /dev/null +++ b/scripts/find_ha_api.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app/src/pages/api -name "*homeassistant*"')) +print('\nAlso search in /app/src/widgets or /app/src/utils:') +print(run(f'kubectl exec -n infrastructure {pod} -- grep -rn "homeassistant" /app/src/pages/api/ /app/src/widgets/')) + +c.close() diff --git a/scripts/find_ha_api2.py b/scripts/find_ha_api2.py new file mode 100644 index 0000000..701fd9b --- /dev/null +++ b/scripts/find_ha_api2.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Find in /app/src/pages/api:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -la /app/src/pages/api')) +print('Find in /app/src/widgets/homeassistant:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -la /app/src/widgets/homeassistant')) +print('Find widget.js or service.js:') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app/src -name "widget.js*" -o -name "service.js*"')) + +c.close() diff --git a/scripts/find_ha_entities.py b/scripts/find_ha_entities.py new file mode 100644 index 0000000..09a12c4 --- /dev/null +++ b/scripts/find_ha_entities.py @@ -0,0 +1,28 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +ha_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4" + +cmd = f"""curl -s -H "Authorization: Bearer {ha_token}" -H "Content-Type: application/json" http://14.4.4.20:8123/api/states""" +_, stdout, stderr = c.exec_command(cmd) +raw = stdout.read().decode() + +try: + states = json.loads(raw) + print(f"Total HA entities: {len(states)}") + weatherflow_entities = [s for s in states if any(k in s['entity_id'].lower() for k in ['tempest', 'weatherflow', 'weather'])] + print(f"\nFound {len(weatherflow_entities)} Tempest / Weather entities:") + for s in weatherflow_entities: + print(f" - {s['entity_id']} = {s['state']} (name: {s.get('attributes', {}).get('friendly_name')})") +except Exception as e: + print("Error parsing HA response:", e) + print("Raw output preview:", raw[:500]) + +c.close() + diff --git a/scripts/find_homepage_icons.py b/scripts/find_homepage_icons.py new file mode 100644 index 0000000..eed7266 --- /dev/null +++ b/scripts/find_homepage_icons.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +print("Find icons matching argo:") +print(run(f"kubectl exec -n infrastructure {pod} -- find /app -iname '*argo*'")) + +print("\nFind icons matching weather or tempest:") +print(run(f"kubectl exec -n infrastructure {pod} -- find /app -iname '*weather*' -o -iname '*tempest*'")) + +c.close() + diff --git a/scripts/find_longhorn_config.py b/scripts/find_longhorn_config.py new file mode 100644 index 0000000..51ece3b --- /dev/null +++ b/scripts/find_longhorn_config.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod:', pod) +print('Files in /app/config:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -la /app/config')) +print('Grep longhorn in /app/config:') +print(run(f'kubectl exec -n infrastructure {pod} -- grep -rn "longhorn" /app/config/')) + +c.close() + diff --git a/scripts/find_nvml.py b/scripts/find_nvml.py new file mode 100644 index 0000000..796f5cf --- /dev/null +++ b/scripts/find_nvml.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c '{cmd}'") + return stdout.read().decode().strip() + +print("Search for libnvidia-ml.so on host:") +print(run("find / -name 'libnvidia-ml.so*' 2>/dev/null")) + +c.close() + diff --git a/scripts/find_peanut_code.py b/scripts/find_peanut_code.py new file mode 100644 index 0000000..a51053b --- /dev/null +++ b/scripts/find_peanut_code.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app -name \"*peanut*\"")) +c.close() + diff --git a/scripts/find_proxy.py b/scripts/find_proxy.py new file mode 100644 index 0000000..7d219bb --- /dev/null +++ b/scripts/find_proxy.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Find proxy in /app/src:') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app/src -name "*proxy*"')) + +c.close() diff --git a/scripts/find_proxy_files.py b/scripts/find_proxy_files.py new file mode 100644 index 0000000..fffd2ff --- /dev/null +++ b/scripts/find_proxy_files.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app/src -name \"*use-widget*\" -o -name \"*proxy*\"")) +c.close() + diff --git a/scripts/find_settings.py b/scripts/find_settings.py new file mode 100644 index 0000000..9a09535 --- /dev/null +++ b/scripts/find_settings.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print(run(f"kubectl exec -n infrastructure {pod} -- find /app -name '*setting*'")) + +c.close() + diff --git a/scripts/find_uptimekuma_files.py b/scripts/find_uptimekuma_files.py new file mode 100644 index 0000000..9f5bdd2 --- /dev/null +++ b/scripts/find_uptimekuma_files.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app -name \"*uptimekuma*\"")) +c.close() + diff --git a/scripts/find_utils.py b/scripts/find_utils.py new file mode 100644 index 0000000..02e703d --- /dev/null +++ b/scripts/find_utils.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app/src/utils -type f")) +c.close() + diff --git a/scripts/fix_gotify_sort_key.py b/scripts/fix_gotify_sort_key.py new file mode 100644 index 0000000..596bdb0 --- /dev/null +++ b/scripts/fix_gotify_sort_key.py @@ -0,0 +1,35 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +py_script = """import sqlite3 +import shutil + +# 1. Backup +shutil.copyfile('/mnt/swarm_shared/legacy_volumes/gotify/_data/gotify.db', '/mnt/swarm_shared/legacy_volumes/gotify/_data/gotify.db.bak') + +# 2. Fix NULL sort_key in _data +conn = sqlite3.connect('/mnt/swarm_shared/legacy_volumes/gotify/_data/gotify.db') +cur = conn.cursor() +cur.execute("UPDATE applications SET sort_key = 'a5' WHERE id = 6;") +conn.commit() +conn.close() + +# 3. Copy to parent directory where volume is bound +shutil.copyfile('/mnt/swarm_shared/legacy_volumes/gotify/_data/gotify.db', '/mnt/swarm_shared/legacy_volumes/gotify/gotify.db') +print("Successfully updated sort_key and synced database!") +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/fix_gotify.py && python3 /tmp/fix_gotify.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) + +# Restart gotify service +print(c.exec_command("docker service update --force gotify_gotify")[1].read().decode()) + +c.close() + diff --git a/scripts/fix_homepage_icons.py b/scripts/fix_homepage_icons.py new file mode 100644 index 0000000..2751cfe --- /dev/null +++ b/scripts/fix_homepage_icons.py @@ -0,0 +1,42 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) +cm = docs[2] + +services = yaml.safe_load(cm['data']['services.yaml']) + +for group in services: + # 1. Fix ArgoCD icon in GitOps & Automation + if 'GitOps & Automation' in group: + for item in group['GitOps & Automation']: + if 'ArgoCD' in item: + print("Updating ArgoCD icon from:", item['ArgoCD'].get('icon')) + item['ArgoCD']['icon'] = 'argo-cd.png' + print("To:", item['ArgoCD']['icon']) + + # 2. Fix Tempest Weather Station icon in Environment & Weather + if 'Environment & Weather' in group: + for item in group['Environment & Weather']: + if 'Tempest Weather Station' in item: + print("Updating Tempest icon from:", item['Tempest Weather Station'].get('icon')) + item['Tempest Weather Station']['icon'] = 'mdi-weather-partly-cloudy' + print("To:", item['Tempest Weather Station']['icon']) + +cm['data']['services.yaml'] = yaml.dump(services, sort_keys=False, default_flow_style=False, allow_unicode=True) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("\nSuccessfully updated homepage.yaml with corrected icons!") + diff --git a/scripts/fix_homepage_manifest.py b/scripts/fix_homepage_manifest.py new file mode 100644 index 0000000..764e268 --- /dev/null +++ b/scripts/fix_homepage_manifest.py @@ -0,0 +1,156 @@ +import os + +new_configmap_data = """apiVersion: v1 +data: + bookmarks.yaml: | + - Developer: + - Github: + - abbr: GH + href: https://github.com/ + docker.yaml: '' + kubernetes.yaml: | + mode: disable + services.yaml: | + - Critical Services: + - Authentik: + icon: authentik.png + href: https://authentik.snarfnet.net + description: SSO & Identity Management + - PeaNUT UPS: + icon: peanut.png + href: https://portal.snarfnet.net + description: UPS Power & Battery Monitor + - Unifi Controller: + icon: unifi.png + href: https://unifi.ui.com + widget: + type: unifi + url: https://140.44.44.1 + username: Snarf + password: Katzir476!!! + + - GitOps & Automation: + - Gitea: + icon: gitea.png + href: https://git.snarfnet.net + description: Git Repositories + - ArgoCD: + icon: argocd.png + href: https://argo.snarfnet.net + description: Declarative GitOps Reconciler + - AWX Automation: + icon: awx.png + href: https://awx.snarfnet.net + description: Ansible Automation Controller + - Semaphore: + icon: semaphore.png + href: https://semaphore.snarfnet.net + description: Playbook Execution Engine + + - Storage & Clusters: + - Longhorn Aerodrome: + icon: longhorn.png + href: https://longhorn.aerodrome.snarfnet.net + description: Aerodrome Distributed Flash Storage + - Longhorn Spaceport: + icon: longhorn.png + href: https://longhorn.spaceport.snarfnet.net + description: Spaceport Distributed Block Storage + - Rancher (Aerodrome): + icon: rancher.png + href: https://aerodrome.snarfnet.net + description: Kubernetes Management Console + - Harvester HCI (Spacedock): + icon: harvester.png + href: https://harvester.spacedock.snarfnet.net + description: HCI Virtualization Hypervisors + - Portainer Swarm: + icon: portainer.png + href: https://shipyard.snarfnet.net + description: Docker Swarm Container Fleet + + - Infrastructure & Observability: + - NGINX Proxy Manager: + icon: nginx-proxy-manager + href: https://nginx.snarfnet.net + description: Reverse Proxy & SSL Certificates + - Uptime Kuma: + icon: uptime-kuma + href: https://uptime.snarfnet.net + description: Multi-Endpoint Availability Probes + - Zabbix: + icon: zabbix.png + href: https://zabbix.snarfnet.net + description: Infrastructure Metrics & Alarms + - Grafana: + icon: grafana.png + href: https://grafana.snarfnet.net + description: Real-Time Metrics & AI Dashboards + - Core Node Glances: + icon: glances.png + href: http://140.44.4.11:61208 + description: Host Resource Monitor + + - Environment & Weather: + - Tempest Weather Station: + icon: weather.png + href: https://snarfhome.snarfnet.net + description: Backyard Weather Telemetry + widget: + type: homeassistant + url: http://14.4.4.20:8123 + key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4 + custom: + - state: sensor.st_00158555_temperature + label: Outdoor Temp + - state: sensor.st_00158555_feels_like + label: Feels Like + - state: sensor.st_00158555_humidity + label: Humidity + - state: sensor.st_00158555_wind_speed + label: Wind Speed + + settings.yaml: | + title: SnarfNet Operations & Telemetry + headerStyle: boxedWidgets + color: green + theme: dark + layout: + Critical Services: + GitOps & Automation: + Storage & Clusters: + Infrastructure & Observability: + Environment & Weather: + showStats: true + + widgets.yaml: | + - resources: + backend: resources + cpu: true + expanded: true + memory: true + - search: + provider: duckduckgo + target: _blank +""" + +filepath = r"homelab-gitops-repo\manifests\spaceport\homepage\homepage.yaml" +with open(filepath, "r", encoding="utf-8") as f: + text = f.read() + +parts = text.split("---\n") +if len(parts) == 1: + parts = text.split("---\r\n") + +cm_part = parts[2] +cm_kind_idx = cm_part.index("kind: ConfigMap") +cm_suffix = cm_part[cm_kind_idx:] + +new_cm_part = new_configmap_data + cm_suffix +parts[2] = new_cm_part + +new_full = "---\n".join(parts) +with open(filepath, "w", encoding="utf-8", newline="\r\n") as f: + f.write(new_full) +print("Updated homepage.yaml cleanly!") + diff --git a/scripts/generate_ai_dashboard.py b/scripts/generate_ai_dashboard.py new file mode 100644 index 0000000..a99da9b --- /dev/null +++ b/scripts/generate_ai_dashboard.py @@ -0,0 +1,279 @@ +import json + +dashboard = { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": True, + "hide": True, + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": True, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": None, + "links": [], + "liveNow": False, + "panels": [ + { + "collapsed": False, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "id": 100, + "title": "⚔ AI Stack Executive Overview & Cloud Cost Offsets", + "type": "row" + }, + { + "id": 1, + "title": "Prompt Tokens Processed (In)", + "type": "stat", + "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "sum(vllm:prompt_tokens_total)", "legendFormat": "Prompt Tokens", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "blue", "value": None }] }, + "unit": "locale" + } + }, + "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "center" } + }, + { + "id": 2, + "title": "Generation Tokens Synthesized (Out)", + "type": "stat", + "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "sum(vllm:generation_tokens_total)", "legendFormat": "Gen Tokens", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": None }] }, + "unit": "locale" + } + }, + "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "center" } + }, + { + "id": 3, + "title": "Homelab Cloud API Savings ($USD)", + "type": "stat", + "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "(sum(vllm:prompt_tokens_total) * 0.00000025) + (sum(vllm:generation_tokens_total) * 0.00000100)", "legendFormat": "Net Savings", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": None }] }, + "unit": "currencyUSD" + } + }, + "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center" } + }, + { + "id": 4, + "title": "Active GPU Cluster Health", + "type": "stat", + "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "count(DCGM_FI_DEV_GPU_TEMP)", "legendFormat": "Tesla T4s Active", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "color": { "mode": "thresholds" }, + "thresholds": { "mode": "absolute", "steps": [{ "color": "purple", "value": None }] }, + "unit": "short" + } + }, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center" } + }, + { + "collapsed": False, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, + "id": 200, + "title": "šŸŽ® Tesla T4 GPU Cluster Telemetry (Harvester HCI Spacedock)", + "type": "row" + }, + { + "id": 5, + "title": "GPU Core Utilization (%)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "DCGM_FI_DEV_GPU_UTIL", "legendFormat": "{{Hostname}} ({{modelName}})", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 20 }, + "unit": "percent", + "min": 0, + "max": 100 + } + } + }, + { + "id": 6, + "title": "VRAM Memory Allocated & Used", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "DCGM_FI_DEV_FB_USED * 1024 * 1024", "legendFormat": "{{Hostname}} VRAM Used", "refId": "A" }, + { "expr": "(DCGM_FI_DEV_FB_USED + DCGM_FI_DEV_FB_FREE) * 1024 * 1024", "legendFormat": "{{Hostname}} VRAM Total", "refId": "B" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 15 }, + "unit": "bytes" + } + } + }, + { + "id": 7, + "title": "GPU Thermal Profile (°C)", + "type": "timeseries", + "gridPos": { "h": 7, "w": 12, "x": 0, "y": 14 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "DCGM_FI_DEV_GPU_TEMP", "legendFormat": "{{Hostname}} (°C)", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 10 }, + "unit": "celsius", + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": None }, + { "color": "yellow", "value": 65 }, + { "color": "red", "value": 80 } + ] + } + } + } + }, + { + "id": 8, + "title": "GPU Power Draw (Watts)", + "type": "timeseries", + "gridPos": { "h": 7, "w": 12, "x": 12, "y": 14 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "DCGM_FI_DEV_POWER_USAGE", "legendFormat": "{{Hostname}} (Watts)", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 15 }, + "unit": "watt" + } + } + }, + { + "collapsed": False, + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 21 }, + "id": 300, + "title": "🧠 vLLM Real-Time Inference Dynamics & Token Velocity", + "type": "row" + }, + { + "id": 9, + "title": "Token Generation Velocity (Tokens / Sec)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 22 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "sum(rate(vllm:generation_tokens_total[2m])) by (model_name)", "legendFormat": "{{model_name}} (Out)", "refId": "A" }, + { "expr": "sum(rate(vllm:prompt_tokens_total[2m])) by (model_name)", "legendFormat": "{{model_name}} (In)", "refId": "B" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 25 }, + "unit": "cps" + } + } + }, + { + "id": 10, + "title": "Inference Concurrency & Request Backlog", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 22 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "vllm:num_requests_running", "legendFormat": "{{model_name}} Running", "refId": "A" }, + { "expr": "vllm:num_requests_waiting", "legendFormat": "{{model_name}} Queued", "refId": "B" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "stepAfter", "fillOpacity": 15 }, + "unit": "short" + } + } + }, + { + "id": 11, + "title": "GPU KV Cache Memory Saturation", + "type": "timeseries", + "gridPos": { "h": 7, "w": 12, "x": 0, "y": 30 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "vllm:gpu_cache_usage_factor * 100", "legendFormat": "{{model_name}} Cache Usage", "refId": "A" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth", "fillOpacity": 30 }, + "unit": "percent", + "min": 0, + "max": 100 + } + } + }, + { + "id": 12, + "title": "NVIDIA Triton & Qdrant Operations", + "type": "timeseries", + "gridPos": { "h": 7, "w": 12, "x": 12, "y": 30 }, + "datasource": "Prometheus", + "targets": [ + { "expr": "rate(nv_inference_request_success[2m])", "legendFormat": "Triton Success/s", "refId": "A" }, + { "expr": "cpu_cores_used", "legendFormat": "Qdrant CPU Cores", "refId": "B" } + ], + "fieldConfig": { + "defaults": { + "custom": { "drawStyle": "line", "lineInterpolation": "smooth" }, + "unit": "short" + } + } + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": ["ai", "vllm", "dcgm", "gpu", "snarfnet"], + "templating": { "list": [] }, + "time": { "from": "now-6h", "to": "now" }, + "timepicker": { + "refresh_intervals": ["5s", "10s", "30s", "1m", "5m"] + }, + "timezone": "browser", + "title": "SnarfNet AI Stack & Inference Intelligence", + "uid": "snarfnet-ai-stack", + "version": 1 +} + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/ai-stack-dashboard.json", "w") as f: + json.dump(dashboard, f, indent=2) + +print("Created ai-stack-dashboard.json successfully!") + diff --git a/scripts/generate_systems_container_dashboards.py b/scripts/generate_systems_container_dashboards.py new file mode 100644 index 0000000..27b9527 --- /dev/null +++ b/scripts/generate_systems_container_dashboards.py @@ -0,0 +1,246 @@ +import json + +def make_panel_stat(id_val, title, expr, grid_pos, unit="none", color="green"): + return { + "id": id_val, + "title": title, + "type": "stat", + "gridPos": grid_pos, + "datasource": "Prometheus", + "targets": [{"expr": expr, "legendFormat": "{{instance}}", "refId": "A"}], + "fieldConfig": { + "defaults": { + "color": {"mode": "thresholds"}, + "thresholds": {"mode": "absolute", "steps": [{"color": color, "value": None}]}, + "unit": unit + } + }, + "options": {"colorMode": "value", "graphMode": "area", "justifyMode": "center"} + } + +def make_panel_timeseries(id_val, title, targets, grid_pos, unit="none"): + return { + "id": id_val, + "title": title, + "type": "timeseries", + "gridPos": grid_pos, + "datasource": "Prometheus", + "targets": targets, + "fieldConfig": { + "defaults": { + "custom": { + "drawStyle": "line", + "lineInterpolation": "smooth", + "lineWidth": 2, + "fillOpacity": 15 + }, + "unit": unit + } + }, + "options": {"tooltip": {"mode": "multi", "sort": "desc"}} + } + +def make_panel_bargauge(id_val, title, expr, grid_pos, unit="percent"): + return { + "id": id_val, + "title": title, + "type": "bargauge", + "gridPos": grid_pos, + "datasource": "Prometheus", + "targets": [{"expr": expr, "legendFormat": "{{instance}}", "refId": "A"}], + "fieldConfig": { + "defaults": { + "color": {"mode": "palette-classic"}, + "thresholds": { + "mode": "absolute", + "steps": [ + {"color": "green", "value": None}, + {"color": "yellow", "value": 75}, + {"color": "red", "value": 90} + ] + }, + "unit": unit, + "min": 0, + "max": 100 + } + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "showUnfilled": True + } + } + +# ==================== 1. SYSTEMS DASHBOARD ==================== +systems_dashboard = { + "annotations": {"list": []}, + "editable": True, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": None, + "links": [], + "liveNow": False, + "panels": [ + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 0}, + "id": 100, + "title": "šŸ–„ļø Systems Fleet Overview & Capacity", + "type": "row" + }, + make_panel_stat(1, "Online Node Exporters", "count(node_load1)", {"h": 4, "w": 6, "x": 0, "y": 1}, "none", "green"), + make_panel_stat(2, "Avg Cluster CPU Load (1m)", "avg(node_load1)", {"h": 4, "w": 6, "x": 6, "y": 1}, "none", "blue"), + make_panel_stat(3, "Total Monitored RAM", "sum(node_memory_MemTotal_bytes)", {"h": 4, "w": 6, "x": 12, "y": 1}, "bytes", "purple"), + make_panel_stat(4, "Fleet RAM In-Use %", "(1 - (sum(node_memory_MemAvailable_bytes) / sum(node_memory_MemTotal_bytes))) * 100", {"h": 4, "w": 6, "x": 18, "y": 1}, "percent", "orange"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 5}, + "id": 200, + "title": "⚔ CPU Load & Core Utilization", + "type": "row" + }, + make_panel_timeseries(5, "CPU Utilization by Host (%)", [ + {"expr": "100 - (avg by (instance, cluster) (rate(node_cpu_seconds_total{mode='idle'}[2m])) * 100)", "legendFormat": "{{cluster}} - {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 0, "y": 6}, "percent"), + make_panel_timeseries(6, "1-Minute Load Average by Host", [ + {"expr": "node_load1", "legendFormat": "{{cluster}} - {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 12, "y": 6}, "none"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 14}, + "id": 300, + "title": "🧠 Memory Consumption & Free Capacity", + "type": "row" + }, + make_panel_timeseries(7, "Memory Used % by Host", [ + {"expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", "legendFormat": "{{cluster}} - {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 0, "y": 15}, "percent"), + make_panel_timeseries(8, "Available RAM by Host (GiB)", [ + {"expr": "node_memory_MemAvailable_bytes", "legendFormat": "{{cluster}} - {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 12, "y": 15}, "bytes"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 23}, + "id": 400, + "title": "šŸ’¾ Filesystem & Disk I/O Performance", + "type": "row" + }, + make_panel_bargauge(9, "Root (/) Filesystem Usage %", "(1 - (node_filesystem_avail_bytes{mountpoint='/'} / node_filesystem_size_bytes{mountpoint='/'})) * 100", {"h": 8, "w": 8, "x": 0, "y": 24}, "percent"), + make_panel_timeseries(10, "Disk Read Throughput (Bytes/sec)", [ + {"expr": "sum by (instance) (rate(node_disk_read_bytes_total[2m]))", "legendFormat": "Read {{instance}}", "refId": "A"} + ], {"h": 8, "w": 8, "x": 8, "y": 24}, "Bps"), + make_panel_timeseries(11, "Disk Write Throughput (Bytes/sec)", [ + {"expr": "sum by (instance) (rate(node_disk_written_bytes_total[2m]))", "legendFormat": "Write {{instance}}", "refId": "A"} + ], {"h": 8, "w": 8, "x": 16, "y": 24}, "Bps"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 32}, + "id": 500, + "title": "🌐 Network Throughput (RX / TX)", + "type": "row" + }, + make_panel_timeseries(12, "Host Network Receive (RX)", [ + {"expr": "sum by (instance) (rate(node_network_receive_bytes_total{device!~'lo|veth.*|flannel.*|cali.*'}[2m]))", "legendFormat": "RX {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 0, "y": 33}, "Bps"), + make_panel_timeseries(13, "Host Network Transmit (TX)", [ + {"expr": "sum by (instance) (rate(node_network_transmit_bytes_total{device!~'lo|veth.*|flannel.*|cali.*'}[2m]))", "legendFormat": "TX {{instance}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 12, "y": 33}, "Bps") + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": ["infrastructure", "systems", "snarfnet", "node-exporter"], + "templating": {"list": []}, + "time": {"from": "now-1h", "to": "now"}, + "timepicker": {}, + "timezone": "browser", + "title": "šŸ–„ļø Systems & Cluster Host Performance", + "uid": "snarfnet-systems" +} + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/systems-dashboard.json", "w", encoding="utf-8") as f: + json.dump(systems_dashboard, f, indent=2) + +print("Created systems-dashboard.json successfully!") + +# ==================== 2. CONTAINER METRICS DASHBOARD ==================== +container_dashboard = { + "annotations": {"list": []}, + "editable": True, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": None, + "links": [], + "liveNow": False, + "panels": [ + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 0}, + "id": 100, + "title": "šŸ“¦ Container Fleet & Pod Metrics", + "type": "row" + }, + make_panel_stat(1, "Monitored Containers", "count(container_last_seen{container!=''})", {"h": 4, "w": 6, "x": 0, "y": 1}, "none", "green"), + make_panel_stat(2, "Active Kubernetes Pods", "count(count by (pod, namespace) (container_last_seen{container!=''}))", {"h": 4, "w": 6, "x": 6, "y": 1}, "none", "blue"), + make_panel_stat(3, "Total Container CPU Load", "sum(rate(container_cpu_usage_seconds_total{container!=''}[2m]))", {"h": 4, "w": 6, "x": 12, "y": 1}, "none", "purple"), + make_panel_stat(4, "Total Container RAM", "sum(container_memory_working_set_bytes{container!=''})", {"h": 4, "w": 6, "x": 18, "y": 1}, "bytes", "orange"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 5}, + "id": 200, + "title": "⚔ Top Container CPU Utilization", + "type": "row" + }, + make_panel_timeseries(5, "Top 10 CPU Consuming Pods (Cores)", [ + {"expr": "topk(10, sum by (pod, namespace) (rate(container_cpu_usage_seconds_total{container!=''}[2m])))", "legendFormat": "{{namespace}} / {{pod}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 0, "y": 6}, "none"), + make_panel_timeseries(6, "CPU Throttling by Namespace", [ + {"expr": "sum by (namespace) (rate(container_cpu_cfs_throttled_periods_total[2m]))", "legendFormat": "{{namespace}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 12, "y": 6}, "none"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 14}, + "id": 300, + "title": "🧠 Container Memory Working Set", + "type": "row" + }, + make_panel_timeseries(7, "Top 10 Memory Consuming Pods", [ + {"expr": "topk(10, sum by (pod, namespace) (container_memory_working_set_bytes{container!=''}))", "legendFormat": "{{namespace}} / {{pod}}", "refId": "A"} + ], {"h": 8, "w": 14, "x": 0, "y": 15}, "bytes"), + make_panel_bargauge(8, "Memory by Namespace", "sum by (namespace) (container_memory_working_set_bytes{container!=''})", {"h": 8, "w": 10, "x": 14, "y": 15}, "bytes"), + + { + "collapsed": False, + "gridPos": {"h": 1, "w": 24, "x": 0, "y": 23}, + "id": 400, + "title": "🌐 Container Network Traffic", + "type": "row" + }, + make_panel_timeseries(9, "Top Pod Network RX (Receive)", [ + {"expr": "topk(10, sum by (pod, namespace) (rate(container_network_receive_bytes_total[2m])))", "legendFormat": "RX {{namespace}}/{{pod}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 0, "y": 24}, "Bps"), + make_panel_timeseries(10, "Top Pod Network TX (Transmit)", [ + {"expr": "topk(10, sum by (pod, namespace) (rate(container_network_transmit_bytes_total[2m])))", "legendFormat": "TX {{namespace}}/{{pod}}", "refId": "A"} + ], {"h": 8, "w": 12, "x": 12, "y": 24}, "Bps") + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": ["kubernetes", "containers", "cadvisor", "snarfnet", "workloads"], + "templating": {"list": []}, + "time": {"from": "now-1h", "to": "now"}, + "timepicker": {}, + "timezone": "browser", + "title": "šŸ“¦ Kubernetes Containers & Workloads", + "uid": "snarfnet-containers" +} + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/container-metrics-dashboard.json", "w", encoding="utf-8") as f: + json.dump(container_dashboard, f, indent=2) + +print("Created container-metrics-dashboard.json successfully!") + diff --git a/scripts/get_argo_token.py b/scripts/get_argo_token.py new file mode 100644 index 0000000..bee5df3 --- /dev/null +++ b/scripts/get_argo_token.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=argocd-server -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl exec -n infrastructure {pod} -- argocd account generate-token --account admin")) + +c.close() + diff --git a/scripts/get_gitea_token.py b/scripts/get_gitea_token.py new file mode 100644 index 0000000..2496bf0 --- /dev/null +++ b/scripts/get_gitea_token.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=gitea -o jsonpath='{.items[0].metadata.name}'") +print("Gitea pod:", pod) + +token = run(f"kubectl exec -n infrastructure {pod} -c gitea -- gitea admin user generate-access-token -u Snarf -t homepage-token --scopes all") +print("Generated token:", token) + +c.close() + diff --git a/scripts/get_zabbix_metadata.py b/scripts/get_zabbix_metadata.py new file mode 100644 index 0000000..75b49d1 --- /dev/null +++ b/scripts/get_zabbix_metadata.py @@ -0,0 +1,36 @@ +import json +import ssl +import urllib.request + +ZABBIX_URL = "http://140.44.4.60:8888/api_jsonrpc.php" +ZABBIX_USER = "Admin" +ZABBIX_PASS = "zabbix" + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +def zbx_call(method, params, auth=None): + payload = {"jsonrpc": "2.0", "method": method, "params": params, "id": 1} + headers = {"Content-Type": "application/json-rpc"} + if auth: + headers["Authorization"] = f"Bearer {auth}" + req = urllib.request.Request(ZABBIX_URL, data=json.dumps(payload).encode("utf-8"), headers=headers, method="POST") + with urllib.request.urlopen(req, timeout=10, context=ctx) as r: + resp = json.loads(r.read().decode("utf-8")) + if "error" in resp: + raise RuntimeError(f"Zabbix error in {method}: {resp['error']}") + return resp["result"] + +auth = zbx_call("user.login", {"username": ZABBIX_USER, "password": ZABBIX_PASS}) + +groups = zbx_call("hostgroup.get", {"output": ["groupid", "name"]}, auth) +print("=== Host Groups ===") +for g in groups: + print(f" {g['groupid']}: {g['name']}") + +templates = zbx_call("template.get", {"output": ["templateid", "name"], "search": {"name": "Ping"}}, auth) +print("\n=== Ping Templates ===") +for t in templates: + print(f" {t['templateid']}: {t['name']}") + diff --git a/scripts/grep_icon_source.py b/scripts/grep_icon_source.py new file mode 100644 index 0000000..d8d632b --- /dev/null +++ b/scripts/grep_icon_source.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +print(run(f"kubectl exec -n infrastructure {pod} -- grep -rn 'dashboard-icons' /app/.next/server/ | head -n 5")) +print(run(f"kubectl exec -n infrastructure {pod} -- grep -rn 'walkxcode' /app/.next/server/ | head -n 5")) + +c.close() + diff --git a/scripts/inspect_85776.py b/scripts/inspect_85776.py new file mode 100644 index 0000000..f351179 --- /dev/null +++ b/scripts/inspect_85776.py @@ -0,0 +1,26 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('azuredevops'); +console.log(content.substring(idx, idx + 1200)); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/check_85776_3.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/check_85776_3.js")) + +c.close() diff --git a/scripts/inspect_api_pages.py b/scripts/inspect_api_pages.py new file mode 100644 index 0000000..a755ffd --- /dev/null +++ b/scripts/inspect_api_pages.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app/src/pages/api -type f")) +c.close() + diff --git a/scripts/inspect_app_tree.py b/scripts/inspect_app_tree.py new file mode 100644 index 0000000..64fc677 --- /dev/null +++ b/scripts/inspect_app_tree.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app -maxdepth 3 -not -path \"*/node_modules*\" -not -path \"*/.next*\"")) +c.close() + diff --git a/scripts/inspect_customapi.py b/scripts/inspect_customapi.py new file mode 100644 index 0000000..ae13511 --- /dev/null +++ b/scripts/inspect_customapi.py @@ -0,0 +1,36 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== /app/src/widgets/customapi/component.jsx ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/customapi/component.jsx")) + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('customapiProxyHandler'); +if (idx !== -1) { + console.log(content.substring(Math.max(0, idx - 100), Math.min(content.length, idx + 1000))); +} else { + const idx2 = content.indexOf('customapi'); + console.log('customapi at', idx2); + console.log(content.substring(Math.max(0, idx2 - 100), Math.min(content.length, idx2 + 1000))); +} +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/customapi_code.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/customapi_code.js")) + +c.close() + diff --git a/scripts/inspect_glances_proxy.py b/scripts/inspect_glances_proxy.py new file mode 100644 index 0000000..aebe230 --- /dev/null +++ b/scripts/inspect_glances_proxy.py @@ -0,0 +1,26 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('14631:'); +console.log(content.substring(idx, Math.min(content.length, idx + 1000))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/glances_mod.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/glances_mod.js")) + +c.close() diff --git a/scripts/inspect_gotify_db.py b/scripts/inspect_gotify_db.py index 7bbdda8..188c42a 100644 --- a/scripts/inspect_gotify_db.py +++ b/scripts/inspect_gotify_db.py @@ -1,23 +1,23 @@ import paramiko -ssh = paramiko.SSHClient() -ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) -ssh.connect('140.44.4.71', username='snarf', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) -py_script = """sudo python3 -c ' -import sqlite3 -conn = sqlite3.connect("/mnt/swarm_shared/legacy_volumes/gotify/gotify.db") +py_script = """import sqlite3 +conn = sqlite3.connect('/mnt/swarm_shared/legacy_volumes/gotify/gotify.db') cur = conn.cursor() -print("Applications:", cur.execute("SELECT id, name, description FROM applications").fetchall()) -print("Clients:", cur.execute("SELECT id, name FROM clients").fetchall()) -print("Messages count:", cur.execute("SELECT count(*) FROM messages").fetchone()[0]) -print("Recent messages:", cur.execute("SELECT id, title, message, date FROM messages ORDER BY id DESC LIMIT 5").fetchall()) -print("Users:", cur.execute("SELECT id, name, admin FROM users").fetchall()) -'""" +print('=== APPLICATIONS ===') +cols = [c[1] for c in cur.execute('PRAGMA table_info(applications)').fetchall()] +print('Cols:', cols) +for r in cur.execute('SELECT * FROM applications').fetchall(): + print(r) +""" -_, out, err = ssh.exec_command(py_script) -print(out.read().decode()) -print("ERR:", err.read().decode()) - -ssh.close() +stdin, stdout, stderr = c.exec_command("cat > /tmp/inspect_gotify.py && python3 /tmp/inspect_gotify.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) +c.close() diff --git a/scripts/inspect_grafana_proxy.py b/scripts/inspect_grafana_proxy.py new file mode 100644 index 0000000..677c21b --- /dev/null +++ b/scripts/inspect_grafana_proxy.py @@ -0,0 +1,27 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('81390:'); +console.log(content.substring(idx, Math.min(content.length, idx + 800))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/check_81390.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/check_81390.js")) + +c.close() + diff --git a/scripts/inspect_grafana_widget_component.py b/scripts/inspect_grafana_widget_component.py new file mode 100644 index 0000000..d6c6ae2 --- /dev/null +++ b/scripts/inspect_grafana_widget_component.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def cat(path): + _, o, _ = c.exec_command(f'kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- cat {path}') + return o.read().decode().strip() + +print(cat("/app/src/widgets/grafana/component.jsx")) +c.close() + diff --git a/scripts/inspect_ha_widget_code.py b/scripts/inspect_ha_widget_code.py new file mode 100644 index 0000000..1ff37e4 --- /dev/null +++ b/scripts/inspect_ha_widget_code.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod:', pod) + +print('=== Searching for homeassistant widget file ===') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app -name "*homeassistant*"')) + +c.close() diff --git a/scripts/inspect_ha_widget_files.py b/scripts/inspect_ha_widget_files.py new file mode 100644 index 0000000..cfd85a8 --- /dev/null +++ b/scripts/inspect_ha_widget_files.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Files in /app/src/widgets/homeassistant:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -la /app/src/widgets/homeassistant')) + +print('\nContent of component or widget:') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app/src/widgets/homeassistant -type f -exec head -n 100 {{}} +')) + +c.close() diff --git a/scripts/inspect_heimdall_db.py b/scripts/inspect_heimdall_db.py new file mode 100644 index 0000000..f7f72b3 --- /dev/null +++ b/scripts/inspect_heimdall_db.py @@ -0,0 +1,22 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("df -h | grep -E 'nfs|docker'") +run("ls -la /mnt/nfs_shares/ 2>/dev/null || true") +run("ls -la /mnt/nfs_shares/heimdall/ 2>/dev/null || true") +run("ls -la /mnt/nfs_shares/heimdall/www/ 2>/dev/null || true") +c.close() + diff --git a/scripts/inspect_heimdall_schema.py b/scripts/inspect_heimdall_schema.py new file mode 100644 index 0000000..12ffdfb --- /dev/null +++ b/scripts/inspect_heimdall_schema.py @@ -0,0 +1,28 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("""python3 -c " +import sqlite3 +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +cols = [d[1] for d in cur.execute('PRAGMA table_info(items);').fetchall()] +print('Items columns:', cols) +for r in cur.execute('SELECT * FROM items LIMIT 2;').fetchall(): + print(dict(zip(cols, r))) +" """) + +c.close() + diff --git a/scripts/inspect_heimdall_users.py b/scripts/inspect_heimdall_users.py new file mode 100644 index 0000000..faaeaab --- /dev/null +++ b/scripts/inspect_heimdall_users.py @@ -0,0 +1,28 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +run("""python3 -c " +import sqlite3 +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +print('Users:', cur.execute('SELECT id, username, email FROM users;').fetchall()) +print('Items sample:') +for r in cur.execute('SELECT id, user_id, title, url, \"order\", pinned FROM items ORDER BY title, id LIMIT 10;').fetchall(): + print(r) +" """) + +c.close() + diff --git a/scripts/inspect_heimdall_watchtower.py b/scripts/inspect_heimdall_watchtower.py new file mode 100644 index 0000000..e343e93 --- /dev/null +++ b/scripts/inspect_heimdall_watchtower.py @@ -0,0 +1,26 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +run("docker stack ps heimdall") +run("docker stack ps watchtower") +run("docker service inspect heimdall_heimdall --format '{{json .Spec.TaskTemplate.ContainerSpec.Mounts}}'") +run("docker service inspect watchtower_watchtower --format '{{json .Spec.TaskTemplate.ContainerSpec}}'") +c.close() + diff --git a/scripts/inspect_homepage_backend.py b/scripts/inspect_homepage_backend.py new file mode 100644 index 0000000..2b53b9e --- /dev/null +++ b/scripts/inspect_homepage_backend.py @@ -0,0 +1,25 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +console.log(content.substring(69600, 71500)); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/print_ha.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/print_ha.js")) + +c.close() diff --git a/scripts/inspect_homepage_fs.py b/scripts/inspect_homepage_fs.py new file mode 100644 index 0000000..b023956 --- /dev/null +++ b/scripts/inspect_homepage_fs.py @@ -0,0 +1,32 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +pod = o.read().decode().strip() + +_, o, e = c.exec_command(f'kubectl exec -n infrastructure {pod} -- ls -la /app/public') +print("ls -la /app/public:\n", o.read().decode().strip()) + +# Test copying a file directly into the pod using cat +_, o, _ = c.exec_command(f'kubectl exec -i -n infrastructure {pod} -- sh -c "cat > /app/public/test.txt"') +# Wait, let's test if cat > /app/public/ works +stdin, stdout, stderr = c.exec_command(f'kubectl exec -i -n infrastructure {pod} -- sh -c "cat > /app/public/topology.html"') +with open('docs/snarfnet_homelab_topology.html', 'r', encoding='utf-8') as f: + stdin.write(f.read()) +stdin.close() +stdout.read() + +stdin, stdout, stderr = c.exec_command(f'kubectl exec -i -n infrastructure {pod} -- sh -c "cat > /app/public/topology.png"') +with open('docs/snarfnet_homelab_topology.png', 'rb') as f: + stdin.write(f.read()) +stdin.close() +stdout.read() + +_, o, e = c.exec_command(f'kubectl exec -n infrastructure {pod} -- ls -lh /app/public/topology*') +print("After streaming directly:\n", o.read().decode().strip()) +print("Stderr:\n", e.read().decode().strip()) + +c.close() diff --git a/scripts/inspect_homepage_info_widgets.py b/scripts/inspect_homepage_info_widgets.py new file mode 100644 index 0000000..01485a2 --- /dev/null +++ b/scripts/inspect_homepage_info_widgets.py @@ -0,0 +1,29 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== /app/src/skeleton/widgets.yaml ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/skeleton/widgets.yaml")) + +print("\n=== /app/src/skeleton/kubernetes.yaml ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/skeleton/kubernetes.yaml")) + +print("\n=== /app/src/components/widgets/longhorn ===") +print(run(f"kubectl exec -n infrastructure {pod} -- ls -la /app/src/components/widgets/longhorn")) +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/components/widgets/longhorn/longhorn.jsx 2>/dev/null || cat /app/src/components/widgets/longhorn/*")) + +print("\n=== /app/src/components/widgets/kubernetes ===") +print(run(f"kubectl exec -n infrastructure {pod} -- ls -la /app/src/components/widgets/kubernetes")) +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/components/widgets/kubernetes/kubernetes.jsx")) + +c.close() + diff --git a/scripts/inspect_homepage_k8s.py b/scripts/inspect_homepage_k8s.py index 3719b51..61cf052 100644 --- a/scripts/inspect_homepage_k8s.py +++ b/scripts/inspect_homepage_k8s.py @@ -1,11 +1,19 @@ import paramiko -ssh = paramiko.SSHClient() -ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) -ssh.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) -_, out, _ = ssh.exec_command('kubectl get all,ing,cm,pvc -n infrastructure | grep -i homepage') -print(out.read().decode()) +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out -ssh.close() +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print("Find in src/widgets or components:") +print(run(f"kubectl exec -n infrastructure {pod} -- find /app/src -maxdepth 3")) +print("\nKubernetes in /app:") +print(run(f"kubectl exec -n infrastructure {pod} -- find /app -name '*kubernetes*'")) + +c.close() diff --git a/scripts/inspect_homepage_k8s_code.py b/scripts/inspect_homepage_k8s_code.py new file mode 100644 index 0000000..cf12063 --- /dev/null +++ b/scripts/inspect_homepage_k8s_code.py @@ -0,0 +1,27 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/widgets/kubernetes.js', 'utf8'); +const idx = content.indexOf('getNodeMetrics'); +console.log(content.substring(Math.max(0, idx - 800), Math.min(content.length, idx + 800))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/k8s_code.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/k8s_code.js")) + +c.close() + diff --git a/scripts/inspect_homepage_k8s_conf.py b/scripts/inspect_homepage_k8s_conf.py new file mode 100644 index 0000000..ad1881c --- /dev/null +++ b/scripts/inspect_homepage_k8s_conf.py @@ -0,0 +1,30 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/widgets/kubernetes.js', 'utf8'); +const idx = content.indexOf('kubernetes.yaml'); +console.log('Index of kubernetes.yaml:', idx); +if (idx !== -1) { + console.log(content.substring(Math.max(0, idx - 400), Math.min(content.length, idx + 400))); +} +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/k8s_conf.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/k8s_conf.js")) + +c.close() + diff --git a/scripts/inspect_homepage_k8s_longhorn.py b/scripts/inspect_homepage_k8s_longhorn.py new file mode 100644 index 0000000..bf7081b --- /dev/null +++ b/scripts/inspect_homepage_k8s_longhorn.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== cat /app/.next/server/pages/api/widgets/longhorn.js ===") +print(run(f"kubectl exec -n infrastructure {pod} -- head -n 40 /app/.next/server/pages/api/widgets/longhorn.js")) + +print("\n=== cat /app/.next/server/pages/api/widgets/kubernetes.js ===") +print(run(f"kubectl exec -n infrastructure {pod} -- head -n 40 /app/.next/server/pages/api/widgets/kubernetes.js")) + +c.close() diff --git a/scripts/inspect_homepage_logs.py b/scripts/inspect_homepage_logs.py new file mode 100644 index 0000000..4b87ef4 --- /dev/null +++ b/scripts/inspect_homepage_logs.py @@ -0,0 +1,26 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") +if pod: + print(f"Homepage Pod: {pod}") + run(f"kubectl logs -n infrastructure {pod} --tail 60") + +c.close() + diff --git a/scripts/inspect_homepage_pod.py b/scripts/inspect_homepage_pod.py new file mode 100644 index 0000000..7fc9b8a --- /dev/null +++ b/scripts/inspect_homepage_pod.py @@ -0,0 +1,30 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + return res + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod name:', pod) + +print('=== services.yaml ===') +print(run(f'kubectl exec -n infrastructure {pod} -- cat /app/config/services.yaml')) + +print('=== widgets.yaml ===') +print(run(f'kubectl exec -n infrastructure {pod} -- cat /app/config/widgets.yaml')) + +print('=== settings.yaml ===') +print(run(f'kubectl exec -n infrastructure {pod} -- cat /app/config/settings.yaml')) + +print('=== Recent logs ===') +print(run(f'kubectl logs -n infrastructure {pod} --tail=30')) + +c.close() + diff --git a/scripts/inspect_icon_component.py b/scripts/inspect_icon_component.py new file mode 100644 index 0000000..3372789 --- /dev/null +++ b/scripts/inspect_icon_component.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") + +print("Files matching icon:") +print(run(f"kubectl exec -n infrastructure {pod} -- find /app/src -iname '*icon*'")) + +c.close() + diff --git a/scripts/inspect_k8s_multi.py b/scripts/inspect_k8s_multi.py new file mode 100644 index 0000000..2fd4d74 --- /dev/null +++ b/scripts/inspect_k8s_multi.py @@ -0,0 +1,27 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/widgets/kubernetes.js', 'utf8'); +const idx = content.indexOf('loadFromDefault'); +console.log(content.substring(Math.max(0, idx - 400), Math.min(content.length, idx + 400))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/check_k8s_multi.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/check_k8s_multi.js")) + +c.close() + diff --git a/scripts/inspect_kuma_details.py b/scripts/inspect_kuma_details.py new file mode 100644 index 0000000..0ccf467 --- /dev/null +++ b/scripts/inspect_kuma_details.py @@ -0,0 +1,29 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +print("--- TABLES ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SHOW TABLES;" """)) + +print("\n--- TAG TABLE SCHEMA ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; DESCRIBE tag; DESCRIBE monitor_tag;" """)) + +print("\n--- EXISTING TAGS ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT * FROM tag;" """)) + +print("\n--- ALL MONITORS ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, name, type, url, hostname, port, active FROM monitor ORDER BY id;" """)) + +print("\n--- EXISTING STATUS PAGES ---") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, slug, title, description, published FROM status_page;" """)) + +c.close() + diff --git a/scripts/inspect_kuma_node.py b/scripts/inspect_kuma_node.py new file mode 100644 index 0000000..761848a --- /dev/null +++ b/scripts/inspect_kuma_node.py @@ -0,0 +1,28 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +run(f"kubectl exec -n monitoring {pod} -- ls -la /app/data/") +run(f"""kubectl exec -n monitoring {pod} -- node -e ' +const Database = require("/app/node_modules/better-sqlite3"); +const db = new Database("/app/data/kuma.db"); +console.log("Monitors count:", db.prepare("SELECT count(*) as c FROM monitor").get().c); +console.log("Monitors:", db.prepare("SELECT id, name, type, url FROM monitor LIMIT 15").all()); +console.log("Notifications:", db.prepare("SELECT * FROM notification").all()); +' 2>/dev/null || true""") + +c.close() + diff --git a/scripts/inspect_kuma_proxy.py b/scripts/inspect_kuma_proxy.py new file mode 100644 index 0000000..d5e1da0 --- /dev/null +++ b/scripts/inspect_kuma_proxy.py @@ -0,0 +1,26 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('98938:'); +console.log(content.substring(idx, Math.min(content.length, idx + 800))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/check_98938.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/check_98938.js")) + +c.close() diff --git a/scripts/inspect_kuma_schema.py b/scripts/inspect_kuma_schema.py new file mode 100644 index 0000000..c13dffb --- /dev/null +++ b/scripts/inspect_kuma_schema.py @@ -0,0 +1,25 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run_query(query): + cmd = f"""kubectl exec -n monitoring uptime-kuma-2-1756668961-6656d4d5c6-z5cz9 -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; {query}" """ + _, stdout, stderr = c.exec_command(cmd) + res = stdout.read().decode().strip() + if res: + print(res) + return res + +print("=== Monitor Table Schema ===") +run_query("DESCRIBE monitor;") +print("\n=== Monitor Notification Table Schema ===") +run_query("DESCRIBE monitor_notification;") +print("\n=== Notification Table Schema ===") +run_query("DESCRIBE notification;") + +c.close() + diff --git a/scripts/inspect_lh_conf.py b/scripts/inspect_lh_conf.py new file mode 100644 index 0000000..a9a79f7 --- /dev/null +++ b/scripts/inspect_lh_conf.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if err: + print("ERR:", err) + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print("cat /app/config/settings.yaml:") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/config/settings.yaml")) + +c.close() diff --git a/scripts/inspect_longhorn_data.py b/scripts/inspect_longhorn_data.py new file mode 100644 index 0000000..5c5e8bc --- /dev/null +++ b/scripts/inspect_longhorn_data.py @@ -0,0 +1,27 @@ +import json +import requests + +r = requests.get('http://140.44.4.11:31000/v1/nodes') +data = r.json() +print("Number of nodes:", len(data.get('data', []))) + +total_avail = 0 +total_max = 0 +total_sched = 0 + +for n in data.get('data', []): + name = n.get('name') + disks = n.get('disks', {}) + for d_name, d_info in disks.items(): + avail = d_info.get('storageAvailable', 0) + max_s = d_info.get('storageMaximum', 0) + sched = d_info.get('storageScheduled', 0) + total_avail += avail + total_max += max_s + total_sched += sched + +print(f"Total Max: {total_max / (1024**3):.2f} GiB ({total_max / (1024**4):.2f} TiB)") +print(f"Total Avail: {total_avail / (1024**3):.2f} GiB ({total_avail / (1024**4):.2f} TiB)") +used = total_max - total_avail +print(f"Total Used: {used / (1024**3):.2f} GiB ({used / (1024**4):.2f} TiB) ({used/total_max*100:.1f}%)") + diff --git a/scripts/inspect_npm_adv.py b/scripts/inspect_npm_adv.py new file mode 100644 index 0000000..57cc71c --- /dev/null +++ b/scripts/inspect_npm_adv.py @@ -0,0 +1,25 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect("140.44.4.71", username="root", key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +py_script = """import sqlite3 + +conn = sqlite3.connect('/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/database.sqlite') +cur = conn.cursor() +cur.execute('SELECT id, domain_names, advanced_config FROM proxy_host WHERE id IN (5, 22, 32, 56)') +for r in cur.fetchall(): + print(f'=== Host {r[0]}: {r[1]} ===') + print(r[2]) +conn.close() +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/check_adv.py") +stdin.write(py_script) +stdin.close() +stdout.read() + +stdin, stdout, stderr = c.exec_command("python3 /tmp/check_adv.py") +print(stdout.read().decode()) +c.close() diff --git a/scripts/inspect_npm_hosts.py b/scripts/inspect_npm_hosts.py index 55abc8d..46f3d77 100644 --- a/scripts/inspect_npm_hosts.py +++ b/scripts/inspect_npm_hosts.py @@ -1,18 +1,32 @@ import paramiko -ssh = paramiko.SSHClient() -ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) -ssh.connect('140.44.4.71', username='snarf', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect("140.44.4.71", username="root", key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) -py_script = """sudo python3 -c ' -import sqlite3 -conn = sqlite3.connect("/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/database.sqlite") +py_script = """import sqlite3, json + +conn = sqlite3.connect('/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/database.sqlite') cur = conn.cursor() -for row in cur.execute("select id,domain_names,forward_host,forward_port,enabled from proxy_host"): - print(row) -'""" -_, out, err = ssh.exec_command(py_script) -print(out.read().decode()) -print("ERR:", err.read().decode()) +cur.execute('SELECT id, domain_names, forward_host, forward_port, advanced_config FROM proxy_host WHERE is_deleted = 0') +rows = cur.fetchall() +for r in rows: + try: + domains = json.loads(r[1]) + except: + domains = r[1] + adv = r[4] or '' + has_auth = 'authentik' in adv.lower() or 'outpost' in adv.lower() + print('ID %2d: %s -> %s:%s (Authentik: %s)' % (r[0], domains, r[2], r[3], has_auth)) +conn.close() +""" -ssh.close() +stdin, stdout, stderr = c.exec_command("cat > /tmp/check_npm.py") +stdin.write(py_script) +stdin.close() +stdout.read() + +stdin, stdout, stderr = c.exec_command("python3 /tmp/check_npm.py") +print(stdout.read().decode()) +print(stderr.read().decode()) +c.close() diff --git a/scripts/inspect_peanut_widget.py b/scripts/inspect_peanut_widget.py new file mode 100644 index 0000000..56d7e9a --- /dev/null +++ b/scripts/inspect_peanut_widget.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def cat(path): + _, o, _ = c.exec_command(f'kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- cat {path}') + return o.read().decode().strip() + +print(cat("/app/src/widgets/peanut/component.jsx")) +c.close() + diff --git a/scripts/inspect_portainer_glances.py b/scripts/inspect_portainer_glances.py new file mode 100644 index 0000000..645bdb2 --- /dev/null +++ b/scripts/inspect_portainer_glances.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== /app/src/widgets/portainer/component.jsx ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/portainer/component.jsx")) + +print("\n=== /app/src/widgets/glances/component.jsx ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/glances/component.jsx")) + +c.close() + diff --git a/scripts/inspect_portainer_header.py b/scripts/inspect_portainer_header.py new file mode 100644 index 0000000..9e67b48 --- /dev/null +++ b/scripts/inspect_portainer_header.py @@ -0,0 +1,26 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('41788'); +console.log(content.substring(Math.max(0, idx - 100), Math.min(content.length, idx + 800))); +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/search_portainer_header.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/search_portainer_header.js")) + +c.close() diff --git a/scripts/inspect_portainer_proxy.py b/scripts/inspect_portainer_proxy.py new file mode 100644 index 0000000..4506b1c --- /dev/null +++ b/scripts/inspect_portainer_proxy.py @@ -0,0 +1,28 @@ +import base64 +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +script = """ +const fs = require('fs'); +const content = fs.readFileSync('/app/.next/server/pages/api/services/proxy.js', 'utf8'); +const idx = content.indexOf('41788:'); +if (idx !== -1) { + console.log(content.substring(idx, Math.min(content.length, idx + 1000))); +} +""" + +b64 = base64.b64encode(script.encode('utf-8')).decode('ascii') +run(f"kubectl exec -n infrastructure {pod} -- sh -c 'echo {b64} | base64 -d > /tmp/portainer_mod.js'") +print(run(f"kubectl exec -n infrastructure {pod} -- node /tmp/portainer_mod.js")) + +c.close() diff --git a/scripts/inspect_prom_manifest.py b/scripts/inspect_prom_manifest.py new file mode 100644 index 0000000..9035d88 --- /dev/null +++ b/scripts/inspect_prom_manifest.py @@ -0,0 +1,26 @@ +import paramiko +import time +import yaml + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +with open("homelab-gitops-repo/manifests/aerodrome/prometheus/prometheus.yaml", "r", encoding="utf-8") as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) + +# Let's inspect docs +print("Docs count:", len(docs)) +for i, d in enumerate(docs): + print(i, d.get('kind'), d.get('metadata', {}).get('name')) + +c.close() + diff --git a/scripts/inspect_prom_widget.py b/scripts/inspect_prom_widget.py new file mode 100644 index 0000000..dd9ef3e --- /dev/null +++ b/scripts/inspect_prom_widget.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== /app/src/widgets/prometheus/component.jsx ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/prometheus/component.jsx")) + +print("\n=== /app/src/widgets/prometheusmetric/component.jsx ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/prometheusmetric/component.jsx")) + +c.close() + diff --git a/scripts/inspect_routes.py b/scripts/inspect_routes.py new file mode 100644 index 0000000..3549dc5 --- /dev/null +++ b/scripts/inspect_routes.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app/src -name \"*proxy*\" -o -name \"route.js\" -o -name \"route.ts\"")) +c.close() + diff --git a/scripts/inspect_service_widgets.py b/scripts/inspect_service_widgets.py new file mode 100644 index 0000000..ea36ab1 --- /dev/null +++ b/scripts/inspect_service_widgets.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +for w in ['grafana', 'uptimekuma', 'gitea', 'argocd']: + print(f"=== {w} component.jsx ===") + print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/widgets/{w}/component.jsx")) + +c.close() + diff --git a/scripts/inspect_skeleton_settings.py b/scripts/inspect_skeleton_settings.py new file mode 100644 index 0000000..8c6fab0 --- /dev/null +++ b/scripts/inspect_skeleton_settings.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') + +print("=== /app/src/skeleton/settings.yaml ===") +print(run(f"kubectl exec -n infrastructure {pod} -- cat /app/src/skeleton/settings.yaml")) + +c.close() + diff --git a/scripts/inspect_uptime_kuma.py b/scripts/inspect_uptime_kuma.py new file mode 100644 index 0000000..a5c6c69 --- /dev/null +++ b/scripts/inspect_uptime_kuma.py @@ -0,0 +1,30 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +run("kubectl get pods,svc,ingress -n monitoring -l app.kubernetes.io/name=uptime-kuma") +run("kubectl get svc -n monitoring") +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +if pod: + print(f"Uptime Kuma Pod: {pod}") + run(f"kubectl exec -n monitoring {pod} -- sqlite3 /app/data/kuma.db 'SELECT count(*) FROM monitor;' 2>/dev/null || echo 'sqlite3 check inside pod'") + run(f"kubectl exec -n monitoring {pod} -- sqlite3 /app/data/kuma.db 'SELECT id, name, type, url FROM monitor LIMIT 10;' 2>/dev/null || true") + run(f"kubectl exec -n monitoring {pod} -- sqlite3 /app/data/kuma.db 'SELECT id, name, type FROM notification;' 2>/dev/null || true") + +c.close() + diff --git a/scripts/inspect_use_widget_api.py b/scripts/inspect_use_widget_api.py new file mode 100644 index 0000000..2389ac5 --- /dev/null +++ b/scripts/inspect_use_widget_api.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def cat(path): + _, o, _ = c.exec_command(f'kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- cat {path}') + return o.read().decode().strip() + +print(cat("/app/src/utils/proxy/use-widget-api.js")) +c.close() + diff --git a/scripts/inspect_widget_endpoints.py b/scripts/inspect_widget_endpoints.py new file mode 100644 index 0000000..3a304fa --- /dev/null +++ b/scripts/inspect_widget_endpoints.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print("Files:") +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- find /app/src/widgets -type d -maxdepth 2")) +c.close() + diff --git a/scripts/inspect_widget_files.py b/scripts/inspect_widget_files.py new file mode 100644 index 0000000..69bdd9c --- /dev/null +++ b/scripts/inspect_widget_files.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print("uptimekuma:", run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- ls -la /app/src/widgets/uptimekuma")) +print("homeassistant:", run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- ls -la /app/src/widgets/homeassistant")) +print("gitea:", run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- ls -la /app/src/widgets/gitea")) + +c.close() + diff --git a/scripts/inspect_widget_proxies.py b/scripts/inspect_widget_proxies.py new file mode 100644 index 0000000..f96cb4b --- /dev/null +++ b/scripts/inspect_widget_proxies.py @@ -0,0 +1,21 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def cat(path): + _, o, _ = c.exec_command(f'kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- cat {path}') + return o.read().decode().strip() + +print("--- gitea proxy ---") +print(cat("/app/src/widgets/gitea/proxy.js")) + +print("--- uptimekuma proxy ---") +print(cat("/app/src/widgets/uptimekuma/proxy.js")) + +print("--- homeassistant proxy ---") +print(cat("/app/src/widgets/homeassistant/proxy.js")) + +c.close() + diff --git a/scripts/list_app.py b/scripts/list_app.py new file mode 100644 index 0000000..583ae3f --- /dev/null +++ b/scripts/list_app.py @@ -0,0 +1,17 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('ls -la /app:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -la /app')) +print('find /app/.next -name "*homeassistant*":') +print(run(f'kubectl exec -n infrastructure {pod} -- find /app/.next -name "*homeassistant*"')) + +c.close() diff --git a/scripts/list_homepage_widgets.py b/scripts/list_homepage_widgets.py new file mode 100644 index 0000000..8a65135 --- /dev/null +++ b/scripts/list_homepage_widgets.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print("Pod:", pod) + +widgets = run(f"kubectl exec -n infrastructure {pod} -- ls /app/src/widgets") +print("Widgets in /app/src/widgets:") +print(widgets) + +c.close() + diff --git a/scripts/list_st_entities.py b/scripts/list_st_entities.py new file mode 100644 index 0000000..60a70be --- /dev/null +++ b/scripts/list_st_entities.py @@ -0,0 +1,23 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +ha_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4" + +cmd = f"""curl -s -H "Authorization: Bearer {ha_token}" -H "Content-Type: application/json" http://14.4.4.20:8123/api/states""" +_, stdout, stderr = c.exec_command(cmd) +raw = stdout.read().decode() + +states = json.loads(raw) +st_entities = [s for s in states if s['entity_id'].startswith('sensor.st_00158555')] +print(f"Total Weather Station ST-00158555 entities: {len(st_entities)}") +for s in st_entities: + print(f" {s['entity_id']} = {s['state']} {s.get('attributes', {}).get('unit_of_measurement', '')} ({s.get('attributes', {}).get('friendly_name')})") + +c.close() + diff --git a/scripts/ls_peanut.py b/scripts/ls_peanut.py new file mode 100644 index 0000000..b767546 --- /dev/null +++ b/scripts/ls_peanut.py @@ -0,0 +1,13 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print(run("kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- ls -la /app/src/widgets/peanut")) +c.close() + diff --git a/scripts/patch_aerodrome_prom.py b/scripts/patch_aerodrome_prom.py new file mode 100644 index 0000000..7e1a047 --- /dev/null +++ b/scripts/patch_aerodrome_prom.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +patch = '{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"targetPort":9090,"nodePort":30090}]}}' +_, o, e = c.exec_command(f"kubectl patch svc prometheus -n default --type merge -p '{patch}'") +print(o.read().decode()) +print(e.read().decode()) + +_, o2, _ = c.exec_command("kubectl get svc prometheus -n default") +print(o2.read().decode()) + +c.close() + diff --git a/scripts/populate_group.py b/scripts/populate_group.py new file mode 100644 index 0000000..27a813e --- /dev/null +++ b/scripts/populate_group.py @@ -0,0 +1,26 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +sql = """ +INSERT INTO `group` (id, name, public, active, weight, status_page_id) +VALUES (1, 'Core Infrastructure', 1, 1, 1000, 1) +ON DUPLICATE KEY UPDATE name=VALUES(name); + +INSERT INTO monitor_group (monitor_id, group_id, weight) +SELECT id, 1, 1000 FROM monitor WHERE active=1; +""" + +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e \"{sql}\"")) +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT count(id) FROM monitor_group;'")) + +c.close() + diff --git a/scripts/populate_status_page.py b/scripts/populate_status_page.py new file mode 100644 index 0000000..f86f9f8 --- /dev/null +++ b/scripts/populate_status_page.py @@ -0,0 +1,30 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +sql = """ +INSERT INTO status_page (id, slug, title, description, icon, theme, published, search_engine_index) +VALUES (1, 'default', 'SnarfNet Infrastructure', 'Overall health of SnarfNet endpoints and services', '/icon.svg', 'auto', 1, 1) +ON DUPLICATE KEY UPDATE title=VALUES(title); + +INSERT INTO `group` (id, name, public, active, weight, status_page_id) +VALUES (1, 'Core Infrastructure', 1, 1, 1000, 1) +ON DUPLICATE KEY UPDATE name=VALUES(name); + +INSERT IGNORE INTO monitor_group (monitor_id, group_id, weight) +SELECT id, 1, 1000 FROM monitor WHERE active=1; +""" + +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e \"{sql}\"")) +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT count(*) FROM monitor_group;'")) + +c.close() + diff --git a/scripts/populate_uptime_kuma.py b/scripts/populate_uptime_kuma.py new file mode 100644 index 0000000..cba2677 --- /dev/null +++ b/scripts/populate_uptime_kuma.py @@ -0,0 +1,170 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run_cmd(cmd): + print(f"\n>>> {cmd}") + _, stdout, stderr = c.exec_command(cmd) + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + if out: + print(out) + if err: + print("[stderr]", err) + return out + +pod = run_cmd("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +# Remote python script to populate MariaDB +setup_script = ''' +import json +import subprocess + +def query_db(sql): + cmd = ["mariadb", "--socket=/app/data/run/mariadb.sock", "-u", "root", "kuma", "-e", sql] + res = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + if res.returncode != 0: + print("DB ERROR:", res.stderr) + return res.stdout + +# 1. Ensure Gotify Notification Exists +notif_config = { + "name": "Gotify Infrastructure Alerts", + "type": "gotify", + "isDefault": True, + "gotifyServerUrl": "http://140.44.4.70:8090", + "gotifyApplicationToken": "A7zBx9InFrAaLeRtStOk", + "gotifyPriority": 8 +} +notif_json = json.dumps(notif_config) + +check_notif = query_db("SELECT id FROM notification WHERE name = 'Gotify Infrastructure Alerts';") +if "id" not in check_notif or not check_notif.split(): + print("Creating Gotify Notification in Uptime Kuma...") + escaped_json = notif_json.replace("'", "''") + query_db(f"INSERT INTO notification (name, active, user_id, is_default, config) VALUES ('Gotify Infrastructure Alerts', 1, 1, 1, '{escaped_json}');") + +notif_id_out = query_db("SELECT id FROM notification WHERE name = 'Gotify Infrastructure Alerts';") +notif_id = [line.strip() for line in notif_id_out.splitlines() if line.strip().isdigit()][0] +print(f"Gotify Notification ID: {notif_id}") + +# 2. Define Monitors List (DNS + Direct VIP/IP) +monitors = [ + # --- DNS INGRESS MONITORS --- + {"name": "Gotify Hub (DNS)", "type": "http", "url": "https://gotify.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Heimdall Portal (DNS)", "type": "http", "url": "https://portal.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "NPM Admin Console (DNS)", "type": "http", "url": "https://nginx.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Authentik SSO (DNS)", "type": "http", "url": "https://authentik.snarfnet.net", "interval": 60, "ignore_tls": 0, "status_codes": '["200-399"]'}, + {"name": "Rancher Management (DNS)", "type": "http", "url": "https://aerodrome.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Harvester Console (DNS)", "type": "http", "url": "https://harvester.spacedock.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Gitea DevOps (DNS)", "type": "http", "url": "https://git.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "ArgoCD GitOps (DNS)", "type": "http", "url": "https://argo.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "AWX Automation (DNS)", "type": "http", "url": "https://awx.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Semaphore Ansible (DNS)", "type": "http", "url": "https://semaphore.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Jenkins CI/CD (DNS)", "type": "http", "url": "https://jenkins.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Zabbix Web UI (DNS)", "type": "http", "url": "https://zabbix.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Grafana Dashboards (DNS)", "type": "http", "url": "https://grafana.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Longhorn Aerodrome (DNS)", "type": "http", "url": "https://longhorn.aerodrome.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Longhorn Spaceport (DNS)", "type": "http", "url": "https://longhorn.spaceport.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Home Assistant (DNS)", "type": "http", "url": "https://snarfhome.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "PeaNUT UPS Portal (DNS)", "type": "http", "url": "https://peanut.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Open WebUI AI (DNS)", "type": "http", "url": "https://ai.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "SnarfNAS DSM (DNS)", "type": "http", "url": "https://snarfnas.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "SN-NAS DSM (DNS)", "type": "http", "url": "https://sn-nas.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Homepage (DNS)", "type": "http", "url": "https://homepage.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "MeshCentral (DNS)", "type": "http", "url": "https://mesh.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Homebox (DNS)", "type": "http", "url": "https://homebox.snarfnet.net", "interval": 60, "ignore_tls": 0}, + + # --- DIRECT VIP & IP MONITORS --- + {"name": "Swarm VIP - Gotify (VIP)", "type": "http", "url": "http://140.44.4.70:8090", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - Heimdall (VIP)", "type": "http", "url": "http://140.44.4.70:85", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - Homebox (VIP)", "type": "http", "url": "http://140.44.4.70:3100", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - PeaNUT (VIP)", "type": "http", "url": "http://140.44.4.70:8050", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm Host - NPM (VIP)", "type": "http", "url": "http://140.44.4.74:81", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Authentik (VIP)", "type": "http", "url": "https://140.44.4.29:444", "interval": 30, "ignore_tls": 1, "status_codes": '["200-399"]'}, + {"name": "Aerodrome VIP - AWX (VIP)", "type": "http", "url": "https://140.44.4.30:443", "interval": 30, "ignore_tls": 1}, + {"name": "Aerodrome VIP - Grafana (VIP)", "type": "http", "url": "http://140.44.4.32:88", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Longhorn (VIP)", "type": "http", "url": "http://140.44.4.36:80", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Traefik (VIP)", "type": "http", "url": "https://140.44.4.34:443", "interval": 30, "ignore_tls": 1}, + {"name": "Spaceport VIP - Zabbix Web (VIP)", "type": "http", "url": "http://140.44.4.57:8888", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Semaphore (VIP)", "type": "http", "url": "http://140.44.4.58:100", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Jenkins (VIP)", "type": "http", "url": "http://140.44.4.59:101", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Homepage (VIP)", "type": "http", "url": "http://140.44.4.60:8040", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Gitea (VIP)", "type": "http", "url": "http://140.44.4.62:90", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport Node - Longhorn (VIP)", "type": "http", "url": "http://140.44.4.41:80", "interval": 30, "ignore_tls": 0}, + {"name": "Home Assistant Core (IP)", "type": "http", "url": "http://14.4.4.20:8123", "interval": 30, "ignore_tls": 0}, + {"name": "AI Hailo Engine (IP)", "type": "http", "url": "http://140.44.4.7:8000/docs", "interval": 30, "ignore_tls": 0}, + {"name": "AI Open WebUI (IP)", "type": "http", "url": "http://140.44.4.8:8080", "interval": 30, "ignore_tls": 0}, + {"name": "Harvester HCI Console (VIP)", "type": "http", "url": "https://140.44.4.90:443", "interval": 30, "ignore_tls": 1}, + {"name": "Synology NAS 1 DSM (IP)", "type": "http", "url": "https://14.10.10.71:5001", "interval": 30, "ignore_tls": 1}, + {"name": "SnarfNAS DSM (IP)", "type": "http", "url": "https://14.10.10.72:5001", "interval": 30, "ignore_tls": 1}, + {"name": "NUT Master Daemon (TCP)", "type": "port", "hostname": "14.4.4.44", "port": 3493, "interval": 30}, +] + +# Fetch existing monitors +existing_out = query_db("SELECT id, name FROM monitor;") +existing_names = set() +for line in existing_out.splitlines()[1:]: + parts = line.split("\\t") + if len(parts) >= 2: + existing_names.add(parts[1].strip()) + +added_count = 0 +for m in monitors: + name = m["name"] + if name in existing_names: + print(f"Skipping existing monitor: {name}") + continue + + m_type = m["type"] + interval = m.get("interval", 60) + ignore_tls = m.get("ignore_tls", 0) + status_codes = m.get("status_codes", '["200-299"]') + + if m_type == "http": + url = m["url"] + sql = f"""INSERT INTO monitor (name, type, active, user_id, `interval`, url, ignore_tls, accepted_statuscodes_json) + VALUES ('{name}', 'http', 1, 1, {interval}, '{url}', {ignore_tls}, '{status_codes}');""" + elif m_type == "port": + host = m["hostname"] + p = m["port"] + sql = f"""INSERT INTO monitor (name, type, active, user_id, `interval`, hostname, port) + VALUES ('{name}', 'port', 1, 1, {interval}, '{host}', {p});""" + + query_db(sql) + added_count += 1 + print(f"Added monitor: {name}") + +# Link all monitors to Gotify notification in monitor_notification +all_monitors_out = query_db("SELECT id FROM monitor;") +for line in all_monitors_out.splitlines()[1:]: + line = line.strip() + if line.isdigit(): + m_id = line + check_link = query_db(f"SELECT id FROM monitor_notification WHERE monitor_id = {m_id} AND notification_id = {notif_id};") + if "id" not in check_link or not check_link.split(): + query_db(f"INSERT INTO monitor_notification (monitor_id, notification_id) VALUES ({m_id}, {notif_id});") + +print(f"Successfully processed all monitors! Total new monitors added: {added_count}") +''' + +# Deliver script via stdin into /tmp/populate_kuma.py on the node +stdin, _, _ = c.exec_command("cat > /tmp/populate_kuma.py") +stdin.write(setup_script) +stdin.close() + +run_cmd(f"kubectl cp /tmp/populate_kuma.py monitoring/{pod}:/tmp/populate_kuma.py") +run_cmd(f"kubectl exec -n monitoring {pod} -- python3 /tmp/populate_kuma.py") + +# Restart Uptime Kuma to load new monitors +print("\n=== Restarting Uptime Kuma Deployment ===") +run_cmd("kubectl rollout restart deployment/uptime-kuma-2-1756668961 -n monitoring") +run_cmd("kubectl rollout status deployment/uptime-kuma-2-1756668961 -n monitoring --timeout=90s") + +c.close() +print("\n=== Uptime Kuma Population Complete ===") diff --git a/scripts/query_nas_from_swarm.py b/scripts/query_nas_from_swarm.py new file mode 100644 index 0000000..15e98ce --- /dev/null +++ b/scripts/query_nas_from_swarm.py @@ -0,0 +1,52 @@ +import paramiko, json + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def query_nas(ip, name): + print(f"\n=== Querying {name} ({ip}) from Swm01 ===") + for user in ['snarf', 'admin']: + login_cmd = f"curl -k -s 'https://{ip}:5001/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account={user}&passwd=Katzir476!&session=Storage&format=sid'" + _, o, _ = c.exec_command(login_cmd) + resp_str = o.read().decode().strip() + try: + res = json.loads(resp_str) + if res.get('success'): + sid = res['data']['sid'] + print(f"Logged in as {user}!") + st_cmd = f"curl -k -s 'https://{ip}:5001/webapi/entry.cgi?api=SYNO.Storage.CGI.Storage&version=1&method=load_info&_sid={sid}'" + _, o2, _ = c.exec_command(st_cmd) + st_data = json.loads(o2.read().decode()) + data = st_data.get('data', {}) + vols = data.get('volumes', []) + disks = data.get('disks', []) + print(f"Disks count: {len(disks)}") + tot_raw = 0 + for d in disks: + sz = int(d.get('size_total', 0)) / (1024**4) + tot_raw += sz + print(f" Drive {d.get('name')}: {d.get('model', 'Unknown')}, Size: {sz:.2f} TiB, Status: {d.get('status')}") + print(f"Total Raw Drive Capacity: {tot_raw:.2f} TiB") + + print(f"Volumes count: {len(vols)}") + tot_vol = 0 + tot_used = 0 + for v in vols: + v_tot = int(v.get('size_total', 0)) / (1024**4) + v_usd = int(v.get('size_used', 0)) / (1024**4) + tot_vol += v_tot + tot_used += v_usd + print(f" Volume {v.get('name')}: Usable: {v_tot:.2f} TiB, Used: {v_usd:.2f} TiB, FS: {v.get('fs_type')}") + print(f"Total Usable Volume: {tot_vol:.2f} TiB (Used: {tot_used:.2f} TiB)") + break + else: + print(f"Login failed as {user}: {res}") + except Exception as e: + print(f"Error parse: {e}, raw: {resp_str[:150]}") + +query_nas('14.10.10.71', 'SN-NAS (RS810+)') +query_nas('14.10.10.72', 'SnarfNAS (DS416play)') + +c.close() + diff --git a/scripts/query_synology_dsm_storage.py b/scripts/query_synology_dsm_storage.py new file mode 100644 index 0000000..937b3ed --- /dev/null +++ b/scripts/query_synology_dsm_storage.py @@ -0,0 +1,62 @@ +import urllib.request, urllib.parse, ssl, json + +ctx = ssl._create_unverified_context() + +for ip, nas_name in [('14.10.10.71', 'SN-NAS (RS810+)'), ('14.10.10.72', 'SnarfNAS (DS416play)')]: + print(f"\n=== Querying {nas_name} ({ip}) ===") + logged_in = False + for user in ['snarf', 'admin']: + params = urllib.parse.urlencode({ + 'api': 'SYNO.API.Auth', + 'version': '3', + 'method': 'login', + 'account': user, + 'passwd': 'Katzir476!', + 'session': 'Storage', + 'format': 'sid' + }) + url = f'https://{ip}:5001/webapi/auth.cgi?{params}' + req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) + try: + with urllib.request.urlopen(req, context=ctx, timeout=4) as r: + res = json.loads(r.read().decode()) + if res.get('success'): + sid = res['data']['sid'] + print(f"Logged in successfully as {user}!") + logged_in = True + + st_url = f'https://{ip}:5001/webapi/entry.cgi?api=SYNO.Storage.CGI.Storage&version=1&method=load_info&_sid={sid}' + req2 = urllib.request.Request(st_url, headers={'User-Agent': 'Mozilla/5.0'}) + with urllib.request.urlopen(req2, context=ctx, timeout=6) as r2: + st_data = json.loads(r2.read().decode()) + data = st_data.get('data', {}) + vols = data.get('volumes', []) + disks = data.get('disks', []) + storage_pools = data.get('storagePools', []) + + print(f"Disks count: {len(disks)}") + total_raw_tib = 0 + for d in disks: + sz = int(d.get('size_total', 0)) / (1024**4) + total_raw_tib += sz + print(f" Drive {d.get('name') or d.get('id')}: {d.get('model', 'Unknown')}, Size: {sz:.2f} TiB, Status: {d.get('status')}") + print(f"Total Raw Drive Capacity: {total_raw_tib:.2f} TiB") + + print(f"Volumes count: {len(vols)}") + total_usable_tib = 0 + total_used_tib = 0 + for v in vols: + v_tot = int(v.get('size_total', 0)) / (1024**4) + v_usd = int(v.get('size_used', 0)) / (1024**4) + total_usable_tib += v_tot + total_used_tib += v_usd + print(f" Volume {v.get('name', 'vol')}: Usable: {v_tot:.2f} TiB, Used: {v_usd:.2f} TiB, FS: {v.get('fs_type')}") + print(f"Total Usable Storage: {total_usable_tib:.2f} TiB (Used: {total_used_tib:.2f} TiB)") + break + else: + print(f"Login failed for {user}: {res}") + except Exception as e: + print(f"Error connecting as {user}: {e}") + if not logged_in: + print(f"Could not log into {ip}") + diff --git a/scripts/read_widget_components.py b/scripts/read_widget_components.py new file mode 100644 index 0000000..796458b --- /dev/null +++ b/scripts/read_widget_components.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def cat(path): + _, o, _ = c.exec_command(f'kubectl exec deployment/homepage-2-1744068158 -n infrastructure -- cat {path}') + return o.read().decode().strip() + +print("--- homeassistant ---") +print(cat("/app/src/widgets/homeassistant/component.jsx")) +print("--- uptimekuma ---") +print(cat("/app/src/widgets/uptimekuma/component.jsx")) +print("--- gitea ---") +print(cat("/app/src/widgets/gitea/component.jsx")) + +c.close() + diff --git a/scripts/recover_uptime_kuma.py b/scripts/recover_uptime_kuma.py new file mode 100644 index 0000000..e076b04 --- /dev/null +++ b/scripts/recover_uptime_kuma.py @@ -0,0 +1,176 @@ +import paramiko +import sys +import json + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run_cmd(cmd): + print(f"\n>>> {cmd}") + _, stdout, stderr = c.exec_command(cmd) + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + if out: + print(out) + if err: + print("[stderr]", err) + return out + +pod = run_cmd("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print(f"Targeting Uptime Kuma Pod: {pod}") + +setup_script = '''import json +import subprocess + +def query_db(sql): + cmd = ["mariadb", "--socket=/app/data/run/mariadb.sock", "-u", "root", "kuma", "-e", sql] + res = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + if res.returncode != 0: + print("DB ERROR:", res.stderr) + return res.stdout + +# 1. Take a full MariaDB dump before recovery +subprocess.run(["mysqldump", "--socket=/app/data/run/mariadb.sock", "-u", "root", "kuma", "-r", "/app/data/pre_recovery_dump.sql"]) +print("Created pre-recovery backup at /app/data/pre_recovery_dump.sql") + +# 2. Ensure Gotify Notification Exists +notif_config = { + "name": "Gotify Infrastructure Alerts", + "type": "gotify", + "isDefault": True, + "gotifyServerUrl": "http://140.44.4.70:8090", + "gotifyApplicationToken": "A7zBx9InFrAaLeRtStOk", + "gotifyPriority": 8 +} +notif_json = json.dumps(notif_config) + +check_notif = query_db("SELECT id FROM notification WHERE name = 'Gotify Infrastructure Alerts';") +if "id" not in check_notif or not check_notif.split(): + print("Creating Gotify Notification in Uptime Kuma...") + escaped_json = notif_json.replace("'", "''") + query_db(f"INSERT INTO notification (name, active, user_id, is_default, config) VALUES ('Gotify Infrastructure Alerts', 1, 1, 1, '{escaped_json}');") + +notif_id_out = query_db("SELECT id FROM notification WHERE name = 'Gotify Infrastructure Alerts';") +notif_id = [line.strip() for line in notif_id_out.splitlines() if line.strip().isdigit()][0] +print(f"Gotify Notification ID: {notif_id}") + +# 3. Clean any broken previous monitors +query_db("DELETE FROM monitor WHERE name IN ('Harvester Console (DNS)', 'Jenkins CI/CD (DNS)', 'NUT Master Daemon (TCP)');") + +# 4. Define Complete Fleet Monitors List (DNS + Direct VIP/IP) +monitors = [ + # --- DNS INGRESS MONITORS --- + {"name": "Gotify Hub (DNS)", "type": "http", "url": "https://gotify.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Heimdall Portal (DNS)", "type": "http", "url": "https://portal.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "NPM Admin Console (DNS)", "type": "http", "url": "https://nginx.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Authentik SSO (DNS)", "type": "http", "url": "https://authentik.snarfnet.net", "interval": 60, "ignore_tls": 0, "status_codes": '["200-399"]'}, + {"name": "Rancher Management (DNS)", "type": "http", "url": "https://aerodrome.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Harvester Console (DNS)", "type": "http", "url": "https://harvester.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Gitea DevOps (DNS)", "type": "http", "url": "https://git.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "ArgoCD GitOps (DNS)", "type": "http", "url": "https://argo.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "AWX Automation (DNS)", "type": "http", "url": "https://awx.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Semaphore Ansible (DNS)", "type": "http", "url": "https://semaphore.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Jenkins CI/CD (DNS)", "type": "http", "url": "https://jenkins.snarfnet.net", "interval": 60, "ignore_tls": 0, "status_codes": '["200-403"]'}, + {"name": "Zabbix Web UI (DNS)", "type": "http", "url": "https://zabbix.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Grafana Dashboards (DNS)", "type": "http", "url": "https://grafana.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Longhorn Aerodrome (DNS)", "type": "http", "url": "https://longhorn.aerodrome.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Longhorn Spaceport (DNS)", "type": "http", "url": "https://longhorn.spaceport.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Home Assistant (DNS)", "type": "http", "url": "https://snarfhome.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "PeaNUT UPS Portal (DNS)", "type": "http", "url": "https://peanut.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "Open WebUI AI (DNS)", "type": "http", "url": "https://ai.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "SnarfNAS DSM (DNS)", "type": "http", "url": "https://snarfnas.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "SN-NAS DSM (DNS)", "type": "http", "url": "https://sn-nas.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Homepage (DNS)", "type": "http", "url": "https://homepage.snarfnet.net", "interval": 60, "ignore_tls": 0}, + {"name": "MeshCentral (DNS)", "type": "http", "url": "https://mesh.snarfnet.net", "interval": 60, "ignore_tls": 1}, + {"name": "Homebox (DNS)", "type": "http", "url": "https://homebox.snarfnet.net", "interval": 60, "ignore_tls": 0}, + + # --- DIRECT VIP & IP MONITORS --- + {"name": "Swarm VIP - Gotify (VIP)", "type": "http", "url": "http://140.44.4.70:8090", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - Heimdall (VIP)", "type": "http", "url": "http://140.44.4.70:85", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - Homebox (VIP)", "type": "http", "url": "http://140.44.4.70:3100", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm VIP - PeaNUT (VIP)", "type": "http", "url": "http://140.44.4.70:8050", "interval": 30, "ignore_tls": 0}, + {"name": "Swarm Host - NPM (VIP)", "type": "http", "url": "http://140.44.4.74:81", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Authentik (VIP)", "type": "http", "url": "https://140.44.4.29:444", "interval": 30, "ignore_tls": 1, "status_codes": '["200-399"]'}, + {"name": "Aerodrome VIP - AWX (VIP)", "type": "http", "url": "https://140.44.4.30:443", "interval": 30, "ignore_tls": 1}, + {"name": "Aerodrome VIP - Grafana (VIP)", "type": "http", "url": "http://140.44.4.32:88", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Longhorn (VIP)", "type": "http", "url": "http://140.44.4.36:80", "interval": 30, "ignore_tls": 0}, + {"name": "Aerodrome VIP - Traefik (VIP)", "type": "http", "url": "https://140.44.4.34:443", "interval": 30, "ignore_tls": 1}, + {"name": "Spaceport VIP - Zabbix Web (VIP)", "type": "http", "url": "http://140.44.4.57:8888", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Semaphore (VIP)", "type": "http", "url": "http://140.44.4.58:100", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Jenkins (VIP)", "type": "http", "url": "http://140.44.4.59:101", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Homepage (VIP)", "type": "http", "url": "http://140.44.4.60:8040", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport VIP - Gitea (VIP)", "type": "http", "url": "http://140.44.4.62:90", "interval": 30, "ignore_tls": 0}, + {"name": "Spaceport Node - Longhorn (VIP)", "type": "http", "url": "http://140.44.4.41:80", "interval": 30, "ignore_tls": 0}, + {"name": "Home Assistant Core (IP)", "type": "http", "url": "http://14.4.4.20:8123", "interval": 30, "ignore_tls": 0}, + {"name": "AI Hailo Engine (IP)", "type": "http", "url": "http://140.44.4.7:8000/docs", "interval": 30, "ignore_tls": 0}, + {"name": "AI Open WebUI (IP)", "type": "http", "url": "http://140.44.4.8:8080", "interval": 30, "ignore_tls": 0}, + {"name": "Harvester HCI Console (VIP)", "type": "http", "url": "https://140.44.4.90:443", "interval": 30, "ignore_tls": 1}, + {"name": "Synology NAS 1 DSM (IP)", "type": "http", "url": "https://14.10.10.71:5001", "interval": 30, "ignore_tls": 1}, + {"name": "SnarfNAS DSM (IP)", "type": "http", "url": "https://14.10.10.72:5001", "interval": 30, "ignore_tls": 1}, + {"name": "PeaNUT UPS Daemon (VIP)", "type": "http", "url": "http://140.44.4.70:8050/api/v1/devices", "interval": 30, "ignore_tls": 0}, +] + +# Fetch existing monitors to prevent duplicates +existing_out = query_db("SELECT id, name FROM monitor;") +existing_names = set() +for line in existing_out.splitlines()[1:]: + parts = line.split("\\t") + if len(parts) >= 2: + existing_names.add(parts[1].strip()) + +added_count = 0 +for m in monitors: + name = m["name"] + if name in existing_names: + print(f"Skipping existing monitor: {name}") + continue + + m_type = m["type"] + interval = m.get("interval", 60) + ignore_tls = m.get("ignore_tls", 0) + status_codes = m.get("status_codes", '["200-299"]') + + if m_type == "http": + url = m["url"] + sql = f"""INSERT INTO monitor (name, type, active, user_id, `interval`, url, ignore_tls, accepted_statuscodes_json) + VALUES ('{name}', 'http', 1, 1, {interval}, '{url}', {ignore_tls}, '{status_codes}');""" + elif m_type == "port": + host = m["hostname"] + p = m["port"] + sql = f"""INSERT INTO monitor (name, type, active, user_id, `interval`, hostname, port) + VALUES ('{name}', 'port', 1, 1, {interval}, '{host}', {p});""" + + query_db(sql) + added_count += 1 + print(f"Added monitor: {name}") + +# Link all monitors to Gotify notification +all_monitors_out = query_db("SELECT id FROM monitor;") +for line in all_monitors_out.splitlines()[1:]: + line = line.strip() + if line.isdigit(): + m_id = line + check_link = query_db(f"SELECT id FROM monitor_notification WHERE monitor_id = {m_id} AND notification_id = {notif_id};") + if "id" not in check_link or not check_link.split(): + query_db(f"INSERT INTO monitor_notification (monitor_id, notification_id) VALUES ({m_id}, {notif_id});") + +total_count = query_db("SELECT count(*) FROM monitor;") +print(f"\\nRecovery Complete! Added {added_count} monitors. Total active monitors in DB: {total_count.strip()}") +''' + +stdin, _, _ = c.exec_command("cat > /tmp/recover_kuma.py") +stdin.write(setup_script) +stdin.close() + +run_cmd(f"kubectl cp /tmp/recover_kuma.py monitoring/{pod}:/tmp/recover_kuma.py") +run_cmd(f"kubectl exec -n monitoring {pod} -- python3 /tmp/recover_kuma.py") + +print("\n=== Restarting Uptime Kuma Deployment ===") +run_cmd("kubectl rollout restart deployment/uptime-kuma-2-1756668961 -n monitoring") +run_cmd("kubectl rollout status deployment/uptime-kuma-2-1756668961 -n monitoring --timeout=90s") + +c.close() +print("\n=== Recovery Successfully Finished ===") + diff --git a/scripts/remediate_heimdall.py b/scripts/remediate_heimdall.py new file mode 100644 index 0000000..afacf55 --- /dev/null +++ b/scripts/remediate_heimdall.py @@ -0,0 +1,138 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +key_path = r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet' + +def main(): + print("=== Connecting to Shipyard Swarm Manager (140.44.4.71) for Heimdall Remediation ===") + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + c.connect("140.44.4.71", username="root", key_filename=key_path, timeout=10) + + def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + + # 1. Ensure backup directory exists & take safety backup + run("mkdir -p /mnt/nfs_shares/backups") + run("cp -v /mnt/nfs_shares/heimdall/www/app.sqlite /mnt/nfs_shares/backups/heimdall_pre_remediation.sqlite") + + # 2. Database repair script executed locally on node + db_clean_script = ''' +import sqlite3 +import shutil + +db_path = "/mnt/nfs_shares/heimdall/www/app.sqlite" +con = sqlite3.connect(db_path) +cur = con.cursor() + +print("Initial total items:", cur.execute("SELECT count(*) FROM items").fetchone()[0]) + +# Delete all soft-deleted items (deleted_at IS NOT NULL) +cur.execute("DELETE FROM items WHERE deleted_at IS NOT NULL") +print("Deleted soft-deleted items. Remaining:", cur.execute("SELECT count(*) FROM items").fetchone()[0]) + +# Remove legacy Pi-hole items (Pi-hole 1 and Pi-hole 2) since Pi-hole stack is decommissioned +cur.execute("DELETE FROM items WHERE title LIKE 'Pi-hole%'") +print("Purged legacy Pi-hole items. Remaining:", cur.execute("SELECT count(*) FROM items").fetchone()[0]) + +# Deduplicate items by title just in case, keeping the highest ID +cur.execute(""" +DELETE FROM items +WHERE id NOT IN ( + SELECT MAX(id) + FROM items + GROUP BY title +) AND id != 0 +""") + +# Re-sequence the 'order' field sequentially +rows = cur.execute("SELECT id FROM items WHERE id != 0 ORDER BY [order] ASC, title ASC").fetchall() +for idx, (item_id,) in enumerate(rows): + cur.execute("UPDATE items SET [order] = ? WHERE id = ?", (idx, item_id)) + +con.commit() +cur.execute("REINDEX") +cur.execute("VACUUM") +con.close() + +print("Database sanitized, re-indexed, and vacuumed successfully!") +''' + sftp = c.open_sftp() + with sftp.file('/tmp/clean_heimdall_db.py', 'w') as f: + f.write(db_clean_script) + sftp.close() + + run("python3 /tmp/clean_heimdall_db.py") + + # 3. Create local high-performance storage directory on snshpd4lnxswm01 + run("mkdir -p /var/lib/docker-data/heimdall/config") + run("rsync -av --progress /mnt/nfs_shares/heimdall/ /var/lib/docker-data/heimdall/config/") + run("chown -R 1000:1000 /var/lib/docker-data/heimdall/config") + run("ls -la /var/lib/docker-data/heimdall/config/www/") + + # 4. Generate updated Docker Compose file with node pinning & local volume + new_compose = '''version: "3.8" + +services: + heimdall: + image: lscr.io/linuxserver/heimdall:latest + ports: + - target: 80 + published: 85 + mode: ingress + - target: 443 + published: 403 + mode: ingress + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/New_York + volumes: + - type: bind + source: /var/lib/docker-data/heimdall/config + target: /config + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.hostname == snshpd4lnxswm01 + restart_policy: + condition: on-failure + +networks: + default: + name: homelab_public + external: true +''' + sftp = c.open_sftp() + with sftp.file('/tmp/heimdall_compose.yml', 'w') as f: + f.write(new_compose) + sftp.close() + + # 5. Redeploy Heimdall stack + run("docker stack deploy -c /tmp/heimdall_compose.yml heimdall") + time.sleep(5) + run("docker stack ps heimdall") + + # 6. Setup daily atomic SQLite backup cron job + cron_cmd = '(crontab -l 2>/dev/null | grep -v "heimdall_backup"; echo "30 3 * * * python3 -c \\"import sqlite3; con=sqlite3.connect(\'/var/lib/docker-data/heimdall/config/www/app.sqlite\'); b=sqlite3.connect(\'/mnt/nfs_shares/backups/heimdall_daily.sqlite\'); con.backup(b); b.close(); con.close()\\" >/dev/null 2>&1") | crontab -' + run(cron_cmd) + run("crontab -l | grep heimdall") + + c.close() + print("\n=== Heimdall Storage & DB Remediation Complete ===") + +if __name__ == '__main__': + main() + diff --git a/scripts/remediate_swarm_services.py b/scripts/remediate_swarm_services.py new file mode 100644 index 0000000..47961a3 --- /dev/null +++ b/scripts/remediate_swarm_services.py @@ -0,0 +1,46 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +key_path = r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet' + +def main(): + print("=== Connecting to Shipyard Swarm Manager (140.44.4.71) ===") + c = paramiko.SSHClient() + c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + try: + c.connect("140.44.4.71", username="root", key_filename=key_path, timeout=10) + except Exception as e: + print(f"Failed to connect to root@140.44.4.71: {e}") + print("Retrying with username=snarf...") + c.connect("140.44.4.71", username="snarf", key_filename=key_path, timeout=10) + + def run_cmd(cmd): + print(f"\n>>> Running: {cmd}") + stdin, stdout, stderr = c.exec_command(cmd) + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + if out: + print(out) + if err: + print(f"[stderr] {err}") + return out, err + + # 1. Inspect live Swarm stacks & services + run_cmd("docker stack ls") + run_cmd("docker service ls") + run_cmd("docker ps --filter 'name=heimdall' --filter 'name=pihole' --filter 'name=watchtower'") + + # 2. Check Heimdall mount and files + run_cmd("docker inspect $(docker ps -q -f name=heimdall) --format '{{json .Mounts}}' 2>/dev/null || true") + + # 3. Check Pi-hole stack status + run_cmd("docker stack ps pihole 2>/dev/null || true") + + c.close() + print("\n=== Inspection Complete ===") + +if __name__ == '__main__': + main() + diff --git a/scripts/remote_inspect_heimdall.py b/scripts/remote_inspect_heimdall.py new file mode 100644 index 0000000..1357b70 --- /dev/null +++ b/scripts/remote_inspect_heimdall.py @@ -0,0 +1,31 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +script = ''' +import sqlite3 + +con = sqlite3.connect('/mnt/nfs_shares/heimdall/www/app.sqlite') +cur = con.cursor() +print("=== USERS ===") +for u in cur.execute("SELECT * FROM users").fetchall(): + print(u) + +print("\\n=== ITEMS (Total %d) ===" % cur.execute("SELECT count(*) FROM items").fetchone()[0]) +for r in cur.execute("SELECT id, user_id, title, url, pinned, [order], deleted_at FROM items ORDER BY id").fetchall(): + print(r) +''' + +sftp = c.open_sftp() +with sftp.file('/tmp/inspect_heimdall.py', 'w') as f: + f.write(script) +sftp.close() + +_, stdout, _ = c.exec_command('python3 /tmp/inspect_heimdall.py') +print(stdout.read().decode()) +c.close() + diff --git a/scripts/remove_pihole_stack.py b/scripts/remove_pihole_stack.py new file mode 100644 index 0000000..7096ec6 --- /dev/null +++ b/scripts/remove_pihole_stack.py @@ -0,0 +1,28 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +print("=== Removing unused Pihole Stack from Swarm ===") +run("docker stack rm pihole") +time.sleep(5) +run("docker service ls | grep pihole || echo 'No pihole services running'") +run("docker stack ls") + +c.close() + diff --git a/scripts/reset_grafana_pass.py b/scripts/reset_grafana_pass.py new file mode 100644 index 0000000..fbbc00e --- /dev/null +++ b/scripts/reset_grafana_pass.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +_, o, _ = c.exec_command('kubectl get pod -n default -l app.kubernetes.io/name=grafana -o jsonpath="{.items[0].metadata.name}"') +pod = o.read().decode().strip() +print("Grafana pod:", pod) + +_, o2, _ = c.exec_command(f'kubectl exec -n default {pod} -- grafana-cli admin reset-admin-password "Katzir476!!!"') +print(o2.read().decode()) + +c.close() + diff --git a/scripts/restart_homepage.py b/scripts/restart_homepage.py new file mode 100644 index 0000000..f840394 --- /dev/null +++ b/scripts/restart_homepage.py @@ -0,0 +1,25 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + if res: + print(res) + if err: + print("[stderr]", err) + return res + +run("kubectl rollout restart deployment/homepage-2-1744068158 -n infrastructure") +run("kubectl rollout status deployment/homepage-2-1744068158 -n infrastructure --timeout=60s") + +c.close() + diff --git a/scripts/restructure_homepage_cm.py b/scripts/restructure_homepage_cm.py new file mode 100644 index 0000000..72b1399 --- /dev/null +++ b/scripts/restructure_homepage_cm.py @@ -0,0 +1,34 @@ +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = text.split('---') +# docs[0] = Deployment +# docs[1] = Service +# docs[2] = ConfigMap + +cm = docs[2] + +# Extract the footer +footer_marker = "kind: ConfigMap" +idx = cm.find(footer_marker) +if idx != -1: + footer = cm[idx:] + body = cm[:idx] + + # Remove apiVersion: v1 from body + body_clean = body.replace('apiVersion: v1\n', '') + + # Construct clean ConfigMap + new_cm = f""" +apiVersion: v1 +{footer.strip()} +{body_clean.strip()} +""" + docs[2] = new_cm + +new_text = '---'.join(docs) +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + f.write(new_text) + +print("Restructured homepage.yaml successfully!") + diff --git a/scripts/search_next_api.py b/scripts/search_next_api.py new file mode 100644 index 0000000..5f35979 --- /dev/null +++ b/scripts/search_next_api.py @@ -0,0 +1,15 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Search for homeassistant in .next:') +print(run(f'kubectl exec -n infrastructure {pod} -- grep -rn "homeassistant" /app/.next/server/pages/api/')) + +c.close() diff --git a/scripts/setup_argo_account.py b/scripts/setup_argo_account.py new file mode 100644 index 0000000..0a6699f --- /dev/null +++ b/scripts/setup_argo_account.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print(run('kubectl patch cm argocd-cm -n infrastructure --type merge -p \'{"data":{"accounts.homepage":"apiKey"}}\'')) +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=argocd-server -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl exec -n infrastructure {pod} -- argocd-server --version || true")) + +c.close() + diff --git a/scripts/setup_homepage_rbac.py b/scripts/setup_homepage_rbac.py new file mode 100644 index 0000000..785a66c --- /dev/null +++ b/scripts/setup_homepage_rbac.py @@ -0,0 +1,61 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if out: + print(out) + if err: + print("[stderr]", err) + return out + +rbac = """apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: homepage-reader +rules: + - apiGroups: [""] + resources: ["nodes", "namespaces", "pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] + - apiGroups: ["networking.k8s.io"] + resources: ["ingresses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["metrics.k8s.io"] + resources: ["nodes", "pods"] + verbs: ["get", "list"] + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list"] + - apiGroups: ["traefik.containo.us", "traefik.io"] + resources: ["ingressroutes", "ingressroutetcps", "ingressrouteudps", "middlewares", "traefikservices"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: homepage-reader-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: homepage-reader +subjects: + - kind: ServiceAccount + name: default + namespace: infrastructure +""" + +stdin, stdout, stderr = c.exec_command('cat > /tmp/homepage_rbac.yaml') +stdin.write(rbac) +stdin.close() +stdout.read() + +run("kubectl apply -f /tmp/homepage_rbac.yaml") +run("kubectl auth can-i list ingresses.networking.k8s.io --as=system:serviceaccount:infrastructure:default") + +c.close() diff --git a/scripts/setup_kuma_tags_status_pages.py b/scripts/setup_kuma_tags_status_pages.py new file mode 100644 index 0000000..a8fd37b --- /dev/null +++ b/scripts/setup_kuma_tags_status_pages.py @@ -0,0 +1,298 @@ +import paramiko +import sys + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if err and "Warning" not in err: + print("[stderr]", err) + return out + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +print(f"Target Pod: {pod}") + +sql_script = """ +-- 1. Create Tags +INSERT IGNORE INTO tag (id, name, color) VALUES + (1, 'core', '#3b82f6'), + (2, 'edge', '#06b6d4'), + (3, 'gitops', '#10b981'), + (4, 'storage', '#f59e0b'), + (5, 'ai', '#8b5cf6'), + (6, 'smarthome', '#14b8a6'), + (7, 'DNS', '#6366f1'), + (8, 'VIP', '#ec4899'), + (9, 'IP', '#64748b'), + (10, 'Tier-1-Critical', '#ef4444'), + (11, 'Tier-2-Operational', '#3b82f6'), + (12, 'Tier-3-Dev-Tools', '#84cc16'); + +-- 2. Clear old monitor_tag mappings and re-seed cleanly +DELETE FROM monitor_tag; + +-- Monitor mappings: (monitor_id, tag_id) +-- 52: Gotify Hub (DNS) -> edge(2), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (52, 2), (52, 7), (52, 12); +-- 53: Heimdall Portal (DNS) -> edge(2), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (53, 2), (53, 7), (53, 12); +-- 54: NPM Admin Console (DNS) -> edge(2), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (54, 2), (54, 7), (54, 10); +-- 55: Authentik SSO (DNS) -> core(1), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (55, 1), (55, 7), (55, 10); +-- 56: Rancher Management (DNS) -> core(1), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (56, 1), (56, 7), (56, 10); +-- 57: Harvester Console (DNS) -> core(1), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (57, 1), (57, 7), (57, 11); +-- 58: Gitea DevOps (DNS) -> gitops(3), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (58, 3), (58, 7), (58, 11); +-- 59: ArgoCD GitOps (DNS) -> gitops(3), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (59, 3), (59, 7), (59, 11); +-- 60: AWX Automation (DNS) -> gitops(3), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (60, 3), (60, 7), (60, 12); +-- 61: Semaphore Ansible (DNS) -> gitops(3), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (61, 3), (61, 7), (61, 11); +-- 62: Jenkins CI/CD (DNS) -> gitops(3), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (62, 3), (62, 7), (62, 12); +-- 63: Zabbix Web UI (DNS) -> core(1), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (63, 1), (63, 7), (63, 11); +-- 64: Grafana Dashboards (DNS) -> core(1), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (64, 1), (64, 7), (64, 11); +-- 65: Longhorn Aerodrome (DNS) -> storage(4), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (65, 4), (65, 7), (65, 10); +-- 66: Longhorn Spaceport (DNS) -> storage(4), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (66, 4), (66, 7), (66, 10); +-- 67: Home Assistant (DNS) -> smarthome(6), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (67, 6), (67, 7), (67, 11); +-- 68: PeaNUT UPS Portal (DNS) -> smarthome(6), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (68, 6), (68, 7), (68, 11); +-- 69: Open WebUI AI (DNS) -> ai(5), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (69, 5), (69, 7), (69, 12); +-- 70: SnarfNAS DSM (DNS) -> storage(4), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (70, 4), (70, 7), (70, 10); +-- 71: SN-NAS DSM (DNS) -> storage(4), DNS(7), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (71, 4), (71, 7), (71, 10); +-- 72: Homepage (DNS) -> edge(2), DNS(7), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (72, 2), (72, 7), (72, 11); +-- 73: MeshCentral (DNS) -> edge(2), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (73, 2), (73, 7), (73, 12); +-- 74: Homebox (DNS) -> edge(2), DNS(7), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (74, 2), (74, 7), (74, 12); +-- 76: Swarm VIP - Heimdall (VIP) -> edge(2), VIP(8), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (76, 2), (76, 8), (76, 12); +-- 77: Swarm VIP - Homebox (VIP) -> edge(2), VIP(8), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (77, 2), (77, 8), (77, 12); +-- 78: Swarm VIP - PeaNUT (VIP) -> smarthome(6), VIP(8), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (78, 6), (78, 8), (78, 11); +-- 80: Aerodrome VIP - Authentik (VIP) -> core(1), VIP(8), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (80, 1), (80, 8), (80, 10); +-- 82: Aerodrome VIP - Grafana (VIP) -> core(1), VIP(8), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (82, 1), (82, 8), (82, 11); +-- 90: Spaceport Node - Longhorn (VIP) -> storage(4), VIP(8), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (90, 4), (90, 8), (90, 10); +-- 91: Home Assistant Core (IP) -> smarthome(6), IP(9), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (91, 6), (91, 9), (91, 10); +-- 92: AI Hailo Engine (IP) -> ai(5), IP(9), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (92, 5), (92, 9), (92, 12); +-- 93: AI Open WebUI (IP) -> ai(5), IP(9), Tier-3(12) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (93, 5), (93, 9), (93, 12); +-- 94: Harvester HCI Console (VIP) -> core(1), VIP(8), Tier-2(11) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (94, 1), (94, 8), (94, 11); +-- 95: Synology NAS 1 DSM (IP) -> storage(4), IP(9), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (95, 4), (95, 9), (95, 10); +-- 96: SnarfNAS DSM (IP) -> storage(4), IP(9), Tier-1(10) +INSERT INTO monitor_tag (monitor_id, tag_id) VALUES (96, 4), (96, 9), (96, 10); + +-- 3. Upsert Status Pages +-- Status Page 1: default (Unified) +INSERT INTO status_page (id, slug, title, description, icon, theme, published, show_tags, auto_refresh_interval) +VALUES (1, 'default', 'SnarfNet Infrastructure', 'Overall health of SnarfNet endpoints and services', '/icon.svg', 'dark', 1, 1, 60) +ON DUPLICATE KEY UPDATE + title='SnarfNet Unified Infrastructure', + description='Comprehensive health of all SnarfNet clusters, edge ingress, and services', + theme='dark', + published=1, + show_tags=1, + auto_refresh_interval=60; + +-- Status Page 2: core (Tier-1 Critical & VIPs) +INSERT INTO status_page (id, slug, title, description, icon, theme, published, show_tags, auto_refresh_interval) +VALUES (2, 'core', 'SnarfNet Core Infrastructure & VIPs', 'L4 VIPs, direct hardware probes, and Tier-1 foundational cluster services', '/icon.svg', 'dark', 1, 1, 60) +ON DUPLICATE KEY UPDATE + title='SnarfNet Core Infrastructure & VIPs', + description='L4 VIPs, direct hardware probes, and Tier-1 foundational cluster services', + theme='dark', + published=1, + show_tags=1, + auto_refresh_interval=60; + +-- Status Page 3: gitops (GitOps, DevOps & CI/CD) +INSERT INTO status_page (id, slug, title, description, icon, theme, published, show_tags, auto_refresh_interval) +VALUES (3, 'gitops', 'SnarfNet GitOps & Automation Pipeline', 'Continuous delivery reconcilers, repositories, playbooks, and build automation', '/icon.svg', 'dark', 1, 1, 60) +ON DUPLICATE KEY UPDATE + title='SnarfNet GitOps & Automation Pipeline', + description='Continuous delivery reconcilers, repositories, playbooks, and build automation', + theme='dark', + published=1, + show_tags=1, + auto_refresh_interval=60; + +-- Status Page 4: edge (Edge Ingress & Portals) +INSERT INTO status_page (id, slug, title, description, icon, theme, published, show_tags, auto_refresh_interval) +VALUES (4, 'edge', 'SnarfNet Edge & Public Endpoints', 'Reverse proxy routing, user-facing portals, and perimeter gateways', '/icon.svg', 'dark', 1, 1, 60) +ON DUPLICATE KEY UPDATE + title='SnarfNet Edge & Public Endpoints', + description='Reverse proxy routing, user-facing portals, and perimeter gateways', + theme='dark', + published=1, + show_tags=1, + auto_refresh_interval=60; + +-- 4. Clean and recreate Groups & Monitor Groups +DELETE FROM monitor_group; +DELETE FROM `group`; + +-- === PAGE 1 (default) GROUPS === +INSERT INTO `group` (id, name, status_page_id, weight, public, active) VALUES + (10, 'Core Identity & Cluster Control', 1, 1, 1, 1), + (11, 'GitOps & CI/CD Pipeline', 1, 2, 1, 1), + (12, 'Observability & Monitoring', 1, 3, 1, 1), + (13, 'Storage SAN & Replicated Volumes', 1, 4, 1, 1), + (14, 'Edge Ingress & User Portals', 1, 5, 1, 1), + (15, 'Smart Home & Edge AI', 1, 6, 1, 1); + +-- Map monitors for Page 1: +-- Group 10 (Core Identity & Cluster Control) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (80, 10, 1), -- Aerodrome VIP - Authentik + (55, 10, 2), -- Authentik SSO DNS + (56, 10, 3), -- Rancher Management DNS + (94, 10, 4), -- Harvester HCI VIP + (57, 10, 5); -- Harvester Console DNS + +-- Group 11 (GitOps & CI/CD Pipeline) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (59, 11, 1), -- ArgoCD GitOps DNS + (58, 11, 2), -- Gitea DevOps DNS + (61, 11, 3), -- Semaphore Ansible DNS + (60, 11, 4), -- AWX Automation DNS + (62, 11, 5); -- Jenkins CI/CD DNS + +-- Group 12 (Observability & Monitoring) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (82, 12, 1), -- Aerodrome VIP - Grafana + (64, 12, 2), -- Grafana Dashboards DNS + (63, 12, 3); -- Zabbix Web UI DNS + +-- Group 13 (Storage SAN & Replicated Volumes) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (90, 13, 1), -- Spaceport Node - Longhorn VIP + (66, 13, 2), -- Longhorn Spaceport DNS + (65, 13, 3), -- Longhorn Aerodrome DNS + (96, 13, 4), -- SnarfNAS DSM IP + (70, 13, 5), -- SnarfNAS DSM DNS + (95, 13, 6), -- Synology NAS 1 DSM IP + (71, 13, 7); -- SN-NAS DSM DNS + +-- Group 14 (Edge Ingress & User Portals) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (54, 14, 1), -- NPM Admin Console DNS + (72, 14, 2), -- Homepage DNS + (76, 14, 3), -- Swarm VIP - Heimdall + (53, 14, 4), -- Heimdall Portal DNS + (52, 14, 5), -- Gotify Hub DNS + (77, 14, 6), -- Swarm VIP - Homebox + (74, 14, 7), -- Homebox DNS + (73, 14, 8); -- MeshCentral DNS + +-- Group 15 (Smart Home & Edge AI) +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (91, 15, 1), -- Home Assistant Core IP + (67, 15, 2), -- Home Assistant DNS + (78, 15, 3), -- Swarm VIP - PeaNUT + (68, 15, 4), -- PeaNUT UPS Portal DNS + (93, 15, 5), -- AI Open WebUI IP + (69, 15, 6), -- Open WebUI AI DNS + (92, 15, 7); -- AI Hailo Engine IP + + +-- === PAGE 2 (core) GROUPS === +INSERT INTO `group` (id, name, status_page_id, weight, public, active) VALUES + (20, 'Cluster VIPs & LoadBalancers', 2, 1, 1, 1), + (21, 'Hardware Node & SAN Storage Probes', 2, 2, 1, 1), + (22, 'Tier-1 Foundational Services', 2, 3, 1, 1); + +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (80, 20, 1), -- Aerodrome VIP - Authentik + (82, 20, 2), -- Aerodrome VIP - Grafana + (90, 20, 3), -- Spaceport Node - Longhorn VIP + (94, 20, 4), -- Harvester HCI Console VIP + (78, 20, 5), -- Swarm VIP - PeaNUT + (96, 21, 1), -- SnarfNAS DSM IP + (95, 21, 2), -- Synology NAS 1 DSM IP + (91, 21, 3), -- Home Assistant Core IP + (55, 22, 1), -- Authentik SSO DNS + (56, 22, 2), -- Rancher Management DNS + (65, 22, 3), -- Longhorn Aerodrome DNS + (66, 22, 4); -- Longhorn Spaceport DNS + + +-- === PAGE 3 (gitops) GROUPS === +INSERT INTO `group` (id, name, status_page_id, weight, public, active) VALUES + (30, 'Declarative GitOps & Repositories', 3, 1, 1, 1), + (31, 'Automation Controllers & Runners', 3, 2, 1, 1), + (32, 'CI/CD Pipelines & Dev Tools', 3, 3, 1, 1); + +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (59, 30, 1), -- ArgoCD GitOps DNS + (58, 30, 2), -- Gitea DevOps DNS + (61, 31, 1), -- Semaphore Ansible DNS + (60, 31, 2), -- AWX Automation DNS + (62, 32, 1); -- Jenkins CI/CD DNS + + +-- === PAGE 4 (edge) GROUPS === +INSERT INTO `group` (id, name, status_page_id, weight, public, active) VALUES + (40, 'Reverse Proxy & Ingress Gateways', 4, 1, 1, 1), + (41, 'Operational Dashboards & Portals', 4, 2, 1, 1), + (42, 'Remote Access & Notification Hubs', 4, 3, 1, 1); + +INSERT INTO monitor_group (monitor_id, group_id, weight) VALUES + (54, 40, 1), -- NPM Admin Console DNS + (55, 40, 2), -- Authentik SSO DNS + (72, 41, 1), -- Homepage DNS + (76, 41, 2), -- Swarm VIP - Heimdall + (53, 41, 3), -- Heimdall Portal DNS + (77, 41, 4), -- Swarm VIP - Homebox + (74, 41, 5), -- Homebox DNS + (52, 42, 1), -- Gotify Hub DNS + (73, 42, 2); -- MeshCentral DNS +""" + +stdin, stdout, stderr = c.exec_command(f"kubectl exec -n monitoring {pod} -i -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma") +stdin.write(sql_script) +stdin.close() + +out = stdout.read().decode() +err = stderr.read().decode() + +if out: + print("[Output]", out) +if err: + print("[Errors]", err) + +print("\n=== VERIFYING STATUS PAGES ===") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, slug, title, show_tags, published FROM status_page;" """)) + +print("\n=== VERIFYING TAG COUNTS ===") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT t.name, t.color, count(mt.monitor_id) AS total_monitors FROM tag t LEFT JOIN monitor_tag mt ON t.id = mt.tag_id GROUP BY t.id;" """)) + +print("\n=== VERIFYING GROUP COUNTS PER STATUS PAGE ===") +print(run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT sp.slug, g.name AS group_name, count(mg.monitor_id) AS monitors FROM status_page sp JOIN \`group\` g ON sp.id = g.status_page_id LEFT JOIN monitor_group mg ON g.id = mg.group_id GROUP BY g.id ORDER BY sp.id, g.weight;" """)) + +c.close() + diff --git a/scripts/sync_argocd_app.py b/scripts/sync_argocd_app.py new file mode 100644 index 0000000..221d79d --- /dev/null +++ b/scripts/sync_argocd_app.py @@ -0,0 +1,44 @@ +import requests +import json +import time +import urllib3 +urllib3.disable_warnings() + +token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0" +headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" +} + +# 1. Hard refresh aerodrome-grafana +url_refresh = "https://argo.snarfnet.net/api/v1/applications/aerodrome-grafana?refresh=hard" +resp = requests.get(url_refresh, headers=headers, verify=False, timeout=15) +print("Hard refresh status:", resp.status_code) + +time.sleep(3) + +# 2. Trigger sync +url_sync = "https://argo.snarfnet.net/api/v1/applications/aerodrome-grafana/sync" +sync_payload = { + "revision": "HEAD", + "prune": False, + "strategy": {"hook": {"force": True}} +} +resp_sync = requests.post(url_sync, headers=headers, json=sync_payload, verify=False, timeout=15) +print("Sync trigger status:", resp_sync.status_code) +if resp_sync.status_code not in [200, 201]: + print("Response:", resp_sync.text) + +time.sleep(5) + +# 3. Check status +url_app = "https://argo.snarfnet.net/api/v1/applications/aerodrome-grafana" +resp_app = requests.get(url_app, headers=headers, verify=False, timeout=10) +app_data = resp_app.json() + +print("\n=== APPLICATION STATUS ===") +print("Sync Status:", app_data.get("status", {}).get("sync", {}).get("status")) +print("Health Status:", app_data.get("status", {}).get("health", {}).get("status")) +print("Operation Phase:", app_data.get("status", {}).get("operationState", {}).get("phase")) +print("Operation Message:", app_data.get("status", {}).get("operationState", {}).get("message")) + diff --git a/scripts/sync_homepage.py b/scripts/sync_homepage.py new file mode 100644 index 0000000..df99202 --- /dev/null +++ b/scripts/sync_homepage.py @@ -0,0 +1,23 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if out: + print(out) + if err: + print("[stderr]", err) + return out + +run("kubectl rollout restart deployment/homepage-2-1744068158 -n infrastructure") +run("kubectl rollout status deployment/homepage-2-1744068158 -n infrastructure --timeout=60s") + +c.close() + diff --git a/scripts/test_aerodrome_prom.py b/scripts/test_aerodrome_prom.py new file mode 100644 index 0000000..493e165 --- /dev/null +++ b/scripts/test_aerodrome_prom.py @@ -0,0 +1,6 @@ +import requests + +r = requests.get('http://140.44.4.11:30090/api/v1/query?query=up') +print("Status:", r.status_code) +print("Targets up:", len(r.json().get('data', {}).get('result', []))) + diff --git a/scripts/test_ai_metrics.py b/scripts/test_ai_metrics.py new file mode 100644 index 0000000..e17ccc9 --- /dev/null +++ b/scripts/test_ai_metrics.py @@ -0,0 +1,20 @@ +import requests + +endpoints = [ + ("vLLM Qwen (30800)", "http://140.44.4.84:30800/metrics"), + ("vLLM Gemma4 (30804)", "http://140.44.4.82:30804/metrics"), + ("vLLM DeepSeek-R1 (30805)", "http://140.44.4.81:30805/metrics"), + ("Triton (30803)", "http://140.44.4.83:30803/metrics"), + ("Qdrant (30633)", "http://140.44.4.82:30633/metrics"), +] + +for name, url in endpoints: + try: + r = requests.get(url, timeout=5) + print(f"{name}: HTTP {r.status_code}, length={len(r.text)}") + sample_metrics = [line for line in r.text.split('\n') if line and not line.startswith('#')][:5] + for sm in sample_metrics: + print(f" {sm}") + except Exception as e: + print(f"{name}: Failed -> {e}") + diff --git a/scripts/test_argo_api.py b/scripts/test_argo_api.py new file mode 100644 index 0000000..08a93d7 --- /dev/null +++ b/scripts/test_argo_api.py @@ -0,0 +1,8 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0" +headers = {"Authorization": f"Bearer {token}"} +r = requests.get("https://argo.snarfnet.net/api/v1/applications", headers=headers, verify=False) +print("Argo apps with homepage token:", r.status_code, len(r.json().get('items', []))) diff --git a/scripts/test_audit_devices.py b/scripts/test_audit_devices.py new file mode 100644 index 0000000..a5c844d --- /dev/null +++ b/scripts/test_audit_devices.py @@ -0,0 +1,19 @@ +import subprocess +import json + +devices = [ + ("Dell PowerEdge Node 4 iDRAC", "140.44.44.124"), + ("UniFi Aggregation Switch", "14.44.4.26"), + ("UniFi Closet Switch", "14.44.4.61"), + ("UniFi Compute Switch", "14.44.4.107"), + ("UniFi Attic Switch", "14.44.4.98"), + ("UniFi Garage Switch", "14.44.4.96"), + ("Tempest Weather Station", "14.4.4.47"), + ("Sense Energy Gateway", "14.4.4.48"), +] + +for name, ip in devices: + res = subprocess.run(["ping", "-n", "1", "-w", "1000", ip], capture_output=True, text=True) + status = "ONLINE" if res.returncode == 0 else "OFFLINE" + print(f"[{status}] {name} ({ip})") + diff --git a/scripts/test_cluster_widgets.py b/scripts/test_cluster_widgets.py new file mode 100644 index 0000000..cdb1797 --- /dev/null +++ b/scripts/test_cluster_widgets.py @@ -0,0 +1,76 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +headers = {"User-Agent": "Mozilla/5.0"} + +print("=== 1. Spaceport Kubernetes Cluster Metrics ===") +try: + r = requests.get("https://homepage.snarfnet.net/api/widgets/kubernetes", headers=headers, verify=False, timeout=10) + data = r.json() + cpu = data.get("cluster", {}).get("cpu", {}) + mem = data.get("cluster", {}).get("memory", {}) + print(f"Status: {r.status_code}") + print(f" CPU Load: {cpu.get('load', 0):.2f} / {cpu.get('total')} cores ({cpu.get('percent', 0):.1f}%)") + print(f" Memory: {mem.get('used', 0)/(1024**3):.1f} / {mem.get('total', 0)/(1024**3):.1f} GiB ({mem.get('percent', 0):.1f}%)") + print(f" Nodes: {len(data.get('nodes', []))} nodes online") +except Exception as e: + print("Error:", e) + +print("\n=== 2. Longhorn Spaceport Storage Metrics ===") +try: + r = requests.get("https://homepage.snarfnet.net/api/widgets/longhorn", headers=headers, verify=False, timeout=10) + data = r.json() + for n in data.get("nodes", []): + if n.get("id") == "total": + max_gb = n.get("maximum", 0) / (1024**3) + avail_gb = n.get("available", 0) / (1024**3) + used_gb = max_gb - avail_gb + print(f"Status: {r.status_code}") + print(f" Storage Total: {max_gb:.1f} GiB ({max_gb/1024:.2f} TiB)") + print(f" Storage Used: {used_gb:.1f} GiB ({used_gb/max_gb*100:.1f}%)") + print(f" Storage Available: {avail_gb:.1f} GiB") +except Exception as e: + print("Error:", e) + +print("\n=== 3. Portainer Swarm Metrics ===") +try: + url = "https://homepage.snarfnet.net/api/services/proxy?group=Storage%20%26%20Clusters&service=Portainer%20Swarm&index=0&endpoint=docker/containers" + r = requests.get(url, headers=headers, verify=False, timeout=10) + print(f"Status: {r.status_code}") + if r.status_code == 200: + containers = r.json() + running = len([c for c in containers if c.get("State") == "running"]) + stopped = len([c for c in containers if c.get("State") == "exited"]) + print(f" Containers: Running: {running}, Stopped: {stopped}, Total: {len(containers)}") +except Exception as e: + print("Error:", e) + +print("\n=== 4. Rancher (Aerodrome Cluster) Metrics ===") +try: + url = "https://homepage.snarfnet.net/api/services/proxy?group=Storage%20%26%20Clusters&service=Rancher%20(Aerodrome)&index=0" + r = requests.get(url, headers=headers, verify=False, timeout=10) + print(f"Status: {r.status_code}") + if r.status_code == 200: + d = r.json() + cap = d.get("capacity", {}) + print(f" Cluster State: {d.get('state')}, CPU Cores: {cap.get('cpu')}, Max Pods: {cap.get('pods')}") + else: + print(r.text[:200]) +except Exception as e: + print("Error:", e) + +print("\n=== 5. Harvester HCI (Spacedock Cluster) Metrics ===") +try: + url = "https://homepage.snarfnet.net/api/services/proxy?group=Storage%20%26%20Clusters&service=Harvester%20HCI%20(Spacedock)&index=0" + r = requests.get(url, headers=headers, verify=False, timeout=10) + print(f"Status: {r.status_code}") + if r.status_code == 200: + d = r.json() + cap = d.get("capacity", {}) + print(f" HCI State: {d.get('state')}, CPU Cores: {cap.get('cpu')}, Max Pods: {cap.get('pods')}") + else: + print(r.text[:200]) +except Exception as e: + print("Error:", e) diff --git a/scripts/test_dcgm.py b/scripts/test_dcgm.py new file mode 100644 index 0000000..adb0b3c --- /dev/null +++ b/scripts/test_dcgm.py @@ -0,0 +1,9 @@ +import requests + +for ip in ["140.44.4.81", "140.44.4.82", "140.44.4.83", "140.44.4.84"]: + try: + r = requests.get(f"http://{ip}:9400/metrics", timeout=2) + print(f"{ip}:9400 -> HTTP {r.status_code}") + except Exception as e: + print(f"{ip}:9400 -> Not reachable: {e}") + diff --git a/scripts/test_dcgm_metrics.py b/scripts/test_dcgm_metrics.py new file mode 100644 index 0000000..cfbda32 --- /dev/null +++ b/scripts/test_dcgm_metrics.py @@ -0,0 +1,12 @@ +import requests + +for ip in ["140.44.4.81", "140.44.4.82", "140.44.4.83", "140.44.4.84"]: + try: + r = requests.get(f"http://{ip}:9400/metrics", timeout=3) + print(f"=== {ip}:9400 -> HTTP {r.status_code}, len={len(r.text)} ===") + gpu_metrics = [line for line in r.text.split('\n') if 'DCGM_FI_DEV_GPU_UTIL' in line or 'DCGM_FI_DEV_FB_USED' in line or 'DCGM_FI_DEV_GPU_TEMP' in line] + for m in gpu_metrics[:3]: + print(" ", m) + except Exception as e: + print(f"{ip}:9400 -> error: {e}") + diff --git a/scripts/test_dcgm_nvml.py b/scripts/test_dcgm_nvml.py new file mode 100644 index 0000000..4cc59f0 --- /dev/null +++ b/scripts/test_dcgm_nvml.py @@ -0,0 +1,74 @@ +import paramiko +import time + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; {cmd}'") + out = stdout.read().decode().strip() + return out + +manifest = """ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: dcgm-exporter + namespace: ai-stack + labels: + app.kubernetes.io/name: dcgm-exporter +spec: + selector: + matchLabels: + app.kubernetes.io/name: dcgm-exporter + template: + metadata: + labels: + app.kubernetes.io/name: dcgm-exporter + spec: + hostNetwork: true + containers: + - name: dcgm-exporter + image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.8-3.6.0-ubuntu22.04 + env: + - name: DCGM_EXPORTER_LISTEN + value: ":9400" + - name: DCGM_EXPORTER_KUBERNETES + value: "false" + - name: LD_LIBRARY_PATH + value: "/usr/local/nvidia/lib64" + securityContext: + privileged: true + ports: + - name: metrics + containerPort: 9400 + volumeMounts: + - name: dev + mountPath: /dev + - name: nvidia-lib + mountPath: /usr/local/nvidia/lib64 + readOnly: true + volumes: + - name: dev + hostPath: + path: /dev + - name: nvidia-lib + hostPath: + path: /usr/local/nvidia/lib64 +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/dcgm.yaml") +stdin.write(manifest) +stdin.close() +stdout.channel.recv_exit_status() + +print("Applying DCGM Exporter with NVML mounts:") +print(run("kubectl apply -f /tmp/dcgm.yaml")) +time.sleep(10) +pod = run("kubectl get pod -n ai-stack -l app.kubernetes.io/name=dcgm-exporter -o jsonpath='{.items[0].metadata.name}'") +print("Logs from", pod) +print(run(f"kubectl logs -n ai-stack {pod} --tail=25")) + +c.close() + diff --git a/scripts/test_dcgm_pull.py b/scripts/test_dcgm_pull.py new file mode 100644 index 0000000..9c02f03 --- /dev/null +++ b/scripts/test_dcgm_pull.py @@ -0,0 +1,12 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c '{cmd}'") + return stdout.read().decode().strip() + +print(run("crictl images | grep dcgm")) +c.close() diff --git a/scripts/test_deploy_dcgm.py b/scripts/test_deploy_dcgm.py new file mode 100644 index 0000000..a3943b8 --- /dev/null +++ b/scripts/test_deploy_dcgm.py @@ -0,0 +1,59 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.90', username='rancher', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + stdin, stdout, stderr = c.exec_command(f"echo Katzir476! | sudo -S sh -c 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml; PATH=$PATH:/var/lib/rancher/rke2/bin; {cmd}'") + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +manifest = """ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: dcgm-exporter + namespace: ai-stack + labels: + app.kubernetes.io/name: dcgm-exporter +spec: + selector: + matchLabels: + app.kubernetes.io/name: dcgm-exporter + template: + metadata: + labels: + app.kubernetes.io/name: dcgm-exporter + spec: + hostNetwork: true + containers: + - name: dcgm-exporter + image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.8-3.6.0-ubuntu22.04 + env: + - name: DCGM_EXPORTER_LISTEN + value: ":9400" + - name: DCGM_EXPORTER_KUBERNETES + value: "false" + securityContext: + privileged: true + ports: + - name: metrics + containerPort: 9400 +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/dcgm.yaml") +stdin.write(manifest) +stdin.close() +stdout.channel.recv_exit_status() + +print("Applying DCGM Exporter:") +print(run("kubectl apply -f /tmp/dcgm.yaml")) +import time +time.sleep(5) +print("Pods:") +print(run("kubectl get pods -n ai-stack -l app.kubernetes.io/name=dcgm-exporter -o wide")) + +c.close() + diff --git a/scripts/test_from_host.py b/scripts/test_from_host.py new file mode 100644 index 0000000..7d3f6ad --- /dev/null +++ b/scripts/test_from_host.py @@ -0,0 +1,25 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +print("DNS for harvester.spacedock.snarfnet.net:") +print(run("dig +short harvester.spacedock.snarfnet.net || getent hosts harvester.spacedock.snarfnet.net")) + +print("DNS for harvester.snarfnet.net:") +print(run("dig +short harvester.snarfnet.net || getent hosts harvester.snarfnet.net")) + +print("Jenkins HTTP status:") +print(run("curl -k -I https://jenkins.snarfnet.net")) + +print("NUT 14.4.4.44:3493 test:") +print(run("nc -z -v -w 2 14.4.4.44 3493 || true")) + +c.close() + diff --git a/scripts/test_gitea_widget.py b/scripts/test_gitea_widget.py new file mode 100644 index 0000000..7895a8c --- /dev/null +++ b/scripts/test_gitea_widget.py @@ -0,0 +1,9 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +headers = {"Authorization": "token f19e772cf54e40ceb2befe452e2bc24dd81fdb71"} +url = "https://git.snarfnet.net/api/v1/user" + +r = requests.get(url, headers=headers, verify=False, timeout=5) +print("Gitea user:", r.status_code, r.json().get('username')) diff --git a/scripts/test_glances_endpoint.py b/scripts/test_glances_endpoint.py new file mode 100644 index 0000000..281342b --- /dev/null +++ b/scripts/test_glances_endpoint.py @@ -0,0 +1,15 @@ +import requests + +for v in [3, 4]: + try: + r = requests.get(f"http://140.44.4.11:61208/api/{v}/quicklook", timeout=3) + print(f"Glances v{v} status:", r.status_code, r.text[:200]) + except Exception as e: + print(f"Glances v{v} err:", e) + + try: + r = requests.get(f"http://140.44.4.11:61208/api/{v}/cpu", timeout=3) + print(f"Glances v{v} cpu:", r.status_code, r.text[:200]) + except Exception as e: + print(f"Glances v{v} cpu err:", e) + diff --git a/scripts/test_gotify_health.py b/scripts/test_gotify_health.py new file mode 100644 index 0000000..7abf0e4 --- /dev/null +++ b/scripts/test_gotify_health.py @@ -0,0 +1,16 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +try: + r = requests.get('http://140.44.4.70:8090/health', timeout=5) + print("Gotify VIP /health:", r.status_code, r.text) +except Exception as e: + print("Gotify VIP error:", e) + +try: + r = requests.get('https://gotify.snarfnet.net/health', verify=False, timeout=5) + print("Gotify DNS /health:", r.status_code, r.text) +except Exception as e: + print("Gotify DNS error:", e) + diff --git a/scripts/test_grafana_admin.py b/scripts/test_grafana_admin.py new file mode 100644 index 0000000..a4ba98c --- /dev/null +++ b/scripts/test_grafana_admin.py @@ -0,0 +1,8 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +auth = ('admin', 'Katzir476!!!') +r = requests.get("https://grafana.snarfnet.net/api/admin/stats", auth=auth, verify=False) +print("Admin stats with user admin:", r.status_code, r.text) + diff --git a/scripts/test_grafana_sa.py b/scripts/test_grafana_sa.py new file mode 100644 index 0000000..14842f3 --- /dev/null +++ b/scripts/test_grafana_sa.py @@ -0,0 +1,14 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +auth = ('admin', 'Katzir476!!!') +sa_url = "https://grafana.snarfnet.net/api/serviceaccounts" +r_sa = requests.post(sa_url, auth=auth, json={"name": "homepage-viewer", "role": "Viewer"}, verify=False) +print("Create SA:", r_sa.status_code, r_sa.text) +if r_sa.status_code in (200, 201): + sa_id = r_sa.json().get('id') + tok_url = f"https://grafana.snarfnet.net/api/serviceaccounts/{sa_id}/tokens" + r_tok = requests.post(tok_url, auth=auth, json={"name": "homepage-key"}, verify=False) + print("Token created:", r_tok.status_code, r_tok.json()) diff --git a/scripts/test_grafana_token.py b/scripts/test_grafana_token.py new file mode 100644 index 0000000..e76920f --- /dev/null +++ b/scripts/test_grafana_token.py @@ -0,0 +1,11 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +headers = {"Authorization": "Bearer glsa_71Y8I8DSZt3nXUNFzygnmBcEF4FUmWdw_1f03e67c"} + +for ep in ["stats", "admin/stats", "search", "datasources", "alerts"]: + r = requests.get(f"https://grafana.snarfnet.net/api/{ep}", headers=headers, verify=False) + print(f"{ep}: status={r.status_code}", r.text[:150]) + diff --git a/scripts/test_grafana_yaml.py b/scripts/test_grafana_yaml.py new file mode 100644 index 0000000..f190fbf --- /dev/null +++ b/scripts/test_grafana_yaml.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("File size /tmp/grafana_full.yaml:", run("ls -l /tmp/grafana_full.yaml")) +print("Testing kubectl apply with --dry-run=client:") +print(run("kubectl apply -f /tmp/grafana_full.yaml --dry-run=client")) + +c.close() + diff --git a/scripts/test_group_sql.py b/scripts/test_group_sql.py new file mode 100644 index 0000000..1d28cf8 --- /dev/null +++ b/scripts/test_group_sql.py @@ -0,0 +1,20 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if err: + print("ERR:", err) + return out + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") + +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'INSERT INTO monitor_group (monitor_id, group_id, weight) SELECT id, 1, 1000 FROM monitor WHERE active=1;'")) +print(run(f"kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root kuma -e 'SELECT count(id) FROM monitor_group;'")) + +c.close() diff --git a/scripts/test_ha_template.py b/scripts/test_ha_template.py new file mode 100644 index 0000000..3df4d63 --- /dev/null +++ b/scripts/test_ha_template.py @@ -0,0 +1,22 @@ +import requests + +url = "http://14.4.4.20:8123/api/template" +key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4" + +headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json" +} + +tests = [ + "{{ states('sensor.st_00158555_temperature') | float | round(1) }} °F", + "{{ '%.1f' | format(states('sensor.st_00158555_temperature') | float) }} °F", + "{{ states('sensor.st_00158555_wind_speed') | float | round(1) }} mph", + "{{ '%.1f' | format(states('sensor.st_00158555_wind_speed') | float) }} mph", + "{{ states('sensor.st_00158555_humidity') | float | round(1) }} %", + "{{ '%.1f' | format(states('sensor.st_00158555_humidity') | float) }} %", +] + +for t in tests: + res = requests.post(url, headers=headers, json={"template": t}) + print(f"{t} => {res.text}") diff --git a/scripts/test_homepage_backends.py b/scripts/test_homepage_backends.py new file mode 100644 index 0000000..ce5d567 --- /dev/null +++ b/scripts/test_homepage_backends.py @@ -0,0 +1,31 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def test_url(name, cmd): + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + err = e.read().decode().strip() + print(f"\n--- {name} ---") + if res: + print(res[:300]) + if err: + print("[stderr]", err[:200]) + +test_url("Gitea direct VIP", "curl -s -I http://140.44.4.62:90/api/v1/user -H 'Authorization: token 47c10c54574131c007302b246352f653facb5062'") +test_url("Gitea DNS", "curl -k -s -I https://git.snarfnet.net/api/v1/user -H 'Authorization: token 47c10c54574131c007302b246352f653facb5062'") +test_url("PeaNUT direct VIP", "curl -s -I http://140.44.4.70:8050/api/v1/devices") +test_url("PeaNUT DNS", "curl -k -s -I https://peanut.snarfnet.net/api/v1/devices") +test_url("Uptime Kuma direct VIP", "curl -s -I http://140.44.4.28:448/api/status-page/public") +test_url("Uptime Kuma DNS", "curl -k -s -I https://uptime.snarfnet.net/api/status-page/public") +test_url("NPM DNS", "curl -k -s -I https://nginx.snarfnet.net/api/") +test_url("Glances 140.44.4.11:61208", "curl -s -I http://140.44.4.11:61208/api/4/cpu") +test_url("Longhorn Aerodrome direct", "curl -s -I http://140.44.4.36:80/v1") +test_url("Longhorn Aerodrome DNS", "curl -k -s -I https://longhorn.aerodrome.snarfnet.net/v1") + +c.close() + diff --git a/scripts/test_homepage_http.py b/scripts/test_homepage_http.py new file mode 100644 index 0000000..bc95fe7 --- /dev/null +++ b/scripts/test_homepage_http.py @@ -0,0 +1,11 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +try: + resp = requests.get('https://homepage.snarfnet.net', verify=False, timeout=10) + print("Status:", resp.status_code) + print("Length:", len(resp.text)) +except Exception as e: + print("Error:", e) + diff --git a/scripts/test_homepage_static.py b/scripts/test_homepage_static.py new file mode 100644 index 0000000..c98f737 --- /dev/null +++ b/scripts/test_homepage_static.py @@ -0,0 +1,13 @@ +import urllib.request, ssl + +ctx = ssl._create_unverified_context() +for path in ['/topology.png', '/topology.html']: + url = 'https://homepage.snarfnet.net' + path + try: + req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) + with urllib.request.urlopen(req, context=ctx, timeout=10) as r: + data = r.read() + print(f'{url} -> HTTP {r.status}, length: {len(data)} bytes, Content-Type: {r.headers.get("Content-Type")}') + except Exception as e: + print(f'{url} -> Error: {e}') + diff --git a/scripts/test_homepage_tempest_api.py b/scripts/test_homepage_tempest_api.py new file mode 100644 index 0000000..bc4bbc2 --- /dev/null +++ b/scripts/test_homepage_tempest_api.py @@ -0,0 +1,19 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +# Let's test the widget API endpoint on homepage +url = "https://homepage.snarfnet.net/api/services/proxy?group=Environment%20%26%20Weather&service=Tempest%20Weather%20Station&index=0" + +headers = { + "User-Agent": "Mozilla/5.0" +} + +try: + r = requests.get(url, headers=headers, verify=False, timeout=10) + print("Status code:", r.status_code) + print("Response body:") + print(json.dumps(r.json(), indent=2)) +except Exception as e: + print("Error:", e) diff --git a/scripts/test_info_widgets.py b/scripts/test_info_widgets.py new file mode 100644 index 0000000..c3256f4 --- /dev/null +++ b/scripts/test_info_widgets.py @@ -0,0 +1,16 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +headers = {"User-Agent": "Mozilla/5.0"} + +for ep in ["kubernetes", "longhorn"]: + url = f"https://homepage.snarfnet.net/api/widgets/{ep}" + try: + r = requests.get(url, headers=headers, verify=False, timeout=10) + print(f"=== {ep} (status {r.status_code}) ===") + print(json.dumps(r.json(), indent=2)[:500]) + except Exception as e: + print(f"=== {ep} ERROR ===", e) + diff --git a/scripts/test_kubelet_token.py b/scripts/test_kubelet_token.py new file mode 100644 index 0000000..13a26b6 --- /dev/null +++ b/scripts/test_kubelet_token.py @@ -0,0 +1,19 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +test_script = """ +TOKEN=$(kubectl create token default --duration=1h) +echo "Token length: ${#TOKEN}" +curl -sk -H "Authorization: Bearer $TOKEN" https://localhost:6443/api/v1/nodes/sninfr2lnxctl01/proxy/metrics/cadvisor | head -n 15 +""" + +print(run(test_script)) +c.close() + diff --git a/scripts/test_kuma_failing_monitors.py b/scripts/test_kuma_failing_monitors.py new file mode 100644 index 0000000..29d02f6 --- /dev/null +++ b/scripts/test_kuma_failing_monitors.py @@ -0,0 +1,23 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + return out + +pod = "uptime-kuma-2-1756668961-7cbccffbbb-mbb64" +print("Harvester DNS test:") +print(run(f"kubectl exec -n monitoring {pod} -- nslookup harvester.spacedock.snarfnet.net || nslookup harvester.snarfnet.net || true")) + +print("\nJenkins HTTP test:") +print(run(f"kubectl exec -n monitoring {pod} -- wget -S -O /dev/null https://jenkins.snarfnet.net 2>&1 | head -n 15")) + +print("\nNUT test:") +print(run(f"kubectl exec -n monitoring {pod} -- nc -zv 14.4.4.44 3493 || nc -zv 140.44.4.44 3493 || true")) + +c.close() + diff --git a/scripts/test_kuma_internal.py b/scripts/test_kuma_internal.py new file mode 100644 index 0000000..f8652c5 --- /dev/null +++ b/scripts/test_kuma_internal.py @@ -0,0 +1,9 @@ +import requests + +for url in ["http://140.44.4.28:448", "http://140.44.4.11:30010", "http://140.44.4.21:30010"]: + try: + r = requests.get(f"{url}/api/status-page/default", timeout=3) + print(url, "status:", r.status_code, r.text[:100]) + except Exception as e: + print(url, "err:", e) + diff --git a/scripts/test_kuma_live.py b/scripts/test_kuma_live.py new file mode 100644 index 0000000..a217c80 --- /dev/null +++ b/scripts/test_kuma_live.py @@ -0,0 +1,8 @@ +import requests + +r1 = requests.get("http://140.44.4.28:448/api/status-page/default") +print("status-page:", r1.status_code, r1.json().get('config', {}).get('title')) + +r2 = requests.get("http://140.44.4.28:448/api/status-page/heartbeat/default") +print("heartbeat:", r2.status_code, len(r2.json().get('heartbeatList', {}))) + diff --git a/scripts/test_kuma_slug.py b/scripts/test_kuma_slug.py new file mode 100644 index 0000000..f3a5e49 --- /dev/null +++ b/scripts/test_kuma_slug.py @@ -0,0 +1,9 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +r = requests.get("https://uptime.snarfnet.net/api/status-page/heartbeat/default", verify=False) +print("text:", r.text[:300]) + +r2 = requests.get("https://uptime.snarfnet.net/api/status-page/default", verify=False) +print("status-page:", r2.text[:300]) diff --git a/scripts/test_kuma_status_pages.py b/scripts/test_kuma_status_pages.py new file mode 100644 index 0000000..2d67bb9 --- /dev/null +++ b/scripts/test_kuma_status_pages.py @@ -0,0 +1,20 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +slugs = ['default', 'core', 'gitops', 'edge'] +base = "http://140.44.4.28:448/api/status-page" + +for slug in slugs: + try: + url = f"{base}/{slug}" + r = requests.get(url, verify=False, timeout=5) + data = r.json() + config = data.get("config", {}) + groups = data.get("publicGroupList", []) + total_m = sum(len(g.get("monitorList", [])) for g in groups) + print(f"[{slug}] Status: {r.status_code} | Title: '{config.get('title')}' | Groups: {len(groups)} | Monitors: {total_m} | ShowTags: {config.get('showTags')}") + except Exception as e: + print(f"[{slug}] Error: {e}") + diff --git a/scripts/test_peanut.py b/scripts/test_peanut.py new file mode 100644 index 0000000..e1906f4 --- /dev/null +++ b/scripts/test_peanut.py @@ -0,0 +1,7 @@ +import requests + +try: + r = requests.get("http://140.44.4.71:8050/api/v1/devices", timeout=3) + print("PeaNUT on 71:", r.status_code, r.json()) +except Exception as e: + print("PeaNUT on 71 err:", e) diff --git a/scripts/test_pod_ha.py b/scripts/test_pod_ha.py new file mode 100644 index 0000000..6f9161e --- /dev/null +++ b/scripts/test_pod_ha.py @@ -0,0 +1,18 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + return out + ("\nERR: " + err if err else "") + +pod = run('kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath="{.items[0].metadata.name}"') +print('Pod:', pod) +print('Testing wget -S:') +print(run(f'kubectl exec -n infrastructure {pod} -- wget -S -O /dev/null http://14.4.4.20:8123/api/')) + +c.close() diff --git a/scripts/test_portainer_auth.py b/scripts/test_portainer_auth.py new file mode 100644 index 0000000..8ce2b65 --- /dev/null +++ b/scripts/test_portainer_auth.py @@ -0,0 +1,13 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +url = "https://140.44.4.71:9443/api/auth" +res = requests.post(url, json={"username": "admin", "password": "Cfxg0GqDfocWcteE"}, verify=False) +jwt = res.json().get("jwt") +headers = {"Authorization": f"Bearer {jwt}"} + +r_create = requests.post("https://140.44.4.71:9443/api/users/1/tokens", headers=headers, json={"description": "homepage-dashboard", "password": "Cfxg0GqDfocWcteE"}, verify=False) +print("Create token status:", r_create.status_code) +print("Token response:", r_create.json()) diff --git a/scripts/test_portainer_endpoint.py b/scripts/test_portainer_endpoint.py new file mode 100644 index 0000000..c0a12b4 --- /dev/null +++ b/scripts/test_portainer_endpoint.py @@ -0,0 +1,17 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +headers = {"User-Agent": "Mozilla/5.0"} +url = "https://homepage.snarfnet.net/api/services/proxy?group=Storage%20%26%20Clusters&service=Portainer%20Swarm&index=0&endpoint=docker/containers" + +r = requests.get(url, headers=headers, verify=False, timeout=10) +print(f"Status: {r.status_code}") +if r.status_code == 200: + containers = r.json() + running = len([c for c in containers if c.get("State") == "running"]) + stopped = len([c for c in containers if c.get("State") == "exited"]) + print(f"Containers - Running: {running}, Stopped: {stopped}, Total: {len(containers)}") +else: + print(r.text) + diff --git a/scripts/test_portainer_key.py b/scripts/test_portainer_key.py new file mode 100644 index 0000000..c58e3b0 --- /dev/null +++ b/scripts/test_portainer_key.py @@ -0,0 +1,15 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +headers = {"X-API-Key": "ptr_TCVm8ujeB4zT0oRejyMCwKw5enaPG/uKj1KuF0uOWX8="} +url = "https://140.44.4.71:9443/api/endpoints/3/docker/containers/json?all=1" + +r = requests.get(url, headers=headers, verify=False) +print("Portainer containers status:", r.status_code) +if r.status_code == 200: + data = r.json() + running = len([c for c in data if c.get("State") == "running"]) + stopped = len([c for c in data if c.get("State") == "exited"]) + print(f"Containers: Running: {running}, Stopped: {stopped}, Total: {len(data)}") + diff --git a/scripts/test_prom_data.py b/scripts/test_prom_data.py new file mode 100644 index 0000000..f3d14ee --- /dev/null +++ b/scripts/test_prom_data.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Node count:", run("kubectl exec deployment/prometheus -- wget -qO- 'http://localhost:9090/api/v1/query?query=count(node_load1)'")) +print("Container count:", run("kubectl exec deployment/prometheus -- wget -qO- 'http://localhost:9090/api/v1/query?query=count(container_cpu_usage_seconds_total)'")) +c.close() + diff --git a/scripts/test_prom_rbac.py b/scripts/test_prom_rbac.py new file mode 100644 index 0000000..5711d36 --- /dev/null +++ b/scripts/test_prom_rbac.py @@ -0,0 +1,56 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +test_script = """ +cat << 'EOF' | kubectl apply -f - +apiVersion: v1 +kind: ServiceAccount +metadata: + name: prometheus + namespace: default +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: prometheus +rules: + - apiGroups: [""] + resources: + - nodes + - nodes/proxy + - nodes/metrics + - services + - endpoints + - pods + verbs: ["get", "list", "watch"] + - nonResourceURLs: ["/metrics", "/metrics/cadvisor"] + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: prometheus +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus +subjects: + - kind: ServiceAccount + name: prometheus + namespace: default +EOF + +TOKEN=$(kubectl create token prometheus --duration=1h) +curl -sk -H "Authorization: Bearer $TOKEN" https://localhost:6443/api/v1/nodes/sninfr2lnxctl01/proxy/metrics/cadvisor | head -n 15 +""" + +print(run(test_script)) +c.close() + diff --git a/scripts/test_pull_node_exporter.py b/scripts/test_pull_node_exporter.py new file mode 100644 index 0000000..6330a80 --- /dev/null +++ b/scripts/test_pull_node_exporter.py @@ -0,0 +1,14 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +print("Testing crictl pull prom/node-exporter:v1.8.2:") +print(run("crictl pull prom/node-exporter:v1.8.2")) +c.close() + diff --git a/scripts/test_rancher_api.py b/scripts/test_rancher_api.py new file mode 100644 index 0000000..4c409b3 --- /dev/null +++ b/scripts/test_rancher_api.py @@ -0,0 +1,19 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +# Let's test Rancher endpoints +urls = [ + "https://aerodrome.snarfnet.net/v3/clusters", + "https://140.44.4.34/v3/clusters", + "http://140.44.4.11:80/v3/clusters" +] + +for u in urls: + try: + r = requests.get(u, verify=False, timeout=5) + print(u, "->", r.status_code, r.text[:200]) + except Exception as e: + print(u, "-> ERR:", e) + diff --git a/scripts/test_rancher_customapi.py b/scripts/test_rancher_customapi.py new file mode 100644 index 0000000..f5210b8 --- /dev/null +++ b/scripts/test_rancher_customapi.py @@ -0,0 +1,18 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +full_key = "kubeconfig-u-aqzkufonck4hmbd:bw22b96nv8844k8w5r8lzpz8gnk22tjwj95j6nkzr7hd5dhm4bs6z7" +headers = { + "Authorization": f"Bearer {full_key}", + "Accept": "application/json" +} + +for cid in ["local", "c-cclnt"]: + r = requests.get(f"https://aerodrome.snarfnet.net/v3/clusters/{cid}", headers=headers, verify=False, timeout=10) + print(f"Cluster {cid} status: {r.status_code}") + if r.status_code == 200: + d = r.json() + print(f"Name: {d.get('name')}, State: {d.get('state')}") + print("Capacity:", d.get('capacity')) diff --git a/scripts/test_rancher_token.py b/scripts/test_rancher_token.py new file mode 100644 index 0000000..2640d7e --- /dev/null +++ b/scripts/test_rancher_token.py @@ -0,0 +1,30 @@ +import paramiko +import requests +import json +import urllib3 +urllib3.disable_warnings() + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +name = 'kubeconfig-u-aqzkufonck4hmbd' +_, o, _ = c.exec_command(f'kubectl get tokens.management.cattle.io {name} -o json') +data = json.loads(o.read().decode()) +token = data.get('token') + +full_key = f"{name}:{token}" +headers = {"Authorization": f"Bearer {full_key}"} +r = requests.get("https://aerodrome.snarfnet.net/v3/clusters", headers=headers, verify=False, timeout=10) + +for cl in r.json().get('data', []): + name = cl.get('name') + cid = cl.get('id') + state = cl.get('state') + cap = cl.get('capacity', {}) + alloc = cl.get('allocatable', {}) + print(f"=== Cluster: {name} (ID: {cid}, State: {state}) ===") + print(" Capacity:", cap) + print(" Allocatable:", alloc) + +c.close() diff --git a/scripts/test_service_widgets_all.py b/scripts/test_service_widgets_all.py new file mode 100644 index 0000000..36e24d0 --- /dev/null +++ b/scripts/test_service_widgets_all.py @@ -0,0 +1,23 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +headers = {"User-Agent": "Mozilla/5.0"} +base = "https://homepage.snarfnet.net/api/services/proxy" + +services = [ + ("GitOps & Automation", "Gitea", "repos"), + ("GitOps & Automation", "ArgoCD", "applications"), + ("Infrastructure & Observability", "Uptime Kuma", "status"), + ("Infrastructure & Observability", "Grafana", "stats"), + ("Environment & Weather", "Tempest Weather Station", "states"), +] + +for group, svc, ep in services: + try: + url = f"{base}?group={requests.utils.quote(group)}&service={requests.utils.quote(svc)}&index=0&endpoint={ep}" + r = requests.get(url, headers=headers, verify=False, timeout=10) + print(f"[{group} -> {svc}] status: {r.status_code}, len: {len(r.text)}") + except Exception as e: + print(f"[{group} -> {svc}] Error: {e}") + diff --git a/scripts/test_tempest_entities.py b/scripts/test_tempest_entities.py new file mode 100644 index 0000000..0870041 --- /dev/null +++ b/scripts/test_tempest_entities.py @@ -0,0 +1,20 @@ +import requests + +headers = { + "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4" +} + +sensors = [ + "sensor.st_00158555_temperature", + "sensor.st_00158555_feels_like", + "sensor.st_00158555_humidity", + "sensor.st_00158555_wind_speed" +] + +for s in sensors: + try: + r = requests.get(f"http://14.4.4.20:8123/api/states/{s}", headers=headers, timeout=5) + print(s, "->", r.status_code, r.json().get("state"), r.json().get("attributes", {}).get("unit_of_measurement")) + except Exception as e: + print(s, "Error:", e) + diff --git a/scripts/test_urls_quick.py b/scripts/test_urls_quick.py new file mode 100644 index 0000000..0d0ccba --- /dev/null +++ b/scripts/test_urls_quick.py @@ -0,0 +1,11 @@ +import requests +import urllib3 +urllib3.disable_warnings() + +for url in ["https://harvester.snarfnet.net", "https://jenkins.snarfnet.net", "http://140.44.4.70:8050"]: + try: + r = requests.get(url, verify=False, timeout=5) + print(f"{url} -> HTTP {r.status_code}") + except Exception as e: + print(f"{url} -> ERROR: {e}") + diff --git a/scripts/update_grafana_manifest.py b/scripts/update_grafana_manifest.py new file mode 100644 index 0000000..efb85ae --- /dev/null +++ b/scripts/update_grafana_manifest.py @@ -0,0 +1,97 @@ +import yaml +import json + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "r", encoding="utf-8") as f: + docs = list(yaml.safe_load_all(f.read())) + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/systems-dashboard.json", "r", encoding="utf-8") as f: + systems_json = f.read() + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/container-metrics-dashboard.json", "r", encoding="utf-8") as f: + containers_json = f.read() + +# Deployment is doc 0 +deploy = docs[0] +pod_spec = deploy['spec']['template']['spec'] +container = pod_spec['containers'][0] + +# Add volume mounts if not present +mount_names = [m['name'] for m in container['volumeMounts']] +if 'systems-dashboard' not in mount_names: + container['volumeMounts'].append({ + 'mountPath': '/var/lib/grafana-dashboards/systems-dashboard.json', + 'name': 'systems-dashboard', + 'subPath': 'systems-dashboard.json' + }) + +if 'container-metrics-dashboard' not in mount_names: + container['volumeMounts'].append({ + 'mountPath': '/var/lib/grafana-dashboards/container-metrics-dashboard.json', + 'name': 'container-metrics-dashboard', + 'subPath': 'container-metrics-dashboard.json' + }) + +vol_names = [v['name'] for v in pod_spec['volumes']] +if 'systems-dashboard' not in vol_names: + pod_spec['volumes'].append({ + 'configMap': {'name': 'grafana-dashboard-systems'}, + 'name': 'systems-dashboard' + }) + +if 'container-metrics-dashboard' not in vol_names: + pod_spec['volumes'].append({ + 'configMap': {'name': 'grafana-dashboard-containers'}, + 'name': 'container-metrics-dashboard' + }) + +# Remove existing configmaps with these names if present in docs to update them +docs = [d for d in docs if not (d and d.get('kind') == 'ConfigMap' and d.get('metadata', {}).get('name') in ['grafana-dashboard-systems', 'grafana-dashboard-containers'])] + +cm_systems = { + 'apiVersion': 'v1', + 'kind': 'ConfigMap', + 'metadata': { + 'name': 'grafana-dashboard-systems', + 'namespace': 'default', + 'labels': { + 'app.kubernetes.io/name': 'grafana', + 'app.kubernetes.io/instance': 'grafana' + } + }, + 'data': { + 'systems-dashboard.json': systems_json + } +} + +cm_containers = { + 'apiVersion': 'v1', + 'kind': 'ConfigMap', + 'metadata': { + 'name': 'grafana-dashboard-containers', + 'namespace': 'default', + 'labels': { + 'app.kubernetes.io/name': 'grafana', + 'app.kubernetes.io/instance': 'grafana' + } + }, + 'data': { + 'container-metrics-dashboard.json': containers_json + } +} + +docs.append(cm_systems) +docs.append(cm_containers) + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "w", encoding="utf-8") as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("Updated manifests/aerodrome/grafana/grafana.yaml successfully!") + diff --git a/scripts/update_grafana_sa.py b/scripts/update_grafana_sa.py new file mode 100644 index 0000000..6d306d0 --- /dev/null +++ b/scripts/update_grafana_sa.py @@ -0,0 +1,14 @@ +import requests +import json +import urllib3 +urllib3.disable_warnings() + +auth = ('admin', 'Katzir476!!!') +sa_id = 3 +r = requests.patch(f"https://grafana.snarfnet.net/api/serviceaccounts/{sa_id}", auth=auth, json={"role": "Admin"}, verify=False) +print("Update role:", r.status_code, r.text) + +headers = {"Authorization": "Bearer glsa_71Y8I8DSZt3nXUNFzygnmBcEF4FUmWdw_1f03e67c"} +r_stats = requests.get("https://grafana.snarfnet.net/api/admin/stats", headers=headers, verify=False) +print("Admin stats:", r_stats.status_code, r_stats.text) + diff --git a/scripts/update_grafana_yaml.py b/scripts/update_grafana_yaml.py new file mode 100644 index 0000000..c56c687 --- /dev/null +++ b/scripts/update_grafana_yaml.py @@ -0,0 +1,129 @@ +import json + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/ai-stack-dashboard.json") as f: + dashboard_json = f.read() + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml") as f: + content = f.read() + +# Replace volumeMounts +old_mounts = """ volumeMounts: + - mountPath: /etc/grafana/grafana.ini + name: config + subPath: grafana.ini + - mountPath: /var/lib/grafana + name: storage""" + +new_mounts = """ volumeMounts: + - mountPath: /etc/grafana/grafana.ini + name: config + subPath: grafana.ini + - mountPath: /var/lib/grafana + name: storage + - mountPath: /etc/grafana/provisioning/datasources/datasources.yaml + name: datasources-config + subPath: datasources.yaml + - mountPath: /etc/grafana/provisioning/dashboards/dashboards.yaml + name: dashboards-provider-config + subPath: dashboards.yaml + - mountPath: /var/lib/grafana-dashboards/ai-stack-dashboard.json + name: ai-stack-dashboard + subPath: ai-stack-dashboard.json""" + +assert old_mounts in content, "old_mounts not found" +content = content.replace(old_mounts, new_mounts) + +# Replace volumes +old_vols = """ volumes: + - configMap: + defaultMode: 420 + name: grafana + name: config + - name: storage + persistentVolumeClaim: + claimName: grafana""" + +new_vols = """ volumes: + - configMap: + defaultMode: 420 + name: grafana + name: config + - name: storage + persistentVolumeClaim: + claimName: grafana + - configMap: + defaultMode: 420 + name: grafana-datasources + name: datasources-config + - configMap: + defaultMode: 420 + name: grafana-dashboards-provider + name: dashboards-provider-config + - configMap: + defaultMode: 420 + name: grafana-dashboard-ai-stack + name: ai-stack-dashboard""" + +assert old_vols in content, "old_vols not found" +content = content.replace(old_vols, new_vols) + +# Append ConfigMaps at the bottom +extra_cms = f"""--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: default + labels: + app.kubernetes.io/name: grafana +data: + datasources.yaml: | + apiVersion: 1 + datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true + jsonData: + timeInterval: 15s +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboards-provider + namespace: default + labels: + app.kubernetes.io/name: grafana +data: + dashboards.yaml: | + apiVersion: 1 + providers: + - name: 'ai-stack-provider' + orgId: 1 + folder: 'AI Stack & Inference' + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana-dashboards +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-ai-stack + namespace: default + labels: + app.kubernetes.io/name: grafana +data: + ai-stack-dashboard.json: | +{chr(10).join(' ' + line for line in dashboard_json.splitlines())} +""" + +content = content.rstrip() + "\n" + extra_cms + +with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "w") as f: + f.write(content) + +print("Updated grafana.yaml successfully!") + diff --git a/scripts/update_homepage_bookmarks.py b/scripts/update_homepage_bookmarks.py new file mode 100644 index 0000000..5ea16c2 --- /dev/null +++ b/scripts/update_homepage_bookmarks.py @@ -0,0 +1,45 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f: + text = f.read() + +docs = list(yaml.safe_load_all(text)) +cm = docs[2] + +bookmarks_yaml = """- Quick Links: + - GitHub: + - abbr: GH + href: https://github.com/ + - UniFi Site Manager: + - abbr: UI + href: https://unifi.ui.com/ + - Cloudflare: + - abbr: CF + href: https://dash.cloudflare.com/ +- Grafana Telemetry: + - Systems Performance: + - abbr: SYS + href: https://grafana.snarfnet.net/d/snarfnet-systems/52f6861 + - Container Workloads: + - abbr: K8S + href: https://grafana.snarfnet.net/d/snarfnet-containers/f09f93a6-kubernetes-containers-and-workloads + - AI Stack Intelligence: + - abbr: AI + href: https://grafana.snarfnet.net/d/snarfnet-ai-stack/snarfnet-ai-stack-and-inference-intelligence +""" + +cm['data']['bookmarks.yaml'] = bookmarks_yaml + +with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f: + yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True) + +print("Updated bookmarks in homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml successfully!") + diff --git a/scripts/update_homepage_manifest.py b/scripts/update_homepage_manifest.py new file mode 100644 index 0000000..b4fdced --- /dev/null +++ b/scripts/update_homepage_manifest.py @@ -0,0 +1,194 @@ +import os + +new_configmap_data = """apiVersion: v1 +data: + bookmarks.yaml: | + - Developer: + - Github: + - abbr: GH + href: https://github.com/ + docker.yaml: '' + kubernetes.yaml: | + mode: disable + services.yaml: | + - Critical Services: + - Authentik: + icon: authentik.png + href: https://authentik.snarfnet.net + widget: + type: authentik + url: https://authentik.snarfnet.net + fields: ["users", "loginsLast24H", "failedLoginsLast24H"] + key: 7HamapUhYizcNudHDIT5IFy3XEpRgeKgqr1Pw4ub9eTpAjMAzB8Aur1Z6dUU + - PeaNUT UPS: + icon: peanut.png + href: https://portal.snarfnet.net + widget: + type: peanut + url: https://peanut.snarfnet.net + fields: ["battery_charge", "ups_load", "ups_status"] + key: server-closet + - Unifi Controller: + icon: unifi.png + href: https://unifi.ui.com + widget: + type: unifi + url: https://140.44.44.1 + username: Snarf + password: Katzir476!!! + + - GitOps & Automation: + - Gitea: + icon: gitea.png + href: https://git.snarfnet.net + widget: + type: gitea + url: https://git.snarfnet.net + fields: ["repositories", "notifications", "issues", "pulls"] + key: 47c10c54574131c007302b246352f653facb5062 + - ArgoCD: + icon: argocd.png + href: https://argo.snarfnet.net + - AWX Automation: + icon: awx.png + href: https://awx.snarfnet.net + - Semaphore: + icon: semaphore.png + href: https://semaphore.snarfnet.net + + - Storage & Clusters: + - Longhorn Aerodrome: + icon: longhorn.png + href: https://longhorn.aerodrome.snarfnet.net + widget: + type: longhorn + url: https://longhorn.aerodrome.snarfnet.net + - Longhorn Spaceport: + icon: longhorn.png + href: https://longhorn.spaceport.snarfnet.net + widget: + type: longhorn + url: https://longhorn.spaceport.snarfnet.net + - Rancher (Aerodrome): + icon: rancher.png + href: https://aerodrome.snarfnet.net + widget: + type: rancher + url: https://aerodrome.snarfnet.net + cluster: local + - Harvester HCI (Spacedock): + icon: harvester.png + href: https://harvester.spacedock.snarfnet.net + - Portainer Swarm: + icon: portainer.png + href: https://shipyard.snarfnet.net + widget: + type: portainer + url: https://shipyard.snarfnet.net + env: 1 + + - Infrastructure & Observability: + - NGINX Proxy Manager: + icon: nginx-proxy-manager + href: https://nginx.snarfnet.net + widget: + type: npm + url: https://nginx.snarfnet.net + fields: ["enabled", "disabled", "total"] + username: snarf@snarfnet.net + password: Katzir476! + - Uptime Kuma: + icon: uptime-kuma + href: https://uptime.snarfnet.net + widget: + type: uptimekuma + url: https://uptime.snarfnet.net + fields: ["up", "down", "uptime", "incident"] + slug: public + - Zabbix: + icon: zabbix.png + href: https://zabbix.snarfnet.net + - Grafana: + icon: grafana.png + href: https://grafana.snarfnet.net + - Core Node Glances: + icon: glances.png + href: http://140.44.4.11:61208 + widget: + type: glances + url: http://140.44.4.11:61208 + version: 4 + metric: cpu + + - Environment & Weather: + - Tempest Weather Station: + icon: weather.png + href: https://snarfhome.snarfnet.net + description: Backyard Weather Telemetry + widget: + type: homeassistant + url: http://14.4.4.20:8123 + key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4 + custom: + - state: sensor.tempest_st_temperature + label: Outdoor Temp + - state: sensor.tempest_st_wind_speed + label: Wind Speed + - state: sensor.tempest_st_humidity + label: Humidity + - state: sensor.tempest_st_rain_rate + label: Rain Rate + + settings.yaml: | + title: SnarfNet Operations & Telemetry + headerStyle: boxedWidgets + color: green + theme: dark + layout: + Critical Services: + GitOps & Automation: + Storage & Clusters: + Infrastructure & Observability: + Environment & Weather: + showStats: true + providers: + longhorn: + url: https://longhorn.aerodrome.snarfnet.net + + widgets.yaml: | + - resources: + backend: resources + cpu: true + expanded: true + memory: true + - search: + provider: duckduckgo + target: _blank + - longhorn: + expanded: true + total: true + labels: true + nodes: true +""" + +filepath = r"homelab-gitops-repo\manifests\spaceport\homepage\homepage.yaml" +with open(filepath, "r", encoding="utf-8") as f: + text = f.read() + +# The configmap starts after the second "---" delimiter +parts = text.split("---\n") +if len(parts) == 1: + parts = text.split("---\r\n") + +# parts[0] is Deployment, parts[1] is Service, parts[2] is ConfigMap +cm_part = parts[2] +cm_kind_idx = cm_part.index("kind: ConfigMap") +cm_suffix = cm_part[cm_kind_idx:] + +new_cm_part = new_configmap_data + cm_suffix +parts[2] = new_cm_part + +new_full = "---\n".join(parts) +with open(filepath, "w", encoding="utf-8", newline="\r\n") as f: + f.write(new_full) +print("Updated homepage.yaml cleanly!") diff --git a/scripts/update_prom_manifest.py b/scripts/update_prom_manifest.py new file mode 100644 index 0000000..53ff58c --- /dev/null +++ b/scripts/update_prom_manifest.py @@ -0,0 +1,147 @@ +import yaml + +def str_presenter(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + +with open("homelab-gitops-repo/manifests/aerodrome/prometheus/prometheus.yaml", "r", encoding="utf-8") as f: + docs = list(yaml.safe_load_all(f.read())) + +# Doc 0: PVC +# Doc 1: ConfigMap +cm = docs[1] +prom_cfg = yaml.safe_load(cm['data']['prometheus.yml']) + +scrape_configs = prom_cfg.get('scrape_configs', []) + +# Check if node-exporter already exists +if not any(j.get('job_name') == 'node-exporter' for j in scrape_configs): + scrape_configs.append({ + 'job_name': 'node-exporter', + 'metrics_path': '/metrics', + 'static_configs': [ + { + 'targets': [ + '140.44.4.11:9100', '140.44.4.12:9100', '140.44.4.13:9100', + '140.44.4.21:9100', '140.44.4.22:9100', '140.44.4.23:9100', + '140.44.4.24:9100', '140.44.4.25:9100', '140.44.4.26:9100', + '140.44.4.27:9100' + ], + 'labels': { + 'cluster': 'aerodrome' + } + }, + { + 'targets': [ + '140.44.4.41:9100', '140.44.4.42:9100', '140.44.4.43:9100', + '140.44.4.51:9100', '140.44.4.52:9100', '140.44.4.53:9100', + '140.44.4.54:9100', '140.44.4.55:9100', '140.44.4.56:9100', + '140.44.4.57:9100' + ], + 'labels': { + 'cluster': 'spaceport' + } + } + ] + }) + +# Check if kubernetes-cadvisor already exists +if not any(j.get('job_name') == 'kubernetes-cadvisor' for j in scrape_configs): + scrape_configs.append({ + 'job_name': 'kubernetes-cadvisor', + 'scheme': 'https', + 'tls_config': { + 'ca_file': '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt' + }, + 'bearer_token_file': '/var/run/secrets/kubernetes.io/serviceaccount/token', + 'kubernetes_sd_configs': [ + {'role': 'node'} + ], + 'relabel_configs': [ + { + 'action': 'labelmap', + 'regex': '__meta_kubernetes_node_label_(.+)' + }, + { + 'target_label': '__address__', + 'replacement': 'kubernetes.default.svc:443' + }, + { + 'source_labels': ['__meta_kubernetes_node_name'], + 'regex': '(.+)', + 'target_label': '__metrics_path__', + 'replacement': '/api/v1/nodes/${1}/proxy/metrics/cadvisor' + } + ] + }) + +prom_cfg['scrape_configs'] = scrape_configs +cm['data']['prometheus.yml'] = yaml.dump(prom_cfg, sort_keys=False, default_flow_style=False) + +# Doc 2: Deployment +deploy = docs[2] +deploy['spec']['template']['spec']['serviceAccountName'] = 'prometheus' + +# Add SA, ClusterRole, ClusterRoleBinding if not in docs +sa = { + 'apiVersion': 'v1', + 'kind': 'ServiceAccount', + 'metadata': { + 'name': 'prometheus', + 'namespace': 'default', + 'labels': {'app.kubernetes.io/name': 'prometheus'} + } +} + +cr = { + 'apiVersion': 'rbac.authorization.k8s.io/v1', + 'kind': 'ClusterRole', + 'metadata': { + 'name': 'prometheus', + 'labels': {'app.kubernetes.io/name': 'prometheus'} + }, + 'rules': [ + { + 'apiGroups': [''], + 'resources': ['nodes', 'nodes/proxy', 'nodes/metrics', 'services', 'endpoints', 'pods'], + 'verbs': ['get', 'list', 'watch'] + }, + { + 'nonResourceURLs': ['/metrics', '/metrics/cadvisor'], + 'verbs': ['get'] + } + ] +} + +crb = { + 'apiVersion': 'rbac.authorization.k8s.io/v1', + 'kind': 'ClusterRoleBinding', + 'metadata': { + 'name': 'prometheus', + 'labels': {'app.kubernetes.io/name': 'prometheus'} + }, + 'roleRef': { + 'apiGroup': 'rbac.authorization.k8s.io', + 'kind': 'ClusterRole', + 'name': 'prometheus' + }, + 'subjects': [ + { + 'kind': 'ServiceAccount', + 'name': 'prometheus', + 'namespace': 'default' + } + ] +} + +new_docs = [sa, cr, crb] + docs + +with open("homelab-gitops-repo/manifests/aerodrome/prometheus/prometheus.yaml", "w", encoding="utf-8") as f: + yaml.dump_all(new_docs, f, sort_keys=False, default_flow_style=False) + +print("Updated manifests/aerodrome/prometheus/prometheus.yaml successfully!") + diff --git a/scripts/update_shepherd_env.py b/scripts/update_shepherd_env.py new file mode 100644 index 0000000..d5f8d5d --- /dev/null +++ b/scripts/update_shepherd_env.py @@ -0,0 +1,45 @@ +import paramiko +import sys +import time + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +shepherd_compose = '''version: "3.8" + +services: + shepherd: + image: containrrr/shepherd:latest + environment: + - SLEEP_TIME=24h + - IGNORELIST_SERVICES=nginx-proxy-manager_app nginx-proxy-manager_backup + - UPDATE_OPTIONS=--with-registry-auth + - ROLLBACK_FAILURE=true + - TZ=America/New_York + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + deploy: + mode: replicated + replicas: 1 + placement: + constraints: + - node.role == manager + restart_policy: + condition: on-failure +''' + +sftp = c.open_sftp() +with sftp.file('/tmp/shepherd_compose.yml', 'w') as f: + f.write(shepherd_compose) +sftp.close() + +_, o, _ = c.exec_command("docker stack deploy -c /tmp/shepherd_compose.yml shepherd") +print(o.read().decode()) +time.sleep(3) +_, o, _ = c.exec_command("docker service ps shepherd_shepherd") +print(o.read().decode()) + +c.close() + diff --git a/scripts/upload_topology_to_homepage.py b/scripts/upload_topology_to_homepage.py new file mode 100644 index 0000000..9c6fda8 --- /dev/null +++ b/scripts/upload_topology_to_homepage.py @@ -0,0 +1,43 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.41', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + out = o.read().decode().strip() + err = e.read().decode().strip() + if err: + print('[stderr]', err) + return out + +with open('docs/snarfnet_homelab_topology.html', 'r', encoding='utf-8') as f: + html_content = f.read() + +with open('docs/snarfnet_homelab_topology.png', 'rb') as f: + png_content = f.read() + +# Send html +stdin, stdout, stderr = c.exec_command('cat > /tmp/topology.html') +stdin.write(html_content) +stdin.close() +stdout.read() + +# Send png +stdin, stdout, stderr = c.exec_command('cat > /tmp/topology.png') +stdin.write(png_content) +stdin.close() +stdout.read() + +pod = run("kubectl get pod -n infrastructure -l app.kubernetes.io/name=homepage-2-1744068158 -o jsonpath='{.items[0].metadata.name}'") +print(f'Target Pod: {pod}') + +print(run(f'kubectl cp /tmp/topology.png infrastructure/{pod}:/app/public/topology.png')) +print(run(f'kubectl cp /tmp/topology.html infrastructure/{pod}:/app/public/topology.html')) + +print('Files in /app/public:') +print(run(f'kubectl exec -n infrastructure {pod} -- ls -lh /app/public/topology*')) + +c.close() +print('Topology updated on Homepage successfully!') diff --git a/scripts/verify_grafana_dashboard.py b/scripts/verify_grafana_dashboard.py new file mode 100644 index 0000000..8e1a4b5 --- /dev/null +++ b/scripts/verify_grafana_dashboard.py @@ -0,0 +1,36 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, e = c.exec_command(cmd) + return o.read().decode().strip() + +pod = run("kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}'") +print(run(f"kubectl exec {pod} -- cat /var/lib/grafana-dashboards/ai-stack-dashboard.json | grep -i 'title' | head -n 5")) + +py_script = """import sqlite3 +import subprocess +out = subprocess.check_output("kubectl exec deployment/grafana -- cat /var/lib/grafana/grafana.db", shell=True) +with open("/tmp/g.db", "wb") as f: + f.write(out) +conn = sqlite3.connect('/tmp/g.db') +cur = conn.cursor() +print('=== DATASOURCES ===') +for row in cur.execute('SELECT id, name, type, url FROM data_source').fetchall(): + print(row) +print('=== DASHBOARDS ===') +for row in cur.execute('SELECT id, title, slug, uid FROM dashboard').fetchall(): + print(row) +""" + +stdin, stdout, stderr = c.exec_command("cat > /tmp/check_g.py && python3 /tmp/check_g.py") +stdin.write(py_script) +stdin.close() +print(stdout.read().decode()) +print(stderr.read().decode()) + +c.close() + diff --git a/scripts/verify_heimdall_clean.py b/scripts/verify_heimdall_clean.py new file mode 100644 index 0000000..605f689 --- /dev/null +++ b/scripts/verify_heimdall_clean.py @@ -0,0 +1,29 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.71', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +script = ''' +import sqlite3 +con = sqlite3.connect('/var/lib/docker-data/heimdall/config/www/app.sqlite') +cur = con.cursor() +print("Total items:", cur.execute("SELECT count(*) FROM items").fetchone()[0]) +print("Duplicates:", cur.execute("SELECT count(*), title FROM items GROUP BY title HAVING count(*) > 1").fetchall()) +print("Soft-deleted items:", cur.execute("SELECT count(*) FROM items WHERE deleted_at IS NOT NULL").fetchone()[0]) +print("\\nActive items (ordered):") +for r in cur.execute("SELECT id, title, [order], pinned FROM items WHERE id != 0 ORDER BY [order]").fetchall(): + print(" #%-2d (id: %-2d, pinned: %d): %s" % (r[2], r[0], r[3], r[1])) +''' + +sftp = c.open_sftp() +with sftp.file('/tmp/verify_heimdall.py', 'w') as f: + f.write(script) +sftp.close() + +_, stdout, _ = c.exec_command('python3 /tmp/verify_heimdall.py') +print(stdout.read().decode()) +c.close() + diff --git a/scripts/verify_kuma_live.py b/scripts/verify_kuma_live.py new file mode 100644 index 0000000..cee17d6 --- /dev/null +++ b/scripts/verify_kuma_live.py @@ -0,0 +1,22 @@ +import paramiko +import sys + +sys.stdout.reconfigure(encoding='utf-8') +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + print(f"\n>>> {cmd}") + _, o, e = c.exec_command(cmd) + res = o.read().decode().strip() + if res: + print(res) + return res + +pod = run("kubectl get pod -n monitoring -l app.kubernetes.io/name=uptime-kuma -o jsonpath='{.items[0].metadata.name}'") +run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT count(*) AS total_monitors FROM monitor; SELECT name, type, active, is_default FROM notification; SELECT count(*) AS linked_notifications FROM monitor_notification;" """) +run(f"""kubectl exec -n monitoring {pod} -- mariadb --socket=/app/data/run/mariadb.sock -u root -e "USE kuma; SELECT id, name, type, url FROM monitor ORDER BY id DESC LIMIT 10;" """) + +c.close() + diff --git a/scripts/verify_node_metrics.py b/scripts/verify_node_metrics.py new file mode 100644 index 0000000..139b092 --- /dev/null +++ b/scripts/verify_node_metrics.py @@ -0,0 +1,16 @@ +import paramiko + +c = paramiko.SSHClient() +c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) +c.connect('140.44.4.11', username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10) + +def run(cmd): + _, o, _ = c.exec_command(cmd) + return o.read().decode().strip() + +print("Node load on 140.44.4.11:") +print(run("curl -s http://localhost:9100/metrics | grep -E '^node_load1 '")) +print("Node memory total:") +print(run("curl -s http://localhost:9100/metrics | grep -E '^node_memory_MemTotal_bytes '")) +c.close() + diff --git a/snarfnet-game-seeds/README.md b/snarfnet-game-seeds/README.md new file mode 100644 index 0000000..bd73063 --- /dev/null +++ b/snarfnet-game-seeds/README.md @@ -0,0 +1,73 @@ +# 🌲 SnarfNet Game Seed Management Plane + +Declarative, GitOps-ready game server management plane for the SnarfNet dedicated gaming machine (`bc:24:11:67:16:cd` @ `140.44.44.80`), modeled on the declarative seed pattern (`arasoi/yggdrasil-releases` and `arasoi/yggdrasil-seeds`). + +--- + +## šŸŽ® Declared Game Servers + +| Game | Steam AppID | Container Image | Ports | RAM (Res / Limit) | World Save Path | +| :--- | :--- | :--- | :--- | :--- | :--- | +| **Enshrouded** | `2278520` | `skarab42/enshrouded-server:latest` | `15636/udp`, `15637/udp` | 8GB / 16GB | `/opt/game-servers/enshrouded/savegame` | +| **Farming Simulator 25** | `2300320` | `thijsvanloef/farming-simulator-25:latest` | `10823/tcp`, `10823/udp` | 6GB / 12GB | `/opt/game-servers/fs25/savegame` | +| **Stationeers** | `600760` | `sprits/stationeers-server:latest` | `27016/udp`, `27015/udp` | 4GB / 8GB | `/opt/game-servers/stationeers/saves` | +| **Valheim** (Crossplay) | `896660` | `lloesche/valheim-server:latest` | `2456/udp`, `2457/udp` | 4GB / 8GB | `/opt/game-servers/valheim/worlds` | +| **V Rising** | `1829350` | `trueosiris/vrising:latest` | `9876/udp`, `9877/udp` | 4GB / 8GB | `/opt/game-servers/vrising/Saves` | + +--- + +## šŸ› ļø Management CLI (`core/manager.py`) + +The manager CLI reconciles declared seeds against the host runtime, triggers automated world backups to Synology NAS, and issues Wake-on-LAN magic packets. + +### Commands + +```bash +# 1. Preview declared server configuration +python core/manager.py plan + +# 2. Render docker-compose.yml for live deployment +python core/manager.py compose + +# 3. Trigger manual atomic snapshot & sync to Synology NAS +python core/manager.py backup + +# 4. Wake up the gaming PC via Wake-on-LAN (bc:24:11:67:16:cd) +python core/manager.py wol +``` + +--- + +## šŸ’¾ Backup & Disaster Recovery Architecture + +All game world save files are preserved in atomic tarballs and synchronized to the Synology NAS: +- **NAS Backup NFS Target**: `14.10.10.71:/volume1/docker/game-backups` +- **Host Mount**: `/mnt/nas/game-backups` +- **Automated Timer**: Daily at 04:00 AM via `gameseed-backup.timer` +- **Retention**: 14 rolling snapshots per game + +--- + +## 🌐 UDM Pro Port Forwarding Matrix + +To permit external friends and players to join the servers, ensure the following port forwards are mapped from WAN to `140.44.44.80` on the UDM Pro: + +``` +Enshrouded: UDP 15636-15637 -> 140.44.44.80 +Farming Simulator 25: TCP/UDP 10823 -> 140.44.44.80 +Stationeers: UDP 27015-27016 -> 140.44.44.80 +Valheim: UDP 2456-2457 -> 140.44.44.80 +V Rising: UDP 9876-9877 -> 140.44.44.80 +``` + +--- + +## šŸš€ Bootstrap New Host + +To provision the physical gaming PC: +```bash +sudo bash scripts/setup-host.sh +python3 core/manager.py compose +docker compose up -d +``` + diff --git a/snarfnet-game-seeds/core/manager.py b/snarfnet-game-seeds/core/manager.py new file mode 100644 index 0000000..2618f1f --- /dev/null +++ b/snarfnet-game-seeds/core/manager.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +""" +SnarfNet Game Seed Management Plane (Yggdrasil-compatible) +Declarative orchestrator for private game servers on SnarfNet Gaming PC. +""" + +import os +import sys +import glob +import yaml +import socket +import struct +import tarfile +import datetime +import subprocess +from pathlib import Path + +TARGET_MAC = "bc:24:11:67:16:cd" +BROADCAST_IP = "140.44.44.255" +NAS_BACKUP_ROOT = "/mnt/nas/game-backups" +SEEDS_DIR = Path(__file__).parent.parent / "seeds" + +def send_wol(mac=TARGET_MAC, bcast=BROADCAST_IP): + """Sends a Wake-on-LAN magic packet to the gaming PC.""" + clean_mac = mac.replace(":", "").replace("-", "") + if len(clean_mac) != 12: + raise ValueError(f"Invalid MAC address: {mac}") + data = bytes.fromhex("FF" * 6 + clean_mac * 16) + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: + s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + s.sendto(data, (bcast, 9)) + print(f"[WOL] Sent magic packet to {mac} via {bcast}:9") + +def load_seeds(): + """Loads all declarative seed YAML files from the seeds directory.""" + seeds = [] + for filepath in glob.glob(str(SEEDS_DIR / "*.seed.yaml")): + with open(filepath, "r", encoding="utf-8") as f: + docs = yaml.safe_load(f) + if docs and docs.get("kind") == "GameSeed": + seeds.append(docs) + return seeds + +def cmd_plan(): + """Previews desired state across all defined game seeds.""" + seeds = load_seeds() + print(f"\n=======================================================") + print(f"🌲 SnarfNet Game Seed Plan ({len(seeds)} Seeds Declared)") + print(f"=======================================================") + for s in seeds: + meta = s.get("metadata", {}) + spec = s.get("spec", {}) + game = spec.get("game", {}) + server = spec.get("server", {}) + net = spec.get("network", {}) + runtime = spec.get("runtime", {}) + res = spec.get("resources", {}) + + ports = ", ".join([f"{p['port']}/{p['protocol']}" for p in net.get("ports", [])]) + print(f"\nšŸŽ® [{meta.get('name')}] {meta.get('displayName')}") + print(f" Steam AppID: {game.get('appId')} (Branch: {game.get('branch')})") + print(f" Image: {runtime.get('image')}") + print(f" Ports: {ports}") + print(f" Memory: {res.get('memoryReservation')} -> {res.get('memoryLimit')}") + print(f" Save Dir: {server.get('saveDirectory')}") + print(f" Backup: {spec.get('backup', {}).get('schedule')} (Retention: {spec.get('backup', {}).get('retentionDays')}d)") + +def cmd_generate_compose(output_path="docker-compose.yml"): + """Generates standard docker-compose.yml from all declared seeds.""" + seeds = load_seeds() + services = {} + + for s in seeds: + name = s["metadata"]["name"] + spec = s["spec"] + runtime = spec.get("runtime", {}) + server = spec.get("server", {}) + net = spec.get("network", {}) + res = spec.get("resources", {}) + + ports = [] + for p in net.get("ports", []): + ports.append(f"{p['port']}:{p['port']}/{p['protocol'].lower()}") + + save_dir = server.get("saveDirectory") + data_dir = f"/opt/game-servers/{name}/data" + + services[name] = { + "image": runtime.get("image"), + "container_name": f"gameseed-{name}", + "restart": runtime.get("restartPolicy", "unless-stopped"), + "environment": runtime.get("environment", {}), + "ports": ports, + "volumes": [ + f"{save_dir}:{save_dir}", + f"{data_dir}:/serverdata" + ], + "deploy": { + "resources": { + "limits": { + "memory": res.get("memoryLimit", "8Gi"), + "cpus": res.get("cpuLimit", "4") + }, + "reservations": { + "memory": res.get("memoryReservation", "4Gi") + } + } + } + } + + compose = { + "version": "3.8", + "services": services + } + + with open(output_path, "w", encoding="utf-8") as f: + yaml.dump(compose, f, sort_keys=False) + print(f"[COMPOSE] Rendered {len(services)} services to {output_path}") + +def cmd_backup(): + """Executes atomic snapshots of all world save directories and copies to Synology NAS.""" + seeds = load_seeds() + timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + nas_root = Path(NAS_BACKUP_ROOT) + + print(f"\nšŸ“¦ Starting Declarative Game Save Backups ({timestamp})...") + for s in seeds: + name = s["metadata"]["name"] + save_dir = Path(s["spec"]["server"]["saveDirectory"]) + target_dir = nas_root / name + target_dir.mkdir(parents=True, exist_ok=True) + + archive_name = f"{name}_save_{timestamp}.tar.gz" + archive_path = target_dir / archive_name + + if save_dir.exists(): + print(f" Archiving {name}: {save_dir} -> {archive_path}") + with tarfile.open(archive_path, "w:gz") as tar: + tar.add(save_dir, arcname=name) + print(f" āœ“ Backup complete: {archive_path} ({archive_path.stat().st_size} bytes)") + else: + print(f" [SKIP] Save directory {save_dir} not found on host.") + +def main(): + if len(sys.argv) < 2: + print("Usage: python manager.py ") + sys.exit(1) + + action = sys.argv[1].lower() + if action == "plan": + cmd_plan() + elif action == "compose": + cmd_generate_compose() + elif action == "backup": + cmd_backup() + elif action == "wol": + send_wol() + else: + print(f"Unknown command: {action}") + sys.exit(1) + +if __name__ == "__main__": + main() + diff --git a/snarfnet-game-seeds/scripts/setup-host.sh b/snarfnet-game-seeds/scripts/setup-host.sh new file mode 100644 index 0000000..befda88 --- /dev/null +++ b/snarfnet-game-seeds/scripts/setup-host.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# ============================================================================== +# SnarfNet Gaming PC Bootstrap Script +# MAC: bc:24:11:67:16:cd | IP: 140.44.44.80 (Compute / Game VLAN) +# ============================================================================== +set -euo pipefail + +echo "=======================================================" +echo "🌲 Bootstrapping SnarfNet Dedicated Game Server Host" +echo "=======================================================" + +# 1. System Updates & Essential Tools +echo ">>> Installing prerequisites and system tools..." +apt-get update && apt-get install -y \ + curl wget git jq ufw nfs-common ethtool net-tools \ + python3 python3-yaml python3-pip apt-transport-https \ + ca-certificates gnupg lsb-release + +# 2. Configure Wake-on-LAN (Persistent via systemd) +echo ">>> Configuring Wake-on-LAN for primary interface..." +NIC=$(ip route show default | awk '{print $5}' | head -n1) +ethtool -s "$NIC" wol g || true + +cat < /etc/systemd/system/wol.service +[Unit] +Description=Enable Wake-on-LAN on $NIC +After=network.target + +[Service] +Type=oneshot +ExecStart=/sbin/ethtool -s $NIC wol g + +[Install] +WantedBy=basic.target +EOF +systemctl daemon-reload +systemctl enable wol.service + +# 3. Mount Synology NAS Game Backup Share +echo ">>> Configuring Synology NAS NFS Mount (14.10.10.71:/volume1/docker/game-backups)..." +mkdir -p /mnt/nas/game-backups +if ! grep -qs '/mnt/nas/game-backups' /etc/fstab; then + echo "14.10.10.71:/volume1/docker/game-backups /mnt/nas/game-backups nfs rw,hard,intr,nolock,timeo=14 0 0" >> /etc/fstab +fi +mount -a || true + +# 4. Install Docker & Compose (if not present) +if ! command -v docker &> /dev/null; then + echo ">>> Installing Docker Engine..." + curl -fsSL https://get.docker.com | sh + systemctl enable docker + systemctl start docker +fi + +# 5. Prepare Game Directory Structure +echo ">>> Creating game server storage paths..." +mkdir -p /opt/game-servers/{enshrouded,fs25,stationeers,valheim,vrising}/{savegame,saves,worlds,data} +chmod -R 775 /opt/game-servers + +# 6. Setup Seed Manager Service & Daily Cron +echo ">>> Installing SnarfNet Seed Reconciler and Backup Timer..." +cat < /etc/systemd/system/gameseed-backup.service +[Unit] +Description=SnarfNet Declarative Game Server Save Backup +After=network.target docker.service + +[Service] +Type=oneshot +WorkingDirectory=/opt/snarfnet-game-seeds +ExecStart=/usr/bin/python3 /opt/snarfnet-game-seeds/core/manager.py backup + +[Install] +WantedBy=multi-user.target +EOF + +cat < /etc/systemd/system/gameseed-backup.timer +[Unit] +Description=Nightly Game Save Backup Timer (04:00 AM) + +[Timer] +OnCalendar=*-*-* 04:00:00 +Persistent=true + +[Install] +Timers.target +EOF + +systemctl daemon-reload +systemctl enable gameseed-backup.timer +systemctl start gameseed-backup.timer + +echo "=======================================================" +echo "āœ“ Host bootstrap complete!" +echo "Run: python3 /opt/snarfnet-game-seeds/core/manager.py compose && docker compose up -d" +echo "=======================================================" + diff --git a/snarfnet-game-seeds/seeds/enshrouded.seed.yaml b/snarfnet-game-seeds/seeds/enshrouded.seed.yaml new file mode 100644 index 0000000..b1efebc --- /dev/null +++ b/snarfnet-game-seeds/seeds/enshrouded.seed.yaml @@ -0,0 +1,42 @@ +apiVersion: yggdrasil.snarfnet.net/v1alpha1 +kind: GameSeed +metadata: + name: enshrouded + displayName: "Enshrouded Dedicated Server" + version: "1.0.0" +spec: + game: + appId: 2278520 + branch: public + autoUpdate: true + server: + name: "SnarfNet Enshrouded Sanctuary" + passwordSecret: "ENSHROUDED_SERVER_PASSWORD" + maxPlayers: 16 + saveDirectory: "/opt/game-servers/enshrouded/savegame" + network: + ip: "140.44.44.80" + ports: + - port: 15636 + protocol: UDP + description: "Game Query & Traffic" + - port: 15637 + protocol: UDP + description: "Steam Query Port" + resources: + cpuLimit: "8" + memoryLimit: "16Gi" + memoryReservation: "8Gi" + runtime: + image: "skarab42/enshrouded-server:latest" + restartPolicy: unless-stopped + environment: + SERVER_NAME: "SnarfNet Enshrouded Sanctuary" + SERVER_SLOTS: 16 + GAME_PORT: 15636 + QUERY_PORT: 15637 + backup: + schedule: "0 4 * * *" # Daily 04:00 AM + retentionDays: 14 + targetPath: "/mnt/nas/game-backups/enshrouded" + diff --git a/snarfnet-game-seeds/seeds/farming-simulator-25.seed.yaml b/snarfnet-game-seeds/seeds/farming-simulator-25.seed.yaml new file mode 100644 index 0000000..ab9437f --- /dev/null +++ b/snarfnet-game-seeds/seeds/farming-simulator-25.seed.yaml @@ -0,0 +1,41 @@ +apiVersion: yggdrasil.snarfnet.net/v1alpha1 +kind: GameSeed +metadata: + name: farming-simulator-25 + displayName: "Farming Simulator 25 Dedicated Server" + version: "1.0.0" +spec: + game: + appId: 2300320 + branch: public + autoUpdate: true + server: + name: "SnarfNet FS25 Countryside" + passwordSecret: "FS25_SERVER_PASSWORD" + adminPasswordSecret: "FS25_ADMIN_PASSWORD" + maxPlayers: 16 + saveDirectory: "/opt/game-servers/fs25/savegame" + network: + ip: "140.44.44.80" + ports: + - port: 10823 + protocol: TCP + description: "Game Web Management & Client Connection" + - port: 10823 + protocol: UDP + description: "Game Network Traffic" + resources: + cpuLimit: "6" + memoryLimit: "12Gi" + memoryReservation: "6Gi" + runtime: + image: "thijsvanloef/farming-simulator-25:latest" + restartPolicy: unless-stopped + environment: + SERVER_NAME: "SnarfNet FS25 Countryside" + GAME_PORT: 10823 + backup: + schedule: "0 4 * * *" + retentionDays: 14 + targetPath: "/mnt/nas/game-backups/farming-simulator-25" + diff --git a/snarfnet-game-seeds/seeds/stationeers.seed.yaml b/snarfnet-game-seeds/seeds/stationeers.seed.yaml new file mode 100644 index 0000000..b0dcda6 --- /dev/null +++ b/snarfnet-game-seeds/seeds/stationeers.seed.yaml @@ -0,0 +1,44 @@ +apiVersion: yggdrasil.snarfnet.net/v1alpha1 +kind: GameSeed +metadata: + name: stationeers + displayName: "Stationeers Dedicated Server" + version: "1.0.0" +spec: + game: + appId: 600760 + branch: public + autoUpdate: true + server: + name: "SnarfNet Stationeers Moonbase" + worldName: "Moon" + passwordSecret: "STATIONEERS_SERVER_PASSWORD" + maxPlayers: 10 + saveDirectory: "/opt/game-servers/stationeers/saves" + network: + ip: "140.44.44.80" + ports: + - port: 27016 + protocol: UDP + description: "Game Traffic Port" + - port: 27015 + protocol: UDP + description: "Steam Query Port" + resources: + cpuLimit: "4" + memoryLimit: "8Gi" + memoryReservation: "4Gi" + runtime: + image: "sprits/stationeers-server:latest" + restartPolicy: unless-stopped + environment: + SERVER_NAME: "SnarfNet Stationeers Moonbase" + WORLD_NAME: "Moon" + GAME_PORT: 27016 + QUERY_PORT: 27015 + AUTO_SAVE_INTERVAL: 300 + backup: + schedule: "0 4 * * *" + retentionDays: 14 + targetPath: "/mnt/nas/game-backups/stationeers" + diff --git a/snarfnet-game-seeds/seeds/valheim.seed.yaml b/snarfnet-game-seeds/seeds/valheim.seed.yaml new file mode 100644 index 0000000..c42841b --- /dev/null +++ b/snarfnet-game-seeds/seeds/valheim.seed.yaml @@ -0,0 +1,47 @@ +apiVersion: yggdrasil.snarfnet.net/v1alpha1 +kind: GameSeed +metadata: + name: valheim + displayName: "Valheim Dedicated Server" + version: "1.0.0" +spec: + game: + appId: 896660 + branch: public + autoUpdate: true + server: + name: "SnarfNet Valheim Valhalla" + worldName: "Snarfheim" + passwordSecret: "VALHEIM_SERVER_PASSWORD" + crossplay: true + maxPlayers: 10 + saveDirectory: "/opt/game-servers/valheim/worlds" + network: + ip: "140.44.44.80" + ports: + - port: 2456 + protocol: UDP + description: "Game Traffic Port" + - port: 2457 + protocol: UDP + description: "Steam Query Port" + resources: + cpuLimit: "6" + memoryLimit: "8Gi" + memoryReservation: "4Gi" + runtime: + image: "lloesche/valheim-server:latest" + restartPolicy: unless-stopped + environment: + SERVER_NAME: "SnarfNet Valheim Valhalla" + WORLD_NAME: "Snarfheim" + SERVER_PORT: 2456 + SERVER_PUBLIC: 1 + CROSSPLAY: "true" + UPDATE_CRON: "0 5 * * *" + BEPINEX: "false" + backup: + schedule: "0 4 * * *" + retentionDays: 14 + targetPath: "/mnt/nas/game-backups/valheim" + diff --git a/snarfnet-game-seeds/seeds/vrising.seed.yaml b/snarfnet-game-seeds/seeds/vrising.seed.yaml new file mode 100644 index 0000000..7212022 --- /dev/null +++ b/snarfnet-game-seeds/seeds/vrising.seed.yaml @@ -0,0 +1,43 @@ +apiVersion: yggdrasil.snarfnet.net/v1alpha1 +kind: GameSeed +metadata: + name: vrising + displayName: "V Rising Dedicated Server" + version: "1.0.0" +spec: + game: + appId: 1829350 + branch: public + autoUpdate: true + server: + name: "SnarfNet V Rising Vampire Lair" + saveName: "SnarfNet_Vampires" + passwordSecret: "VRISING_SERVER_PASSWORD" + maxPlayers: 20 + saveDirectory: "/opt/game-servers/vrising/Saves" + network: + ip: "140.44.44.80" + ports: + - port: 9876 + protocol: UDP + description: "Game Traffic Port" + - port: 9877 + protocol: UDP + description: "Query Port" + resources: + cpuLimit: "6" + memoryLimit: "8Gi" + memoryReservation: "4Gi" + runtime: + image: "trueosiris/vrising:latest" + restartPolicy: unless-stopped + environment: + SERVERNAME: "SnarfNet V Rising Vampire Lair" + SAVENAME: "SnarfNet_Vampires" + GAMEPORT: 9876 + QUERYPORT: 9877 + backup: + schedule: "0 4 * * *" + retentionDays: 14 + targetPath: "/mnt/nas/game-backups/vrising" +