def __init__(self, wok_options): if hasattr(wok_options, "model"): self.model = wok_options.model elif wok_options.test: self.model = mockmodel.MockModel() else: self.model = kimchiModel.Model() dev_env = wok_options.environment != 'production' super(KimchiRoot, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) if isinstance(self.model, kimchiModel.Model): vnc_ws_proxy = vnc.new_ws_proxy() cherrypy.engine.subscribe('exit', vnc_ws_proxy.terminate) self.api_schema = json.load(open(os.path.join(os.path.dirname( os.path.abspath(__file__)), 'API.json'))) self.paths = config.kimchiPaths self.domain = 'kimchi' self.messages = messages make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_distros_store()), os.path.abspath(config.get_debugreports_path()), os.path.abspath(config.get_screenshot_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory)
def __init__(self, wok_options): if hasattr(wok_options, "model"): self.model = wok_options.model elif wok_options.test: self.model = mockmodel.MockModel() else: self.model = kimchiModel.Model() dev_env = wok_options.environment != 'production' super(KimchiRoot, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) if isinstance(self.model, kimchiModel.Model): vnc_ws_proxy = vnc.new_ws_proxy() cherrypy.engine.subscribe('exit', vnc_ws_proxy.terminate) self.api_schema = json.load( open( os.path.join(os.path.dirname(os.path.abspath(__file__)), 'API.json'))) self.paths = config.kimchiPaths self.domain = 'kimchi' self.messages = messages make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_distros_store()), os.path.abspath(config.get_debugreports_path()), os.path.abspath(config.get_screenshot_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory)
def get_list(self): path = config.get_debugreports_path() file_pattern = os.path.join(path, '*.*') file_lists = glob.glob(file_pattern) file_lists = [os.path.split(file)[1] for file in file_lists] name_lists = [file.split('.', 1)[0] for file in file_lists] return name_lists
def delete(self, name): path = config.get_debugreports_path() file_pattern = os.path.join(path, name + '.*') try: file_target = glob.glob(file_pattern)[0] except IndexError: raise NotFoundError("KCHDR0001E", {'name': name}) os.remove(file_target)
def _create_log(self, cb, name): path = config.get_debugreports_path() tmpf = os.path.join(path, name + '.tmp') realf = os.path.join(path, name + '.txt') length = random.randint(1000, 10000) with open(tmpf, 'w') as fd: while length: fd.write('I am logged') length = length - 1 os.rename(tmpf, realf) cb("OK", True)
def update(self, name, params): path = config.get_debugreports_path() file_pattern = os.path.join(path, name + '.*') try: file_source = glob.glob(file_pattern)[0] except IndexError: raise NotFoundError("KCHDR0001E", {'name': name}) file_target = file_source.replace(name, params['name']) if os.path.isfile(file_target): raise InvalidParameter('KCHDR0008E', {'name': params['name']}) shutil.move(file_source, file_target) wok_log.info('%s renamed to %s' % (file_source, file_target)) return params['name']
def lookup(self, name): path = config.get_debugreports_path() file_pattern = os.path.join(path, name) file_pattern = file_pattern + '.*' try: file_target = glob.glob(file_pattern)[0] except IndexError: raise NotFoundError("KCHDR0001E", {'name': name}) ctime = os.stat(file_target).st_mtime ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime)) file_target = os.path.split(file_target)[-1] file_target = os.path.join("plugins/kimchi/data/debugreports", file_target) return {'uri': file_target, 'ctime': ctime}
def sosreport_generate(cb, name): def log_error(e): log = logging.getLogger('Model') log.warning('Exception in generating debug file: %s', e) try: command = ['sosreport', '--batch', '--name=%s' % name] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("KCHDR0003E", {'name': name, 'err': retcode}) # SOSREPORT might create file in /tmp or /var/tmp # FIXME: The right way should be passing the tar.xz file directory # though the parameter '--tmp-dir', but it is failing in Fedora 20 patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*'] reports = [] reportFile = None for p in patterns: reports = reports + [f for f in glob.glob(p % name)] for f in reports: if not fnmatch.fnmatch(f, '*.md5'): reportFile = f break # Some error in sosreport happened if reportFile is None: wok_log.error('Debug report file not found. See sosreport ' 'output for detail:\n%s', output) fname = (patterns[0] % name).split('/')[-1] raise OperationFailed('KCHDR0004E', {'name': fname}) md5_report_file = reportFile + '.md5' report_file_extension = '.' + reportFile.split('.', 1)[1] path = config.get_debugreports_path() target = os.path.join(path, name + report_file_extension) # Moving report msg = 'Moving debug report file "%s" to "%s"' % (reportFile, target) wok_log.info(msg) shutil.move(reportFile, target) # Deleting md5 msg = 'Deleting report md5 file: "%s"' % (md5_report_file) wok_log.info(msg) with open(md5_report_file) as f: md5 = f.read().strip() wok_log.info('Md5 file content: "%s"', md5) os.remove(md5_report_file) cb('OK', True) return except WokException as e: log_error(e) raise except OSError as e: log_error(e) raise except Exception, e: # No need to call cb to update the task status here. # The task object will catch the exception raised here # and update the task status there log_error(e) raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})
def sosreport_generate(cb, name): def log_error(e): log = logging.getLogger('Model') log.warning('Exception in generating debug file: %s', e) try: command = ['sosreport', '--batch', '--name=%s' % name] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("KCHDR0003E", { 'name': name, 'err': retcode }) # SOSREPORT might create file in /tmp or /var/tmp # FIXME: The right way should be passing the tar.xz file directory # though the parameter '--tmp-dir', but it is failing in Fedora 20 patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*'] reports = [] reportFile = None for p in patterns: reports = reports + [f for f in glob.glob(p % name)] for f in reports: if not fnmatch.fnmatch(f, '*.md5'): reportFile = f break # Some error in sosreport happened if reportFile is None: wok_log.error( 'Debug report file not found. See sosreport ' 'output for detail:\n%s', output) fname = (patterns[0] % name).split('/')[-1] raise OperationFailed('KCHDR0004E', {'name': fname}) md5_report_file = reportFile + '.md5' report_file_extension = '.' + reportFile.split('.', 1)[1] path = config.get_debugreports_path() target = os.path.join(path, name + report_file_extension) # Moving report msg = 'Moving debug report file "%s" to "%s"' % (reportFile, target) wok_log.info(msg) shutil.move(reportFile, target) # Deleting md5 msg = 'Deleting report md5 file: "%s"' % (md5_report_file) wok_log.info(msg) with open(md5_report_file) as f: md5 = f.read().strip() wok_log.info('Md5 file content: "%s"', md5) os.remove(md5_report_file) cb('OK', True) return except WokException as e: log_error(e) raise except OSError as e: log_error(e) raise except Exception, e: # No need to call cb to update the task status here. # The task object will catch the exception raised here # and update the task status there log_error(e) raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})