Backend for ClusterCockpit Monitoring Framework. GitHub Mirror
Go to file
2022-07-08 10:51:33 +02:00
.github/workflows Another try to fix tests 2022-06-22 18:14:27 +02:00
api Refactor directory structure 2022-06-21 17:52:36 +02:00
cmd/cc-backend embed templates into binary (issue #2) 2022-07-06 15:00:08 +02:00
configs Update documentation (Fixes #2) 2022-07-06 15:06:04 +02:00
init Update README.md 2022-06-24 10:49:31 +02:00
internal embed templates into binary (issue #2) 2022-07-06 15:00:08 +02:00
pkg Disable lruchache handler response test 2022-06-23 09:25:07 +02:00
test Fix api tests 2022-06-22 18:06:02 +02:00
tools Update README.md 2022-06-24 10:49:02 +02:00
web Fixes #15: Copy JWT to clipboard automatically 2022-07-08 10:51:33 +02:00
.gitignore Fix paths. Adapt gitignore 2022-06-23 18:27:42 +02:00
go.mod Sync checksum file; Tidy up module file 2022-07-05 08:54:58 +02:00
go.sum Sync checksum file; Tidy up module file 2022-07-05 08:54:58 +02:00
gqlgen.yml Refactor directory structure 2022-06-21 17:52:36 +02:00
LICENSE Initial checkin. 2019-04-29 10:21:48 +02:00
README.md Update README.md 2022-07-06 06:37:30 +02:00
startDemo.sh Fix paths. Adapt gitignore 2022-06-23 18:27:42 +02:00

ClusterCockpit REST and GraphQL API backend

Build

This is a Golang backend implementation for a REST and GraphQL API according to the ClusterCockpit specifications. It also includes a web interface for ClusterCockpit. This implementation replaces the previous PHP Symfony based ClusterCockpit web-interface. Here is a discussion of the reasons why we switched from PHP Symfony to a Golang based solution.

Overview

This is a golang web backend for the ClusterCockpit job-specific performance monitoring framework. It provides a REST API for integrating ClusterCockpit with a HPC cluster batch system and external analysis scripts. Data exchange between the web frontend and backend is based on a GraphQL API. The web frontend is also served by the backend using Svelte components. Layout and styling is based on Bootstrap 5 using Bootstrap Icons. The backend uses SQLite 3 as relational SQL database by default. It can optionally use a MySQL/MariaDB database server. Finished batch jobs are stored in a file-based job archive following this specification. The backend supports authentication using local accounts or an external LDAP directory. Authorization for APIs is implemented using JWT tokens created with public/private key encryption.

You find more detailed information here:

  • ./configs/README.md: Infos about configuration and setup of cc-backend.
  • ./init/README.md: Infos on how to setup cc-backend as systemd service on Linux.
  • ./tools/README.md: Infos on the JWT authorizatin token workflows in ClusterCockpit.

Demo Setup

We provide a shell skript that downloads demo data and automatically builds and starts cc-backend. You need wget, go, and yarn in your path to start the demo. The demo will download 32MB of data (223MB on disk).

git clone git@github.com:ClusterCockpit/cc-backend.git

./startDemo.sh

You can access the web interface at http://localhost:8080. Credentials for login: demo:AdminDev. Please note that some views do not work without a metric backend (e.g., the Systems and Status view).

Howto Build and Run

git clone git@github.com:ClusterCockpit/cc-backend.git

# Prepare frontend
cd ./cc-backend/web/frontend
yarn install
yarn build

cd ..
go build ./cmd/cc-backend

ln -s <your-existing-job-archive> ./var/job-archive

# Create empty job.db (Will be initialized as SQLite3 database)
touch ./var/job.db

# EDIT THE .env FILE BEFORE YOU DEPLOY (Change the secrets)!
# If authentication is disabled, it can be empty.
cp configs/env-template.txt  .env
vim ./.env

# This will first initialize the job.db database by traversing all
# `meta.json` files in the job-archive and add a new user. `--no-server` will cause the
# executable to stop once it has done that instead of starting a server.
./cc-backend --init-db --add-user <your-username>:admin:<your-password> --no-server

# Start a HTTP server (HTTPS can be enabled, the default port is 8080):
./cc-backend

# Show other options:
./cc-backend --help

Run as systemd daemon

In order to run this program as a daemon, cc-backend ships with an example systemd setup.

Configuration and Setup

cc-backend can be used as a local web-interface for an existing job archive or as a general web-interface server for a live ClusterCockpit Monitoring framework.

Create your job-archive according to this specification. At least one cluster with a valid cluster.json file is required. Having no jobs in the job-archive at all is fine.

Configuration

A config file in the JSON format can be provided using --config to override the defaults. You find documentation of all supported configuration and command line options here.

Update GraphQL schema

This project uses gqlgen for the GraphQL API. The schema can be found in ./api/schema.graphqls. After changing it, you need to run go run github.com/99designs/gqlgen which will update ./internal/graph/model. In case new resolvers are needed, they will be inserted into ./internal/graph/schema.resolvers.go, where you will need to implement them.

Project Structure

  • api/ contains the API schema files for the REST and GraphQL APIs. The REST API is documented in the OpenAPI 3.0 format in ./api/openapi.yaml.
  • cmd/cc-backend contains main.go for the main application.
  • configs/ contains documentation about configuration and command line options and required environment variables. An example configuration file is provided.
  • init/ contains an example systemd setup for production use.
  • internal/ contains library source code that is not intended to be used by others.
  • pkg/ contains go packages that can also be used by other projects.
  • test/ Test apps and test data.
  • tools/ contains supporting tools for cc-backend. At the moment this is a small application to generate a compatible JWT keypair includin a README about JWT setup in ClusterCockpit.
  • web/ Server side templates and frontend related files:
    • templates Serverside go templates
    • frontend Svelte components and static assets for frontend UI
  • gqlgen.yml configures the behaviour and generation of gqlgen.
  • startDemo.sh is a shell script that sets up demo data, and builds and starts cc-backend.