(self, buf)
return metrics, tags, mode, version
`buf` is a readable file-like object
        returns a tuple: (metrics, tags, mode, version)
`buf` is a readable file-like object
        returns a tuple: (metrics, tags, mode, version)
buf is a readable file - like object returns a tuple : ( metrics tags mode version )
def parse_stat(self, buf):
        """
        `buf` is a readable file-like object
        returns a tuple: (metrics, tags, mode, version)
        """
        metrics = []
        buf.seek(0)

        # Check the version line to make sure we parse the rest of the
        # body correctly. Particularly, the Connections val was added in
        # >= 3.4.4.
        start_line = buf.readline()
        # this is to grab the additional version information
        total_match = self.METADATA_VERSION_PATTERN.search(start_line)
        if total_match is None:
            return None, None, "inactive", None
        else:
            version = total_match.group(1).split("-")[0]
            # grabs the entire version number for inventories.
            metadata_version = total_match.group(1)
            self.set_metadata('version', metadata_version)
        has_connections_val = LooseVersion(version) > LooseVersion("3.4.4")

        # Clients:
        buf.readline()  # skip the Clients: header
        connections = 0
        client_line = buf.readline().strip()
        if client_line:
            connections += 1
        while client_line:
            client_line = buf.readline().strip()
            if client_line:
                connections += 1

        # Latency min/avg/max: -10/0.0/20007
        _, value = buf.readline().split(':')
        l_min, l_avg, l_max = [float(v) for v in value.strip().split('/')]
        metrics.append(ZKMetric('zookeeper.latency.min', l_min))
        metrics.append(ZKMetric('zookeeper.latency.avg', l_avg))
        metrics.append(ZKMetric('zookeeper.latency.max', l_max))

        # Received: 101032173
        _, value = buf.readline().split(':')
        # Fixme: This metric name is wrong. It should be removed in a major version of the agent
        # See https://github.com/DataDog/integrations-core/issues/816
        metrics.append(ZKMetric('zookeeper.bytes_received', long(value.strip())))
        metrics.append(ZKMetric('zookeeper.packets.received', long(value.strip()), "rate"))

        # Sent: 1324
        _, value = buf.readline().split(':')
        # Fixme: This metric name is wrong. It should be removed in a major version of the agent
        # See https://github.com/DataDog/integrations-core/issues/816
        metrics.append(ZKMetric('zookeeper.bytes_sent', long(value.strip())))
        metrics.append(ZKMetric('zookeeper.packets.sent', long(value.strip()), "rate"))

        if has_connections_val:
            # Connections: 1
            _, value = buf.readline().split(':')
            metrics.append(ZKMetric('zookeeper.connections', int(value.strip())))
        else:
            # If the zk version doesn't explicitly give the Connections val,
            # use the value we computed from the client list.
            metrics.append(ZKMetric('zookeeper.connections', connections))

        # Outstanding: 0
        _, value = buf.readline().split(':')
        metrics.append(ZKMetric('zookeeper.outstanding_requests', long(value.strip())))

        # Zxid: 0x1034799c7
        _, value = buf.readline().split(':')
        # Parse as a 64 bit hex int
        zxid = long(value.strip(), 16)
        # convert to bytes
        zxid_bytes = struct.pack('>q', zxid)
        # the higher order 4 bytes is the epoch
        (zxid_epoch,) = struct.unpack('>i', zxid_bytes[0:4])
        # the lower order 4 bytes is the count
        (zxid_count,) = struct.unpack('>i', zxid_bytes[4:8])

        metrics.append(ZKMetric('zookeeper.zxid.epoch', zxid_epoch))
        metrics.append(ZKMetric('zookeeper.zxid.count', zxid_count))

        # Mode: leader
        _, value = buf.readline().split(':')
        mode = value.strip().lower()
        tags = [u'mode:' + mode]

        # Node count: 487
        _, value = buf.readline().split(':')
        metrics.append(ZKMetric('zookeeper.nodes', long(value.strip())))

        return metrics, tags, mode, version
