BEFORE: /opt/aitbc/cli/ ├── aitbc_cli/ # Python package (box in a box) │ ├── commands/ │ ├── main.py │ └── ... ├── setup.py AFTER: /opt/aitbc/cli/ # Flat structure ├── commands/ # Direct access ├── main.py # Direct access ├── auth/ ├── config/ ├── core/ ├── models/ ├── utils/ ├── plugins.py └── setup.py CHANGES MADE: - Moved all files from aitbc_cli/ to cli/ root - Fixed all relative imports (from . to absolute imports) - Updated setup.py entry point: aitbc_cli.main → main - Added CLI directory to Python path in entry script - Simplified deployment.py to remove dependency on deleted core.deployment - Fixed import paths in all command files - Recreated virtual environment with new structure BENEFITS: - Eliminated 'box in a box' nesting - Simpler directory structure - Direct access to all modules - Cleaner imports - Easier maintenance and development - CLI works with both 'python main.py' and 'aitbc' commands
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
"""Sync management commands for AITBC."""
|
|
|
|
import asyncio
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import click
|
|
|
|
from utils import success, error, run_subprocess
|
|
|
|
|
|
@click.group()
|
|
def sync():
|
|
"""Blockchain synchronization utilities."""
|
|
pass
|
|
|
|
|
|
@sync.command()
|
|
@click.option('--source', default='http://10.1.223.40:8006', help='Source RPC URL (leader)')
|
|
@click.option('--import-url', default='http://127.0.0.1:8006', help='Local RPC URL for import')
|
|
@click.option('--batch-size', type=int, default=100, help='Blocks per batch')
|
|
@click.option('--poll-interval', type=float, default=0.2, help='Seconds between batches')
|
|
def bulk(source, import_url, batch_size, poll_interval):
|
|
"""Bulk import blocks from a leader to catch up quickly."""
|
|
try:
|
|
# Resolve paths
|
|
blockchain_dir = Path(__file__).resolve().parents[3] / 'apps' / 'blockchain-node'
|
|
src_dir = blockchain_dir / 'src'
|
|
venv_python = blockchain_dir / '.venv' / 'bin' / 'python3'
|
|
sync_cli = src_dir / 'aitbc_chain' / 'sync_cli.py'
|
|
|
|
if not sync_cli.exists():
|
|
error("sync_cli.py not found. Ensure bulk sync feature is deployed.")
|
|
raise click.Abort()
|
|
|
|
cmd = [
|
|
str(venv_python),
|
|
str(sync_cli),
|
|
'--source', source,
|
|
'--import-url', import_url,
|
|
'--batch-size', str(batch_size),
|
|
'--poll-interval', str(poll_interval),
|
|
]
|
|
|
|
# Prepare environment
|
|
env = {
|
|
'PYTHONPATH': str(src_dir),
|
|
}
|
|
|
|
success(f"Running bulk sync from {source} to {import_url} (batch size: {batch_size})")
|
|
result = run_subprocess(cmd, env=env, capture_output=False)
|
|
if result.returncode != 0:
|
|
error("Bulk sync failed. Check logs for details.")
|
|
raise click.Abort()
|
|
success("Bulk sync completed.")
|
|
except Exception as e:
|
|
error(f"Error during bulk sync: {e}")
|
|
raise click.Abort()
|