def get_images(): """Computes the response of the '/cluster/resources/images' endpoint. Returns: The images of the context graph. """ gs = app.context_graph_global_state # A dictionary from Image ID to wrapped image objects. # If an image appears more than once, keep only its latest value. images_dict = {} try: for node in kubernetes.get_nodes(gs): for image in docker.get_images(gs, node['id']): images_dict[image['id']] = image except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'kubernetes.get_images() failed with exception %s' % sys.exc_info( )[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) # The images list is sorted by increasing identifiers. images_list = [images_dict[key] for key in sorted(images_dict.keys())] return flask.jsonify(utilities.make_response(images_list, 'resources'))
def get_images(): """Computes the response of the '/cluster/resources/images' endpoint. Returns: The images of the context graph. """ gs = app.context_graph_global_state # A dictionary from Image ID to wrapped image objects. # If an image appears more than once, keep only its latest value. images_dict = {} try: for node in kubernetes.get_nodes(gs): for image in docker.get_images(gs, node['id']): images_dict[image['id']] = image except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'kubernetes.get_images() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) # The images list is sorted by increasing identifiers. images_list = [images_dict[key] for key in sorted(images_dict.keys())] return flask.jsonify(utilities.make_response(images_list, 'resources'))
def get_processes(): """Computes the response of the '/cluster/resources/processes' endpoint. Returns: The processes of the context graph. """ processes = [] gs = app.context_graph_global_state try: for node in kubernetes.get_nodes(gs): node_id = node['id'] docker_host = node_id for container in docker.get_containers(gs, docker_host): container_id = container['id'] processes.extend( docker.get_processes(gs, docker_host, container_id)) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'get_processes() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(processes, 'resources'))
def get_processes(): """Computes the response of the '/cluster/resources/processes' endpoint. Returns: The processes of the context graph. """ processes = [] gs = app.context_graph_global_state try: for node in kubernetes.get_nodes(gs): node_id = node['id'] docker_host = node_id for container in docker.get_containers(gs, docker_host): container_id = container['id'] processes.extend(docker.get_processes(gs, docker_host, container_id)) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'get_processes() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(processes, 'resources'))
def get_version(): """Computes the response of the '/version' endpoint. Returns: The value of the docker.get_version() or an error message. """ gs = app.context_graph_global_state try: version = docker.get_version(gs) return flask.jsonify(utilities.make_response(version, 'version')) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('get_version() failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_debug(): """Computes the response of the '/cluster/resources/debug' endpoint. Returns: The DOT graph depicting the context graph. """ gs = app.context_graph_global_state try: return context.compute_graph(gs, 'dot') except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('compute_graph(\"dot\") failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_response(req, cache=None): """Send request 'req' to the Docker unix socket and returns the response.""" if cache: value, _ = cache.lookup(req) if value is not None: app.logger.info('cache hit for request=%s', req) return flask.make_response( value, requests.codes.ok, {'Content-Type': 'application/json'}) try: result = fetch(req) cleanup(result) output = json.dumps(result) if cache: app.logger.info('caching result of request=%s', req) cache.update(req, output) return flask.make_response( output, requests.codes.ok, {'Content-Type': 'application/json'}) except: exc_type, value, _ = sys.exc_info() msg = ('Failed to retrieve %s with exception %s: %s' % (req, exc_type, value)) app.logger.error(msg) return flask.jsonify(utilities.make_error(msg))
def get_debug(): """Computes the response of the '/cluster/resources/debug' endpoint. Returns: The DOT graph depicting the context graph. """ gs = app.context_graph_global_state try: return context.compute_graph(gs, 'dot') except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('compute_graph(\"dot\") failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_version(): """Computes the response of the '/version' endpoint. Returns: The value of the docker.get_version() or an error message. """ gs = app.context_graph_global_state try: version = docker.get_version(gs) return flask.jsonify(utilities.make_response(version, 'version')) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('get_version() failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_cluster(): """Computes the response of the '/cluster' endpoint. Returns: The entire context graph. """ gs = app.context_graph_global_state try: response = context.compute_graph(gs, 'context_graph') return flask.jsonify(response) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('compute_graph(\"context_graph\") failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_cluster(): """Computes the response of the '/cluster' endpoint. Returns: The entire context graph. """ gs = app.context_graph_global_state try: response = context.compute_graph(gs, 'context_graph') return flask.jsonify(response) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('compute_graph(\"context_graph\") failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_nodes(): """Computes the response of the '/cluster/resources/nodes' endpoint. Returns: The nodes of the context graph. """ gs = app.context_graph_global_state try: nodes_list = kubernetes.get_nodes_with_metrics(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'kubernetes.get_nodes() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(nodes_list, 'resources'))
def get_services(): """Computes the response of the '/cluster/resources/services' endpoint. Returns: The services of the context graph. """ gs = app.context_graph_global_state try: services_list = kubernetes.get_services(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('kubernetes.get_services() failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(services_list, 'resources'))
def get_one_container_processes(container_id): qargs = flask.request.args.to_dict() if flask.request.args else {} if len(qargs) != 1 or qargs.get('ps_args') != 'aux': return flask.jsonify(utilities.make_error( 'For /container/{container_id}/top, the sole mandatory arg is ' 'ps_args=aux. %s is not allowed' % (qargs))) return get_response( '/containers/{cid}/top?ps_args=aux'.format(cid=container_id))
def get_one_container_processes(container_id): qargs = flask.request.args.to_dict() if flask.request.args else {} if len(qargs) != 1 or qargs.get('ps_args') != 'aux': return flask.jsonify(utilities.make_error( 'For /container/{container_id}/top, the sole mandatory arg is ' 'ps_args=aux. %s is not allowed' % (qargs))) return get_response( '/containers/{cid}/top?ps_args=aux'.format(cid=container_id))
def get_rcontrollers(): """Computes the response of accessing the '/cluster/resources/rcontrollers'. Returns: The replication controllers of the context graph. """ gs = app.context_graph_global_state try: rcontrollers_list = kubernetes.get_rcontrollers(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = ('kubernetes.get_rcontrollers() failed with exception %s' % sys.exc_info()[0]) app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(rcontrollers_list, 'resources'))
def get_debug(): """Computes the response of the '/cluster/resources/debug' endpoint. Returns: The DOT graph depicting the context graph. """ gs = app.context_graph_global_state try: return context.compute_graph(gs, 'dot') except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e)))
def get_debug(): """Computes the response of the '/cluster/resources/debug' endpoint. Returns: The DOT graph depicting the context graph. """ gs = app.context_graph_global_state try: return context.compute_graph(gs, 'dot') except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e)))
def get_cluster(): """Computes the response of the '/cluster' endpoint. Returns: The entire context graph. """ gs = app.context_graph_global_state try: response = context.compute_graph(gs, 'context_graph') return flask.jsonify(response) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e)))
def get_cluster(): """Computes the response of the '/cluster' endpoint. Returns: The entire context graph. """ gs = app.context_graph_global_state try: response = context.compute_graph(gs, 'context_graph') return flask.jsonify(response) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e)))
def get_nodes(): """Computes the response of the '/cluster/resources/nodes' endpoint. Returns: The nodes of the context graph. """ gs = app.context_graph_global_state try: nodes_list = kubernetes.get_nodes_with_metrics(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) return flask.jsonify(utilities.make_response(nodes_list, 'resources'))
def get_pods(): """Computes the response of the '/cluster/resources/pods' endpoint. Returns: The pods of the context graph. """ gs = app.context_graph_global_state try: pods_list = kubernetes.get_pods(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) return flask.jsonify(utilities.make_response(pods_list, 'resources'))
def get_rcontrollers(): """Computes the response of accessing the '/cluster/resources/rcontrollers'. Returns: The replication controllers of the context graph. """ gs = app.context_graph_global_state try: rcontrollers_list = kubernetes.get_rcontrollers(gs) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) return flask.jsonify( utilities.make_response(rcontrollers_list, 'resources'))
def get_containers(): """Computes the response of the '/cluster/resources/containers' endpoint. Returns: The containers of the context graph. """ containers = [] gs = app.context_graph_global_state try: for node in kubernetes.get_nodes(gs): # The node_id is the Docker host name. docker_host = node['id'] containers.extend(docker.get_containers_with_metrics(gs, docker_host)) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'get_containers() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(containers, 'resources'))
def get_minions(): """Computes the response of the '/minions_status' endpoint. Returns: A dictionary from node names to the status of their minion collectors or an error message. """ gs = app.context_graph_global_state minions_status = {} try: for node in kubernetes.get_nodes(gs): assert utilities.is_wrapped_object(node, 'Node') docker_host = node['id'] minions_status[docker_host] = docker.get_minion_status(gs, docker_host) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'get_minions_status() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(minions_status, 'minionsStatus'))
def get_containers(): """Computes the response of the '/cluster/resources/containers' endpoint. Returns: The containers of the context graph. """ containers = [] gs = app.context_graph_global_state try: for node in kubernetes.get_nodes(gs): # The node_id is the Docker host name. docker_host = node['id'] containers.extend( docker.get_containers_with_metrics(gs, docker_host)) except collector_error.CollectorError as e: return flask.jsonify(utilities.make_error(str(e))) except: msg = 'get_containers() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg)) return flask.jsonify(utilities.make_response(containers, 'resources'))
def get_elapsed(): """Computes the response of the '/elapsed' endpoint. Returns: A successful response containing the list of elapsed time records of the most recent Kubernetes and Docker access operations since the previous call to the '/elapsed' endpoint. Never returns more than constants.MAX_ELAPSED_QUEUE_SIZE elapsed time records. """ gs = app.context_graph_global_state try: result = return_elapsed(gs) return flask.jsonify(utilities.make_response(result, 'elapsed')) except: msg = 'get_elapsed() failed with exception %s' % sys.exc_info()[0] app.logger.exception(msg) return flask.jsonify(utilities.make_error(msg))
def get_response(req, cache=None): """Send request 'req' to the Docker unix socket and returns the response.""" if cache: value, _ = cache.lookup(req) if value is not None: app.logger.info('cache hit for request=%s', req) return flask.make_response( value, 200, {'Content-Type': 'application/json'}) try: r = fetch(req) if r.status_code != 200: msg = 'Accessing %s API returns an error code %d' % (req, r.status_code) app.logger.error(msg) raise IOError(msg) else: result = r.json() cleanup(result) output = json.dumps(result) if cache: app.logger.info('caching result of request=%s', req) cache.update(req, output) return flask.make_response( output, r.status_code, {'Content-Type': 'application/json'}) except Exception as e: app.logger.error(e, exc_info=True) exc_type, value, _ = sys.exc_info() msg = ('Failed to retrieve %s with exception %s: %s' % (req, exc_type, value)) app.logger.error(msg) return flask.jsonify(utilities.make_error(msg))