Esempio n. 1
0
    def upload_archive(self, data_collected, duration, cluster=None):
        """
        Do an HTTPS Upload of the archive
        """
        file_name = os.path.basename(data_collected)
        try:
            from insights.contrib import magic
            m = magic.open(magic.MAGIC_MIME)
            m.load()
            mime_type = m.file(data_collected)
        except ImportError:
            magic = None
            logger.debug(
                'python-magic not installed, using backup function...')
            from utilities import magic_plan_b
            mime_type = magic_plan_b(data_collected)

        files = {'file': (file_name, open(data_collected, 'rb'), mime_type)}

        if config["analyze_container"]:
            logger.debug('Uploading container, image, mountpoint or tarfile.')
            upload_url = self.upload_url
        elif cluster:
            logger.debug('Uploading cluster/host.')
            upload_url = self.upload_url + '/' + cluster
        else:
            logger.debug('Uploading a host.')
            upload_url = self.upload_url + '/' + generate_machine_id()

        logger.debug("Uploading %s to %s", data_collected, upload_url)

        headers = {'x-rh-collection-time': duration}
        net_logger.info("POST %s", upload_url)
        upload = self.session.post(upload_url, files=files, headers=headers)

        logger.debug("Upload status: %s %s %s", upload.status_code,
                     upload.reason, upload.text)
        if upload.status_code in (200, 201):
            the_json = json.loads(upload.text)
        else:
            logger.error("Upload archive failed with status code  %s",
                         upload.status_code)
            return upload
        try:
            config['account_number'] = the_json["upload"]["account_number"]
        except:
            config['account_number'] = None
        logger.debug("Upload duration: %s", upload.elapsed)
        return upload
Esempio n. 2
0
    def _legacy_upload_archive(self, data_collected, duration):
        '''
        Do an HTTPS upload of the archive
        '''
        file_name = os.path.basename(data_collected)
        try:
            from insights.contrib import magic
            m = magic.open(magic.MAGIC_MIME)
            m.load()
            mime_type = m.file(data_collected)
        except ImportError:
            magic = None
            logger.debug(
                'python-magic not installed, using backup function...')
            from .utilities import magic_plan_b
            mime_type = magic_plan_b(data_collected)

        files = {'file': (file_name, open(data_collected, 'rb'), mime_type)}

        upload_url = self.upload_url + '/' + generate_machine_id()

        logger.debug("Uploading %s to %s", data_collected, upload_url)

        headers = {'x-rh-collection-time': str(duration)}
        net_logger.info("POST %s", upload_url)
        upload = self.session.post(upload_url, files=files, headers=headers)

        logger.debug("Upload status: %s %s %s", upload.status_code,
                     upload.reason, upload.text)
        if upload.status_code in (200, 201):
            the_json = json.loads(upload.text)
        else:
            logger.error("Upload archive failed with status code  %s",
                         upload.status_code)
            return upload
        try:
            self.config.account_number = the_json["upload"]["account_number"]
        except:
            self.config.account_number = None
        logger.debug("Upload duration: %s", upload.elapsed)
        return upload
Esempio n. 3
0
    def upload_archive(self, data_collected, content_type, duration):
        """
        Do an HTTPS Upload of the archive
        """
        file_name = os.path.basename(data_collected)
        upload_url = self.upload_url

        # legacy upload
        if self.config.legacy_upload:
            try:
                from insights.contrib import magic
                m = magic.open(magic.MAGIC_MIME)
                m.load()
                mime_type = m.file(data_collected)
            except ImportError:
                magic = None
                logger.debug(
                    'python-magic not installed, using backup function...')
                from .utilities import magic_plan_b
                mime_type = magic_plan_b(data_collected)

            files = {
                'file': (file_name, open(data_collected, 'rb'), mime_type)
            }

            if self.config.analyze_container:
                logger.debug(
                    'Uploading container, image, mountpoint or tarfile.')
            else:
                logger.debug('Uploading a host.')
                upload_url = self.upload_url + '/' + generate_machine_id()
            headers = {'x-rh-collection-time': str(duration)}

        # platform upload
        else:
            files = {
                'upload': (file_name, open(data_collected, 'rb'), content_type)
            }
            headers = {}

        logger.debug("Uploading %s to %s", data_collected, upload_url)

        net_logger.info("POST %s", upload_url)
        upload = self.session.post(upload_url, files=files, headers=headers)

        logger.debug("Upload status: %s %s %s", upload.status_code,
                     upload.reason, upload.text)
        if upload.status_code in (200, 201):
            # 200/201 from legacy, load the response
            the_json = json.loads(upload.text)
        elif upload.status_code == 202:
            # 202 from platform, no json response
            logger.debug(upload.text)
        else:
            logger.error("Upload archive failed with status code  %s",
                         upload.status_code)
            return upload
        try:
            self.config.account_number = the_json["upload"]["account_number"]
        except:
            self.config.account_number = None
        logger.debug("Upload duration: %s", upload.elapsed)
        return upload
