app.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """General function module"""
  2. import random
  3. from datetime import datetime, timedelta
  4. from app import LOGGER, SCHEDULER, RESOURCE_IDS, DEEP_EXPLORATION_MAX, jobs, api, database
  5. def sync_deep_exploration(region_id):
  6. """Check resources and refill if necessary"""
  7. deep_explorations = api.download_deep_explorations(region_id)
  8. database.save_deep_explorations(region_id, deep_explorations)
  9. def schedule_orders():
  10. """start deep exploration orders"""
  11. orders = database.get_orders()
  12. for order in orders:
  13. schedule_order(order)
  14. def schedule_order(order):
  15. """start deep exploration order"""
  16. deep_exploration = database.get_active_deep_exploration(order.region_id)
  17. if deep_exploration is None:
  18. sync_deep_exploration(order.region_id)
  19. deep_exploration = database.get_active_deep_exploration(order.region_id)
  20. start_date = deep_exploration.until_date_time if deep_exploration else datetime.now()
  21. max_seconds = 300
  22. random_seconds = random.randint(0, max_seconds)
  23. scheduled_date = start_date + timedelta(seconds=random_seconds)
  24. LOGGER.info(
  25. 'Schedule deep exploration at %s for %s in %s',
  26. scheduled_date.strftime("%Y-%m-%d %H:%M:%S"),
  27. RESOURCE_IDS[order.resource_type],
  28. order.region_id
  29. )
  30. SCHEDULER.add_job(
  31. jobs.start_deep_exploration_order,
  32. 'date',
  33. args=[order.id],
  34. id='deep_exploration_{}_{}'.format(order.region_id, order.resource_type),
  35. replace_existing=True,
  36. run_date=scheduled_date
  37. )
  38. def start_deep_exploration(order_id):
  39. """Start deep exploration"""
  40. LOGGER.info('Start order %s', order_id)
  41. order = database.get_order(order_id)
  42. order_types = {
  43. 0: get_max_points, # max
  44. 1: get_fixed_points, # fixed
  45. 2: get_percentage_points, # percentage
  46. 3: get_auto_points, # auto
  47. }
  48. if order.order_type in order_types:
  49. points = order_types[order.order_type](order)
  50. state = database.get_state(order.region_id)
  51. api.deep_explorate(state.id, order.region_id, order.resource_type, points, False)
  52. schedule_order(order)
  53. def get_max_points(order):
  54. """Get deep exploration points for order"""
  55. region = database.get_region(order.region_id)
  56. resource_limit = region.get_limit(order.resource_type)
  57. return DEEP_EXPLORATION_MAX[order.resource_type] - resource_limit
  58. def get_fixed_points(order):
  59. """Get deep exploration points for order"""
  60. return order.amount
  61. def get_percentage_points(order):
  62. """Get deep exploration points for order"""
  63. return 1
  64. def get_auto_points(order):
  65. """Get deep exploration points for order"""
  66. return 1