#!/usr/bin/python
# arch-tag: 9e09d46b-d7a4-466c-a33d-99e7ccb0628b
#
# Module to create and manage a Round-Robin database containing
# the output of various analog sensors
#
import sys
import os
sys.path.append('/opt/rrd/lib/python%s/site-packages' % sys.version[:3])
sys.path.append('/usr/local/lib/python%s/site-packages' % sys.version[:3])
import rrdtool

__version__ = '1.1'

class RRDB(object):
    def __init__(self, path, sources, interval=1, newdb=True):
        self.path = path
        self.index = []
        if newdb or not os.path.isfile(path):
            cmd = []
            cmd.append('--step=%d' % interval)
            limit = interval*4
            for name,index in sources:
                cmd.append('DS:%s:GAUGE:%d:-32768:32767' % (name, limit))
                self.index.append(index)
            cmd.append('RRA:AVERAGE:0.5:1:86400')
            cmd.append('RRA:AVERAGE:0.5:60:14400')
            cmd.append('RRA:AVERAGE:0.5:600:4320')
            rrdtool.create(path, *cmd)
        else:
            self.index = [index for name,index in sources]
            
    def recvSample(self, rec, up):
        if not up:
            return
        cmd = ['N']
        for elem in self.index:
            cmd.append(str(rec[elem]))
        try:
            rrdtool.update(self.path, ':'.join(cmd))
        except rrdtool.error:
            pass
