##// END OF EJS Templates
Update styles and add reports views
Update styles and add reports views

File last commit:

r36:18bc7709d51a
r47:39718a68f23c
Show More
client2.py
115 lines | 3.4 KiB | text/x-python | PythonLexer
#!/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)