bootstrap-industry-tasks.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536
  1. """Build the main-store and eight-shop preparation backlog from already stored evidence."""
  2. import argparse
  3. import json
  4. from pathlib import Path
  5. import sys
  6. sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'server/voc-library'))
  7. from industry_monitor import load, Monitor, PRIMARY
  8. from monitoring_store import need, read_state
  9. from monitoring_tasks import seed, reconcile, read_tasks
  10. if __name__ == '__main__':
  11. p = argparse.ArgumentParser(description=__doc__)
  12. p.add_argument('--snapshot', required=True)
  13. p.add_argument('--store', required=True)
  14. p.add_argument('--generation', required=True)
  15. args = p.parse_args()
  16. try:
  17. data = load({'snapshot': args.snapshot})
  18. need(data['generation'] == args.generation, 'LIBRARY_VERSION_CHANGED')
  19. monitor = Monitor(data)
  20. results = [seed(args.store, monitor, {'platform': PRIMARY['platform'], 'shopId': PRIMARY['shopId']}, ['reviews'])]
  21. shops = sorted({(r['platform'], r['scope']['shopId']) for r in read_state(args.store) if r['kind'] == 'listings'})
  22. for platform, shop in shops:
  23. results.append(seed(args.store, monitor, {'platform': platform, 'shopId': shop}, ['listings']))
  24. for platform in ('jd', 'tmall'):
  25. results.append(seed(args.store, monitor, {'platform': platform}, ['rankings']))
  26. linked = reconcile(args.store, args.generation)
  27. state = read_tasks(args.store, args.generation, {}, set(monitor.products))
  28. print(json.dumps({'ok': True, 'created': sum(r['created'] for r in results), 'reconciled': linked['reconciled'],
  29. 'total': state['total'], 'counts': state['counts'], 'dispatchEnabled': False,
  30. 'collectorCalls': 0, 'productionWrites': 0}, ensure_ascii=False))
  31. except Exception as error:
  32. print(json.dumps({'ok': False, 'error': str(error)}, ensure_ascii=False))
  33. sys.exit(1)