added .env readability
This commit is contained in:
18
.github/workflows/build.yml
vendored
18
.github/workflows/build.yml
vendored
@@ -46,10 +46,6 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Clean up containers
|
|
||||||
run: |
|
|
||||||
docker ps -aq | xargs docker rm -f
|
|
||||||
|
|
||||||
native-build:
|
native-build:
|
||||||
name: Native Linux Build
|
name: Native Linux Build
|
||||||
needs: detect-project
|
needs: detect-project
|
||||||
@@ -88,10 +84,6 @@ jobs:
|
|||||||
name: linux-binary
|
name: linux-binary
|
||||||
path: ${{ needs.detect-project.outputs.project-dir }}/target/x86_64-unknown-linux-gnu/release/${{ needs.detect-project.outputs.project-name }}
|
path: ${{ needs.detect-project.outputs.project-dir }}/target/x86_64-unknown-linux-gnu/release/${{ needs.detect-project.outputs.project-name }}
|
||||||
|
|
||||||
- name: Clean up containers
|
|
||||||
run: |
|
|
||||||
docker ps -aq | xargs docker rm -f
|
|
||||||
|
|
||||||
windows-cross:
|
windows-cross:
|
||||||
name: Windows Cross-Compile
|
name: Windows Cross-Compile
|
||||||
needs: detect-project
|
needs: detect-project
|
||||||
@@ -129,10 +121,6 @@ jobs:
|
|||||||
name: windows-binary
|
name: windows-binary
|
||||||
path: ${{ needs.detect-project.outputs.project-dir }}/target/x86_64-pc-windows-gnu/release/${{ needs.detect-project.outputs.project-name }}.exe
|
path: ${{ needs.detect-project.outputs.project-dir }}/target/x86_64-pc-windows-gnu/release/${{ needs.detect-project.outputs.project-name }}.exe
|
||||||
|
|
||||||
- name: Clean up containers
|
|
||||||
run: |
|
|
||||||
docker ps -aq | xargs docker rm -f
|
|
||||||
|
|
||||||
docker-build:
|
docker-build:
|
||||||
name: Build Linux Docker Image
|
name: Build Linux Docker Image
|
||||||
needs: [native-build, windows-cross, detect-project]
|
needs: [native-build, windows-cross, detect-project]
|
||||||
@@ -175,8 +163,4 @@ jobs:
|
|||||||
echo "Tagging Linux Docker image"
|
echo "Tagging Linux Docker image"
|
||||||
docker tag ${{ env.IMAGE_NAME }}:linux-${{ env.TAG }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}
|
docker tag ${{ env.IMAGE_NAME }}:linux-${{ env.TAG }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}
|
||||||
echo "Pushing Linux Docker image to registry: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}"
|
echo "Pushing Linux Docker image to registry: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}"
|
||||||
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:linux-${{ env.TAG }}
|
||||||
|
|
||||||
- name: Clean up containers
|
|
||||||
run: |
|
|
||||||
docker ps -aq | xargs docker rm -f
|
|
@@ -19,6 +19,10 @@ nvml-wrapper = "0.11"
|
|||||||
nvml-wrapper-sys = "0.9.0"
|
nvml-wrapper-sys = "0.9.0"
|
||||||
anyhow = "1.0.98"
|
anyhow = "1.0.98"
|
||||||
|
|
||||||
|
# Docker .env loading
|
||||||
|
config = "0.13"
|
||||||
|
dotenvy = "0.15"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
winapi = { version = "0.3", features = ["winuser", "pdh", "ifmib", "iphlpapi", "winerror" ,"wbemcli", "combaseapi"] }
|
winapi = { version = "0.3", features = ["winuser", "pdh", "ifmib", "iphlpapi", "winerror" ,"wbemcli", "combaseapi"] }
|
||||||
systemstat = "0.2.5"
|
systemstat = "0.2.5"
|
||||||
|
22
WatcherAgent/src/config.rs
Normal file
22
WatcherAgent/src/config.rs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
use config::Config;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
use crate::models::WatcherConfig;
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Clone)]
|
||||||
|
pub struct AppConfig {
|
||||||
|
pub watcher: WatcherConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AppConfig {
|
||||||
|
pub fn from_env() -> Result<Self, config::ConfigError> {
|
||||||
|
// Load .env file (works in both Docker and local development)
|
||||||
|
dotenvy::dotenv().ok();
|
||||||
|
|
||||||
|
let mut cfg = config::Config::builder()
|
||||||
|
.add_source(config::Environment::with_prefix("WATCHER").separator("_"))
|
||||||
|
.build()?;
|
||||||
|
|
||||||
|
cfg.try_deserialize()
|
||||||
|
}
|
||||||
|
}
|
@@ -2,11 +2,13 @@
|
|||||||
/// This agent collects hardware metrics and sends them to a backend server.
|
/// This agent collects hardware metrics and sends them to a backend server.
|
||||||
/// It supports CPU, GPU, RAM, disk, and network metrics.
|
/// It supports CPU, GPU, RAM, disk, and network metrics.
|
||||||
pub mod api;
|
pub mod api;
|
||||||
|
pub mod config;
|
||||||
pub mod hardware;
|
pub mod hardware;
|
||||||
pub mod metrics;
|
pub mod metrics;
|
||||||
pub mod models;
|
pub mod models;
|
||||||
|
|
||||||
pub use crate::hardware::gpu;
|
use config::AppConfig;
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::marker::Send;
|
use std::marker::Send;
|
||||||
use std::marker::Sync;
|
use std::marker::Sync;
|
||||||
@@ -25,10 +27,11 @@ async fn flatten<T>(
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
let server_url = "http://localhost:5000";
|
let config = AppConfig::from_env().expect("Failed to load configuration");
|
||||||
|
let server_url = config.watcher.server_url.clone();
|
||||||
|
|
||||||
// Registration
|
// Registration
|
||||||
let (server_id, ip) = match api::register_with_server(server_url).await {
|
let (server_id, ip) = match api::register_with_server(&server_url).await {
|
||||||
Ok((id, ip)) => (id, ip),
|
Ok((id, ip)) => (id, ip),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("Fehler bei der Registrierung am Server: {e}");
|
eprintln!("Fehler bei der Registrierung am Server: {e}");
|
||||||
|
@@ -72,3 +72,10 @@ pub struct HardwareDto {
|
|||||||
pub ram_size: f64,
|
pub ram_size: f64,
|
||||||
pub ip_address: String,
|
pub ip_address: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Clone)]
|
||||||
|
pub struct WatcherConfig {
|
||||||
|
pub server_url: String,
|
||||||
|
pub heartbeat_interval_secs: u64,
|
||||||
|
pub metrics_interval_secs: u64,
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user