====================== API del Calendarizador ====================== Las entradas de video de cada televisión en el sistema Arena son administradas por el sistema Gohner, el cual cuenta con funciones invocadas por puerto serial. A continuación se describe el API del servicio que tendrá por tarea la comunicación con Gohner para el manejo de señal de video en las estaciones del local. Transmitir señal ================ Descripción general ------------------- .. image:: /images/scheduler/request_output_overview.svg :align: center 1. Onsite solicita al calendarizador un cambio en la señal de salida de la estación proporcionada. Si no se proporciona una fecha para hacer el cambio, este se realiza de manera instantánea. Si la solicitud va acompañada de fecha, el cambio en la señal de salida se agenda para el tiempo indicado. 2. El calendarizador responde con el resultado de agendar la petición. Flujo ----- .. image:: /images/scheduler/request_output_sequence.svg :align: center Scheduler: ``POST /schedules`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Autorización:** Onsite Mediante esta ruta se solicita un cambio en la salida de video de la estación. Se proporcionan el nombre de la estación y la señal a la cual se hará la transición como sigue: .. code-block:: javascript { "stationName" : "TV003", "outputName" : "PS4" } Desencadenado por esta petición, el calendarizador se comunicará con el servicio de Gohner y solicitará el cambio en la señal de video. Es posible que la petición del cambio no se lleve a cabo en el momento, sino en una fecha en el futuro especificada en el campo ``switchAt`` como sigue: .. code-block:: javascript { "stationName" : "TV003", "outputName" : "PS4" "switchAt" : 1480971441 } Mediante la cual se cambiará la señal cuando la fecha actual del calendarizador sea la especificada en la petición. Si la solicitud pudo ser procesada se responde con el estado ``200 OK``. Si la estación o la salida de video solicitadas no existen, se responde con el estado ``404 Not Found``. Si la fecha para agendar el cambio no está en el futuro, la respuesta será ``409 Conflict``. Como observación, una solicitud de transmisión de señal *stand by* invalida todas las solicitudes previas sobre una estación, es decir, una estación puede tener a lo más una solicitud de cambio a señal de apagado. Una solicitud de cambio de señal distinta a *stand by* es procesada inmediatamente y no invalida cualquier cambio agendado a *stand by* en caso de existir. Esto para respetar el horario de apagado de una estación a pesar de haber efectuado un cambio en la señal de video. .. note:: El cambio temporizado en la señal de video de una estación únicamente se lleva a cabo si esta tiene un valor no nulo en el campo ``screen``. Si no existe el campo ``screen`` para una estación, esta es tratada como una PC. Scheduler: ``POST /schedules/match_group`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Autorización:** Onsite Mediante esta ruta se solicita un cambio en la salida de video de un grupo de estaciones. Para cada estación, se proporciona la señal a la cual se hará el cambio en la pantalla. Un ejemplo de esquema de petición aceptada es el siguiente: .. code-block:: javascript { "matchGroupId": 4576, stations: [ { "stationName" : "TV003", "outputName" : "PS4" }, { "stationName" : "TV008", "outputName" : "XBOX" } ] } Desencadenado por esta petición, el calendarizador se comunicará con el servicio de Gohner y solicitará el cambio en la señal de video para cada una de las estaciones inicadas. Es posible que la petición del cambio no se lleve a cabo en el momento, sino en una fecha en el futuro especificada en el campo ``switchAt`` como sigue: .. code-block:: javascript { "matchGroupId": 4576, "switchAt" : 1480971441, "stations": [ { "stationName" : "TV003", "outputName" : "PS4" }, { "stationName" : "TV008", "outputName" : "PS4" } ] } Mediante la cual se cambiarán las señales cuando la fecha actual del calendarizador sea la especificada en la petición. Si la solicitud pudo ser procesada se responde con el estado ``200 OK``. Si alguna estación o salida de video solicitadas no existen, se responde con el estado ``404 Not Found``. Si la fecha para agendar el cambio no está en el futuro, la respuesta será ``409 Conflict``. Como observación, una solicitud de transmisión de señal *stand by* invalida todas las solicitudes previas sobre una estación, es decir, una estación puede tener a lo más una solicitud de cambio a señal de apagado. Una solicitud de cambio de señal distinta a *stand by* es procesada inmediatamente y no invalida cualquier cambio agendado a *stand by* en caso de existir. Esto para respetar el horario de apagado de una estación a pesar de haber efectuado un cambio en la señal de video. .. note:: El cambio temporizado en la señal de video de una estación únicamente se lleva a cabo si ésta tiene un valor no nulo en el campo ``screen``. Si no existe el campo ``screen`` para una estación, ésta es tratada como una PC. .. _crear-estacion-scheduler: Creación de estación ==================== Al crear una estación por parte de un usuario del local, dicha estación debe crearse en la base del manejador de estaciones con el fin de permitir el envío de señales de video. El comportamiento de la creación se describe a continuación. Flujo ----- Scheduler: ``POST /stations`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Autorización:** Onsite Mediante esta ruta se solicita la creación de una estación en el registro del calendarizador. El cuerpo de la petición es el siguiente .. code-block:: yaml name: Estación 2 screen: 3 Como consecuencia, se generará en el calendarizador un nuevo registro con los valores de la estación descritos. Para peticiones de cambio de señal futuras, el calendarizador hará uso del campo ``screen`` para la comunicación con el servicio de switch de señal. La ruta responde con el estado ``201 Created`` acompañado de la estación recién creada. Si ya existe otra estación con el nombre o la pantalla registrados, se reemplaza el registro existente en el calendarizador con el recién proporcionado. .. _actualizar-estacion-scheduler: Actualización de una estación ============================= La actualización en nombre o identificador de pantalla en el servidor Onsite se notifica a su respectivo calendarizador como se describe en el siguiente flujo. Flujo ----- Scheduler: ``PUT /stations/name`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Autorización:** Onsite Mediante esta ruta se solicita la actualización de los campos en una estación. El cuerpo de la petición es el siguiente .. code-block:: yaml name: Estación 2 screen: 3 Como consecuencia a la recepción de la petición, se actualiza la información de la estación con los campos que se proporcionan. Esta ruta responde con el estado ``200 OK`` si la actualización de los campos fue exitosa. Si la estación no pudo ser encontrada se responde con el estado ``404 Not Found``. Si ya existe otra estación con el nombre o la pantalla proporcionados, se responde con el estado ``409 Conflict``. .. _eliminar-estacion-scheduler: Borrado de una estación ======================= Al eliminar una estación de la sucursal, es necesario que se reporte el borrado al calendarizador con el objetivo de mantener los registros consistentes. A continuación se describe el flujo empleado. Flujo ----- Scheduler: ``DELETE /stations/name`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Autorización:** Onsite Mediante esta ruta se solicita el borrado de una estación en el registro del calendarizador. La ruta responde con el estado ``200 OK`` acompañado de la estación eliminada. Si la estación a eliminar no se encuentra, se responde con el estado ``404 Not Found``. El borrado de la estación es *hard delete*. Notificación de señal cambiada ============================== Descripción general ------------------- .. image:: /images/scheduler/output_notification_overview.svg :align: center 1. Cuando ocurre un cambio en la salida de video se notifica a Onsite para que este realice los ajustes de tiempo pertinentes a los jugadores en la estación. En caso de que el cambio en la salida no corresponda a una petición de cambio agendada para el futuro, no se envía la notificación. 2. El servidor Onsite responde con el resultado de la recepción de la notificación. Flujo ----- .. image:: /images/scheduler/output_notification_sequence.svg :align: center En caso de que se lleve a cabo un cambio *temporizado* en la señal de video de una estación, se debe notificar a Onsite con el fin de que este tome medidas pertinentes sobre el tiempo de los jugadores. Esto se logra mediante la invocación a la ruta ``POST /stations/standby_status``.