Esempio n. 1
0
    def get_datadir_size(self):
        # du requires root priviledge to check data-dir
        if not util.is_root_privilege():
            logging.fatal(
                "It's required to check data-dir size with root priviledge.")
            return

        for proc in self.collector_data["proc_stats"]:
            args = util.parse_cmdline(proc["cmd"])
            try:
                data_dir = args["data-dir"]
            except KeyError:
                continue
            if os.listdir(data_dir) != []:
                stdout, stderr = space.du_subfiles(data_dir)
            else:
                stdout, stderr = space.du_total(data_dir)
            if stdout:
                fileutils.write_file(
                    os.path.join(self.full_outdir, "size-%s" % proc["pid"]),
                    stdout)
            if stderr:
                fileutils.write_file(
                    os.path.join(self.full_outdir,
                                 "size-%s.err" % proc["pid"]), stderr)
Esempio n. 2
0
    def run(self, outputdir=None):
        # set output path of perf data
        full_outputdir = fileutils.build_full_output_dir(basedir=outputdir,
                                                         subdir=self.data_dir)

        if full_outputdir is None:
            # something went wrong when setting output dir, exit without perfing
            # TODO: unified output: "Error when setting up output dir of perf data"
            return

        if len(self.process_info) > 0:
            # perf on given process(es)
            for pid, pname in self.process_info.items():
                cmd = self.build_cmd(pid, pname, full_outputdir)
                # TODO: unified output: "Now perf recording %s(%d)..." % (pname, pid)
                stdout, stderr = util.run_cmd(cmd)
                if stdout:
                    fileutils.write_file(
                        path.join(full_outputdir, "%s.stdout" % pname), stdout)
                if stderr:
                    fileutils.write_file(
                        path.join(full_outputdir, "%s.stderr" % pname), stderr)
        else:
            # perf the entire system
            cmd = self.build_cmd()
            stdout, stderr = util.run_cmd(cmd)
            if stdout:
                fileutils.write_file(path.join(full_outputdir, "perf.stdout"),
                                     stdout)
            if stderr:
                fileutils.write_file(path.join(full_outputdir, "perf.stderr"),
                                     stderr)
Esempio n. 3
0
    def get_lsof_tidb(self):
        # lsof requires root priviledge
        if not util.is_root_privilege():
            logging.fatal("It's required to run lsof with root priviledge.")
            return

        for proc in self.collector_data["proc_stats"]:
            stdout, stderr = lsof.lsof(proc["pid"])
            if stdout:
                fileutils.write_file(
                    os.path.join(self.full_outdir, "lsof-%s") % proc["pid"],
                    stdout)
            if stderr:
                fileutils.write_file(
                    os.path.join(self.full_outdir,
                                 "lsof-%s.err" % proc["pid"]), stderr)
Esempio n. 4
0
    def save_sysconf(self, outputdir=None):
        cmd = ["sysctl", "-a"]
        path_limit_file = "/etc/security/limits.conf"

        # save output of `sysctl -a`
        full_outputdir = fileutils.build_full_output_dir(
            basedir=outputdir, subdir=self.config_dir)
        stdout, stderr = util.run_cmd(cmd)
        if stdout:
            fileutils.write_file(os.path.join(full_outputdir, "sysctl.conf"),
                                 stdout)
        if stderr:
            fileutils.write_file(os.path.join(full_outputdir, "sysctl.err"),
                                 stderr)

        # save system limits.conf
        shutil.copy(path_limit_file, full_outputdir)
Esempio n. 5
0
    def collector(self):
        # TODO: warn on non-empty output dir

        # call `collector` and store data to output dir
        base_dir = os.path.join(util.pwd(), "../")
        collector_exec = os.path.join(base_dir, "bin/collector")
        collector_outdir = fileutils.create_dir(
            os.path.join(self.full_outdir, "collector"))

        stdout, stderr = util.run_cmd(collector_exec)
        if stderr:
            logging.warning(str(stderr))
        try:
            self.collector_data = json.loads(stdout)
        except json.JSONDecodeError:
            # TODO: unified output: "Error collecting system info.\n%s" % stderr
            return

        # save various info to seperate .json files
        for k, v in self.collector_data.items():
            fileutils.write_file(os.path.join(collector_outdir, "%s.json" % k),
                                 json.dumps(v, indent=2))
Esempio n. 6
0
    def save_info(self, basedir=None):
        full_outputdir = fileutils.build_full_output_dir(
            basedir=basedir, subdir=self.pdctl_dir)
        pd_health = self.read_health()
        if pd_health:
            fileutils.write_file(os.path.join(
                full_outputdir, "%s-health.json" % self.pd_host), pd_health)
        pd_diagnose = self.read_diagnose()
        if pd_diagnose:
            fileutils.write_file(os.path.join(
                full_outputdir, "%s-diagnose.json" % self.pd_host), pd_diagnose)

        for key, info in self.read_runtime_info().items():
            if not info:
                continue
            fileutils.write_file(os.path.join(
                full_outputdir, "%s-%s.json" % (self.pd_host, key)), info)