This file is indexed.

/usr/share/pyshared/pyrrd/node.py is in python-pyrrd 0.1.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
"""
This module's classes are used to represent RRD data in XML format. The mapper
module uses this format to establish a relationship between RRD files (and
their exports) and Python objects.
"""
class XMLNode(object):
    """
    A base class. Not used directly.
    """
    def __init__(self, tree, attribute_names):
        self.tree = tree
        self.attributes = {}
        for name, cast, default in attribute_names:
            try:
                value = cast(self.getAttribute(name))
            except ValueError:
                value = default
            if not value:
                value = default
            self.attributes[name] = value

    def getAttribute(self, attrName):
        """
        """
        node = self.tree.find(attrName)
        if node != None:
            return node.text.strip()
        raise ValueError()


class DSXMLNode(XMLNode):
    """
    An object abstraction for the <ds> node in the XML RRD export. This is a
    child of the <rrd> node, and thus this class is used in the RRDXMLNode
    class.

    Currently provides no featres beyond those of the base XML node class.
    """


class CDPPrepXMLNode(XMLNode):
    """
    An object abstraction for the <cd_prep> node in the XML RRD export. The
    <cd_prep> nodes are children node of an <rra> node.
    """
    def __init__(self, node):
        self.ds = []
        dsAttributes = [
            ("primary_value", float, 0.0),
            ("secondary_value", float, 0.0),
            ("value", float, 0.0),
            ("unknown_datapoints", int, 0),
            ]
        for ds in node.findall("ds"):
            self.ds.append(DSXMLNode(ds, dsAttributes))


class DatabaseNode(XMLNode):
    """
    An object abstraction for the <database> node in the XML RRD export.
    Currently unimplemented.
    """
    def __init__(self, node):
        super(DatabaseNode, self).__init__(node, [])
        self.row = []


class RRAXMLNode(XMLNode):
    """
    An object abstraction for the <rra> node in the XML RRD export. The <rra>
    nodes are children of the <rrd> node.
    """
    def __init__(self, tree, attributes, includeData=False):
        super(RRAXMLNode, self).__init__(tree, attributes)
        self.database = None
        xff = self.tree.find('params').find('xff')
        if xff!=None:
            xff = float(xff.text)
            self.attributes["xff"] = xff

        self.cdp_prep = CDPPrepXMLNode(self.tree.find("cdp_prep"))
        if includeData:
            db = self.tree.get("database")
            self.database = DatabaseNode(db)

    def getAttribute(self, attrName):
        """
        """
        if attrName.lower() == "xff":
            return self.tree.findtext("params/xff").strip()
        else:
            return super(RRAXMLNode, self).getAttribute(attrName)


class RRDXMLNode(XMLNode):
    """
    An object abstraction for the <rrd> node in the XML RRD export. This is the
    top-level node in the XML RRD export.
    """
    def __init__(self, tree, includeData=False):
        attributes = [
            ("version", int, 0),
            ("step", int, 300),
            ("lastupdate", int, 0),
            ]
        super(RRDXMLNode, self).__init__(tree, attributes)
        dsAttributes = [
            ("name", str, ""),
            ("type", str, "GAUGE"),
            ("minimal_heartbeat", int, 300),
            ("min", int, "NaN"),
            ("max", int, "NaN"),
            ("last_ds", int, 0),
            ("value", float, 0.0),
            ("unknown_sec", int, 0),
            ]
        rraAttributes = [
            ("cf", str, "AVERAGE"),
            ("pdp_per_row", int, 0),
            ]
        self.ds = []
        self.rra = []
        for ds in self.getDataSources():
            self.ds.append(DSXMLNode(ds, dsAttributes))
        for rra in self.getRRAs():
            self.rra.append(RRAXMLNode(rra, rraAttributes, includeData))

    def getDataSources(self):
        """
        """
        return self.tree.findall("ds")

    def getRRAs(self):
        """
        """
        return self.tree.findall("rra")