summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/ebus_web.py10
-rw-r--r--bin/web.py7
-rw-r--r--ebus/sql/__init__.py0
-rw-r--r--ebus/sql/model.py (renamed from ebus/web/model.py)0
-rw-r--r--ebus/web/__init__.py67
-rw-r--r--ebus/web/controller.py17
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))