Skip to content
Snippets Groups Projects
Commit c68c9263 authored by ludovic.gindre's avatar ludovic.gindre
Browse files

added restserver.py

parent a90d9779
No related branches found
No related tags found
No related merge requests found
#!flask/bin/python
# -*- coding: utf-8 -*-
from flask import Flask, jsonify, abort, request
from pymongo import MongoClient
from bson.json_util import dumps
from pprint import pprint
import os
import json
import sys
import time
import datetime
#from OpenSSL import SSL
#SECRET_KEY = 'GBT93m!$.2_mDs245XcV-eWZ'
#context = SSL.Context(SSL.SSLv23_METHOD)
#context.use_privatekey_file('server.key')
#context.use_certificate_file('server.cert')
#Global vars
app = Flask(__name__)
PASSWORD = "labolabo"
USER = "labo"
CLIENT = None
DB = None
COLLECTION = {}
CONTAINER_NAME = 'smarthepia'
ip_addr = sys.argv[1]
#openstack_user = sys.argv[2] # username:tenant
#openstack_pwd = sys.argv[3] # password :)
#openstack_region = 'RegionOne' # default region of HepiaCloud
#openstack_auth_url = 'http://hepiacloud.hesge.ch:5000/v3'
def cleanIds(t):
for el in t:
del el["_id"]
return t
def getControllersTable(controller):
try:
return COLLECTION[controller]
except:
return None
@app.route('/getLastSensorValue/<string:controller>/<int:sensor_id>', methods=['GET'])
def routeGetLast(controller,sensor_id):
return dumps(cleanIds(list(getLastSensorValue(controller,sensor_id))))
@app.route('/getLastSensorsValues/<string:controller>', methods=['GET'])
def routeGetLastValues(controller):
if controller=='pi1':
nb=[2,3,4,5,6,7,14,15,16,17,18,19,28]
elif controller=='pi2':
nb=[2,3,4,5,6,7,8,9,10,11]
else:
nb=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
list1="["+dumps(cleanIds(list(getLastSensorValue(controller,nb[0]))))
for sensor in nb[1:]:
list1+=","+dumps(cleanIds(list(getLastSensorValue(controller,sensor))))
return list1+"]"
@app.route('/getSensorValuesInLastHours/<string:controller>/<int:sensor_id>/<int:hours>', methods=['GET'])
def routeGetInLastHours(controller,sensor_id, hours):
return dumps([cleanIds(list(getSensorValuesInLastNHours(controller,sensor_id,hours))[::5]),cleanIds(list(getLastSensorValue(controller,sensor_id)))])
def getSensorValuesBetweenDates(controller, sensor_id, from_date, to_date):
col = getControllersTable(controller)
if col == None:
return []
from_ts = time.mktime(time.strptime(from_date, '%d-%m-%Y:%H:%M'))
to_ts = time.mktime(time.strptime(to_date, '%d-%m-%Y:%H:%M'))
print from_ts, to_ts
if from_ts >= to_ts:
return []
return col.find({
"sid":sensor_id ,
"ts" : {
"$gt" : from_ts,
"$lt" : to_ts
}
}).sort("ts", 1)
def getSensorValuesInLastNHours(controller,sensor_id, nhours):
col = getControllersTable(controller)
if col == None:
return []
if nhours > 72:
nhours = 72
ts = time.time() - nhours*3600
print datetime.datetime.fromtimestamp(int(ts))
return col.find({
"sid":sensor_id ,
"ts" : {
"$gt" : ts
}
}).sort("ts", 1)
def getLastSensorValue(controller,sensor_id):
col = getControllersTable(controller)
if col == None:
return []
return col.find({"sid":sensor_id}).sort("_id" , -1).limit(1)
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if __name__ == '__main__':
CLIENT = MongoClient(ip_addr, 27017)
#CLIENT.labo.authenticate(USER,PASSWORD)
DB = CLIENT.smarthepia
#DB COLLECTIONS WHITELIST
COLLECTION["pi1"] = DB.pi1
COLLECTION["pi2"] = DB.pi2
COLLECTION["pi3"] = DB.pi3
# context = ('server.cert', 'server.key')
app.run(debug=False,host='0.0.0.0',port=18000,threaded=True)
'''
#24h -> 60kb w/ ids, 40 w/o
#48h -> 120kb w/ids, 80 w/o
# => ids en string = 33% string length
a = list(getLastSensorValue("9"))[0]
print "Last value : "
print str(a["ts"]) +" "+ str(datetime.datetime.fromtimestamp(int(a["ts"])))
b = list(getSensorValuesInLastNHours("6",48))
print len(b)
print sys.getsizeof(dumps(b))
print sys.getsizeof(dumps(cleanIds(b)))
for i in b:
print str(int(i["ts"]))+ " "+ str(datetime.datetime.fromtimestamp(int(i["ts"])))
'''
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment