示例#1
0
文件: taskstats.py 项目: tijko/IO-Mon
class Taskstats(object):
    '''
    The Taskstats class makes requests to assemble netlink messages that
    communicate taskstats.
    '''
    def __init__(self, pid):
        super(Taskstats, self).__init__()
        self.pid = pid
        self.genlctrl = Controller(TASKSTATS_GENL_NAME)
        self.attrs = dict()
        self.taskstats_fields = [task[0] for task in taskstat_struct]
        self.fmt = ''.join([task[1] for task in taskstat_struct])

    def get_task(self, task, pid):
        task_msg_payload = Genlmsg(TASKSTATS_CMD_GET, Nlattr(
                                   TASKSTATS_CMD_ATTR_PID, pid))
        self.genlctrl.send(Nlmsg(self.genlctrl.fam_id, self.pid, 
                                         task_msg_payload).pack())
        task_response = self.genlctrl.recv()
        parse_response(self, task_response[NLA_HDRLEN:])
        taskstats_raw = self.attrs[TASKSTATS_TYPE_STATS]
        taskstats = dict(zip(self.taskstats_fields,
                             struct.unpack(self.fmt, taskstats_raw)))
        return taskstats.get(task)

    def process_name(self, pid):
        raw_taskstats_name = self.get_task('ac_comm', pid)
        taskstats_name = raw_taskstats_name.strip('\x00')
        return taskstats_name
                            
    def read(self, pid):
        taskstats_read = self.get_task('read_bytes', pid)
        return taskstats_read

    def write(self, pid):
        taskstats_write = self.get_task('write_bytes', pid)
        return taskstats_write

    def swap(self, pid):
        process_swap = self.get_task('swapin_count', pid)
        return process_swap
示例#2
0
文件: taskstats.py 项目: tijko/shadow
class Taskstats(object):
    '''
    The Taskstats class makes requests to assemble netlink messages that
    communicate taskstats.
    '''
    def __init__(self, pid):
        super(Taskstats, self).__init__()
        self.pid = pid
        self.genlctrl = Controller(TASKSTATS_GENL_NAME)
        self.attrs = dict()
        self.taskstat_fields = [task[0] for task in taskstat_struct]
        self.fmt = ''.join([task[1] for task in taskstat_struct])

    def get_task(self, task):
        task_msg_payload = Genlmsg(TASKSTATS_CMD_GET, Nlattr(
                                   TASKSTATS_CMD_ATTR_PID, self.pid))
        self.genlctrl.send(Nlmsg(self.genlctrl.fam_id, task_msg_payload).pack())
        task_response = self.genlctrl.recv()
        parse_response(self, task_response[NLA_HDRLEN:])
        if not self.attrs.get(TASKSTATS_TYPE_STATS):
            return -1
        taskstats_raw = self.attrs[TASKSTATS_TYPE_STATS]
        taskstats = dict(zip(self.taskstat_fields, 
                             struct.unpack(self.fmt, taskstats_raw)))
        return taskstats.get(task)
 
    def read(self):
        taskstats_read = self.get_task('read_bytes')
        if taskstats_read == -1:
            raise InsufficientRights(self.read.func_name, self.pid)
        return taskstats_read

    def write(self):
        taskstats_write = self.get_task('write_bytes')
        if taskstats_write == -1:
            raise InsufficientRights(self.write.func_name, self.pid)
        return taskstats_write