run periphery as daemon

This commit is contained in:
mbecker20
2022-12-25 22:59:03 +00:00
parent 46dc663385
commit 4a99ccc1a9
7 changed files with 135 additions and 37 deletions

11
.vscode/tasks.json vendored
View File

@@ -26,7 +26,7 @@
"run core",
"yarn: start frontend"
],
"problemMatcher": [],
"problemMatcher": []
},
{
"type": "shell",
@@ -58,6 +58,15 @@
"cwd": "${workspaceFolder}/periphery"
}
},
{
"type": "shell",
"command": "cargo run -- -d",
"label": "run periphery daemon",
"options": {
"cwd": "${workspaceFolder}/periphery"
},
"problemMatcher": []
},
{
"type": "cargo",
"command": "run",

101
Cargo.lock generated
View File

@@ -228,6 +228,12 @@ dependencies = [
"serde_with",
]
[[package]]
name = "boxfnonce"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426"
[[package]]
name = "bson"
version = "2.4.0"
@@ -314,11 +320,26 @@ checksum = "8e67816e006b17427c9b4386915109b494fec2d929c63e3bd3561234cbf1bf1e"
dependencies = [
"atty",
"bitflags",
"clap_derive",
"clap_lex",
"once_cell",
"strsim",
"termcolor",
]
[[package]]
name = "clap_derive"
version = "4.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16a1b0f6422af32d5da0c58e2703320f379216ee70198241c84173a8c5ac28f3"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.3.0"
@@ -459,6 +480,16 @@ dependencies = [
"typenum",
]
[[package]]
name = "daemonize"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70c24513e34f53b640819f0ac9f705b673fcf4006d7aab8778bee72ebfc89815"
dependencies = [
"boxfnonce",
"libc",
]
[[package]]
name = "darling"
version = "0.13.4"
@@ -1347,6 +1378,30 @@ dependencies = [
"serde_json",
]
[[package]]
name = "monitor_periphery"
version = "0.1.0"
dependencies = [
"anyhow",
"async_timing_util",
"axum",
"bollard",
"clap",
"daemonize",
"dotenv",
"envy",
"helpers",
"monitor_types",
"run_command",
"serde",
"serde_derive",
"serde_json",
"sysinfo",
"tokio",
"toml",
"tower",
]
[[package]]
name = "monitor_types"
version = "0.1.1"
@@ -1626,28 +1681,6 @@ version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "periphery"
version = "0.1.0"
dependencies = [
"anyhow",
"async_timing_util",
"axum",
"bollard",
"dotenv",
"envy",
"helpers",
"monitor_types",
"run_command",
"serde",
"serde_derive",
"serde_json",
"sysinfo",
"tokio",
"toml",
"tower",
]
[[package]]
name = "periphery_client"
version = "0.1.0"
@@ -1704,6 +1737,30 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
]
[[package]]
name = "proc-macro2"
version = "1.0.47"

View File

@@ -16,7 +16,7 @@ pub struct PeripheryClient {
impl PeripheryClient {
pub async fn health_check(&self, server: &Server) -> anyhow::Result<String> {
self.get_text(server, "health")
self.get_text(server, "/health")
.await
.context("failed at health check on periphery")
}

View File

@@ -2,9 +2,7 @@ use std::collections::HashMap;
use ::diff::Diff;
use anyhow::Context;
use bson::serde_helpers::hex_string_as_object_id;
use chrono::{DateTime, SecondsFormat, Utc};
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use strum_macros::{Display, EnumString};
use typeshare::typeshare;
@@ -32,8 +30,6 @@ pub use server::*;
pub use update::*;
pub use user::*;
use crate::diff::*;
#[typeshare]
pub type PermissionsMap = HashMap<String, PermissionLevel>;

View File

@@ -1,5 +1,5 @@
[package]
name = "periphery"
name = "monitor_periphery"
version = "0.1.0"
edition = "2021"
@@ -22,3 +22,5 @@ anyhow = "1.0"
envy = "0.4"
sysinfo = "0.27.0"
toml = "0.5"
daemonize = "0.4"
clap = { version = "4.0", features = ["derive"] }

View File

@@ -1,6 +1,7 @@
use std::sync::Arc;
use axum::Extension;
use clap::Parser;
use dotenv::dotenv;
use helpers::parse_config_file;
use serde::Deserialize;
@@ -8,24 +9,38 @@ use types::PeripheryConfig;
use crate::PeripheryConfigExtension;
#[derive(Parser)]
pub struct Args {
#[arg(short, long)]
pub daemon: bool,
#[arg(long, default_value = "~/.monitor/periphery.log.out")]
pub stdout: String,
#[arg(long, default_value = "~/.monitor/periphery.log.err")]
pub stderr: String,
}
#[derive(Deserialize)]
struct Env {
#[serde(default = "default_config_path")]
config_path: String,
}
pub fn load() -> (u16, PeripheryConfigExtension) {
pub fn load() -> (Args, u16, PeripheryConfigExtension) {
dotenv().ok();
let env: Env = envy::from_env().expect("failed to parse env");
let args = Args::parse();
let config: PeripheryConfig =
parse_config_file(&env.config_path).expect("failed to parse config file");
let _ = std::fs::create_dir(&config.repo_dir);
print_startup_log(&config);
(config.port, Extension(Arc::new(config)))
print_startup_log(&args, &config);
(args, config.port, Extension(Arc::new(config)))
}
fn print_startup_log(config: &PeripheryConfig) {
fn print_startup_log(args: &Args, config: &PeripheryConfig) {
println!("starting montior periphery on port {}", config.port);
if args.daemon {
println!("daemonize mode enabled");
}
}
fn default_config_path() -> String {

View File

@@ -1,9 +1,10 @@
// #![allow(unused)]
use std::sync::Arc;
use std::{env, fs::File, sync::Arc};
use ::helpers::get_socket_addr;
use axum::Extension;
use daemonize::Daemonize;
use types::PeripheryConfig;
mod api;
@@ -12,10 +13,28 @@ mod helpers;
type PeripheryConfigExtension = Extension<Arc<PeripheryConfig>>;
#[tokio::main]
async fn main() {
let (port, config) = config::load();
fn main() {
let (args, port, config) = config::load();
let home = env::var("HOME").unwrap();
if args.daemon {
let stdout = File::create(args.stdout.replace("~", &home)).unwrap();
let stderr = File::create(args.stderr.replace("~", &home)).unwrap();
let daemon = Daemonize::new()
.stdout(stdout)
.stderr(stderr);
match daemon.start() {
Ok(_) => println!("process sucessfully started"),
Err(e) => eprintln!("Error, {}", e),
}
}
run_periphery_server(port, config)
}
#[tokio::main]
async fn run_periphery_server(port: u16, config: PeripheryConfigExtension) {
let app = api::router(&config).layer(config);
axum::Server::bind(&get_socket_addr(port))