From ebd48ee27329a256c004e3adf72f66819019f072 Mon Sep 17 00:00:00 2001
From: Patrick Godwin <patrick.godwin@ligo.org>
Date: Tue, 23 May 2017 08:59:37 -0700
Subject: [PATCH] gstlal_idq_trigger_gen: added toggle for web services, fixed
 verbose output when shutting down pipeline

---
 gstlal-ugly/bin/gstlal_idq_trigger_gen | 116 +++++++++++++------------
 1 file changed, 60 insertions(+), 56 deletions(-)

diff --git a/gstlal-ugly/bin/gstlal_idq_trigger_gen b/gstlal-ugly/bin/gstlal_idq_trigger_gen
index 720bb5769c..74e6deea05 100755
--- a/gstlal-ugly/bin/gstlal_idq_trigger_gen
+++ b/gstlal-ugly/bin/gstlal_idq_trigger_gen
@@ -152,6 +152,7 @@ def parse_command_line():
 	parser.add_option("--out-path", metavar = "path", default = ".", help = "Write to this path. Default = .")
 	parser.add_option("--description", metavar = "string", default = "GSTLAL_IDQ_TRIGGERS", help = "Set the filename description in which to save the output.")
 	parser.add_option("--cadence", type = "int", default = 32, help = "Rate at which to write trigger files to disk. Default = 32 seconds.")
+	parser.add_option("--disable-web-service", action = "store_true", help = "If set, disables web service that allows monitoring of PSDS of aux channels.")
 	parser.add_option("-v", "--verbose", action = "store_true", help = "Be verbose.")
 
 	#
@@ -193,7 +194,8 @@ class MultiChannelHandler(simplehandler.Handler):
 		
 		# set up bottle routes for spectra by each whitener
 		self.psds = {}
-		bottle.route("/psds.xml")(self.web_get_psd_xml)
+		if not options.disable_web_service:
+			bottle.route("/psds.xml")(self.web_get_psd_xml)
 
 		super(MultiChannelHandler, self).__init__(*args, **kwargs)
 
@@ -422,50 +424,51 @@ channels = data_source_info.channel_dict.keys()
 # dictionary of basis parameters keyed by ifo, rate
 basis_params = {}
 
-#
-# create a new, empty, Bottle application and make it the current
-# default, then start http server to serve it up
-#
-
-bottle.default_app.push()
-# uncomment the next line to show tracebacks when something fails
-# in the web server
-#bottle.app().catchall = False
-import base64, uuid	# FIXME:  don't import when the uniquification scheme is fixed
-httpservers = httpinterface.HTTPServers(
-	# FIXME:  either switch to using avahi's native name
-	# uniquification system or adopt a naturally unique naming
-	# scheme (e.g., include a search identifier and job
-	# number).
-	service_name = "gstlal_idq (%s)" % base64.urlsafe_b64encode(uuid.uuid4().bytes),
-	service_properties = {},
-	verbose = options.verbose
-)
+if not options.disable_web_service:	
+	#
+	# create a new, empty, Bottle application and make it the current
+	# default, then start http server to serve it up
+	#
 
-#
-# Set up a registry of the resources that this job provides
-#
+	bottle.default_app.push()
+	# uncomment the next line to show tracebacks when something fails
+	# in the web server
+	#bottle.app().catchall = False
+	import base64, uuid	# FIXME:  don't import when the uniquification scheme is fixed
+	httpservers = httpinterface.HTTPServers(
+		# FIXME:  either switch to using avahi's native name
+		# uniquification system or adopt a naturally unique naming
+		# scheme (e.g., include a search identifier and job
+		# number).
+		service_name = "gstlal_idq (%s)" % base64.urlsafe_b64encode(uuid.uuid4().bytes),
+		service_properties = {},
+		verbose = options.verbose
+	)
 
-@bottle.route("/")
-@bottle.route("/index.html")
-def index(channel_list = channels):
-	# get the host and port to report in the links from the
-	# request we've received so that the URLs contain the IP
-	# address by which client has contacted us
-	netloc = bottle.request.urlparts[1]
-	server_address = "http://%s" % netloc
-	yield "<html><body>\n<h3>%s %s</h3>\n<p>\n" % (netloc, " ".join(sorted(channel_list)))
-	for route in sorted(bottle.default_app().routes, key = lambda route: route.rule):
-		# don't create links back to this page
-		if route.rule in ("/", "/index.html"):
-			continue
-		# only create links for GET methods
-		if route.method != "GET":
-			continue
-		yield "<a href=\"%s%s\">%s</a><br>\n" % (server_address, route.rule, route.rule)
-	yield "</p>\n</body></html>"
-# FIXME:  get service-discovery working, then don't do this
-open("registry.txt", "w").write("http://%s:%s/\n" % (socket.gethostname(), httpservers[0][0].port))
+	#
+	# Set up a registry of the resources that this job provides
+	#
+	
+	@bottle.route("/")
+	@bottle.route("/index.html")
+	def index(channel_list = channels):
+		# get the host and port to report in the links from the
+		# request we've received so that the URLs contain the IP
+		# address by which client has contacted us
+		netloc = bottle.request.urlparts[1]
+		server_address = "http://%s" % netloc
+		yield "<html><body>\n<h3>%s %s</h3>\n<p>\n" % (netloc, " ".join(sorted(channel_list)))
+		for route in sorted(bottle.default_app().routes, key = lambda route: route.rule):
+			# don't create links back to this page
+			if route.rule in ("/", "/index.html"):
+				continue
+			# only create links for GET methods
+			if route.method != "GET":
+				continue
+			yield "<a href=\"%s%s\">%s</a><br>\n" % (server_address, route.rule, route.rule)
+		yield "</p>\n</body></html>"
+	# FIXME:  get service-discovery working, then don't do this
+	open("registry.txt", "w").write("http://%s:%s/\n" % (socket.gethostname(), httpservers[0][0].port))
 
 #
 # building the event loop and pipeline
@@ -522,9 +525,6 @@ for channel in channels:
 			thishead = pipeparts.mklatency(pipeline, thishead, name = 'stage5_afterTrigger_%s_%s' % (str(rate).zfill(5), channel))
 		src[(channel, rate)] = thishead	
 
-if options.verbose:
-	print >>sys.stderr, "done."
-
 if options.verbose:
 	print >>sys.stderr, "attaching appsinks to pipeline..."
 appsync = LinkedAppSync(appsink_new_buffer = handler.bufhandler)
@@ -544,22 +544,26 @@ if data_source_info.data_source not in ("lvshm", "framexmit"):# what about nds o
 # run
 if pipeline.set_state(Gst.State.PLAYING) == Gst.StateChangeReturn.FAILURE:
 	raise RuntimeError("pipeline failed to enter PLAYING state")
-mainloop.run()
 
 if options.verbose:
 	print >>sys.stderr, "running pipeline..."
 
+mainloop.run()
 
-#
-# Shutdown the web interface servers and garbage collect the Bottle
-# app.  This should release the references the Bottle app's routes
-# hold to the pipeline's data (like template banks and so on).
-#
-
-
-del httpservers
-bottle.default_app.pop()
+if options.verbose:
+	print >>sys.stderr, "shutting down pipeline..."
 
+if not options.disable_web_service:
+	#
+	# Shutdown the web interface servers and garbage collect the Bottle
+	# app.  This should release the references the Bottle app's routes
+	# hold to the pipeline's data (like template banks and so on).
+	#
+	
+	
+	del httpservers
+	bottle.default_app.pop()
+	
 
 #
 # Set pipeline state to NULL and garbage collect the handler
-- 
GitLab