Mercurial > code > home > repos > light9
annotate bin/collector @ 1630:2adbc27f77d3
theater config
Ignore-this: bb91223d90437a7f1e496f1d542fe8bb
author | drewp@bigasterisk.com |
---|---|
date | Sat, 10 Jun 2017 02:07:02 +0000 |
parents | 64c1bcff604e |
children | 6fa4288da8a6 |
rev | line source |
---|---|
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
1 #!bin/python |
1590 | 2 """ |
3 Collector receives device attrs from multiple senders, combines | |
4 them, and sends output attrs to hardware. The combining part has | |
5 custom code for some attributes. | |
6 | |
7 Input can be over http or zmq. | |
8 """ | |
9 | |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
10 from __future__ import division |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
11 from rdflib import URIRef, Literal |
1493
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
12 from twisted.internet import reactor, utils |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
13 from txzmq import ZmqEndpoint, ZmqFactory, ZmqPullConnection |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
14 import json |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
15 import logging |
1372
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
16 import optparse |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
17 import time |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
18 import traceback |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
19 import cyclone.web, cyclone.websocket |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
20 from greplin import scales |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
21 |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
22 from run_local import log |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
23 from lib.cycloneerr import PrettyErrorHandler |
1605 | 24 from light9.collector.output import EnttecDmx, Udmx, DummyOutput |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
25 from light9.collector.collector import Collector |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
26 from light9.namespaces import L9 |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
27 from light9 import networking |
1307
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
28 from light9.rdfdb.syncedgraph import SyncedGraph |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
29 from light9.greplin_cyclone import StatsForCyclone |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
30 |
1491 | 31 def parseJsonMessage(msg): |
1492 | 32 body = json.loads(msg) |
1491 | 33 settings = [] |
34 for device, attr, value in body['settings']: | |
1595
013cbd7a0f08
choice-type attrs in live
Drew Perttula <drewp@bigasterisk.com>
parents:
1590
diff
changeset
|
35 if isinstance(value, basestring) and value.startswith('http'): |
013cbd7a0f08
choice-type attrs in live
Drew Perttula <drewp@bigasterisk.com>
parents:
1590
diff
changeset
|
36 value = URIRef(value) |
013cbd7a0f08
choice-type attrs in live
Drew Perttula <drewp@bigasterisk.com>
parents:
1590
diff
changeset
|
37 else: |
013cbd7a0f08
choice-type attrs in live
Drew Perttula <drewp@bigasterisk.com>
parents:
1590
diff
changeset
|
38 value = Literal(value) |
013cbd7a0f08
choice-type attrs in live
Drew Perttula <drewp@bigasterisk.com>
parents:
1590
diff
changeset
|
39 settings.append((URIRef(device), URIRef(attr), value)) |
1491 | 40 return body['client'], body['clientSession'], settings, body['sendTime'] |
41 | |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
42 def startZmq(port, collector): |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
43 stats = scales.collection('/zmqServer', |
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
44 scales.PmfStat('setAttr')) |
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
45 |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
46 zf = ZmqFactory() |
1492 | 47 addr = 'tcp://*:%s' % port |
48 log.info('creating zmq endpoint at %r', addr) | |
49 e = ZmqEndpoint('bind', addr) | |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
50 s = ZmqPullConnection(zf, e) |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
51 def onPull(message): |
1492 | 52 with stats.setAttr.time(): |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
53 # todo: new compressed protocol where you send all URIs up |
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
54 # front and then use small ints to refer to devices and |
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
55 # attributes in subsequent requests. |
1492 | 56 client, clientSession, settings, sendTime = parseJsonMessage(message[0]) |
57 collector.setAttrs(client, clientSession, settings, sendTime) | |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
58 s.onPull = onPull |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
59 |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
60 class WebListeners(object): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
61 def __init__(self): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
62 self.clients = [] |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
63 self.pendingMessageForDev = {} # dev: (attrs, outputmap) |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
64 self.lastFlush = 0 |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
65 |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
66 def addClient(self, client): |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
67 self.clients.append([client, {}]) # seen = {dev: attrs} |
1543
c8cffe82b537
collector gui updates
Drew Perttula <drewp@bigasterisk.com>
parents:
1541
diff
changeset
|
68 log.info('added client %s', client) |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
69 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
70 def delClient(self, client): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
71 self.clients = [[c, t] for c, t in self.clients if c != client] |
1543
c8cffe82b537
collector gui updates
Drew Perttula <drewp@bigasterisk.com>
parents:
1541
diff
changeset
|
72 log.info('delClient %s, %s left', client, len(self.clients)) |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
73 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
74 def outputAttrsSet(self, dev, attrs, outputMap): |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
75 """called often- don't be slow""" |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
76 |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
77 self.pendingMessageForDev[dev] = (attrs, outputMap) |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
78 self._flush() |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
79 |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
80 def _flush(self): |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
81 now = time.time() |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
82 if now < self.lastFlush + .05 or not self.clients: |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
83 return |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
84 self.lastFlush = now |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
85 |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
86 while self.pendingMessageForDev: |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
87 dev, (attrs, outputMap) = self.pendingMessageForDev.popitem() |
1564
f2e6d96d02de
minor comments and refactors, I think, except the removal of 'row update' logging made a big perf difference
Drew Perttula <drewp@bigasterisk.com>
parents:
1543
diff
changeset
|
88 |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
89 msg = None # lazy, since makeMsg is slow |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
90 |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
91 # this omits repeats, but can still send many |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
92 # messages/sec. Not sure if piling up messages for the browser |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
93 # could lead to slowdowns in the real dmx output. |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
94 for client, seen in self.clients: |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
95 if seen.get(dev) == attrs: |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
96 continue |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
97 if msg is None: |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
98 msg = self.makeMsg(dev, attrs, outputMap) |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
99 |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
100 seen[dev] = attrs |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
101 client.sendMessage(msg) |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
102 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
103 def makeMsg(self, dev, attrs, outputMap): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
104 attrRows = [] |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
105 for attr, val in attrs.items(): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
106 output, index = outputMap[(dev, attr)] |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
107 attrRows.append({'attr': attr.rsplit('/')[-1], |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
108 'val': val, |
1543
c8cffe82b537
collector gui updates
Drew Perttula <drewp@bigasterisk.com>
parents:
1541
diff
changeset
|
109 'chan': (output.shortId(), index + 1)}) |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
110 attrRows.sort(key=lambda r: r['chan']) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
111 for row in attrRows: |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
112 row['chan'] = '%s %s' % (row['chan'][0], row['chan'][1]) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
113 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
114 msg = json.dumps({'outputAttrsSet': {'dev': dev, 'attrs': attrRows}}, sort_keys=True) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
115 return msg |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
116 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
117 class Updates(cyclone.websocket.WebSocketHandler): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
118 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
119 def connectionMade(self, *args, **kwargs): |
1543
c8cffe82b537
collector gui updates
Drew Perttula <drewp@bigasterisk.com>
parents:
1541
diff
changeset
|
120 log.info('socket connect %s', self) |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
121 self.settings.listeners.addClient(self) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
122 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
123 def connectionLost(self, reason): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
124 self.settings.listeners.delClient(self) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
125 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
126 def messageReceived(self, message): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
127 json.loads(message) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
128 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
129 stats = scales.collection('/webServer', scales.PmfStat('setAttr')) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
130 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
131 class Attrs(PrettyErrorHandler, cyclone.web.RequestHandler): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
132 def put(self): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
133 with stats.setAttr.time(): |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
134 client, clientSession, settings, sendTime = parseJsonMessage(self.request.body) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
135 self.settings.collector.setAttrs(client, clientSession, settings, sendTime) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
136 self.set_status(202) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
137 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
138 |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
139 |
1490
649d482737e0
start of a collector --loadtest mode
Drew Perttula <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
140 def launch(graph, doLoadTest=False): |
1530 | 141 try: |
142 # todo: drive outputs with config files | |
143 outputs = [ | |
1630 | 144 EnttecDmx(L9['output/dmx0/'], '/dev/dmx3', 80), |
1530 | 145 Udmx(L9['output/udmx/'], 510), |
146 ] | |
147 except Exception as e: | |
148 log.error("setting up outputs: %r", e) | |
149 traceback.print_exc() | |
150 raise | |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
151 listeners = WebListeners() |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
152 c = Collector(graph, outputs, listeners) |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
153 |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
154 startZmq(networking.collectorZmq.port, c) |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
155 |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
156 reactor.listenTCP(networking.collector.port, |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
157 cyclone.web.Application(handlers=[ |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
158 (r'/()', cyclone.web.StaticFileHandler, |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
159 {"path" : "light9/collector/web", "default_filename" : "index.html"}), |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
160 (r'/updates', Updates), |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
161 (r'/attrs', Attrs), |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
162 (r'/stats', StatsForCyclone), |
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
163 ], collector=c, listeners=listeners), |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
164 interface='::') |
1289
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
165 log.info('serving http on %s, zmq on %s', networking.collector.port, |
5a4e74f1e36a
Fixed client session clearing bugs.
Drew Perttula <drewp@bigasterisk.com>
parents:
1288
diff
changeset
|
166 networking.collectorZmq.port) |
1490
649d482737e0
start of a collector --loadtest mode
Drew Perttula <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
167 if doLoadTest: |
1493
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
168 # in a subprocess since we don't want this client to be |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
169 # cooperating with the main event loop and only sending |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
170 # requests when there's free time |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
171 def afterWarmup(): |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
172 log.info('running collector_loadtest') |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
173 d = utils.getProcessValue('bin/python', ['bin/collector_loadtest.py']) |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
174 def done(*a): |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
175 log.info('loadtest done') |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
176 reactor.stop() |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
177 d.addCallback(done) |
4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
drewp@bigasterisk.com
parents:
1492
diff
changeset
|
178 reactor.callLater(2, afterWarmup) |
1307
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
179 |
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
180 def main(): |
1372
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
181 parser = optparse.OptionParser() |
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
182 parser.add_option("-v", "--verbose", action="store_true", |
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
183 help="logging.DEBUG") |
1490
649d482737e0
start of a collector --loadtest mode
Drew Perttula <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
184 parser.add_option("--loadtest", action="store_true", |
649d482737e0
start of a collector --loadtest mode
Drew Perttula <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
185 help="call myself with some synthetic load then exit") |
1372
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
186 (options, args) = parser.parse_args() |
f427801da9f6
collector properly merges repeated attr settings in the same message
Drew Perttula <drewp@bigasterisk.com>
parents:
1307
diff
changeset
|
187 log.setLevel(logging.DEBUG if options.verbose else logging.INFO) |
1307
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
188 |
1596
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
189 logging.getLogger('colormath').setLevel(logging.INFO) |
7d5d6e7bc526
collector web view speedups- don't json encode all devs all the time
Drew Perttula <drewp@bigasterisk.com>
parents:
1595
diff
changeset
|
190 |
1307
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
191 graph = SyncedGraph(networking.rdfdb.url, "collector") |
8863b4485fd4
collector uses rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents:
1289
diff
changeset
|
192 |
1541
c1bf296b0a74
collector uses cyclone and gets a web ui showing output attrs
Drew Perttula <drewp@bigasterisk.com>
parents:
1530
diff
changeset
|
193 graph.initiallySynced.addCallback(lambda _: launch(graph, options.loadtest)).addErrback(log.error) |
1288
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
194 reactor.run() |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
195 |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
196 if __name__ == '__main__': |
5e76c8fd8a03
rewrite dmx outputter to a new service
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
197 main() |