X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/787f6bbd0dea6ccc684ad64ee51031f19a3c917f..37bc30fd8a2e3e3ee3a1dadcfad6fecc9345a53c:/unitproc/python/sleepRand.py diff --git a/unitproc/python/sleepRand.py b/unitproc/python/sleepRand.py index 3917506..016e9f3 100755 --- a/unitproc/python/sleepRand.py +++ b/unitproc/python/sleepRand.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 # Desc: Pauses a random amount of time. Random distribution is inverse gaussian. -# Version: 0.0.4 +# Version: 0.0.6 # Depends: python 3.7.3 -# Usage: ./sleepRand.py [-v] [-p L] SECONDS +# Usage: ./sleepRand.py [-v] [-p P] SECONDS # Input: SECONDS: float seconds (mean of inverse gaussian distribution) -# L: precision (lambda of inverse gaussian distribution) +# P: precision (lambda of inverse gaussian distribution) # Example: python3 sleepRand.py -vv -p 8.0 60.0 import argparse; @@ -34,10 +34,18 @@ parser.add_argument('--precision','-p', default=[4.0], type=float, help='How concentrated delays are around the mean (default: 4.0). Must be a positive integer or floating point value. Is the lambda factor in the inverse gaussian distribution. High values (e.g. > 10.0) cause random delays to rarely stray far from MEAN. Small values (e.g. < 0.10) result in many small delays plus occasional long delays.'); +parser.add_argument('--upper','-u', + action='store', + metavar='U', + nargs=1, + default=[None], + type=float, + help='Upper bound for possible delays (default: no bound). Without bound, extremely high delays are unlikely but possible.'); args = parser.parse_args(); # Define functions def setup_logging(verbosity): + '''Sets up logging''' # Depends: module: argparse # Ref/Attrib: Haas, Florian; Configure logging with argparse; https://xahteiwi.eu/resources/hints-and-kinks/python-cli-logging-options/ base_loglevel = 30; @@ -71,14 +79,29 @@ setup_logging(args.verbosity); logging.debug('DEBUG:Debug logging output enabled.'); logging.debug('DEBUG:args.verbosity:' + str(args.verbosity)); logging.debug('DEBUG:args:' + str(args)); -## Reject negative floats. + +## Receive input arguments try: ### Get desired mean desMean = args.mean[0]; logging.debug('DEBUG:Desired mean:' + str(desMean)); + ### Get lambda precision factor lambdaFactor = args.precision[0]; logging.debug('DEBUG:Lambda precision factor:' + str(lambdaFactor)); + + ### Get upper bound + if isinstance(args.upper[0], float): + logging.debug('DEBUG:args.upper[0] is float:' + str(args.upper[0])); + upperBound = args.upper[0]; + elif args.upper[0] is None: + logging.debug('DEBUG:args.upper[0] is None:' + str(args.upper[0])); + upperBound = None; + else: + raise TypeError('Upper bound not set correctly.'); + logging.debug('DEBUG:Upper bound:' + str(upperBound)); + + ### Reject negative floats. if desMean < 0: logging.error('ERROR:Desired mean is negative:' + str(desMean)); raise ValueError('Negative number error.'); @@ -89,8 +112,13 @@ except ValueError: sys.exit(1); # Calculate delay -delay = randInvGau(desMean, desMean * lambdaFactor); -logging.debug('delay:' + str(delay)); +rawDelay = randInvGau(desMean, desMean * lambdaFactor); +logging.debug('DEBUG:rawDelay(seconds):' + str(rawDelay)); +if isinstance(upperBound,float): + delay = min(upperBound, rawDelay); +elif upperBound is None: + delay = rawDelay; +logging.debug('DEBUG:delay(seconds) :' + str(delay)); # Sleep time.sleep(float(delay));