changeset 1411:21d0cd98ef7a

mock output mode Ignore-this: a7b9dd184a2f3c811cd7c1d3ca4a002c darcs-hash:af6eb3949372201ed9b414ce038849c4ce8423cf
author drewp <drewp@bigasterisk.com>
date Wed, 24 Jul 2019 00:34:41 -0700
parents dc70ee50c981
children 302063bfb8ff
files service/reasoning/actions.py service/reasoning/reasoning.py service/reasoning/tasks.py
diffstat 3 files changed, 28 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/service/reasoning/actions.py	Tue Jul 23 17:40:55 2019 -0700
+++ b/service/reasoning/actions.py	Wed Jul 24 00:34:41 2019 -0700
@@ -2,6 +2,8 @@
 from twisted.internet import reactor
 import logging
 import urllib
+import json
+import time
 
 import treq
 log = logging.getLogger('output')
@@ -11,8 +13,9 @@
 REASONING = Namespace("http://projects.bigasterisk.com/ns/reasoning/")
 
 class HttpPutOutput(object):
-    def __init__(self, url):
+    def __init__(self, url, mockOutput=False):
         self.url = url
+        self.mockOutput = mockOutput
         self.payload = None
         self.foafAgent = None
         self.nextCall = None
@@ -37,8 +40,12 @@
             self.nextCall = None
         self.lastErr = None
         log.debug("PUT %s payload=%s agent=%s", self.url, self.payload, self.foafAgent)
-        self.currentRequest = treq.put(self.url, data=self.payload, headers=h, timeout=3)
-        self.currentRequest.addCallback(self.onResponse).addErrback(self.onError)
+        if not self.mockOutput:
+            self.currentRequest = treq.put(self.url, data=self.payload, headers=h, timeout=3)
+            self.currentRequest.addCallback(self.onResponse).addErrback(self.onError)
+        else:
+            reactor.callLater(.2, self.onResponse, None)
+
         self.numRequests += 1
 
     def onResponse(self, resp):
@@ -55,17 +62,19 @@
 
 class HttpPutOutputs(object):
     """these grow forever"""
-    def __init__(self):
+    def __init__(self, mockOutput=False):
+        self.mockOutput = mockOutput
         self.state = {} # url: HttpPutOutput
 
     def put(self, url, payload, foafAgent):
         if url not in self.state:
-            self.state[url] = HttpPutOutput(url)
+            self.state[url] = HttpPutOutput(url, mockOutput=self.mockOutput)
         self.state[url].setPayload(payload, foafAgent)
 
 class Actions(object):
-    def __init__(self, sendToLiveClients):
-        self.putOutputs = HttpPutOutputs()
+    def __init__(self, sendToLiveClients, mockOutput=False):
+        self.mockOutput = mockOutput
+        self.putOutputs = HttpPutOutputs(mockOutput=mockOutput)
         self.sendToLiveClients = sendToLiveClients
 
     def putResults(self, deviceGraph, inferred):
@@ -178,7 +187,8 @@
                 self.sendToLiveClients({"s":s, "p":p, "o":postTarget})
 
                 log.debug("    POST %s", postTarget)
-                treq.post(postTarget, timeout=2).addErrback(err)
+                if not self.mockOutput:
+                    treq.post(postTarget, timeout=2).addErrback(err)
 
     def _putDevices(self, deviceGraph, inferred):
         activated = set()
--- a/service/reasoning/reasoning.py	Tue Jul 23 17:40:55 2019 -0700
+++ b/service/reasoning/reasoning.py	Wed Jul 24 00:34:41 2019 -0700
@@ -49,10 +49,10 @@
 )
 
 class Reasoning(object):
-    def __init__(self):
+    def __init__(self, mockOutput=False):
         self.prevGraph = None
 
-        self.actions = Actions(sendToLiveClients)
+        self.actions = Actions(sendToLiveClients, mockOutput=mockOutput)
 
         self.rulesN3 = "(not read yet)"
         self.inferred = Graph() # gets replaced in each graphChanged call
@@ -304,9 +304,10 @@
     -r                Verbose log on the reasoning phase and web stuff
     -o                Verbose log on the actions/output phase
     -v                Everywhere verbose
+    --mockoutput      Don't make outgoing requests
     """)
-    
-    r = Reasoning()
+
+    r = Reasoning(arg['--mockoutput'])
     configLogging(arg)
     reactor.listenTCP(9071, Application(r), interface='::')
     reactor.run()
--- a/service/reasoning/tasks.py	Tue Jul 23 17:40:55 2019 -0700
+++ b/service/reasoning/tasks.py	Wed Jul 24 00:34:41 2019 -0700
@@ -15,12 +15,16 @@
 
 @task
 def shell(ctx):
-    ctx.run(f'docker run --rm -it --cap-add SYS_PTRACE  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG}  /bin/bash', pty=True)
+    ctx.run(f'docker run --rm -it --cap-add SYS_PTRACE -v `pwd`:/mnt --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG}  /bin/bash', pty=True)
 
 @task(pre=[build_image])
 def local_run(ctx):
     ctx.run(f'docker run --rm -it -p {PORT}:{PORT} -v `pwd`:/mnt  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python /mnt/{JOB}.py -iro', pty=True)
 
+@task(pre=[build_image])
+def local_run_mock(ctx):
+    ctx.run(f'docker run --rm -it -p {PORT}:{PORT} -v `pwd`:/mnt  --dns 10.2.0.1 --dns-search bigasterisk.com --net=host {TAG} python /mnt/{JOB}.py -iro --mockoutput', pty=True)
+
 @task(pre=[push_image])
 def redeploy(ctx):
     ctx.run(f'supervisorctl -s http://bang:9001/ restart {JOB}_{PORT}')