Compare commits

..

1 Commits

Author SHA1 Message Date
1371e0e637 reconfigure tools 2023-12-01 13:40:27 +11:00
17 changed files with 17 additions and 262 deletions

View File

@ -1,8 +1,8 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
{
"name": "Ubuntu Dev",
"image": "ubuntu-dev:user",
"name": "Alpine Dev",
"image": "alpine-dev:user",
"customizations": {
"vscode": {
"extensions": [

1
.gitignore vendored
View File

@ -1,2 +1 @@
/target
/coba.txt

124
Cargo.lock generated
View File

@ -107,17 +107,6 @@ version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
[[package]]
name = "getrandom"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "gimli"
version = "0.28.0"
@ -130,12 +119,6 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "itoa"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -158,12 +141,6 @@ dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "memchr"
version = "2.6.4"
@ -264,12 +241,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "proc-macro2"
version = "1.0.69"
@ -288,36 +259,6 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]]
name = "redox_syscall"
version = "0.4.1"
@ -397,17 +338,6 @@ dependencies = [
"libc",
]
[[package]]
name = "simplelog"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369"
dependencies = [
"log",
"termcolor",
"time",
]
[[package]]
name = "smallvec"
version = "1.11.2"
@ -435,15 +365,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "termcolor"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
version = "1.0.50"
@ -471,13 +392,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
dependencies = [
"deranged",
"itoa",
"libc",
"num_threads",
"powerfmt",
"serde",
"time-core",
"time-macros",
]
[[package]]
@ -486,15 +405,6 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
dependencies = [
"time-core",
]
[[package]]
name = "tokio"
version = "1.34.0"
@ -550,37 +460,6 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.48.0"
@ -653,11 +532,8 @@ version = "0.1.0"
dependencies = [
"anyhow",
"lazy_static",
"log",
"nix",
"rand",
"regex",
"simplelog",
"thiserror",
"time",
"tokio",

View File

@ -5,28 +5,12 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[[bin]]
name = "wmtest-helper-dummy"
path = "src/bin/test-helper/dummy.rs"
[[bin]]
name = "wmtest-helper-spawner"
path = "src/bin/test-helper/spawner.rs"
[[bin]]
name = "wmtest-helper-log"
path = "src/bin/test-helper/log.rs"
[dependencies]
anyhow = "1.0.75"
lazy_static = "1.4.0"
log = { version = "0.4.20", features = ["std"]}
nix = {version = "0.27.1", features = ["process", "signal", "fs"]}
rand = "0.8.5"
regex = "1.10.2"
simplelog = "0.12.1"
thiserror = "1.0.50"
time = { version = "0.3.30", features = ["local-offset", "macros"]}
time = { version = "0.3.30", features = ["local-offset"]}
tokio = { version = "1.34.0", features = ["full"] }
tokio-util = "0.7.10"

View File

@ -1,6 +1,6 @@
mod init;
use std::error;
use wingmate_rs::init;
#[tokio::main]
async fn main() -> Result<(), Box<dyn error::Error>> {

View File

@ -1,15 +0,0 @@
use std::{env, thread, time};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let myi: u64;
let args: Vec<String> = env::args().collect();
if args.len() > 1 {
myi = args[1].parse().unwrap();
thread::sleep(time::Duration::from_secs(myi));
} else {
return Err(anyhow::anyhow!("invalid arguments").into());
}
Ok(())
}

View File

@ -1,19 +0,0 @@
use std::env;
use std::fs;
use std::io;
use std::io::Write;
use time::OffsetDateTime;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let args: Vec<String> = env::args().collect();
if args.len() == 3 {
let file = fs::OpenOptions::new().create(true).append(true).open(&args[1])?;
let mut buf = io::BufWriter::new(file);
let local_time = OffsetDateTime::now_local()?;
buf.write_all(format!("{} {}\n", local_time, &args[2]).as_bytes())?;
} else {
return Err(anyhow::anyhow!("invalid argument").into());
}
Ok(())
}

View File

@ -1,39 +0,0 @@
#[macro_use] extern crate log;
extern crate simplelog;
use simplelog::*;
use std::error::Error;
use std::fs::OpenOptions;
use std::process::Command;
use std::env;
use rand::Rng;
fn main() -> Result<(), Box<dyn Error>> {
let args: Vec<String> = env::args().collect();
let mut rng = rand::thread_rng();
let log_path = env::var("LOG_PATH")?;
let file = OpenOptions::new().append(true).create(true).open(log_path)?;
WriteLogger::init(LevelFilter::Debug, Config::default(), file)?;
if args.len() > 1 {
let x: u64 = args[1].parse()?;
for _i in 0..x {
let sleep_time = rng.gen_range(10..20);
info!("starting wmtest-helper-dummy {}", &sleep_time);
let child = Command::new("/usr/local/bin/wmtest-helper-dummy").arg(format!("{}", sleep_time)).spawn();
if let Err(e) = child {
error!("error spawning child: {e}");
}
}
let pause_time = rng.gen_range(5..10);
info!("going to sleep for {}", &pause_time);
std::thread::sleep(std::time::Duration::from_secs(pause_time));
} else {
return Err(anyhow::anyhow!("invalid arguments").into());
}
Ok(())
}

View File

@ -27,6 +27,6 @@ pub async fn start() -> Result<(), error::WingmateInitError> {
}
let config = config::Config::find(vec_search)?;
// dbg!(&config);
dbg!(&config);
daemon::start(config).await
}

View File

@ -1,24 +1,21 @@
use time::error::IndeterminateOffset;
use tokio::task::JoinSet;
use tokio::process::{Command, Child};
use tokio_util::sync::CancellationToken;
use tokio::select;
use tokio::io::Result as tokio_result;
use tokio::time::{sleep, interval};
use std::env;
use std::time::Duration;
use std::process::ExitStatus;
use nix::sys::signal::{kill, Signal};
use nix::errno::Errno;
use nix::unistd::Pid;
use anyhow::{Context, anyhow};
use time::{OffsetDateTime, Duration as TimeDur, Weekday, UtcOffset};
use time::{OffsetDateTime, Duration as TimeDur, Weekday};
use crate::init::config;
use crate::init::error::{WingmateInitError, CronConfigError};
const CRON_TRIGGER_WAIT_SECS: u64 = 20;
const ENV_UTC_OFFSET: &'static str = "WINGMATE_TIME_OFFSET";
pub fn start_services(ts: &mut JoinSet<Result<(), WingmateInitError>>, cfg: &config::Config, cancel: CancellationToken)
-> Result<(), WingmateInitError> {
@ -114,11 +111,9 @@ fn result_match(result: tokio_result<ExitStatus>) -> Result<(), anyhow::Error> {
pub fn start_cron(ts: &mut JoinSet<Result<(), WingmateInitError>>, cfg: &config::Config, cancel: CancellationToken)
-> Result<(), WingmateInitError> {
dbg!("cron: starting");
for c_ in cfg.get_cron_iter() {
let cron = c_.clone();
let in_loop_cancel = cancel.clone();
dbg!("cron: item", c_);
ts.spawn(async move {
if cron.day_of_month != config::CronTimeFieldSpec::Any
@ -126,35 +121,18 @@ pub fn start_cron(ts: &mut JoinSet<Result<(), WingmateInitError>>, cfg: &config:
return Err(WingmateInitError::CronConfig { source: CronConfigError::ClashingConfig });
}
dbg!("cron: async task spawned");
let cron = cron.clone();
// let cron = cron.clone();
let mut cron_interval = interval(Duration::from_secs(CRON_TRIGGER_WAIT_SECS));
let mut cron_procs: JoinSet<Result<(), WingmateInitError>> = JoinSet::new();
let mut last_running: Option<OffsetDateTime> = None;
'continuous: loop {
let cron = cron.clone();
let cron_proc_cancel = in_loop_cancel.clone();
dbg!("cron: single: in loop", &cron.command);
let mut flag = true;
let tr: Result<OffsetDateTime, IndeterminateOffset>;
if let Ok(offset) = env::var(ENV_UTC_OFFSET) {
if let Ok(i_off) = offset.parse::<i8>() {
let utc_time = OffsetDateTime::now_utc().to_offset(UtcOffset::from_hms(i_off, 0, 0).unwrap());
tr = Ok(utc_time);
} else {
tr = OffsetDateTime::now_local();
}
} else {
tr = OffsetDateTime::now_local();
}
// let tr = OffsetDateTime::now_local();
if let Ok(local_time) = tr {
dbg!("cron: current local time", &local_time);
if let Ok(local_time) = OffsetDateTime::now_local() {
if let Some(last) = last_running {
dbg!("cron: last runing instance", &last);
if local_time - last < TimeDur::minutes(1) {
flag = false;
} else {
@ -163,25 +141,14 @@ pub fn start_cron(ts: &mut JoinSet<Result<(), WingmateInitError>>, cfg: &config:
cron.day_of_month.is_match(local_time.day()) &&
cron.day_of_week.is_match(weekday_map(local_time.weekday()));
}
} else {
flag = flag && cron.minute.is_match(local_time.minute()) &&
cron.hour.is_match(local_time.hour()) &&
cron.day_of_month.is_match(local_time.day()) &&
cron.day_of_week.is_match(weekday_map(local_time.weekday()));
}
if flag {
dbg!("cron: timing: hit: {}", &cron.command);
last_running = Some(local_time);
cron_procs.spawn(async move {
run_cron_command(cron.command.clone(), cron_proc_cancel).await
});
}
} else {
dbg!("cron: unexpected error");
if let Err(e) = tr {
dbg!(e);
}
}
if cron_procs.is_empty() {
@ -242,7 +209,6 @@ async fn run_cron_command(command: String, cancel: CancellationToken) -> Result<
}
}
dbg!("cron: in running command");
if args.is_empty() {
return Err(WingmateInitError::Other { source: anyhow!("parsed as empty: {}", command) });
}

View File

@ -75,11 +75,14 @@ pub enum CronConfigError {
#[error("setting day of week and day of month at the same time will lead to unexpected behavior")]
ClashingConfig,
// #[error("something went wrong")]
// Other {
// #[source]
// source: anyhow::Error,
// }
#[error("when setting time for higher order, the smallest (minute) muste be set")]
MissingMinute,
#[error("something went wrong")]
Other {
#[source]
source: anyhow::Error,
}
}
#[derive(Error,Debug)]