Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.webapps.galaxy.controllers.interactive_environments
"""
API check for whether the current session's interactive environment launch is ready
"""
import logging
from galaxy.web import expose, json
from galaxy.webapps.base.controller import BaseUIController
log = logging.getLogger(__name__)
[docs]class InteractiveEnvironmentsController(BaseUIController):
[docs] @expose
@json
def ready(self, trans, **kwd):
"""
GET /interactive_environments/ready/
Queries the GIE proxy IPC to determine whether the current user's session's GIE launch is ready
:returns: ``true`` if ready else ``false``
:rtype: boolean
"""
proxy_map = self.app.proxy_manager.query_proxy(trans)
if not proxy_map.container_interface:
# not using the new containers interface
return True
try:
interface = self.app.containers[proxy_map.container_interface]
except KeyError:
log.error('Invalid container interface key: %s', proxy_map.container_interface)
return None
container = interface.get_container(proxy_map.container_ids[0])
if not proxy_map.port > 0:
# a negative port means it failed to be determined at launch time; the negated negative port is the
# container port
log.debug("Container %s (%s) mapping for port %s is not set in the proxy, attempting to get port mapping "
"now", container.name, container.id, -proxy_map.port)
mapping = container.map_port(-proxy_map.port)
if mapping:
log.info("Container %s (%s) port %s accessible at: %s:%s", container.name, container.id,
-proxy_map.port, mapping.hostaddr, mapping.hostport)
self.app.proxy_manager.update_proxy(trans, host=mapping.hostaddr, port=mapping.hostport)
else:
log.warning("Container %s (%s) mapping for port %s cannot be determined!", container.name, container.id,
-proxy_map.port)
return False
return container.is_ready()