io_collector.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:ops_agent 作者: sjqzhang 项目源码 文件源码
def get_other_iostat(self):
        curr_stat = psutil.disk_io_counters(True)
        curr_cpu_time = self.sum_cpu_time(psutil.cpu_times()) / self.cpu_count
        if self.last_cpu_time == 0: #???
            self.last_stat = curr_stat
            self.last_cpu_time = curr_cpu_time
            return {}, 0
        data_per_disk = {k: 0 for k in self.metric_define}
        count = 0
        ts = curr_cpu_time - self.last_cpu_time
        for disk, nval in curr_stat.iteritems():
            oval = self.last_stat.get(disk)# ?????
            if not oval:
                continue
            total_time = nval.write_time - oval.write_time + nval.read_time - oval.read_time
            total_count = nval.write_count - oval.write_count + nval.read_count - oval.read_count
            if not total_count: # ?????IO????????
                continue
            data_per_disk['io.w_s'] += (nval.write_count - oval.write_count) / ts
            data_per_disk['io.wkbyte_s'] += (nval.write_bytes - oval.write_bytes) / 1024 / ts
            data_per_disk['io.r_s'] += (nval.read_count - oval.read_count) / ts
            data_per_disk['io.rkbyte_s'] += (nval.read_bytes - oval.read_bytes) / 1024 / ts
            data_per_disk['io.await'] += total_time / total_count if total_count else 0.0
            if hasattr(oval, 'busy_time'):# linux?psutil==4.0.0??busy_time
                data_per_disk['io.svctm'] += (nval.busy_time - oval.busy_time) / total_count if total_count else 0.0
                io_util = (nval.busy_time - oval.busy_time) * 100.0 / (ts*1000)
                if io_util > data_per_disk['io.util']:# ?????
                    data_per_disk['io.util'] = io_util if io_util < 100 else 100
                data_per_disk['io.queue_time_percent'] = (data_per_disk['io.await'] - data_per_disk['io.svctm']) * 100 / data_per_disk['io.await'] if data_per_disk['io.await'] else 0
            count += 1

        self.last_stat = curr_stat
        self.last_cpu_time = curr_cpu_time
        return data_per_disk, count
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号