Changeset - 19eef99e059e
[Not reviewed]
default
0 0 1
drewp@bigasterisk.com - 6 years ago 2019-06-08 09:16:08
drewp@bigasterisk.com
start patchserver- shows final dmx usage
Ignore-this: 7ac19499001abffaa838f7b7dd5b919d
1 file changed with 82 insertions and 0 deletions:
0 comments (0 inline, 0 general)
bin/patchserver
Show inline comments
 
new file 100644
 
#!bin/python
 

	
 
from run_local import log
 

	
 
from rdflib import URIRef
 
from twisted.internet import reactor
 
from twisted.internet.defer import inlineCallbacks, Deferred
 

	
 
import logging
 
import optparse
 
import os
 
import time
 
import treq
 
import cyclone.web, cyclone.websocket, cyclone.httpclient
 
from greplin import scales
 

	
 
from cycloneerr import PrettyErrorHandler
 

	
 
from light9.namespaces import L9, RDF
 
from light9 import networking, showconfig
 
from rdfdb.syncedgraph import SyncedGraph
 

	
 
from greplin.scales.cyclonehandler import StatsHandler
 
from light9.effect.settings import DeviceSettings
 
from rdfdb.patch import Patch
 

	
 
stats = scales.collection('/webServer', scales.PmfStat('setAttr',
 
                                                       recalcPeriod=1))
 

	
 
def launch(graph):
 
    if 0:
 
        reactor.listenTCP(networking.captureDevice.port,
 
                          cyclone.web.Application(handlers=[
 
                              (r'/()', cyclone.web.StaticFileHandler, {
 
                                  "path": "light9/web",
 
                                  "default_filename": "patchServer.html"
 
                              }),
 
                              (r'/stats/(.*)', StatsHandler, {
 
                                  'serverName': 'patchServer'
 
                              }),
 
                          ]),
 
                          interface='::',
 
                          )
 
        log.info('serving http on %s', networking.captureDevice.port)
 

	
 
    def prn():
 
        width = {}
 
        for dc in graph.subjects(RDF.type, L9['DeviceClass']):
 
            for attr in graph.objects(dc, L9['attr']):
 
                width[dc] = max(width.get(dc, 0), graph.value(attr, L9['dmxOffset']).toPython() + 1)
 
        
 
        user = {} # chan: [dev]
 
        for dev in set(graph.subjects(L9['dmxBase'], None)):
 
            dc = graph.value(dev, RDF.type)
 
            base = graph.value(dev, L9['dmxBase']).toPython()
 
            for offset in range(0, width[dc]):
 
                chan = base + offset
 
                user.setdefault(chan, []).append(dev)
 

	
 
        for chan in range(1, max(user) + 1):
 
            dev = user.get(chan, None)
 
            print(f'chan {chan} used by {dev}')
 
    graph.addHandler(prn)
 
    
 
def main():
 
    parser = optparse.OptionParser()
 
    parser.add_option("-v",
 
                      "--verbose",
 
                      action="store_true",
 
                      help="logging.DEBUG")
 
    (options, args) = parser.parse_args()
 
    log.setLevel(logging.DEBUG if options.verbose else logging.INFO)
 

	
 
    graph = SyncedGraph(networking.rdfdb.url, "captureDevice")
 

	
 
    graph.initiallySynced.addCallback(lambda _: launch(graph)).addErrback(
 
        log.error)
 
    reactor.run()
 

	
 

	
 
if __name__ == '__main__':
 
    main()
0 comments (0 inline, 0 general)