Files
Snmp2Mysql/Evaluation/statsdbeval.py
Wolfgang Hottgenroth 120244ba7b deltaTime in xls
2015-10-19 21:30:09 +02:00

159 lines
5.0 KiB
Python

import mysql.connector
import datetime
import xlwt
class MySheet:
dateStyle = xlwt.XFStyle()
dateStyle.num_format_str = 'DD.MM.YYYY hh:mm:ss'
numStyle = xlwt.XFStyle()
numStyle.num_format_str = '#,##0'
def __init__(self, sheet):
self.sheet = sheet
self.rowCnt = 0
self.colCnt = 0
self.widthFactor = 268
def write(self, txt, style=None):
if isinstance(txt, datetime.datetime):
self.sheet.row(self.rowCnt).write(self.colCnt, txt, MySheet.dateStyle)
elif style is not None:
self.sheet.row(self.rowCnt).write(self.colCnt, txt, style)
else:
self.sheet.row(self.rowCnt).write(self.colCnt, txt)
l = len(unicode(txt)) * self.widthFactor
if l > self.sheet.col(self.colCnt).width:
self.sheet.col(self.colCnt).width = l
def writeFirstFirst(self, txt, style=None):
self.rowCnt = 0
self.colCnt = 0
self.write(txt, style)
def writeNextFirst(self, txt, style=None):
self.rowCnt += 1
self.colCnt = 0
self.write(txt, style)
def writeSameNext(self, txt, style=None):
self.colCnt += 1
self.write(txt, style)
dbh = None
cur = None
xls = None
sheet = None
try:
dbh = mysql.connector.connect(user='statsuser', password='test123', host='192.168.3.22', database='statsdb')
cur = dbh.cursor()
query = """
SELECT d.description, d.address,
di.description,
cd.ts,
cd.value, cd.id
FROM device_t d,
dataitem_t di,
devicedataitem_t ddi,
collecteddata_t cd
WHERE ddi.device = d.id AND
ddi.dataitem = di.id AND
cd.devicedataitem = ddi.id AND
cd.ts BETWEEN %s AND %s
ORDER BY cd.id
"""
cur.execute(query, (datetime.datetime(1970, 1, 1), datetime.datetime(2100, 12, 31)))
devices = {}
sheets = {}
for (deviceName, deviceAddress, dataItem, timestamp, value, id) in cur:
value = int(value)
key = deviceAddress + ' ' + dataItem
if not devices.has_key(key):
devices[key] = {'name': deviceName, 'address': deviceAddress,
'dataItem': dataItem,
'first': {'timestamp': timestamp, 'value': value},
'last': {'timestamp': timestamp, 'value': value}}
else:
devices[key]['last'] = {'timestamp': timestamp, 'value': value}
if not sheets.has_key(dataItem):
sheets[dataItem] = dataItem
secondsPerMonth = datetime.timedelta(30).total_seconds()
secondsPerWeek = datetime.timedelta(7).total_seconds()
xls = xlwt.Workbook()
for sheetName in sheets.keys():
mySheet = MySheet(xls.add_sheet(sheetName))
sheets[sheetName] = mySheet
mySheet.writeFirstFirst('Name')
mySheet.writeSameNext('Address')
# mySheet.writeSameNext('DataItem')
mySheet.writeSameNext('First Sample Date')
mySheet.writeSameNext('First Sample Value')
mySheet.writeSameNext('Last Sample Date')
mySheet.writeSameNext('Last Sample Value')
mySheet.writeSameNext('Length of SampleBox')
mySheet.writeSameNext('Diff in SampleBox')
mySheet.writeSameNext('MonthFactor')
mySheet.writeSameNext('WeekFactor')
mySheet.writeSameNext('Month Average/Forecast')
mySheet.writeSameNext('Week Average/Forecast')
for device in devices.values():
mySheet = sheets[device['dataItem']]
print("Device: %s, %s, %s" % (device['name'], device['address'], device['dataItem']))
mySheet.writeNextFirst(device['name'])
mySheet.writeSameNext(device['address'])
# mySheet.writeSameNext(device['dataItem'])
print(" First: %s, %s" % (device['first']['timestamp'], device['first']['value']))
mySheet.writeSameNext(device['first']['timestamp'])
mySheet.writeSameNext(device['first']['value'], style=MySheet.numStyle)
print(" Last: %s, %s" % (device['last']['timestamp'], device['last']['value']))
mySheet.writeSameNext(device['last']['timestamp'])
mySheet.writeSameNext(device['last']['value'], style=MySheet.numStyle)
deltaTime = device['last']['timestamp'] - device['first']['timestamp']
deltaValue = device['last']['value'] - device['first']['value']
print(" Diff: %s, %s" % (deltaTime, deltaValue))
mySheet.writeSameNext(str(deltaTime))
mySheet.writeSameNext(deltaValue, style=MySheet.numStyle)
factorMonth = secondsPerMonth / deltaTime.total_seconds()
mySheet.writeSameNext(factorMonth)
factorWeek = secondsPerWeek / deltaTime.total_seconds()
mySheet.writeSameNext(factorWeek)
print(" Month average/forecast: %s" % (int(deltaValue * factorMonth)))
mySheet.writeSameNext(int(deltaValue * factorMonth), style=MySheet.numStyle)
print(" Week average/forecast: %s" % (int(deltaValue * factorWeek)))
mySheet.writeSameNext(int(deltaValue * factorWeek), style=MySheet.numStyle)
except mysql.connector.Error as err:
print("Failure when using database: %s" % (err))
except Exception as err:
print("Failure: %s" % (err))
finally:
if xls is not None:
xls.save('deviceStats.xls')
if cur is not None:
cur.close()
if dbh is not None:
dbh.close()