diff service/rfid_pn532_py/rfid.py @ 1235:d8aa414f21d9

py3, rfid-console rename Ignore-this: 1b28d912e8847685a87c0c9ccb703608 darcs-hash:1812ff3e65cffea158d10f03e565942a684b4bd4
author drewp <drewp@bigasterisk.com>
date Sun, 07 Apr 2019 03:58:51 -0700
parents c571a45c944f
children d7ede2330b6d
line wrap: on
line diff
--- a/service/rfid_pn532_py/rfid.py	Sun Apr 07 03:58:05 2019 -0700
+++ b/service/rfid_pn532_py/rfid.py	Sun Apr 07 03:58:51 2019 -0700
@@ -6,7 +6,7 @@
 from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
 from rdflib import Namespace, URIRef, Literal, Graph
 from rdflib.parser import StringInputSource
-from twisted.internet import reactor, task
+from twisted.internet import reactor, task, defer
 import cyclone.web
 from cyclone.httpclient import fetch
 import cyclone
@@ -14,14 +14,16 @@
 from logsetup import log, enableTwistedLog
 from greplin import scales
 from greplin.scales.cyclonehandler import StatsHandler
+from export_to_influxdb import InfluxExporter
 from tags import NfcDevice, FakeNfc
 
 ROOM = Namespace('http://projects.bigasterisk.com/room/')
 
 ctx = ROOM['frontDoorWindowRfidCtx']
 
-STATS = scales.collection('/web',
+STATS = scales.collection('/root',
                           scales.PmfStat('cardReadPoll'),
+                          scales.IntStat('newCardReads'),
 )
 
 class OutputPage(cyclone.web.RequestHandler):
@@ -96,7 +98,7 @@
         self.overwrite_any_tag = overwrite_any_tag
         self.log = {} # cardIdUri : most recent seentime
 
-        self.pollPeriodSecs = 5.1
+        self.pollPeriodSecs = .1
         self.expireSecs = 5
         
         task.LoopingCall(self.poll).start(self.pollPeriodSecs)
@@ -107,25 +109,29 @@
 
         self.flushOldReads(now)
 
-        for tag in self.reader.getTags(): # blocks for a bit
-            uid = tag.uid()
-            log.debug('detected tag uid=%r', uid)
-            cardIdUri = uidUri(uid)
+        try:
+            for tag in self.reader.getTags(): # blocks for a bit
+                uid = tag.uid()
+                log.debug('detected tag uid=%r', uid)
+                cardIdUri = uidUri(uid)
 
-            is_new = cardIdUri not in self.log
-            self.log[cardIdUri] = now
-            if is_new:
-                tag.connect()
-                try:
-                    textLit = Literal(tag.readBlock(1).rstrip('\x00'))
-                    if self.overwrite_any_tag and not looksLikeBigasterisk(textLit):
-                        log.info("block 1 was %r; rewriting it", textLit)
-                        tag.writeBlock(1, randomBody())
+                is_new = cardIdUri not in self.log
+                self.log[cardIdUri] = now
+                if is_new:
+                    STATS.newCardReads += 1
+                    tag.connect()
+                    try:
                         textLit = Literal(tag.readBlock(1).rstrip('\x00'))
-                finally:
-                    tag.disconnect()
-                self.startCardRead(cardIdUri, textLit)
-        
+                        if self.overwrite_any_tag and not looksLikeBigasterisk(textLit):
+                            log.info("block 1 was %r; rewriting it", textLit)
+                            tag.writeBlock(1, randomBody())
+                            textLit = Literal(tag.readBlock(1).rstrip('\x00'))
+                    finally:
+                        tag.disconnect()
+                    self.startCardRead(cardIdUri, textLit)
+        except OSError as e:
+            log.error(e)
+            reactor.stop()
     def flushOldReads(self, now):
         for uri in list(self.log):
             if self.log[uri] < now - self.expireSecs:
@@ -186,6 +192,15 @@
     masterGraph = PatchableGraph()
     reader = NfcDevice() if not arg['-n'] else FakeNfc()
 
+    ie=InfluxExporter(Graph())
+    ie.exportStats(STATS, ['root.cardReadPoll.count',
+                           'root.cardReadPoll.95percentile',
+                           'root.newCardReads',
+                       ],
+                    period_secs=10,
+                    retain_days=7,
+    )
+
     loop = ReadLoop(reader, masterGraph, overwrite_any_tag=arg['--overwrite_any_tag'])
 
     port = 10012