Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
9bdbfa2
feat(agent): setup CI pipeline, CMake formatting targets & code stubs…
varev-dev Dec 7, 2025
69feb0b
updated gitignore
kox13 Jan 24, 2026
a59b392
agent config file with toml syntax
kox13 Jan 24, 2026
e595fa6
toml++ library for parsing toml syntax
kox13 Jan 24, 2026
93d8217
include toml++ and move agent.conf to correct dir on build
kox13 Jan 24, 2026
e6aef8a
read config file and set core_affinity
kox13 Jan 24, 2026
ab4287c
fix binding core affinity
varev-dev Jan 27, 2026
2e71610
fix(agent): OS name reading
kox13 Jan 31, 2026
189ff3d
correct format
kox13 Jan 31, 2026
30352ed
changed find_package order, so that cmake doesn't throw an error
kox13 Jan 31, 2026
7ae8bc2
build: implement vcpkg Manifest Mode, CMakePresets and update README …
varev-dev Feb 2, 2026
368d418
Merge branch 'devel' into agent/feat/uuid-and-config
kox13 Feb 2, 2026
4d6e345
chore: move toml++ dependency to Manifest Mode, make agent.conf copy …
kox13 Feb 2, 2026
a91de65
chore: correct format
kox13 Feb 2, 2026
51cd732
Merge pull request #20 from monvit/agent/feat/uuid-and-config
kox13 Feb 3, 2026
9956dda
feat(agent): Agent UUID and config file (#24)
kox13 Mar 22, 2026
443dbf6
chore: updated gitignore
kox13 Apr 8, 2026
43ebe99
refactor: refactored project structure
kox13 Apr 8, 2026
6b56d5f
chore: agent ci with corrected paths
kox13 Apr 8, 2026
24ec283
chore: updated gitignore
kox13 Apr 8, 2026
2908054
build: pre-commit hook for checking formatting, corrected paths on CM…
kox13 Apr 8, 2026
a8d0abb
chore: delete agent.conf file from the repository
kox13 Apr 9, 2026
96a3b62
ci: improved ci process with vcpkg cache and setup-cpp image
kox13 Apr 9, 2026
57f823c
chore: delete test branch from ci file
kox13 Apr 9, 2026
721adfb
RAPL collector implementation (#26)
FW-Nagorko Apr 10, 2026
7eb7b5e
Agent Metric Config (#30)
FW-Nagorko May 15, 2026
c2454a4
Feat: Buffer Implementation (#31)
FW-Nagorko Jun 5, 2026
de62f57
feat: Add orchestration server — REST/WebSocket gateway and C++ agent…
kox13 Jun 12, 2026
39ad5f3
feat(agent): load NVML at runtime via dlopen (#33)
patryk-przybysz Jun 13, 2026
2b8cdbb
Live metrics dashboard (#35)
patryk-przybysz Jun 13, 2026
6321ef9
Feat/local mode fallback (#38)
FW-Nagorko Jun 13, 2026
526eb2f
ci: add dashboard CI and GitHub Pages deploy (#37)
patryk-przybysz Jun 13, 2026
e89e347
Show exact metric values on hover (#40)
patryk-przybysz Jun 14, 2026
f15b355
Restrict CORS to configured origins (#41)
patryk-przybysz Jun 17, 2026
419166d
Exporter implementation (#42)
FW-Nagorko Jun 22, 2026
b4debcf
merge: merge feat/grpc-communication into devel
kox13 Jun 22, 2026
d9507e0
merge: merge agent/collector-fixes into devel
FW-Nagorko Jun 22, 2026
158bf58
Revert "merge: merge agent/collector-fixes into devel" (#44)
patryk-przybysz Jun 22, 2026
1c89790
[NFC] Modules documentation update (#45)
varev-dev Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Mass reformatting - introducing CI Agent (Issue #14)
433cd2b661a88b143fae6e215a487280a5dedf05

189ff3dffca02d8824919060b24ef0a084c609af
a91de65471c7ad4145a5b509b06a1d08ca1dfd6f
821770ad1742a746b373d2bd0cf081f2eaebedd9
66 changes: 66 additions & 0 deletions .github/workflows/agent_ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Agent CI

on:
push:
branches: [ "main", "devel" ]
paths:
- 'sources/agent/**'
- '.github/workflows/agent_ci.yml'
pull_request:
branches: [ "main", "devel" ]
paths:
- 'sources/agent/**'
- '.github/workflows/agent_ci.yml'

jobs:
build-and-test:
name: Build & Format Check
runs-on: ubuntu-latest

env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"

steps:
- uses: actions/checkout@v4

- name: Setup C++ tools
uses: aminya/setup-cpp@v1
with:
clang-format: true
cppcheck: true

- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
~/.cache/vcpkg
sources/agent/build/vcpkg_installed
key: vcpkg-${{ runner.os }}-${{ hashFiles('sources/agent/vcpkg.json') }}

- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgJsonGlob: 'sources/agent/vcpkg.json'

- name: Check Code Formatting
run: |
find sources/agent/src -name "*.cc" -o -name "*.h" | xargs clang-format --dry-run --Werror -style=Google

- name: CMake Configure
working-directory: sources/agent
run: cmake --preset default -DCMAKE_BUILD_TYPE=Release

- name: Build
working-directory: sources/agent
run: cmake --build --preset default -j$(nproc)

- name: Analyze Logic
run: |
cppcheck --enable=warning,performance,portability \
--error-exitcode=1 \
--suppress=missingIncludeSystem \
--inline-suppr \
--force \
-i sources/agent/build \
-i sources/agent/gen \
sources/agent
78 changes: 78 additions & 0 deletions .github/workflows/dashboard_ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Dashboard CI

on:
push:
branches: [ "main", "devel" ]
paths:
- 'sources/dashboard/**'
- '.github/workflows/dashboard_ci.yml'
pull_request:
branches: [ "main", "devel" ]
paths:
- 'sources/dashboard/**'
- '.github/workflows/dashboard_ci.yml'

jobs:
check-and-build:
name: Lint, Format & Build
runs-on: ubuntu-latest

defaults:
run:
working-directory: sources/dashboard

steps:
- uses: actions/checkout@v6

- uses: voidzero-dev/setup-vp@v1
with:
node-version: '24'
working-directory: sources/dashboard
cache: true
run-install: true

- name: Format, lint & typecheck
run: vp check

- name: Build
run: vp run build
env:
GITHUB_PAGES: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && 'true' || '' }}

- name: Upload build artifact
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: actions/upload-artifact@v7
with:
name: dashboard-dist
path: sources/dashboard/dist
retention-days: 7

deploy:
name: Deploy to GitHub Pages
needs: check-and-build
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: false
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/download-artifact@v8
with:
name: dashboard-dist
path: dist

- uses: actions/configure-pages@v6

- uses: actions/upload-pages-artifact@v5
with:
path: dist

- id: deployment
uses: actions/deploy-pages@v5
63 changes: 63 additions & 0 deletions .github/workflows/server_ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Server CI

on:
push:
branches: [ "main", "devel" ]
paths:
- 'sources/server/**'
- '.github/workflows/server_ci.yml'
pull_request:
branches: [ "main", "devel" ]
paths:
- 'sources/server/**'
- '.github/workflows/server_ci.yml'

jobs:
build-and-test:
name: Server Lint, Build & Test
runs-on: ubuntu-latest

defaults:
run:
working-directory: sources/server

steps:
- uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version-file: sources/server/go.mod
cache: true
cache-dependency-path: sources/server/go.sum

- name: Install protoc
uses: arduino/setup-protoc@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

- name: Install Go protoc plugins
run: |
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

- name: Generate protobuf
run: make proto

- name: Verify formatting
run: |
unformatted=$(gofmt -l .)
if [ -n "$unformatted" ]; then
echo "The following files are not gofmt-formatted:"
echo "$unformatted"
exit 1
fi

- name: Go vet
run: go vet ./...

- name: Build
run: go build ./...

- name: Test
run: go test -v ./...
17 changes: 15 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
# --- Shared ---
.vscode/
build/
cmake-build-*/
*.code-workspace
sources/**/logs

# --- Agent ---
.cache/
compile_commands.json
sources/agent/agent.conf
.clang-format
*.uuid
out/

# --- Server ---
sources/server/pb/
sources/server/server
17 changes: 17 additions & 0 deletions .helix/languages.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[[language]]
name = "c"
scope = "source.c"
file-types = []

[[language]]
name = "cpp"
scope = "source.cpp"
file-types = ["cc", "hh", "c++", "cpp", "hpp", "h", "ipp", "tpp", "cxx", "hxx", "ixx", "txx", "ino", "C", "H", "cu", "cuh"]
language-servers = ["clangd"]

[language-server.clangd]
command = "clangd"
args = [
"--header-insertion=never",
"--compile-commands-dir=build"
]
44 changes: 0 additions & 44 deletions CMakeLists.txt

This file was deleted.

3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
hooks:
chmod +x scripts/hooks/pre-commit
cd scripts/hooks && ln -sfr ./pre-commit ../../.git/hooks/pre-commit
64 changes: 63 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,63 @@
# volta
# Volta

Volta is a lightweight, energy-aware monitoring platform for tracking system and hardware metrics in real time.

It follows a classic **Agent → Server → Dashboard** model:

- One or more **Agents** (C++) run on monitored machines, sample low-level hardware/system metrics and stream them to a single configured server over **gRPC**.
- The **Server** (Go) aggregates metrics from all connected agents and exposes them to clients over **WebSockets**.
- The **Dashboard** (React) visualises live and historical metrics served by the Server.
For the full architecture, deployment models (local vs. remote) and the metric catalogue, see [docs/pl/ARCHITECTURE.md](docs/pl/ARCHITECTURE.md) and [docs/pl/METRICS.md](docs/pl/METRICS.md).

## Repository Structure

| Path | Component | Stack | Description |
|---|---|---|---|
| [`sources/agent`](sources/agent) | Agent | C++20, CMake, vcpkg | Collects CPU/GPU power and standard system metrics; streams them to the server. |
| [`sources/server`](sources/server) | Server | Go | Central aggregation point; gRPC ingest, REST + WebSocket API for the dashboard. |
| [`sources/dashboard`](sources/dashboard) | Dashboard | TypeScript, React, Vite | Web UI for visualising live and historical agent metrics. |
| [`sources/proto`](sources/proto) | Proto | Protocol Buffers | Shared gRPC contract between Agent and Server. |
| [`docs`](docs) | Docs | Markdown | Architecture, metrics and other supporting documentation. |

## Maintainers

- **Agent** — @FW-Nagorko
- **Server** — @kox13
- **Dashboard** — @patryk-przybysz

## Development Setup

### 1. Initial Requirements

- **Git**
- **Make**
- Component-specific toolchains — see [`sources/agent/README.md`](sources/agent/README.md), [`sources/server/README.md`](sources/server/README.md) and [`sources/dashboard/README.md`](sources/dashboard/README.md)

### 2. Clone the Repository

```bash
git clone https://github.com/monvit/volta.git
cd volta
```

### 3. Run a Component

Follow the dedicated setup steps in respective READMEs.

- [Agent](/sources/agent/README.md)
- [Server](/sources/server/README.md)
- [Dashboard](/sources/dashboard/README.md)

### 4. Git Hooks (Optional)

```bash
make hooks
```

## Continuous Integration

Each component is linted, built and tested independently and only on relevant changes — see [`.github/workflows`](.github/workflows) (`agent_ci.yml`, `server_ci.yml`, `dashboard_ci.yml`).

## License

Volta is licensed under the [Apache License 2.0](LICENSE).
22 changes: 0 additions & 22 deletions libs/proto/volta.proto

This file was deleted.

Loading
Loading