From dce6ff120bf7653b9ccdc8ae6709b11633e57ee1 2018-06-06 05:55:06 From: Juan C. Espinoza Date: 2018-06-06 05:55:06 Subject: [PATCH] server & client OK --- diff --git a/scripts/client.py b/scripts/client.py index e1a5257..d95c9bc 100644 --- a/scripts/client.py +++ b/scripts/client.py @@ -14,8 +14,17 @@ REQUEST_RETRIES = 10 SERVER_ENDPOINT = 'tcp://localhost:4444' def send(context, socket, poll, dato): - + ''' + Function to send data to server + ''' retries_left = REQUEST_RETRIES + if context.closed: + context = zmq.Context() + if socket.closed: + socket = context.socket(zmq.REQ) + socket.connect (SERVER_ENDPOINT) + poll = zmq.Poller() + poll.register(socket, zmq.POLLIN) while True: socket.send_json(dato) @@ -25,20 +34,20 @@ def send(context, socket, poll, dato): if not reply: break if reply == 'ok': - print('I: Server replied OK (%s)' % reply) + print('Server replied (%s)' % reply) break else: - print('E: Malformed reply from server: %s' % reply) + print('Malformed reply from server: %s' % reply) break else: - print('W: No response from server, retry {}'.format(REQUEST_RETRIES-retries_left)) - time.sleep(2) + print('No response from server, retry {}'.format(REQUEST_RETRIES-retries_left+1)) + time.sleep(1) 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') + print('Server seems to be offline...') break # Create new connection socket = context.socket(zmq.REQ) @@ -46,7 +55,9 @@ def send(context, socket, poll, dato): poll.register(socket, zmq.POLLIN) def main(realtime, code, date=None, interval=30): - + ''' + Simulate data to be sended to server + ''' context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect (SERVER_ENDPOINT) diff --git a/scripts/server.py b/scripts/server.py index 6f16cf3..2e7d970 100644 --- a/scripts/server.py +++ b/scripts/server.py @@ -23,11 +23,6 @@ mongoengine.connect('dbplots', host=host_mongo, port=27017) host_redis = os.environ.get('HOST_REDIS', 'localhost') channel = asgi_redis.RedisChannelLayer(hosts=[(host_redis, 6379)]) -#========================== Conf. ZeroMQ =================== -context = zmq.Context() -receiver = context.socket(zmq.REP) -receiver.bind("tcp://0.0.0.0:4444") -#============================== end ======================== def loaddata(): print('Loading Experiments...') @@ -48,6 +43,7 @@ def loaddata(): #============== funcion para modificar datos en la tabla ============== def update(buffer): dt = datetime.utcfromtimestamp(buffer['time']) + print('Updating code={} date={} {}'.format(buffer['exp_code'], dt, datetime.now())) exp = ExpMeta.objects(code=buffer['exp_code'], date=dt.date()).modify( upsert=True, # To add a new row new=True, @@ -71,12 +67,16 @@ def update(buffer): data.save() - return exp.id -# Function that is checking the state of my clients every 20s + if datetime.now().date() == dt.date(): + return True + + return False + +# Function that is checking the state of my clients every 30s def check_times(): while True: - dt = datetime.utcnow() + dt = datetime.now() exps = ExpMeta.objects(date=dt.date()) for exp in exps: @@ -99,11 +99,13 @@ def check_times(): else: channel.send_group(u'main', {'text': json.dumps({'code': exp['code'], 'value': 'Online', 'time': data_time})}) print ('{} {} {} {} {}'.format(exp.code, t, data['time'], (t-data['time']), 'online')) - time.sleep(20) + time.sleep(30) def main(): print('Starting ZMQ server...') - + context = zmq.Context() + receiver = context.socket(zmq.REP) + receiver.bind("tcp://0.0.0.0:4444") t = Thread(target=check_times) t.start() @@ -118,7 +120,9 @@ def main(): print('*******************') print(buffer) continue - code = update(buffer) + if not update(buffer): + receiver.send_string('ok') + continue print("==================================") for plot in buffer['data']: dum = buffer.copy() @@ -133,9 +137,10 @@ def main(): dum[plot] = buffer['data'][plot] dum.pop('data') exp_code = dum.pop('exp_code') - #code = dum.pop('exp_code') - - channel.send_group(u'{}_{}'.format(exp_code, plot), {'text': simplejson.dumps(dum, ignore_nan=True)}) + channel.send_group( + u'{}_{}'.format(exp_code, plot), + {'text': simplejson.dumps(dum, ignore_nan=True)} + ) print('Sending to group {}_{} - {} bytes'.format(exp_code, plot, len(str(dum)))) receiver.send_string('ok')