# School of Computing &mdash; Year 4 Project Proposal Form

## SECTION A
|                     |                                    |
|---------------------|------------------------------------|
|Project Title:       | Panoptes - Modular Admin Interface |
|Student 1 Name:      | Malachy Byrne                      |
|Student 1 ID:        | 19463716                           |
|Student 2 Name:      | Gary Murphy                        |
|Student 2 ID:        | 19310381                           |
|Project Supervisor:  | Stephen Blott                      |



## SECTION B


### Introduction

Panoptes is an administrator interface that allows the user to write custom modules to monitor and control services. This will be useful for many users, as this will allow systems administrators to control many different services from one place, as well as write their own modules to control and monitor custom services. The system will also allow for users to have different permission levels to suit a more hierarchical organisation.

### Outline

Panoptes will allow users to install modules which are ran as containers, allowing them access to any services or files that they require to run. User accounts will be stored in a relational database, which will also store permissions for various aspects of each module.

The backend will consist of a Go server which will be responsible for interacting with containers, modules and updating the frontend using a REST API.

The frontend will be displayed using Blazor to render data sent from modules through the Go server which will describe what components they require, and the data to be contained in them.

We also plan to implement a set of default modules such as:
* Monitoring - Monitor server statistics
* PiHole - DNS server with an adblocking black hole
* Traefik - Web server

### Background

While trying to set up homelabs, we grew frustrated with administrator interfaces, as they could not be used to control several of the services we were installing. 

We also regularly use a piece of software called Foundry, which allows users to install user-created modules to cover use cases that the developers couldn't, and we thought that would be a perfect solution to our problem.

### Achievements

This project will allow the installation of user-created modules with permission settings to aid with administration of a server or set of servers. 

The two main use-cases of this project are systems administrators and homelab administrators. Panoptes can be a replacement for traditional admin interfaces as it offers a more modular approach into how the user installs it.

### Justification

Systems administrators can get use from this project by being able to easily create or install modules for their custom services, like any monitoring tools that they set up, without having to find an interface that has everything that they want. They will also particularly benefit from the permissions system, which will allow them to give access to certain functions to more junior members, while allowing more senior members access to more privileged functions.

Homelab administrators will benefit from the ability to create or install modules to monitor and control services they have set up themselves in a way that suits their niche use case.

### Programming language(s)

- Go - Backend
- C# - Frontend

### Programming tools / Tech stack

- Mux - A backend library for Go which will be used 
- Blazor - A web framework which uses .NET to render components in the frontend
- Postgresql - A relational database
- Docker - A tool for managing containers
- Protobuf - A serialised data transfer format

### Hardware

N/A

### Learning Challenges

- C#/Blazor
- Go/Mux
- Controlling and communicating with Docker containers using Go
- Protobuf

### Breakdown of work

- Create schema
- Create backend server
- Create frontend server
- Design interface between containers and backend
- Create sample modules

#### Student 1

- Create schema
    - Create proto files to communicate between backend and frontend
- Create backend server
    - Write container management functions
- Create frontend server
    - Write components used on web interface
- Create sample modules
    - Monitoring
    - PiHole

#### Student 2

- Design interface between containers and backend
- Create backend server
    - Write the REST API
- Create frontend server
    - Create layout of components and design UI/UX
- Create sample modules
    - Traefik

