Skip to content
Snippets Groups Projects
Commit 9e327b87 authored by Kenny Gao's avatar Kenny Gao
Browse files

Added epoch parameter to api

parent 30e0b58a
Branches
No related tags found
1 merge request!2Order form
......@@ -177,7 +177,7 @@ def handleInterval(interval):
return interval
def asciiReturn(frame, sep, symbols, site, inst):
def asciiReturn(frame, sep, symbols, site, inst, epoch):
output = StringIO()
dates = list(frame.columns.values)
......@@ -187,7 +187,11 @@ def asciiReturn(frame, sep, symbols, site, inst):
data = list(frame.iterrows())
output.write("# Fields: Site,Inst,YYYY-MM-DDTHH:MM:SSZ")
if(not epoch):
output.write("# Fields: Site,Inst,YYYY-MM-DDTHH:MM:SSZ")
else:
output.write("# Fields: Site,Inst, " + epoch + " since epoch (1970-01-01 00:00:00)")
for symbol in symbols:
output.write(sep + symbol)
......@@ -241,7 +245,7 @@ def jsonReturn(frame, symbols, site, inst, jsonFormat):
return output
def xmlReturn(site, inst, frame, symbols, sep):
def xmlReturn(site, inst, frame, symbols, sep, epoch):
doc = Document()
if(not sep):
......@@ -260,7 +264,12 @@ def xmlReturn(site, inst, frame, symbols, sep):
doc.appendChild(head)
stampElt = doc.createElement('timestamp')
stampElt.setAttribute('format', '%Y-%m-%dT%H:%M:%SZ')
if not epoch:
stampElt.setAttribute('format', '%Y-%m-%dT%H:%M:%SZ')
else:
stampElt.setAttribute('format', epoch + ' since epoch (1970-01-01 00:00:00)')
dateStrings = StringIO()
......@@ -314,38 +323,26 @@ def xmlReturn(site, inst, frame, symbols, sep):
def handleResult(fmt, result, symbols, interval, sep, spd, wDir):
dataDict = {}
#print(result)
dataList = list(result.get_points('metobs_' + interval))
for symbol in symbols:
pairDict = {}
for dictionary in dataList:
if symbol in dictionary:
pairDict[dictionary['time']] = roundVal(dictionary[symbol], symbol)
pairDict[str(dictionary['time'])] = roundVal(dictionary[symbol], symbol)
else:
pairDict[dictionary['time']] = -99999;
dataDict[symbol] = pairDict
pairDict[str(dictionary['time'])] = -99999;
#print(interval)
#print(dataDict)
dataDict[symbol] = pairDict
frame = pd.DataFrame(dataDict)
#print(list(frame.transpose().columns.values))
if(spd or wDir):
wEast = frame['wind_east']
wNorth = frame['wind_north']
rows = list(frame.transpose().columns.values)
#wEast = wEast.transpose()
#wNorth = wNorth.transpose()
#print(wEast)
#print(wNorth)
del frame['wind_east']
del frame['wind_north']
......@@ -419,7 +416,7 @@ def handleResult(fmt, result, symbols, interval, sep, spd, wDir):
def jsonpReturn(json):
return json
def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, jsonFormat):
def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, jsonFormat, epoch):
dates = beginEndHandler(begin, end)
if(dates == 400):
......@@ -467,7 +464,7 @@ def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, js
if(not sep):
sep = ','
result = query(site, inst, symbols, begin, end, interval)
result = query(site, inst, symbols, begin, end, interval, epoch)
frame = handleResult(fmt,result, symbols, interval, sep, windSpeed, windDirection)
......@@ -498,7 +495,7 @@ def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, js
symbols.insert(dir_idx,'wind_direction')
if(fmt == 'ascii'):
output = asciiReturn(frame, sep, symbols, site, inst)
output = asciiReturn(frame, sep, symbols, site, inst, epoch)
return output.getvalue()
elif(fmt == 'json'):
......@@ -508,7 +505,7 @@ def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, js
return jsonReturn(frame, symbols, site, inst, jsonFormat)
elif(fmt == 'xml'):
return xmlReturn(site, inst, frame, symbols, sep)
return xmlReturn(site, inst, frame, symbols, sep, epoch)
else:
return 400
......@@ -4,7 +4,7 @@ from xml.dom.minidom import Document
from io import StringIO
import Util
def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback):
def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback, epoch):
dates = beginEndHandler(begin, end)
if(dates == 400):
......@@ -46,7 +46,7 @@ def modifyData(fmt, begin, end, site, inst, symbols, interval, sep, callback):
if(not sep):
sep = ','
result = query(site, inst, symbols, begin, end, interval)
result = query(site, inst, symbols, begin, end, interval, epoch)
frame = handleResult(fmt,result, symbols, interval, sep, windSpeed, windDirection)
......@@ -103,7 +103,7 @@ def process(symbols):
return site_inst_obj
def asciiReturn(frame, sep, symbols):
def asciiReturn(frame, sep, symbols, epoch):
output = StringIO()
frame = frame.transpose()
......@@ -115,7 +115,11 @@ def asciiReturn(frame, sep, symbols):
data = list(frame.iterrows())
output.write("# Fields: YYYY-MM-DDTHH:MM:SSZ")
if not epoch:
output.write("# Fields: YYYY-MM-DDTHH:MM:SSZ")
else:
output.write("# Fields: " + epoch + ' since epoch (1970-01-01 00:00:00)')
for symbol in symbols:
print(symbol)
......@@ -169,7 +173,7 @@ def jsonReturn(frame, symbols, jsonFormat):
return output
def xmlReturn(frame, symbols, sep):
def xmlReturn(frame, symbols, sep, epoch):
doc = Document()
frame = frame.transpose()
......@@ -190,7 +194,12 @@ def xmlReturn(frame, symbols, sep):
doc.appendChild(head)
stampElt = doc.createElement('timestamp')
stampElt.setAttribute('format', '%Y-%m-%dT%H:%M:%SZ')
if not epoch:
stampElt.setAttribute('format', '%Y-%m-%dT%H:%M:%SZ')
else:
stampElt.setAttribute('format', epoch + ' since epoch (1970-01-01 00:00:00)')
dateStrings = StringIO()
......
from influxdb import InfluxDBClient
from io import StringIO
def query(site, inst, symbols, begin, end, value):
def query(site, inst, symbols, begin, end, value, epoch):
host = 'metobs01'
port = 8086
username = 'root'
......@@ -32,6 +32,6 @@ def query(site, inst, symbols, begin, end, value):
print(query.getvalue())
client = InfluxDBClient(host, port, username, password, DB)
result = client.query(query.getvalue())#, epoch='ms')
result = client.query(query.getvalue(), epoch=epoch)
return result
\ No newline at end of file
......@@ -21,6 +21,7 @@ def handleMultiSites(fmt):
sep = request.args.get('sep')
callback = request.args.get('callback')
jsonFormat = request.args.get('jsonFormat')
epoch = request.args.get('epoch')
modifiedSymbols = symbols.split(':')
frames = {}
......@@ -30,7 +31,7 @@ def handleMultiSites(fmt):
for site in site_inst_symbolObj :
for inst in site_inst_symbolObj[site] :
getSymbols = site_inst_symbolObj[site][inst]
frame = multiData.modifyData(fmt, beginTime, endTime, site, inst, getSymbols, interval, sep, callback)
frame = multiData.modifyData(fmt, beginTime, endTime, site, inst, getSymbols, interval, sep, callback, epoch)
frames[site + '.' + inst] = frame
......@@ -59,7 +60,7 @@ def handleMultiSites(fmt):
if(fmt == 'ascii'):
if(not sep):
sep = ','
return multiData.asciiReturn(frame, sep, modifiedSymbols).getvalue()
return multiData.asciiReturn(frame, sep, modifiedSymbols, epoch).getvalue()
if(fmt == 'json' or fmt == 'jsonp'):
jsonReturn = multiData.jsonReturn(frame, modifiedSymbols, jsonFormat)
......@@ -71,7 +72,7 @@ def handleMultiSites(fmt):
return jsonify(**jsonReturn)
if(fmt == 'xml'):
return Response(multiData.xmlReturn(frame, modifiedSymbols, sep), mimetype='text/xml')
return Response(multiData.xmlReturn(frame, modifiedSymbols, sep, epoch), mimetype='text/xml')
else:
return render_template('404.html'), 404
......@@ -85,11 +86,12 @@ def handleSingleSite(fmt):
interval = request.args.get('interval')
sep = request.args.get('sep')
callback = request.args.get('callback')
jsonFormat = request.args.get('jsonFormat')
jsonFormat = request.args.get('jsonFormat')
epoch = request.args.get('epoch')
result = modifyData.modifyData(fmt, beginTime,
endTime, site, inst, symbols, interval,
sep, callback, jsonFormat)
sep, callback, jsonFormat, epoch)
if(isinstance(result, int)):
if(result == 500):
......
......@@ -13,3 +13,7 @@ http://localhost:5000/api/data.jsonp?site=aoss&inst=tower&symbols=t:td:rh:spd:di
http://localhost:5000/api/data.json?site=aoss&inst=tower&symbols=t:td:rh:spd:dir:accum_precip:flux&begin=-00:10:00&callback=foo&jsonFormat=column
http://localhost:5000/api/data.json?symbols=aoss.tower.t:aoss.tower.td:aoss.tower.rh:mendota.buoy.t:mendota.buoy.td:mendota.buoy.rh:aoss.tower.spd&begin=-00:10:00&callback=foo&jsonFormat=column
http://localhost:5000/api/data.jsonp?symbols=aoss.tower.t:aoss.tower.td:aoss.tower.rh:mendota.buoy.t:mendota.buoy.td:mendota.buoy.rh:aoss.tower.spd&begin=-00:10:00&callback=foo&jsonFormat=column
http://localhost:5000/api/data.ascii?site=aoss&inst=tower&symbols=t:td:rh:spd:dir:accum_precip:flux&begin=-00:10:00&callback=foo&jsonFormat=column&epoch=ms
http://localhost:5000/api/data.xml?site=aoss&inst=tower&symbols=t:td:rh:spd:dir:accum_precip:flux&begin=-00:10:00&callback=foo&jsonFormat=column&epoch=ms
http://localhost:5000/api/data.ascii?symbols=aoss.tower.t:aoss.tower.td:aoss.tower.rh:mendota.buoy.t:mendota.buoy.td:mendota.buoy.rh:aoss.tower.spd&begin=-00:10:00&callback=foo&jsonFormat=column&epoch=ms
http://localhost:5000/api/data.xml?symbols=aoss.tower.t:aoss.tower.td:aoss.tower.rh:mendota.buoy.t:mendota.buoy.td:mendota.buoy.rh:aoss.tower.spd&begin=-00:10:00&callback=foo&jsonFormat=column&epoch=ms
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment