This document provides an overview of the architecture of the Mining project.
## High-Level Overview
The project is structured as a modular Go application. It consists of:
1.**Core Library (`pkg/mining`)**: Contains the business logic for miner management.
2.**CLI (`cmd/mining`)**: A command-line interface built with Cobra.
3.**REST API**: A Gin-based web server exposed via the `serve` command.
4.**Frontend**: An Angular-based dashboard for monitoring miners.
## Core Components
### Manager Interface
The core of the system is the `ManagerInterface` defined in `pkg/mining/manager_interface.go`. This interface abstracts the operations of starting, stopping, and monitoring miners.
- Pluggable implementations (e.g., supporting different miner backends).
### Miner Interface
Each specific miner (e.g., XMRig) implements the `Miner` interface. This interface defines how to interact with the underlying miner executable process, parse its output, and control it.
The `XMRigMiner` implementation (`pkg/mining/xmrig.go`) handles:
- Downloading and verifying the miner binary.
- Generating configuration files.
- Executing the binary.
- Parsing stdout/stderr/API for stats.
### Service Layer
The `Service` struct (`pkg/mining/service.go`) wraps the `Manager` and exposes its functionality via a HTTP API using the Gin framework. It handles:
- Route registration.
- Request validation/binding.
- Response formatting.
- Swagger documentation generation.
## Directory Structure
-`cmd/mining/`: Entry point for the application.
-`pkg/mining/`: Core library code.
-`docs/`: Documentation and Swagger files.
-`ui/`: Source code for the Angular frontend.
-`dist/`: Build artifacts (binaries).
## Data Flow
1.**User Action**: User issues a command via CLI or calls an API endpoint.
2.**Service/CMD Layer**: The request is validated and passed to the `Manager`.
3.**Manager Layer**: The manager looks up the appropriate `Miner` implementation.
4.**Miner Layer**: The miner instance interacts with the OS (filesystem, processes).
5.**Feedback**: Status and stats are returned up the stack to the user.