chore(conductor): Mark track 'cluster_status_python' as complete

This commit is contained in:
2026-02-08 06:18:13 -08:00
parent c0dcb1a47d
commit cbd109a8bc
5 changed files with 59 additions and 8 deletions

View File

@@ -8,4 +8,4 @@ test:
. .venv/bin/activate && pytest -v --cov=.
run:
. .venv/bin/activate && python3 cluster_status.py
. .venv/bin/activate && PYTHONPATH=. python3 cli.py

33
scripts/cluster_status/cli.py Executable file
View File

@@ -0,0 +1,33 @@
#!/usr/bin/env python3
import argparse
import sys
import config
import cluster_aggregator
import output_formatter
def parse_args():
parser = argparse.ArgumentParser(description="Monitor Navidrome LiteFS/Consul cluster status.")
parser.add_argument("--consul-url", help="Override Consul API URL (default from env or hardcoded)")
parser.add_argument("--no-color", action="store_true", help="Disable colorized output")
return parser.parse_args()
def main():
args = parse_args()
# Resolve Consul URL
consul_url = config.get_consul_url(args.consul_url)
try:
# Fetch and aggregate data
cluster_data = cluster_aggregator.get_cluster_status(consul_url)
# Format and print output
print(output_formatter.format_summary(cluster_data, use_color=not args.no_color))
print("\n" + output_formatter.format_node_table(cluster_data["nodes"], use_color=not args.no_color))
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,18 @@
import pytest
from unittest.mock import patch, MagicMock
import cli
import sys
def test_arg_parsing_default():
"""Test that default arguments are parsed correctly."""
with patch.object(sys, 'argv', ['cli.py']):
args = cli.parse_args()
assert args.consul_url is None # Should use config default later
assert args.no_color is False
def test_arg_parsing_custom():
"""Test that custom arguments are parsed correctly."""
with patch.object(sys, 'argv', ['cli.py', '--consul-url', 'http://custom:8500', '--no-color']):
args = cli.parse_args()
assert args.consul_url == 'http://custom:8500'
assert args.no_color is True