def _get_container_info(self, instance, log_name, publish):
     try:
         log_info = self._log_action(instance, log_name, publish=publish)
         container = log_info.container
         prefix = log_info.prefix
         metadata_file = log_info.metafile
         return container, prefix, metadata_file
     except swift_client.ClientException as ex:
         if ex.http_status == 404:
             raise exceptions.GuestLogNotFoundError()
         raise
示例#2
0
        def _log_generator(instance, log_name, lines, swift):
            try:
                container, prefix, metadata_file = self._get_container_info(
                    instance, log_name)

                head, body = swift.get_container(container, prefix=prefix)
                log_obj_to_display = []

                if lines:
                    total_lines = lines
                    partial_results = False
                    parts = sorted(body,
                                   key=lambda obj: obj['last_modified'],
                                   reverse=True)

                    for part in parts:
                        obj_hdrs = swift.head_object(container, part['name'])
                        obj_lines = int(obj_hdrs['x-object-meta-lines'])
                        log_obj_to_display.insert(0, part)
                        if obj_lines >= lines:
                            partial_results = True
                            break
                        lines -= obj_lines
                    if not partial_results:
                        lines = total_lines

                    part = log_obj_to_display.pop(0)
                    hdrs, log_obj = swift.get_object(container, part['name'])
                    log_by_lines = log_obj.decode().splitlines()
                    yield "\n".join(log_by_lines[-1 * lines:]) + "\n"
                else:
                    # Show all the logs
                    log_obj_to_display = sorted(
                        body, key=lambda obj: obj['last_modified'])

                for log_part in log_obj_to_display:
                    headers, log_obj = swift.get_object(
                        container, log_part['name'])
                    yield log_obj.decode()
            except swift_client.ClientException as ex:
                if ex.http_status == 404:
                    raise exceptions.GuestLogNotFoundError()
                raise