This file is indexed.

/usr/lib/python2.7/dist-packages/PyRRD-0.1.0.egg-info/PKG-INFO is in python-pyrrd 0.1.0-3.

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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
Metadata-Version: 1.1
Name: PyRRD
Version: 0.1.0
Summary: An Object-Oriented Python Interface for RRDTool
Home-page: http://code.google.com/p/pyrrd/
Author: Duncan McGreggor
Author-email: duncan@canonical.com
License: BSD
Description: ~~~~~
        PyRRD
        ~~~~~
        
        .. contents::
           :depth: 1
        
        
        ========
        Features
        ========
        
        PyRRD lets you use RRDTool from Python code that takes advantage of standard
        object-oriented patterns. The makes the programmatic usage of RRDTool much
        easier and reusable.
        
        A quick review of features is available at the project wiki [#]_ . Example
        code with graph image output is also available on the wiki [#]_ .
        
        
        ============
        Introduction
        ============
        
        PyRRD is an object-oriented wrapper for the command line graphing and
        round-robin database utility, rrdtool [#]_ . PyRRD originally had two design
        goals:
        
        1. provide an interface to rrdtool that Python programmers would love, and
        
        2. not depend upon the Python bindings for rrdtool.
        
        The reasons for the former are obvious. The motivation for the latter were the
        many people who had difficulty compiling the rrdtool bindings on their
        operating system of choice.
        
        Even though PyRRD's original purpose was to help those without the bingins, the
        project now offers support for those with the bindings installed. As such,
        users may enjoy both the speed benefits from the bindings as well as the API
        usability from PyRRD.
        
        For docs, see the docstrings at the beginning of each class (and many of the
        functions). They not only contain many of the standard RRDTool docs, but they
        contain doctests which give you a hands-on, how-it-works understanding of
        actual usage.
        
        For those curious about the motivation for creating PyRRD, perhaps some
        background would be in order. Originally, there were only two ways to use
        RRDTool from Python:
        
        1. using the Python bindings which were difficult to compile and use, or
        
        2. making system calls to the "rrdtool" executable from Python, passing
        it all the parameters it needed.
        
        Option #1 was often difficult or impossible for many folks to get running on
        their preferred operating system. But even if one was able to compile it and
        run it, usage was very cumbersome and designed to work like the command line
        tool and the C interface, not like most people typically use Python.
        
        Now, with PyRRD, there are two additional ways to use RRDTool from Python:
        
        3. an object-oriented interface that wraps system calls (Popen) to the
        rrdtool binary, and
        
        4. the same object-oriented interface that wraps the cumbersome rrdtool
        Python bindings.
        
        ============
        Dependencies
        ============
        
        Some parts of PyRRD make use of ElementTree for XML processing. If you have
        Python 2.5 or greater, PyRRD will use xml.etree. If your Python version is less
        than 2.5 and you want to use features that depend on XML processing (such as
        dump function and the fetch/info methods), you will need to install
        the ElementTree library [#]_ .
        
        
        
        ============
        Installation
        ============
        
        PyRRD is installed in the usual way::
        
          python setup.py install
        
        You may also use PyRRD without installing it as long as you have ./ in your
        PYTHONPATH and you are in the top-level directory (which has the pyrrd child
        directory).
        
        
        =====
        Usage
        =====
        
        Create an RRD file programmatically::
        
            >>> from pyrrd.rrd import DataSource, RRA, RRD
            >>> filename = '/tmp/test.rrd'
            >>> dataSources = []
            >>> roundRobinArchives = []
            >>> dataSource = DataSource(
            ...     dsName='speed', dsType='COUNTER', heartbeat=600)
            >>> dataSources.append(dataSource)
            >>> roundRobinArchives.append(RRA(cf='AVERAGE', xff=0.5, steps=1, rows=24))
            >>> roundRobinArchives.append(RRA(cf='AVERAGE', xff=0.5, steps=6, rows=10))
            >>> myRRD = RRD(
            ...     filename, ds=dataSources, rra=roundRobinArchives, start=920804400)
            >>> myRRD.create()
        
        Let's check to see that the file exists::
        
            >>> import os
            >>> os.path.isfile(filename)
            True
        
        Let's see how big it is (depending upon RRDTool version, the byte count can
        change, so we'll just get a general sense)::
        
            >>> bytes = len(open(filename).read())
            >>> 800 < bytes < 1200
            True
        
        In order to save writes to disk, PyRRD buffers values and then writes the
        values to the RRD file at one go::
        
            >>> myRRD.bufferValue('920805600', '12363')
            >>> myRRD.bufferValue('920805900', '12363')
            >>> myRRD.bufferValue('920806200', '12373')
            >>> myRRD.bufferValue('920806500', '12383')
            >>> myRRD.update()
        
        Let's add some more data::
        
            >>> myRRD.bufferValue('920806800', '12393')
            >>> myRRD.bufferValue('920807100', '12399')
            >>> myRRD.bufferValue('920807400', '12405')
            >>> myRRD.bufferValue('920807700', '12411')
            >>> myRRD.bufferValue('920808000', '12415')
            >>> myRRD.bufferValue('920808300', '12420')
            >>> myRRD.bufferValue('920808600', '12422')
            >>> myRRD.bufferValue('920808900', '12423')
            >>> myRRD.update()
        
        If you're curious, you can take a look at your rrd file with the following::
        
            myRRD.info()
        
        The output of that isn't printed here, 'cause it take up too much space.
        However, it is very similar to the output of the similarly named rrdtool
        command.
        
        In order to create a graph, we'll need some data definitions. We'll also
        throw in some calculated definitions and variable definitions for good
        meansure::
        
            >>> from pyrrd.graph import DEF, CDEF, VDEF, LINE, AREA, GPRINT
            >>> def1 = DEF(rrdfile=myRRD.filename, vname='myspeed',
            ...     dsName=dataSource.name)
            >>> cdef1 = CDEF(vname='kmh', rpn='%s,3600,*' % def1.vname)
            >>> cdef2 = CDEF(vname='fast', rpn='kmh,100,GT,kmh,0,IF')
            >>> cdef3 = CDEF(vname='good', rpn='kmh,100,GT,0,kmh,IF')
            >>> vdef1 = VDEF(vname='mymax', rpn='%s,MAXIMUM' % def1.vname)
            >>> vdef2 = VDEF(vname='myavg', rpn='%s,AVERAGE' % def1.vname)
        
            >>> line1 = LINE(value=100, color='#990000', legend='Maximum Allowed')
            >>> area1 = AREA(defObj=cdef3, color='#006600', legend='Good Speed')
            >>> area2 = AREA(defObj=cdef2, color='#CC6633', legend='Too Fast')
            >>> line2 = LINE(defObj=vdef2, color='#000099', legend='My Average',
            ...     stack=True)
            >>> gprint1 = GPRINT(vdef2, '%6.2lf kph')
        
        Color is the spice of life. Let's spice it up a little::
        
            >>> from pyrrd.graph import ColorAttributes
            >>> ca = ColorAttributes()
            >>> ca.back = '#333333'
            >>> ca.canvas = '#333333'
            >>> ca.shadea = '#000000'
            >>> ca.shadeb = '#111111'
            >>> ca.mgrid = '#CCCCCC'
            >>> ca.axis = '#FFFFFF'
            >>> ca.frame = '#AAAAAA'
            >>> ca.font = '#FFFFFF'
            >>> ca.arrow = '#FFFFFF'
        
        Now we can create a graph for the data in our RRD file::
        
            >>> from pyrrd.graph import Graph
            >>> graphfile = "/tmp/rrdgraph.png"
            >>> g = Graph(graphfile, start=920805000, end=920810000,
            ...     vertical_label='km/h', color=ca)
            >>> g.data.extend([def1, cdef1, cdef2, cdef3, vdef1, vdef2, line1, area1,
            ...     area2, line2, gprint1])
            >>> g.write()
        
        Let's make sure it's there::
        
            >>> os.path.isfile(graphfile)
            True
        
        Let's get a sense of the byte size::
        
            >>> bytes = len(open(graphfile).read())
            >>> bytes != 0
            True
            >>> 8000 < bytes < 10400
            True
        
        Open that up in your favorite image browser and confirm that the appropriate
        RRD graph is generated.
        
        Let's clean up the files we've put in the temp directory::
        
            >>> os.unlink(filename)
            >>> os.unlink(graphfile)
        
        
        ===============
        Python Bindings
        ===============
        
        In addition to the command line tool, PyRRD also supports using the Python
        bindings, if you have them installed. Let's set some stuff up like we did in
        the previous example::
        
            >>> filename = '/tmp/test.rrd'
            >>> dataSources = []
            >>> roundRobinArchives = []
            >>> dataSource = DataSource(
            ...     dsName='speed', dsType='COUNTER', heartbeat=600)
            >>> dataSources.append(dataSource)
            >>> roundRobinArchives.append(RRA(cf='AVERAGE', xff=0.5, steps=1, rows=24))
            >>> roundRobinArchives.append(RRA(cf='AVERAGE', xff=0.5, steps=6, rows=10))
        
        Usage is identical to the standard PyRRD usage, with the exception of object
        construction::
        
            >>> from pyrrd.backend import bindings
            >>> myRRD = RRD(filename, ds=dataSources, rra=roundRobinArchives,
            ...     backend=bindings)
            >>> myRRD.create()
        
        Note that since the Graph module is its own beast, you will need to indicate
        whether you want to use the bindings or the external backend when you graph as
        well::
        
            >>> from pyrrd.graph import Graph
            >>> graphfile = "/tmp/rrdgraph.png"
            >>> g = Graph(graphfile, start=920805000, end=920810000,
            ...     vertical_label='km/h', color=ca, backend=bindings)
            >>> g.data.extend([def1, cdef1, cdef2, cdef3, vdef1, vdef2, line1, area1,
            ...     area2, line2, gprint1])
            >>> g.write()
        
        Everything else is the same. Let's check to see that the file exists, and then
        we'll cleanup::
        
            >>> import os
            >>> os.path.isfile(filename)
            True
            >>> os.unlink(filename)
        
        
        ==========
        Known Bugs
        ==========
        
        * http://code.google.com/p/pyrrd/issues/list
        
        ====
        TODO
        ====
        
        Near Term
        ---------
        
        * Move test code around (testing and admin/testRunner).
        
        * Fix breaking tests.
        
        * Add wiki examples for using info and fetch
        
        * Improve the wrapper for the Python RRDTool bindings
        
          * a lot of the code in PyRRD was written quite a while ago (circa 2004), and
            needs to be refactored (removing redundancies, use better idioms, etc.)
        
        * Allow for users to supply their own fd to pyrrd.graph.
        
        * Update all examples for recent dates like example4 has been updated.
        
        * Stop using actual file writes and doctests for file tests; use unit tests
          (and StringIO) instead.
        
        Future
        ------
        
        * Add an RPN class.
        
        * Add a DS collection class that has a get() method for getting a
          particular DS by name.
        
        * Add support for atomic operations.
        
        
        =======
        Changes
        =======
        
        From 0.0.7 to 0.1.0
        -------------------
        
        This version marks a significant update to the code base. Some 70+ commits have
        been made to trunk since the last release in the period from March 2009 to
        September 2011. Some of the most signficant changes include the following:
        
        * Added a wrapper for the Python bindings.
        
        * Improvements in tests and testing infrastructure.
        
        * Improved exception handling.
        
        * Many changes and improvements to the RRD -> Python object mapper.
        
        * Improved support in Windows.
        
        * Graph formatting fixes.
        
        * Many bug fixes from community members.
        
        
        From 0.0.6 to 0.0.7
        -------------------
        
        * Packaging improvements and loads of documentation.
        
        
        From 0.0.5 to 0.0.6
        -------------------
        
        * Bug fix release (missing files in source package).
        
        
        From 0.0.4 to 0.0.5
        -------------------
        
        * Added support for retrieving and displaying RRD from RRD files.
        
        * Added an object mapper for RRD data (via XML files).
        
        * Added community-contributed improvements.
        
        
        From 0.0.3 to 0.0.4
        -------------------
        
        * Updated all the examples to work with the latest code.
        
        * Added community-contributed bug fix for Windows users.
        
        
        From 0.0.2 to 0.0.3
        -------------------
        
        * Minor code reorg.
        
        * Fixed doctests.
        
        * Various bug fixes.
        
        * Examples updates.
        
        
        From 0.0.1 to 0.0.2
        -------------------
        
        * Added license.
        
        * Added unit tests.
        
        * Added more examples.
        
        
        From 0 to 0.0.1
        ---------------
        
        * Reorganized RRD code as donated from the CoyMon project.
        
        * Got basic rrdtool functionality represented as Python classes.
        
        * Code cleanup.
        
        
        ================
        Acknowledgements
        ================
        
        The following members of the community have provided valuable contributions to
        this project:
        
        * Ravi Bhalotia, Allen Lerner, Mike Carrick and the U.S. Department of Veterans
          Affairs
        
        * AdytumSolutions, Inc., E-Secure Systems
        
        * nasvos, Leem Smit, Aaron Westendorf and Agora Games
        
        * Mladen Milankovic, Denis Fortin
        
        * Joseph Heck, Jean-Baptiste Quenot
        
        * Pavel Shramov, Brad Beattie, Colin Horsington
        
        Thanks!
        
        
        ==========
        References
        ==========
        
        .. [#] http://code.google.com/p/pyrrd/wiki/FrontPage?tm=6
        
        .. [#] http://code.google.com/p/pyrrd/wiki/FullWorkingExamples
        
        .. [#] http://oss.oetiker.ch/rrdtool/
        
        .. [#] http://effbot.org/zone/element-index.htm
        
        
        
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Programming Language :: Python
Classifier: Topic :: Database
Classifier: Topic :: Database :: Front-Ends
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: System :: Networking :: Monitoring
Classifier: Topic :: System :: Systems Administration
Classifier: License :: OSI Approved :: BSD License