Compare commits

...

5 Commits

Author SHA1 Message Date
d80ce6d52b Merge pull request 'feat: app node report' (#3) from app_engine_features into staging
Reviewed-on: #3
2025-04-16 00:24:31 +00:00
8b626f2f7d Merge pull request 'detailed clap version' (#2) from clap-version-shadow_rs into staging
Reviewed-on: #2
2025-04-15 09:53:01 +00:00
10d56e307b
feat: app node report
contract admin can report app node
2025-04-14 15:49:46 +05:30
d95e85cc4b
detailed clap version
add shadow-rs for build metadata
git commit hash, build time, branch etc, in version
2025-04-11 15:29:57 +05:30
60113bc538
fix println with eprintln for error 2025-04-03 13:22:41 +05:30
8 changed files with 177 additions and 16 deletions

151
Cargo.lock generated

@ -712,6 +712,38 @@ dependencies = [
"serde",
]
[[package]]
name = "camino"
version = "1.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3"
dependencies = [
"serde",
]
[[package]]
name = "cargo-platform"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
dependencies = [
"serde",
]
[[package]]
name = "cargo_metadata"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba"
dependencies = [
"camino",
"cargo-platform",
"semver 1.0.24",
"serde",
"serde_json",
"thiserror 2.0.11",
]
[[package]]
name = "cc"
version = "1.2.11"
@ -833,6 +865,26 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "const_format"
version = "0.2.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd"
dependencies = [
"const_format_proc_macros",
]
[[package]]
name = "const_format_proc_macros"
version = "0.2.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "core-foundation"
version = "0.9.4"
@ -1062,6 +1114,7 @@ dependencies = [
"serde",
"serde_json",
"serde_yaml",
"shadow-rs",
"tabled",
"thiserror 2.0.11",
"tokio",
@ -1521,6 +1574,19 @@ version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "git2"
version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5220b8ba44c68a9a7f7a7659e864dd73692e417ef0211bea133c7b74e031eeb9"
dependencies = [
"bitflags",
"libc",
"libgit2-sys",
"log",
"url",
]
[[package]]
name = "glob"
version = "0.3.2"
@ -1961,6 +2027,12 @@ version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
[[package]]
name = "is_debug"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407"
[[package]]
name = "is_terminal_polyfill"
version = "1.70.1"
@ -2069,6 +2141,18 @@ version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
[[package]]
name = "libgit2-sys"
version = "0.18.1+1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e"
dependencies = [
"cc",
"libc",
"libz-sys",
"pkg-config",
]
[[package]]
name = "libloading"
version = "0.8.6"
@ -2085,6 +2169,18 @@ version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "libz-sys"
version = "1.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d"
dependencies = [
"cc",
"libc",
"pkg-config",
"vcpkg",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.14"
@ -2215,6 +2311,15 @@ dependencies = [
"libm",
]
[[package]]
name = "num_threads"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
dependencies = [
"libc",
]
[[package]]
name = "object"
version = "0.36.7"
@ -3039,6 +3144,9 @@ name = "semver"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
dependencies = [
"serde",
]
[[package]]
name = "semver-parser"
@ -3149,6 +3257,21 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "shadow-rs"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d5625ed609cf66d7e505e7d487aca815626dc4ebb6c0dd07637ca61a44651a6"
dependencies = [
"cargo_metadata",
"const_format",
"git2",
"is_debug",
"serde_json",
"time",
"tzdb",
]
[[package]]
name = "shlex"
version = "1.3.0"
@ -3408,7 +3531,9 @@ checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
dependencies = [
"deranged",
"itoa",
"libc",
"num-conv",
"num_threads",
"powerfmt",
"serde",
"time-core",
@ -3707,6 +3832,32 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "tz-rs"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1"
[[package]]
name = "tzdb"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0be2ea5956f295449f47c0b825c5e109022ff1a6a53bb4f77682a87c2341fbf5"
dependencies = [
"iana-time-zone",
"tz-rs",
"tzdb_data",
]
[[package]]
name = "tzdb_data"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0604b35c1f390a774fdb138cac75a99981078895d24bcab175987440bbff803b"
dependencies = [
"tz-rs",
]
[[package]]
name = "ucd-trie"
version = "0.1.7"

@ -33,9 +33,11 @@ hyper-rustls = { version = "0.27.5", features = ["http2"] }
openssl = { version = "0.10.71", features = ["vendored"] }
tokio-retry = "0.3.0"
detee-sgx = { git = "ssh://git@gitea.detee.cloud/testnet/detee-sgx.git", branch = "hratls", features=["hratls", "qvl"] }
shadow-rs = { version = "1.1.1", features = ["metadata"] }
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto.git", branch = "main" }
# detee-shared = { path = "../detee-shared" }
[build-dependencies]
shadow-rs = "1.1.1"
tonic-build = "0.12"

5
build.rs Normal file

@ -0,0 +1,5 @@
use shadow_rs::ShadowBuilder;
fn main() {
ShadowBuilder::builder().deny_const(Default::default()).build().unwrap();
}

@ -12,6 +12,8 @@ More information can be found at https://detee.ltd
Feel free to browser applications bundles or VM disks available for immediate deployment."#;
shadow_rs::shadow!(build);
fn main() {
// TODO: figure if there is a more elegant way to solve this than calling default_provider in main
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
@ -50,7 +52,7 @@ fn main() {
fn clap_cmd() -> Command {
Command::new("detee-cli")
.version("0.0.1")
.version(build::CLAP_LONG_VERSION)
.author("https://detee.ltd")
.about(ABOUT)
.arg(
@ -282,7 +284,6 @@ fn clap_cmd() -> Command {
.required(true)
)
)
/*
.subcommand(Command::new("report").about("report a node for poor performance")
.arg(
Arg::new("pubkey")
@ -302,7 +303,6 @@ fn clap_cmd() -> Command {
.help("detail the performance issue you experienced")
)
)
*/
)
.subcommand(Command::new("vm")
.about("virtual machines that run on AMD SEV-SNP nodes")

@ -13,6 +13,8 @@ It allows you to:
The admin pubkeys are hardcoded in the brain."#;
shadow_rs::shadow!(build);
fn main() {
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
let log_level = match std::env::var("LOG_LEVEL") {
@ -26,7 +28,7 @@ fn main() {
env_logger::builder().filter_level(log_level).format_timestamp(None).init();
let cmd = Command::new("super-detee-cli")
.version("0.0.1")
.version(build::CLAP_LONG_VERSION)
.author("https://detee.ltd")
.about(ABOUT)
.subcommand(

@ -28,7 +28,7 @@ pub fn handle_app(app_matche: &ArgMatches) {
Some(("delete", subcom_args)) => cli_print(handle_delete(subcom_args)),
Some(("list", subcom_args)) => cli_print(handle_list(subcom_args)),
Some(("config", subcom_args)) => handle_config(subcom_args),
_ => println!("No valid subcommand provided. Use --help for more information."),
_ => eprintln!("No valid subcommand provided. Use --help for more information."),
}
}
@ -39,14 +39,16 @@ pub fn handle_app_nodes(matches: &ArgMatches) {
let ip: String = subcom_args.get_one::<String>("ip").unwrap().clone();
cli_print(inspect_node(ip).map_err(Into::into));
}
Some(("report", _)) => {
// let node_pubkey: String = path_subcommand.get_one::<String>("pubkey").unwrap().clone();
// let contract_uuid: String = path_subcommand.get_one::<String>("contract").unwrap().clone();
// let reason: String = path_subcommand.get_one::<String>("reason").unwrap().clone();
todo!()
Some(("report", subcom_args)) => {
let node_pubkey: String = subcom_args.get_one::<String>("pubkey").unwrap().clone();
let contract_uuid: String = subcom_args.get_one::<String>("contract").unwrap().clone();
let reason: String = subcom_args.get_one::<String>("reason").unwrap().clone();
cli_print(
crate::general::report_node(node_pubkey, contract_uuid, reason).map_err(Into::into),
)
}
_ => {
println!("Available commands are search, inspec and report. Use --help for more information.")
eprintln!("Available commands are search, inspec and report. Use --help for more information.")
}
}
}
@ -202,7 +204,7 @@ fn handle_config(matches: &ArgMatches) {
Some(("update", subcom_args)) => cli_print(handle_config_sub_update(subcom_args)),
Some(("get", subcom_args)) => cli_print(handle_config_sub_get(subcom_args)),
_ => {
println!("No valid config subcommand provided.");
eprintln!("No valid config subcommand provided.");
}
}
}

@ -109,7 +109,7 @@ pub async fn list_contracts(req: ListAppContractsReq) -> Result<Vec<AppContract>
app_contracts.push(contract);
}
Err(e) => {
println!("Brain disconnected from register_node: {e}");
eprintln!("Brain disconnected from register_node: {e}");
}
}
}

@ -74,8 +74,7 @@ pub fn calculate_nanolp_for_app(
let total_units =
(vcpus as f64 * 5f64) + (memory_mb as f64 / 200f64) + (disk_size_mb as f64 / 10000f64);
let locked_nano = (hours as f64 * 60f64 * total_units * node_price as f64) as u64;
// TODO: change all println to eprintln
println!(
eprintln!(
"Node price: {}/unit/minute. Total Units for hardware requested: {:.4}. Locking {} LP (offering the App for {} hours).",
node_price as f64 / 1_000_000_000.0,
total_units,
@ -127,7 +126,7 @@ pub async fn deploy_new_app_and_update_config(
if new_app_res.error.is_empty() {
if let Some(launch_config) = launch_config {
println!("Deploying...");
eprintln!("Deploying...");
tokio::time::sleep(tokio::time::Duration::from_millis(2500)).await;
Retry::spawn(FixedInterval::from_millis(1000).take(10), || {
log::debug!("retrying attestation and launch config update");