pull_local_config + init_config_grub_mechanism (50%) + init_unix_listener
parent
e777571d12
commit
4c88b27d82
|
|
@ -2,13 +2,70 @@
|
||||||
// 1) check changes in unix-socket
|
// 1) check changes in unix-socket
|
||||||
// 2) save changes in local config file
|
// 2) save changes in local config file
|
||||||
use integr_structs::api::ApiConfig;
|
use integr_structs::api::ApiConfig;
|
||||||
use tokio::net::UnixListener;
|
use anyhow::{Error, Ok, Result};
|
||||||
use anyhow::Result;
|
use log::{info, warn};
|
||||||
|
use std::{fs, path::Path};
|
||||||
|
use serde_json::from_str;
|
||||||
|
use tokio::{io::AsyncReadExt, net::UnixListener};
|
||||||
|
use std::io;
|
||||||
|
use tokio::time::{sleep, Duration};
|
||||||
|
use std::result::Result::Ok as stdOk;
|
||||||
|
|
||||||
|
// todo! rewrite to use current_exe
|
||||||
|
pub async fn pull_local_config() -> Result<ApiConfig> {
|
||||||
|
let conf_path = std::env::current_exe()?;
|
||||||
|
let path = Path::new("config_api.json");
|
||||||
|
// return match conf_path.parent() {
|
||||||
|
// Some(dir) => {
|
||||||
|
// let config: ApiConfig = from_str(
|
||||||
|
// &fs::read_to_string(dir.join("config_api.json"))?
|
||||||
|
// )?;
|
||||||
|
// Ok(config)
|
||||||
|
// },
|
||||||
|
// None => Err(Error::msg("No local conf was found"))
|
||||||
|
// }
|
||||||
|
if path.exists() && path.is_file() {
|
||||||
|
let config: ApiConfig = from_str(
|
||||||
|
&fs::read_to_string("config_api.json")?
|
||||||
|
)?;
|
||||||
|
Ok(config)
|
||||||
|
} else {
|
||||||
|
Err(Error::msg("No local conf was found"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// for config pulling
|
// for config pulling
|
||||||
async fn init_api_grub_mechanism(config: ApiConfig) {
|
// ++++ reader to channel
|
||||||
|
async fn init_config_grub_mechanism(config: ApiConfig) -> Result<()> {
|
||||||
|
let server = init_unix_listener().await?;
|
||||||
|
//
|
||||||
|
info!("Listening Unix-Socket...");
|
||||||
|
let mut buffer = String::new();
|
||||||
|
//
|
||||||
|
loop {
|
||||||
|
if let stdOk((mut stream, _)) = server.accept().await {
|
||||||
|
if let Err(er) = stream.read_to_string(&mut buffer).await {
|
||||||
|
warn!("Cannot read config from stream due to {}", er);
|
||||||
|
sleep(Duration::from_millis(500)).await;
|
||||||
|
} else {
|
||||||
|
let config: Result<ApiConfig, serde_json::Error> = from_str(&buffer);
|
||||||
|
if let stdOk(conf) = config {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
async fn save_new_config() -> Result<()> {
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async fn init_unix_listener() {}
|
async fn init_unix_listener() -> Result<UnixListener> {
|
||||||
|
fs::remove_file("api-grub.sock")?;
|
||||||
|
Ok(UnixListener::bind("api-grub.sock")?)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue