|
From: <ni...@us...> - 2010-11-14 09:55:33
|
Revision: 120
http://openautomation.svn.sourceforge.net/openautomation/?rev=120&view=rev
Author: nilss1
Date: 2010-11-14 09:55:23 +0000 (Sun, 14 Nov 2010)
Log Message:
-----------
Add rrd-connector
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 09:54:53 UTC (rev 119)
+++ PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-14 09:55:23 UTC (rev 120)
@@ -1,3 +1,7 @@
+import time
+import hashlib
+import re
+import os
try:
import rrdtool
except ImportError:
@@ -9,4 +13,86 @@
CONNECTOR_NAME = 'RRD Connector'
CONNECTOR_VERSION = 0.1
CONNECTOR_LOGNAME = __name__
- pass
+ def __init__(self,parent,instanceName):
+ self._parent = parent
+ self.WG = parent.WG
+ self.instanceName = instanceName
+
+ ## Deafaultconfig
+ defaultconfig = {
+ 'path':self.WG.scriptpath +"/rrd",
+ 'defaultstep':300,
+ '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':600,
+ 'defaultMIN':'-55',
+ 'defaultMAX':'255000'
+
+ }
+
+ ## check Defaultconfig Options in main configfile
+ self.WG.checkconfig(self.instanceName,defaultconfig)
+
+ ## set local config
+ self.config = self.WG.config[self.instanceName]
+ self.start()
+
+
+ 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()
+
+ 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)
+ rrdtool.update(rrdfilename,val)
+
+ def create(self,dsobj,rrdfilename):
+ rrdarchiv = {}
+ if 'rrd' in dsobj.config:
+ for cfg in ['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]
+
+ 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" % (id,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
+ ret = 0
+ try:
+ ret = rrdtool.create(rrdfilename,'--start',str(startdate), *tuple(args))
+ except:
+ __import__('traceback').print_exc(file=__import__('sys').stdout)
+ print "FAILED WITH %r" % args
+
+
+ if ret:
+ self.debug(rrdtool.error())
+ def run(self):
+ 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.
|
|
From: <ma...@us...> - 2010-11-14 17:28:58
|
Revision: 125
http://openautomation.svn.sourceforge.net/openautomation/?rev=125&view=rev
Author: makki1
Date: 2010-11-14 17:28:46 +0000 (Sun, 14 Nov 2010)
Log Message:
-----------
RRD creation
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 16:41:45 UTC (rev 124)
+++ PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-14 17:28:46 UTC (rev 125)
@@ -18,14 +18,15 @@
self.WG = parent.WG
self.instanceName = instanceName
- ## Deafaultconfig
+ ## 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':600,
+ 'defaultHEARTBEAT':900,
'defaultMIN':'-55',
'defaultMAX':'255000'
@@ -62,23 +63,24 @@
def create(self,dsobj,rrdfilename):
rrdarchiv = {}
if 'rrd' in dsobj.config:
- for cfg in ['RRA','ARCHIV','VALTYPE','HEARTBEAT','MIN','MAX']:
+ 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]
+ rrdarchiv[cfg] = self.config['default%s' % cfg] # FIXME: das mag nicht
+ #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" % (id,rrdarchiv['VALTYPE'],rrdarchiv['HEARTBEAT'],str(rrdarchiv['MIN']),str(rrdarchiv['MAX']))))
- for _a in rrdarchiv['ARCHIV'].split(","):
- for _r in rrdarchiv['RRA'].split(","):
+# 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(_r % _a))
startdate = int(time.time()) - 5 * 86400
@@ -95,4 +97,4 @@
def run(self):
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.
|
|
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.
|
|
From: <ni...@us...> - 2010-11-14 23:39:41
|
Revision: 127
http://openautomation.svn.sourceforge.net/openautomation/?rev=127&view=rev
Author: nilss1
Date: 2010-11-14 23:39:30 +0000 (Sun, 14 Nov 2010)
Log Message:
-----------
rrdfilename in datastoreobject config added
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 23:22:12 UTC (rev 126)
+++ PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-14 23:39:30 UTC (rev 127)
@@ -70,9 +70,10 @@
def create(self,dsobj,rrdfilename):
rrdarchiv = {}
- rrdconfig = {}
- if 'rrd' in dsobj.config:
- rrdconfig = dsobj.config['rrd']
+ if 'rrd' not in dsobj.config:
+ dsobj.config['rrd'] = {}
+ rrdconfig = dsobj.config['rrd']
+ rrdconfig['rrdfilename'] = rrdfilename
for cfg in ['RRA','ARCHIV','VALTYPE','HEARTBEAT','MIN','MAX']:
if cfg in rrdconfig:
rrdarchiv[cfg] = rrdconfig[cfg]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ni...@us...> - 2010-11-15 07:26:27
|
Revision: 128
http://openautomation.svn.sourceforge.net/openautomation/?rev=128&view=rev
Author: nilss1
Date: 2010-11-15 07:26:16 +0000 (Mon, 15 Nov 2010)
Log Message:
-----------
use N: instead of lastupdate time to avoid illegal attempt to update error
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 23:39:30 UTC (rev 127)
+++ PyWireGate/trunk/rrd_connector/RRD_Connector.py 2010-11-15 07:26:16 UTC (rev 128)
@@ -57,12 +57,12 @@
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')
+ val = dsobj.getValue()
if val == None or type(val) not in (int,float):
val = "U"
else:
val = "%.2f" % val
- val = "%d:%s" % (utime,val)
+ val = "N:%s" % val
self.debug("set RRD %s VAL: %r" % (rrdfilename,val))
rrdtool.update(rrdfilename,val)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|