Warning
This document is for an old release 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()