parent
57ae564fd7
commit
8c5e048b7c
17 changed files with 150 additions and 66 deletions
@ -0,0 +1,15 @@ |
|||||||
|
[package] |
||||||
|
name = "u_panel" |
||||||
|
version = "0.1.0" |
||||||
|
authors = ["plazmoid <kronos44@mail.ru>"] |
||||||
|
edition = "2018" |
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
tokio = { version = "*", features = ["macros", "rt-core", "process", "blocking"] } |
||||||
|
log = "^0.4" |
||||||
|
env_logger = "0.7.1" |
||||||
|
uuid = "0.8.1" |
||||||
|
reqwest = { version = "0.10.7", features = ["json"] } |
||||||
|
u_lib = { version = "*", path = "../../lib/u_lib" } |
@ -0,0 +1,27 @@ |
|||||||
|
use std::env::args; |
||||||
|
use std::future::Future; |
||||||
|
use u_lib::client::network::ClientHandler; |
||||||
|
|
||||||
|
fn get_cmd_handler(cli_handler: &ClientHandler, method: &str) -> Option<fn()> { |
||||||
|
match method { |
||||||
|
"ls" => Some(cli_handler.list()), |
||||||
|
_ => None |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[tokio::main] |
||||||
|
async fn main() -> Result<(), &'static str> { |
||||||
|
//daemonize();
|
||||||
|
let mut raw_args = args(); |
||||||
|
let method = match raw_args.nth(1) { |
||||||
|
Some(m) => m, |
||||||
|
None => return Err("Method required") |
||||||
|
}; |
||||||
|
let instance = ClientHandler::new(); |
||||||
|
let future = match get_cmd_handler(&instance, &method) { |
||||||
|
Some(c) => c, |
||||||
|
None => return Err("Unknown method") |
||||||
|
}; |
||||||
|
future.await; |
||||||
|
Ok(()) |
||||||
|
} |
@ -1,5 +1,5 @@ |
|||||||
[package] |
[package] |
||||||
name = "u-run" |
name = "u_run" |
||||||
version = "0.1.0" |
version = "0.1.0" |
||||||
authors = ["plazmoid <kronos44@mail.ru>"] |
authors = ["plazmoid <kronos44@mail.ru>"] |
||||||
edition = "2018" |
edition = "2018" |
@ -1,5 +1,5 @@ |
|||||||
[package] |
[package] |
||||||
name = "u-server" |
name = "u_server" |
||||||
version = "0.1.0" |
version = "0.1.0" |
||||||
authors = ["plazmoid <kronos44@mail.ru>"] |
authors = ["plazmoid <kronos44@mail.ru>"] |
||||||
edition = "2018" |
edition = "2018" |
@ -0,0 +1,4 @@ |
|||||||
|
pub mod network; |
||||||
|
pub mod client; |
||||||
|
|
||||||
|
pub use client::*; |
@ -1,7 +1,8 @@ |
|||||||
use u_lib::{ |
use crate::{ |
||||||
MASTER_SERVER, |
MASTER_SERVER, |
||||||
MASTER_PORT, |
MASTER_PORT, |
||||||
contracts::* |
contracts::*, |
||||||
|
client::* |
||||||
}; |
}; |
||||||
use reqwest::{ |
use reqwest::{ |
||||||
Client, |
Client, |
@ -0,0 +1,15 @@ |
|||||||
|
use { |
||||||
|
super::*, |
||||||
|
tokio::sync::Mutex, |
||||||
|
std::sync::Arc, |
||||||
|
std::collections::HashMap, |
||||||
|
uuid::Uuid, |
||||||
|
crate::client::* |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
pub type JobPool = Vec<Box<dyn Job>>; |
||||||
|
pub type JobResult = Result<Vec<u8>, Vec<u8>>; |
||||||
|
|
||||||
|
pub type CliStorage = HashMap<Uuid, UClient>; |
||||||
|
pub type SharedStorage = Arc<Mutex<CliStorage>>; |
@ -1,55 +1,58 @@ |
|||||||
use std::process::{ |
use std::{ |
||||||
Command, |
process::Command |
||||||
Output |
|
||||||
}; |
}; |
||||||
|
//use tokio::process::Command;
|
||||||
pub type JobResult<'res> = Result<&'res [u8], &'res [u8]>; |
use super::*; |
||||||
|
|
||||||
pub trait Job { |
pub trait Job { |
||||||
async fn run(&mut self); |
fn run(&mut self); |
||||||
fn result(&self) -> JobResult; |
fn get_result(&self) -> &JobResult; |
||||||
} |
} |
||||||
|
|
||||||
pub struct ShellJob<'cmd> { |
pub struct ShellJob { |
||||||
pub result: JobResult<'cmd>, |
pub result: JobResult, |
||||||
pub cmd: &'cmd str, |
pub cmd: String, |
||||||
pub args: Vec<&'cmd str> |
pub args: Vec<String> |
||||||
} |
} |
||||||
|
|
||||||
impl ShellJob { |
impl ShellJob { |
||||||
pub fn from_raw(raw_cmd: &str) -> Self { |
pub fn from_raw(raw_cmd: String) -> Self { |
||||||
let cmd_parts = raw_cmd.split(" "); |
let mut cmd_parts = raw_cmd |
||||||
|
.split(" ") |
||||||
|
.map(String::from) |
||||||
|
.collect::<Vec<String>>(); |
||||||
|
let args: Vec<_> = cmd_parts.drain(1..).collect(); |
||||||
Self { |
Self { |
||||||
cmd: cmd_parts[0], |
cmd: cmd_parts.into_iter().nth(1).unwrap(), |
||||||
args: cmd_parts[1..], |
args, |
||||||
result: Err("Did not run".as_bytes()) |
result: Err(b"Did not run".to_vec()) |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
impl Job for ShellJob { |
impl Job for ShellJob{ |
||||||
async fn run(&mut self) { |
fn run(&mut self) { |
||||||
let result = Command::new(self.cmd) |
let result = Command::new(&self.cmd) |
||||||
.args(&self.args) |
.args(&self.args) |
||||||
.output(); |
.output(); |
||||||
self.result = match result { |
self.result = match result { |
||||||
Ok(output) => { |
Ok(output) => { |
||||||
if output.status != 0 { |
if output.status.success() { |
||||||
Err(&output.stderr) |
Ok(output.stdout.to_vec()) |
||||||
} else { |
} else { |
||||||
Ok(&output.stdout) |
Err(output.stderr.to_vec()) |
||||||
} |
} |
||||||
} |
} |
||||||
Err(e) => e.to_string().as_bytes() |
Err(e) => Err(e.to_string().into_bytes()) |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
fn result(&self) -> JobResult { |
fn get_result(&self) -> &JobResult { |
||||||
self.result |
&self.result |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
/* |
|
||||||
pub struct PyJob { |
|
||||||
|
|
||||||
}*/ |
/* pub struct PyJob {
|
||||||
|
|
||||||
|
} */ |
@ -1,9 +1,12 @@ |
|||||||
pub mod config; |
pub mod config; |
||||||
pub mod contracts; |
pub mod contracts; |
||||||
pub mod utils; |
pub mod utils; |
||||||
|
pub mod client; |
||||||
|
|
||||||
pub use utils::*; |
pub use { |
||||||
pub use config::*; |
utils::*, |
||||||
|
config::*, |
||||||
|
}; |
||||||
|
|
||||||
#[macro_use] |
#[macro_use] |
||||||
extern crate lazy_static; |
extern crate lazy_static; |
||||||
|
Loading…
Reference in new issue