diff options
-rwxr-xr-x | bin/ebus_web.py | 10 | ||||
-rw-r--r-- | bin/web.py | 7 | ||||
-rw-r--r-- | ebus/sql/__init__.py | 0 | ||||
-rw-r--r-- | ebus/sql/model.py (renamed from ebus/web/model.py) | 0 | ||||
-rw-r--r-- | ebus/web/__init__.py | 67 | ||||
-rw-r--r-- | ebus/web/controller.py | 17 |
6 files changed, 87 insertions, 14 deletions
diff --git a/bin/ebus_web.py b/bin/ebus_web.py deleted file mode 100755 index 74fe9b9..0000000 --- a/bin/ebus_web.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import sys -from ebus.web import controller - -from sqlalchemy import create_engine - -#db_engine = create_engine('sqlite:///:memory:', echo=True) -db_engine = create_engine("postgresql://yvesf:iii@10.2.2.13:5432/yvesf", echo=True) - -sys.exit(controller.run(db_engine)) diff --git a/bin/web.py b/bin/web.py new file mode 100644 index 0000000..c0e2f5d --- /dev/null +++ b/bin/web.py @@ -0,0 +1,7 @@ +#!/usr/bin/python +# coding: utf-8 +import bottle +from ebus import web + +if __name__ == "__main__": + bottle.run(web.app, host="0.0.0.0", port=8000, reloader=True) diff --git a/ebus/sql/__init__.py b/ebus/sql/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ebus/sql/__init__.py diff --git a/ebus/web/model.py b/ebus/sql/model.py index 7e21e82..7e21e82 100644 --- a/ebus/web/model.py +++ b/ebus/sql/model.py diff --git a/ebus/web/__init__.py b/ebus/web/__init__.py index e69de29..cfec3f0 100644 --- a/ebus/web/__init__.py +++ b/ebus/web/__init__.py @@ -0,0 +1,67 @@ +# coding: utf-8 +import os +import time +import datetime +import calendar + +import bottle +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from ebus.sql import model + +app = bottle.Bottle("ebus") +bottle.debug() + +engine = create_engine("postgresql://jack:jack@10.2.2.22:5432/ebus",echo=True) +Session = sessionmaker() +Session.configure(bind=engine) + +@app.route("/") +def do_index(): + return serve_static("index.html") + +@app.route('/static/:filename') +def serve_static(filename): + return bottle.static_file(filename, + root=os.path.join(os.path.dirname(__file__),"static")) + +@app.route("/list") +def list(): + sensors = Session().query(model.Sensor).all() + return {"type":"list","data":map(lambda sensor: sensor.name, sensors)} + +@app.route("/:when#today|yesterday|week|month#/:sensor") +def get_value(when,sensor): + s = Session() + sensor = s.query(model.Sensor).filter(model.Sensor.name == sensor).first() + values = Session().query(model.Value).add_columns("value_float","value_string","value_int") + values = values.filter(model.Value.sensor == sensor) + + now = datetime.datetime.now() + f,t = None, None + if when == "today": + f = now.date() + t = now.date() + datetime.timedelta(1) + elif when == "yesterday": + f = now.date() - datetime.timedelta(1) + t = now + elif when == "week": + f = now.date() - datetime.timedelta(now.isoweekday()) + t = now.date() + datetime.timedelta(7-now.isoweekday()) + elif when == "month": + f = now.date() - datetime.timedelta(now.day) + t = f + datetime.timedelta( calendar.monthrange(f.year, f.month)[1] ) + else: + raise Exception("illegal timerange") + + values = values.filter(model.Value.timestamp.between(f,t)) + x = values.all() + + v=[] + for value in values.all(): + v.append(value.value()) + return {"type":when,"data":v} + + + diff --git a/ebus/web/controller.py b/ebus/web/controller.py index 683bb6c..99d7053 100644 --- a/ebus/web/controller.py +++ b/ebus/web/controller.py @@ -6,7 +6,7 @@ from werkzeug.contrib.cache import SimpleCache from simplejson import dumps as dump_json from sqlalchemy.orm import sessionmaker -from ebus import model +from ebus.web import model Session = sessionmaker() @@ -35,13 +35,14 @@ def index(req): filename=os.path.join(os.path.dirname(__file__), "static", "index.html") return open(filename,"r").read() -@itty.get('/json/(?P<sensor>[^/]+)') -@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)') -@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)/till_date/(?P<till_date>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)') +#@itty.get('/json/(?P<sensor>[^/]+)/from_date/(?P<from_date>[^/]+)/till_date/(?P<till_date>[^/]+)') @CacheDecorator(key=lambda args,kwargs: tuple(kwargs.keys()) + tuple(kwargs.values()), timeout=20) def json(req,sensor=None,from_date=None,till_date=None): print "sensor=%s from_date=%s till_date=%s" % (sensor,from_date,till_date) + """ values = Session().query(model.Value).join(model.Sensor) if sensor: @@ -56,9 +57,17 @@ def json(req,sensor=None,from_date=None,till_date=None): response = {"sensor":sensor, "from_date":from_date, "till_date":till_date, "values":values.all()} return itty.Response(dump_json(response), content_type="application/json") + """ + return itty.Response("") + +@itty.get('/json/list') +def list(req): + sensors = Session().query(model.Sensor) + return str(sensors.all()) @itty.get("/static/(?P<filename>.+)") def static(request,filename): + return "" file = itty.static_file(filename, root=os.path.join(os.path.dirname(__file__), 'static')) return itty.Response(file, content_type=itty.content_type(file)) |