Code Duplication    Length = 61-66 lines in 2 locations

plumd/readers/linux/netsnmp.py 1 location

@@ 67-132 (lines=66) @@
64
        :rtype: ResultSet
65
        """
66
        return plumd.ResultSet(self.check())
67
68
    def check(self):
69
        """Return network protocol metrics from proc file net/snmp.
70
71
        Add entries to the configuration value 'skip_proc_net_snmp' to skip
72
        metrics.
73
74
        Add entries to the configuration value 'net_snmp_items' to match the
75
        format/order of the proc file net/snmp entries on the system.
76
77
        :rtype: plumd.Result
78
        """
79
        result = plumd.Result("netsnmp")
80
81
        # read the proc file
82
        dat = []
83
        with open(self.proc_file, 'r') as pfd:
84
            dat = pfd.read().strip().split("\n")
85
86
        # timestamp for Differential calculations
87
        times = time.time()
88
89
        # split values into lists
90
        dlist = deque([entry.split() for entry in dat])
91
92
        # put lists into key: value dict
93
        metrics = {}
94
        while dlist:
95
            headers = dlist.popleft()
96
            values = dlist.popleft()
97
            # { 'IpExt': {'InNoRoutes': 0, ...} } - [:-1] on IpExt: removes :
98
            metrics[headers[0][:-1]] = dict(zip(headers, values))
99
100
        # record gauges
101
        for proto, mnames in self.gauges.items():
102
            if proto not in metrics:
103
                self.log.warn("netsnmp: unknown protocol: {0}".format(proto))
104
                del self.gauges[proto]
105
                continue
106
            values = metrics[proto]
107
            for mname in mnames:
108
                if mname in values:
109
                    mstr = "{0}.{1}".format(proto, mname)
110
                    result.add(plumd.Int(mstr, values[mname]))
111
                else:
112
                    self.log.warn("netstat: unknown metric {0}".format(mname))
113
                    self.gauges[proto].remove(mname)
114
                    continue
115
116
        # record rates
117
        for proto, mnames in self.rates.items():
118
            if proto not in metrics:
119
                self.log.warn("netsnmp: unknown protocol: {0}".format(proto))
120
                del self.gauges[proto]
121
                continue
122
            values = metrics[proto]
123
            for mname in mnames:
124
                if mname in values:
125
                    mstr = "{0}.{1}".format(proto, mname)
126
                    mval = self.calc.per_second(mstr, int(values[mname]), times)
127
                    result.add(plumd.Int(mstr, mval))
128
                else:
129
                    self.log.warn("netstat: unknown metric {0}".format(mname))
130
                    self.rates[proto].remove(mname)
131
                    continue
132
133
        return [result]
134

plumd/readers/linux/netstat.py 1 location

@@ 65-125 (lines=61) @@
62
        :rtype: ResultSet
63
        """
64
        return plumd.ResultSet(self.check())
65
66
    def check(self):
67
        """Return detailed network statitistics proc file net/netstat.
68
69
        Note: ECT1Pkts and ECT0Pkts relate to ECT congestion notifications.
70
71
        :rtype: plumd.Result
72
        """
73
        # what metrics do we want to record?
74
        result = plumd.Result("netstat")
75
76
        # read the proc file
77
        dat = None
78
        with open(self.proc_file, 'r') as f:
79
            dat = f.read().strip().split("\n")
80
81
        # timestamp for Differential calculations
82
        ts = time.time()
83
84
        # split values into lists
85
        dlist = deque([entry.split() for entry in dat])
86
87
        # put lists into key: value dict
88
        metrics = {}
89
        while dlist:
90
            headers = dlist.popleft()
91
            values = dlist.popleft()
92
            # { 'IpExt': {'InNoRoutes': 0, ...} } - [:-1] on IpExt: removes :
93
            metrics[headers[0][:-1]] = dict(zip(headers, values))
94
95
        # record gauges
96
        for ext, mnames in self.gauges.items():
97
            if ext not in metrics:
98
                self.log.warn("netstat: unknown extension: {0}".format(ext))
99
                del self.gauges[ext]
100
                continue
101
            values = metrics[ext]
102
            for mname in mnames:
103
                if mname in values:
104
                    mstr = "{0}.{1}".format(ext, mname)
105
                    result.add(plumd.Int(mstr, values[mname]))
106
                else:
107
                    self.log.warn("netstat: unknown metric {0}".format(mname))
108
                    self.gauges[ext].remove(mname)
109
110
        # record rates
111
        for ext, mnames in self.rates.items():
112
            if ext not in metrics:
113
                self.log.warn("netstat: unknown extension: {0}".format(ext))
114
                del self.rates[ext]
115
                continue
116
            values = metrics[ext]
117
            for mname in mnames:
118
                if mname in values:
119
                    mstr = "{0}.{1}".format(ext, mname)
120
                    mval = self.calc.per_second(mstr, float(values[mname]), ts)
121
                    result.add(plumd.Float(mstr, mval))
122
                else:
123
                    self.log.warn("netstat: unknown metric {0}".format(mname))
124
                    self.rates[ext].remove(mname)
125
126
        return [result]
127