"""Jitter method for lambdas.""" from random import random from time import sleep import constants.jitter as jitter_const import config from logging import getLogger, StreamHandler, Formatter from config import LOGGER_LEVEL log = getLogger(__name__) log.setLevel(LOGGER_LEVEL) handler = StreamHandler() handler.setLevel(LOGGER_LEVEL) formatter = Formatter( '%(asctime)s | %(levelname)s | %(message)s', datefmt='%Y-%m-%d at %I:%M:%S %p %Z' ) handler.setFormatter(formatter) log.addHandler(handler) if config.JITTER_FACTOR: JITTER_FACTOR = config.JITTER_FACTOR else: if config.ENVIRONMENT.upper() == 'PROD': JITTER_CONSTANT = jitter_const.PROD_FACTOR else: JITTER_CONSTANT = jitter_const.QA_FACTOR def jitter(do_sleep=None, small_jitter=False): """Jitter lambda calls so the systems don't get hammered.""" if not do_sleep: do_sleep = True if small_jitter: jitter_amt = max(min(random(), 0.5), 0.1) else: jitter_amt = (random() + random()) / JITTER_FACTOR log.debug(f'Jittering: {jitter_amt}') if do_sleep: sleep(jitter_amt) return jitter_amt