def parse_stat ( self , buf ) : metrics = [ ] buf . seek ( 0 ) # Check the version line to make sure we parse the rest of the # body correctly. Particularly, the Connections val was added in # >= 3.4.4. start_line = buf . readline ( ) # this is to grab the additional version information total_match = self . METADATA_VERSION_PATTERN . search ( start_line ) if total_match is None : return None , None , "inactive" , None else : version = total_match . group ( 1 ) . split ( "-" ) [ 0 ] # grabs the entire version number for inventories. metadata_version = total_match . group ( 1 ) self . set_metadata ( 'version' , metadata_version ) has_connections_val = LooseVersion ( version ) > LooseVersion ( "3.4.4" ) # Clients: buf . readline ( ) # skip the Clients: header connections = 0 client_line = buf . readline ( ) . strip ( ) if client_line : connections += 1 while client_line : client_line = buf . readline ( ) . strip ( ) if client_line : connections += 1 # Latency min/avg/max: -10/0.0/20007 _ , value = buf . readline ( ) . split ( ':' ) l_min , l_avg , l_max = [ float ( v ) for v in value . strip ( ) . split ( '/' ) ] metrics . append ( ZKMetric ( 'zookeeper.latency.min' , l_min ) ) metrics . append ( ZKMetric ( 'zookeeper.latency.avg' , l_avg ) ) metrics . append ( ZKMetric ( 'zookeeper.latency.max' , l_max ) ) # Received: 101032173 _ , value = buf . readline ( ) . split ( ':' ) # Fixme: This metric name is wrong. It should be removed in a major version of the agent # See https://github.com/DataDog/integrations-core/issues/816 metrics . append ( ZKMetric ( 'zookeeper.bytes_received' , long ( value . strip ( ) ) ) ) metrics . append ( ZKMetric ( 'zookeeper.packets.received' , long ( value . strip ( ) ) , "rate" ) ) # Sent: 1324 _ , value = buf . readline ( ) . split ( ':' ) # Fixme: This metric name is wrong. It should be removed in a major version of the agent # See https://github.com/DataDog/integrations-core/issues/816 metrics . append ( ZKMetric ( 'zookeeper.bytes_sent' , long ( value . strip ( ) ) ) ) metrics . append ( ZKMetric ( 'zookeeper.packets.sent' , long ( value . strip ( ) ) , "rate" ) ) if has_connections_val : # Connections: 1 _ , value = buf . readline ( ) . split ( ':' ) metrics . append ( ZKMetric ( 'zookeeper.connections' , int ( value . strip ( ) ) ) ) else : # If the zk version doesn't explicitly give the Connections val, # use the value we computed from the client list. metrics . append ( ZKMetric ( 'zookeeper.connections' , connections ) ) # Outstanding: 0 _ , value = buf . readline ( ) . split ( ':' ) metrics . append ( ZKMetric ( 'zookeeper.outstanding_requests' , long ( value . strip ( ) ) ) ) # Zxid: 0x1034799c7 _ , value = buf . readline ( ) . split ( ':' ) # Parse as a 64 bit hex int zxid = long ( value . strip ( ) , 16 ) # convert to bytes zxid_bytes = struct . pack ( '>q' , zxid ) # the higher order 4 bytes is the epoch ( zxid_epoch , ) = struct . unpack ( '>i' , zxid_bytes [ 0 : 4 ] ) # the lower order 4 bytes is the count ( zxid_count , ) = struct . unpack ( '>i' , zxid_bytes [ 4 : 8 ] ) metrics . append ( ZKMetric ( 'zookeeper.zxid.epoch' , zxid_epoch ) ) metrics . append ( ZKMetric ( 'zookeeper.zxid.count' , zxid_count ) ) # Mode: leader _ , value = buf . readline ( ) . split ( ':' ) mode = value . strip ( ) . lower ( ) tags = [ u'mode:' + mode ] # Node count: 487 _ , value = buf . readline ( ) . split ( ':' ) metrics . append ( ZKMetric ( 'zookeeper.nodes' , long ( value . strip ( ) ) ) ) return metrics , tags , mode , version