From d6f5ef346367fbdad444c2d9b44888bb2befe7dc Mon Sep 17 00:00:00 2001 From: Diego Gomez Date: Tue, 15 Oct 2024 12:35:03 -0300 Subject: [PATCH 1/2] Removed old query, renamed current query --- scheduler/graphql_mid/schema.py | 34 +-------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/scheduler/graphql_mid/schema.py b/scheduler/graphql_mid/schema.py index e2dfb33e..51294dbb 100644 --- a/scheduler/graphql_mid/schema.py +++ b/scheduler/graphql_mid/schema.py @@ -49,39 +49,7 @@ def site_plans(self, site: Site) -> List[SPlans]: return [plans.for_site(site) for plans in PlanManager.get_plans()] @strawberry.field - async def schedule(self, - new_schedule_input: CreateNewScheduleInput) -> NewNightPlans: - try: - start = Time(new_schedule_input.start_time, format='iso', scale='utc') - end = Time(new_schedule_input.end_time, format='iso', scale='utc') - - ranker_params = RankerParameters(new_schedule_input.thesis_factor, - new_schedule_input.power, - new_schedule_input.met_power, - new_schedule_input.vis_power, - new_schedule_input.wha_power) - #if new_schedule_input.program_file: - # program_file = (await new_schedule_input.program_file.read()) - #else: - # program_file = new_schedule_input.program_file - - params = SchedulerParameters(start, end, - new_schedule_input.sites, - new_schedule_input.mode, - ranker_params, - new_schedule_input.semester_visibility, - new_schedule_input.num_nights_to_schedule) - engine = Engine(params) - plan_summary, timelines = engine.run() - - s_timelines = SNightTimelines.from_computed_timelines(timelines) - - except RuntimeError as e: - raise RuntimeError(f'Schedule query error: {e}') - return NewNightPlans(night_plans=s_timelines, plans_summary=plan_summary) - - @strawberry.field - async def test_sub_query(self, schedule_id: str, new_schedule_input: CreateNewScheduleInput) -> str: + async def schedule(self, schedule_id: str, new_schedule_input: CreateNewScheduleInput) -> str: start = Time(new_schedule_input.start_time, format='iso', scale='utc') end = Time(new_schedule_input.end_time, format='iso', scale='utc') From fd857afe982bd194673ce48de6cd7fd7df27c1e8 Mon Sep 17 00:00:00 2001 From: Diego Gomez Date: Wed, 16 Oct 2024 15:00:04 -0300 Subject: [PATCH 2/2] Remove websocket code --- scheduler/routes.py | 154 -------------------------------------------- 1 file changed, 154 deletions(-) diff --git a/scheduler/routes.py b/scheduler/routes.py index eae2f662..ee45d4bf 100644 --- a/scheduler/routes.py +++ b/scheduler/routes.py @@ -1,170 +1,16 @@ # Copyright (c) 2016-2024 Association of Universities for Research in Astronomy, Inc. (AURA) # For license information see LICENSE or https://opensource.org/licenses/BSD-3-Clause -import asyncio -import json from fastapi.responses import JSONResponse -from fastapi import WebSocket, WebSocketDisconnect -from fastapi.websockets import WebSocketState -from fastapi.responses import HTMLResponse -from starlette.requests import Request from scheduler.app import app from scheduler.connection_manager import ConnectionManager -from scheduler.engine import Engine -from scheduler.engine.params import SchedulerParameters -from scheduler.services import logger_factory -from graphql_mid.types import SNightTimelines - -_logger = logger_factory.create_logger(__name__) manager = ConnectionManager() - # Root API @app.get("/", include_in_schema=False) def root() -> JSONResponse: return JSONResponse(status_code=200, content={ "message": "Welcome to Server"}) - - -def worker(data: dict) -> dict: - params = SchedulerParameters.from_json(data) - engine = Engine(params) - plan_summary, timelines = engine.run() - return {"plan_summary": plan_summary, "timelines": timelines.to_json()} - - -async def keep_alive(websocket: WebSocket) -> None: - """Sends a ping to the websocket to avoid idle timeouts.""" - while True: - try: - if websocket.application_state == WebSocketState.CONNECTED: - await manager.send({"type": "ping", "payload": {}}, websocket) - await asyncio.sleep(30) # Ping every 30 seconds - except Exception as e: - _logger.warning(f"Keep-alive error: {e}") - break - - -async def websocket_handler(websocket: WebSocket) -> None: - """Handles the task that allows to run the Scheduler engine""" - while True: - data = await websocket.receive_json() - if data: - task = asyncio.to_thread(worker, data) - await manager.send({"type": "update", "payload": {"message": "Processing plans..."}}, websocket) - result = await task - await manager.send({"type": "plans", "payload": result}, websocket) - else: - raise ValueError('Missing parameters to create schedule') - - -@app.websocket("/ws/{client_id}") -async def schedule_websocket(websocket: WebSocket, client_id: int): - - await manager.connect(websocket) - - keep_alive_task = asyncio.create_task(keep_alive(websocket)) - handler_task = asyncio.create_task(websocket_handler(websocket)) - - try: - await asyncio.gather(keep_alive_task, handler_task) - except WebSocketDisconnect: - manager.disconnect(websocket) - except Exception as e: - _logger.warning(f"An error occurred in websocket {client_id}: {e}") - finally: - keep_alive_task.cancel() - handler_task.cancel() - await keep_alive_task - await handler_task - - -@app.get("/websocket-client") -async def websocket_client(request: Request): - return HTMLResponse(""" - - - - Schedule - - -

WebSocket Plans

-

Your ID:

-
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - - - -""")