nextline-graphql
The plugin-based framework of the Nextline backend API server
Table of Contents
Introduction
Nextline is a DAQ sequencer of the Observatory Control System
(OCS). Nextline allows line-by-line
execution of concurrent Python scripts, which control telescopes, by multiple
users simultaneously from web browsers.
Nextline consists of multiple packages. This package, nextline-graphql, provides the
framework for the backend API server. It is a plugin-based framework. Features
are added by plugins.
Citation
Please use the following DOI for the core
package to cite Nextline in general
unless you need to refer to a specific package.
Packages
Core package
- nextline: The core functionality
of Nextline. It controls the execution of the Python scripts. It is used by
the plugin ctrl.
Plugin system
The plugin system of nextline-graphql is apluggy.
Plugins
Internal plugins
These plugins are included in this package.
External plugins
These plugins are not included in this package. They can be installed separately.
Web App
The front-end web app is currently in a single package. The development of a
plugin-based system is planned.
- nextline-web: (TypeScript)
The front-end web app of Nextline. It is a Vue.js app.
How to run the Nextline backend API server
The section shows how to run the Nextline backend API server. How to run the
front-end web app is described
elsewhere.
As a Docker container
Docker images of the Nextline backend API server are created as
ghcr.io/simonsobs/nextline-graphql.
These images are created by the
Dockerfile.
No external plugins are included in the images.
Use, for example, the following command to run as a Docker container.
docker run -p 8080:8000 ghcr.io/simonsobs/nextline-graphql
If you access to the API server with a web browser, you will see the GraphQL
IDE: http://localhost:8080/.
To include external plugins, you can create a new Docker image with
ghcr.io/simonsobs/nextline-graphql as the base image. For example,
nextline-rdb shows how to create a
new Docker image with nextline-rdb as an external plugin.
In a virtual environment
You can create a virtual environment, install packages, and run the API server
as follows.
python -m venv venv
source venv/bin/activate
pip install nextline-graphql
pip install uvicorn
uvicorn --lifespan on --factory --port 8080 nextlinegraphql:create_app
Check with a web browser at http://localhost:8080/.
If you check out external plugins, nextline-graphql automatically detects them
as plugins. An example can be described in
nextline-rdb.
Configuration
nextline-graphql uses dynaconf for configuration
management. nextline-graphql itself does not have any configuration except for
logging. External plugins have configurations.
Check out code for development
This section shows an example way to check out code from GitHub for development.
python -m venv venv
source venv/bin/activate
git clone git@github.com:simonsobs/nextline.git
git clone git@github.com:simonsobs/nextline-graphql.git
pip install -e ./nextline/"[tests,dev]"
pip install -e ./nextline-graphql/"[tests,dev]"
To run
uvicorn --port 8080 --lifespan on --factory --reload --reload-dir nextline-graphql --reload-dir nextline nextlinegraphql:create_app