diff --git a/gstlal-ugly/bin/gstlal_etg b/gstlal-ugly/bin/gstlal_etg index 5bc0bec10d3f78adf95c0ec7b6f627b54bcfe9e3..fc1a769e3fbd88b4cba60725a1ecaed6760500d6 100755 --- a/gstlal-ugly/bin/gstlal_etg +++ b/gstlal-ugly/bin/gstlal_etg @@ -27,6 +27,7 @@ from optparse import OptionParser from collections import deque +import json import os import sys import socket @@ -57,7 +58,6 @@ from gstlal import aggregator from gstlal import idq_aggregator from gstlal import httpinterface from gstlal import bottle -from glue.ligolw import utils as ligolw_utils from glue import iterutils from glue.ligolw import ligolw from glue.ligolw import utils as ligolw_utils @@ -204,7 +204,7 @@ class MultiChannelHandler(simplehandler.Handler): # set up ETG bottle related properties self.etg_event = deque(maxlen = 20000) - self.last_event_time = None + self.etg_event_time = None # set up bottle routes for PSDs and extracted ETG data self.psds = {} @@ -251,12 +251,12 @@ class MultiChannelHandler(simplehandler.Handler): channel, rate = sink_dict[elem] # push new etg event to queue if done processing current timestamp - if self.last_event_time is None: - self.last_event_time = buftime - if self.last_event_time < buftime: - self.etg_data.append(list(self.etg_event)) + if self.etg_event_time is None: + self.etg_event_time = buftime + if self.etg_event_time < buftime: + self.etg_data.append({self.etg_event_time: list(self.etg_event)}) self.etg_event.clear() - self.last_event_time = buftime + self.etg_event_time = buftime # set save times appropriately if self.last_save_time is None: @@ -460,14 +460,17 @@ class MultiChannelHandler(simplehandler.Handler): return outstr def web_get_etg_data(self): + header = {'Content-type': 'application/json'} # if queue is empty, send appropriate response if not self.etg_data: - return bottle.HTTPResponse(status = 204, body = "No Response") + status = 204 + body = json.dumps({'error': "No Content"}) # else, get etg data and send as JSON else: + status = 200 with self.lock: - response = json.encode(self.etg_data.popleft()) - return response + body = json.dumps(self.etg_data.popleft()) + return bottle.HTTPResponse(status = status, headers = header, body = body) class LinkedAppSync(pipeparts.AppSync): def __init__(self, appsink_new_buffer, sink_dict = {}):