annotate light9/collector/collector_client.py @ 1876:8da5b4edcb7e

type fixes, especially for collector_client Ignore-this: c4ad6f85a477fc034ceb6e996e701de8
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 27 May 2019 07:03:27 +0000
parents f001d689b3e2
children d01e21621975
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
1 from light9 import networking
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
2 from light9.effect.settings import DeviceSettings
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
3 from twisted.internet import defer
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
4 from txzmq import ZmqEndpoint, ZmqFactory, ZmqPushConnection
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
5 import json, time, logging
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
6 import treq
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
7
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
8 log = logging.getLogger('coll_client')
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
9
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
10 _zmqClient = None
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
11
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
12
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
13 class TwistedZmqClient(object):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
14 def __init__(self, service):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
15 zf = ZmqFactory()
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
16 e = ZmqEndpoint('connect', 'tcp://%s:%s' % (service.host, service.port))
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
17 self.conn = ZmqPushConnection(zf, e)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
18
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
19 def send(self, msg):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
20 self.conn.push(msg)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
21
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
22
1876
8da5b4edcb7e type fixes, especially for collector_client
Drew Perttula <drewp@bigasterisk.com>
parents: 1873
diff changeset
23 def toCollectorJson(client, session, settings) -> str:
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
24 assert isinstance(settings, DeviceSettings)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
25 return json.dumps({
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
26 'settings': settings.asList(),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
27 'client': client,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
28 'clientSession': session,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
29 'sendTime': time.time(),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
30 })
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
31
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
32
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
33 def sendToCollectorZmq(msg):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
34 global _zmqClient
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
35 if _zmqClient is None:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
36 _zmqClient = TwistedZmqClient(networking.collectorZmq)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
37 _zmqClient.send(msg)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
38 return defer.succeed(0)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
39
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
40
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
41 def sendToCollector(client, session, settings, useZmq=False):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
42 """deferred to the time in seconds it took to get a response from collector"""
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
43 sendTime = time.time()
1876
8da5b4edcb7e type fixes, especially for collector_client
Drew Perttula <drewp@bigasterisk.com>
parents: 1873
diff changeset
44 msg = toCollectorJson(client, session, settings).encode('utf8')
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
45
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
46 if useZmq:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
47 d = sendToCollectorZmq(msg)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
48 else:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
49 d = treq.put(networking.collector.path('attrs'), data=msg, timeout=1)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
50
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
51 def onDone(result):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
52 dt = time.time() - sendTime
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
53 if dt > .1:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
54 log.warn('sendToCollector request took %.1fms', dt * 1000)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
55 return dt
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
56
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
57 d.addCallback(onDone)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
58
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
59 def onErr(err):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
60 log.warn('sendToCollector failed: %r', err)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
61
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
62 d.addErrback(onErr)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
63 return d