first commit
This commit is contained in:
71
app/backfill_watermarks.py
Normal file
71
app/backfill_watermarks.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import argparse
|
||||
import json
|
||||
import traceback
|
||||
|
||||
from .config import Config
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Backfill migration_state watermark-ами из MSSQL Life_ таблиц."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tables",
|
||||
nargs="+",
|
||||
help="Список source_table/target_table для обработки. По умолчанию берутся все incremental-таблицы.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--overwrite",
|
||||
action="store_true",
|
||||
help="Перезаписать уже существующие watermark в replicator.migration_state.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--dry-run",
|
||||
action="store_true",
|
||||
help="Только показать, какие watermark будут записаны, без сохранения в PostgreSQL.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--json",
|
||||
action="store_true",
|
||||
help="Вывести итог в JSON.",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
from .migrator import DatabaseMigrator
|
||||
|
||||
args = parse_args()
|
||||
config = Config()
|
||||
migrator = DatabaseMigrator(config)
|
||||
summary = migrator.backfill_watermarks(
|
||||
table_names=args.tables,
|
||||
overwrite=args.overwrite,
|
||||
dry_run=args.dry_run,
|
||||
)
|
||||
|
||||
if args.json:
|
||||
print(json.dumps(summary, ensure_ascii=False, indent=2, default=str))
|
||||
else:
|
||||
print("\n" + "=" * 60)
|
||||
print("BACKFILL WATERMARKS ЗАВЕРШЕН")
|
||||
print("=" * 60)
|
||||
print(f"Обработано: {summary['processed']}")
|
||||
print(f"Обновлено: {summary['updated']}")
|
||||
print(f"Пропущено: {summary['skipped']}")
|
||||
print(f"Ошибок: {summary['failed']}")
|
||||
print("=" * 60)
|
||||
|
||||
return 1 if summary['failed'] > 0 else 0
|
||||
except KeyboardInterrupt:
|
||||
print("\nBackfill прерван пользователем")
|
||||
return 130
|
||||
except Exception as e:
|
||||
print(f"Критическая ошибка: {e}")
|
||||
print(traceback.format_exc())
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user