diff service/environment/environment.py @ 440:6304b0370491

environment graph service standardization Ignore-this: 3aeb86c03902af984a871c9c2d2dd7cd
author drewp@bigasterisk.com
date Thu, 18 Apr 2019 09:12:26 -0700
parents 596c645a1fc5
children a93fbf0d0daa
line wrap: on
line diff
--- a/service/environment/environment.py	Mon Apr 15 00:17:04 2019 -0700
+++ b/service/environment/environment.py	Thu Apr 18 09:12:26 2019 -0700
@@ -4,20 +4,28 @@
 daytime/night, overall modes like 'maintenance mode', etc
 
 """
-import sys, datetime, cyclone.web
-from twisted.internet import reactor, task
+import sys, datetime, cyclone.web, logging
+from docopt import docopt
+from twisted.internet import reactor, task, defer
 from dateutil.tz import tzlocal
 from dateutil.relativedelta import relativedelta, FR
 from rdflib import Namespace, Literal
-sys.path.append("/my/proj/homeauto/lib")
+from greplin import scales
+from greplin.scales.cyclonehandler import StatsHandler
 from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler
 from twilight import isWithinTwilight
+from logsetup import log, enableTwistedLog
 
 from rdfdoc import Doc
 
 ROOM = Namespace("http://projects.bigasterisk.com/room/")
 DEV = Namespace("http://projects.bigasterisk.com/device/")
 
+STATS = scales.collection('/root',
+                          scales.PmfStat('update'),
+)
+
+@STATS.update.time()
 def update(masterGraph):
     stmt = lambda s, p, o: masterGraph.patchObject(ROOM.environment, s, p, o)
     
@@ -47,8 +55,17 @@
 
        
 def main():
-    from twisted.python import log as twlog
-    twlog.startLogging(sys.stderr)
+    arg = docopt("""
+    Usage: environment.py [options]
+
+    -v                    Verbose
+    """)
+    log.setLevel(logging.INFO)
+    if arg['-v']:
+        enableTwistedLog()
+        log.setLevel(logging.DEBUG)
+        defer.setDebugging(True)
+        
     masterGraph = PatchableGraph()
 
     class Application(cyclone.web.Application):
@@ -62,6 +79,7 @@
                 (r'/graph/events',
                  CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
                 (r'/doc', Doc), # to be shared
+                (r'/stats/(.*)', StatsHandler, {'serverName': 'environment'}),
             ]
             cyclone.web.Application.__init__(self, handlers,
                                              masterGraph=masterGraph)