This document describes the high-level architecture of the GraphOwls project. If you want to familiarize yourself with the code base, you are in the right place!
┌──────────────────────────────────┐
│ │
│ Plugins service (Python+FastAPI) │
│ │
└──▲─────┬─────────────────────────┘
│ │
│ │
┌──┴─────▼─────┐ ┌─────────────────────────────────────┐
│ ├──────────► │
│ Backend (Go) │ │ PostgreSQL + Apache Age (psql ext.) │
│ ◄──────────┤ │
└────┬──▲──────┘ └─────────────────────────────────────┘
│ │
│ │
┌────▼──┴────────┐
│ │
│ Auth (Casdoor) │
│ │
└──▲────────┬────┘
│ │
│ │
│ │
│ │
┌──┴────────▼──────┐
│ │
│ Frontend (React) │
│ │
└──────────────────┘
On the highest level GraphOwls is a thing which accepts JSON data from a React application and generates entities (and nodes) and links (aka edges) from user input to produce an OpenCypher (Apache/Age) graph.
More specifically input data is accepted from user created nodes on the GraphOwls UI which calls the backend then plugins (aka entities) service to retrieve the node structure. Once the backend retrieves the node structure the nodes (and edges) are saved into a PostgreSQL database through the Apache/Age extension. The node structure is responsible for the visual appearance of the node on the UI and for the available datapoints a user may add to a node.
The core backend will be running a Chi server generated by an OpenAPI spec. Some of the core functions of this backend server will be:
- Authorizing access to an individuals investigations (graphs)
- A websocket endpoint to enable optional collaborative access to create, view, delete, and update entities in an investigation
- An entity job service to check and gather any new data for an entity through the use of gocron, this will help us support historical entity information
- Endpoints to update the dashboard layout for an investigation which may show general or targeted metrics for things such as entity count, recent updates, RSS feeds, etc
- todo: finish me
todo
todo
todo
todo