(self, rrd_path, hostname, device_name, tags)
return metric_count
Main metric fetching method.
Main metric fetching method.
Main metric fetching method .
def _read_rrd(self, rrd_path, hostname, device_name, tags):
        """Main metric fetching method."""
        metric_count = 0

        try:
            info = self._get_rrd_info(rrd_path)
        except Exception:
            # Unable to read RRD file, ignore it
            self.log.exception("Unable to read RRD file at %s", rrd_path)
            return metric_count

        # Find the consolidation functions for the RRD metrics
        c_funcs = set([v for k, v in info.items() if k.endswith('.cf')])
        if not c_funcs:
            self.log.debug("No funcs found for %s", rrd_path)

        for c in list(c_funcs):
            last_ts_key = '%s.%s' % (rrd_path, c)
            if last_ts_key not in self.last_ts:
                self.last_ts[last_ts_key] = int(time.time())
                continue

            start = self.last_ts[last_ts_key]
            last_ts = start

            try:
                fetched = self._get_rrd_fetch(rrd_path, c, start)
            except rrdtool.error:
                # Start time was out of range, skip this RRD
                self.log.warning("Time %s out of range for %s", rrd_path, start)
                return metric_count

            # Extract the data
            (start_ts, end_ts, interval) = fetched[0]
            metric_names = fetched[1]
            points = fetched[2]
            for k, m_name in enumerate(metric_names):
                m_name = self._format_metric_name(m_name, c)
                for i, p in enumerate(points):
                    ts = start_ts + (i * interval)

                    if p[k] is None:
                        continue

                    # Save this metric as a gauge
                    val = self._transform_metric(m_name, p[k])
                    self.gauge(m_name, val, hostname=hostname, device_name=device_name, tags=tags)
                    metric_count += 1
                    last_ts = ts + interval

            # Update the last timestamp based on the last valid metric
            self.last_ts[last_ts_key] = last_ts
        return metric_count
def _read_rrd ( self , rrd_path , hostname , device_name , tags ) : metric_count = 0 try : info = self . _get_rrd_info ( rrd_path ) except Exception : # Unable to read RRD file, ignore it self . log . exception ( "Unable to read RRD file at %s" , rrd_path ) return metric_count # Find the consolidation functions for the RRD metrics c_funcs = set ( [ v for k , v in info . items ( ) if k . endswith ( '.cf' ) ] ) if not c_funcs : self . log . debug ( "No funcs found for %s" , rrd_path ) for c in list ( c_funcs ) : last_ts_key = '%s.%s' % ( rrd_path , c ) if last_ts_key not in self . last_ts : self . last_ts [ last_ts_key ] = int ( time . time ( ) ) continue start = self . last_ts [ last_ts_key ] last_ts = start try : fetched = self . _get_rrd_fetch ( rrd_path , c , start ) except rrdtool . error : # Start time was out of range, skip this RRD self . log . warning ( "Time %s out of range for %s" , rrd_path , start ) return metric_count # Extract the data ( start_ts , end_ts , interval ) = fetched [ 0 ] metric_names = fetched [ 1 ] points = fetched [ 2 ] for k , m_name in enumerate ( metric_names ) : m_name = self . _format_metric_name ( m_name , c ) for i , p in enumerate ( points ) : ts = start_ts + ( i * interval ) if p [ k ] is None : continue # Save this metric as a gauge val = self . _transform_metric ( m_name , p [ k ] ) self . gauge ( m_name , val , hostname = hostname , device_name = device_name , tags = tags ) metric_count += 1 last_ts = ts + interval # Update the last timestamp based on the last valid metric self . last_ts [ last_ts_key ] = last_ts return metric_count