annotate light9/collector/collector_client.py @ 2187:ccdfdc8183ad

remove py2-style 'object' superclass
author drewp@bigasterisk.com
date Fri, 19 May 2023 21:14:01 -0700
parents 9aa046cc9b33
children 62b832e9aac5
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
2046
9aa046cc9b33 replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents: 2043
diff changeset
3 from light9.metrics import metrics
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
4 from twisted.internet import defer
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
5 from txzmq import ZmqEndpoint, ZmqFactory, ZmqPushConnection
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
6 import json, time, logging
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
7 import treq
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
8
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
9 log = logging.getLogger('coll_client')
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
10
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
11 _zmqClient = None
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
12
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
13
2187
ccdfdc8183ad remove py2-style 'object' superclass
drewp@bigasterisk.com
parents: 2046
diff changeset
14 class TwistedZmqClient:
1877
d01e21621975 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1876
diff changeset
15
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
16 def __init__(self, service):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
17 zf = ZmqFactory()
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
18 e = ZmqEndpoint('connect', 'tcp://%s:%s' % (service.host, service.port))
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
19 self.conn = ZmqPushConnection(zf, e)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
20
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
21 def send(self, msg):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
22 self.conn.push(msg)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
23
1927
4718ca6f812e autoformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1923
diff changeset
24
1971
b26a1e7fcfbe dmx out: lots of stats and more reconnection attempts after usb errors
drewp@bigasterisk.com
parents: 1960
diff changeset
25 def toCollectorJson(client, session, settings: DeviceSettings) -> str:
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
26 assert isinstance(settings, DeviceSettings)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
27 return json.dumps({
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
28 'settings': settings.asList(),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
29 'client': client,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
30 'clientSession': session,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
31 'sendTime': time.time(),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
32 })
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
33
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
34
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
35 def sendToCollectorZmq(msg):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
36 global _zmqClient
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
37 if _zmqClient is None:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
38 _zmqClient = TwistedZmqClient(networking.collectorZmq)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
39 _zmqClient.send(msg)
1923
feafbe49ca0b type fixes
Drew Perttula <drewp@bigasterisk.com>
parents: 1922
diff changeset
40 return defer.succeed(0.0)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
41
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
42
1927
4718ca6f812e autoformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1923
diff changeset
43 def sendToCollector(client, session, settings: DeviceSettings,
4718ca6f812e autoformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1923
diff changeset
44 useZmq=False) -> defer.Deferred:
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
45 """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
46 sendTime = time.time()
1876
8da5b4edcb7e type fixes, especially for collector_client
Drew Perttula <drewp@bigasterisk.com>
parents: 1873
diff changeset
47 msg = toCollectorJson(client, session, settings).encode('utf8')
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
48
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
49 if useZmq:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
50 d = sendToCollectorZmq(msg)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
51 else:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
52 d = treq.put(networking.collector.path('attrs'), data=msg, timeout=1)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
53
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
54 def onDone(result):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
55 dt = time.time() - sendTime
2046
9aa046cc9b33 replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents: 2043
diff changeset
56 metrics('send').observe(dt)
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
57 if dt > .1:
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
58 log.warn('sendToCollector request took %.1fms', dt * 1000)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
59 return dt
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
60
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
61 d.addCallback(onDone)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
62
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
63 def onErr(err):
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
64 log.warn('sendToCollector failed: %r', err)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1830
diff changeset
65
1830
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
66 d.addErrback(onErr)
8e0e5b3db301 redo collector client to use HTTP
drewp@bigasterisk.com
parents:
diff changeset
67 return d