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
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
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
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"
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):
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