diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..f40324d --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.x86_64-unknown-linux-gnu.env] +OPENSSL_LIB_DIR="/usr/lib/x86_64-linux-gnu" +OPENSSL_DIR="/usr" \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index db4c608..bc7fd0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,18 +17,71 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +[[package]] +name = "as-any" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a30a44e99a1c83ccb2a6298c563c888952a1c9134953db26876528f84c93a" + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "aws-lc-rs" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0e249228c6ad2d240c2dc94b714d711629d52bad946075d8e9b2f5391f0703" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -50,6 +103,29 @@ version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.4.0", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -68,6 +144,12 @@ version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.4.0" @@ -80,15 +162,45 @@ version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "cmake" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -105,6 +217,12 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "either" version = "1.9.0" @@ -128,7 +246,7 @@ checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -178,46 +296,93 @@ dependencies = [ ] [[package]] -name = "futures-channel" -version = "0.3.28" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", "futures-io", + "futures-macro", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -225,12 +390,29 @@ dependencies = [ "slab", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "h2" version = "0.3.21" @@ -262,6 +444,15 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "0.2.9" @@ -359,12 +550,30 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.64" @@ -381,10 +590,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "libc" -version = "0.2.147" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] [[package]] name = "linux-raw-sys" @@ -404,9 +629,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" @@ -420,6 +645,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -437,9 +668,15 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + [[package]] name = "native-tls" version = "0.2.11" @@ -458,6 +695,16 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num_cpus" version = "1.16.0" @@ -550,6 +797,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "percent-encoding" version = "2.3.0" @@ -574,6 +827,16 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.86" @@ -610,6 +873,35 @@ dependencies = [ "bitflags 2.4.0", ] +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + [[package]] name = "reqwest" version = "0.11.20" @@ -648,12 +940,33 @@ dependencies = [ "winreg", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustix" version = "0.38.11" @@ -664,7 +977,40 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -679,7 +1025,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -755,6 +1101,12 @@ dependencies = [ "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -796,9 +1148,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] +[[package]] +name = "socks5-impl" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922f9d794c286fb5821e900f0cc73cd38d74049508dbe4f17c758b10d387a2bc" +dependencies = [ + "as-any", + "async-trait", + "byteorder", + "bytes", + "percent-encoding", + "serde", + "thiserror", + "tokio", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.72" @@ -820,7 +1200,7 @@ dependencies = [ "fastrand", "redox_syscall 0.3.5", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -874,7 +1254,7 @@ dependencies = [ "signal-hook-registry", "socket2 0.5.3", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -898,6 +1278,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-socks" version = "0.5.1" @@ -977,6 +1368,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.4.1" @@ -1090,10 +1487,37 @@ name = "web_test" version = "0.1.0" dependencies = [ "anyhow", + "futures", + "log", "reqwest", + "rustls-pki-types", "serde", "serde_json", + "socks5-impl", "tokio", + "tokio-rustls", + "webpki-roots", +] + +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", ] [[package]] @@ -1127,6 +1551,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -1255,5 +1688,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index d15a713..2574c7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,3 +11,9 @@ reqwest = { version = "0.11", features = ["blocking", "json", "socks"] } anyhow = "1" serde = {version = "1.0.204", features = ["derive"]} serde_json = "1.0.121" +socks5-impl = "0" +rustls-pki-types = "1.7.0" +tokio-rustls = "0.26.0" +webpki-roots = "0.26.3" +log = "0.4.22" +futures = "0.3" diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 0000000..3134c19 --- /dev/null +++ b/Cross.toml @@ -0,0 +1,5 @@ +[target.x86_64-unknown-linux-musl] +pre-build = [ + "apt update", + "apt install --assume-yes -y pkg-config libssl-dev", +] diff --git a/all_server.json b/all_server.json index 52f0d9d..97f9270 100644 --- a/all_server.json +++ b/all_server.json @@ -608,5 +608,10 @@ "name": "coal_zx.json", "bind": "127.0.0.1:9503", "file": "coal_zx.json" + }, + { + "name": "dmit-vpc-kr", + "bind": "192.168.4.4:29365", + "file": "dmit-vpc-kr" } ] \ No newline at end of file diff --git a/output-home.json b/output-home.json new file mode 100644 index 0000000..2cc75c6 --- /dev/null +++ b/output-home.json @@ -0,0 +1,902 @@ +[ + [ + "yxvm-hk-vol-5d", + { + "name": "yxvm-hk-vol-5d", + "latency": 93.4, + "variance": 13.64, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hk-vol-5d.json", + { + "name": "yxvm-hk-vol-5d.json", + "latency": 95.60000000000001, + "variance": 35.24000000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_hk_hybird_5d", + { + "name": "yxvm_hk_hybird_5d", + "latency": 99.39999999999999, + "variance": 16.84, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0.json", + { + "name": "28kvm-hk-0.json", + "latency": 101.6, + "variance": 31.240000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0", + { + "name": "28kvm-hk-0", + "latency": 102.6, + "variance": 21.84000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_hk_vol", + { + "name": "yxvm_hk_vol", + "latency": 102.60000000000001, + "variance": 50.44, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_hk_hybird_5d.json", + { + "name": "yxvm_hk_hybird_5d.json", + "latency": 103.4, + "variance": 130.84000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg-old", + { + "name": "ggy-gg-old", + "latency": 103.7, + "variance": 27.610000000000007, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_hk_vol.json", + { + "name": "yxvm_hk_vol.json", + "latency": 103.79999999999998, + "variance": 33.959999999999994, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hybird-10d", + { + "name": "yxvm-hybird-10d", + "latency": 104.3, + "variance": 43.41000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-gz-nat-iepl.json", + { + "name": "ak-gz-nat-iepl.json", + "latency": 105.10000000000001, + "variance": 32.89, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-szhk", + { + "name": "ak-szhk", + "latency": 105.8, + "variance": 48.96000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg", + { + "name": "ggy-gg", + "latency": 106.4, + "variance": 16.44, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ipraft-hk-pnac", + { + "name": "ipraft-hk-pnac", + "latency": 106.5, + "variance": 26.249999999999993, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac-333", + { + "name": "pnac-333", + "latency": 106.5, + "variance": 7.25, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ipraft_hk_pnac.json", + { + "name": "ipraft_hk_pnac.json", + "latency": 107.6, + "variance": 31.439999999999987, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hybird.json", + { + "name": "yxvm-hybird.json", + "latency": 107.8, + "variance": 79.56000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac333.json", + { + "name": "pnac333.json", + "latency": 108.30000000000001, + "variance": 16.210000000000004, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_hk_pro_year", + { + "name": "coal_hk_pro_year", + "latency": 108.5, + "variance": 1010.65, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1.json", + { + "name": "28kvm-hk-1.json", + "latency": 109.3, + "variance": 113.21, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac-800", + { + "name": "pnac-800", + "latency": 110.89999999999999, + "variance": 21.289999999999967, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bestvm_hk_pnac.json", + { + "name": "bestvm_hk_pnac.json", + "latency": 111.6, + "variance": 48.24000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_hk_pro_year.json", + { + "name": "coal_hk_pro_year.json", + "latency": 112.8, + "variance": 1036.9599999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac800.json", + { + "name": "pnac800.json", + "latency": 113.0, + "variance": 23.4, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk1.json", + { + "name": "coal-iplc-hk1.json", + "latency": 119.2, + "variance": 12.359999999999989, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk2.json", + { + "name": "coal-iplc-hk2.json", + "latency": 119.3, + "variance": 43.41000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bestvm_hk_pnac", + { + "name": "bestvm_hk_pnac", + "latency": 122.1, + "variance": 454.09000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk2", + { + "name": "coal-iplc-hk2", + "latency": 122.1, + "variance": 69.49, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk1", + { + "name": "coal-iplc-hk1", + "latency": 122.39999999999999, + "variance": 10.840000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1_cd", + { + "name": "28kvm-hk-1_cd", + "latency": 125.4, + "variance": 41.64, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1_cd.json", + { + "name": "28kvm-hk-1_cd.json", + "latency": 125.5, + "variance": 27.050000000000004, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0_cd.json", + { + "name": "28kvm-hk-0_cd.json", + "latency": 127.6, + "variance": 178.04000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1", + { + "name": "28kvm-hk-1", + "latency": 129.4, + "variance": 4999.84, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "vmshell_hk_36", + { + "name": "vmshell_hk_36", + "latency": 131.1, + "variance": 36.29000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-hk.json", + { + "name": "bage-hk.json", + "latency": 134.10000000000002, + "variance": 68.89000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-hk", + { + "name": "bage-hk", + "latency": 134.89999999999998, + "variance": 58.09000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dog-hk-300", + { + "name": "dog-hk-300", + "latency": 136.1, + "variance": 5.490000000000009, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "peng_eb_big.json", + { + "name": "peng_eb_big.json", + "latency": 138.8, + "variance": 133.35999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dv-hk-plus.json", + { + "name": "dv-hk-plus.json", + "latency": 140.39999999999998, + "variance": 1616.24, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "hostyun-hk", + { + "name": "hostyun-hk", + "latency": 141.89999999999998, + "variance": 38.890000000000015, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dv_273.json", + { + "name": "dv_273.json", + "latency": 142.4, + "variance": 223.84000000000006, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dv-hk-plus", + { + "name": "dv-hk-plus", + "latency": 143.2, + "variance": 1478.7599999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "miao-hk-br", + { + "name": "miao-hk-br", + "latency": 143.7, + "variance": 539.01, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "miao_hk.json", + { + "name": "miao_hk.json", + "latency": 145.60000000000002, + "variance": 211.8400000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-hk-one", + { + "name": "wawo-hk-one", + "latency": 145.9, + "variance": 234.08999999999992, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "gcp-hk", + { + "name": "gcp-hk", + "latency": 149.8, + "variance": 2060.1600000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "happy-eb", + { + "name": "happy-eb", + "latency": 157.9, + "variance": 2038.6900000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0_cd", + { + "name": "28kvm-hk-0_cd", + "latency": 158.00000000000003, + "variance": 6111.199999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "gcp-hk.json", + { + "name": "gcp-hk.json", + "latency": 162.3, + "variance": 2169.4100000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "hostyun-hk.json", + { + "name": "hostyun-hk.json", + "latency": 164.4, + "variance": 2728.44, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "vmshell_hk_36.json", + { + "name": "vmshell_hk_36.json", + "latency": 166.2, + "variance": 3099.7599999999993, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dog-hk-300.json", + { + "name": "dog-hk-300.json", + "latency": 170.3, + "variance": 3079.0099999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg-old-cd", + { + "name": "ggy-gg-old-cd", + "latency": 172.49999999999997, + "variance": 770.8500000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-jp", + { + "name": "bage-jp", + "latency": 181.3, + "variance": 2947.6100000000006, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-hk-one.json", + { + "name": "wawo-hk-one.json", + "latency": 183.5, + "variance": 2686.05, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "sharon-jp-1.json", + { + "name": "sharon-jp-1.json", + "latency": 190.60000000000002, + "variance": 34.84, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_vol.json", + { + "name": "yxvm_vol.json", + "latency": 197.4, + "variance": 66.43999999999997, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "lisa-sg-hk-vol-3\u5200", + { + "name": "lisa-sg-hk-vol-3\u5200", + "latency": 198.9, + "variance": 3212.8900000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-hybird.json", + { + "name": "yxvm-sg-hybird.json", + "latency": 206.7, + "variance": 187.60999999999996, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-hybird", + { + "name": "yxvm-sg-hybird", + "latency": 208.79999999999998, + "variance": 25.759999999999952, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "sharon-jp-1", + { + "name": "sharon-jp-1", + "latency": 223.5, + "variance": 4306.450000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-vol", + { + "name": "yxvm-sg-vol", + "latency": 227.79999999999995, + "variance": 5668.36, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "miao-sg-v6", + { + "name": "miao-sg-v6", + "latency": 228.2, + "variance": 21121.96, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-kr-12.json", + { + "name": "bv-kr-12.json", + "latency": 234.4, + "variance": 5773.840000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-sg-opt", + { + "name": "bv-sg-opt", + "latency": 242.5, + "variance": 29974.25, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-kr-24.json", + { + "name": "bv-kr-24.json", + "latency": 244.39999999999998, + "variance": 5697.040000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-jp-5d", + { + "name": "yxvm-jp-5d", + "latency": 286.79999999999995, + "variance": 9122.56, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bigchick_long.json", + { + "name": "bigchick_long.json", + "latency": 291.9, + "variance": 3207.2899999999995, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wepc-jp.json", + { + "name": "wepc-jp.json", + "latency": 311.9, + "variance": 10490.689999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pqs_hinet_static.json", + { + "name": "pqs_hinet_static.json", + "latency": 327.1, + "variance": 23719.489999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pqs_hinet_55.json", + { + "name": "pqs_hinet_55.json", + "latency": 342.9, + "variance": 30642.690000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-mo.json", + { + "name": "ak-mo.json", + "latency": 351.2, + "variance": 44675.159999999996, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_gz_nat.json", + { + "name": "coal_gz_nat.json", + "latency": 378.40000000000003, + "variance": 11217.84, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_sz_v6.json", + { + "name": "coal_sz_v6.json", + "latency": 402.7, + "variance": 45515.810000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bigchick_228.json", + { + "name": "bigchick_228.json", + "latency": 406.0, + "variance": 96063.8, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "\u70ad\u4e91-\u5e7f\u5ddenat", + { + "name": "\u70ad\u4e91-\u5e7f\u5ddenat", + "latency": 408.29999999999995, + "variance": 33196.21000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_sz_v6_60.json", + { + "name": "coal_sz_v6_60.json", + "latency": 475.3999999999999, + "variance": 18641.23999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "\u70ad\u4e91-\u6df1\u5733nat-60", + { + "name": "\u70ad\u4e91-\u6df1\u5733nat-60", + "latency": 477.0, + "variance": 95082.6, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bwg-us-36.json", + { + "name": "bwg-us-36.json", + "latency": 486.7, + "variance": 21920.209999999992, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "\u70ad\u4e91-\u6df1\u5733nat", + { + "name": "\u70ad\u4e91-\u6df1\u5733nat", + "latency": 514.5, + "variance": 58734.45, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "\u70ad\u4e91-\u5e7f\u5dde\u72ec\u7acb", + { + "name": "\u70ad\u4e91-\u5e7f\u5dde\u72ec\u7acb", + "latency": 516.8, + "variance": 102093.16, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_gz.json", + { + "name": "coal_gz.json", + "latency": 575.7, + "variance": 84969.61000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-tw.json", + { + "name": "wawo-tw.json", + "latency": 603.4000000000001, + "variance": 39791.240000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-us.json", + { + "name": "wawo-us.json", + "latency": 698.3, + "variance": 96746.01000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-36.json", + { + "name": "coal-hk-v2-36.json", + "latency": 794.2, + "variance": 56481.96, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-72", + { + "name": "coal-hk-v2-72", + "latency": 864.6999999999999, + "variance": 293791.81000000006, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-36", + { + "name": "coal-hk-v2-36", + "latency": 994.9, + "variance": 181420.69, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-hkv2-5.json", + { + "name": "ak-hkv2-5.json", + "latency": 1052.4, + "variance": 187489.24, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-sg-opt.json", + { + "name": "bv-sg-opt.json", + "latency": 1107.9, + "variance": 1226764.89, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-hk-v2", + { + "name": "ak-hk-v2", + "latency": 1211.1, + "variance": 545035.89, + "success_count": 10, + "failure_count": 0 + } + ] +] \ No newline at end of file diff --git a/output.json b/output.json index d049626..c1d73f1 100644 --- a/output.json +++ b/output.json @@ -1,570 +1,10 @@ [ - [ - "bestvm_hk_pnac", - { - "name": "bestvm_hk_pnac", - "latency": 159.2, - "variance": 34.360000000000014, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "bestvm_hk_pnac.json", - { - "name": "bestvm_hk_pnac.json", - "latency": 162.4, - "variance": 42.44000000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ipraft-hk-pnac", - { - "name": "ipraft-hk-pnac", - "latency": 170.2, - "variance": 20.360000000000024, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-1.json", - { - "name": "28kvm-hk-1.json", - "latency": 171.89999999999998, - "variance": 29.089999999999986, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-0", - { - "name": "28kvm-hk-0", - "latency": 172.7, - "variance": 56.40999999999999, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ak-szhk", - { - "name": "ak-szhk", - "latency": 174.79999999999998, - "variance": 18.560000000000006, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ak-gz-nat-iepl.json", - { - "name": "ak-gz-nat-iepl.json", - "latency": 175.4, - "variance": 13.64, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-1", - { - "name": "28kvm-hk-1", - "latency": 176.9, - "variance": 49.690000000000055, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ipraft_hk_pnac.json", - { - "name": "ipraft_hk_pnac.json", - "latency": 178.1, - "variance": 37.489999999999995, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "pnac800.json", - { - "name": "pnac800.json", - "latency": 179.00000000000003, - "variance": 219.79999999999995, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-0.json", - { - "name": "28kvm-hk-0.json", - "latency": 181.9, - "variance": 78.89000000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "pnac333.json", - { - "name": "pnac333.json", - "latency": 182.9, - "variance": 27.890000000000004, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "pnac-333", - { - "name": "pnac-333", - "latency": 185.3, - "variance": 103.41000000000004, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "pnac-800", - { - "name": "pnac-800", - "latency": 189.9, - "variance": 33.49000000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-hk-v2-72.json", - { - "name": "coal-hk-v2-72.json", - "latency": 202.2, - "variance": 20.159999999999965, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "miao_hk.json", - { - "name": "miao_hk.json", - "latency": 205.79999999999998, - "variance": 70.16000000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "dog-hk-300", - { - "name": "dog-hk-300", - "latency": 209.3, - "variance": 59.209999999999965, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ak-hkv2-5.json", - { - "name": "ak-hkv2-5.json", - "latency": 209.6, - "variance": 21.639999999999993, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "bage-hk.json", - { - "name": "bage-hk.json", - "latency": 209.89999999999998, - "variance": 103.68999999999997, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ak-hk-v2", - { - "name": "ak-hk-v2", - "latency": 211.29999999999998, - "variance": 29.410000000000025, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "hostyun-hk", - { - "name": "hostyun-hk", - "latency": 213.8, - "variance": 175.16000000000003, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "bage-hk", - { - "name": "bage-hk", - "latency": 213.8, - "variance": 87.75999999999999, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "dv_273.json", - { - "name": "dv_273.json", - "latency": 214.60000000000002, - "variance": 61.44000000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "hostyun-hk.json", - { - "name": "hostyun-hk.json", - "latency": 215.2, - "variance": 200.56000000000003, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "dog-hk-300.json", - { - "name": "dog-hk-300.json", - "latency": 215.7, - "variance": 46.809999999999995, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "peng_eb_big.json", - { - "name": "peng_eb_big.json", - "latency": 216.3, - "variance": 73.20999999999998, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-iplc-hk2.json", - { - "name": "coal-iplc-hk2.json", - "latency": 216.9, - "variance": 59.69, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-iplc-hk2", - { - "name": "coal-iplc-hk2", - "latency": 217.4, - "variance": 147.44, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-hk-v2-72", - { - "name": "coal-hk-v2-72", - "latency": 218.3, - "variance": 1300.4100000000003, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-1_cd", - { - "name": "28kvm-hk-1_cd", - "latency": 218.5, - "variance": 124.85000000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "gcp-hk.json", - { - "name": "gcp-hk.json", - "latency": 219.10000000000002, - "variance": 318.68999999999994, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "vmshell_hk_36", - { - "name": "vmshell_hk_36", - "latency": 224.79999999999998, - "variance": 77.76000000000003, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "vmshell_hk_36.json", - { - "name": "vmshell_hk_36.json", - "latency": 226.5, - "variance": 214.85, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-1_cd.json", - { - "name": "28kvm-hk-1_cd.json", - "latency": 226.79999999999998, - "variance": 87.35999999999999, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "gcp-hk", - { - "name": "gcp-hk", - "latency": 230.10000000000002, - "variance": 463.28999999999996, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-0_cd", - { - "name": "28kvm-hk-0_cd", - "latency": 233.9, - "variance": 272.68999999999994, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-iplc-hk1", - { - "name": "coal-iplc-hk1", - "latency": 235.4, - "variance": 289.43999999999994, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "happy-eb", - { - "name": "happy-eb", - "latency": 236.9, - "variance": 2641.8900000000003, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "wawo-hk-one", - { - "name": "wawo-hk-one", - "latency": 242.49999999999997, - "variance": 934.2499999999994, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ggy-gg-old-cd", - { - "name": "ggy-gg-old-cd", - "latency": 245.2, - "variance": 589.3600000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "28kvm-hk-0_cd.json", - { - "name": "28kvm-hk-0_cd.json", - "latency": 253.9, - "variance": 1118.2900000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal-iplc-hk1.json", - { - "name": "coal-iplc-hk1.json", - "latency": 260.0, - "variance": 1190.4, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "wawo-hk-one.json", - { - "name": "wawo-hk-one.json", - "latency": 268.6, - "variance": 6902.640000000004, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "bv-kr-24.json", - { - "name": "bv-kr-24.json", - "latency": 304.4, - "variance": 2964.8399999999997, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm_vol.json", - { - "name": "yxvm_vol.json", - "latency": 307.5, - "variance": 114.04999999999995, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "bv-kr-12.json", - { - "name": "bv-kr-12.json", - "latency": 308.0, - "variance": 3030.8, - "success_count": 10, - "failure_count": 0 - } - ], [ "coal_hk_pro_year.json", { "name": "coal_hk_pro_year.json", - "latency": 309.1, - "variance": 292.8900000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-sg-vol", - { - "name": "yxvm-sg-vol", - "latency": 309.3, - "variance": 108.61000000000006, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-sg-hybird.json", - { - "name": "yxvm-sg-hybird.json", - "latency": 317.3, - "variance": 63.81000000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-sg-hybird", - { - "name": "yxvm-sg-hybird", - "latency": 323.59999999999997, - "variance": 486.84, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ggy-gg", - { - "name": "ggy-gg", - "latency": 335.0, - "variance": 380.19999999999993, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-hk-vol-5d.json", - { - "name": "yxvm-hk-vol-5d.json", - "latency": 349.2, - "variance": 418.56000000000006, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "dv-hk-plus.json", - { - "name": "dv-hk-plus.json", - "latency": 359.6, - "variance": 343.8399999999996, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-jp-5d", - { - "name": "yxvm-jp-5d", - "latency": 364.8, - "variance": 3556.7599999999998, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-hk-vol-5d", - { - "name": "yxvm-hk-vol-5d", - "latency": 400.9, - "variance": 329.4900000000001, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ggy-gg-old", - { - "name": "ggy-gg-old", - "latency": 403.59999999999997, - "variance": 578.2399999999994, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "pqs_hinet_55.json", - { - "name": "pqs_hinet_55.json", - "latency": 438.6, - "variance": 20685.84, + "latency": 99.4, + "variance": 19.64, "success_count": 10, "failure_count": 0 } @@ -573,68 +13,8 @@ "yxvm_hk_vol", { "name": "yxvm_hk_vol", - "latency": 469.69999999999993, - "variance": 1291.6099999999976, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "wepc-jp.json", - { - "name": "wepc-jp.json", - "latency": 476.0, - "variance": 9849.8, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-hybird-10d", - { - "name": "yxvm-hybird-10d", - "latency": 477.2, - "variance": 1277.7599999999998, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm_hk_vol.json", - { - "name": "yxvm_hk_vol.json", - "latency": 480.50000000000006, - "variance": 1186.8499999999985, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "dv-hk-plus", - { - "name": "dv-hk-plus", - "latency": 494.69999999999993, - "variance": 499.6099999999997, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "yxvm-hybird.json", - { - "name": "yxvm-hybird.json", - "latency": 495.1, - "variance": 9437.489999999998, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "coal_hk_pro_year", - { - "name": "coal_hk_pro_year", - "latency": 496.8, - "variance": 9906.759999999998, + "latency": 104.2, + "variance": 42.76, "success_count": 10, "failure_count": 0 } @@ -643,8 +23,18 @@ "yxvm_hk_hybird_5d", { "name": "yxvm_hk_hybird_5d", - "latency": 506.9, - "variance": 188.28999999999988, + "latency": 105.9, + "variance": 72.69000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm_hk_vol.json", + { + "name": "yxvm_hk_vol.json", + "latency": 106.39999999999999, + "variance": 68.63999999999999, "success_count": 10, "failure_count": 0 } @@ -653,18 +43,458 @@ "yxvm_hk_hybird_5d.json", { "name": "yxvm_hk_hybird_5d.json", - "latency": 511.9, - "variance": 298.89, + "latency": 106.8, + "variance": 28.359999999999992, "success_count": 10, "failure_count": 0 } ], [ - "bv-sg-opt.json", + "dv-hk-plus.json", { - "name": "bv-sg-opt.json", - "latency": 553.0999999999999, - "variance": 243.49000000000038, + "name": "dv-hk-plus.json", + "latency": 107.5, + "variance": 74.45000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_hk_pro_year", + { + "name": "coal_hk_pro_year", + "latency": 111.19999999999999, + "variance": 100.96, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dv-hk-plus", + { + "name": "dv-hk-plus", + "latency": 111.80000000000001, + "variance": 133.16000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg", + { + "name": "ggy-gg", + "latency": 112.1, + "variance": 46.29000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hybird.json", + { + "name": "yxvm-hybird.json", + "latency": 113.7, + "variance": 117.80999999999997, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac800.json", + { + "name": "pnac800.json", + "latency": 114.7, + "variance": 94.60999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bestvm_hk_pnac", + { + "name": "bestvm_hk_pnac", + "latency": 115.19999999999999, + "variance": 30.360000000000007, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac333.json", + { + "name": "pnac333.json", + "latency": 115.19999999999999, + "variance": 190.55999999999995, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hybird-10d", + { + "name": "yxvm-hybird-10d", + "latency": 115.4, + "variance": 183.64, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bestvm_hk_pnac.json", + { + "name": "bestvm_hk_pnac.json", + "latency": 115.4, + "variance": 66.64, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac-800", + { + "name": "pnac-800", + "latency": 116.1, + "variance": 101.09000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pnac-333", + { + "name": "pnac-333", + "latency": 116.9, + "variance": 72.49000000000004, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0.json", + { + "name": "28kvm-hk-0.json", + "latency": 118.00000000000001, + "variance": 20.2, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hk-vol-5d", + { + "name": "yxvm-hk-vol-5d", + "latency": 118.3, + "variance": 46.41000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1.json", + { + "name": "28kvm-hk-1.json", + "latency": 119.9, + "variance": 196.49000000000012, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ipraft_hk_pnac.json", + { + "name": "ipraft_hk_pnac.json", + "latency": 120.0, + "variance": 144.20000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk1.json", + { + "name": "coal-iplc-hk1.json", + "latency": 120.00000000000001, + "variance": 77.40000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ipraft-hk-pnac", + { + "name": "ipraft-hk-pnac", + "latency": 120.8, + "variance": 102.15999999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg-old", + { + "name": "ggy-gg-old", + "latency": 120.80000000000001, + "variance": 419.55999999999995, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk2", + { + "name": "coal-iplc-hk2", + "latency": 122.9, + "variance": 61.69000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk2.json", + { + "name": "coal-iplc-hk2.json", + "latency": 124.4, + "variance": 94.64000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1", + { + "name": "28kvm-hk-1", + "latency": 125.1, + "variance": 304.68999999999994, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0", + { + "name": "28kvm-hk-0", + "latency": 128.0, + "variance": 923.4, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-iplc-hk1", + { + "name": "coal-iplc-hk1", + "latency": 130.0, + "variance": 637.4, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-hk.json", + { + "name": "bage-hk.json", + "latency": 136.39999999999998, + "variance": 41.63999999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-hk", + { + "name": "bage-hk", + "latency": 136.5, + "variance": 80.65000000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "gcp-hk", + { + "name": "gcp-hk", + "latency": 141.2, + "variance": 62.36, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-hk-one.json", + { + "name": "wawo-hk-one.json", + "latency": 142.39999999999998, + "variance": 3.4399999999999964, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dmit-vpc-kr", + { + "name": "dmit-vpc-kr", + "latency": 143.0, + "variance": 724.2, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "hostyun-hk.json", + { + "name": "hostyun-hk.json", + "latency": 143.9, + "variance": 28.289999999999985, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "peng_eb_big.json", + { + "name": "peng_eb_big.json", + "latency": 145.19999999999996, + "variance": 21.159999999999922, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "gcp-hk.json", + { + "name": "gcp-hk.json", + "latency": 146.20000000000002, + "variance": 162.96000000000006, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1_cd", + { + "name": "28kvm-hk-1_cd", + "latency": 147.60000000000002, + "variance": 285.44000000000017, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "vmshell_hk_36.json", + { + "name": "vmshell_hk_36.json", + "latency": 147.8, + "variance": 32.96000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-hk-one", + { + "name": "wawo-hk-one", + "latency": 147.89999999999998, + "variance": 50.89000000000004, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "happy-eb", + { + "name": "happy-eb", + "latency": 148.1, + "variance": 59.08999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dog-hk-300.json", + { + "name": "dog-hk-300.json", + "latency": 149.29999999999998, + "variance": 4.409999999999995, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "miao_hk.json", + { + "name": "miao_hk.json", + "latency": 149.3, + "variance": 80.80999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dv_273.json", + { + "name": "dv_273.json", + "latency": 149.3, + "variance": 56.00999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "vmshell_hk_36", + { + "name": "vmshell_hk_36", + "latency": 150.1, + "variance": 57.29, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "dog-hk-300", + { + "name": "dog-hk-300", + "latency": 150.4, + "variance": 44.440000000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "miao-hk-br", + { + "name": "miao-hk-br", + "latency": 151.1, + "variance": 35.49000000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "hostyun-hk", + { + "name": "hostyun-hk", + "latency": 153.9, + "variance": 768.8900000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-hk-vol-5d.json", + { + "name": "yxvm-hk-vol-5d.json", + "latency": 154.5, + "variance": 7696.85, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0_cd", + { + "name": "28kvm-hk-0_cd", + "latency": 155.3, + "variance": 98.41000000000003, "success_count": 10, "failure_count": 0 } @@ -673,8 +503,38 @@ "bv-sg-opt", { "name": "bv-sg-opt", - "latency": 559.0999999999999, - "variance": 448.0900000000009, + "latency": 166.10000000000002, + "variance": 13.69000000000002, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-sg-opt.json", + { + "name": "bv-sg-opt.json", + "latency": 172.70000000000002, + "variance": 102.41, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-hybird.json", + { + "name": "yxvm-sg-hybird.json", + "latency": 177.29999999999995, + "variance": 30.20999999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-hybird", + { + "name": "yxvm-sg-hybird", + "latency": 179.0, + "variance": 58.799999999999976, "success_count": 10, "failure_count": 0 } @@ -683,18 +543,18 @@ "lisa-sg-hk-vol-3\u5200", { "name": "lisa-sg-hk-vol-3\u5200", - "latency": 575.3, - "variance": 358.6099999999999, + "latency": 181.89999999999998, + "variance": 54.08999999999996, "success_count": 10, "failure_count": 0 } ], [ - "sharon-jp-1.json", + "yxvm_vol.json", { - "name": "sharon-jp-1.json", - "latency": 582.5, - "variance": 637.05, + "name": "yxvm_vol.json", + "latency": 183.1, + "variance": 94.49000000000002, "success_count": 10, "failure_count": 0 } @@ -703,28 +563,18 @@ "sharon-jp-1", { "name": "sharon-jp-1", - "latency": 591.1999999999999, - "variance": 344.1600000000002, + "latency": 185.9, + "variance": 95.29000000000002, "success_count": 10, "failure_count": 0 } ], [ - "bage-jp", + "sharon-jp-1.json", { - "name": "bage-jp", - "latency": 593.4000000000001, - "variance": 13866.240000000002, - "success_count": 10, - "failure_count": 0 - } - ], - [ - "ak-mo.json", - { - "name": "ak-mo.json", - "latency": 599.6, - "variance": 55695.240000000005, + "name": "sharon-jp-1.json", + "latency": 187.5, + "variance": 87.65, "success_count": 10, "failure_count": 0 } @@ -733,8 +583,278 @@ "miao-sg-v6", { "name": "miao-sg-v6", - "latency": 610.5999999999999, - "variance": 11288.439999999999, + "latency": 196.49999999999997, + "variance": 457.8499999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg-old-cd", + { + "name": "ggy-gg-old-cd", + "latency": 214.2, + "variance": 971.1600000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-sg-vol", + { + "name": "yxvm-sg-vol", + "latency": 220.5, + "variance": 5525.85, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-kr-12.json", + { + "name": "bv-kr-12.json", + "latency": 242.19999999999996, + "variance": 6643.759999999999, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "yxvm-jp-5d", + { + "name": "yxvm-jp-5d", + "latency": 244.8, + "variance": 38.559999999999995, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bv-kr-24.json", + { + "name": "bv-kr-24.json", + "latency": 245.59999999999997, + "variance": 5778.439999999997, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-1_cd.json", + { + "name": "28kvm-hk-1_cd.json", + "latency": 307.40000000000003, + "variance": 104351.04000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wepc-jp.json", + { + "name": "wepc-jp.json", + "latency": 314.49999999999994, + "variance": 9858.249999999996, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bage-jp", + { + "name": "bage-jp", + "latency": 327.8, + "variance": 9407.960000000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bwg-us-36.json", + { + "name": "bwg-us-36.json", + "latency": 492.40000000000003, + "variance": 21800.040000000008, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-mo.json", + { + "name": "ak-mo.json", + "latency": 516.8, + "variance": 99631.96, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pqs_hinet_55.json", + { + "name": "pqs_hinet_55.json", + "latency": 531.1, + "variance": 129218.88999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-szhk", + { + "name": "ak-szhk", + "latency": 565.6, + "variance": 136999.44, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-tw.json", + { + "name": "wawo-tw.json", + "latency": 580.6, + "variance": 316012.23999999993, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ggy-gg-cd", + { + "name": "ggy-gg-cd", + "latency": 607.3000000000001, + "variance": 410.4100000000006, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "pqs_hinet_static.json", + { + "name": "pqs_hinet_static.json", + "latency": 661.7, + "variance": 1056137.01, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-36", + { + "name": "coal-hk-v2-36", + "latency": 771.1, + "variance": 57792.69, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bigchick_long.json", + { + "name": "bigchick_long.json", + "latency": 924.8000000000001, + "variance": 64044.95999999998, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-gz-nat-iepl.json", + { + "name": "ak-gz-nat-iepl.json", + "latency": 1008.8, + "variance": 68227.36, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "wawo-us.json", + { + "name": "wawo-us.json", + "latency": 1013.6, + "variance": 487301.24000000005, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-hkv2-5.json", + { + "name": "ak-hkv2-5.json", + "latency": 1168.1999999999998, + "variance": 148522.16000000003, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "\u70ad\u4e91-\u5e7f\u5dde\u72ec\u7acb", + { + "name": "\u70ad\u4e91-\u5e7f\u5dde\u72ec\u7acb", + "latency": 1216.2, + "variance": 463543.36, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "bigchick_228.json", + { + "name": "bigchick_228.json", + "latency": 1394.1, + "variance": 373700.89, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-72.json", + { + "name": "coal-hk-v2-72.json", + "latency": 1400.9, + "variance": 749016.09, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal-hk-v2-36.json", + { + "name": "coal-hk-v2-36.json", + "latency": 1444.7, + "variance": 408509.41, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "ak-hk-v2", + { + "name": "ak-hk-v2", + "latency": 1487.5, + "variance": 423277.04999999993, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "coal_gz.json", + { + "name": "coal_gz.json", + "latency": 1492.9, + "variance": 1210861.8900000001, + "success_count": 10, + "failure_count": 0 + } + ], + [ + "28kvm-hk-0_cd.json", + { + "name": "28kvm-hk-0_cd.json", + "latency": 2403.2, + "variance": 1599651.96, "success_count": 10, "failure_count": 0 } diff --git a/run.py b/run.py index 488ac87..70d49c2 100644 --- a/run.py +++ b/run.py @@ -27,7 +27,7 @@ def main(json_file, url, count): name = entry['name'] bind = entry['bind'] result = run_web_test(url, count, bind, name) - if result.find("error") == -1: + if result.find("error") == -1 and result != "": data = process_string(result) results[name] = data results = sort_by_field(results) diff --git a/src/bin/tcp_conn_client/main.rs b/src/bin/tcp_conn_client/main.rs new file mode 100644 index 0000000..6577b76 --- /dev/null +++ b/src/bin/tcp_conn_client/main.rs @@ -0,0 +1,119 @@ +use std::time::Duration; + +use reqwest::{ + header::{HeaderValue, CONTENT_LENGTH, HOST, USER_AGENT}, + Client, Method, Request, Url, +}; +use socks5_impl::client; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio_native_tls::{native_tls, TlsConnector}; + +fn create_http_req(client: reqwest::Client, end_point: &str) -> Option { + let url: Url = end_point.parse().ok()?; + let host = url.host().unwrap().to_string(); + let mut req = client + .post(url.clone()) + .timeout(Duration::from_secs(5)) + .build() + .ok()?; + req.headers_mut() + .insert(HOST, HeaderValue::from_str(&host).ok()?); + req.headers_mut() + .insert(USER_AGENT, HeaderValue::from_static("curl/8.9.1-DEV")); + + Some(req) +} + +fn request_to_http_text(req: &Request) -> anyhow::Result { + use std::fmt::Write; + let mut result = String::new(); + // Write the request line + write!( + &mut result, + "{} {} {:?}\r\n", + req.method(), + req.url(), + req.version() + )?; + + // Write the headers + for (key, value) in req.headers() { + write!(&mut result, "{}: {}\r\n", key, value.to_str()?)?; + } + + // End of headers + write!(&mut result, "\r\n")?; + if let Some(body) = req.body() { + write!( + &mut result, + "{}", + String::from_utf8(body.as_bytes().unwrap().to_owned())? + )?; + } + + Ok(result) +} + +// #[tokio::main] +// async fn main() -> anyhow::Result<()> { +// let now = std::time::Instant::now(); +// let mut ac = tokio::net::TcpStream::connect("192.168.4.4:888").await?; +// println!("tcp conn established time used: {:?}", now.elapsed()); +// let r = client::connect(&mut ac, ("cp.cloudflare.com", 443), None).await?; +// println!("socks5 conn established time used: {:?}", now.elapsed()); +// ; +// let tls_conn = TlsConnector::from(native_tls::TlsConnector::new().unwrap()); +// // let url: Url = "https://cp.cloudflare.com/generate_204".parse().unwrap(); +// let mut tls_s = tls_conn.connect("cp.cloudflare.com", ac).await?; +// println!("tls conn established time used: {:?}", now.elapsed()); +// let req =create_http_req(Client::new(), "https://cp.cloudflare.com/generate_204").unwrap(); +// let txt = request_to_http_text(&req).unwrap(); +// tls_s.write_all(&txt.as_bytes()).await?; +// tls_s.flush().await?; +// println!("req write time used: {:?}", now.elapsed()); +// let mut buf = vec![0;4096]; +// let n = tls_s.read(&mut buf).await?; +// println!("resp get time used: {:?}, resp len: {}", now.elapsed(), n); +// Ok(()) +// } + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + use rustls_pki_types::ServerName; + use std::sync::Arc; + use tokio_rustls::rustls::{ClientConfig, RootCertStore}; + use tokio_rustls::TlsConnector; + + // ... + + let mut root_cert_store = RootCertStore::empty(); + root_cert_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + let config = ClientConfig::builder() + .with_root_certificates(root_cert_store) + .with_no_client_auth(); + let connector = TlsConnector::from(Arc::new(config)); + let dnsname = ServerName::try_from("cp.cloudflare.com").unwrap(); + + // let stream = TcpStream::connect(&addr).await?; + // let mut stream = connector.connect(dnsname, stream).await?; + + let now = std::time::Instant::now(); + let mut ac = tokio::net::TcpStream::connect("192.168.4.4:888").await?; + println!("tcp conn established time used: {:?}", now.elapsed()); + let r = client::connect(&mut ac, ("cp.cloudflare.com", 443), None).await?; + println!("socks5 conn established time used: {:?}", now.elapsed()); + // let tls_conn = TlsConnector::from(native_tls::TlsConnector::new().unwrap()); + let mut tls_s = connector.connect(dnsname, ac).await?; + // let url: Url = "https://cp.cloudflare.com/generate_204".parse().unwrap(); + // let mut tls_s = tls_conn.connect("cp.cloudflare.com", ac).await?; + println!("tls conn established time used: {:?}", now.elapsed()); + let req = create_http_req(Client::new(), "https://cp.cloudflare.com/generate_204").unwrap(); + let txt = request_to_http_text(&req).unwrap(); + tls_s.write_all(&txt.as_bytes()).await?; + tls_s.flush().await?; + println!("req write time used: {:?}", now.elapsed()); + let mut buf = vec![0; 4096]; + let n = tls_s.read(&mut buf).await?; + println!("resp get time used: {:?}, resp len: {}", now.elapsed(), n); + Ok(()) +} diff --git a/src/bin/tcp_conn_server/main.rs b/src/bin/tcp_conn_server/main.rs new file mode 100644 index 0000000..4be5473 --- /dev/null +++ b/src/bin/tcp_conn_server/main.rs @@ -0,0 +1,15 @@ +use tokio::io::AsyncWriteExt; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let ac = tokio::net::TcpListener::bind("0.0.0.0:99").await?; + while let Ok((mut s, _)) = ac.accept().await { + tokio::spawn(async move { + let _ = s.write_all("Hello world".as_bytes()).await; + let _ = s.flush().await; + tokio::time::sleep(std::time::Duration::from_secs(10)).await; + let _ = s.shutdown().await; + }); + } + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index c42885f..f0c3212 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,12 @@ -use reqwest; -use std::time::Instant; +use futures::future::Either; +use reqwest::{ + self, + header::{HeaderValue, HOST, USER_AGENT}, + Client, Request, Url, +}; +use socks5_impl::client; +use std::time::Duration; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; pub struct IncrementalStats { count: u64, @@ -37,7 +44,133 @@ impl IncrementalStats { } } -fn main() { +fn create_http_req(client: reqwest::Client, end_point: &str) -> Option { + let url: Url = end_point.parse().ok()?; + let host = url.host().unwrap().to_string(); + let mut req = client + .post(url.clone()) + .timeout(Duration::from_secs(5)) + .build() + .ok()?; + req.headers_mut() + .insert(HOST, HeaderValue::from_str(&host).ok()?); + req.headers_mut() + .insert(USER_AGENT, HeaderValue::from_static("curl/8.9.1-DEV")); + + Some(req) +} + +fn request_to_http_text(req: &Request) -> anyhow::Result { + use std::fmt::Write; + let mut result = String::new(); + // Write the request line + write!( + &mut result, + "{} {} {:?}\r\n", + req.method(), + req.url(), + req.version() + )?; + + // Write the headers + for (key, value) in req.headers() { + write!(&mut result, "{}: {}\r\n", key, value.to_str()?)?; + } + + // End of headers + write!(&mut result, "\r\n")?; + if let Some(body) = req.body() { + write!( + &mut result, + "{}", + String::from_utf8(body.as_bytes().unwrap().to_owned())? + )?; + } + + Ok(result) +} + +async fn rustls_req(url_str: &str, proxy: &str) -> anyhow::Result { + use rustls_pki_types::ServerName; + use std::sync::Arc; + use tokio_rustls::rustls::{ClientConfig, RootCertStore}; + use tokio_rustls::TlsConnector; + + // ... + + let mut root_cert_store = RootCertStore::empty(); + root_cert_store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + let config = ClientConfig::builder() + .with_root_certificates(root_cert_store) + .with_no_client_auth(); + let connector = TlsConnector::from(Arc::new(config)); + let url: Url = url_str.parse()?; + let dnsname = ServerName::try_from(url.host().unwrap().to_string())?; + + // let stream = TcpStream::connect(&addr).await?; + // let mut stream = connector.connect(dnsname, stream).await?; + let proxy_url: Url = proxy.parse()?; + let now = std::time::Instant::now(); + let mut ac = tokio::net::TcpStream::connect(( + proxy_url.host().unwrap().to_string(), + proxy_url.port().unwrap(), + )) + .await?; + log::debug!("tcp conn established time used: {:?}", now.elapsed()); + let r = client::connect(&mut ac, (url.host().unwrap().to_string(), 443), None).await?; + log::debug!("socks5 conn established time used: {:?}", now.elapsed()); + // let tls_conn = TlsConnector::from(native_tls::TlsConnector::new().unwrap()); + let mut tls_s = connector.connect(dnsname, ac).await?; + // let url: Url = "https://cp.cloudflare.com/generate_204".parse().unwrap(); + // let mut tls_s = tls_conn.connect("cp.cloudflare.com", ac).await?; + log::debug!("tls conn established time used: {:?}", now.elapsed()); + let req = create_http_req(Client::new(), url_str).unwrap(); + let txt = request_to_http_text(&req).unwrap(); + tls_s.write_all(&txt.as_bytes()).await?; + tls_s.flush().await?; + log::debug!("req write time used: {:?}", now.elapsed()); + let mut buf = vec![0; 4096]; + let n = tls_s.read(&mut buf).await?; + log::debug!("resp get time used: {:?}, resp len: {}", now.elapsed(), n); + Ok(now.elapsed()) +} + +async fn http_req(url_str: &str, proxy: &str) -> anyhow::Result { + let url: Url = url_str.parse()?; + + // let stream = TcpStream::connect(&addr).await?; + // let mut stream = connector.connect(dnsname, stream).await?; + let proxy_url: Url = proxy.parse()?; + let now = std::time::Instant::now(); + let mut ac = tokio::net::TcpStream::connect(( + proxy_url.host().unwrap().to_string(), + proxy_url.port().unwrap(), + )) + .await?; + log::debug!("tcp conn established time used: {:?}", now.elapsed()); + let r = client::connect( + &mut ac, + (url.host().unwrap().to_string(), url.port().unwrap()), + None, + ) + .await?; + log::debug!("socks5 conn established time used: {:?}", now.elapsed()); + // let tls_conn = TlsConnector::from(native_tls::TlsConnector::new().unwrap()); + // let url: Url = "https://cp.cloudflare.com/generate_204".parse().unwrap(); + // let mut tls_s = tls_conn.connect("cp.cloudflare.com", ac).await?; + log::debug!("tls conn established time used: {:?}", now.elapsed()); + let req = create_http_req(Client::new(), url_str).unwrap(); + let txt = request_to_http_text(&req).unwrap(); + ac.write_all(&txt.as_bytes()).await?; + ac.flush().await?; + log::debug!("req write time used: {:?}", now.elapsed()); + let mut buf = vec![0; 4096]; + let n = ac.read(&mut buf).await?; + log::debug!("resp get time used: {:?}, resp len: {}", now.elapsed(), n); + Ok(now.elapsed()) +} +#[tokio::main] +async fn main() { let url = std::env::args() .nth(1) .unwrap_or("https://www.youtube.com".to_owned()); // 你可以替换为你想要测量的网址 @@ -47,58 +180,54 @@ fn main() { .unwrap_or_else(|| "20".to_owned()) .parse() .expect("second parameter should interger"); - let proxy = std::env::args().nth(3); + let proxy = std::env::args().nth(3).unwrap(); let fmt = std::env::args().nth(4); let mut stats = IncrementalStats::new(); let mut succ = 0; let mut err = 0; for i in 0..iter_num { - let start = Instant::now(); - let builder = - reqwest::blocking::ClientBuilder::new().timeout(std::time::Duration::from_secs(1)); - let c = if let Some(p) = proxy.as_ref() { - builder - .proxy(reqwest::Proxy::all(p.as_str()).unwrap()) - .build() - .unwrap() + let fut = if url.starts_with("https") { + Either::Left(rustls_req(&url, &proxy)) } else { - builder.build().unwrap() + Either::Right(http_req(&url, &proxy)) }; - match c.get(&url).send() { - Ok(response) => { - if response.status().is_success() { - let mut duration = start.elapsed(); - let _r = response.bytes().unwrap(); - if let Some(_name) = fmt.as_ref() { - // println!("{name}, {i},{}", duration.as_millis()) - // duration /= 2; - } else { - println!( - "第{i}次测试, 访问 {} 花费了 {:?} 毫秒", - url, - duration.as_millis() - ); - } - succ += 1; - // time_rec.push(duration); - stats.add(duration.as_millis() as f64); + match tokio::time::timeout(std::time::Duration::from_secs(5), fut).await { + Ok(Ok(duration)) => { + // if response.status().is_success() { + // let mut duration = start.elapsed(); + // let _r = response.bytes().unwrap(); + if let Some(_name) = fmt.as_ref() { + // println!("{name}, {i},{}", duration.as_millis()) + // duration /= 2; } else { - let mut duration = start.elapsed(); println!( - "第{i}次测试, 访问 {} 失败,状态码:{}", + "第{i}次测试, 访问 {} 花费了 {:?} 毫秒", url, - response.status() + duration.as_millis() ); - stats.add(duration.as_millis() as f64); - err += 1; + } + succ += 1; + // time_rec.push(duration); + stats.add(duration.as_millis() as f64); + // } + } + Ok(Err(error)) => { + err += 1; + + if let Some(_name) = fmt.as_ref() { + return; + } else { + println!("第{i}次测试, 请求错误:{}", error); } } Err(error) => { err += 1; - println!("第{i}次测试, 请求错误:{}", error); + if let Some(_name) = fmt.as_ref() { return; + } else { + println!("第{i}次测试, 请求错误:{}", error); } } }