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})
Example #2
0
    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)
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
 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)
Example #9
0
    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}
Example #10
0
    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']
Example #11
0
    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}
Example #12
0
    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})
Example #14
0
    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})
Example #15
0
    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})
Example #16
0
    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})
Example #17
0
    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})