Mercurial > code > home > repos > homeauto
comparison service/reasoning/reasoning.py @ 1057:c1961da4180a
evtiming in reasoning service
Ignore-this: aa4aba730ca916bda2b8e99c743cac2a
darcs-hash:5d6fb7aa4ef06bf359751d069cc071348833ca98
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Fri, 12 Feb 2016 02:42:29 -0800 |
parents | d2007482aec5 |
children | 32cc1eda8389 |
comparison
equal
deleted
inserted
replaced
1056:d2007482aec5 | 1057:c1961da4180a |
---|---|
17 | 17 |
18 | 18 |
19 from twisted.internet import reactor, task | 19 from twisted.internet import reactor, task |
20 from twisted.internet.defer import inlineCallbacks, gatherResults | 20 from twisted.internet.defer import inlineCallbacks, gatherResults |
21 from twisted.python.filepath import FilePath | 21 from twisted.python.filepath import FilePath |
22 import time, traceback, sys, json, logging, urllib | 22 import time, traceback, sys, json, logging |
23 from rdflib import Graph, ConjunctiveGraph | 23 from rdflib import Graph, ConjunctiveGraph |
24 from rdflib import Namespace, URIRef, Literal, RDF | 24 from rdflib import Namespace, URIRef, Literal, RDF |
25 from rdflib.parser import StringInputSource | 25 from rdflib.parser import StringInputSource |
26 | 26 |
27 import cyclone.web, cyclone.websocket | 27 import cyclone.web, cyclone.websocket |
35 sys.path.append("../../lib") | 35 sys.path.append("../../lib") |
36 from logsetup import log | 36 from logsetup import log |
37 log.setLevel(logging.WARN) | 37 log.setLevel(logging.WARN) |
38 outlog = logging.getLogger('output') | 38 outlog = logging.getLogger('output') |
39 outlog.setLevel(logging.WARN) | 39 outlog.setLevel(logging.WARN) |
40 | |
41 sys.path.append('../../../ffg/ffg') | |
42 import evtiming | |
40 | 43 |
41 ROOM = Namespace("http://projects.bigasterisk.com/room/") | 44 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
42 DEV = Namespace("http://projects.bigasterisk.com/device/") | 45 DEV = Namespace("http://projects.bigasterisk.com/device/") |
43 | 46 |
44 | 47 |
186 self.inferred = Graph() # gets replaced in each graphChanged call | 189 self.inferred = Graph() # gets replaced in each graphChanged call |
187 | 190 |
188 self.inputGraph = InputGraph([], self.graphChanged) | 191 self.inputGraph = InputGraph([], self.graphChanged) |
189 self.inputGraph.updateFileData() | 192 self.inputGraph.updateFileData() |
190 | 193 |
191 | 194 @evtiming.serviceLevel.timed('readRules') |
192 def readRules(self): | 195 def readRules(self): |
193 self.rulesN3 = open('rules.n3').read() # for web display | 196 self.rulesN3 = open('rules.n3').read() # for web display |
194 self.ruleStore = N3RuleStore() | 197 self.ruleStore = N3RuleStore() |
195 self.ruleGraph = Graph(self.ruleStore) | 198 self.ruleGraph = Graph(self.ruleStore) |
196 self.ruleGraph.parse('rules.n3', format='n3') # for inference | 199 self.ruleGraph.parse('rules.n3', format='n3') # for inference |
197 | 200 |
198 @inlineCallbacks | 201 @inlineCallbacks |
199 def poll(self): | 202 def poll(self): |
203 t1 = time.time() | |
200 try: | 204 try: |
201 yield self.inputGraph.updateRemoteData() | 205 yield self.inputGraph.updateRemoteData() |
202 self.lastPollTime = time.time() | 206 self.lastPollTime = time.time() |
203 except Exception, e: | 207 except Exception, e: |
204 log.error(traceback.format_exc()) | 208 log.error(traceback.format_exc()) |
205 self.lastError = str(e) | 209 self.lastError = str(e) |
210 evtiming.serviceLevel.addData('poll', time.time() - t1) | |
206 | 211 |
207 def updateRules(self): | 212 def updateRules(self): |
208 try: | 213 try: |
209 t1 = time.time() | 214 t1 = time.time() |
210 self.readRules() | 215 self.readRules() |
217 Literal(traceback.format_exc()))) | 222 Literal(traceback.format_exc()))) |
218 raise | 223 raise |
219 return [(ROOM['reasoner'], ROOM['ruleParseTime'], | 224 return [(ROOM['reasoner'], ROOM['ruleParseTime'], |
220 Literal(ruleParseTime))] | 225 Literal(ruleParseTime))] |
221 | 226 |
227 evtiming.serviceLevel.timed('graphChanged') | |
222 def graphChanged(self, inputGraph, oneShot=False, oneShotGraph=None): | 228 def graphChanged(self, inputGraph, oneShot=False, oneShotGraph=None): |
223 t1 = time.time() | 229 t1 = time.time() |
224 oldInferred = self.inferred | 230 oldInferred = self.inferred |
225 try: | 231 try: |
226 ruleStmts = self.updateRules() | 232 ruleStmts = self.updateRules() |
257 | 263 |
258 | 264 |
259 | 265 |
260 class Index(cyclone.web.RequestHandler): | 266 class Index(cyclone.web.RequestHandler): |
261 def get(self): | 267 def get(self): |
268 print evtiming.serviceLevel.serviceJsonReport() | |
269 | |
262 # make sure GET / fails if our poll loop died | 270 # make sure GET / fails if our poll loop died |
263 ago = time.time() - self.settings.reasoning.lastPollTime | 271 ago = time.time() - self.settings.reasoning.lastPollTime |
264 if ago > 2: | 272 if ago > 2: |
265 self.set_status(500) | 273 self.set_status(500) |
266 self.finish("last poll was %s sec ago. last error: %s" % | 274 self.finish("last poll was %s sec ago. last error: %s" % |