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

added restserver.py

parent a90d9779
Branches
Tags
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