def create(stringName, key): if debug: print "Enter Function create(stringName, key)" # Let's create and RRD file and dump some data in it dss = [] ds1 = DS(dsName='kW', dsType='GAUGE', heartbeat=600) #alle 10 Minuten einen Wert dss.append(ds1) rras = [] #round robin archives mit, xff=0.5 also wenn 20 Minuten kein wert kommt wirds leer angezeigt: rra1 = RRA(cf='AVERAGE', xff=0.5, steps=1, rows=144) #alle 10 Minuten ein Wert rra2 = RRA(cf='AVERAGE', xff=0.5, steps=6, rows=24) #24h mal 1h rra3 = RRA(cf='AVERAGE', xff=0.5, steps=24, rows=30) #30 Tage mal 24h rra4 = RRA(cf='AVERAGE', xff=0.5, steps=30, rows=12) #12 Monate mal 30 Tage rra5 = RRA(cf='AVERAGE', xff=0.5, steps=12, rows=10) #10 Jahre mal 12 Monate rras.append(rra1) rras.append(rra2) rras.append(rra3) rras.append(rra4) rras.append(rra5) #round robbin database file anlegen mit der Startzeit startTime (jetzt) #myRRD = RRD(baseDir + stringName + "_" + key + ".rrd", ds=dss, rra=rras, start=startTime) myRRD = RRD(baseDir + stringName + "_" + key + ".rrd", ds=dss, rra=rras, start=1483228800) myRRD.create() myRRD.update() if debug: myRRD.info()
class ExternalBackendTestCase(TestCase): def setUp(self): ds = [DataSource(dsName="speed", dsType="COUNTER", heartbeat=600)] rra = [ RRA(cf="AVERAGE", xff=0.5, steps=1, rows=24), RRA(cf="AVERAGE", xff=0.5, steps=6, rows=10) ] self.rrdfile = tempfile.NamedTemporaryFile() self.rrd = RRD(self.rrdfile.name, ds=ds, rra=rra, start=920804400) self.rrd.create() def test_updateError(self): self.rrd.bufferValue(1261214678, 612) self.rrd.bufferValue(1261214678, 612) self.assertRaises(ExternalCommandError, self.rrd.update) expected = ("illegal attempt to update using time 1261214678 " "when last update time is 1261214678 (minimum one second " "step)") try: self.rrd.update() except ExternalCommandError as error: self.assertTrue(str(error).startswith("ERROR:")) self.assertTrue(str(error).endswith(expected)) def test_infoWriteMode(self): expectedOutput = """ rra = [{'rows': 24, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 1, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}, {'rows': 10, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 6, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}] filename = /tmp/tmpQCLRj0 start = 920804400 step = 300 values = [] ds = [{'name': 'speed', 'min': 'U', 'max': 'U', 'unknown_sec': None, 'minimal_heartbeat': 600, 'value': None, 'rpn': None, 'type': 'COUNTER', 'last_ds': None}] ds[speed].name = speed ds[speed].min = U ds[speed].max = U ds[speed].minimal_heartbeat = 600 ds[speed].type = COUNTER rra[0].rows = 24 rra[0].cf = AVERAGE rra[0].steps = 1 rra[0].xff = 0.5 rra[0].ds = [] rra[1].rows = 10 rra[1].cf = AVERAGE rra[1].steps = 6 rra[1].xff = 0.5 rra[1].ds = [] """.strip().split("\n") originalStdout = sys.stdout sys.stdout = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) self.rrd.info() for obtained, expected in zip(sys.stdout.getvalue().split("\n"), expectedOutput): if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEquals(obtained.strip(), expected.strip()) sys.stdout = originalStdout
def update(stringName, timestamp, key, value): if debug: print "Enter Function update(stringName, key, value)" #round robbing database file öffnen myRRD = RRD(baseDir + stringName + "_" + key + ".rrd") #Wert in round robbin database eintragen try: myRRD.bufferValue(timestamp, value) myRRD.update() except: print "value in the past" if debug: myRRD.info()
def test_infoReadMode(self): expectedOutput = """ filename = "/tmp/tmpP4bTTy" rrd_version = "0003" step = 300 last_update = 920804400 header_size = 800 ds[speed].index = 0 ds[speed].type = "COUNTER" ds[speed].minimal_heartbeat = 600 ds[speed].min = NaN ds[speed].max = NaN ds[speed].last_ds = "U" ds[speed].value = 0.0000000000e+00 ds[speed].unknown_sec = 0 rra[0].cf = "AVERAGE" rra[0].rows = 24 rra[0].cur_row = 3 rra[0].pdp_per_row = 1 rra[0].xff = 5.0000000000e-01 rra[0].cdp_prep[0].value = NaN rra[0].cdp_prep[0].unknown_datapoints = 0 rra[1].cf = "AVERAGE" rra[1].rows = 10 rra[1].cur_row = 2 rra[1].pdp_per_row = 6 rra[1].xff = 5.0000000000e-01 rra[1].cdp_prep[0].value = NaN rra[1].cdp_prep[0].unknown_datapoints = 0 """ rrd = RRD(filename=self.rrdfile.name, mode="r", backend=bindings) output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) rrd.info(useBindings=True, stream=output) for obtained, expected in zip(output.getvalue().split("\n"), expectedOutput): print(("obtained:", obtained)) print(("expected:", expected)) if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEqual(obtained.strip(), expected.strip()) sys.stdout = originalStdout
def test_infoReadMode(self): expectedOutput = """ filename = "/tmp/tmpP4bTTy" rrd_version = "0003" step = 300 last_update = 920804400 header_size = 800 ds[speed].index = 0 ds[speed].type = "COUNTER" ds[speed].minimal_heartbeat = 600 ds[speed].min = NaN ds[speed].max = NaN ds[speed].last_ds = "U" ds[speed].value = 0.0000000000e+00 ds[speed].unknown_sec = 0 rra[0].cf = "AVERAGE" rra[0].rows = 24 rra[0].cur_row = 3 rra[0].pdp_per_row = 1 rra[0].xff = 5.0000000000e-01 rra[0].cdp_prep[0].value = NaN rra[0].cdp_prep[0].unknown_datapoints = 0 rra[1].cf = "AVERAGE" rra[1].rows = 10 rra[1].cur_row = 2 rra[1].pdp_per_row = 6 rra[1].xff = 5.0000000000e-01 rra[1].cdp_prep[0].value = NaN rra[1].cdp_prep[0].unknown_datapoints = 0 """ rrd = RRD(filename=self.rrdfile.name, mode="r", backend=bindings) output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) rrd.info(useBindings=True, stream=output) for obtained, expected in zip( output.getvalue().split("\n"), expectedOutput): print "obtained:", obtained print "expected:", expected if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEquals(obtained.strip(), expected.strip()) sys.stdout = originalStdout
class BindingsBackendTestCase(TestCase): def setUp(self): self.ds = [DataSource(dsName="speed", dsType="COUNTER", heartbeat=600)] self.rra = [ RRA(cf="AVERAGE", xff=0.5, steps=1, rows=24), RRA(cf="AVERAGE", xff=0.5, steps=6, rows=10) ] self.rrdfile = tempfile.NamedTemporaryFile() self.rrd = RRD(self.rrdfile.name, ds=self.ds, rra=self.rra, start=920804400, backend=bindings) self.rrd.create() def test_infoWriteMode(self): expectedOutput = """ rra = [{'rows': 24, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 1, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}, {'rows': 10, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 6, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}] filename = /tmp/tmpQCLRj0 start = 920804400 step = 300 values = [] ds = [{'name': 'speed', 'min': 'U', 'max': 'U', 'unknown_sec': None, 'minimal_heartbeat': 600, 'value': None, 'rpn': None, 'type': 'COUNTER', 'last_ds': None}] ds[speed].name = speed ds[speed].min = U ds[speed].max = U ds[speed].minimal_heartbeat = 600 ds[speed].type = COUNTER rra[0].rows = 24 rra[0].cf = AVERAGE rra[0].steps = 1 rra[0].xff = 0.5 rra[0].ds = [] rra[1].rows = 10 rra[1].cf = AVERAGE rra[1].steps = 6 rra[1].xff = 0.5 rra[1].ds = [] """.strip().split("\n") output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) self.rrd.info(useBindings=True, stream=output) for obtained, expected in zip(output.getvalue().split("\n"), expectedOutput): if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEqual(obtained.strip(), expected.strip()) def test_infoReadMode(self): expectedOutput = """ filename = "/tmp/tmpP4bTTy" rrd_version = "0003" step = 300 last_update = 920804400 header_size = 800 ds[speed].index = 0 ds[speed].type = "COUNTER" ds[speed].minimal_heartbeat = 600 ds[speed].min = NaN ds[speed].max = NaN ds[speed].last_ds = "U" ds[speed].value = 0.0000000000e+00 ds[speed].unknown_sec = 0 rra[0].cf = "AVERAGE" rra[0].rows = 24 rra[0].cur_row = 3 rra[0].pdp_per_row = 1 rra[0].xff = 5.0000000000e-01 rra[0].cdp_prep[0].value = NaN rra[0].cdp_prep[0].unknown_datapoints = 0 rra[1].cf = "AVERAGE" rra[1].rows = 10 rra[1].cur_row = 2 rra[1].pdp_per_row = 6 rra[1].xff = 5.0000000000e-01 rra[1].cdp_prep[0].value = NaN rra[1].cdp_prep[0].unknown_datapoints = 0 """ rrd = RRD(filename=self.rrdfile.name, mode="r", backend=bindings) output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) rrd.info(useBindings=True, stream=output) for obtained, expected in zip(output.getvalue().split("\n"), expectedOutput): print(("obtained:", obtained)) print(("expected:", expected)) if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEqual(obtained.strip(), expected.strip()) sys.stdout = originalStdout
class BindingsBackendTestCase(TestCase): def setUp(self): self.ds = [ DataSource(dsName="speed", dsType="COUNTER", heartbeat=600)] self.rra = [ RRA(cf="AVERAGE", xff=0.5, steps=1, rows=24), RRA(cf="AVERAGE", xff=0.5, steps=6, rows=10)] self.rrdfile = tempfile.NamedTemporaryFile() self.rrd = RRD(self.rrdfile.name, ds=self.ds, rra=self.rra, start=920804400, backend=bindings) self.rrd.create() def test_infoWriteMode(self): expectedOutput = """ rra = [{'rows': 24, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 1, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}, {'rows': 10, 'database': None, 'cf': 'AVERAGE', 'cdp_prep': None, 'beta': None, 'seasonal_period': None, 'steps': 6, 'window_length': None, 'threshold': None, 'alpha': None, 'pdp_per_row': None, 'xff': 0.5, 'ds': [], 'gamma': None, 'rra_num': None}] filename = /tmp/tmpQCLRj0 start = 920804400 step = 300 values = [] ds = [{'name': 'speed', 'min': 'U', 'max': 'U', 'unknown_sec': None, 'minimal_heartbeat': 600, 'value': None, 'rpn': None, 'type': 'COUNTER', 'last_ds': None}] ds[speed].name = speed ds[speed].min = U ds[speed].max = U ds[speed].minimal_heartbeat = 600 ds[speed].type = COUNTER rra[0].rows = 24 rra[0].cf = AVERAGE rra[0].steps = 1 rra[0].xff = 0.5 rra[0].ds = [] rra[1].rows = 10 rra[1].cf = AVERAGE rra[1].steps = 6 rra[1].xff = 0.5 rra[1].ds = [] """.strip().split("\n") output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) self.rrd.info(useBindings=True, stream=output) for obtained, expected in zip( output.getvalue().split("\n"), expectedOutput): if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEquals(obtained.strip(), expected.strip()) def test_infoReadMode(self): expectedOutput = """ filename = "/tmp/tmpP4bTTy" rrd_version = "0003" step = 300 last_update = 920804400 header_size = 800 ds[speed].index = 0 ds[speed].type = "COUNTER" ds[speed].minimal_heartbeat = 600 ds[speed].min = NaN ds[speed].max = NaN ds[speed].last_ds = "U" ds[speed].value = 0.0000000000e+00 ds[speed].unknown_sec = 0 rra[0].cf = "AVERAGE" rra[0].rows = 24 rra[0].cur_row = 3 rra[0].pdp_per_row = 1 rra[0].xff = 5.0000000000e-01 rra[0].cdp_prep[0].value = NaN rra[0].cdp_prep[0].unknown_datapoints = 0 rra[1].cf = "AVERAGE" rra[1].rows = 10 rra[1].cur_row = 2 rra[1].pdp_per_row = 6 rra[1].xff = 5.0000000000e-01 rra[1].cdp_prep[0].value = NaN rra[1].cdp_prep[0].unknown_datapoints = 0 """ rrd = RRD(filename=self.rrdfile.name, mode="r", backend=bindings) output = StringIO() self.assertTrue(os.path.exists(self.rrdfile.name)) rrd.info(useBindings=True, stream=output) for obtained, expected in zip( output.getvalue().split("\n"), expectedOutput): print "obtained:", obtained print "expected:", expected if obtained.startswith("filename"): self.assertTrue(expected.strip().startswith("filename")) else: self.assertEquals(obtained.strip(), expected.strip()) sys.stdout = originalStdout
myRRD = RRD(filename, step=10, ds=dataSources, rra=roundRobinArchives, start=int(time.time())) myRRD.create() # Test for file existence import os os.path.isfile(filename) # Values # myRRD.bufferValue(str(time.time()), 'q1:q2:q3:lo:hi:total') myRRD.bufferValue(str(int(time.time())), '1:2:3:0:5:100') myRRD.bufferValue(str(int(time.time())), '1.2:2.2:3.2:0.2:5.2:90') myRRD.update() # Information myRRD.info() # Graph 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)
myRRD.bufferValue('920805600', '12363') myRRD.bufferValue('920805900', '12363') myRRD.bufferValue('920806200', '12373') myRRD.bufferValue('920806500', '12383') 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() print "myRRD info:",myRRD.info() print "myRRD Data:",myRRD.getData() 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') gprint1 = GPRINT(vdef2, '%6.3lf kph')