def sosreport_generate(cb, name): def log_error(e): wok_log = logging.getLogger('Model') wok_log.warning('Exception in generating debug file: %s', e) try: # Sosreport collection sosreport_file = sosreport_collection(name) md5_report_file = sosreport_file + '.md5' report_file_extension = '.' + sosreport_file.split('.', 1)[1] path = config.get_debugreports_path() sosreport_target = os.path.join(path, name + report_file_extension) msg = 'Moving debug report file "%s" to "%s"' \ % (sosreport_file, sosreport_target) wok_log.info(msg) shutil.move(sosreport_file, sosreport_target) delete_the_sosreport_md5_file(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("GGBDR0005E", {'name': name, 'err': e})
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 = gingerBaseModel.Model() dev_env = wok_options.environment != 'production' super(GingerBase, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) self.api_schema = json.load(open(os.path.join(os.path.dirname( os.path.abspath(__file__)), 'API.json'))) self.paths = config.gingerBasePaths self.domain = 'gingerbase' self.messages = messages make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_debugreports_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory)
def __init__(self, wok_options): make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_debugreports_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory) if wok_options.test and (wok_options.test is True or wok_options.test.lower() == 'true'): self.objectstore_loc = tempfile.mktemp() self.model = mockmodel.MockModel(self.objectstore_loc) def remove_objectstore(): if os.path.exists(self.objectstore_loc): os.unlink(self.objectstore_loc) cherrypy.engine.subscribe('exit', remove_objectstore) else: self.model = gingerBaseModel.Model() dev_env = wok_options.environment != 'production' super(Gingerbase, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) self.api_schema = json.load(open(os.path.join(os.path.dirname( os.path.abspath(__file__)), 'API.json'))) self.paths = config.gingerBasePaths self.domain = 'gingerbase' self.messages = messages
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("GGBDR0001E", {'name': name}) os.remove(file_target)
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("GGBDR0001E", {'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 _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 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("GGBDR0001E", {"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/gingerbase/data/debugreports", file_target) return {"uri": file_target, "ctime": ctime}
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("GGBDR0001E", {'name': name}) file_target = file_source.replace(name, params['name']) if os.path.isfile(file_target): raise InvalidParameter('GGBDR0008E', {'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("GGBDR0001E", {'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/gingerbase/data/debugreports", file_target) return {'uri': file_target, 'ctime': ctime}
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("GGBDR0001E", {'name': name}) file_target = file_source.replace(name, params['name']) if os.path.isfile(file_target): raise InvalidParameter('GGBDR0008E', {'name': params['name']}) shutil.move(file_source, file_target) wok_log.info('%s renamed to %s' % (file_source, file_target)) return params['name']
def debugreport_generate(cb, name): def log_error(e): wok_log = logging.getLogger('Model') wok_log.warning('Exception in generating debug file: %s', e) try: # Sosreport generation sosreport_file = sosreport_collection(name) md5_report_file = sosreport_file + '.md5' report_file_extension = '.' + sosreport_file.split('.', 1)[1] # If the platform is a system Z machine. path_debugreport = '/var/tmp/' dbginfo_report = None dbgreport_regex = path_debugreport + 'DBGINFO-' + \ '[0-9][0-9][0-9][0-9]-' + '[0-9][0-9]-' + \ '[0-9][0-9]-' + '[0-9][0-9]-' + '[0-9][0-9]-' + \ '[0-9][0-9]-' + '*-' + '*.tgz' command = ['/usr/sbin/dbginfo.sh', '-d', path_debugreport] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("GGBDR0009E", {'retcode': retcode, 'err': error}) # Checking for dbginforeport file. if output.splitlines(): dbginfo_report = glob.glob(dbgreport_regex) if len(dbginfo_report) == 0: raise OperationFailed("GGBDR0012E", {'retcode': retcode, 'err': error}) dbginfo_reportfile = dbginfo_report[-1] final_tar_report_name = name + report_file_extension sosreport_tar = sosreport_file.split('/', 3)[3] dbginfo_tar = dbginfo_reportfile.split('/', 3)[3] msg = 'Compressing the sosreport and debug info files into ' \ 'final report file' wok_log.info(msg) # Compressing the sosreport and dbginfo reports into one # tar file command = ['tar', '-cvzf', '%s' % final_tar_report_name, '-C', path_debugreport, dbginfo_tar, sosreport_tar] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("GGBDR0010E", {'retcode': retcode, 'error': error}) path = config.get_debugreports_path() dbg_target = os.path.join(path, name + report_file_extension) # Moving final tar file to debugreports path msg = 'Moving final debug report file "%s" to "%s"' % \ (final_tar_report_name, dbg_target) wok_log.info(msg) shutil.move(final_tar_report_name, dbg_target) # Deleting the sosreport md5 file delete_the_sosreport_md5_file(md5_report_file) # Deleting the dbginfo report file msg = 'Deleting the dbginfo file "%s" ' \ % dbginfo_reportfile wok_log.info(msg) os.remove(dbginfo_reportfile) # Deleting the sosreport file msg = 'Deleting the sosreport file "%s" ' % sosreport_file wok_log.info(msg) os.remove(sosreport_file) wok_log.info('The debug report file has been moved') 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("GGBDR0011E", {'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("GGBDR0003E", {'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('GGBDR0004E', {'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("GGBDR0005E", {'name': name, 'err': e})
def debugreport_generate(cb, name): def log_error(e): wok_log = logging.getLogger('Model') wok_log.warning('Exception in generating debug file: %s', e) try: # Sosreport generation sosreport_file = sosreport_collection(name) md5_report_file = sosreport_file + '.md5' report_file_extension = '.' + sosreport_file.split('.', 1)[1] # If the platform is a system Z machine. path_debugreport = '/var/tmp/' dbginfo_report = None dbgreport_regex = path_debugreport + 'DBGINFO-' + \ '[0-9][0-9][0-9][0-9]-' + '[0-9][0-9]-' + \ '[0-9][0-9]-' + '[0-9][0-9]-' + '[0-9][0-9]-' + \ '[0-9][0-9]-' + '*-' + '*.tgz' command = ['/usr/sbin/dbginfo.sh', '-d', path_debugreport] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed('GGBDR0009E', { 'retcode': retcode, 'err': error }) # Checking for dbginforeport file. if output.splitlines(): dbginfo_report = glob.glob(dbgreport_regex) if len(dbginfo_report) == 0: raise OperationFailed('GGBDR0012E', { 'retcode': retcode, 'err': error }) dbginfo_reportfile = dbginfo_report[-1] final_tar_report_name = name + report_file_extension sosreport_tar = sosreport_file.split('/', 3)[3] dbginfo_tar = dbginfo_reportfile.split('/', 3)[3] msg = 'Compressing the sosreport and debug info files into ' \ 'final report file' wok_log.info(msg) # Compressing the sosreport and dbginfo reports into one # tar file command = [ 'tar', '-cvzf', '%s' % final_tar_report_name, '-C', path_debugreport, dbginfo_tar, sosreport_tar ] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed('GGBDR0010E', { 'retcode': retcode, 'error': error }) path = config.get_debugreports_path() dbg_target = os.path.join(path, name + report_file_extension) # Moving final tar file to debugreports path msg = 'Moving final debug report file "%s" to "%s"' % \ (final_tar_report_name, dbg_target) wok_log.info(msg) shutil.move(final_tar_report_name, dbg_target) # Deleting the sosreport md5 file delete_the_sosreport_md5_file(md5_report_file) # Deleting the dbginfo report file msg = 'Deleting the dbginfo file "%s" ' \ % dbginfo_reportfile wok_log.info(msg) os.remove(dbginfo_reportfile) # Deleting the sosreport file msg = 'Deleting the sosreport file "%s" ' % sosreport_file wok_log.info(msg) os.remove(sosreport_file) wok_log.info('The debug report file has been moved') cb('OK', True) return except WokException as e: log_error(e) raise except OSError as e: log_error(e) raise except Exception as 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('GGBDR0011E', {'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("GGBDR0003E", { '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('GGBDR0004E', {'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("GGBDR0005E", {'name': name, 'err': e})
def debugreport_generate(cb, name): def log_error(e): wok_log = logging.getLogger("Model") wok_log.warning("Exception in generating debug file: %s", e) try: # Sosreport generation sosreport_file = sosreport_collection(name) md5_report_file = sosreport_file + ".md5" report_file_extension = "." + sosreport_file.split(".", 1)[1] # If the platform is a system Z machine. path_debugreport = "/var/tmp/" dbginfo_report = None dbgreport_regex = ( path_debugreport + "DBGINFO-" + "[0-9][0-9][0-9][0-9]-" + "[0-9][0-9]-" + "[0-9][0-9]-" + "[0-9][0-9]-" + "[0-9][0-9]-" + "[0-9][0-9]-" + "*-" + "*.tgz" ) command = ["/usr/sbin/dbginfo.sh", "-d", path_debugreport] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("GGBDR0009E", {"retcode": retcode, "err": error}) # Checking for dbginforeport file. if output.splitlines(): dbginfo_report = glob.glob(dbgreport_regex) if len(dbginfo_report) == 0: raise OperationFailed("GGBDR0012E", {"retcode": retcode, "err": error}) dbginfo_reportfile = dbginfo_report[-1] final_tar_report_name = name + report_file_extension sosreport_tar = sosreport_file.split("/", 3)[3] dbginfo_tar = dbginfo_reportfile.split("/", 3)[3] msg = "Compressing the sosreport and debug info files into " "final report file" wok_log.info(msg) # Compressing the sosreport and dbginfo reports into one # tar file command = ["tar", "-cvzf", "%s" % final_tar_report_name, "-C", path_debugreport, dbginfo_tar, sosreport_tar] output, error, retcode = run_command(command) if retcode != 0: raise OperationFailed("GGBDR0010E", {"retcode": retcode, "error": error}) path = config.get_debugreports_path() dbg_target = os.path.join(path, name + report_file_extension) # Moving final tar file to debugreports path msg = 'Moving final debug report file "%s" to "%s"' % (final_tar_report_name, dbg_target) wok_log.info(msg) shutil.move(final_tar_report_name, dbg_target) # Deleting the sosreport md5 file delete_the_sosreport_md5_file(md5_report_file) # Deleting the dbginfo report file msg = 'Deleting the dbginfo file "%s" ' % dbginfo_reportfile wok_log.info(msg) os.remove(dbginfo_reportfile) # Deleting the sosreport file msg = 'Deleting the sosreport file "%s" ' % sosreport_file wok_log.info(msg) os.remove(sosreport_file) wok_log.info("The debug report file has been moved") 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("GGBDR0011E", {"name": name, "err": e})