From 150306acc06071924f32d85f7a3e4e0fdd7cdcf5 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 3 Jul 2026 01:18:52 +0800 Subject: [PATCH] fix(ops): honor gitea pressure playbook paths --- .../ops/gitea-queue-hook-backlog-playbook.py | 19 ++++-- .../test_gitea_queue_hook_backlog_playbook.py | 59 +++++++++++++++++++ 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/scripts/ops/gitea-queue-hook-backlog-playbook.py b/scripts/ops/gitea-queue-hook-backlog-playbook.py index a77e4d32f..994327aef 100644 --- a/scripts/ops/gitea-queue-hook-backlog-playbook.py +++ b/scripts/ops/gitea-queue-hook-backlog-playbook.py @@ -23,6 +23,7 @@ from typing import Any DEFAULT_HOST_METRICS_FILE = Path("/home/wooo/node_exporter_textfiles/host_runaway_process.prom") DEFAULT_DOCKER_STATS_FILE = Path("/home/wooo/node_exporter_textfiles/docker_stats.prom") DEFAULT_DOCKER_STATS_MAX_AGE_SECONDS = 300 +DEFAULT_SCRIPT_DIR = Path("/home/wooo/scripts") DEFAULT_GITEA_METRICS_URL = "http://192.168.0.110:3001/metrics" DEFAULT_GITEA_HEALTH_URL = "http://192.168.0.110:3001/api/healthz" DEFAULT_GITEA_VERSION_URL = "http://192.168.0.110:3001/api/v1/version" @@ -42,6 +43,7 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--host", default="110") parser.add_argument("--metrics-file", type=Path, default=DEFAULT_HOST_METRICS_FILE) parser.add_argument("--docker-stats-file", type=Path, default=DEFAULT_DOCKER_STATS_FILE) + parser.add_argument("--script-dir", type=Path, default=DEFAULT_SCRIPT_DIR) parser.add_argument( "--docker-stats-max-age-seconds", type=int, @@ -459,17 +461,22 @@ def build_payload(args: argparse.Namespace) -> dict[str, Any]: "gitea_family_cpu": args.gitea_family_cpu_threshold, "hooktasks_warning": args.hooktasks_warning_threshold, }, + "metrics_file": str(args.metrics_file), + "docker_stats_file": str(args.docker_stats_file), + "script_dir": str(args.script_dir), }, "commands": { "check_mode": ( - "/home/wooo/scripts/gitea-queue-hook-backlog-playbook.py " - f"--host {args.host} --metrics-file {DEFAULT_HOST_METRICS_FILE} " - f"--docker-stats-file {DEFAULT_DOCKER_STATS_FILE} --json" + f"{args.script_dir / 'gitea-queue-hook-backlog-playbook.py'} " + f"--host {args.host} --metrics-file {args.metrics_file} " + f"--docker-stats-file {args.docker_stats_file} " + f"--script-dir {args.script_dir} --json" ), "post_apply_verifier": ( - "/home/wooo/scripts/host-sustained-load-controller.py " - f"--host {args.host} --metrics-file {DEFAULT_HOST_METRICS_FILE} " - f"--docker-stats-file {DEFAULT_DOCKER_STATS_FILE} --json" + f"{args.script_dir / 'host-sustained-load-controller.py'} " + f"--host {args.host} --metrics-file {args.metrics_file} " + f"--docker-stats-file {args.docker_stats_file} " + f"--script-dir {args.script_dir} --json" ), "controlled_apply": "", "rollback": "no host mutation performed by this check-mode playbook", diff --git a/scripts/ops/tests/test_gitea_queue_hook_backlog_playbook.py b/scripts/ops/tests/test_gitea_queue_hook_backlog_playbook.py index a6f08a8be..f5f9d070a 100644 --- a/scripts/ops/tests/test_gitea_queue_hook_backlog_playbook.py +++ b/scripts/ops/tests/test_gitea_queue_hook_backlog_playbook.py @@ -150,3 +150,62 @@ def test_gitea_playbook_rejects_stale_docker_attribution(tmp_path: Path) -> None assert payload["readback"]["docker_stats"]["fresh"] is False assert payload["readback"]["top_containers"] == [] assert payload["readback"]["top_containers_untrusted"][0]["container_name"] == "gitea" + + +def test_gitea_playbook_honors_custom_readback_paths(tmp_path: Path) -> None: + gitea_files = _write_common_gitea_files(tmp_path) + host_file = tmp_path / "host.prom" + host_file.write_text( + "\n".join( + [ + 'awoooi_host_gitea_actions_active_container_count{host="188"} 0', + 'awoooi_host_gitea_actions_active_process_group_count{host="188"} 0', + 'awoooi_host_gitea_actions_active_process_cpu_percent{host="188"} 0', + 'awoooi_host_process_family_cpu_percent{host="188",family="gitea_service"} 0', + ] + ), + encoding="utf-8", + ) + docker_file = tmp_path / "docker.prom" + docker_file.write_text( + 'docker_container_cpu_cores{host="188",container_name="momo-scheduler"} 0.7\n', + encoding="utf-8", + ) + script_dir = tmp_path / "deployed-scripts" + + result = subprocess.run( + [ + sys.executable, + str(PLAYBOOK_PATH), + "--host", + "188", + "--metrics-file", + str(host_file), + "--docker-stats-file", + str(docker_file), + "--script-dir", + str(script_dir), + "--gitea-metrics-file", + str(gitea_files["gitea_metrics"]), + "--gitea-health-file", + str(gitea_files["health"]), + "--gitea-version-file", + str(gitea_files["version"]), + "--json", + ], + capture_output=True, + text=True, + ) + + assert result.returncode == 0 + payload = json.loads(result.stdout) + assert payload["classification"] == "observing_gitea_pressure_below_threshold" + assert payload["readback"]["metrics_file"] == str(host_file) + assert payload["readback"]["docker_stats_file"] == str(docker_file) + assert payload["readback"]["script_dir"] == str(script_dir) + assert str(script_dir / "gitea-queue-hook-backlog-playbook.py") in payload["commands"]["check_mode"] + assert str(script_dir / "host-sustained-load-controller.py") in payload["commands"]["post_apply_verifier"] + assert str(host_file) in payload["commands"]["check_mode"] + assert str(docker_file) in payload["commands"]["post_apply_verifier"] + assert "/home/wooo/node_exporter_textfiles" not in payload["commands"]["check_mode"] + assert "/home/wooo/node_exporter_textfiles" not in payload["commands"]["post_apply_verifier"]