Skip to content

Commit

Permalink
Still can't stop the gosh darn server cleanly! In progress
Browse files Browse the repository at this point in the history
  • Loading branch information
sadielbartholomew committed Feb 25, 2019
1 parent e821884 commit 90bb4a7
Showing 1 changed file with 38 additions and 30 deletions.
68 changes: 38 additions & 30 deletions lib/python/rosie/ws.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@
"""

import psutil
import signal
import os
from tornado.process import fork_processes

import jinja2
import json
import socket
Expand All @@ -58,8 +63,7 @@ class RosieDiscoServiceApplication(tornado.web.Application):
TITLE = "Rosie Suites Discovery"

def __init__(self, *args, **kwargs):
self._ioloop = None
self.httpserver = None
self.stopping = False

self.props = {}
rose_conf = ResourceLocator.default().get_conf()
Expand Down Expand Up @@ -102,9 +106,9 @@ def __init__(self, *args, **kwargs):
prefix_class_args)
hello_handler = (service_root + key + r"/hello/?$",
HelloHandler, prefix_class_args)
search_handler = (service_root + key + r"/search?(.*)",
search_handler = (service_root + key + r"/search(.*)",
SearchHandler, prefix_class_args)
query_handler = (service_root + key + r"/query?(.*)",
query_handler = (service_root + key + r"/query(.*)",
QueryHandler, prefix_class_args)
prefix_handlers.extend(
[handler, hello_handler, search_handler, query_handler])
Expand All @@ -119,16 +123,14 @@ def __init__(self, *args, **kwargs):
super(
RosieDiscoServiceApplication, self).__init__(handlers, **settings)

#### def start(self, port):
#### self.httpserver = tornado.httpserver.HTTPServer(self)
#### self.httpserver.listen(port)
#### self._ioloop = tornado.ioloop.IOLoop.current()
#### self._ioloop.start()
def signal_handler(self, signum, frame):
self.stopping = True

#### def stop(self):
#### self._ioloop.add_callback(self._ioloop.stop)
#### self._ioloop.stop()
#### self.httpserver.stop()
def stop_application(self):
if self.stopping:
#server.stop()
tornado.ioloop.IOLoop.instance().stop()
print("YAAAAAAY")


class RosieDiscoServiceRoot(tornado.web.RequestHandler):
Expand Down Expand Up @@ -175,6 +177,7 @@ def initialize(self, props, prefix, db_url, root_service_url):
@tornado.web.addslash
def get(self, *_):
"""Provide the index page."""

try:
self._render()
except (KeyError, AttributeError, jinja2.exceptions.TemplateError):
Expand Down Expand Up @@ -301,33 +304,38 @@ def _query_parse_string(q_str):


def main():
arg_msg = "ad-hoc web service server"
arg_msg_comp = "ad-hoc web service server"
# No value req for Boolean options e.g. --start equivalent to --start=True
define("start", type=bool, default=False,
help="start %s (on specified port, else on port %s)" % (
arg_msg, DEFAULT_PORT))
arg_msg_comp, DEFAULT_PORT))
define("port", type=int, default=DEFAULT_PORT, help="port to listen on")
define("stop", type=bool, default=False, help="stop %s" % arg_msg)
define("stop", type=bool, default=False, help="stop %s" % arg_msg_comp)
define("non-interactive", type=bool, default=False,
help="to stop %s w/o prompting" % arg_msg)

help="to stop %s w/o prompting" % arg_msg_comp)
parse_command_line()

httpserver = tornado.httpserver.HTTPServer(app)
info_msg_end = " the server providing the Rosie Disco web application."
if options.start:
#### app.start(options.port)
httpserver.listen(options.port)
try:
tornado.ioloop.IOLoop.current().start()
except KeyboardInterrupt:
tornado.ioloop.IOLoop.current().stop()
elif (options.stop and (options.non_interactive or
input("Stop server? y/n (default=n)")) == "y"):
#### app.stop()
pass #### TODO; just use KeyboardInterrupt for now.

signal.signal(signal.SIGINT, app.signal_handler)
signal.signal(signal.SIGTERM, app.signal_handler)
app.listen(options.port)

tornado.ioloop.PeriodicCallback(app.stop_application, 5).start()
tornado.ioloop.IOLoop.instance().start()
#signal.pause()

print("Started" + info_msg_end)
elif options.stop and (options.non_interactive or
input("Stop server? y/n (default=n)") == "y"):
#app.stop_application()
app.stopping = True
#app.stop_application()

print("Stopped" + info_msg_end) ## OR NOT, STILL DEBUGGING ...

app = RosieDiscoServiceApplication() # Tornado app to run on some server.
app = RosieDiscoServiceApplication()
if __name__ == "__main__": # Run on an ad-hoc server in a test environment.
main()
else: # Run as a WSGI application in a system service environment.
Expand Down

0 comments on commit 90bb4a7

Please sign in to comment.