##// END OF EJS Templates
Add timezone to settings
Add timezone to settings

File last commit:

r17:9875b8044b93
r18:a96da3fab2d1
Show More
client.py
101 lines | 3.3 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
from threading import Thread
import argparse
REQUEST_TIMEOUT = 15000
REQUEST_RETRIES = 10
SERVER_ENDPOINT = 'tcp://localhost:4444'
def send(context, socket, poll, dato):
retries_left = REQUEST_RETRIES
while True:
socket.send_json(dato)
socks = dict(poll.poll(REQUEST_TIMEOUT))
if socks.get(socket) == zmq.POLLIN:
reply = socket.recv_string()
if not reply:
break
if reply == 'ok':
print('I: Server replied OK (%s)' % reply)
break
else:
print('E: Malformed reply from server: %s' % reply)
break
else:
print('W: No response from server, retry {}'.format(REQUEST_RETRIES-retries_left))
time.sleep(2)
socket.setsockopt(zmq.LINGER, 0)
socket.close()
poll.unregister(socket)
retries_left -= 1
if retries_left == 0:
print('E: Server seems to be offline, abandoning')
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):
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect (SERVER_ENDPOINT)
poll = zmq.Poller()
poll.register(socket, zmq.POLLIN)
if realtime:
dt = datetime.now()
else:
dt = date
while True:
print('Sending {} - {}'.format(code, dt))
dato = {
'time': time.mktime(dt.timetuple()),
'yrange': np.arange(100).tolist(),
'xrange': np.arange(-30, 30).tolist(),
'localtime': True,
'interval': interval,
'exp_code': code,
'data': {
'noise': np.round(np.random.rand(8) + np.array([10,11,12,13,14,15,16,17]), 2).tolist(),
'rti': np.round(np.random.rand(8, 100)*5 + 10, 2).tolist(),
'spc': np.round(np.random.rand(8, 60, 100)*5 + 10, 2).tolist(),
}
}
dt = dt + timedelta(seconds=interval)
t = Thread(target=send, args=(context, socket, poll, dato))
t.start()
if realtime:
time.sleep(interval)
else:
time.sleep(5)
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='170')
parser.add_argument('-i', action='store', dest='interval', type=int, default=30)
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)