|
|
#!/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)
|
|
|
|