User Interface
Fred UI is a React application that uses Material, Redux and Typescript. It is designed to be easily customized and extended. It was updated with Vite.js and React Flow.
It comes with a lightweight (golang) backend ithat acts as a proxy server that, in turn, serves the UI and forwards the requests to the Fred python API servers. It also provides facilities to interact directly with a Kubernetes cluster.
Fred UI provides you with:
- Keycloak integration
- Cookie and Jwt token management
- Kubernetes integration
- Material, Redux, Typescript
- Docker file and helm chart for deployment
- Makefile for easy build and run
- Kooker integration
- Vite.js
Design
When you deploy Fred UI to kubernetes, you actually start a (docker) container that runs the golan backend. That backend is in charge of two roles:
- serve the UI static content. That is the one your browser will invoke.
- handle the UI rest API calls to the various backend services. The golang server acts here as a proxy forwarder.
In the UI code, all (redux) API slices inherit from a common base path ‘/api’. Check out the ‘src/slices/api.tsx’ file. If you have a look at one of the slice that interact with a backend you will see url like this:
getClusterScores: builder.mutation<ClusterScore, { cluster: string }>({
query: ({cluster}: { cluster: string }) => ({
url: `/rift-api/ui/scores?cluster_name=${cluster}`,
method: 'GET',
}),
}),
The browser will actually send a request to ‘/api/v1/artifacts/…’. In turn the golang backend receives that request on its localhost:8081 port and will handle it according to its API gateway configuration.
This looks like a complex design. But it has many advantages: modularity, separation of concerns, CORS.
Getting started
Make sure you have a recent node:
nvm list
nvm use v22.8.0
To start the ui:
cd ui;
npm install
npm run dev
or simply:
make ui-run
To start the server
make server-run
To build the docker image type in
make docker-build
This will build the server and the ui, and create a docker image. Check the Makefile targets for more options.
make help
To go production, you will need to pass the configuration to the helm chart. Checkout the values.yaml file for an example. This allows you to deploy the punch board using helm, or better using Kast kastctl tool.
Contributing
Developer guide
Dependency management is, as usual, the most important and delicate part of the project. Prefer using only the Makefile to build and run the project.
Normally, the ui/package-lock.json file, committed as part of the project, should never be changed. If you really need to add a new dependency, ensure you review with Fred’s team what you bring in. Fred’s team is there to ensure that the dependencies work well together, and that the project remains lightweight and easy to build.
There is only one branch ‘0.1’ branch. It is the current stable release. Do not be afraid to submit merge requests we team will be happy to review them.
Style and Colors
We use material ui. Refer to the theme.tsx file.
Requirements
make
, curl
, gcc
, node
, nvm
, golang
and docker
are required to build project in your laptop.
# make
sudo apt install make curl gcc
# node and yarn (using nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install v22.8.0
npm install --global yarn
nvm use v22.8.0
Install GoEnv, then use it to install golang 1.21
read installation guide
For docker
read [installation guide for Ubuntu](https://docs.docker.com/engine/install/ubuntu/, https://docs.docker.com/engine/install/linux-postinstall/)
Run locally
# Build the server and ui
make build
# Run the server
make server-run
In another terminal.
# Run the ui
make ui-run
Which is equivalent to:
cd ui
npm run dev
Go to the indicated localhost url and use the UI (credentials board/board)!