|
@@ -6,6 +6,7 @@ import calendar
|
|
|
import urllib2 as urllib
|
|
|
from helper import csvparser, xmlparser, print_exc
|
|
|
import time
|
|
|
+import re
|
|
|
|
|
|
DEBUG = 1
|
|
|
|
|
@@ -21,45 +22,28 @@ def adei_timestamp(adeitimestr):
|
|
|
timestamp = calendar.timegm(timestamp.timetuple())
|
|
|
return timestamp
|
|
|
|
|
|
-#def f(x):
|
|
|
- #x = str(x)
|
|
|
- #result = []
|
|
|
- #try:
|
|
|
- #for part in x.split(','):
|
|
|
- #if '-' in part:
|
|
|
- #a, b = part.split('-')
|
|
|
- #a, b = int(a), int(b)
|
|
|
- #result.extend(range(a, b + 1))
|
|
|
- #else:
|
|
|
- #a = int(part)
|
|
|
- #result.append(a)
|
|
|
- #except:
|
|
|
- #pass
|
|
|
- #return map(str, result )
|
|
|
-
|
|
|
def transpose_list(l):
|
|
|
return map(list, zip(*l))
|
|
|
|
|
|
-
|
|
|
class ADEIError(Exception):
|
|
|
+ 'To be done'
|
|
|
pass
|
|
|
|
|
|
-
|
|
|
class ADEIReader:
|
|
|
def __init__(self, host, db_server, db_name):
|
|
|
self.host = host + '/services'
|
|
|
self.server = db_server
|
|
|
self.name = db_name
|
|
|
return
|
|
|
- def build_url(self, qtype, db_group='', sensor_ids='', window=0, resample=0):
|
|
|
+ def build_url(self, qtype, db_group='', sensor_masks='', window=0, resample=0):
|
|
|
'build query url'
|
|
|
url = 'http://'
|
|
|
- if qtype == 'get':
|
|
|
+ if qtype == 'data':
|
|
|
url += self.host
|
|
|
url += '/getdata.php?db_server={server}&db_name={db}'\
|
|
|
.format(server=self.server, db=self.name)
|
|
|
url += '&db_group=' + db_group
|
|
|
- url += '&db_sensor=' + ','.join(map(str, sensor_ids))
|
|
|
+ url += '&db_mask=' + sensor_masks
|
|
|
if window == 0:
|
|
|
url += '&window=-1'
|
|
|
else:
|
|
@@ -87,30 +71,28 @@ class ADEIReader:
|
|
|
fp = urllib.urlopen(url)
|
|
|
res = xmlparser(fp)
|
|
|
return res
|
|
|
- def query_get(self, **postdata):
|
|
|
+ def query_data(self, **postdata):
|
|
|
+ def formatSensorMask(mask):
|
|
|
+ return ','.join(re.findall(r'\d+', mask))
|
|
|
# parse args
|
|
|
- group = str(postdata.get( 'group' )) or ''
|
|
|
- sensor = postdata.get( 'sensor' ) or []
|
|
|
- window = postdata.get( 'window' ) or 0
|
|
|
- resample = postdata.get( 'resample' ) or 0
|
|
|
- #sensorMask = f(sensor)
|
|
|
-
|
|
|
- # build query url
|
|
|
- url = self.build_url('sensor', group, sensors, window, resample)
|
|
|
-
|
|
|
+ group = str(postdata.get( 'group' )) or ''
|
|
|
+ sensors = postdata.get( 'sensor' ) or []
|
|
|
+ window = postdata.get( 'window' ) or 0
|
|
|
+ resample = postdata.get( 'resample' ) or 0
|
|
|
+ sensor_mask = formatSensorMask(sensors)
|
|
|
+ url = self.build_url('data', group, sensor_mask, window, resample)
|
|
|
# fetch data
|
|
|
if DEBUG:
|
|
|
startTime = time.time()
|
|
|
fp = urllib.urlopen(url)
|
|
|
if DEBUG:
|
|
|
elapsedTime = time.time() - startTime
|
|
|
-
|
|
|
# parse data
|
|
|
data = csvparser(fp)
|
|
|
-
|
|
|
# pack data
|
|
|
sname = [d[0] for d in data]
|
|
|
svalue = [list( d[1:] ) for d in data]
|
|
|
+ sname[0] = 'Timestamp'
|
|
|
svalue[0] = map(adei_timestamp, svalue[0])
|
|
|
svalue = transpose_list(svalue)
|
|
|
# resample data
|
|
@@ -134,7 +116,7 @@ class ADEIReader:
|
|
|
#print 'sensor values', svalue, len(svalue[0])
|
|
|
#print 'sensor', len(sensor)
|
|
|
print
|
|
|
- return svalue
|
|
|
+ return (sname, svalue)
|
|
|
|
|
|
def __adeireader_doctest():
|
|
|
'''
|