Skip to content
Snippets Groups Projects
Commit 07d40437 authored by Thomas Kluyver's avatar Thomas Kluyver
Browse files

Clean shutdown on SIGTERM

parent 58055030
No related branches found
No related tags found
1 merge request!683[Webservice] Restructure database to give more meaningful success/failure information
...@@ -3,6 +3,7 @@ import argparse ...@@ -3,6 +3,7 @@ import argparse
import json import json
import locale import locale
import logging import logging
import signal
import time import time
from datetime import datetime, timezone from datetime import datetime, timezone
from pathlib import Path from pathlib import Path
...@@ -93,6 +94,13 @@ class JobsMonitor: ...@@ -93,6 +94,13 @@ class JobsMonitor:
self.kafka_topic = config['kafka']['topic'] self.kafka_topic = config['kafka']['topic']
self.time_interval = int(config['web-service']['job-update-interval']) self.time_interval = int(config['web-service']['job-update-interval'])
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.job_db.close()
self.kafka_prod.close(timeout=5)
def run(self): def run(self):
while True: while True:
try: try:
...@@ -293,6 +301,9 @@ class JobsMonitor: ...@@ -293,6 +301,9 @@ class JobsMonitor:
log.error("Failed to update MDC dark run id %s", dark_run_id) log.error("Failed to update MDC dark run id %s", dark_run_id)
log.error(Errors.MDC_RESPONSE.format(response)) log.error(Errors.MDC_RESPONSE.format(response))
def interrupted(signum, frame):
raise KeyboardInterrupt
def main(argv=None): def main(argv=None):
# Ensure files are opened as UTF-8 by default, regardless of environment. # Ensure files are opened as UTF-8 by default, regardless of environment.
locale.setlocale(locale.LC_CTYPE, ('en_US', 'UTF-8')) locale.setlocale(locale.LC_CTYPE, ('en_US', 'UTF-8'))
...@@ -318,7 +329,15 @@ def main(argv=None): ...@@ -318,7 +329,15 @@ def main(argv=None):
) )
# DEBUG logs from kafka-python are very verbose, so we'll turn them off # DEBUG logs from kafka-python are very verbose, so we'll turn them off
logging.getLogger('kafka').setLevel(logging.INFO) logging.getLogger('kafka').setLevel(logging.INFO)
JobsMonitor(config).run()
# Treat SIGTERM like SIGINT (Ctrl-C) & do a clean shutdown
signal.signal(signal.SIGTERM, interrupted)
with JobsMonitor(config) as jm:
try:
jm.run()
except KeyboardInterrupt:
logging.info("Shutting down on SIGINT/SIGTERM")
if __name__ == "__main__": if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment