changed the daemonize
This commit is contained in:
parent
651b9ba5cd
commit
c8c618015a
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -558,6 +558,15 @@ dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "daemonize"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.20.11"
|
||||
@ -2007,6 +2016,7 @@ dependencies = [
|
||||
"clap 4.5.60",
|
||||
"crc",
|
||||
"crc32fast",
|
||||
"daemonize",
|
||||
"dashmap 6.1.0",
|
||||
"dns-lookup",
|
||||
"etherparse",
|
||||
|
||||
@ -35,6 +35,7 @@ rustls-pemfile = "2.2.0"
|
||||
clap = { version = "4.5.60", features = ["derive", "env"] }
|
||||
rpassword = "7.4.0"
|
||||
serde_json = "1.0.149"
|
||||
daemonize = "0.5.0"
|
||||
# rolling-file = { path = "../rolling-file" }
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
mod api;
|
||||
|
||||
use std::fs::File;
|
||||
use std::process;
|
||||
|
||||
use std::env;
|
||||
use clap::Parser;
|
||||
use daemonize::Daemonize;
|
||||
use punchnet::CachedLoginInfo;
|
||||
use punchnet::CommandLineInput2;
|
||||
use punchnet::Commands;
|
||||
@ -21,6 +23,7 @@ use punchnet::CommandLine;
|
||||
use punchnet::CommandLineInput;
|
||||
use sdlan_sn_rs::log;
|
||||
|
||||
use sdlan_sn_rs::utils::Mac;
|
||||
use sdlan_sn_rs::utils::Result;
|
||||
use sdlan_sn_rs::utils::create_or_load_uuid;
|
||||
use tokio::io::AsyncWriteExt;
|
||||
@ -95,81 +98,12 @@ fn parse_login_result(res: Result<LoginResponse>) -> LoginData {
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
set_base_dir("/usr/local/punchnet");
|
||||
let _guard = log::init_log(&format!("{}/.output", get_base_dir()));
|
||||
|
||||
let client_id = create_or_load_uuid(&format!("{}/.id", get_base_dir()), None).unwrap();
|
||||
|
||||
let test_token = "49722584273728716817720074439183";
|
||||
|
||||
let mac = create_or_load_mac();
|
||||
|
||||
let system = "linux";
|
||||
let version = "1.0.0";
|
||||
|
||||
// let cmd = CommandLineInput::from_args();
|
||||
let cmd = CommandLineInput2::parse();
|
||||
// println!("port is {}", cmd.port);
|
||||
|
||||
let connect_info: ConnectData;
|
||||
let remembered: CachedLoginInfo;
|
||||
|
||||
match cmd.cmd {
|
||||
Commands::Login(user) => {
|
||||
// TODO: do login with user
|
||||
let _ = parse_login_result(
|
||||
login_with_user_pass(TEST_PREFIX, &client_id, &user.username, &user.password, mac, system, version).await
|
||||
);
|
||||
process::exit(0);
|
||||
}
|
||||
Commands::TokenLogin(tk) => {
|
||||
let _ = parse_login_result(
|
||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||
);
|
||||
process::exit(0);
|
||||
}
|
||||
Commands::AutoRun(tk) => {
|
||||
let mut remembered_token = get_access_token();
|
||||
if remembered_token.is_none() {
|
||||
let data = parse_login_result(
|
||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||
);
|
||||
remembered_token = Some(CachedLoginInfo{
|
||||
access_token: data.access_token,
|
||||
username: data.username,
|
||||
user_type: data.user_type,
|
||||
audit: data.audit,
|
||||
network_id: data.network_id,
|
||||
network_name: data.network_name,
|
||||
});
|
||||
}
|
||||
|
||||
remembered = remembered_token.unwrap();
|
||||
|
||||
connect_info = parse_connect_result(
|
||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||
);
|
||||
}
|
||||
Commands::Start => {
|
||||
let remembered_token = get_access_token();
|
||||
if remembered_token.is_none() {
|
||||
eprintln!("not logged in, should login with user/pass or token first");
|
||||
process::exit(-2);
|
||||
}
|
||||
|
||||
remembered = remembered_token.unwrap();
|
||||
|
||||
connect_info = parse_connect_result(
|
||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||
);
|
||||
}
|
||||
Commands::Stop => {
|
||||
process::exit(-4);
|
||||
}
|
||||
}
|
||||
|
||||
async fn daemonize_me(
|
||||
connect_info: ConnectData,
|
||||
remembered: CachedLoginInfo,
|
||||
client_id: String,
|
||||
mac: Mac,
|
||||
) {
|
||||
println!("identity_id = {}", connect_info.identity_id);
|
||||
|
||||
let self_host_name = connect_info.hostname;
|
||||
@ -318,4 +252,108 @@ async fn main() {
|
||||
// started = !started;
|
||||
// */
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
set_base_dir("/usr/local/punchnet");
|
||||
let _guard = log::init_log(&format!("{}/.output", get_base_dir()));
|
||||
|
||||
let client_id = create_or_load_uuid(&format!("{}/.id", get_base_dir()), None).unwrap();
|
||||
|
||||
let test_token = "49722584273728716817720074439183";
|
||||
|
||||
let mac = create_or_load_mac();
|
||||
|
||||
let system = "linux";
|
||||
let version = "1.0.0";
|
||||
|
||||
// let cmd = CommandLineInput::from_args();
|
||||
let cmd = CommandLineInput2::parse();
|
||||
// println!("port is {}", cmd.port);
|
||||
|
||||
let connect_info: ConnectData;
|
||||
let remembered: CachedLoginInfo;
|
||||
|
||||
let should_daemonize: bool;
|
||||
|
||||
match cmd.cmd {
|
||||
Commands::Login(user) => {
|
||||
// TODO: do login with user
|
||||
let _ = parse_login_result(
|
||||
login_with_user_pass(TEST_PREFIX, &client_id, &user.username, &user.password, mac, system, version).await
|
||||
);
|
||||
process::exit(0);
|
||||
}
|
||||
Commands::TokenLogin(tk) => {
|
||||
let _ = parse_login_result(
|
||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||
);
|
||||
process::exit(0);
|
||||
}
|
||||
Commands::AutoRun(tk) => {
|
||||
let mut remembered_token = get_access_token();
|
||||
if remembered_token.is_none() {
|
||||
let data = parse_login_result(
|
||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||
);
|
||||
remembered_token = Some(CachedLoginInfo{
|
||||
access_token: data.access_token,
|
||||
username: data.username,
|
||||
user_type: data.user_type,
|
||||
audit: data.audit,
|
||||
network_id: data.network_id,
|
||||
network_name: data.network_name,
|
||||
});
|
||||
}
|
||||
|
||||
remembered = remembered_token.unwrap();
|
||||
|
||||
connect_info = parse_connect_result(
|
||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||
);
|
||||
should_daemonize = false;
|
||||
}
|
||||
Commands::Start => {
|
||||
let remembered_token = get_access_token();
|
||||
if remembered_token.is_none() {
|
||||
eprintln!("not logged in, should login with user/pass or token first");
|
||||
process::exit(-2);
|
||||
}
|
||||
|
||||
remembered = remembered_token.unwrap();
|
||||
|
||||
connect_info = parse_connect_result(
|
||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||
);
|
||||
should_daemonize = false;
|
||||
}
|
||||
Commands::Stop => {
|
||||
process::exit(-4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if should_daemonize {
|
||||
let daemonize = Daemonize::new()
|
||||
.pid_file("/tmp/punchnet.pid")
|
||||
.chown_pid_file(true)
|
||||
.working_directory(get_base_dir())
|
||||
.stdout(File::create("/tmp/punchnet.out").unwrap())
|
||||
.stderr(File::create("/tmp/punchnet.err").unwrap())
|
||||
.privileged_action(|| {
|
||||
|
||||
});
|
||||
match daemonize.start() {
|
||||
Ok(_) => {
|
||||
daemonize_me(connect_info, remembered, client_id, mac).await;
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("failed to daemonize: {}", e);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
daemonize_me(connect_info, remembered, client_id, mac).await;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user