From 752b2f6d9f4cedf318bcaf1946d1fcc83ef9d319 Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Fri, 4 Aug 2023 12:54:44 +0530 Subject: [PATCH] feat: compute pow for random strings and salts for a number of trials and avg them out --- ...acfdf42189ff91079502bbf4ab07965ce3d92.json | 18 +++ ...7790b3feb71e399372954c081ae44a38c4b7.json} | 4 +- ...3d1d43fef53ef1ca55302dbc68f0247d28b47.json | 17 ++ Cargo.lock | 148 ++++++++---------- Cargo.toml | 2 +- migrations/20230804054933_logs_avg.sql | 16 ++ src/avg.rs | 54 +++++-- src/db.rs | 59 ++++++- src/diff.rs | 2 - src/gen.rs | 1 - 10 files changed, 217 insertions(+), 104 deletions(-) create mode 100644 .sqlx/query-5c9d24d6f9b03814be9b3f43e09acfdf42189ff91079502bbf4ab07965ce3d92.json rename .sqlx/{query-5d59a2fc2e04273e22b9949031084b6fdff395c09bd63011bc8d28b09cd55e32.json => query-996c3e1f6c9c6e742b2341668dd27790b3feb71e399372954c081ae44a38c4b7.json} (50%) create mode 100644 .sqlx/query-ecde2936f82a710898039c8d5ce3d1d43fef53ef1ca55302dbc68f0247d28b47.json create mode 100644 migrations/20230804054933_logs_avg.sql diff --git a/.sqlx/query-5c9d24d6f9b03814be9b3f43e09acfdf42189ff91079502bbf4ab07965ce3d92.json b/.sqlx/query-5c9d24d6f9b03814be9b3f43e09acfdf42189ff91079502bbf4ab07965ce3d92.json new file mode 100644 index 0000000..5e06e73 --- /dev/null +++ b/.sqlx/query-5c9d24d6f9b03814be9b3f43e09acfdf42189ff91079502bbf4ab07965ce3d92.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO logs_avg\n (\n minimum_time,\n maximum_time,\n variation_time,\n difficulty,\n mean_time\n ) VALUES ($1, $2, $3, $4, $5)\n ON CONFLICT(difficulty) DO NOTHING;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Int4", + "Int4", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "5c9d24d6f9b03814be9b3f43e09acfdf42189ff91079502bbf4ab07965ce3d92" +} diff --git a/.sqlx/query-5d59a2fc2e04273e22b9949031084b6fdff395c09bd63011bc8d28b09cd55e32.json b/.sqlx/query-996c3e1f6c9c6e742b2341668dd27790b3feb71e399372954c081ae44a38c4b7.json similarity index 50% rename from .sqlx/query-5d59a2fc2e04273e22b9949031084b6fdff395c09bd63011bc8d28b09cd55e32.json rename to .sqlx/query-996c3e1f6c9c6e742b2341668dd27790b3feb71e399372954c081ae44a38c4b7.json index 46919ee..a8fa5e2 100644 --- a/.sqlx/query-5d59a2fc2e04273e22b9949031084b6fdff395c09bd63011bc8d28b09cd55e32.json +++ b/.sqlx/query-996c3e1f6c9c6e742b2341668dd27790b3feb71e399372954c081ae44a38c4b7.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "INSERT INTO logs (string, salt, time, difficulty) VALUES ($1, $2, $3, $4) ON CONFLICT(difficulty) DO NOTHING;", + "query": "INSERT INTO logs_avg_individual\n (string, salt, time, difficulty) VALUES ($1, $2, $3, $4);", "describe": { "columns": [], "parameters": { @@ -13,5 +13,5 @@ }, "nullable": [] }, - "hash": "5d59a2fc2e04273e22b9949031084b6fdff395c09bd63011bc8d28b09cd55e32" + "hash": "996c3e1f6c9c6e742b2341668dd27790b3feb71e399372954c081ae44a38c4b7" } diff --git a/.sqlx/query-ecde2936f82a710898039c8d5ce3d1d43fef53ef1ca55302dbc68f0247d28b47.json b/.sqlx/query-ecde2936f82a710898039c8d5ce3d1d43fef53ef1ca55302dbc68f0247d28b47.json new file mode 100644 index 0000000..1588b41 --- /dev/null +++ b/.sqlx/query-ecde2936f82a710898039c8d5ce3d1d43fef53ef1ca55302dbc68f0247d28b47.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO logs\n (string, salt, time, difficulty)\n VALUES\n ($1, $2, $3, $4)\n ON CONFLICT(difficulty) DO NOTHING;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "ecde2936f82a710898039c8d5ce3d1d43fef53ef1ca55302dbc68f0247d28b47" +} diff --git a/Cargo.lock b/Cargo.lock index 7520f4c..ddd1be8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,27 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "actix-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" -dependencies = [ - "quote", - "syn 2.0.24", -] - -[[package]] -name = "actix-rt" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" -dependencies = [ - "actix-macros", - "futures-core", - "tokio", -] - [[package]] name = "addr2line" version = "0.20.0" @@ -203,9 +182,12 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "6c6b2562119bf28c3439f7f02db99faf0aa1a8cdfe5772a2ee155d32227239f0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -215,9 +197,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.3.11" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" dependencies = [ "clap_builder", "clap_derive", @@ -226,9 +208,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.3.11" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" dependencies = [ "anstream", "anstyle", @@ -238,14 +220,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.28", ] [[package]] @@ -459,9 +441,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" dependencies = [ "serde", ] @@ -487,9 +469,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" dependencies = [ "errno-dragonfly", "libc", @@ -804,9 +786,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "lazy_static" @@ -842,9 +824,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lock_api" @@ -924,9 +906,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint", "num-complex", @@ -1010,9 +992,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", "libm", @@ -1129,7 +1111,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.28", ] [[package]] @@ -1187,7 +1169,6 @@ dependencies = [ name = "powd" version = "0.1.0" dependencies = [ - "actix-rt", "bincode", "clap", "log", @@ -1199,6 +1180,7 @@ dependencies = [ "serde_json", "sled", "sqlx", + "tokio", "url", ] @@ -1220,18 +1202,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] @@ -1320,9 +1302,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf" +checksum = "b7b6d6190b7594385f61bd3911cd1be99dfddcfc365a4160cc2ab5bff4aed294" dependencies = [ "aho-corasick", "memchr", @@ -1331,9 +1313,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] name = "rsa" @@ -1365,9 +1347,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.3" +version = "0.38.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4" +checksum = "1ee020b1716f0a80e2ace9b03441a749e402e86712f15f16fe8a8f75afac732f" dependencies = [ "bitflags 2.3.3", "errno", @@ -1378,41 +1360,41 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.169" +version = "1.0.181" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd51c3db8f9500d531e6c12dd0fd4ad13d133e9117f5aebac3cdbb8b6d9824b0" +checksum = "6d3e73c93c3240c0bda063c239298e633114c69a888c3e37ca8bb33f343e9890" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.169" +version = "1.0.181" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27738cfea0d944ab72c3ed01f3d5f23ec4322af8a1431e40ce630e4c01ea74fd" +checksum = "be02f6cb0cd3a5ec20bbcfbcbd749f57daddb1a0882dc2e46a6c236c90b977ed" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.28", ] [[package]] name = "serde_json" -version = "1.0.100" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ "itoa", "ryu", @@ -1441,15 +1423,6 @@ dependencies = [ "digest", ] -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - [[package]] name = "signature" version = "2.1.0" @@ -1767,9 +1740,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.24" +version = "2.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ccaf716a23c35ff908f91c971a86a9a71af5998c1d8f10e828d9f55f68ac00" +checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" dependencies = [ "proc-macro2", "quote", @@ -1815,7 +1788,7 @@ checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.28", ] [[package]] @@ -1844,13 +1817,24 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.1", + "num_cpus", "pin-project-lite", - "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys", ] +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.28", +] + [[package]] name = "tokio-stream" version = "0.1.14" @@ -1883,7 +1867,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.28", ] [[package]] @@ -1909,9 +1893,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" diff --git a/Cargo.toml b/Cargo.toml index 9df5842..f00b0c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -actix-rt = "2.8.0" bincode = "1.3.3" clap = { version = "4.3.11", features = ["derive"] } log = "0.4.19" @@ -18,4 +17,5 @@ serde = { version = "1.0.169", features = ["derive"] } serde_json = "1.0.100" sled = "0.34.7" sqlx = { version = "0.7", features = [ "runtime-tokio", "postgres" ] } +tokio = { version = "1.29.1", features = ["rt-multi-thread", "macros", "rt"] } url = { version = "2.4.0", features = ["serde"] } diff --git a/migrations/20230804054933_logs_avg.sql b/migrations/20230804054933_logs_avg.sql new file mode 100644 index 0000000..9ed35a3 --- /dev/null +++ b/migrations/20230804054933_logs_avg.sql @@ -0,0 +1,16 @@ +CREATE TABLE IF NOT EXISTS logs_avg_individual ( + string VARCHAR(100) NOT NULL, + salt VARCHAR(100) NOT NULL, + time INTEGER NOT NULL, + difficulty INTEGER NOT NULL, + ID SERIAL PRIMARY KEY NOT NULL +); + +CREATE TABLE IF NOT EXISTS logs_avg ( + difficulty INTEGER NOT NULL UNIQUE, + mean_time INTEGER NOT NULL, + variation_time INTEGER NOT NULL, + minimum_time INTEGER NOT NULL, + maximum_time INTEGER NOT NULL, + ID SERIAL PRIMARY KEY NOT NULL +); diff --git a/src/avg.rs b/src/avg.rs index 097b981..9bc8fea 100644 --- a/src/avg.rs +++ b/src/avg.rs @@ -1,9 +1,9 @@ use std::time::Instant; -use rayon::prelude::*; use pow_sha256::ConfigBuilder; +use rayon::prelude::*; -use crate::utils::get_random; +use crate::{gen::Log, utils::get_random}; #[derive(clap::Args, Debug, Clone)] #[command(author, version, about, long_about = None)] @@ -12,18 +12,24 @@ pub struct AvgGenerate { pub start: u32, #[arg(long)] pub max: u32, + #[arg(long)] + pub step: usize, + #[arg(long)] pub trials: u32, #[arg(long)] pub db: url::Url, + #[arg(long)] + /// database connections + pub conn: u32, } impl AvgGenerate { - pub fn run(&self) { - (self.start..self.max) - .into_par_iter() - .for_each(|difficulty| { - let mut summary = String::new(); + pub async fn run(&self) { + let tokio_rt = tokio::runtime::Handle::current(); + let db = crate::db::DB::new(&self.db, self.conn).await; + (self.start..self.max).into_par_iter().step_by(self.step).for_each(|difficulty| { + let mut summary = String::new(); let mut times: Vec = Vec::with_capacity(self.trials as usize); for _ in 0..self.trials { @@ -31,14 +37,22 @@ impl AvgGenerate { let string = get_random(32); let pow_config = ConfigBuilder::default().salt(salt.clone()).build().unwrap(); + let start = Instant::now(); pow_config.prove_work(&string, difficulty).unwrap(); let finish = Instant::now(); - let time_elapsed = finish.duration_since(start); + let time_elapsed = finish.duration_since(start); let time = time_elapsed.as_micros(); log::info!("Difficulty factor {difficulty} generated in {time}"); times.push(time); + + let log = Log { string, salt, time }; + let db2 = db.clone(); + let fut = async move { + db2.write_avg_individual_log(&log, difficulty).await; + }; + tokio_rt.spawn(fut); } let mean = (times.iter().sum::() / self.trials as u128) as u32; let simple_variance: u32 = (times @@ -53,7 +67,29 @@ impl AvgGenerate { let min = times.iter().min().unwrap(); let max = times.iter().max().unwrap(); summary = format!("{summary}\ndifficulty: {difficulty} min: {min} max: {max} mean: {mean} variance {simple_variance}"); - println!("{summary}"); + println!("{summary}"); + + let avg = Avg { + difficulty, + minimum_time: *min as u32, + maximum_time: *max as u32, + mean_time: mean, + variation_time: simple_variance as u32, + }; + + let db2 = db.clone(); + let fut = async move { + db2.write_avg(&avg).await; + }; + tokio_rt.spawn(fut); }); } } + +pub struct Avg { + pub difficulty: u32, + pub minimum_time: u32, + pub maximum_time: u32, + pub variation_time: u32, + pub mean_time: u32, +} diff --git a/src/db.rs b/src/db.rs index e96c9aa..551e708 100644 --- a/src/db.rs +++ b/src/db.rs @@ -3,6 +3,7 @@ use std::time::Duration; use sqlx::postgres::{PgPool, PgPoolOptions}; use url::Url; +#[derive(Clone)] pub struct DB { pool: PgPool, } @@ -17,18 +18,62 @@ impl DB { .await .unwrap(); - sqlx::migrate!("./migrations/").run(&pool).await.unwrap(); + let _ = sqlx::migrate!("./migrations/").run(&pool).await; Self { pool } } pub async fn write_log(&self, log: &crate::Log, difficulty: u32) { let time = log.time as i32; sqlx::query!( - "INSERT INTO logs (string, salt, time, difficulty) VALUES ($1, $2, $3, $4) ON CONFLICT(difficulty) DO NOTHING;", - log.string, - log.salt, - time, - difficulty as i32, - ).execute(&self.pool).await.unwrap(); + "INSERT INTO logs + (string, salt, time, difficulty) + VALUES + ($1, $2, $3, $4) + ON CONFLICT(difficulty) DO NOTHING;", + log.string, + log.salt, + time, + difficulty as i32, + ) + .execute(&self.pool) + .await + .unwrap(); + } + + pub async fn write_avg_individual_log(&self, log: &crate::Log, difficulty: u32) { + let time = log.time as i32; + sqlx::query!( + "INSERT INTO logs_avg_individual + (string, salt, time, difficulty) VALUES ($1, $2, $3, $4);", + log.string, + log.salt, + time, + difficulty as i32, + ) + .execute(&self.pool) + .await + .unwrap(); + } + + pub async fn write_avg(&self, avg: &crate::avg::Avg) { + sqlx::query!( + "INSERT INTO logs_avg + ( + minimum_time, + maximum_time, + variation_time, + difficulty, + mean_time + ) VALUES ($1, $2, $3, $4, $5) + ON CONFLICT(difficulty) DO NOTHING;", + avg.minimum_time as i32, + avg.maximum_time as i32, + avg.variation_time as i32, + avg.difficulty as i32, + avg.mean_time as i32, + ) + .execute(&self.pool) + .await + .unwrap(); } } diff --git a/src/diff.rs b/src/diff.rs index 6266c9c..8017011 100644 --- a/src/diff.rs +++ b/src/diff.rs @@ -54,5 +54,3 @@ impl ForDiff { println!("{summary}"); } } - - diff --git a/src/gen.rs b/src/gen.rs index aa2d9c0..e92066c 100644 --- a/src/gen.rs +++ b/src/gen.rs @@ -6,7 +6,6 @@ use serde::{Deserialize, Serialize}; use crate::utils::get_random; - #[derive(clap::Args, Debug, Clone)] #[command(author, version, about, long_about = None)] pub struct GenerateDeriveArgs {