Beispiel #1
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)
Beispiel #2
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)
Beispiel #3
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))
Beispiel #4
0
def du_total(filepath):
    # TODO: support relative path, this require `collector` to output cwd of process
    cmd = ["du", "-s", str(filepath)]
    return util.run_cmd(cmd)
Beispiel #5
0
def du_subfiles(filepath):
    # TODO: support relative path, this require `collector` to output cwd of process
    filelist = glob(filepath+"/*")
    cmd = ["du", "-s"] + filelist
    return util.run_cmd(cmd)
Beispiel #6
0
def lsof(pid):
    cmd = ["lsof", "-p",
           "%s" % pid]
    return util.run_cmd(cmd)