|
From: <ni...@us...> - 2010-11-14 23:22:20
|
Revision: 126
http://openautomation.svn.sourceforge.net/openautomation/?rev=126&view=rev
Author: nilss1
Date: 2010-11-14 23:22:12 +0000 (Sun, 14 Nov 2010)
Log Message:
-----------
changed to single datasource per rrd
Modified Paths:
--------------
PyWireGate/trunk/rrd_connector/RRD_Connector.py
Modified: PyWireGate/trunk/rrd_connector/RRD_Connector.py
===================================================================
--- PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-14 17:28:46 UTC (rev 125)
+++ PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-14 23:22:12 UTC (rev 126)
@@ -17,16 +17,16 @@
self._parent = parent
self.WG = parent.WG
self.instanceName = instanceName
+ self.makeASCII = re.compile(r"[^a-zA-Z0-9_.]+")
## Defaultconfig
defaultconfig = {
'path':self.WG.scriptpath +"/rrd",
'defaultstep':300,
- 'defaultDS':'value',
'defaultRRA':'RRA:%s:0.5:1:2160,RRA:%s:0.5:5:2016,RRA:%s:0.5:15:2880,RRA:%s:0.5:180:8760',
'defaultARCHIV':'AVERAGE,MIN,MAX',
'defaultVALTYPE':'GAUGE',
- 'defaultHEARTBEAT':900,
+ 'defaultHEARTBEAT':600,
'defaultMIN':'-55',
'defaultMAX':'255000'
@@ -41,46 +41,53 @@
def setValue(self,dsobj,msg=False):
- rrdfilename = self.config['path'] +"/"+ re.sub(r"[^\w]","_",(str(dsobj.id)))+".rrd"
- if not os.path.exists(rrdfilename):
- self.create(dsobj,rrdfilename)
- val = "N"
if len(dsobj.connected) == 0:
- val += ":%.2f" % dsobj.getValue()
+ if dsobj.lastsource:
+ self._setValue(dsobj.lastsource.id)
for objid in dsobj.connected:
- obj = self.WG.DATASTORE.dataobjects[objid]
- oval = obj.getValue()
- if oval == None or type(oval) not in (int,float):
- oval = "U"
- else:
- oval = "%.2f" % oval
- val += ":%s" % oval
-
- print "RRD %s VAL: %r" % (rrdfilename,val)
+ self._setValue(objid)
+
+ def _setValue(self,objid):
+ try:
+ dsobj = self.WG.DATASTORE.dataobjects[objid]
+ except KeyError:
+ ## if not found ignore
+ return
+ rrdfilename = self.config['path'] +"/"+ self.makeASCII.sub("_",(str(dsobj.id)))+".rrd"
+ if not os.path.exists(rrdfilename):
+ self.create(dsobj,rrdfilename)
+ val, utime = dsobj.getValue('lastupdate')
+ if val == None or type(val) not in (int,float):
+ val = "U"
+ else:
+ val = "%.2f" % val
+ val = "%d:%s" % (utime,val)
+ self.debug("set RRD %s VAL: %r" % (rrdfilename,val))
rrdtool.update(rrdfilename,val)
+
+
def create(self,dsobj,rrdfilename):
rrdarchiv = {}
+ rrdconfig = {}
if 'rrd' in dsobj.config:
- for cfg in ['DS','RRA','ARCHIV','VALTYPE','HEARTBEAT','MIN','MAX']:
- if cfg in dsobj.config['rrd']:
- rrdarchiv[cfg] = dsobj.config['rrd'][cfg]
- else:
- rrdarchiv[cfg] = self.config['default%s' % cfg] # FIXME: das mag nicht
+ rrdconfig = dsobj.config['rrd']
+ for cfg in ['RRA','ARCHIV','VALTYPE','HEARTBEAT','MIN','MAX']:
+ if cfg in rrdconfig:
+ rrdarchiv[cfg] = rrdconfig[cfg]
+ else:
+ rrdarchiv[cfg] = self.config['default%s' % cfg]
- #FIXME: needed if single DS per rrd?
args = []
datasources = [] + dsobj.connected
if len(datasources) == 0:
datasources.append(dsobj.id)
-# for _d in datasources:
-# id = hashlib.md5(_d).hexdigest()[:19]
- args.append(str("DS:%s:%s:%d:%s:%s" % (rrdarchiv.get('DS',self.config['defaultDS']),rrdarchiv.get('VALTYPE',self.config['defaultVALTYPE']),rrdarchiv.get('HEARTBEAT',self.config['defaultHEARTBEAT']),str(rrdarchiv.get('MIN',self.config['defaultMIN'])),str(rrdarchiv.get('MAX',self.config['defaultMAX'])))))
- for _a in rrdarchiv.get('ARCHIV',self.config['defaultARCHIV']).split(","):
- for _r in rrdarchiv.get('RRA',self.config['defaultRRA']).split(","):
+ args.append(str("DS:value:%s:%d:%s:%s" % (rrdarchiv['VALTYPE'],rrdarchiv['HEARTBEAT'],str(rrdarchiv['MIN']),str(rrdarchiv['MAX']))))
+ for _a in rrdarchiv['ARCHIV'].split(","):
+ for _r in rrdarchiv['RRA'].split(","):
args.append(str(_r % _a))
startdate = int(time.time()) - 5 * 86400
@@ -90,7 +97,6 @@
except:
__import__('traceback').print_exc(file=__import__('sys').stdout)
print "FAILED WITH %r" % args
-
if ret:
self.debug(rrdtool.error())
@@ -98,3 +104,4 @@
while self.isrunning:
self.idle(1)
+
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|