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" %