diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/ephemeris/sleep.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+'''Utility to do a blocking sleep until a Galaxy instance is responsive.
+This is useful in docker images, in RUN steps, where one needs to wait
+for a currently starting Galaxy to be alive, before API requests can be
+made successfully.
+
+The script functions by making repeated requests to
+``http(s)://fqdn/api/version``, an API which requires no authentication
+to access.'''
+
+import sys
+import time
+from argparse import ArgumentParser
+
+import requests
+from galaxy.util import unicodify
+
+from .common_parser import get_common_args
+
+
+def _parser():
+    '''Constructs the parser object'''
+    parent = get_common_args(login_required=False)
+    parser = ArgumentParser(parents=[parent], usage="usage: %(prog)s <options>",
+                            description="Script to sleep and wait for Galaxy to be alive.")
+    parser.add_argument("--timeout",
+                        default=0, type=int,
+                        help="Galaxy startup timeout in seconds. The default value of 0 waits forever")
+    return parser
+
+
+def _parse_cli_options():
+    """
+    Parse command line options, returning `parse_args` from `ArgumentParser`.
+    """
+    parser = _parser()
+    return parser.parse_args()
+
+
+def galaxy_wait(galaxy_url, timeout=600, verbose=False):
+    count = 0
+    while True:
+        try:
+            result = requests.get(galaxy_url + '/api/version')
+            try:
+                result = result.json()
+                if verbose:
+                    sys.stdout.write("Galaxy Version: %s\n" % result['version_major'])
+                break
+            except ValueError:
+                if verbose:
+                    sys.stdout.write("[%02d] No valid json returned... %s\n" % (count, result.__str__()))
+                    sys.stdout.flush()
+        except requests.exceptions.ConnectionError as e:
+            if verbose:
+                sys.stdout.write("[%02d] Galaxy not up yet... %s\n" % (count, unicodify(e)[0:100]))
+                sys.stdout.flush()
+        count += 1
+
+        # If we cannot talk to galaxy and are over the timeout
+        if timeout != 0 and count > timeout:
+            sys.stderr.write("Failed to contact Galaxy\n")
+            sys.exit(1)
+
+        time.sleep(1)
+
+
+def main():
+    """
+    Main function
+    """
+    options = _parse_cli_options()
+
+    galaxy_wait(options.galaxy, options.timeout, options.verbose)
+
+    sys.exit(0)
+
+
+if __name__ == "__main__":
+    main()