scheduling of the main giveaway code
This commit is contained in:
parent
113e111e9d
commit
8dc2721efe
3 changed files with 75 additions and 51 deletions
|
@ -1,14 +1,10 @@
|
||||||
import json
|
|
||||||
from random import randint
|
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from requests.adapters import HTTPAdapter
|
from requests.adapters import HTTPAdapter
|
||||||
from urllib3.util import Retry
|
from urllib3.util import Retry
|
||||||
|
|
||||||
|
from .database import GiveawayHelper
|
||||||
from .log import get_logger
|
from .log import get_logger
|
||||||
from .database import NotificationHelper, GiveawayHelper
|
|
||||||
from .won_entry import WonEntry
|
from .won_entry import WonEntry
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
@ -85,6 +81,7 @@ class EvaluateWonGiveaways:
|
||||||
w = GiveawayHelper.get_by_giveaway_id(won_giveaway.giveaway_game_id)
|
w = GiveawayHelper.get_by_giveaway_id(won_giveaway.giveaway_game_id)
|
||||||
logger.debug(f"Giveaway in db: {w}")
|
logger.debug(f"Giveaway in db: {w}")
|
||||||
if w and not w.won and w.entered:
|
if w and not w.won and w.entered:
|
||||||
logger.info(f"Found new won giveaway not already marked as won. Marking. {w}")
|
logger.info(f"Marking {won_giveaway.game_name} as won.")
|
||||||
|
logger.debug(f"Marking: {w}")
|
||||||
GiveawayHelper.mark_game_as_won(won_giveaway.giveaway_game_id)
|
GiveawayHelper.mark_game_as_won(won_giveaway.giveaway_game_id)
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
import datetime
|
import datetime
|
||||||
import threading
|
import threading
|
||||||
from datetime import timedelta, datetime
|
from datetime import timedelta, datetime
|
||||||
from random import randint
|
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from dateutil import tz
|
from .enter_giveaways import EnterGiveaways
|
||||||
|
|
||||||
from .evaluate_won_giveaways import EvaluateWonGiveaways
|
from .evaluate_won_giveaways import EvaluateWonGiveaways
|
||||||
from .log import get_logger
|
from .log import get_logger
|
||||||
from .enter_giveaways import EnterGiveaways
|
|
||||||
from .scheduler import Scheduler
|
from .scheduler import Scheduler
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
@ -22,63 +19,71 @@ class GiveawayThread(threading.Thread):
|
||||||
self.exc = None
|
self.exc = None
|
||||||
self.config = config
|
self.config = config
|
||||||
self.notification = notification
|
self.notification = notification
|
||||||
|
logger.debug("Creating scheduler")
|
||||||
|
self._scheduler = Scheduler()
|
||||||
|
self.won_giveaway_job_id = 'eval_won_giveaways'
|
||||||
|
self.evaluate_giveaway_job_id = 'eval_giveaways'
|
||||||
|
|
||||||
def run_steam_gifts(self, config, notification):
|
if config['DEFAULT'].getboolean('enabled'):
|
||||||
cookie = config['DEFAULT'].get('cookie')
|
cookie = config['DEFAULT'].get('cookie')
|
||||||
user_agent = config['DEFAULT'].get('user_agent')
|
user_agent = config['DEFAULT'].get('user_agent')
|
||||||
main_page_enabled = config['DEFAULT'].getboolean('enabled')
|
|
||||||
minimum_points = config['DEFAULT'].getint('minimum_points')
|
minimum_points = config['DEFAULT'].getint('minimum_points')
|
||||||
max_entries = config['DEFAULT'].getint('max_entries')
|
max_entries = config['DEFAULT'].getint('max_entries')
|
||||||
max_time_left = config['DEFAULT'].getint('max_time_left')
|
max_time_left = config['DEFAULT'].getint('max_time_left')
|
||||||
minimum_game_points = config['DEFAULT'].getint('minimum_game_points')
|
minimum_game_points = config['DEFAULT'].getint('minimum_game_points')
|
||||||
blacklist = config['DEFAULT'].get('blacklist_keywords')
|
blacklist = config['DEFAULT'].get('blacklist_keywords')
|
||||||
|
|
||||||
all_page = EnterGiveaways(cookie, user_agent, 'All', False, minimum_points, max_entries,
|
self._all_page = EnterGiveaways(cookie, user_agent, 'All', False, minimum_points, max_entries,
|
||||||
max_time_left, minimum_game_points, blacklist, notification)
|
max_time_left, minimum_game_points, blacklist, notification)
|
||||||
|
|
||||||
wishlist_page_enabled = config['WISHLIST'].getboolean('wishlist.enabled')
|
if config['WISHLIST'].getboolean('wishlist.enabled'):
|
||||||
wishlist_minimum_points = config['WISHLIST'].getint('wishlist.minimum_points')
|
wishlist_minimum_points = config['WISHLIST'].getint('wishlist.minimum_points')
|
||||||
wishlist_max_entries = config['WISHLIST'].getint('wishlist.max_entries')
|
wishlist_max_entries = config['WISHLIST'].getint('wishlist.max_entries')
|
||||||
wishlist_max_time_left = config['WISHLIST'].getint('wishlist.max_time_left')
|
wishlist_max_time_left = config['WISHLIST'].getint('wishlist.max_time_left')
|
||||||
|
|
||||||
wishlist_page = EnterGiveaways(cookie, user_agent, 'Wishlist', False, wishlist_minimum_points,
|
self._wishlist_page = EnterGiveaways(cookie, user_agent, 'Wishlist', False, wishlist_minimum_points,
|
||||||
wishlist_max_entries, wishlist_max_time_left, 0, '', notification)
|
wishlist_max_entries, wishlist_max_time_left, 0, '', notification)
|
||||||
|
|
||||||
if not main_page_enabled and not wishlist_page_enabled:
|
if not self._all_page and not self._wishlist_page:
|
||||||
logger.error("⁉️ Both 'Default' and 'Wishlist' configurations are disabled. Nothing will run. Exiting...")
|
logger.error("⁉️ Both 'Default' and 'Wishlist' configurations are disabled. Nothing will run. Exiting...")
|
||||||
sleep(10)
|
sleep(10)
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
logger.debug("Creating scheduler")
|
self._won_page_job_function = EvaluateWonGiveaways(cookie, user_agent, notification).start
|
||||||
scheduler = Scheduler()
|
won_giveaway_job = self._scheduler.get_job(job_id=self.won_giveaway_job_id)
|
||||||
won_giveaway_job = scheduler.get_job(job_id='eval_giveaways')
|
|
||||||
if won_giveaway_job:
|
if won_giveaway_job:
|
||||||
logger.debug("Previous won giveaway evaluator job exists. Removing.")
|
logger.debug("Previous won giveaway evaluator job exists. Removing.")
|
||||||
won_giveaway_job.remove()
|
won_giveaway_job.remove()
|
||||||
scheduler.add_job(EvaluateWonGiveaways(cookie, user_agent, notification).start,
|
self._scheduler.add_job(self._won_page_job_function,
|
||||||
id='eval_giveaways', trigger='interval', max_instances=1, replace_existing=True, days=1,
|
id=self.won_giveaway_job_id,
|
||||||
next_run_time=datetime.now() + timedelta(minutes=1))
|
trigger='interval',
|
||||||
scheduler.start()
|
max_instances=1,
|
||||||
|
replace_existing=True,
|
||||||
|
hours=12,
|
||||||
|
next_run_time=datetime.now() + timedelta(minutes=5),
|
||||||
|
jitter=8000)
|
||||||
|
|
||||||
while True:
|
evaluate_giveaway_job = self._scheduler.get_job(job_id=self.evaluate_giveaway_job_id)
|
||||||
logger.info("🟢 Evaluating giveaways.")
|
if evaluate_giveaway_job:
|
||||||
if wishlist_page_enabled:
|
logger.debug("Previous giveaway evaluator job exists. Removing.")
|
||||||
wishlist_page.start()
|
evaluate_giveaway_job.remove()
|
||||||
if main_page_enabled:
|
runner = GiveawayThread.GiveawayRunner(self._wishlist_page, self._all_page,
|
||||||
all_page.start()
|
self.evaluate_giveaway_job_id)
|
||||||
|
self._scheduler.add_job(runner.run,
|
||||||
logger.info("🔴 All giveaways evaluated.")
|
id=self.evaluate_giveaway_job_id,
|
||||||
random_seconds = randint(1740, 3540) # sometime between 29-59 minutes
|
trigger='interval',
|
||||||
when_to_start_again = datetime.now(tz=tz.tzlocal()) + timedelta(seconds=random_seconds)
|
max_instances=1,
|
||||||
logger.info(f"🛋 Going to sleep for {random_seconds / 60} minutes. "
|
replace_existing=True,
|
||||||
f"Will start again at {when_to_start_again}")
|
minutes=44,
|
||||||
sleep(random_seconds)
|
next_run_time=datetime.now(),
|
||||||
|
jitter=900)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# Variable that stores the exception, if raised by someFunction
|
# Variable that stores the exception, if raised by someFunction
|
||||||
self.exc = None
|
self.exc = None
|
||||||
try:
|
try:
|
||||||
self.run_steam_gifts(self.config, self.notification)
|
self._scheduler.start()
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
self.exc = e
|
self.exc = e
|
||||||
|
|
||||||
|
@ -89,3 +94,25 @@ class GiveawayThread(threading.Thread):
|
||||||
# if any was caught
|
# if any was caught
|
||||||
if self.exc:
|
if self.exc:
|
||||||
raise self.exc
|
raise self.exc
|
||||||
|
|
||||||
|
class GiveawayRunner:
|
||||||
|
|
||||||
|
def __init__(self, wishlist_page, all_page, job_id):
|
||||||
|
self._wishlist_page = wishlist_page
|
||||||
|
self._all_page = all_page
|
||||||
|
self._job_id = job_id
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
logger.info("🟢 Evaluating giveaways.")
|
||||||
|
if self._wishlist_page:
|
||||||
|
self._wishlist_page.start()
|
||||||
|
if self._all_page:
|
||||||
|
self._all_page.start()
|
||||||
|
logger.info("🔴 All giveaways evaluated.")
|
||||||
|
scheduler = Scheduler()
|
||||||
|
evaluate_giveaway_job = scheduler.get_job(job_id=self._job_id)
|
||||||
|
if evaluate_giveaway_job:
|
||||||
|
when_to_start_again = evaluate_giveaway_job.next_run_time
|
||||||
|
logger.info(f"🛋 Going to sleep. Will start again at {when_to_start_again}")
|
||||||
|
else:
|
||||||
|
logger.info("No set time to evaluate giveaways again.")
|
|
@ -1,7 +1,7 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
||||||
from apscheduler.schedulers.background import BackgroundScheduler
|
from apscheduler.schedulers.blocking import BlockingScheduler
|
||||||
|
|
||||||
from .log import get_logger
|
from .log import get_logger
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ class Scheduler:
|
||||||
'coalesce': True,
|
'coalesce': True,
|
||||||
'max_instances': 3
|
'max_instances': 3
|
||||||
}
|
}
|
||||||
self.scheduler = BackgroundScheduler(jobstores=jobstores, job_defaults=job_defaults)
|
self.scheduler = BlockingScheduler(jobstores=jobstores, job_defaults=job_defaults)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return getattr(self.scheduler, name)
|
return getattr(self.scheduler, name)
|
||||||
|
|
Loading…
Reference in a new issue