##// END OF EJS Templates
Add static images and fix template
Add static images and fix template

File last commit:

r45:08ba8fe1a748
r45:08ba8fe1a748
Show More
server.py
172 lines | 4.7 KiB | text/x-python | PythonLexer
Developer
New server with req-rep and thread for updating status
r10 #!/usr/bin/python
# -*- coding: UTF-8 -*-
First version RTI, Spectra, Noise + Docker
r0 import os
import sys
Reorganize models, smaller docker, others
r2 import json
First version RTI, Spectra, Noise + Docker
r0 import simplejson
from datetime import datetime
Developer
New server with req-rep and thread for updating status
r10 import time
First version RTI, Spectra, Noise + Docker
r0 import zmq
import mongoengine
Juan C. Espinoza
Better navigation, sidebar, update jroplots #TODO OverJRO
r39 import django
Developer
New server with req-rep and thread for updating status
r10 from threading import Thread
First version RTI, Spectra, Noise + Docker
r0
Juan C. Espinoza
Better test client & server
r17 sys.path.append(os.environ.get('APP_DIR', '../'))
First version RTI, Spectra, Noise + Docker
r0 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "realtime.settings")
Juan C. Espinoza
Better navigation, sidebar, update jroplots #TODO OverJRO
r39 django.setup()
First version RTI, Spectra, Noise + Docker
r0
Juan C. Espinoza
Test Version
r22 from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData
Juan C. Espinoza
Docker working
r1
host_mongo = os.environ.get('HOST_MONGO', 'localhost')
mongoengine.connect('dbplots', host=host_mongo, port=27017)
Juan C. Espinoza
Test Version
r22 import channels.layers
from asgiref.sync import async_to_sync
channel = channels.layers.get_channel_layer()
Developer
New server with req-rep and thread for updating status
r10
Reorganize models, smaller docker, others
r2 def loaddata():
print('Loading Experiments...')
Juan C. Espinoza
Better test client & server
r17 if os.environ.get('APP_DIR', None) is not None:
file_exp = os.path.join(os.environ.get('APP_DIR'), 'scripts', 'experiments.json')
else:
file_exp = './experiments.json'
for tup in json.load(open(file_exp)):
Juan C. Espinoza
Test Version
r22 print(tup)
Reorganize models, smaller docker, others
r2 exp = Experiment.objects(code=tup['code']).modify(
Developer
New server with req-rep and thread for updating status
r10 upsert=True, # To add a new row
Reorganize models, smaller docker, others
r2 new=True,
set__code=tup['code'],
set__name=tup['name'],
First version RTI, Spectra, Noise + Docker
r0 )
exp.save()
Reorganize models, smaller docker, others
r2
Developer
New server with req-rep and thread for updating status
r10 #============== funcion para modificar datos en la tabla ==============
Reorganize models, smaller docker, others
r2 def update(buffer):
Add static images and fix template
r45 dt = datetime.fromtimestamp(buffer['time'])
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 interval = buffer['metadata'].pop('interval')
Juan C. Espinoza
Better navigation, sidebar, update jroplots #TODO OverJRO
r39 tag = buffer['metadata'].pop('tag') if 'tag' in buffer['metadata'] else ''
Juan C. Espinoza
Test version ready
r27 exp = Experiment.objects.get(code=buffer['code'])
Juan C. Espinoza
Test Version
r22
detail = ExpDetail.objects(experiment=exp, date=dt.date()).modify(
upsert=True,
new=True,
set__experiment=exp,
Reorganize models, smaller docker, others
r2 set__date=dt.date(),
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 set__last_time = buffer['time'],
Juan C. Espinoza
Better navigation, sidebar, update jroplots #TODO OverJRO
r39 set__interval = interval,
set__tag = tag,
Juan C. Espinoza
Test Version
r22 )
Juan C. Espinoza
Test version ready
r27 label = buffer['plot'].replace(' ', '_').lower()
plot = PlotMeta.objects(exp_detail=detail, plot=label).modify(
Juan C. Espinoza
Test Version
r22 upsert=True,
new=True,
set__metadata = buffer['metadata']
Reorganize models, smaller docker, others
r2 )
Juan C. Espinoza
Test Version
r22 #plot.save()
First version RTI, Spectra, Noise + Docker
r0
Juan C. Espinoza
Test Version
r22 data = PlotData.objects(plot=plot, time=buffer['time']).modify(
Developer
New server with req-rep and thread for updating status
r10 upsert=True, # To add a new row
Reorganize models, smaller docker, others
r2 new=True,
set__time = buffer['time'],
set__data = buffer['data']
)
First version RTI, Spectra, Noise + Docker
r0
Juan C. Espinoza
Test Version
r22 #data.save()
First version RTI, Spectra, Noise + Docker
r0
Juan C. Espinoza
server & client OK
r19 if datetime.now().date() == dt.date():
return True
return False
# Function that is checking the state of my clients every 30s
Developer
New server with req-rep and thread for updating status
r10 def check_times():
while True:
Juan C. Espinoza
server & client OK
r19 dt = datetime.now()
Juan C. Espinoza
Test Version
r22 exps = ExpDetail.objects(date=dt.date())
for detail in exps:
code = detail.experiment.code
plot = detail.plots()[0]
Juan C. Espinoza
Fix utc time handling
r44 t = time.time()
Developer
New server with req-rep and thread for updating status
r10
Juan C. Espinoza
Test Version
r22 message = {
'code': code,
Juan C. Espinoza
Fix utc time handling
r44 'time': detail['last_time']
Juan C. Espinoza
Test Version
r22 }
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 if (t-detail['last_time']) > 6*detail['interval']:
Juan C. Espinoza
Test Version
r22 value = 'danger'
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 elif (t-detail['last_time']) > 3*detail['interval']:
Juan C. Espinoza
Test Version
r22 value = 'warning'
Developer
New server with req-rep and thread for updating status
r10 else:
Juan C. Espinoza
Test Version
r22 value = 'success'
Juan C. Espinoza
Test version ready
r27 print(('{} {} {} {} {}'.format(code, t, detail['last_time'], (t-detail['last_time']), value)))
Juan C. Espinoza
Test Version
r22 message['value'] = value
async_to_sync(channel.group_send)(
'main',
{
'type': 'zmq_message',
'message': json.dumps(message)
}
)
Juan C. Espinoza
Test version ready
r27 time.sleep(60)
First version RTI, Spectra, Noise + Docker
r0
Reorganize models, smaller docker, others
r2 def main():
print('Starting ZMQ server...')
Juan C. Espinoza
server & client OK
r19 context = zmq.Context()
receiver = context.socket(zmq.REP)
receiver.bind("tcp://0.0.0.0:4444")
Developer
New server with req-rep and thread for updating status
r10 t = Thread(target=check_times)
t.start()
Juan C. Espinoza
Better test client & server
r17 while True:
Developer
New server with req-rep and thread for updating status
r10
Add static images and fix template
r45 try:
buffer = receiver.recv_json()
except:
continue
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 if not isinstance(buffer, dict):
print('Invalid data received: {}').format(str(buffer))
continue
Juan C. Espinoza
server & client OK
r19 if not update(buffer):
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 print('Updating {} for code {}'.format(
buffer['plot'],
buffer['code']
))
else:
buffer['time'] = [buffer['time']]
group = '{}_{}'.format(
buffer['code'],
buffer['plot'].replace(' ', '_').lower()
)
async_to_sync(channel.group_send)(
group,
{
'type': 'zmq_message',
'message': simplejson.dumps(buffer, ignore_nan=True)
}
Juan C. Espinoza
Test version ready
r27 )
Juan C. Espinoza
Work with static images, fix styles, fix default values in forms
r36 print('Sending to group {}_{} - {} bytes'.format(
buffer['code'],
buffer['plot'].replace(' ', '_').lower(),
len(str(buffer)))
)
Juan C. Espinoza
Better test client & server
r17 receiver.send_string('ok')
Developer
New server with req-rep and thread for updating status
r10
receiver.close()
context.term()
First version RTI, Spectra, Noise + Docker
r0
Reorganize models, smaller docker, others
r2 if __name__=='__main__':
loaddata()
Fix bugs
r8 main()