mirror of
https://github.com/moghtech/komodo.git
synced 2026-04-28 11:49:39 -05:00
run periphery as daemon
This commit is contained in:
11
.vscode/tasks.json
vendored
11
.vscode/tasks.json
vendored
@@ -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
101
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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>;
|
||||
|
||||
|
||||
@@ -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"] }
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user