client2.py
115 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
/ scripts / client2.py
|
r36 | #!/usr/bin/python | ||
# -*- coding: UTF-8 -*- | ||||
import time | ||||
from datetime import datetime, timedelta | ||||
import zmq | ||||
import json | ||||
import numpy as np | ||||
import argparse | ||||
import base64 | ||||
REQUEST_TIMEOUT = 5000 | ||||
RETRIES = 2 | ||||
SERVER_ENDPOINT = 'tcp://localhost:4444' | ||||
filenames = [ | ||||
'/Users/jespinoza/Downloads/202016700024003000.png', | ||||
'/Users/jespinoza/Downloads/202016800024003100.png', | ||||
'/Users/jespinoza/Downloads/202016800024003200.png', | ||||
] | ||||
def send(data): | ||||
''' | ||||
Function to send data to server | ||||
''' | ||||
context = zmq.Context() | ||||
socket = context.socket(zmq.REQ) | ||||
socket.connect(SERVER_ENDPOINT) | ||||
poll = zmq.Poller() | ||||
poll.register(socket, zmq.POLLIN) | ||||
retries = RETRIES | ||||
while True: | ||||
socket.send_string(json.dumps(data)) | ||||
socks = dict(poll.poll(REQUEST_TIMEOUT)) | ||||
if socks.get(socket) == zmq.POLLIN: | ||||
reply = socket.recv_string() | ||||
if reply == 'ok': | ||||
print(('Server replied (%s)' % reply)) | ||||
break | ||||
else: | ||||
print(('Malformed reply from server: %s' % reply)) | ||||
else: | ||||
print(('No response from server, retries left {}'.format(retries))) | ||||
socket.setsockopt(zmq.LINGER, 0) | ||||
socket.close() | ||||
poll.unregister(socket) | ||||
retries -= 1 | ||||
if retries == 0: | ||||
print('Server seems to be offline...') | ||||
socket = context.socket(zmq.REQ) | ||||
socket.connect(SERVER_ENDPOINT) | ||||
poll.register(socket, zmq.POLLIN) | ||||
break | ||||
# Create new connection | ||||
socket = context.socket(zmq.REQ) | ||||
socket.connect(SERVER_ENDPOINT) | ||||
poll.register(socket, zmq.POLLIN) | ||||
def main(realtime, code, date=None, interval=30): | ||||
''' | ||||
Simulate data to be sended to server | ||||
''' | ||||
x = 0 | ||||
while True: | ||||
if realtime: | ||||
dt = datetime.now() | ||||
else: | ||||
dt = date | ||||
print(('Sending {} - {}'.format(code, dt))) | ||||
dato = { | ||||
'time': (datetime.utcnow()-datetime(1970,1,1)).total_seconds(), | ||||
'metadata': { | ||||
'localtime': True, | ||||
'type': 'image', | ||||
}, | ||||
'code': code, | ||||
'data': base64.b64encode(bytearray(open(filenames[x], 'rb').read())).decode(), | ||||
'plot': 'Summary' | ||||
} | ||||
send(dato) | ||||
if realtime: | ||||
time.sleep(interval) | ||||
else: | ||||
dt = dt + timedelta(seconds=interval) | ||||
time.sleep(2) | ||||
x += 1 | ||||
if x == 3: | ||||
x = 0 | ||||
if __name__ == '__main__': | ||||
parser = argparse.ArgumentParser(description='''This is a Client for | ||||
realtime app''') | ||||
parser.add_argument('--date', action='store', default=None, | ||||
help='format: 2018/02/13 12:23:00') | ||||
parser.add_argument('-r', action='store_true', dest='realtime', | ||||
default=None) | ||||
parser.add_argument('-c', action='store', dest='code', default='300') | ||||
parser.add_argument('-i', action='store', dest='interval', type=int, | ||||
default=120) | ||||
results = parser.parse_args() | ||||
if not results.realtime: | ||||
try: | ||||
results.date = datetime.strptime(results.date, '%Y/%m/%d %H:%M:%S') | ||||
except: | ||||
raise NameError('''You must specify a date (--date) | ||||
for non-realtime experiment''') | ||||
main(results.realtime, results.code, results.date, results.interval) | ||||