adds initial user defined panels

This commit is contained in:
2025-12-23 16:41:21 -05:00
parent a110aa6376
commit ebbf864af9
33 changed files with 2188 additions and 370 deletions

View File

@@ -1,5 +1,6 @@
mod grpc;
mod http;
mod panels;
mod serialization;
mod telemetry;
mod uuid;
@@ -8,9 +9,13 @@ pub mod core {
tonic::include_proto!("core");
}
use crate::panels::PanelService;
use crate::telemetry::history::TelemetryHistoryService;
use crate::telemetry::management_service::TelemetryManagementService;
use log::error;
use log::{error, info};
use sqlx::sqlite::SqliteConnectOptions;
use sqlx::SqlitePool;
use std::path;
use std::sync::Arc;
use std::time::Duration;
use tokio::time::sleep;
@@ -26,18 +31,36 @@ pub async fn setup() -> anyhow::Result<()> {
});
}
let data_folder = path::absolute("data")?;
let telemetry_folder = data_folder.join("telemetry");
let database_url = data_folder.join("database.db");
info!("Opening Database: {database_url:?}");
let sqlite = SqlitePool::connect_with(
SqliteConnectOptions::new()
.filename(database_url)
.create_if_missing(true),
)
.await?;
sqlx::migrate!().run(&sqlite).await?;
let tlm = Arc::new(TelemetryManagementService::new(
TelemetryHistoryService::new()?,
TelemetryHistoryService::new(telemetry_folder)?,
)?);
let grpc_server = grpc::setup(cancellation_token.clone(), tlm.clone())?;
let result = http::setup(cancellation_token.clone(), tlm.clone()).await;
let panel_service = PanelService::new(sqlite.clone());
let result = http::setup(cancellation_token.clone(), tlm.clone(), panel_service).await;
cancellation_token.cancel();
result?; // result is dropped
grpc_server.await?; //grpc server is dropped
drop(cancellation_token); // All cancellation tokens are now dropped
sqlite.close().await;
// Perform cleanup functions - at this point all servers have stopped and we can be sure that cleaning things up is safe
for _ in 0..15 {
if Arc::strong_count(&tlm) != 1 {