comparison env/lib/python3.9/site-packages/ephemeris/sleep.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
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()