Skip to content

Commit

Permalink
Add an endpoint to force a server shutdown
Browse files Browse the repository at this point in the history
this is only needed during development, so that if we end up with some user
running a server on a machine we can stop it remotely. Obviously this
function should be removed before we deploy for production.
  • Loading branch information
Anthchirp committed Mar 14, 2022
1 parent 6993aac commit d3fcbd5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
14 changes: 13 additions & 1 deletion src/murfey/server/__init__.py
Expand Up @@ -28,6 +28,8 @@
template_files = files("murfey") / "templates"
templates = Jinja2Templates(directory=template_files)

_running_server: uvicorn.Server | None = None


def respond_with_template(filename: str, parameters: dict[str, Any] | None = None):
template_parameters = {
Expand Down Expand Up @@ -179,16 +181,26 @@ def run():
logger.info(
f"Starting Murfey server version {murfey.__version__}, listening on {args.host}:{args.port}"
)
uvicorn.run(
global _running_server
config = uvicorn.Config(
"murfey.server.main:app",
host=args.host,
port=args.port,
env_file=args.env_file,
log_config=None,
)
_running_server = uvicorn.Server(config=config)
_running_server.run()
logger.info("Server shutting down")


def shutdown():
global _running_server
if _running_server:
_running_server.should_exit = True
_running_server.force_exit = True


@functools.lru_cache()
def get_microscope():
try:
Expand Down
15 changes: 14 additions & 1 deletion src/murfey/server/main.py
@@ -1,6 +1,7 @@
from __future__ import annotations

import datetime
import logging

import ispyb
import packaging.version
Expand All @@ -11,11 +12,13 @@
from ispyb.sqlalchemy import BLSession, Proposal
from pydantic import BaseModel

import murfey
import murfey.server
import murfey.server.bootstrap
import murfey.server.websocket as ws
from murfey.server import get_hostname, get_microscope, template_files, templates

log = logging.getLogger("murfey.server.main")

tags_metadata = [murfey.server.bootstrap.tag]

app = FastAPI(title="Murfey server", debug=True, openapi_tags=tags_metadata)
Expand Down Expand Up @@ -185,3 +188,13 @@ def get_version(client_version: str = ""):
result["client-needs-downgrade"] = client > server

return result


@app.get("/shutdown", include_in_schema=False)
def shutdown():
"""A method to stop the server. This should be removed before Murfey is
deployed in production. To remove it we need to figure out how to control
to process (eg. systemd) and who to run it as."""
log.info("Server shutdown request received")
murfey.server.shutdown()
return {"success": True}

0 comments on commit d3fcbd5

Please sign in to comment.