Code Duplication    Length = 24-30 lines in 3 locations

plumd/plugins/readers/psutilreaders.py 3 locations

@@ 103-132 (lines=30) @@
100
        return rset
101
102
103
class Disk(plumd.plugins.Reader):
104
    """
105
    Class to measure disk utilization using the psutil module.
106
    """
107
    defaults = {
108
        'poll.interval': 300,
109
        'devices': None # all
110
    }
111
112
    def poll(self):
113
        """Poll for disk space utilization metrics.
114
115
        :rtype: ResultSet
116
        """
117
        rset = plumd.ResultSet()
118
        for disk in psutil.disk_partitions():
119
            metrics = []
120
            dev = disk.device.split("/")[-1]
121
            dev = dev.replace(":", "").replace("\\", "")
122
            try:
123
                u = psutil.disk_usage(disk.mountpoint)
124
            except OSError:
125
                continue
126
            for f in u._fields:
127
                val = getattr(u, f)
128
                metrics.append(plumd.Float(f, val))
129
            robj = plumd.Result("disk", metrics)
130
            robj.meta.add(plumd.String("dev", dev))
131
            rset.add(robj)
132
        return rset
133
134
135
class DiskIo(plumd.plugins.Reader):
@@ 135-158 (lines=24) @@
132
        return rset
133
134
135
class DiskIo(plumd.plugins.Reader):
136
    """Class to measure disk io."""
137
    defaults = {
138
        'poll.interval': 10,
139
        'devices': None # all
140
    }
141
142
    def poll(self):
143
        """Poll for diskio metrics.
144
145
        :rtype: ResultSet
146
        """
147
        rset = plumd.ResultSet()
148
        diskio = psutil.disk_io_counters(perdisk=True)
149
        for dev in diskio.keys():
150
            metrics = []
151
            io = diskio[dev]
152
            for f in io._fields:
153
                val = getattr(io, f)
154
                metrics.append(plumd.Float(f, val))
155
            robj = plumd.Result("diskio", metrics)
156
            robj.meta.add(plumd.String("dev", dev))
157
            rset.add(robj)
158
        return rset
159
@@ 77-100 (lines=24) @@
74
        return plumd.ResultSet([plumd.Result("swap", metrics)])
75
76
77
class Net(plumd.plugins.Reader):
78
    """Class to measure network interface metrics using the psutil module."""
79
    defaults = {
80
        'poll.interval': 10,
81
        'nics': None # all
82
    }
83
84
    def poll(self):
85
        """Poll for net per nic bandwidth metrics.
86
87
        :rtype: ResultSet
88
        """
89
        nicios = psutil.net_io_counters(pernic=True)
90
        rset = plumd.ResultSet()
91
        for nic in nicios.keys():
92
            metrics = []
93
            io = nicios[nic]
94
            for f in io._fields:
95
                val = getattr(io, f)
96
                metrics.append(plumd.Float(f, val))
97
            robj = plumd.Result("net", metrics)
98
            robj.meta.add(plumd.String("nic", nic.replace(" ", "_")))
99
            rset.add(robj)
100
        return rset
101
102
103
class Disk(plumd.plugins.Reader):