(cls, metric_base, val, tags)
return output
Recursively flattens the nginx json object. Returns the following: [(metric_name, value, tags)]
Recursively flattens the nginx json object. Returns the following: [(metric_name, value, tags)]
Recursively flattens the nginx json object . Returns the following : [ ( metric_name value tags ) ]
def _flatten_json(cls, metric_base, val, tags):
        """
        Recursively flattens the nginx json object. Returns the following: [(metric_name, value, tags)]
        """
        output = []
        if isinstance(val, dict):
            # Pull out the server as a tag instead of trying to read as a metric
            if 'server' in val and val['server']:
                server = 'server:%s' % val.pop('server')
                if tags is None:
                    tags = []
                tags = tags + [server]
            for key, val2 in iteritems(val):
                if key in TAGGED_KEYS:
                    metric_name = '%s.%s' % (metric_base, TAGGED_KEYS[key])
                    for tag_val, data in iteritems(val2):
                        tag = '%s:%s' % (TAGGED_KEYS[key], tag_val)
                        output.extend(cls._flatten_json(metric_name, data, tags + [tag]))
                else:
                    metric_name = '%s.%s' % (metric_base, key)
                    output.extend(cls._flatten_json(metric_name, val2, tags))

        elif isinstance(val, list):
            for val2 in val:
                output.extend(cls._flatten_json(metric_base, val2, tags))

        elif isinstance(val, bool):
            output.append((metric_base, int(val), tags, 'gauge'))

        elif isinstance(val, (int, float, long)):
            output.append((metric_base, val, tags, 'gauge'))

        elif isinstance(val, (text_type, str)) and val[-1] == "Z":
            try:
                # In the new Plus API, timestamps are now formatted
                # strings, some include microseconds, some don't...
                timestamp = fromisoformat(val[:19])
            except ValueError:
                pass
            else:
                output.append((metric_base, int(get_timestamp(timestamp)), tags, 'gauge'))
        return output
def _flatten_json ( cls , metric_base , val , tags ) : output = [ ] if isinstance ( val , dict ) : # Pull out the server as a tag instead of trying to read as a metric if 'server' in val and val [ 'server' ] : server = 'server:%s' % val . pop ( 'server' ) if tags is None : tags = [ ] tags = tags + [ server ] for key , val2 in iteritems ( val ) : if key in TAGGED_KEYS : metric_name = '%s.%s' % ( metric_base , TAGGED_KEYS [ key ] ) for tag_val , data in iteritems ( val2 ) : tag = '%s:%s' % ( TAGGED_KEYS [ key ] , tag_val ) output . extend ( cls . _flatten_json ( metric_name , data , tags + [ tag ] ) ) else : metric_name = '%s.%s' % ( metric_base , key ) output . extend ( cls . _flatten_json ( metric_name , val2 , tags ) ) elif isinstance ( val , list ) : for val2 in val : output . extend ( cls . _flatten_json ( metric_base , val2 , tags ) ) elif isinstance ( val , bool ) : output . append ( ( metric_base , int ( val ) , tags , 'gauge' ) ) elif isinstance ( val , ( int , float , long ) ) : output . append ( ( metric_base , val , tags , 'gauge' ) ) elif isinstance ( val , ( text_type , str ) ) and val [ - 1 ] == "Z" : try : # In the new Plus API, timestamps are now formatted # strings, some include microseconds, some don't... timestamp = fromisoformat ( val [ : 19 ] ) except ValueError : pass else : output . append ( ( metric_base , int ( get_timestamp ( timestamp ) ) , tags , 'gauge' ) ) return output