Added api server shutdown function, and exposed on HTTP as /stop_api url
This will stop the running app gracefully - processing current api calls then shutting the werkzueg (run) listening server. Have also called this from the cleanup placeholder. I'm not sure this is what is intended by cleanup def. By which I mean there may be a thread left running with no app within - not sure how to check this just yet. tidied excessive logging.
This commit is contained in:
parent
dc1aebf391
commit
ab2cf1bbfe
@ -41,6 +41,7 @@ class ApiServerSuperWrap(RPC):
|
|||||||
"""
|
"""
|
||||||
app.register_error_handler(404, self.page_not_found)
|
app.register_error_handler(404, self.page_not_found)
|
||||||
app.add_url_rule('/', 'hello', view_func=self.hello, methods=['GET'])
|
app.add_url_rule('/', 'hello', view_func=self.hello, methods=['GET'])
|
||||||
|
app.add_url_rule('/stop_api', 'stop_api', view_func=self.stop_api, methods=['GET'])
|
||||||
|
|
||||||
def register_rest_rpc_urls(self):
|
def register_rest_rpc_urls(self):
|
||||||
"""
|
"""
|
||||||
@ -77,10 +78,6 @@ class ApiServerSuperWrap(RPC):
|
|||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Api server failed to start, exception message is:")
|
logger.exception("Api server failed to start, exception message is:")
|
||||||
|
|
||||||
def cleanup(self) -> None:
|
|
||||||
# TODO: implement me
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
# TODO: implement me
|
# TODO: implement me
|
||||||
@ -90,11 +87,43 @@ class ApiServerSuperWrap(RPC):
|
|||||||
# TODO: implement me
|
# TODO: implement me
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def shutdown_api_server(self):
|
||||||
|
"""
|
||||||
|
Stop the running flask application
|
||||||
|
|
||||||
|
Records the shutdown in logger.info
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
func = request.environ.get('werkzeug.server.shutdown')
|
||||||
|
if func is None:
|
||||||
|
raise RuntimeError('Not running the Flask Werkzeug Server')
|
||||||
|
if func is not None:
|
||||||
|
logger.info('Stopping the Local Rest Server')
|
||||||
|
func()
|
||||||
|
return
|
||||||
|
|
||||||
|
def cleanup(self) -> None:
|
||||||
|
"""
|
||||||
|
Stops the running application server
|
||||||
|
|
||||||
|
Does not stop the thread,this may not be the desired outcome of cleanup. TBC
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.shutdown_api_server()
|
||||||
|
# def cleanup(self) -> None:
|
||||||
|
# # TODO: implement me
|
||||||
|
# raise NotImplementedError
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Define the application methods here, called by app.add_url_rule
|
Define the application methods here, called by app.add_url_rule
|
||||||
each Telegram command should have a like local substitute
|
each Telegram command should have a like local substitute
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def stop_api(self):
|
||||||
|
""" For calling shutdown_api_server over via api server HTTP"""
|
||||||
|
self.shutdown_api_server()
|
||||||
|
return 'Api Server shutting down... '
|
||||||
|
|
||||||
def page_not_found(self, error):
|
def page_not_found(self, error):
|
||||||
# Return "404 not found", 404.
|
# Return "404 not found", 404.
|
||||||
return jsonify({'status': 'error',
|
return jsonify({'status': 'error',
|
||||||
@ -110,11 +139,16 @@ class ApiServerSuperWrap(RPC):
|
|||||||
:return: index.html
|
:return: index.html
|
||||||
"""
|
"""
|
||||||
rest_cmds = 'Commands implemented: <br>' \
|
rest_cmds = 'Commands implemented: <br>' \
|
||||||
'<a href=/daily?timescale=7>/daily?timescale=7</a>' \
|
'<a href=/daily?timescale=7>Show 7 days of stats</a>' \
|
||||||
'<br>' \
|
'<br>' \
|
||||||
'<a href=/stop>/stop</a>' \
|
'<a href=/stop>Stop the Trade thread</a>' \
|
||||||
'<br>' \
|
'<br>' \
|
||||||
'<a href=/start>/start</a>'
|
'<a href=/start>Start the Traded thread</a>' \
|
||||||
|
'<br>' \
|
||||||
|
'<a href=/paypal> 404 page does not exist</a>' \
|
||||||
|
'<br>' \
|
||||||
|
'<br>' \
|
||||||
|
'<a href=/stop_api>Shut down the api server - be sure</a>'
|
||||||
return rest_cmds
|
return rest_cmds
|
||||||
|
|
||||||
def daily(self):
|
def daily(self):
|
||||||
@ -125,7 +159,6 @@ class ApiServerSuperWrap(RPC):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
timescale = request.args.get('timescale')
|
timescale = request.args.get('timescale')
|
||||||
logger.info("LocalRPC - Daily Command Called")
|
|
||||||
timescale = int(timescale)
|
timescale = int(timescale)
|
||||||
|
|
||||||
stats = self._rpc_daily_profit(timescale,
|
stats = self._rpc_daily_profit(timescale,
|
||||||
|
Loading…
Reference in New Issue
Block a user