ray/dashboard/modules/serve/serve_head.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

72 lines
2.4 KiB
Python
Raw Normal View History

from aiohttp.web import Request, Response
import json
import logging
import ray.dashboard.utils as dashboard_utils
import ray.dashboard.optional_utils as optional_utils
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
routes = optional_utils.ClassMethodRouteTable
# NOTE (shrekris-anyscale): This class uses delayed imports for all
# Ray Serve-related modules. That way, users can use the Ray dashboard for
# non-Serve purposes without downloading Serve dependencies.
class ServeHead(dashboard_utils.DashboardHeadModule):
def __init__(self, dashboard_head):
super().__init__(dashboard_head)
@routes.get("/api/serve/deployments/")
@optional_utils.init_ray_and_catch_exceptions(connect_to_serve=True)
async def get_all_deployments(self, req: Request) -> Response:
from ray.serve.api import list_deployments
from ray.serve.application import Application
app = Application(list(list_deployments().values()))
return Response(
text=json.dumps(app.to_dict()),
content_type="application/json",
)
@routes.get("/api/serve/deployments/status")
@optional_utils.init_ray_and_catch_exceptions(connect_to_serve=True)
async def get_all_deployment_statuses(self, req: Request) -> Response:
from ray.serve.api import get_deployment_statuses
from ray.serve.schema import serve_application_status_to_schema
serve_application_status_schema = serve_application_status_to_schema(
get_deployment_statuses()
)
return Response(
text=serve_application_status_schema.json(),
content_type="application/json",
)
@routes.delete("/api/serve/deployments/")
@optional_utils.init_ray_and_catch_exceptions(connect_to_serve=True)
async def delete_serve_application(self, req: Request) -> Response:
from ray import serve
serve.shutdown()
return Response()
@routes.put("/api/serve/deployments/")
@optional_utils.init_ray_and_catch_exceptions(connect_to_serve=True)
async def put_all_deployments(self, req: Request) -> Response:
from ray import serve
from ray.serve.application import Application
app = Application.from_dict(await req.json())
serve.run(app, _blocking=False)
return Response()
async def run(self, server):
pass
@staticmethod
def is_minimal_module():
return False