Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/ephemeris/sleep.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 '''Utility to do a blocking sleep until a Galaxy instance is responsive. | |
| 3 This is useful in docker images, in RUN steps, where one needs to wait | |
| 4 for a currently starting Galaxy to be alive, before API requests can be | |
| 5 made successfully. | |
| 6 | |
| 7 The script functions by making repeated requests to | |
| 8 ``http(s)://fqdn/api/version``, an API which requires no authentication | |
| 9 to access.''' | |
| 10 | |
| 11 import sys | |
| 12 import time | |
| 13 from argparse import ArgumentParser | |
| 14 | |
| 15 import requests | |
| 16 from galaxy.util import unicodify | |
| 17 | |
| 18 from .common_parser import get_common_args | |
| 19 | |
| 20 | |
| 21 def _parser(): | |
| 22 '''Constructs the parser object''' | |
| 23 parent = get_common_args(login_required=False) | |
| 24 parser = ArgumentParser(parents=[parent], usage="usage: %(prog)s <options>", | |
| 25 description="Script to sleep and wait for Galaxy to be alive.") | |
| 26 parser.add_argument("--timeout", | |
| 27 default=0, type=int, | |
| 28 help="Galaxy startup timeout in seconds. The default value of 0 waits forever") | |
| 29 return parser | |
| 30 | |
| 31 | |
| 32 def _parse_cli_options(): | |
| 33 """ | |
| 34 Parse command line options, returning `parse_args` from `ArgumentParser`. | |
| 35 """ | |
| 36 parser = _parser() | |
| 37 return parser.parse_args() | |
| 38 | |
| 39 | |
| 40 def galaxy_wait(galaxy_url, timeout=600, verbose=False): | |
| 41 count = 0 | |
| 42 while True: | |
| 43 try: | |
| 44 result = requests.get(galaxy_url + '/api/version') | |
| 45 try: | |
| 46 result = result.json() | |
| 47 if verbose: | |
| 48 sys.stdout.write("Galaxy Version: %s\n" % result['version_major']) | |
| 49 break | |
| 50 except ValueError: | |
| 51 if verbose: | |
| 52 sys.stdout.write("[%02d] No valid json returned... %s\n" % (count, result.__str__())) | |
| 53 sys.stdout.flush() | |
| 54 except requests.exceptions.ConnectionError as e: | |
| 55 if verbose: | |
| 56 sys.stdout.write("[%02d] Galaxy not up yet... %s\n" % (count, unicodify(e)[0:100])) | |
| 57 sys.stdout.flush() | |
| 58 count += 1 | |
| 59 | |
| 60 # If we cannot talk to galaxy and are over the timeout | |
| 61 if timeout != 0 and count > timeout: | |
| 62 sys.stderr.write("Failed to contact Galaxy\n") | |
| 63 sys.exit(1) | |
| 64 | |
| 65 time.sleep(1) | |
| 66 | |
| 67 | |
| 68 def main(): | |
| 69 """ | |
| 70 Main function | |
| 71 """ | |
| 72 options = _parse_cli_options() | |
| 73 | |
| 74 galaxy_wait(options.galaxy, options.timeout, options.verbose) | |
| 75 | |
| 76 sys.exit(0) | |
| 77 | |
| 78 | |
| 79 if __name__ == "__main__": | |
| 80 main() |
