##// END OF EJS Templates
Docker working
Docker working

File last commit:

r1:f2324aa7e45d
r1:f2324aa7e45d
Show More
server.py
94 lines | 2.9 KiB | text/x-python | PythonLexer
import os
import sys
import simplejson
from datetime import datetime
import zmq
import redis
import asgi_redis
import mongoengine
sys.path.append('/app')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "realtime.settings")
from plotter.models import Experiment, Data
host_mongo = os.environ.get('HOST_MONGO', 'localhost')
mongoengine.connect('dbplots', host=host_mongo, port=27017)
host_redis = os.environ.get('HOST_REDIS', 'localhost')
channel = asgi_redis.RedisChannelLayer(hosts=[(host_redis, 6379)])
context = zmq.Context()
receiver = context.socket(zmq.SUB)
receiver.bind("tcp://0.0.0.0:4444")
receiver.setsockopt(zmq.SUBSCRIBE, '')
def update_db(buffer):
dt = datetime.utcfromtimestamp(buffer['time'])
exp = Experiment.objects(code=buffer['exp_code'], date=dt.date()).first()
if exp is None:
exp = Experiment(
code=buffer['exp_code'],
date=dt.date(),
yrange = buffer['yrange'],
xrange = buffer['xrange'],
interval = buffer['interval'],
localtime = buffer['localtime'],
name = buffer['name'],
)
exp.save()
data = Data.objects(experiment=exp, time=buffer['time']).first()
if data is None:
data = Data(
experiment = exp,
time = buffer['time'],
data = buffer['data']
).save()
new = True
else:
data.data = buffer['data']
data.save()
new = False
return new
print 'Starting...'
while True:
buffer = receiver.recv_json()
if 'xrange' not in buffer:
buffer['xrange'] = []
if 'name' not in buffer:
buffer['name'] = 'Experiment'
if update_db(buffer):
dum = buffer.copy()
dum['time'] = [buffer['time']]
dum['rti'] = buffer['data']['rti']
# dum['noise'] = buffer['data']['noise']
dum.pop('data')
code = dum.pop('exp_code')
channel.send_group(u'{}_rti'.format(code), {'text': simplejson.dumps(dum, ignore_nan=True)})
print 'Sending...{} - {} bytes'.format('rti', len(str(dum)))
# dum = buffer.copy()
# dum['time'] = [buffer['time']]
# dum['rti'] = buffer['data']['rti']
# dum['spc'] = buffer['data']['spc']
# dum['noise'] = buffer['data']['noise']
# dum.pop('data')
# code = dum.pop('exp_code')
# channel.send_group(u'{}_spc'.format(code), {'text': simplejson.dumps(dum, ignore_nan=True)})
# print 'Sending...{} - {} bytes'.format('spc', len(str(dum)))
# dum = buffer.copy()
# dum['time'] = [buffer['time']]
# dum['noise'] = [[x] for x in buffer['data']['noise']]
# dum.pop('data')
# code = dum.pop('exp_code')
# channel.send_group(u'{}_noise'.format(code), {'text': simplejson.dumps(dum, ignore_nan=True)})
# print 'Sending...{} - {} bytes'.format('noise', len(str(dum)))