Esempio n. 4
0
import shlex
import subprocess
from subprocess import PIPE
import six
from threading import Lock

try:
    from insights.contrib import magic
except Exception:
    magic_loaded = False
else:
    # RHEL 6 does not have MAGIC_MIME_TYPE defined, but passing in the value
    # found in RHEL 7 (16, base 10), seems to work.
    mime_flag = magic.MAGIC_MIME_TYPE if hasattr(magic,
                                                 "MAGIC_MIME_TYPE") else 16
    _magic = magic.open(mime_flag | magic.CONTINUE)
    _magic.load()

    magic_loaded = True

# libmagic is not thread safe so we must lock access to file
magic_lock = Lock()


def from_file(name):
    if magic_loaded:
        with magic_lock:
            return six.b(_magic.file(name)).decode(
                "unicode-escape").splitlines()[0].strip()
    else:
        cmd = "file --mime-type -b %s"
Esempio n. 5
0
import shlex
import subprocess
from subprocess import PIPE

try:
    from insights.contrib import magic
except Exception:
    magic_loaded = False
else:
    # RHEL 6 does not have MAGIC_MIME_TYPE defined, but passing in the value
    # found in RHEL 7 (16, base 10), seems to work.
    mime_flag = magic.MAGIC_MIME_TYPE if hasattr(magic, "MAGIC_MIME_TYPE") else 16
    _magic = magic.open(mime_flag)
    _magic.load()

    _magic_inner = magic.open(mime_flag | magic.MAGIC_COMPRESS)
    _magic_inner.load()
    magic_loaded = True


def from_file(name):
    if magic_loaded:
        return _magic.file(name)
    else:
        cmd = "file --mime-type -b %s"
        p = subprocess.Popen(shlex.split(cmd % name), stdout=subprocess.PIPE)
        stdout, _ = p.communicate()
        return stdout.strip()


def from_buffer(b):
Esempio n. 6
0
    def upload_archive(self, data_collected, content_type, duration):
        """
        Do an HTTPS Upload of the archive
        """
        file_name = os.path.basename(data_collected)
        upload_url = self.upload_url

        try:
            c_facts = json.dumps(get_canonical_facts())
            logger.debug('Canonical facts collected:\n%s', c_facts)
        except Exception as e:
            logger.debug('Error getting canonical facts: %s', e)
            c_facts = None

        files = {}
        # legacy upload
        if self.config.legacy_upload:
            try:
                from insights.contrib import magic
                m = magic.open(magic.MAGIC_MIME)
                m.load()
                content_type = m.file(data_collected)
            except ImportError:
                magic = None
                logger.debug(
                    'python-magic not installed, using backup function...')
                from .utilities import magic_plan_b
                content_type = magic_plan_b(data_collected)

            if self.config.analyze_container:
                logger.debug(
                    'Uploading container, image, mountpoint or tarfile.')
            else:
                logger.debug('Uploading a host.')
                upload_url = self.upload_url + '/' + generate_machine_id()
            headers = {'x-rh-collection-time': str(duration)}
        else:
            headers = {}
            files['metadata'] = c_facts

        files['file'] = (file_name, open(data_collected, 'rb'), content_type)

        logger.debug("Uploading %s to %s", data_collected, upload_url)

        net_logger.info("POST %s", upload_url)
        upload = self.session.post(upload_url, files=files, headers=headers)

        logger.debug("Upload status: %s %s %s", upload.status_code,
                     upload.reason, upload.text)
        logger.debug('Request ID: %s',
                     upload.headers.get('x-rh-insights-request-id', None))
        if upload.status_code in (200, 201):
            # 200/201 from legacy, load the response
            the_json = json.loads(upload.text)
        elif upload.status_code == 202:
            # 202 from platform, no json response
            logger.debug(upload.text)
        else:
            logger.error("Upload archive failed with status code  %s",
                         upload.status_code)
            return upload
        try:
            self.config.account_number = the_json["upload"]["account_number"]
        except:
            self.config.account_number = None
        logger.debug("Upload duration: %s", upload.elapsed)
        return upload