Compare commits

...

479 Commits

Author SHA1 Message Date
CPU Ranking Bot
8394f3a78d 更新CPU性能排行榜数据 - 2025-09-27 01:39:10 2025-09-27 01:39:10 +00:00
CPU Ranking Bot
01e6bac876 更新CPU性能排行榜数据 - 2025-09-26 01:39:46 2025-09-26 01:39:46 +00:00
CPU Ranking Bot
5a0bba48ae 更新CPU性能排行榜数据 - 2025-09-25 01:38:16 2025-09-25 01:38:16 +00:00
CPU Ranking Bot
49a4ef0543 更新CPU性能排行榜数据 - 2025-09-24 01:39:17 2025-09-24 01:39:17 +00:00
CPU Ranking Bot
8f74567cbf 更新CPU性能排行榜数据 - 2025-09-23 01:39:31 2025-09-23 01:39:32 +00:00
CPU Ranking Bot
0f01bd359d 更新CPU性能排行榜数据 - 2025-09-22 01:38:08 2025-09-22 01:38:08 +00:00
spiritlhl
d40bc77ba9 Update index.html 2025-09-21 23:51:02 +08:00
CPU Ranking Bot
c730aa59b4 更新CPU性能排行榜数据 - 2025-09-21 15:01:53 2025-09-21 15:01:53 +00:00
CPU Ranking Bot
8a77cff853 更新CPU性能排行榜数据 - 2025-09-21 01:39:15 2025-09-21 01:39:15 +00:00
spiritlhl
8aaa05d45f fix 2025-09-20 19:40:42 +08:00
CPU Ranking Bot
7e7b65c2b7 更新CPU性能排行榜数据 - 2025-09-20 01:39:29 2025-09-20 01:39:29 +00:00
spiritlhl
65296157d9 Merge pull request #14 from oneclickvirt/copilot/fix-4e1e0c95-b391-49d3-b126-a1c59ac93663
Fix index.html JSON loading with CDN fallback mechanism
2025-09-20 00:34:26 +08:00
copilot-swe-agent[bot]
61d1607366 Fix index.html JSON loading with CDN fallback and data transformation
Co-authored-by: spiritLHLS <103393591+spiritLHLS@users.noreply.github.com>
2025-09-19 16:30:52 +00:00
copilot-swe-agent[bot]
8533cfd108 Initial plan 2025-09-19 16:23:22 +00:00
CPU Ranking Bot
8512f5e34b 更新CPU性能排行榜数据 - 2025-09-19 16:19:22 2025-09-19 16:19:22 +00:00
spiritlhl
2c509714a5 fix: 升级版本 2025-09-20 00:10:50 +08:00
CPU Ranking Bot
a042b66c1e 更新CPU性能排行榜数据 - 2025-09-19 01:38:03 2025-09-19 01:38:03 +00:00
CPU Ranking Bot
5edf6ca24d 更新CPU性能排行榜数据 - 2025-09-18 01:38:56 2025-09-18 01:38:56 +00:00
CPU Ranking Bot
adf6fcbcd9 更新CPU性能排行榜数据 - 2025-09-17 01:39:14 2025-09-17 01:39:14 +00:00
CPU Ranking Bot
c5445ed679 更新CPU性能排行榜数据 - 2025-09-16 01:39:22 2025-09-16 01:39:22 +00:00
CPU Ranking Bot
a3c116a25d 更新CPU性能排行榜数据 - 2025-09-15 01:39:15 2025-09-15 01:39:15 +00:00
CPU Ranking Bot
84f2b41b05 更新CPU性能排行榜数据 - 2025-09-14 01:38:54 2025-09-14 01:38:54 +00:00
CPU Ranking Bot
fca661388d 更新CPU性能排行榜数据 - 2025-09-13 01:38:59 2025-09-13 01:38:59 +00:00
CPU Ranking Bot
e5cf95b05f 更新CPU性能排行榜数据 - 2025-09-12 01:38:49 2025-09-12 01:38:49 +00:00
CPU Ranking Bot
dbceca7169 更新CPU性能排行榜数据 - 2025-09-11 01:39:31 2025-09-11 01:39:31 +00:00
CPU Ranking Bot
86b28ef383 更新CPU性能排行榜数据 - 2025-09-10 01:38:43 2025-09-10 01:38:43 +00:00
CPU Ranking Bot
c1a8695149 更新CPU性能排行榜数据 - 2025-09-09 01:38:44 2025-09-09 01:38:44 +00:00
CPU Ranking Bot
ebcf2da2d8 更新CPU性能排行榜数据 - 2025-09-08 01:38:47 2025-09-08 01:38:47 +00:00
CPU Ranking Bot
a7207afb50 更新CPU性能排行榜数据 - 2025-09-07 01:38:39 2025-09-07 01:38:39 +00:00
CPU Ranking Bot
5aeaa0218a 更新CPU性能排行榜数据 - 2025-09-06 01:38:49 2025-09-06 01:38:49 +00:00
CPU Ranking Bot
8ac7230b06 更新CPU性能排行榜数据 - 2025-09-05 01:39:08 2025-09-05 01:39:08 +00:00
CPU Ranking Bot
3c468794a3 更新CPU性能排行榜数据 - 2025-09-04 01:38:50 2025-09-04 01:38:50 +00:00
CPU Ranking Bot
c764f60de9 更新CPU性能排行榜数据 - 2025-09-03 01:39:25 2025-09-03 01:39:25 +00:00
CPU Ranking Bot
850c3cb129 更新CPU性能排行榜数据 - 2025-09-02 01:38:52 2025-09-02 01:38:52 +00:00
CPU Ranking Bot
cee4e66ad0 更新CPU性能排行榜数据 - 2025-09-01 01:38:49 2025-09-01 01:38:49 +00:00
CPU Ranking Bot
4cb5c67183 更新CPU性能排行榜数据 - 2025-08-31 01:38:49 2025-08-31 01:38:49 +00:00
CPU Ranking Bot
ff040b1ed2 更新CPU性能排行榜数据 - 2025-08-30 01:38:23 2025-08-30 01:38:24 +00:00
CPU Ranking Bot
d739f44bf3 更新CPU性能排行榜数据 - 2025-08-29 01:39:12 2025-08-29 01:39:12 +00:00
CPU Ranking Bot
2be35bdffe 更新CPU性能排行榜数据 - 2025-08-28 01:37:16 2025-08-28 01:37:17 +00:00
CPU Ranking Bot
10e0d09c6f 更新CPU性能排行榜数据 - 2025-08-27 01:38:54 2025-08-27 01:38:54 +00:00
CPU Ranking Bot
6616da58cd 更新CPU性能排行榜数据 - 2025-08-26 01:38:47 2025-08-26 01:38:47 +00:00
CPU Ranking Bot
afa684f042 更新CPU性能排行榜数据 - 2025-08-25 01:38:28 2025-08-25 01:38:28 +00:00
CPU Ranking Bot
25c1d60d2b 更新CPU性能排行榜数据 - 2025-08-24 01:38:31 2025-08-24 01:38:31 +00:00
CPU Ranking Bot
f4beb22fb2 更新CPU性能排行榜数据 - 2025-08-23 01:38:30 2025-08-23 01:38:30 +00:00
CPU Ranking Bot
df9e4d2a78 更新CPU性能排行榜数据 - 2025-08-22 01:38:41 2025-08-22 01:38:41 +00:00
CPU Ranking Bot
4facdad7b5 更新CPU性能排行榜数据 - 2025-08-21 01:38:35 2025-08-21 01:38:35 +00:00
CPU Ranking Bot
5faea697b0 更新CPU性能排行榜数据 - 2025-08-20 01:38:34 2025-08-20 01:38:34 +00:00
CPU Ranking Bot
07d09e4b41 更新CPU性能排行榜数据 - 2025-08-19 01:38:18 2025-08-19 01:38:18 +00:00
CPU Ranking Bot
eb41920720 更新CPU性能排行榜数据 - 2025-08-18 01:38:17 2025-08-18 01:38:17 +00:00
CPU Ranking Bot
7a4208ecd3 更新CPU性能排行榜数据 - 2025-08-17 01:38:09 2025-08-17 01:38:09 +00:00
CPU Ranking Bot
416170ec30 更新CPU性能排行榜数据 - 2025-08-16 01:38:20 2025-08-16 01:38:20 +00:00
CPU Ranking Bot
e26fa8312f 更新CPU性能排行榜数据 - 2025-08-15 01:38:39 2025-08-15 01:38:39 +00:00
CPU Ranking Bot
288a71f13f 更新CPU性能排行榜数据 - 2025-08-14 01:38:10 2025-08-14 01:38:10 +00:00
CPU Ranking Bot
ea1b982c0d 更新CPU性能排行榜数据 - 2025-08-13 01:38:07 2025-08-13 01:38:07 +00:00
CPU Ranking Bot
005bcd750d 更新CPU性能排行榜数据 - 2025-08-12 01:38:14 2025-08-12 01:38:14 +00:00
CPU Ranking Bot
d08008a51e 更新CPU性能排行榜数据 - 2025-08-11 01:39:09 2025-08-11 01:39:09 +00:00
CPU Ranking Bot
a5153cbdb4 更新CPU性能排行榜数据 - 2025-08-10 01:38:38 2025-08-10 01:38:38 +00:00
CPU Ranking Bot
c20bcc2515 更新CPU性能排行榜数据 - 2025-08-09 01:38:19 2025-08-09 01:38:19 +00:00
CPU Ranking Bot
691e934aa9 更新CPU性能排行榜数据 - 2025-08-08 01:38:32 2025-08-08 01:38:32 +00:00
CPU Ranking Bot
578fc5338f 更新CPU性能排行榜数据 - 2025-08-07 01:38:31 2025-08-07 01:38:31 +00:00
CPU Ranking Bot
48c6d76863 更新CPU性能排行榜数据 - 2025-08-06 01:38:10 2025-08-06 01:38:10 +00:00
CPU Ranking Bot
ed69abb382 更新CPU性能排行榜数据 - 2025-08-05 01:38:22 2025-08-05 01:38:22 +00:00
CPU Ranking Bot
c807be29d8 更新CPU性能排行榜数据 - 2025-08-04 01:38:38 2025-08-04 01:38:38 +00:00
CPU Ranking Bot
8554b9184a 更新CPU性能排行榜数据 - 2025-08-03 01:38:16 2025-08-03 01:38:16 +00:00
CPU Ranking Bot
e787c934c0 更新CPU性能排行榜数据 - 2025-08-02 01:38:11 2025-08-02 01:38:11 +00:00
CPU Ranking Bot
a363ee6ee3 更新CPU性能排行榜数据 - 2025-08-01 01:38:37 2025-08-01 01:38:37 +00:00
CPU Ranking Bot
ec731a4775 更新CPU性能排行榜数据 - 2025-07-31 01:37:55 2025-07-31 01:37:55 +00:00
CPU Ranking Bot
cb8d8226b6 更新CPU性能排行榜数据 - 2025-07-30 01:38:14 2025-07-30 01:38:14 +00:00
CPU Ranking Bot
6bd0a1c02d 更新CPU性能排行榜数据 - 2025-07-29 01:38:09 2025-07-29 01:38:09 +00:00
CPU Ranking Bot
a86f7c4d6c 更新CPU性能排行榜数据 - 2025-07-28 01:38:11 2025-07-28 01:38:11 +00:00
CPU Ranking Bot
12c5ece7bf 更新CPU性能排行榜数据 - 2025-07-27 01:37:50 2025-07-27 01:37:50 +00:00
CPU Ranking Bot
f34e182ae4 更新CPU性能排行榜数据 - 2025-07-26 01:38:13 2025-07-26 01:38:13 +00:00
CPU Ranking Bot
9f3d1a1960 更新CPU性能排行榜数据 - 2025-07-25 01:38:15 2025-07-25 01:38:15 +00:00
CPU Ranking Bot
c19b29e88a 更新CPU性能排行榜数据 - 2025-07-24 01:38:04 2025-07-24 01:38:04 +00:00
CPU Ranking Bot
2ccf5a9b09 更新CPU性能排行榜数据 - 2025-07-23 01:38:07 2025-07-23 01:38:07 +00:00
CPU Ranking Bot
8d1a1c8b3b 更新CPU性能排行榜数据 - 2025-07-22 01:37:39 2025-07-22 01:37:39 +00:00
CPU Ranking Bot
c65b236a89 更新CPU性能排行榜数据 - 2025-07-21 01:56:23 2025-07-21 01:56:23 +00:00
CPU Ranking Bot
c78ba25f02 更新CPU性能排行榜数据 - 2025-07-21 01:40:26 2025-07-21 01:40:26 +00:00
CPU Ranking Bot
0a406e744e 更新CPU性能排行榜数据 - 2025-07-20 01:37:50 2025-07-20 01:37:50 +00:00
CPU Ranking Bot
acb8699211 更新CPU性能排行榜数据 - 2025-07-19 01:37:45 2025-07-19 01:37:45 +00:00
CPU Ranking Bot
3b2493f770 更新CPU性能排行榜数据 - 2025-07-18 01:37:59 2025-07-18 01:37:59 +00:00
CPU Ranking Bot
af6bda9b86 更新CPU性能排行榜数据 - 2025-07-17 01:37:42 2025-07-17 01:37:42 +00:00
CPU Ranking Bot
4608e1bf3a 更新CPU性能排行榜数据 - 2025-07-16 01:37:47 2025-07-16 01:37:47 +00:00
CPU Ranking Bot
5f3c257158 更新CPU性能排行榜数据 - 2025-07-15 01:37:57 2025-07-15 01:37:57 +00:00
CPU Ranking Bot
441b4d28ef 更新CPU性能排行榜数据 - 2025-07-14 01:37:39 2025-07-14 01:37:39 +00:00
CPU Ranking Bot
6c2c2a6791 更新CPU性能排行榜数据 - 2025-07-13 13:13:21 2025-07-13 13:13:21 +00:00
CPU Ranking Bot
4eb982a22d 更新CPU性能排行榜数据 - 2025-07-13 12:59:41 2025-07-13 12:59:41 +00:00
CPU Ranking Bot
88c50e3c1c 更新CPU性能排行榜数据 - 2025-07-13 12:24:59 2025-07-13 12:24:59 +00:00
CPU Ranking Bot
c272da23fb 更新CPU性能排行榜数据 - 2025-07-13 12:12:35 2025-07-13 12:12:35 +00:00
CPU Ranking Bot
094b05ffbd 更新CPU性能排行榜数据 - 2025-07-13 12:03:36 2025-07-13 12:03:36 +00:00
spiritlhl
63d2c2be15 fix 2025-07-13 11:58:57 +00:00
CPU Ranking Bot
9d540c1f94 更新CPU性能排行榜数据 - 2025-07-13 11:49:55 2025-07-13 11:49:55 +00:00
CPU Ranking Bot
f9b588007f 更新CPU性能排行榜数据 - 2025-07-13 01:35:39 2025-07-13 01:35:39 +00:00
CPU Ranking Bot
cb261032fd 更新CPU性能排行榜数据 - 2025-07-12 01:35:40 2025-07-12 01:35:40 +00:00
CPU Ranking Bot
1fca387a39 更新CPU性能排行榜数据 - 2025-07-11 01:35:52 2025-07-11 01:35:52 +00:00
CPU Ranking Bot
370695c670 更新CPU性能排行榜数据 - 2025-07-10 01:35:32 2025-07-10 01:35:32 +00:00
CPU Ranking Bot
fa0cb5f194 更新CPU性能排行榜数据 - 2025-07-09 01:35:25 2025-07-09 01:35:25 +00:00
CPU Ranking Bot
ba9a9e7cbd 更新CPU性能排行榜数据 - 2025-07-08 01:35:25 2025-07-08 01:35:25 +00:00
CPU Ranking Bot
66d907a68a 更新CPU性能排行榜数据 - 2025-07-07 01:35:43 2025-07-07 01:35:43 +00:00
CPU Ranking Bot
8f99d36b4f 更新CPU性能排行榜数据 - 2025-07-06 01:35:23 2025-07-06 01:35:23 +00:00
CPU Ranking Bot
76af1e9600 更新CPU性能排行榜数据 - 2025-07-05 01:35:28 2025-07-05 01:35:28 +00:00
CPU Ranking Bot
6044e328f2 更新CPU性能排行榜数据 - 2025-07-04 01:35:32 2025-07-04 01:35:32 +00:00
CPU Ranking Bot
fca03354bb 更新CPU性能排行榜数据 - 2025-07-03 01:35:27 2025-07-03 01:35:27 +00:00
CPU Ranking Bot
795eaede40 更新CPU性能排行榜数据 - 2025-07-02 01:35:25 2025-07-02 01:35:25 +00:00
CPU Ranking Bot
2b7991df96 更新CPU性能排行榜数据 - 2025-07-01 01:35:31 2025-07-01 01:35:31 +00:00
CPU Ranking Bot
90d664194b 更新CPU性能排行榜数据 - 2025-06-30 01:34:40 2025-06-30 01:34:40 +00:00
CPU Ranking Bot
fd62156564 更新CPU性能排行榜数据 - 2025-06-29 01:35:17 2025-06-29 01:35:17 +00:00
CPU Ranking Bot
ebd581306c 更新CPU性能排行榜数据 - 2025-06-28 01:35:19 2025-06-28 01:35:19 +00:00
CPU Ranking Bot
695f13a129 更新CPU性能排行榜数据 - 2025-06-27 16:12:17 2025-06-27 16:12:17 +00:00
CPU Ranking Bot
3941537061 更新CPU性能排行榜数据 - 2025-06-27 01:34:38 2025-06-27 01:34:38 +00:00
CPU Ranking Bot
daf8f65c12 更新CPU性能排行榜数据 - 2025-06-26 01:34:31 2025-06-26 01:34:31 +00:00
CPU Ranking Bot
06addade41 更新CPU性能排行榜数据 - 2025-06-25 01:34:38 2025-06-25 01:34:38 +00:00
CPU Ranking Bot
8fda92a19c 更新CPU性能排行榜数据 - 2025-06-24 01:34:34 2025-06-24 01:34:34 +00:00
CPU Ranking Bot
03b7c1541c 更新CPU性能排行榜数据 - 2025-06-23 01:34:32 2025-06-23 01:34:32 +00:00
CPU Ranking Bot
7273321854 更新CPU性能排行榜数据 - 2025-06-22 01:34:27 2025-06-22 01:34:27 +00:00
CPU Ranking Bot
0556680e61 更新CPU性能排行榜数据 - 2025-06-21 01:34:29 2025-06-21 01:34:29 +00:00
CPU Ranking Bot
805809795e 更新CPU性能排行榜数据 - 2025-06-20 01:34:30 2025-06-20 01:34:30 +00:00
CPU Ranking Bot
e7ac550065 更新CPU性能排行榜数据 - 2025-06-19 01:34:34 2025-06-19 01:34:34 +00:00
CPU Ranking Bot
2be8e0ee88 更新CPU性能排行榜数据 - 2025-06-18 01:34:23 2025-06-18 01:34:23 +00:00
CPU Ranking Bot
e338f1a512 更新CPU性能排行榜数据 - 2025-06-17 01:34:31 2025-06-17 01:34:31 +00:00
CPU Ranking Bot
48023f9ed1 更新CPU性能排行榜数据 - 2025-06-16 01:34:27 2025-06-16 01:34:27 +00:00
CPU Ranking Bot
7f9fad3fea 更新CPU性能排行榜数据 - 2025-06-15 15:32:26 2025-06-15 15:32:26 +00:00
CPU Ranking Bot
d5d139e218 更新CPU性能排行榜数据 - 2025-06-15 14:21:56 2025-06-15 14:21:56 +00:00
CPU Ranking Bot
35e0fd426d 更新CPU性能排行榜数据 - 2025-06-15 12:37:39 2025-06-15 12:37:40 +00:00
CPU Ranking Bot
7bf141e303 更新CPU性能排行榜数据 - 2025-06-15 12:29:09 2025-06-15 12:29:09 +00:00
CPU Ranking Bot
12dbceca0d 更新CPU性能排行榜数据 - 2025-06-15 10:27:06 2025-06-15 10:27:06 +00:00
CPU Ranking Bot
e07d8b5114 更新CPU性能排行榜数据 - 2025-06-15 10:18:15 2025-06-15 10:18:15 +00:00
CPU Ranking Bot
0ceb45d17c 更新CPU性能排行榜数据 - 2025-06-15 10:02:38 2025-06-15 10:02:38 +00:00
spiritlhl
0bbfa95b9c 删除无效内容 2025-06-15 09:58:05 +00:00
CPU Ranking Bot
f927185459 更新CPU性能排行榜数据 - 2025-06-15 09:53:42 2025-06-15 09:53:42 +00:00
spiritlhl
c8271b713c Create CNAME 2025-06-15 17:50:16 +08:00
CPU Ranking Bot
27f3bad9ef 更新CPU性能排行榜数据 - 2025-06-15 09:47:49 2025-06-15 09:47:49 +00:00
spiritlhl
dd85b0fd2d Create CNAME 2025-06-15 17:47:09 +08:00
CPU Ranking Bot
47fdb43e54 更新CPU性能排行榜数据 - 2025-06-15 09:30:31 2025-06-15 09:30:31 +00:00
CPU Ranking Bot
6e19ab79d7 更新CPU性能排行榜数据 - 2025-06-15 09:21:06 2025-06-15 09:21:07 +00:00
CPU Ranking Bot
dee3211d3b 更新CPU性能排行榜数据 - 2025-06-15 09:17:35 2025-06-15 09:17:35 +00:00
spiritlhl
67a3bfdaad fix: 修复自动更新安装版本中的版本提取代码 2025-06-05 20:45:51 +08:00
spiritlhl
e57ce05c0c fix: 回退修改 2025-06-05 20:39:52 +08:00
spiritlhl
62137f0bb1 fix: 修复仅安装本体时,可能宿主机连curl/unzip都没有的问他 2025-06-05 20:38:56 +08:00
spiritlhl
f9d8c9ee4c fix: 修复step匹配规则 2025-06-03 23:19:46 +08:00
spiritlhl
913a1725c1 fix: 修复版本号问题 2025-06-03 22:17:12 +08:00
spiritlhl
f1acbd361b fix: 自动替换和更新goecs.sh脚本中的最新tag 2025-06-03 22:13:41 +08:00
spiritlhl
d6f62f8624 fix: 添加部分说明 2025-05-23 15:41:48 +08:00
spiritlhl
94da890522 fix: 修复可能的测速延迟显示异常和CPU频率显示异常的问题 2025-05-22 03:16:02 +00:00
spiritlhl
42b94260de fix: 修复IPV6子网掩码识别错误的问题,修复nexttrace的IPV6线路识别替换备用地址错误的问题 2025-05-19 02:25:52 +00:00
spiritsoul
16e2603176 fix: 修改在发布版本后自动进行public分支构建和docker镜像构建 2025-04-25 20:19:19 +08:00
spiritsoul
0ed9840038 fix: 修复磁盘IO测试,添加路径挂载盘大小检测自动缩放测试文件比例 2025-04-25 19:48:41 +08:00
spiritsoul
31b53e13b0 fix: 对接上游更新,nt3加入recover机制 2025-04-16 21:23:09 +08:00
spiritsoul
fb697fa25f fix: 更新版本号 2025-04-13 13:48:08 +08:00
spiritsoul
2510b3ead0 fix: 更新三网ICMP的ping值测试逻辑支持全国各省份 2025-04-13 13:45:18 +08:00
spiritsoul
b64b8a2d96 fix: 更新backtrace的json解析 2025-04-13 13:44:34 +08:00
spiritsoul
663614117d fix: 修复未打印的流媒体测试结果 2025-04-12 17:50:14 +08:00
spiritsoul
a96c9b6c7d feat: 三网路由路线检测支持IPV6路由检测,移动无实际使用的包至于back 2025-04-11 23:33:21 +08:00
spiritsoul
e8f73ba4b8 fix: 当默认不进行环境安装时,确保起码的unzip命令可用 2025-04-07 20:11:52 +08:00
spiritsoul
dd6fbff943 fix: 替换嵌入的静态依赖不指定CPU指令集优化以兼容新旧CPU型号 2025-04-06 14:38:46 +08:00
spiritsoul
e473851a02 fix: 添加无环境依赖说明 2025-04-05 00:13:01 +08:00
spiritsoul
86fc407ccb fix: 修复按Ctrl+C按钮退出程序时,Windows/Macos系统会闪退退出程序的问题 2025-04-04 23:33:18 +08:00
spiritsoul
8e6037c340 fix: 修复说明,去除所有可能的额外环境依赖,最极端环境下单二进制文件可所有项目进行测试 2025-04-04 23:26:15 +08:00
spiritsoul
be59af4411 fix: 即便已自带fio依赖,依然尝试环境安装,不保证自带依赖通用 2025-04-02 22:12:40 +08:00
spiritsoul
7ae753a4e2 feat: disktest添加原生包含fio的静态编译文件,不再需要额外安装fio依赖 2025-04-02 19:20:31 +08:00
spiritsoul
3956420ffe fix: 系统基础信息检测合并同功能函数避免重复 2025-04-01 20:40:25 +08:00
spiritsoul
6ebe25af2d fix: 解决说明歧义 2025-03-31 22:44:10 +08:00
spiritlhl
fe02bd295a fix: 非版本问题系源问题 2025-03-31 22:36:43 +08:00
spiritlhl
172b520702 fix: 回退alpine系统版本,最新版本不可用存在环境依赖缺失 2025-03-31 22:34:32 +08:00
spiritlhl
d460e2b167 fix: alpine系统依赖更新 2025-03-31 22:32:17 +08:00
spiritsoul
03f5fd9e48 fix: 修复IPV6的prefixNum检测,去除系统本身的修改,增加多系统适配 2025-03-31 22:01:29 +08:00
spiritsoul
0b0972cc3e feat: 更新主版本 2025-03-30 20:58:03 +08:00
spiritsoul
8273895def fix: 修复cidr识别 2025-03-30 20:56:54 +08:00
spiritsoul
3e31671502 fix: 修复硬盘的dd测试在fedora上只出现写测试没有读测试的数据,原因系/dev/null和/tmp不可用 2025-03-30 19:03:31 +08:00
spiritsoul
42b3ab3cff fix: 同步修改 2025-03-30 14:01:18 +08:00
spiritlhl
0bef8161e7 fix: 组件迁移 2025-03-29 21:31:00 +08:00
spiritsoul
4f7e37f37c fix: 升级所有关联仓库的依赖 2025-03-29 21:09:27 +08:00
spiritsoul
c0dcea53e3 fix: 更新SecurityCheck依赖 2025-03-29 20:55:37 +08:00
spiritsoul
02034da2d7 fix: 更新御三家检测依赖 2025-03-29 20:43:45 +08:00
spiritsoul
aa6c835aed fix: 更新御三家检测依赖 2025-03-29 20:43:07 +08:00
spiritsoul
2ebfdf7533 fix: 引入 he.net 和 bgp.tools 抓取CIDR 2025-03-29 20:36:17 +08:00
spiritsoul
28e21f0838 feat: 基础信息添加bgp邻居查询和CIDR显示,更新基础系统信息查询依赖 2025-03-29 20:08:20 +08:00
spiritsoul
23aae0b32b fix: 迁移主main暂不使用的组件 2025-03-29 18:45:07 +08:00
spiritlhl
abaf021e1c fix: 修复hits徽章失效的问题,使用项目 https://github.com/oneclickvirt/hitscounter 2025-03-29 08:06:09 +00:00
spiritsoul
be4e46ceba No additional shell file dependencies other than the environment installation shell 2025-03-24 22:01:59 +08:00
lihualong
4746ae14cf Merge branch 'master' of https://github.com/oneclickvirt/ecs 2025-03-24 21:59:05 +08:00
lihualong
eb702c4d97 fix: 修正错误md格式 2025-03-24 21:59:01 +08:00
spiritlhl
86bde156a4 fix: 修复错别字 2025-03-21 22:48:32 +08:00
lihualong
08be6238d2 fix: 更正说明链接地址 2025-03-21 22:22:50 +08:00
lihualong
c0472209b4 fix: 更新说明文档 2025-03-21 22:13:59 +08:00
lihualong
e751b76099 尝试修复BSD系统识别硬盘出错,添加KSM和气球驱动默认值 2025-03-19 18:32:10 +08:00
spiritlhl
bf653ab620 表格展示 2025-03-18 14:37:43 +08:00
spiritlhl
c4b7ba00a1 格式统一 2025-03-18 14:24:42 +08:00
lihualong
87a288907a 修复pingtest可能存在的CDN轮询问题 2025-03-17 21:43:25 +08:00
lihualong
c3aa62753b 修复BSD系统上CPU测试时sysbench出现数值溢出的问题 2025-03-16 19:38:50 +08:00
lihualong
83b8efd7ee 修复FreeBSD系统上IO测试失效的问题,优化日志输出 2025-03-16 18:56:44 +08:00
spiritlhl
2fa0270e4e Update Readme add IBM and Goland Support 2025-03-14 08:35:41 +00:00
lihualong
3bd1136683 v0.1.18 - 修复CDN轮换获取测速地址的逻辑问题 2025-03-08 22:34:15 +08:00
lihualong
d5837ed535 v0.1.17 2025-03-08 21:14:57 +08:00
lihualong
080c62cd93 Update 2025-03-08 21:09:05 +08:00
lihualong
ce690aab2d Merge branch 'master' of https://github.com/oneclickvirt/ecs 2025-03-08 13:32:49 +08:00
lihualong
05ec4d75b8 v0.1.16 修复ping的过程中可能的数组越界问题 2025-03-08 13:32:01 +08:00
spiritlhl
553e0ddef6 Update README_EN.md 2025-03-06 13:02:04 +08:00
spiritlhl
819d155fd5 Update README.md 2025-03-06 13:01:40 +08:00
spiritsoul
d7519801b0 v0.1.15 增加中文致谢以及更新修复部分流媒体检测 2025-03-01 22:56:04 +08:00
spiritsoul
d6302be4ae 修复纯IPV6环境下可能出现的空指针引用问题 2025-02-23 11:51:17 +08:00
spiritsoul
a8366005dc 新增 Apple 检测,修复 Instagram 检测,去除 cip.cc 依赖 2025-02-23 11:39:52 +08:00
spiritlhl
4e3249b590 update 2025-02-18 17:58:59 +08:00
spiritlhl
8a52f6df76 Add help command readme 2025-02-18 17:57:55 +08:00
spiritlhl
ebe85216bb Remove cip.cc 2025-02-18 17:54:23 +08:00
spiritlhl
7909d4ba78 修复speedtest获取测试服务器时可能出现的索引越界问题 2025-02-17 21:37:28 +08:00
spiritlhl
4939d155d8 Improve readme 2025-02-17 21:11:51 +08:00
spiritlhl
d69f85d0db Public test remove upload 2025-02-17 20:57:06 +08:00
spiritlhl
f4dea6ce6e Add after import 2025-02-17 20:47:44 +08:00
spiritlhl
bc596e8e48 Remove security token 2025-02-17 20:45:46 +08:00
spiritlhl
116ae33505 Update 2025-02-17 20:40:54 +08:00
spiritlhl
a32846638b Remove security 2025-02-17 20:39:48 +08:00
spiritlhl
d84fb21f82 Add public branch 2025-02-17 20:35:14 +08:00
spiritlhl
f199336cf0 重构QA 2025-02-05 14:03:26 +00:00
spiritsoul
a1196ab8d2 优化部分说明 2025-02-05 21:30:05 +08:00
spiritsoul
9431fe3944 v0.1.12 - 修复CPU识别相关BUG
- 增加Linux环境下识别CPU的手段gopsutil
- 修复CPU三缓存可能识别失败的问题
- 修复s390x架构下可能识别不到具体CPU的问题,强制输出CPU制造厂商
- 修复HyperV在s390x架构下识别不成功的问题
2025-02-05 21:20:49 +08:00
spiritsoul
5dcef9f4c3 Add zypper 2025-02-05 10:09:33 +08:00
spiritsoul
865ca62f06 加强部分检测 2025-02-04 18:15:18 +08:00
spiritsoul
eea78a7c30 v0.1.10 - 更新流媒体检测 2025-01-31 12:29:06 +08:00
spiritsoul
2f5feace7b v0.1.9 - 避免错误文件的使用 2025-01-27 21:09:04 +08:00
spiritlhl
615ffca90f Update README.md 2025-01-21 09:34:46 +08:00
spiritlhl
685fe735f6 Update README.md 2025-01-20 10:45:17 +08:00
spiritlhl
5545990854 升级Action中默认的Golang版本 1.22 --> 1.23 2025-01-18 19:16:29 +08:00
spiritlhl
91d1aa4461 v0.1.8 - 在存在IPV6信息时修复排版缺少一个换行符 2025-01-18 19:11:13 +08:00
spiritlhl
94f9576383 Update README.md 2025-01-18 15:31:58 +08:00
spiritlhl
ef91a61d22 v0.1.7 2025-01-18 15:08:14 +08:00
spiritlhl
bafd77e2f5 v0.1.6 - 修复误删除强制修改release格式的问题 2025-01-18 14:33:07 +08:00
spiritlhl
eb03d50cd2 新增Claude检测,修复部分其他检测 2025-01-18 13:56:57 +08:00
spiritlhl
dbd921d8ca nt3依赖跟进上游NTrace-core更新
nt3依赖跟进上游NTrace-core更新
2025-01-18 11:31:10 +08:00
spiritlhl
8b9df2c385 邮件相关检测增加检测
邮件相关检测增加 "Apple", "MXRoute", "Namecrane", "XYAMail", "ZohoMail", "Inbox_eu", "Free_fr" 的检测
2025-01-18 11:17:10 +08:00
spiritlhl
ce57c141a0 增加QA描述 2025-01-04 17:19:00 +08:00
spiritlhl
da3dc7e11e 设置默认版本 2025-01-03 17:51:58 +08:00
spiritlhl
d4cbd0772a v0.1.4 - 修复中途终止时上传成功但分享链接未打印的问题 2025-01-03 17:44:22 +08:00
spiritlhl
2ff558ae7b v0.1.3 2025-01-03 16:45:21 +08:00
spiritlhl
f5d9752e89 v0.1.3 2025-01-03 16:44:55 +08:00
spiritlhl
1f563c823a Update 2025-01-03 16:44:08 +08:00
spiritlhl
807141751a 更新UnlockTests的版本 & 自实现CPU测试的sysbench逻辑
- 更新UnlockTests的版本
- 在sysbench和geekbench都不能工作时,使用Golang模仿sysbench实现的程序测试进行测试,但单线程一般会比sysbench低300个左右的事件数)每秒(得分)(8.8%误差)
2025-01-03 14:36:00 +08:00
spiritlhl
e55a18b3de 一些修复和优化
- 更新nt3依赖,增加自动重试机制
- 修改ctrl+c的终止命令时也支持自动上传测试结果并保存
- 优化安装命令,在无法识别系统/架构等情况下也尽量可使用默认的命令
2025-01-03 13:53:40 +08:00
spiritlhl
920054c844 v0.1.01 更新上传分享的地址 2025-01-02 14:04:11 +08:00
spiritlhl
3c5405dd07 v0.0.89 - 修复GooglePlayStore检测,增加Sora检测 2024-12-21 18:42:25 +08:00
spiritlhl
a33702f164 Update 2024-12-20 16:33:19 +08:00
spiritlhl
daf07945dc Update README_EN.md 2024-12-08 18:22:56 +08:00
spiritlhl
88b39c0ae3 Update README_EN.md 2024-12-08 18:22:39 +08:00
spiritlhl
65ddb32d74 Update README.md 2024-12-08 18:21:53 +08:00
spiritlhl
acf2f0e98c Add China check 2024-12-08 10:13:05 +00:00
spiritlhl
e63dc4d3f4 Sync to CNB 2024-12-08 09:41:23 +00:00
spiritlhl
7fb4e358e8 Update README.md 2024-12-08 17:32:15 +08:00
spiritlhl
15ba7fb00f Update build_docker.yaml 2024-12-08 17:22:58 +08:00
spiritlhl
916f21a72f Update 2024-12-08 09:10:43 +00:00
spiritlhl
f00d5db69c Update 2024-12-08 09:08:31 +00:00
spiritlhl
6dbb171d3b Use Docker Push 2024-12-08 08:58:15 +00:00
spiritlhl
0921aef041 Change main to master 2024-12-08 08:54:52 +00:00
spiritlhl
dd4a4e317b Push to CNB Repository 2024-12-08 08:54:17 +00:00
spiritlhl
d80f3451ff v0.0.87 修复部分流媒体检测错误识别Ban为No的问题 2024-12-07 21:25:53 +08:00
spiritlhl
ebce9e493d v0.0.86 增加GooglePlay流媒体检测 2024-11-23 21:01:20 +08:00
spiritlhl
176899d3e9 Update 2024-11-18 13:19:11 +08:00
spiritlhl
e58da9e921 Update 2024-11-18 13:09:43 +08:00
spiritlhl
651bbb94d0 Add noninteractive option 2024-11-18 12:54:09 +08:00
spiritlhl
91ffbfa417 v0.0.85 更新分区模块,更新shell相关脚本修复隐藏BUG 2024-11-18 11:24:36 +08:00
spiritlhl
84b0303468 2024.11.17 2024-11-17 08:58:14 +00:00
spiritlhl
f3e10a999b 2024.11.17 更新shell相关内容,支持epel安装回退和可选是否更新包管理器 2024-11-17 08:38:52 +00:00
spiritlhl
76a6e09d97 2024.11.17 更新shell相关内容,支持epel安装回退和可选是否更新包管理器 2024-11-17 08:37:32 +00:00
spiritsoul
9c9dbc6200 增加对应的子网掩码检测调用 2024-11-08 22:19:57 +08:00
spiritsoul
20c8063e5e v0.0.83 增加IPV6子网掩码检测所需的依赖 2024-11-08 20:55:14 +08:00
spiritsoul
fbe5eb8e58 v0.0.83 增加IPV6子网掩码检测 2024-11-08 20:21:17 +08:00
spiritlhl
290f0d8d8c Update 2024-10-20 11:37:06 +08:00
spiritlhl
140347c2a6 v0.0.81
优化在按ctrl+c终止程序时依然生成分享链接
2024-10-06 21:22:14 +08:00
spiritlhl
aeda7a6e88 Update goecs.sh 2024-10-06 21:04:23 +08:00
spiritlhl
a205ca38be v0.0.80
修复选项识别错误以及测速识别错误的问题
修正终止命令的检测和退出机制
pingtest优化日志记录
2024-10-06 20:41:36 +08:00
spiritlhl
43bf9c81ed Update goecs.sh 2024-10-06 19:13:22 +08:00
spiritlhl
d47f8987a7 Update goecs.sh 2024-10-06 19:00:18 +08:00
spiritlhl
ffbe5a539a Update goecs.sh 2024-10-06 16:09:26 +08:00
spiritsoul
4b8ae06df8 v0.0.79 2024-10-06 00:50:52 +08:00
spiritsoul
859e783241 v0.0.78 2024-10-06 00:03:28 +08:00
spiritsoul
3cd912219e v0.0.77 临时修复测速BUG,未完全修复
v0.0.77 临时修复测速BUG,未完全修复
2024-10-05 23:26:09 +08:00
spiritsoul
a85a06b440 v0.0.76
调整输出文本
2024-10-04 23:53:57 +08:00
spiritsoul
681da08f01 v0.0.75
修复终止命令在选项选择时不可用的问题
展示分享链接时同时展示http和https协议的链接
2024-10-04 23:30:06 +08:00
spiritsoul
bdd00d46f8 v0.0.74 2024-08-25 18:01:24 +08:00
spiritsoul
1f213bb788 update 2024-08-22 20:33:39 +08:00
spiritsoul
1dec7c323b update 2024-08-20 17:22:12 +08:00
spiritsoul
391cc351c4 update 2024-08-20 17:05:54 +08:00
spiritsoul
282a947156 update 2024-08-15 21:47:56 +08:00
spiritsoul
73916d324a v0.0.72 2024-08-14 20:34:24 +08:00
spiritsoul
6cce2a7e8e Add https://hub.docker.com/r/spiritlhl/goecs 2024-08-14 18:01:29 +08:00
spiritsoul
2a653930a8 update 2024-08-14 17:54:20 +08:00
spiritsoul
2295035706 v0.0.71 2024-08-14 17:32:21 +08:00
spiritsoul
3e8c7112a0 Merge branch 'master' of https://github.com/oneclickvirt/ecs 2024-08-14 17:09:25 +08:00
spiritsoul
a8175219d5 v0.0.70 2024-08-14 17:09:02 +08:00
spiritlhl
a827583b76 Update build_docker.yaml 2024-08-14 15:37:48 +08:00
spiritlhl
82a1d19c6c Update build_docker.yaml 2024-08-14 13:12:23 +08:00
spiritsoul
4ef0ac8d5a update 2024-08-14 13:10:44 +08:00
spiritsoul
3bb70191e7 update 2024-08-14 13:09:59 +08:00
spiritsoul
1bca0052c5 update 2024-08-14 13:05:54 +08:00
spiritsoul
7c06d278e0 Build Dockerfile 2024-08-14 13:00:35 +08:00
spiritlhl
5cec395f3c Create build_docker.yaml 2024-08-14 12:49:54 +08:00
spiritsoul
4994994d4f v0.0.69 2024-08-13 21:46:30 +08:00
spiritsoul
91ad962b13 更新部分说明 2024-08-09 23:31:43 +08:00
spiritsoul
8356d95566 update 2024-08-09 23:28:45 +08:00
spiritsoul
1428087818 v0.0.68 - 修复fio测试索引结果错误的问题 2024-08-09 13:38:39 +08:00
spiritsoul
7b1e78fb7e remove 2024-08-08 14:04:30 +08:00
spiritsoul
0a62c62dd8 v0.0.67 修复部分流媒体检测 2024-08-08 14:00:37 +08:00
spiritsoul
34b4f66289 update 2024-08-07 23:28:16 +08:00
spiritsoul
eca268048f v0.0.66 - 修复DNS检测漏洞 2024-08-07 23:03:37 +08:00
spiritsoul
c3ffe741ad v0.0.65 2024-08-05 19:58:05 +08:00
spiritsoul
9de837ef71 update 2024-08-05 14:48:32 +08:00
spiritsoul
2c3da79871 update 2024-08-05 11:09:04 +08:00
spiritsoul
e7ad87ecbd fix old wget err 2024-08-05 11:04:27 +08:00
spiritsoul
a89a79c11c v0.0.64 - 优化增加原生实现ping测试
v0.0.64 - 优化增加原生实现ping测试
2024-08-04 21:47:50 +08:00
spiritsoul
ee38b65a5a update 2024-08-03 23:19:11 +08:00
spiritsoul
0a756f04ca update 2024-08-03 18:46:08 +08:00
spiritsoul
f040ffb1d4 v0.0.63 2024-08-01 13:14:17 +08:00
spiritsoul
efb870a9de v0.0.63 2024-08-01 13:13:02 +08:00
spiritsoul
9151cd3b70 update 2024-07-31 14:16:04 +08:00
spiritsoul
ef8e2789e2 update 2024-07-31 14:15:29 +08:00
spiritsoul
2dad691bd6 update 2024-07-30 21:59:50 +08:00
spiritsoul
a9c5ed359a v0.0.61 2024-07-30 18:26:59 +08:00
spiritsoul
e3c88308c9 update 2024-07-30 18:12:40 +08:00
spiritsoul
617c6c2f98 update 2024-07-30 18:07:31 +08:00
spiritsoul
d42d6999a2 update 2024-07-30 17:43:07 +08:00
spiritsoul
4c0f54181c v0.0.59 2024-07-30 14:05:13 +08:00
spiritsoul
f2828970f5 update
update
2024-07-30 14:03:25 +08:00
spiritsoul
7d84d55823 Revert "update"
This reverts commit daad5158d4.
2024-07-30 13:00:46 +08:00
spiritsoul
daad5158d4 update
update
2024-07-30 12:48:32 +08:00
spiritsoul
859eea7b69 update 2024-07-30 11:27:49 +08:00
spiritsoul
50b172d274 update 2024-07-30 11:26:50 +08:00
spiritsoul
1534cc19b0 update 2024-07-30 11:24:34 +08:00
spiritysdx
f0e5af9dcd update 2024-07-29 20:58:12 +08:00
spiritysdx
900083ad25 update 2024-07-29 20:56:18 +08:00
spiritysdx
5784e9b76f update 2024-07-29 15:17:17 +08:00
spiritysdx
a79e908f40 update 2024-07-29 15:15:09 +08:00
spiritysdx
53c25a6230 update 2024-07-29 13:24:03 +08:00
spiritysdx
aa76fe134c update 2024-07-29 13:20:44 +08:00
spiritysdx
a1491585d6 update 2024-07-26 22:19:29 +08:00
spiritysdx
b5fce2e16b update 2024-07-26 18:50:18 +08:00
spiritysdx
ac1da2af0a update 2024-07-26 10:25:15 +08:00
spiritysdx
6ff440a9e9 update 2024-07-21 20:55:07 +08:00
spiritysdx
1a3049e49d update 2024-07-21 20:50:11 +08:00
spiritysdx
b463cd3085 update 2024-07-21 20:47:05 +08:00
spiritysdx
bf16dfa387 update 2024-07-21 20:35:03 +08:00
spiritysdx
e00415960f update 2024-07-21 20:33:03 +08:00
spiritysdx
f0ed7c5b1c update 2024-07-21 20:32:06 +08:00
spiritysdx
e6500a23ee update 2024-07-21 20:31:54 +08:00
spiritysdx
b1d0611f6b update 2024-07-21 19:44:35 +08:00
spiritysdx
b78cf8a1ac update 2024-07-21 19:40:39 +08:00
spiritysdx
34065b0161 update 2024-07-20 18:48:31 +08:00
spiritysdx
f2e4ca6a0b update 2024-07-16 11:19:50 +08:00
spiritysdx
a8c76a2ee2 Remove vendor directory from version control 2024-07-16 11:18:54 +08:00
spiritysdx
d6319e5a02 Add vendor to .gitignore 2024-07-16 11:18:39 +08:00
spiritysdx
2213e52335 update 2024-07-16 10:28:57 +08:00
spiritysdx
0f5b11cc5f update 2024-07-06 11:07:27 +08:00
spiritysdx
36fda2e287 update 2024-07-05 22:10:41 +08:00
spiritysdx
7dfece6e29 update 2024-07-05 15:28:51 +08:00
spiritysdx
ffb9bfdf7f update 2024-07-04 22:08:51 +08:00
spiritysdx
17e96a94fe update 2024-07-04 21:27:55 +08:00
spiritysdx
b16b22c117 update 2024-07-04 21:19:33 +08:00
spiritysdx
9a6879207f update 2024-07-04 20:45:10 +08:00
spiritysdx
8e66e5c801 update 2024-07-04 20:31:58 +08:00
spiritysdx
47d84ac3dd update 2024-07-04 20:30:45 +08:00
spiritysdx
073a894e26 update 2024-07-04 20:24:37 +08:00
spiritysdx
7a92e6688e update 2024-07-04 20:23:14 +08:00
spiritysdx
971a2c66c7 update 2024-07-04 20:05:05 +08:00
spiritysdx
b4e9e17925 update 2024-07-04 20:01:32 +08:00
spiritysdx
5de0e9734e update 2024-07-04 19:51:26 +08:00
spiritysdx
465c6031f8 update 2024-07-04 19:50:20 +08:00
spiritysdx
a421e12435 update 2024-07-04 19:47:38 +08:00
spiritysdx
766f978e3e update 2024-07-04 19:42:41 +08:00
spiritysdx
ae9d74c17c update 2024-07-04 19:35:06 +08:00
spiritysdx
958c0c4153 update 2024-07-04 19:24:25 +08:00
spiritysdx
9924bb1e72 update 2024-07-04 19:23:00 +08:00
spiritysdx
a6d28bd72a update 2024-07-04 19:14:04 +08:00
spiritysdx
955b887039 update 2024-07-04 18:53:30 +08:00
spiritysdx
ac3839a8eb update 2024-07-04 18:53:11 +08:00
spiritysdx
4d2c89dc96 update 2024-07-04 18:42:32 +08:00
spiritysdx
e773e4d0fd update 2024-07-04 18:41:51 +08:00
spiritysdx
d0814ee1da update 2024-07-04 18:36:18 +08:00
spiritysdx
c31c978fc8 update 2024-07-04 18:29:46 +08:00
spiritysdx
040a3db6e2 update 2024-07-04 18:26:05 +08:00
spiritysdx
cd68643df8 update 2024-07-04 18:14:04 +08:00
spiritysdx
5ad59dcd36 update 2024-07-04 18:04:54 +08:00
spiritysdx
476ae5d25f update 2024-07-04 17:53:52 +08:00
spiritysdx
369ae42139 update 2024-07-04 15:54:48 +08:00
spiritysdx
676973d946 update 2024-07-04 13:18:02 +08:00
spiritysdx
3ce8b69065 update 2024-07-04 13:13:37 +08:00
spiritysdx
d752a2fb7f update 2024-07-04 13:11:43 +08:00
spiritysdx
95fba10d0f update 2024-07-04 12:59:56 +08:00
spiritysdx
acebe04732 update 2024-07-04 12:59:36 +08:00
spiritysdx
226f751655 update 2024-07-04 11:53:05 +08:00
spiritysdx
18a0de4c4e update 2024-07-04 11:52:21 +08:00
spiritysdx
e5f29dc46c update 2024-07-04 11:22:22 +08:00
spiritysdx
c94d0133fc update 2024-07-04 11:13:04 +08:00
spiritysdx
7cd1e9190b update 2024-07-04 11:09:05 +08:00
spiritysdx
df735880fe update 2024-07-04 11:04:22 +08:00
spiritysdx
f0b89d4168 update 2024-07-04 10:59:03 +08:00
spiritysdx
8af46d4bfb update 2024-07-03 23:20:43 +08:00
spiritysdx
e8fdbee3e4 update 2024-07-03 20:21:25 +08:00
spiritysdx
6cbd20fc90 update 2024-07-03 20:01:14 +08:00
spiritysdx
25c0b2ba95 update 2024-07-03 10:48:40 +08:00
spiritysdx
f16c0e7bcf update 2024-07-02 23:24:48 +08:00
spiritysdx
12e29bc105 update 2024-07-02 23:23:05 +08:00
spiritysdx
f7a7e34b34 update 2024-07-02 23:17:18 +08:00
spiritysdx
4d7049c9b8 update 2024-07-02 23:13:38 +08:00
spiritysdx
ad61caf1d2 update 2024-07-02 23:03:24 +08:00
spiritysdx
f84cbe2078 update 2024-07-02 22:33:29 +08:00
spiritysdx
a9df37f216 update 2024-07-02 22:12:57 +08:00
spiritysdx
60bec3d46c update 2024-07-02 22:10:44 +08:00
spiritysdx
3c1e1f19c4 update 2024-07-02 21:50:39 +08:00
spiritysdx
207d8ff746 update 2024-07-02 21:32:17 +08:00
spiritysdx
835dc7a0fd update 2024-07-02 20:10:49 +08:00
spiritysdx
cdfb956211 update 2024-07-02 16:22:01 +08:00
spiritysdx
d5ba31e5d7 update 2024-07-02 15:21:36 +08:00
spiritysdx
e80ec4f063 update 2024-07-02 14:14:37 +08:00
spiritysdx
cdb8d8681e update 2024-07-02 11:35:51 +08:00
spiritysdx
d6d0abeb1c update 2024-07-02 11:33:31 +08:00
spiritysdx
9565248f95 update 2024-07-02 11:20:34 +08:00
spiritysdx
1d6cd5984b update 2024-07-02 00:18:59 +08:00
spiritysdx
63b857c915 update 2024-07-01 19:46:16 +08:00
spiritysdx
6811f19db4 update 2024-07-01 19:38:06 +08:00
spiritysdx
847e1c0d6e update 2024-07-01 18:40:23 +08:00
spiritysdx
99a8448d53 update 2024-07-01 18:38:16 +08:00
spiritysdx
4fe9cd21ef update 2024-07-01 18:31:21 +08:00
spiritysdx
bdb53ac436 update 2024-07-01 18:26:09 +08:00
spiritysdx
01b9ee4505 update 2024-07-01 18:13:57 +08:00
spiritysdx
fadbf9c6aa update 2024-07-01 17:59:40 +08:00
spiritysdx
60e235e4d7 update 2024-07-01 17:59:24 +08:00
spiritysdx
da4b431761 update 2024-07-01 17:48:40 +08:00
spiritysdx
7fff30521e update 2024-07-01 17:46:33 +08:00
spiritysdx
e7c78774ca update 2024-07-01 17:43:35 +08:00
spiritysdx
fb6f9da14c update 2024-07-01 17:40:45 +08:00
spiritysdx
7b1773c5f0 update 2024-07-01 17:40:08 +08:00
spiritysdx
7b15a74448 update 2024-07-01 17:33:09 +08:00
spiritysdx
956f65941e update 2024-07-01 17:15:27 +08:00
spiritysdx
6d1f806e94 update 2024-07-01 17:04:37 +08:00
spiritysdx
d727d6b778 update 2024-07-01 16:58:02 +08:00
spiritysdx
ea891861b3 update 2024-07-01 16:40:35 +08:00
spiritysdx
e0826a80c8 update 2024-07-01 16:38:45 +08:00
spiritysdx
74868a918e update 2024-07-01 16:34:36 +08:00
spiritysdx
889ecee3f3 update 2024-07-01 16:32:36 +08:00
spiritysdx
f6dd0bbb56 update 2024-07-01 15:03:54 +08:00
spiritysdx
01686f3e9d update 2024-07-01 13:44:03 +08:00
spiritysdx
5a6cd7d671 update 2024-07-01 13:31:44 +08:00
spiritysdx
35e183b640 update 2024-07-01 13:14:49 +08:00
spiritysdx
a684052966 update 2024-07-01 12:29:18 +08:00
spiritysdx
2beb74c319 update 2024-07-01 12:22:39 +08:00
spiritysdx
5218c95162 update 2024-07-01 12:10:56 +08:00
spiritysdx
83be2066c8 update 2024-07-01 12:00:52 +08:00
spiritysdx
975bcbfc00 update 2024-07-01 11:51:35 +08:00
spiritysdx
dbddbc29a3 update 2024-07-01 11:50:33 +08:00
spiritysdx
af3894a908 update 2024-06-30 23:28:34 +08:00
spiritysdx
abb2fd079a update 2024-06-30 22:43:26 +08:00
spiritysdx
83dacb4e6b update 2024-06-30 22:31:37 +08:00
spiritysdx
e83cbaf011 update 2024-06-30 22:29:51 +08:00
spiritysdx
ecd61fd51b update 2024-06-30 21:13:26 +08:00
spiritysdx
3c800b5193 update 2024-06-30 20:51:03 +08:00
spiritysdx
861a8f46e4 update 2024-06-30 20:28:53 +08:00
spiritysdx
6f0b1556bb update 2024-06-30 20:15:55 +08:00
spiritysdx
ab91735695 update 2024-06-30 19:49:25 +08:00
spiritysdx
c611946a9c update 2024-06-30 18:43:33 +08:00
spiritysdx
6a0fe661fa update 2024-06-30 17:19:33 +08:00
spiritysdx
dd20c72910 update 2024-06-30 17:10:03 +08:00
spiritysdx
0de20a290f update 2024-06-30 14:00:56 +08:00
spiritysdx
b4ba95b3f6 update 2024-06-30 13:59:07 +08:00
spiritysdx
b33b588ea4 update 2024-06-30 13:44:21 +08:00
spiritysdx
9d214e2b8f update 2024-06-30 13:42:54 +08:00
spiritysdx
9073802585 update 2024-06-30 13:37:49 +08:00
spiritysdx
f7b00cf621 update 2024-06-30 13:19:32 +08:00
spiritysdx
9f956f6e8c update 2024-06-30 13:02:07 +08:00
spiritysdx
b33598b847 update 2024-06-30 11:23:36 +08:00
spiritysdx
e7fbc126a1 update 2024-06-30 11:09:01 +08:00
spiritysdx
b92025f26c update 2024-06-30 00:17:09 +08:00
spiritysdx
8ffd121261 update 2024-06-29 23:55:34 +08:00
spiritysdx
ab33d841fe update 2024-06-29 23:48:31 +08:00
spiritysdx
384622176a update 2024-06-29 22:31:08 +08:00
spiritysdx
7744902183 update 2024-06-29 22:25:11 +08:00
spiritysdx
c73f240d86 update 2024-06-29 22:06:50 +08:00
spiritysdx
7f1103a031 update 2024-06-29 22:05:43 +08:00
spiritysdx
c4e9f569b7 update 2024-06-29 21:52:08 +08:00
spiritysdx
8af8d4ccaa update 2024-06-29 21:43:17 +08:00
spiritysdx
c13e68eccd update 2024-06-29 21:42:56 +08:00
spiritysdx
57e2aa57f8 update 2024-06-29 21:41:18 +08:00
41 changed files with 19881 additions and 1814 deletions

View File

@@ -1,65 +0,0 @@
name: go-ci
on: [push]
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: set up
uses: actions/setup-go@v3
with:
go-version: 1.22.4
id: go
- name: check out
uses: actions/checkout@v3
- name: Cache
uses: actions/cache@v2.1.0
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Configure Git for Private Modules
run: |
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
git config --global url."git@github.com:".insteadOf "https://github.com/"
env:
GITHUB_TOKEN: ${{ secrets.GHT }}
env:
GOPRIVATE: github.com/oneclickvirt/security
GITHUB_TOKEN: ${{ secrets.GHT }}
build:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Configure Git for Private Modules
run: |
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
git config --global url."git@github.com:".insteadOf "https://github.com/"
env:
GITHUB_TOKEN: ${{ secrets.GHT }}
- name: build
run: go build ./...
env:
GOPRIVATE: github.com/oneclickvirt/security
GITHUB_TOKEN: ${{ secrets.GHT }}
# test:
# needs: setup
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# - name: Configure Git for Private Modules
# run: |
# git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
# git config --global url."git@github.com:".insteadOf "https://github.com/"
# env:
# GITHUB_TOKEN: ${{ secrets.GHT }}
# - name: test
# run: go test ./goecs_test.go
# env:
# GOPRIVATE: github.com/oneclickvirt/security
# GITHUB_TOKEN: ${{ secrets.GHT }}

View File

@@ -1,37 +0,0 @@
name: goreleaser
on:
workflow_dispatch:
tags:
- "v*.*.*"
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.22.4
- name: Configure Git for Private Modules
run: |
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
git config --global url."git@github.com:".insteadOf "https://github.com/"
env:
GITHUB_TOKEN: ${{ secrets.GHT }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v4
with:
distribution: goreleaser
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GHT }}
GOPRIVATE: github.com/oneclickvirt/security

8
.idea/.gitignore generated vendored
View File

@@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

9
.idea/ecs.iml generated
View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
.idea/modules.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ecs.iml" filepath="$PROJECT_DIR$/.idea/ecs.iml" />
</modules>
</component>
</project>

8
.idea/sshConfigs.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SshConfigs">
<configs>
<sshConfig authType="PASSWORD" host="49.234.158.14" id="950b8219-3ab3-47e7-ad76-6b6a5d0857b0" port="22" nameFormat="DESCRIPTIVE" username="root" useOpenSSHConfig="true" />
</configs>
</component>
</project>

6
.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

1
CNAME Normal file
View File

@@ -0,0 +1 @@
sysbench.spiritlhl.net

21
LICENSE
View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2024 oneclickvirt
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,30 +1,39 @@
# ecs # CPU性能测试排行榜
[![goreleaser](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml/badge.svg)](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml) 本目录包含CPU性能测试的结果和排行榜数据。
融合怪测评脚本 - GO重构版本 ## 文件说明
Shell版本 https://github.com/spiritLHLS/ecs ### 主要文件
- `index.html`: 排行榜网页展示页面
- `all_cpu_results.json`: 包含所有CPU测试结果的完整数据
- `CNAME`: GitHub Pages自定义域名配置文件
## 功能 ### CSV文件夹 (csvs/)
- `all_cpus_single_core_ranking.csv`: 所有CPU单核性能排行榜
- `all_cpus_multi_core_ranking.csv`: 所有CPU多核性能排行榜
- `{CPU型号}_single_core.csv`: 特定CPU型号的单核性能排行
- `{CPU型号}_multi_core.csv`: 特定CPU型号的多核性能排行
- [x] 系统基础信息查询[自研[basics](https://github.com/oneclickvirt/basics)、[gostun](https://github.com/oneclickvirt/gostun)] ## 在线查看
- [x] IP基础信息并发查询[自研[basics](https://github.com/oneclickvirt/basics)]
- [x] CPU测试[自研[cputest](https://github.com/oneclickvirt/cputest)支持sysbench、geekbench、winsat]
- [x] 内存测试[自研[memorytest](https://github.com/oneclickvirt/memorytest)支持sysbench、dd]
- [x] 硬盘测试[自研[disktest](https://github.com/oneclickvirt/disktest)支持dd、fio、winsat]
- [x] 御三家流媒体解锁信息并发查询[借鉴[netflix-verify](https://github.com/sjlleo/netflix-verify)、[VerifyDisneyPlus](https://github.com/sjlleo/VerifyDisneyPlus)、[TubeCheck](https://github.com/sjlleo/TubeCheck)二次开发至于[CommonMediaTests](https://github.com/oneclickvirt/CommonMediaTests)]
- [x] 常见流媒体测试并发查询[自研代码,逻辑借鉴[RegionRestrictionCheck](https://github.com/lmc999/RegionRestrictionCheck)、[MediaUnlockTest](https://github.com/HsukqiLee/MediaUnlockTest)并自行修复错漏至于[UnlockTests](https://github.com/oneclickvirt/UnlockTests)]
- [x] IP质量/安全信息并发查询[自研,由于测试含密钥信息,故而私有化开发,但二进制文件编译至于[securityCheck](https://github.com/oneclickvirt/securityCheck)]
- [x] 邮件端口测试[自研[portchecker](https://github.com/oneclickvirt/portchecker)]
- [x] 三网回程测试[借鉴[zhanghanyun/backtrace](https://github.com/zhanghanyun/backtrace)二次开发至于[oneclickvirt/backtrace](https://github.com/oneclickvirt/backtrace)]
- [x] 三网路由测试[借鉴[NTrace-core](https://github.com/nxtrace/NTrace-core)二次开发至于[nt3](https://github.com/oneclickvirt/nt3)]
- [x] 测试网速[基于[speedtest.net-爬虫](https://github.com/spiritLHLS/speedtest.net-CN-ID)、[speedtest.cn-爬虫](https://github.com/spiritLHLS/speedtest.cn-CN-ID)的数据,借鉴[speedtest-go](https://github.com/showwin/speedtest-go)二次开发]
## TODO 可通过 https://sysbench.spiritlhl.net 访问。
- [ ] 测试三网Ping值[借鉴[ecsspeed](https://github.com/spiritLHLS/ecsspeed)的逻辑二次开发] ## 数据字段说明
## 说明 | 字段名 | 说明 |
|--------|------|
| 排名 | 在当前排序中的排名 |
| CPU型号 | 完整的CPU型号信息 |
| CPU核心数 | CPU的核心数量 |
| 单核得分 | 单核性能测试得分 |
| 多核得分 | 多核性能测试得分 |
| 多核线程数 | 多核测试使用的线程数 |
开发中,勿要使用 ## 更新时间
最后更新时间: 2025-09-27 01:39:10 UTC
## 数据来源
数据来源于用户提交的CPU性能测试结果经过自动化脚本处理和排序生成。

View File

@@ -1,9 +0,0 @@
package backtrace
import (
"github.com/oneclickvirt/backtrace/bk"
)
func BackTrace() {
backtrace.BackTrace()
}

View File

@@ -1,20 +0,0 @@
package backtrace
import (
"testing"
)
//func TestGeneratePrefixMap(t *testing.T) {
// prefix := "223.119.8.0/21"
// prefixList := GeneratePrefixList(prefix)
// if prefixList != nil {
// // 打印生成的IP地址前缀列表
// for _, ip := range prefixList {
// fmt.Println(ip)
// }
// }
//}
func TestBackTrace(t *testing.T) {
BackTrace()
}

View File

@@ -1,7 +0,0 @@
package basic
import "testing"
func Test_basic(t *testing.T) {
Basic("zh")
}

View File

@@ -1,20 +0,0 @@
package basic
import (
"fmt"
"github.com/oneclickvirt/basics/network"
"github.com/oneclickvirt/basics/system"
"strings"
)
// 使用gopsutil查询可能会特别慢执行命令查询反而更快
// TODO
// 迁移Shell的完整检测逻辑使用执行命令的方式查询最后都失败才使用gopsutil查询
func Basic(language string) {
ipInfo, _, _ := network.NetworkCheck("both", false, language)
res := system.CheckSystemInfo(language)
//fmt.Println("--------------------------------------------------")
fmt.Printf(strings.ReplaceAll(res+ipInfo, "\n\n", "\n"))
//fmt.Println("--------------------------------------------------")
}

View File

@@ -1,11 +0,0 @@
package commediatest
import (
"fmt"
"github.com/oneclickvirt/CommonMediaTests/commediatests"
)
func ComMediaTest(language string) {
res := commediatests.MediaTests(language)
fmt.Printf(res)
}

View File

@@ -1,9 +0,0 @@
package commediatest
import (
"testing"
)
func TestMedia(t *testing.T) {
ComMediaTest("zh")
}

19034
cpu_statistics.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,39 +0,0 @@
package cputest
import (
"fmt"
"github.com/oneclickvirt/cputest/cpu"
"runtime"
"strings"
)
func CpuTest(language, testMethod, testThread string) {
var res string
if runtime.GOOS == "windows" {
if testMethod != "winsat" && testMethod != "" {
res = "Detected host is Windows, using Winsat for testing.\n"
}
res += cpu.WinsatTest(language, testThread)
} else {
switch testMethod {
case "sysbench":
res = cpu.SysBenchTest(language, testThread)
if res == "" {
res = "Sysbench test failed, switching to Geekbench for testing.\n"
res += cpu.GeekBenchTest(language, testThread)
}
case "geekbench":
res = cpu.GeekBenchTest(language, testThread)
if res == "" {
res = "Geekbench test failed, switching to Sysbench for testing.\n"
res += cpu.SysBenchTest(language, testThread)
}
default:
res = "Invalid test method specified.\n"
}
}
if !strings.Contains(res, "\n") && res != "" {
res += "\n"
}
fmt.Print(res)
}

View File

@@ -1,9 +0,0 @@
package cputest
import (
"testing"
)
func Test(t *testing.T) {
CpuTest("zh", "sysbench", "1")
}

View File

@@ -1,41 +0,0 @@
package disktest
import (
"fmt"
"github.com/oneclickvirt/disktest/disk"
"runtime"
"strings"
)
func DiskTest(language, testMethod, testPath string, isMultiCheck bool) {
var res string
if runtime.GOOS == "windows" {
if testMethod != "winsat" && testMethod != "" {
res = "Detected host is Windows, using Winsat for testing.\n"
}
res = disk.WinsatTest(language, isMultiCheck, testPath)
} else {
switch testMethod {
case "fio":
res = disk.FioTest(language, isMultiCheck, testPath)
if res == "" {
res = "Fio test failed, switching to DD for testing.\n"
res += disk.DDTest(language, isMultiCheck, testPath)
}
case "dd":
res = disk.DDTest(language, isMultiCheck, testPath)
if res == "" {
res = "DD test failed, switching to Fio for testing.\n"
res += disk.FioTest(language, isMultiCheck, testPath)
}
default:
res = "Unsupported test method specified.\n"
}
}
//fmt.Println("--------------------------------------------------")
if !strings.Contains(res, "\n") && res != "" {
res += "\n"
}
fmt.Printf(res)
//fmt.Println("--------------------------------------------------")
}

View File

@@ -1,7 +0,0 @@
package disktest
import "testing"
func TestDiskIoTest(t *testing.T) {
DiskTest("zh", "sysbench", "", false)
}

102
go.mod
View File

@@ -1,102 +0,0 @@
module github.com/oneclickvirt/ecs
go 1.22.4
require (
github.com/oneclickvirt/CommonMediaTests v0.0.1-20240624094420
github.com/oneclickvirt/UnlockTests v0.0.7-20240624115527
github.com/oneclickvirt/backtrace v0.0.4-20240624090335
github.com/oneclickvirt/basics v0.0.3-20240625075226
github.com/oneclickvirt/cputest v0.0.2-20240624103336
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
github.com/oneclickvirt/disktest v0.0.2-20240624145436
github.com/oneclickvirt/memorytest v0.0.1-20240624151629
github.com/oneclickvirt/nt3 v0.0.1-20240627070009
github.com/oneclickvirt/portchecker v0.0.1-20240624155429
github.com/oneclickvirt/security v0.0.1-20240625075931
github.com/oneclickvirt/speedtest v0.0.4-20240629100548
)
require (
github.com/PuerkitoBio/goquery v1.9.2 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/andybalholm/cascadia v1.3.2 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/fatih/color v1.17.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/gofrs/uuid/v5 v5.2.0 // indirect
github.com/google/gopacket v1.1.19 // indirect
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect
github.com/gorilla/websocket v1.5.1 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/huin/goupnp v1.2.0 // indirect
github.com/imroc/req/v3 v3.43.7 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/klauspost/compress v1.17.7 // indirect
github.com/koron/go-ssdp v0.0.4 // indirect
github.com/libp2p/go-nat v0.2.0 // indirect
github.com/libp2p/go-netroute v0.2.1 // indirect
github.com/lionsoul2014/ip2region v2.11.2+incompatible // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/moul/http2curl v1.0.0 // indirect
github.com/nxtrace/NTrace-core v1.3.1 // indirect
github.com/oneclickvirt/gostun v0.0.2-20240625025941 // indirect
github.com/onsi/ginkgo/v2 v2.16.0 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/parnurzeal/gorequest v0.3.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pion/dtls/v2 v2.2.7 // indirect
github.com/pion/logging v0.2.2 // indirect
github.com/pion/stun/v2 v2.0.0 // indirect
github.com/pion/transport/v2 v2.2.1 // indirect
github.com/pion/transport/v3 v3.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/quic-go/qpack v0.4.0 // indirect
github.com/quic-go/quic-go v0.41.0 // indirect
github.com/refraction-networking/utls v1.6.3 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rodaine/table v1.2.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/schollz/progressbar/v3 v3.14.4 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/showwin/speedtest-go v1.7.7 // indirect
github.com/smarty/assertions v1.16.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.18.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tidwall/gjson v1.17.1 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/tklauser/go-sysconf v0.3.14 // indirect
github.com/tklauser/numcpus v0.8.0 // indirect
github.com/tsosunchia/powclient v0.1.5 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.uber.org/mock v0.4.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/net v0.26.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/term v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

298
go.sum
View File

@@ -1,298 +0,0 @@
github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE=
github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/elazarl/goproxy v0.0.0-20240618083138-03be62527ccb h1:2SoxRauy2IqekRMggrQk3yNI5X6omSnk6ugVbFywwXs=
github.com/elazarl/goproxy v0.0.0-20240618083138-03be62527ccb/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM=
github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY=
github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA=
github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0=
github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk=
github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk=
github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU=
github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ=
github.com/lionsoul2014/ip2region v2.11.2+incompatible h1:+VRsGcrHz8ewXI/2UzTptJlACsxD/p4xCxuql4u2nKU=
github.com/lionsoul2014/ip2region v2.11.2+incompatible/go.mod h1:+ZBN7PBoh5gG6/y0ZQ85vJDBe21WnfbRrQQwTfliJJI=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs=
github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/nxtrace/NTrace-core v1.3.1 h1:f4z5UaZEuhUP/g6xElpZ2bo+guWITJVrMKrJTqd27oc=
github.com/nxtrace/NTrace-core v1.3.1/go.mod h1:0Px/Zc60qk6cssmP+yv4kstFxvX9sXqDduoVqBO+qf8=
github.com/oneclickvirt/CommonMediaTests v0.0.1-20240624094420 h1:CBsjuTpAtangTNkfLQDWEDPz3VcBjGHd8WCtifCmTlI=
github.com/oneclickvirt/CommonMediaTests v0.0.1-20240624094420/go.mod h1:DAmFPRjFV5p9fEzUUSml5jJGn2f1NZJQCzTxITHDjc4=
github.com/oneclickvirt/UnlockTests v0.0.7-20240624115527 h1:rMC+aLDkvOe9K+AXjUt/IMAOx1LieyBv6DN/0/2ww7Q=
github.com/oneclickvirt/UnlockTests v0.0.7-20240624115527/go.mod h1:HP3CvAS+AJWxxY+BVbxIOlvaQ87YOSge89vAMG52b5o=
github.com/oneclickvirt/backtrace v0.0.4-20240624090335 h1:0LP5KyA6GLlqQAtOF0uyBSAykHJrzOA96Eb87qUhGQw=
github.com/oneclickvirt/backtrace v0.0.4-20240624090335/go.mod h1:zvsC7xY/WZqs5KL2JB967OVnuqjNbxu9bW6wXRLo5h8=
github.com/oneclickvirt/basics v0.0.3-20240625075226 h1:K9VriCHIYnXPZXBSn9PRQX+jBS6AIFH8tBVb/i8VGAw=
github.com/oneclickvirt/basics v0.0.3-20240625075226/go.mod h1:dTB+/oyFQYfTYX55rFJVWatum5F9g62zjfmHCM6Vj1s=
github.com/oneclickvirt/cputest v0.0.2-20240624103336 h1:7rrVqE1ODzuItuAXcU1/w4lUOxD7hXXB+c2weoO4eZk=
github.com/oneclickvirt/cputest v0.0.2-20240624103336/go.mod h1:wh4fGT3KFG9qztew5eBL9EfWr8WeZPBLsq60ZzudU4g=
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=
github.com/oneclickvirt/defaultset v0.0.2-20240624082446/go.mod h1:e9Jt4tf2sbemCtc84/XgKcHy9EZ2jkc5x2sW1NiJS+E=
github.com/oneclickvirt/disktest v0.0.2-20240624145436 h1:c3bt6kB3FKtrMP/tGUIQWTadoiZwP9zcUkaSdsPF9mQ=
github.com/oneclickvirt/disktest v0.0.2-20240624145436/go.mod h1:x7VAJF0Ks05FyE4BI5xedXNKmwbeXfp8GCRALAIlueI=
github.com/oneclickvirt/gostun v0.0.2-20240625025941 h1:h+ZL8jkjXR6QE0qEX34FjWTv89+lNj2fEkWx5Agpgzc=
github.com/oneclickvirt/gostun v0.0.2-20240625025941/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
github.com/oneclickvirt/memorytest v0.0.1-20240624151629 h1:2rJAB3gFGlFPocIb/WRVWYqs4nr2jGYokfDOgqFicD4=
github.com/oneclickvirt/memorytest v0.0.1-20240624151629/go.mod h1:+YNzy+NeVg61d0kNwSyVDqHyVtKzjuRe1NvMzsDLg0I=
github.com/oneclickvirt/nt3 v0.0.1-20240627070009 h1:020pqkdGDnkIIpyNbbS1sjG1uIl3GgjeNgVqJzAw0ng=
github.com/oneclickvirt/nt3 v0.0.1-20240627070009/go.mod h1:Vb724PgpP17W09mLw5I2UZZAuYbY8WwGlKZdxRDFr0Y=
github.com/oneclickvirt/portchecker v0.0.1-20240624155429 h1:+wapaOcFrg1iWJDhBKThDzppyIMY7hWxK7F5RBkZg4o=
github.com/oneclickvirt/portchecker v0.0.1-20240624155429/go.mod h1:HQxSTrqM8/QFqHMTBZ7S8H9eEO5FkUXU1eb7ZX5Mk+k=
github.com/oneclickvirt/security v0.0.1-20240625075931 h1:Vj1Wq/JVcqYpfqUWRtsITbz3zM4HxnLC0iPxxA6akP0=
github.com/oneclickvirt/security v0.0.1-20240625075931/go.mod h1:6bjZjpYJ8M3aRIcLP61b0mjYRwvtWbYkvoGjS28Bdy4=
github.com/oneclickvirt/speedtest v0.0.3-20240629093211 h1:SU1aGYLpszp3csg599PjlrI/u32KNlHC/FiCx2ucn6w=
github.com/oneclickvirt/speedtest v0.0.3-20240629093211/go.mod h1:JNIxUbEJD12w81b7754RLHD55fsH6wHj+fCV2PqBDhk=
github.com/oneclickvirt/speedtest v0.0.4-20240629100548 h1:DQA0R/EdtmLJrQBb9JvQBaBpcMgiGDvIHq+0quNZQQM=
github.com/oneclickvirt/speedtest v0.0.4-20240629100548/go.mod h1:JNIxUbEJD12w81b7754RLHD55fsH6wHj+fCV2PqBDhk=
github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM=
github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs=
github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY=
github.com/parnurzeal/gorequest v0.3.0 h1:SoFyqCDC9COr1xuS6VA8fC8RU7XyrJZN2ona1kEX7FI=
github.com/parnurzeal/gorequest v0.3.0/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8=
github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s=
github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0=
github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ=
github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c=
github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g=
github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouANiM=
github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
github.com/refraction-networking/utls v1.6.3 h1:MFOfRN35sSx6K5AZNIoESsBuBxS2LCgRilRIdHb6fDc=
github.com/refraction-networking/utls v1.6.3/go.mod h1:yil9+7qSl+gBwJqztoQseO6Pr3h62pQoY1lXiNR/FPs=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rodaine/table v1.2.0 h1:38HEnwK4mKSHQJIkavVj+bst1TEY7j9zhLMWu4QJrMA=
github.com/rodaine/table v1.2.0/go.mod h1:wejb/q/Yd4T/SVmBSRMr7GCq3KlcZp3gyNYdLSBhkaE=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/schollz/progressbar/v3 v3.14.4 h1:W9ZrDSJk7eqmQhd3uxFNNcTr0QL+xuGNI9dEMrw0r74=
github.com/schollz/progressbar/v3 v3.14.4/go.mod h1:aT3UQ7yGm+2ZjeXPqsjTenwL3ddUiuZ0kfQ/2tHlyNI=
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/showwin/speedtest-go v1.7.7 h1:VmK75SZOTKiuWjIVrs+mo7ZoKEw0utiGCvpnurS0olU=
github.com/showwin/speedtest-go v1.7.7/go.mod h1:uLgdWCNarXxlYsL2E5TOZpCIwpgSWnEANZp7gfHXHu0=
github.com/smarty/assertions v1.16.0 h1:EvHNkdRA4QHMrn75NZSoUQ/mAUXAYWfatfB01yTCzfY=
github.com/smarty/assertions v1.16.0/go.mod h1:duaaFdCS0K9dnoM50iyek/eYINOZ64gbh1Xlf6LG7AI=
github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY=
github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U=
github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY=
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
github.com/tsosunchia/powclient v0.1.5 h1:hpixFWoPbWSEC0zc9osSltyjtr1+SnhCueZVLkEpyyU=
github.com/tsosunchia/powclient v0.1.5/go.mod h1:yNlzyq+w9llYZV+0q7nrX83ULy4ghq2mCjpTLJFJ2pg=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

153
goecs.go
View File

@@ -1,153 +0,0 @@
package main
import (
"flag"
"fmt"
"github.com/oneclickvirt/ecs/backtrace"
"github.com/oneclickvirt/ecs/basic"
"github.com/oneclickvirt/ecs/commediatest"
"github.com/oneclickvirt/ecs/cputest"
"github.com/oneclickvirt/ecs/disktest"
"github.com/oneclickvirt/ecs/memorytest"
"github.com/oneclickvirt/ecs/network"
"github.com/oneclickvirt/ecs/ntrace"
"github.com/oneclickvirt/ecs/port"
"github.com/oneclickvirt/ecs/speedtest"
"github.com/oneclickvirt/ecs/unlocktest"
"runtime"
"strings"
"time"
"unicode/utf8"
)
func printCenteredTitle(title string, width int) {
titleLength := utf8.RuneCountInString(title) // 计算字符串的字符数
totalPadding := width - titleLength
padding := totalPadding / 2
paddingStr := strings.Repeat("-", padding)
fmt.Println(paddingStr + title + paddingStr + strings.Repeat("-", totalPadding%2))
}
func main() {
var (
ecsVersion = "2024.06.29"
showVersion bool
language string
cpuTestMethod, cpuTestThread string
memoryTestMethod string
diskTestMethod, diskTestPath string
diskMultiCheck bool
nt3CheckType, nt3Location string
spNum int
width = 84
)
flag.BoolVar(&showVersion, "v", false, "Show version information")
flag.StringVar(&language, "l", "zh", "Specify language (supported: en, zh)")
flag.StringVar(&cpuTestMethod, "cpum", "sysbench", "Specify CPU test method (supported: sysbench, geekbench, winsat)")
flag.StringVar(&cpuTestThread, "cput", "", "Specify CPU test thread count (supported: 1, 2, ...)")
flag.StringVar(&memoryTestMethod, "memorym", "dd", "Specify Memory test method (supported: sysbench, dd, winsat)")
flag.StringVar(&diskTestMethod, "diskm", "fio", "Specify Disk test method (supported: fio, dd, winsat)")
flag.StringVar(&diskTestPath, "diskp", "", "Specify Disk test path, example: -diskp /root")
flag.BoolVar(&diskMultiCheck, "diskmc", false, "Enable multiple disk checks, example: -diskmc=false")
flag.Parse()
if language == "zh" {
flag.StringVar(&nt3Location, "nt3loc", "GZ", "指定三网回程路由检测的地址,支持 GZ, SH, BJ, CD 对应 广州,上海,北京,成都")
flag.StringVar(&nt3CheckType, "nt3t", "ipv4", "指定三网回程路由检测的类型,支持 both, ipv4, ipv6")
}
flag.IntVar(&spNum, "spnum", 2, "Specify speedtest each operator servers num")
flag.Parse()
if showVersion {
fmt.Println(ecsVersion)
return
}
startTime := time.Now()
if language == "zh" {
printCenteredTitle("融合怪测试", width)
fmt.Printf("版本:%s\n", ecsVersion)
fmt.Println("测评频道: https://t.me/vps_reviews\nGo项目地址https://github.com/oneclickvirt/ecs\nShell项目地址https://github.com/spiritLHLS/ecs")
printCenteredTitle("基础信息", width)
basic.Basic(language)
printCenteredTitle(fmt.Sprintf("CPU测试-通过%s测试", cpuTestMethod), width)
cputest.CpuTest(language, cpuTestMethod, cpuTestThread)
printCenteredTitle(fmt.Sprintf("内存测试-通过%s测试", cpuTestMethod), width)
memorytest.MemoryTest(language, memoryTestMethod)
printCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", diskTestMethod), width)
disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck)
printCenteredTitle("御三家流媒体解锁", width)
commediatest.ComMediaTest(language)
printCenteredTitle("跨国流媒体解锁", width)
unlocktest.MediaTest(language)
printCenteredTitle("IP质量检测", width)
ipInfo, securityInfo, _ := network.NetworkCheck("both", true, language)
fmt.Printf(securityInfo)
printCenteredTitle("邮件端口检测", width)
port.EmailCheck()
if runtime.GOOS != "windows" {
// nexttrace 在win上不支持检测报错 bind: An invalid argument was supplied.
printCenteredTitle("三网回程", width)
backtrace.BackTrace()
}
printCenteredTitle("三网回程路由", width)
if nt3CheckType == "" && strings.Contains(ipInfo, "IPV4") {
nt3CheckType = "ipv4"
} else if nt3CheckType == "" && strings.Contains(ipInfo, "IPV6") {
nt3CheckType = "ipv6"
} else if nt3CheckType == "ipv4" && !strings.Contains(ipInfo, "IPV4") && strings.Contains(ipInfo, "IPV6") {
nt3CheckType = "ipv6"
} else if nt3CheckType == "ipv6" && !strings.Contains(ipInfo, "IPV6") && strings.Contains(ipInfo, "IPV4") {
nt3CheckType = "ipv4"
}
ntrace.TraceRoute3(language, nt3Location, nt3CheckType)
printCenteredTitle("就近节点测速", width)
speedtest.ShowHead(language)
speedtest.NearbySP()
speedtest.CustomSP("net", "global", 4)
speedtest.CustomSP("net", "cu", spNum)
speedtest.CustomSP("net", "ct", spNum)
speedtest.CustomSP("net", "cmcc", spNum)
printCenteredTitle("", width)
endTime := time.Now()
duration := endTime.Sub(startTime)
minutes := int(duration.Minutes())
seconds := int(duration.Seconds()) % 60
fmt.Printf("花费 : %d 分 %d 秒\n", minutes, seconds)
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
fmt.Printf("时间 : %s\n", currentTime)
printCenteredTitle("", width)
} else if language == "en" {
printCenteredTitle("Fusion Monster Test", width)
fmt.Printf("Version: %s\n", ecsVersion)
fmt.Println("Review Channel: https://t.me/vps_reviews\nGo Project URL: https://github.com/oneclickvirt/ecs\nShell Project URL: https://github.com/spiritLHLS/ecs")
printCenteredTitle("Basic Information", width)
basic.Basic(language)
printCenteredTitle(fmt.Sprintf("CPU Test - %s Method", cpuTestMethod), width)
cputest.CpuTest(language, cpuTestMethod, cpuTestThread)
printCenteredTitle(fmt.Sprintf("Memory Test - %s Method", memoryTestMethod), width)
memorytest.MemoryTest(language, memoryTestMethod)
printCenteredTitle(fmt.Sprintf("Disk Test - %s Method", diskTestMethod), width)
disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck)
printCenteredTitle("The Three Families Streaming Media Unlock", width)
commediatest.ComMediaTest(language)
printCenteredTitle("Cross-Border Streaming Media Unlock", width)
unlocktest.MediaTest(language)
printCenteredTitle("IP Quality Check", width)
_, securityInfo, _ := network.NetworkCheck("both", true, language)
fmt.Printf(securityInfo)
printCenteredTitle("Email Port Check", width)
port.EmailCheck()
//printCenteredTitle("Return Path Routing", width)
printCenteredTitle("Nearby Node Speed Test", width)
speedtest.ShowHead(language)
speedtest.NearbySP()
speedtest.CustomSP("net", "global", -1)
printCenteredTitle("", width)
endTime := time.Now()
duration := endTime.Sub(startTime)
minutes := int(duration.Minutes())
seconds := int(duration.Seconds()) % 60
fmt.Printf("Cost Time : %d 分 %d 秒\n", minutes, seconds)
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
fmt.Printf("Current Time : %s\n", currentTime)
printCenteredTitle("", width)
}
}

View File

@@ -1,93 +0,0 @@
#!/bin/bash
#From https://github.com/oneclickvirt/ecs
#2024.06.29
rm -rf /usr/bin/goecs
rm -rf goecs
os=$(uname -s)
arch=$(uname -m)
check_cdn() {
local o_url=$1
for cdn_url in "${cdn_urls[@]}"; do
if curl -sL -k "$cdn_url$o_url" --max-time 6 | grep -q "success" >/dev/null 2>&1; then
export cdn_success_url="$cdn_url"
return
fi
sleep 0.5
done
export cdn_success_url=""
}
check_cdn_file() {
check_cdn "https://raw.githubusercontent.com/spiritLHLS/ecs/main/back/test"
if [ -n "$cdn_success_url" ]; then
echo "CDN available, using CDN"
else
echo "No CDN available, no use CDN"
fi
}
cdn_urls=("https://cdn0.spiritlhl.top/" "http://cdn3.spiritlhl.net/" "http://cdn1.spiritlhl.net/" "http://cdn2.spiritlhl.net/")
check_cdn_file
case $os in
Linux)
case $arch in
"x86_64" | "x86" | "amd64" | "x64")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-linux-amd64"
;;
"i386" | "i686")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-linux-386"
;;
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-linux-arm64"
;;
*)
echo "Unsupported architecture: $arch"
exit 1
;;
esac
;;
Darwin)
case $arch in
"x86_64" | "x86" | "amd64" | "x64")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-darwin-amd64"
;;
"i386" | "i686")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-darwin-386"
;;
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-darwin-arm64"
;;
*)
echo "Unsupported architecture: $arch"
exit 1
;;
esac
;;
FreeBSD)
case $arch in
amd64)
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-freebsd-amd64"
;;
"i386" | "i686")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-freebsd-386"
;;
"armv7l" | "armv8" | "armv8l" | "aarch64" | "arm64")
wget -O goecs "${cdn_success_url}https://github.com/oneclickvirt/ecs/releases/download/output/ecs-freebsd-arm64"
;;
*)
echo "Unsupported architecture: $arch"
exit 1
;;
esac
;;
*)
echo "Unsupported operating system: $os"
exit 1
;;
esac
chmod 777 goecs
cp goecs /usr/bin/goecs

View File

@@ -1,7 +0,0 @@
package main
import "testing"
func Test(t *testing.T) {
main()
}

816
index.html Executable file
View File

@@ -0,0 +1,816 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="google-site-verification" content="wdrGBim_2XmtMrqxivze70saMiPQAiOhpmN3KAWb0Sw" />
<title>CPU Performance Ladder For Sysbench</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #fafafa;
color: #37352f;
line-height: 1.5;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 40px 20px;
}
.header {
text-align: center;
margin-bottom: 48px;
padding-bottom: 24px;
border-bottom: 1px solid #e9e9e7;
position: relative;
}
.header h1 {
font-size: 32px;
font-weight: 700;
color: #2d2d2d;
margin-bottom: 8px;
}
.header p {
font-size: 16px;
color: #6b6b6b;
}
.language-toggle {
position: absolute;
top: 0;
right: 0;
background: white;
border: 1px solid #e9e9e7;
border-radius: 8px;
overflow: hidden;
display: flex;
}
.language-toggle button {
padding: 8px 16px;
border: none;
background: transparent;
cursor: pointer;
font-size: 12px;
transition: all 0.2s ease;
color: #6b6b6b;
}
.language-toggle button.active {
background: #0066cc;
color: white;
}
.language-toggle button:hover:not(.active) {
background: #f7f7f5;
}
.controls {
display: flex;
gap: 16px;
margin-bottom: 32px;
flex-wrap: wrap;
align-items: center;
}
.search-box {
flex: 1;
min-width: 200px;
position: relative;
display: flex;
gap: 8px;
}
.search-box input {
flex: 1;
padding: 12px 16px;
border: 1px solid #e9e9e7;
border-radius: 8px;
font-size: 14px;
background: white;
transition: all 0.2s ease;
}
.search-box input:focus {
outline: none;
border-color: #0066cc;
box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1);
}
.search-buttons {
display: flex;
gap: 4px;
}
.search-btn {
padding: 12px 16px;
border: 1px solid #e9e9e7;
background: white;
border-radius: 8px;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
color: #6b6b6b;
}
.search-btn:hover {
background: #f7f7f5;
}
.search-btn.search {
background: #0066cc;
color: white;
border-color: #0066cc;
}
.search-btn.clear {
background: #e91e63;
color: white;
border-color: #e91e63;
}
.view-toggle {
display: flex;
background: white;
border: 1px solid #e9e9e7;
border-radius: 8px;
overflow: hidden;
}
.view-toggle button {
padding: 12px 20px;
border: none;
background: transparent;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
}
.view-toggle button.active {
background: #0066cc;
color: white;
}
.view-toggle button:hover:not(.active) {
background: #f7f7f5;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 32px;
}
.stat-card {
background: white;
padding: 24px;
border-radius: 12px;
border: 1px solid #e9e9e7;
text-align: center;
transition: transform 0.2s ease;
}
.stat-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px -8px rgba(0, 0, 0, 0.1);
}
.stat-value {
font-size: 28px;
font-weight: 700;
color: #0066cc;
margin-bottom: 4px;
}
.stat-label {
font-size: 14px;
color: #6b6b6b;
}
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 16px;
margin-bottom: 32px;
flex-wrap: wrap;
}
.pagination button {
padding: 8px 16px;
border: 1px solid #e9e9e7;
background: white;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
}
.pagination button:hover:not(:disabled) {
background: #f7f7f5;
}
.pagination button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pagination button.active {
background: #0066cc;
color: white;
border-color: #0066cc;
}
.pagination-info {
font-size: 14px;
color: #6b6b6b;
}
.page-jump {
display: flex;
align-items: center;
gap: 8px;
}
.page-jump input {
width: 60px;
padding: 6px 8px;
border: 1px solid #e9e9e7;
border-radius: 4px;
text-align: center;
font-size: 14px;
}
.page-jump button {
padding: 6px 12px;
font-size: 12px;
}
.cpu-groups {
display: grid;
gap: 24px;
}
.cpu-group {
background: white;
border-radius: 12px;
border: 1px solid #e9e9e7;
overflow: hidden;
transition: all 0.2s ease;
}
.cpu-group:hover {
box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.1);
}
.group-header {
padding: 20px 24px;
background: #f7f7f5;
border-bottom: 1px solid #e9e9e7;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
}
.group-header:hover {
background: #f0f0ef;
}
.group-title-section {
display: flex;
align-items: center;
gap: 16px;
}
.rank-badge {
background: #0066cc;
color: white;
padding: 4px 12px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
min-width: 40px;
text-align: center;
}
.group-title {
font-size: 18px;
font-weight: 600;
color: #2d2d2d;
}
.group-stats {
display: flex;
gap: 24px;
font-size: 14px;
color: #6b6b6b;
}
.expand-icon {
transition: transform 0.2s ease;
font-size: 12px;
}
.cpu-group.expanded .expand-icon {
transform: rotate(180deg);
}
.group-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
.cpu-group.expanded .group-content {
max-height: 2000px;
}
.cpu-table {
width: 100%;
border-collapse: collapse;
}
.cpu-table th,
.cpu-table td {
padding: 16px 24px;
text-align: left;
border-bottom: 1px solid #f0f0ef;
}
.cpu-table th {
font-weight: 600;
color: #6b6b6b;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
background: #fafafa;
}
.cpu-table td {
font-size: 14px;
}
.cpu-table tbody tr:hover {
background: #fafafa;
}
.score-cell {
font-weight: 600;
}
.score-single {
color: #0066cc;
}
.score-multi {
color: #e91e63;
}
.loading {
text-align: center;
padding: 60px 20px;
color: #6b6b6b;
}
.spinner {
display: inline-block;
width: 32px;
height: 32px;
border: 3px solid #f0f0ef;
border-top: 3px solid #0066cc;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 16px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.no-data {
text-align: center;
padding: 60px 20px;
color: #6b6b6b;
}
.footer {
margin-top: 60px;
padding: 32px 0;
border-top: 1px solid #e9e9e7;
text-align: center;
background: white;
border-radius: 12px;
}
.footer-content {
display: flex;
flex-direction: column;
gap: 16px;
align-items: center;
}
.footer-links {
display: flex;
gap: 32px;
align-items: center;
flex-wrap: wrap;
justify-content: center;
}
.footer-link {
color: #0066cc;
text-decoration: none;
font-size: 14px;
display: flex;
align-items: center;
gap: 8px;
transition: color 0.2s ease;
}
.footer-link:hover {
color: #004499;
}
.footer-text {
font-size: 13px;
color: #6b6b6b;
}
@media (max-width: 768px) {
.container {
padding: 20px 16px;
}
.header {
position: static;
}
.language-toggle {
position: static;
margin-bottom: 16px;
align-self: center;
}
.header h1 {
font-size: 24px;
}
.controls {
flex-direction: column;
align-items: stretch;
}
.search-box {
min-width: auto;
flex-direction: column;
}
.search-buttons {
justify-content: center;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.stat-card {
padding: 16px;
}
.stat-value {
font-size: 20px;
}
.group-stats {
flex-direction: column;
gap: 8px;
}
.group-title-section {
flex-direction: column;
gap: 8px;
align-items: flex-start;
}
.cpu-table {
font-size: 12px;
}
.cpu-table th,
.cpu-table td {
padding: 12px 16px;
}
.pagination {
flex-wrap: wrap;
gap: 8px;
}
.footer-links {
flex-direction: column;
gap: 16px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<div class="language-toggle">
<button id="langZh" class="active">中文</button>
<button id="langEn">English</button>
</div>
<h1 data-zh="CPU Performance Ladder For Sysbench" data-en="CPU Performance Ladder For Sysbench">CPU Performance Ladder For Sysbench</h1>
<p data-zh="Sysbench天梯图" data-en="Sysbench CPU Benchmark Rankings">Sysbench天梯图</p>
</div>
<div class="controls">
<div class="search-box">
<input type="text" id="searchInput" placeholder="搜索CPU型号或关键词..." data-placeholder-zh="搜索CPU型号或关键词..." data-placeholder-en="Search CPU model or keywords...">
<div class="search-buttons">
<button id="searchBtn" class="search-btn search" data-zh="搜索" data-en="Search">搜索</button>
<button id="clearBtn" class="search-btn clear" data-zh="清除" data-en="Clear">清除</button>
</div>
</div>
<div class="view-toggle">
<button id="compactView" class="active" data-zh="紧凑视图" data-en="Compact View">紧凑视图</button>
<button id="detailView" data-zh="详细视图" data-en="Detail View">详细视图</button>
</div>
</div>
<div class="stats-grid" id="statsGrid">
<div class="stat-card">
<div class="stat-value" id="totalCpus">-</div>
<div class="stat-label" data-zh="CPU型号总数" data-en="Total CPU Models">CPU型号总数</div>
</div>
<div class="stat-card">
<div class="stat-value" id="totalTests">-</div>
<div class="stat-label" data-zh="测试样本数" data-en="Test Samples">测试样本数</div>
</div>
<div class="stat-card">
<div class="stat-value" id="topSingle">-</div>
<div class="stat-label" data-zh="最高单核分数" data-en="Highest Single Score">最高单核分数</div>
</div>
<div class="stat-card">
<div class="stat-value" id="topMulti">-</div>
<div class="stat-label" data-zh="最高多核分数" data-en="Highest Multi Score">最高多核分数</div>
</div>
</div>
<div id="loadingIndicator" class="loading">
<div class="spinner"></div>
<div data-zh="正在加载CPU数据..." data-en="Loading CPU data...">正在加载CPU数据...</div>
</div>
<div class="pagination" id="pagination" style="display: none;">
<button id="prevPage" data-zh="上一页" data-en="Previous">上一页</button>
<div class="pagination-info" id="pageInfo">-</div>
<div class="page-jump">
<span data-zh="跳转到" data-en="Go to">跳转到</span>
<input type="number" id="pageInput" min="1">
<span data-zh="页" data-en="page"></span>
<button id="jumpBtn" data-zh="跳转" data-en="Go">跳转</button>
</div>
<button id="nextPage" data-zh="下一页" data-en="Next">下一页</button>
</div>
<div id="cpuGroups" class="cpu-groups" style="display: none;"></div>
<div id="noData" class="no-data" style="display: none;">
<div data-zh="📄 未找到CPU数据文件" data-en="📄 CPU data file not found">📄 未找到CPU数据文件</div>
<p data-zh="请确保 cpu_statistics.json 文件存在于当前目录" data-en="Please ensure cpu_statistics.json file exists in current directory">请确保 cpu_statistics.json 文件存在于当前目录</p>
</div>
<div class="footer">
<div class="footer-content">
<div class="footer-links">
<a href="https://github.com/oneclickvirt/ecs" class="footer-link" target="_blank" rel="noopener">
<span>🚀</span>
<span data-zh="测试脚本" data-en="Test Script">测试脚本</span>
</a>
<a href="https://www.spiritlhl.net/" class="footer-link" target="_blank" rel="noopener">
<span>🌐</span>
<span data-zh="spiritlhl 官网" data-en="spiritlhl Official">spiritlhl 官网</span>
</a>
</div>
<div class="footer-text" data-zh="本项目隶属于 spiritlhl 旗下" data-en="This project is under spiritlhl">本项目隶属于 spiritlhl 旗下</div>
</div>
</div>
</div>
<script>
class CPUDashboard {
constructor() {
this.data = [];
this.groupedData = {};
this.filteredGroups = {};
this.sortedPrefixes = [];
this.allSortedPrefixes = [];
this.prefixRanks = {};
this.isDetailView = false;
this.searchTerm = '';
this.currentPage = 1;
this.itemsPerPage = 10;
this.currentLang = 'zh';
this.total_samples = 0;
this.initializeEventListeners();
this.loadData();
}
initializeEventListeners() {
const searchInput = document.getElementById('searchInput');
const searchBtn = document.getElementById('searchBtn');
const clearBtn = document.getElementById('clearBtn');
const performSearch = () => {
this.searchTerm = searchInput.value.toLowerCase();
this.currentPage = 1;
this.filterAndRender();
};
searchInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') performSearch();
});
searchBtn.addEventListener('click', performSearch);
clearBtn.addEventListener('click', () => {
searchInput.value = '';
this.searchTerm = '';
this.currentPage = 1;
this.filterAndRender();
});
document.getElementById('compactView').addEventListener('click', () => {
this.setViewMode(false);
});
document.getElementById('detailView').addEventListener('click', () => {
this.setViewMode(true);
});
document.getElementById('prevPage').addEventListener('click', () => {
if (this.currentPage > 1) {
this.currentPage--;
this.renderGroups();
}
});
document.getElementById('nextPage').addEventListener('click', () => {
const totalPages = Math.ceil(this.sortedPrefixes.length / this.itemsPerPage);
if (this.currentPage < totalPages) {
this.currentPage++;
this.renderGroups();
}
});
document.getElementById('jumpBtn').addEventListener('click', () => {
const page = parseInt(document.getElementById('pageInput').value);
const totalPages = Math.ceil(this.sortedPrefixes.length / this.itemsPerPage);
if (page >= 1 && page <= totalPages) {
this.currentPage = page;
this.renderGroups();
}
});
document.getElementById('langZh').addEventListener('click', () => {
this.setLanguage('zh');
});
document.getElementById('langEn').addEventListener('click', () => {
this.setLanguage('en');
});
}
setLanguage(lang) {
this.currentLang = lang;
document.getElementById('langZh').classList.toggle('active', lang === 'zh');
document.getElementById('langEn').classList.toggle('active', lang === 'en');
document.querySelectorAll('[data-zh]').forEach(el => {
if (el.tagName === 'INPUT') {
el.placeholder = el.getAttribute(`data-placeholder-${lang}`);
} else {
el.textContent = el.getAttribute(`data-${lang}`);
}
});
this.updatePagination();
this.renderGroups();
}
async loadData() {
const cdnUrls = [
"http://cdn1.spiritlhl.net/",
"http://cdn2.spiritlhl.net/",
"http://cdn3.spiritlhl.net/",
"http://cdn4.spiritlhl.net/"
];
const urls = [
'cpu_statistics.json',
...cdnUrls.map(cdn => `${cdn}https://raw.githubusercontent.com/oneclickvirt/ecs/refs/heads/ranks/cpu_statistics.json`)
];
for (let url of urls) {
try {
const response = await fetch(url);
if (!response.ok) throw new Error('请求失败');
const data = await response.json();
if (data.cpu_statistics) {
this.data = data.cpu_statistics.map(stat => ({
cpu_prefix: stat.cpu_prefix,
cpu_model: stat.cpu_model,
cpu_cores: stat.typical_cores,
single_score: stat.max_single_score,
multi_score: stat.max_multi_score,
multi_threads: stat.typical_threads
}));
if (data.total_samples) {
this.total_samples = data.total_samples;
}
} else {
this.data = Array.isArray(data) ? data : [];
}
this.processData();
this.updateStats();
this.filterAndRender();
document.getElementById('loadingIndicator').style.display = 'none';
document.getElementById('pagination').style.display = 'flex';
document.getElementById('cpuGroups').style.display = 'block';
return;
} catch (error) {
continue;
}
}
document.getElementById('loadingIndicator').style.display = 'none';
document.getElementById('noData').style.display = 'block';
}
processData() {
this.groupedData = {};
this.data.forEach(cpu => {
const prefix = cpu.cpu_prefix;
if (!this.groupedData[prefix]) {
this.groupedData[prefix] = [];
}
this.groupedData[prefix].push(cpu);
});
Object.keys(this.groupedData).forEach(prefix => {
this.groupedData[prefix].sort((a, b) => b.single_score - a.single_score);
});
this.allSortedPrefixes = Object.keys(this.groupedData).sort((a, b) => {
const maxSingleA = Math.max(...this.groupedData[a].map(cpu => cpu.single_score));
const maxSingleB = Math.max(...this.groupedData[b].map(cpu => cpu.single_score));
return maxSingleB - maxSingleA;
});
this.allSortedPrefixes.forEach((prefix, index) => {
this.prefixRanks[prefix] = index + 1;
});
this.sortedPrefixes = [...this.allSortedPrefixes];
}
updateStats() {
const totalCpus = Object.keys(this.groupedData).length;
const totalTests = this.total_samples;
const topSingle = Math.max(...this.data.map(cpu => cpu.single_score));
const topMulti = Math.max(...this.data.map(cpu => cpu.multi_score));
document.getElementById('totalCpus').textContent = totalCpus.toLocaleString();
document.getElementById('totalTests').textContent = totalTests.toLocaleString();
document.getElementById('topSingle').textContent = topSingle.toLocaleString();
document.getElementById('topMulti').textContent = topMulti.toLocaleString();
}
filterAndRender() {
if (this.searchTerm) {
this.filteredGroups = {};
const filteredPrefixes = [];
this.allSortedPrefixes.forEach(prefix => {
const filteredCpus = this.groupedData[prefix].filter(cpu =>
cpu.cpu_model.toLowerCase().includes(this.searchTerm) ||
cpu.cpu_prefix.toLowerCase().includes(this.searchTerm)
);
if (filteredCpus.length > 0) {
this.filteredGroups[prefix] = filteredCpus;
filteredPrefixes.push(prefix);
}
});
this.sortedPrefixes = filteredPrefixes;
} else {
this.filteredGroups = this.groupedData;
this.sortedPrefixes = [...this.allSortedPrefixes];
}
this.renderGroups();
}
renderGroups() {
const container = document.getElementById('cpuGroups');
const startIndex = (this.currentPage - 1) * this.itemsPerPage;
const endIndex = startIndex + this.itemsPerPage;
const currentPagePrefixes = this.sortedPrefixes.slice(startIndex, endIndex);
container.innerHTML = currentPagePrefixes.map(prefix => {
const cpus = this.filteredGroups[prefix];
const topCpu = cpus[0];
const maxSingle = Math.max(...cpus.map(cpu => cpu.single_score));
const maxMulti = Math.max(...cpus.map(cpu => cpu.multi_score));
const rank = this.prefixRanks[prefix];
const sampleText = this.currentLang === 'zh' ? '样本' : 'Samples';
const singleText = this.currentLang === 'zh' ? '单核最高' : 'Max Single';
const multiText = this.currentLang === 'zh' ? '多核最高' : 'Max Multi';
return `
<div class="cpu-group" data-prefix="${prefix}">
<div class="group-header">
<div class="group-title-section">
<div class="rank-badge">#${rank}</div>
<div class="group-title">${topCpu.cpu_model}</div>
</div>
<div class="group-stats">
<span>${sampleText}: ${cpus.length}</span>
<span>${singleText}: ${maxSingle.toLocaleString()}</span>
<span>${multiText}: ${maxMulti.toLocaleString()}</span>
</div>
<div class="expand-icon">▼</div>
</div>
<div class="group-content">
${this.renderTable(cpus)}
</div>
</div>
`;
}).join('');
container.querySelectorAll('.group-header').forEach(header => {
header.addEventListener('click', () => {
const group = header.parentElement;
group.classList.toggle('expanded');
});
});
this.updatePagination();
}
updatePagination() {
const totalPages = Math.ceil(this.sortedPrefixes.length / this.itemsPerPage);
const pageInfo = document.getElementById('pageInfo');
const pageText = this.currentLang === 'zh'
? `${this.currentPage} 页,共 ${totalPages}`
: `Page ${this.currentPage} of ${totalPages}`;
pageInfo.textContent = pageText;
const pageInput = document.getElementById('pageInput');
pageInput.max = totalPages;
pageInput.value = this.currentPage;
const prevBtn = document.getElementById('prevPage');
const nextBtn = document.getElementById('nextPage');
prevBtn.disabled = this.currentPage === 1;
nextBtn.disabled = this.currentPage === totalPages;
}
renderTable(cpus) {
const headers = this.isDetailView
? (this.currentLang === 'zh'
? ['CPU型号', '核心数', '单核分数', '多核分数', '多核线程']
: ['CPU Model', 'Cores', 'Single Score', 'Multi Score', 'Multi Threads'])
: (this.currentLang === 'zh'
? ['CPU型号', '核心数', '单核分数', '多核分数']
: ['CPU Model', 'Cores', 'Single Score', 'Multi Score']);
const rows = cpus.slice(0, this.isDetailView ? cpus.length : 10).map(cpu => {
const cells = this.isDetailView
? [cpu.cpu_model, cpu.cpu_cores, cpu.single_score.toLocaleString(),
cpu.multi_score.toLocaleString(), cpu.multi_threads]
: [cpu.cpu_model, cpu.cpu_cores, cpu.single_score.toLocaleString(),
cpu.multi_score.toLocaleString()];
return `
<tr>
${cells.map((cell, index) => {
let className = '';
if (index === 2) className = 'score-cell score-single';
else if (index === 3) className = 'score-cell score-multi';
return `<td class="${className}">${cell}</td>`;
}).join('')}
</tr>
`;
}).join('');
return `
<table class="cpu-table">
<thead>
<tr>
${headers.map(header => `<th>${header}</th>`).join('')}
</tr>
</thead>
<tbody>
${rows}
</tbody>
</table>
`;
}
setViewMode(isDetail) {
this.isDetailView = isDetail;
document.getElementById('compactView').classList.toggle('active', !isDetail);
document.getElementById('detailView').classList.toggle('active', isDetail);
this.renderGroups();
}
}
new CPUDashboard();
</script>
</body>
</html>

View File

@@ -1,35 +0,0 @@
package memorytest
import (
"fmt"
"github.com/oneclickvirt/memorytest/memory"
"runtime"
"strings"
)
func MemoryTest(language, testMethod string) {
var res string
if runtime.GOOS == "windows" {
if testMethod != "winsat" && testMethod != "" {
res = "Detected host is Windows, using Winsat for testing.\n"
}
res += memory.WinsatTest(language)
} else {
switch testMethod {
case "sysbench":
res = memory.SysBenchTest(language)
if res == "" {
res = "sysbench test failed, switch to use dd test.\n"
res += memory.DDTest(language)
}
case "dd":
res = memory.DDTest(language)
default:
res = "Unsupported test method"
}
}
if !strings.Contains(res, "\n") && res != "" {
res += "\n"
}
fmt.Printf(res)
}

View File

@@ -1,9 +0,0 @@
package memorytest
import (
"testing"
)
func Test(t *testing.T) {
MemoryTest("zh", "sysbench")
}

View File

@@ -1,542 +0,0 @@
package network
import (
"fmt"
"reflect"
"runtime"
"strings"
"sync"
"github.com/oneclickvirt/basics/model"
"github.com/oneclickvirt/basics/network/baseinfo"
"github.com/oneclickvirt/basics/network/utils"
. "github.com/oneclickvirt/defaultset"
"github.com/oneclickvirt/security/network/printhead"
. "github.com/oneclickvirt/security/network/security"
)
// sortAndTranslateText 对原始文本进行排序和翻译
func sortAndTranslateText(orginList []string, language string, fields []string) string {
var result string
for _, key := range fields {
var displayKey string
if language == "zh" {
displayKey = model.TranslationMap[key]
if displayKey == "" {
displayKey = key
}
} else {
displayKey = key
}
for _, line := range orginList {
if strings.Contains(line, key) {
if displayKey == key {
result = result + line + "\n"
} else {
result = result + strings.ReplaceAll(line, key, displayKey) + "\n"
}
break
}
}
}
return result
}
// fetchAndLogInfo 子函数执行和日志记录
func fetchAndLogInfo(wg *sync.WaitGroup, ip string, scorePtr **model.SecurityScore, infoPtr **model.SecurityInfo, fetchFunc func(string) (*model.SecurityScore, *model.SecurityInfo, error)) {
defer wg.Done()
var err error
if scorePtr != nil && *scorePtr != nil && infoPtr != nil && *infoPtr != nil {
*scorePtr, *infoPtr, err = fetchFunc(ip)
} else if scorePtr == nil && infoPtr != nil && *infoPtr != nil {
_, *infoPtr, err = fetchFunc(ip)
} else if scorePtr != nil && *scorePtr != nil && infoPtr == nil {
*scorePtr, _, err = fetchFunc(ip)
}
if err != nil {
if model.EnableLoger {
Logger.Info(fmt.Sprintf("%s: %s", runtime.FuncForPC(reflect.ValueOf(fetchFunc).Pointer()).Name(), err.Error()))
}
}
}
// Ipv4SecurityCheck 检测 ipv4 安全信息和安全得分
func Ipv4SecurityCheck(ipInfo *model.IpInfo, cheervisionInfo *model.SecurityInfo, language string) (string, error) {
if model.EnableLoger {
InitLogger()
defer Logger.Sync()
}
if ipInfo == nil {
if model.EnableLoger {
Logger.Info("ipv4 is not available")
}
return "", fmt.Errorf("ipv4 is not available")
}
if cheervisionInfo == nil {
if model.EnableLoger {
Logger.Info("ipv4 cheervisionInfo nil")
}
}
var (
ip, temp, orgin, result string
wg sync.WaitGroup
iPInfoIoInfo = &model.SecurityInfo{}
scamalyticsInfo = &model.SecurityInfo{}
abuseipdbInfo = &model.SecurityInfo{}
ip2locationIoInfo = &model.SecurityInfo{}
ipapicomInfo = &model.SecurityInfo{}
ipwhoisioInfo = &model.SecurityInfo{}
ipregistryCoInfo = &model.SecurityInfo{}
ipdataCoInfo = &model.SecurityInfo{}
dbIpComInfo = &model.SecurityInfo{}
ipapiisInfo = &model.SecurityInfo{}
ipapiComInfo = &model.SecurityInfo{}
abstractapiInfo = &model.SecurityInfo{}
ipqualityscoreComInfo = &model.SecurityInfo{}
scamalyticsScore = &model.SecurityScore{}
virustotalScore = &model.SecurityScore{}
abuseipdbScore = &model.SecurityScore{}
dbIpComScore = &model.SecurityScore{}
ipapiisScore = &model.SecurityScore{}
ipdataCoScore = &model.SecurityScore{}
ipapiComScore = &model.SecurityScore{}
ipqualityscoreComScore = &model.SecurityScore{}
)
ip = ipInfo.Ip
wg.Add(14)
go fetchAndLogInfo(&wg, ip, nil, &iPInfoIoInfo, IPInfoIo)
go fetchAndLogInfo(&wg, ip, &scamalyticsScore, &scamalyticsInfo, Scamalytics)
go fetchAndLogInfo(&wg, ip, &virustotalScore, nil, Virustotal)
go fetchAndLogInfo(&wg, ip, &abuseipdbScore, &abuseipdbInfo, Abuseipdb)
go fetchAndLogInfo(&wg, ip, nil, &ip2locationIoInfo, Ip2locationIo)
go fetchAndLogInfo(&wg, ip, nil, &ipapicomInfo, IpApiCom)
go fetchAndLogInfo(&wg, ip, nil, &ipwhoisioInfo, IpwhoisIo)
go fetchAndLogInfo(&wg, ip, nil, &ipregistryCoInfo, IpregistryCo)
go fetchAndLogInfo(&wg, ip, &ipdataCoScore, &ipdataCoInfo, IpdataCo)
go fetchAndLogInfo(&wg, ip, &dbIpComScore, &dbIpComInfo, DbIpCom)
go fetchAndLogInfo(&wg, ip, &ipapiisScore, &ipapiisInfo, Ipapiis)
go fetchAndLogInfo(&wg, ip, &ipapiComScore, &ipapiComInfo, IpapiCom)
go fetchAndLogInfo(&wg, ip, nil, &abstractapiInfo, Abstractapi)
go fetchAndLogInfo(&wg, ip, &ipqualityscoreComScore, &ipqualityscoreComInfo, IpqualityscoreCom)
wg.Wait()
// 构建非空信息
var allScoreList []model.SecurityScore
scorePointers := []*model.SecurityScore{virustotalScore, scamalyticsScore, abuseipdbScore, dbIpComScore,
ipapiisScore, ipapiComScore, ipdataCoScore, ipqualityscoreComScore}
for _, score := range scorePointers {
if score != nil {
allScoreList = append(allScoreList, *score)
}
}
var allInfoList []model.SecurityInfo
infoPointers := []*model.SecurityInfo{iPInfoIoInfo, scamalyticsInfo, abuseipdbInfo, ip2locationIoInfo, ipapicomInfo,
ipwhoisioInfo, ipregistryCoInfo, ipdataCoInfo, dbIpComInfo, ipapiisInfo, ipapiComInfo, abstractapiInfo,
cheervisionInfo, ipqualityscoreComInfo}
for _, info := range infoPointers {
if info != nil {
allInfoList = append(allInfoList, *info)
}
}
// 构建回传的文本内容
temp += FormatSecurityScore(allScoreList)
temp += "\n"
temp += FormatSecurityInfo(allInfoList)
// 分割输入为行
lines := strings.Split(temp, "\n")
// 初始化一个映射用于存储冒号之前的内容及其对应的行数
contentMap := make(map[string][]int)
// 遍历每一行,提取冒号之前的内容及其行数
for i, line := range lines {
// 如果行为空则跳过
if line == "" {
continue
}
// 切割行,以冒号为分隔符
parts := strings.Split(line, ":")
// 获取冒号之前的内容
content := parts[0]
// 将当前行的行号添加到映射中
contentMap[content] = append(contentMap[content], i)
}
// 遍历映射,拼接相同内容的行
for _, lineNumbers := range contentMap {
if len(lineNumbers) > 1 { // 只对有多个行的内容进行拼接
// 初始化一个字符串切片,用于存储拼接后的行
var mergedLines []string
// 遍历相同内容的行 添加当前行到拼接后的行中
for _, lineNumber := range lineNumbers {
if lineNumber == lineNumbers[0] {
mergedLines = append(mergedLines, strings.TrimSpace(lines[lineNumber]))
} else {
mergedLines = append(mergedLines, strings.TrimSpace(strings.Split(lines[lineNumber], ":")[1]))
}
}
// 将拼接后的行以空格连接起来
mergedLine := strings.Join(mergedLines, " ")
// 替换原始行中相同内容的行为拼接后的行,仅替换一次,其他行标注要删除
isMerged := false
for _, lineNumber := range lineNumbers {
if !isMerged {
lines[lineNumber] = mergedLine
isMerged = true
} else {
lines[lineNumber] += "delete"
}
}
}
}
// 删除对应的行,构建原始文本
for _, line := range lines {
if !strings.Contains(line, "delete") {
orgin = orgin + line + "\n"
}
}
orginList := strings.Split(orgin, "\n")
// 将原始文本按要求进行排序和翻译
var score model.SecurityScore
scoreFields := utils.ExtractFieldNames(&score)
var info model.SecurityInfo
infoFields := utils.ExtractFieldNames(&info)
// 拼接安全得分
if language == "zh" {
result += Blue("安全得分:") + "\n"
} else if language == "en" {
result = Blue("Security Score:") + "\n"
}
if len(scoreFields) > 4 {
result += sortAndTranslateText(orginList, language, scoreFields[:len(scoreFields)-4])
} else {
result += sortAndTranslateText(orginList, language, scoreFields)
}
// 安全信息中前三个是字符串类型的得分
result += sortAndTranslateText(orginList, language, infoFields[:3])
// 需要确保后4个属性都为对应属性时才进行说明的拼接
if len(scoreFields) > 4 {
t := ""
foundKeys := 0
for _, key := range scoreFields[len(scoreFields)-4:] {
var displayKey string
if language == "zh" {
displayKey = model.TranslationMap[key]
if displayKey == "" {
displayKey = key
}
} else {
displayKey = key
}
found := false
for _, line := range orginList {
if strings.Contains(line, key) {
key = strings.ReplaceAll(key, ": ", "")
if displayKey == key {
t = t + line + " "
} else {
t = t + strings.ReplaceAll(line, key, displayKey) + " "
}
found = true
break
}
}
if found {
foundKeys++
}
}
if foundKeys == 4 {
if language == "zh" {
result = result + "黑名单记录统计:(有多少黑名单网站有记录):\n" + t + "\n"
} else if language == "en" {
result = result + "Blacklist_Records_Statistics(how many blacklisted websites have records):\n" + t + "\n"
}
}
}
// 拼接安全信息
if language == "zh" {
result += Blue("安全信息:") + "\n"
} else if language == "en" {
result += Blue("Security Info:") + "\n"
}
result += sortAndTranslateText(orginList, language, infoFields[3:])
return result, nil
}
// Ipv6SecurityCheck 检测 ipv4 安全信息和安全得分
func Ipv6SecurityCheck(ipInfo *model.IpInfo, cheervisionInfo *model.SecurityInfo, language string) (string, error) {
if model.EnableLoger {
InitLogger()
defer Logger.Sync()
}
if ipInfo == nil {
if model.EnableLoger {
Logger.Info("ipv6 is not available")
}
return "", fmt.Errorf("ipv6 is not available")
}
if cheervisionInfo == nil {
if model.EnableLoger {
Logger.Info("ipv6 cheervisionInfo nil")
}
}
var (
ip, temp, orgin, result string
wg sync.WaitGroup
scamalyticsInfo = &model.SecurityInfo{}
abuseipdbInfo = &model.SecurityInfo{}
ipapiisInfo = &model.SecurityInfo{}
ipapiComInfo = &model.SecurityInfo{}
scamalyticsScore = &model.SecurityScore{}
abuseipdbScore = &model.SecurityScore{}
ipapiisScore = &model.SecurityScore{}
ipapiComScore = &model.SecurityScore{}
)
ip = ipInfo.Ip
wg.Add(4)
go fetchAndLogInfo(&wg, ip, &scamalyticsScore, &scamalyticsInfo, Scamalytics)
go fetchAndLogInfo(&wg, ip, &abuseipdbScore, &abuseipdbInfo, Abuseipdb)
go fetchAndLogInfo(&wg, ip, &ipapiisScore, &ipapiisInfo, Ipapiis)
go fetchAndLogInfo(&wg, ip, &ipapiComScore, &ipapiComInfo, IpapiComIpv6)
wg.Wait()
// 构建非空信息
var allScoreList []model.SecurityScore
scorePointers := []*model.SecurityScore{scamalyticsScore, abuseipdbScore, ipapiisScore, ipapiComScore}
for _, score := range scorePointers {
if score != nil {
allScoreList = append(allScoreList, *score)
}
}
var allInfoList []model.SecurityInfo
infoPointers := []*model.SecurityInfo{scamalyticsInfo, abuseipdbInfo, ipapiisInfo, ipapiComInfo, cheervisionInfo}
for _, info := range infoPointers {
if info != nil {
allInfoList = append(allInfoList, *info)
}
}
// 构建回传的文本内容
temp += FormatSecurityScore(allScoreList)
temp += "\n"
temp += FormatSecurityInfo(allInfoList)
// 分割输入为行
lines := strings.Split(temp, "\n")
// 初始化一个映射用于存储冒号之前的内容及其对应的行数
contentMap := make(map[string][]int)
// 遍历每一行,提取冒号之前的内容及其行数
for i, line := range lines {
// 如果行为空则跳过
if line == "" {
continue
}
// 切割行,以冒号为分隔符
parts := strings.Split(line, ":")
// 获取冒号之前的内容
content := parts[0]
// 将当前行的行号添加到映射中
contentMap[content] = append(contentMap[content], i)
}
// 遍历映射,拼接相同内容的行
for _, lineNumbers := range contentMap {
if len(lineNumbers) > 1 { // 只对有多个行的内容进行拼接
// 初始化一个字符串切片,用于存储拼接后的行
var mergedLines []string
// 遍历相同内容的行 添加当前行到拼接后的行中
for _, lineNumber := range lineNumbers {
if lineNumber == lineNumbers[0] {
mergedLines = append(mergedLines, strings.TrimSpace(lines[lineNumber]))
} else {
mergedLines = append(mergedLines, strings.TrimSpace(strings.Split(lines[lineNumber], ":")[1]))
}
}
// 将拼接后的行以空格连接起来
mergedLine := strings.Join(mergedLines, " ")
// 替换原始行中相同内容的行为拼接后的行,仅替换一次,其他行标注要删除
isMerged := false
for _, lineNumber := range lineNumbers {
if !isMerged {
lines[lineNumber] = mergedLine
isMerged = true
} else {
lines[lineNumber] += "delete"
}
}
}
}
// 删除对应的行,构建原始文本
for _, line := range lines {
if !strings.Contains(line, "delete") {
orgin = orgin + line + "\n"
}
}
orginList := strings.Split(orgin, "\n")
var score model.SecurityScore
scoreFields := utils.ExtractFieldNames(&score)
var info model.SecurityInfo
infoFields := utils.ExtractFieldNames(&info)
// 拼接安全得分
if language == "zh" {
result += Blue("安全得分:") + "\n"
} else if language == "en" {
result = Blue("Security Score:") + "\n"
}
result += sortAndTranslateText(orginList, language, scoreFields)
result += sortAndTranslateText(orginList, language, infoFields[:3])
// 拼接完整安全信息
if language == "zh" {
result += Blue("安全信息:") + "\n"
} else if language == "en" {
result += Blue("Security Info:") + "\n"
}
result += sortAndTranslateText(orginList, language, infoFields[3:])
return result, nil
}
// processPrintIPInfo 处理IP信息
func processPrintIPInfo(headASNString string, headLocationString string, ipResult *model.IpInfo) string {
var info string
// 处理ASN信息
if ipResult.ASN != "" || ipResult.Org != "" {
info += headASNString
if ipResult.ASN != "" {
info += "AS" + ipResult.ASN
if ipResult.Org != "" {
info += " "
}
}
info += ipResult.Org + "\n"
}
// 处理位置信息
if ipResult.City != "" || ipResult.Region != "" || ipResult.Country != "" {
info += headLocationString
if ipResult.City != "" {
info += ipResult.City + " / "
}
if ipResult.Region != "" {
info += ipResult.Region + " / "
}
if ipResult.Country != "" {
info += ipResult.Country
}
info += "\n"
}
return info
}
// NetworkCheck 查询网络信息
// checkType 可选 both ipv4 ipv6
// enableSecurityCheck 可选 true false
// language 暂时仅支持 en 或 zh
// 回传 ipInfo securityInfo err
func NetworkCheck(checkType string, enableSecurityCheck bool, language string) (string, string, error) {
var ipInfo, securityInfo string
if checkType == "both" {
ipInfoV4Result, cheervisionInfoV4, ipInfoV6Result, cheervisionInfoV6, _ := baseinfo.RunIpCheck("both")
if ipInfoV4Result != nil {
ipInfo += processPrintIPInfo(" IPV4 ASN : ", " IPV4 Location : ", ipInfoV4Result)
}
if ipInfoV6Result != nil {
ipInfo += processPrintIPInfo(" IPV6 ASN : ", " IPV6 Location : ", ipInfoV6Result)
}
// 检测是否需要查询相关安全信息
if enableSecurityCheck {
var (
wg sync.WaitGroup
ipv4Res, ipv6Res, ipv4DNSRes, ipv6DNSRes string
err1, err2 error
)
wg.Add(4)
go func() {
defer wg.Done()
ipv4DNSRes = BlackList(ipInfoV4Result, "ipv4", language)
}()
go func() {
defer wg.Done()
ipv6DNSRes = BlackList(ipInfoV6Result, "ipv6", language)
}()
go func() {
defer wg.Done()
ipv4Res, err1 = Ipv4SecurityCheck(ipInfoV4Result, cheervisionInfoV4, language)
}()
go func() {
defer wg.Done()
ipv6Res, err2 = Ipv6SecurityCheck(ipInfoV6Result, cheervisionInfoV6, language)
}()
wg.Wait()
securityHead, err3 := printhead.PrintDatabaseInfo(language)
if err1 == nil && err2 == nil && err3 == nil {
securityInfo = securityHead + Green("IPV4:") + "\n" + ipv4Res + ipv4DNSRes + Green("IPV6:") + "\n" + ipv6Res + ipv6DNSRes
return ipInfo, securityInfo, nil
} else if err1 == nil && err2 != nil && err3 == nil {
securityInfo = securityHead + Green("IPV4:") + "\n" + ipv4Res + ipv4DNSRes
return ipInfo, securityInfo, nil
} else if err1 != nil && err2 == nil && err3 == nil {
securityInfo = securityHead + Green("IPV6:") + "\n" + ipv6Res + ipv6DNSRes
return ipInfo, securityInfo, nil
} else {
return ipInfo, "", nil
}
} else {
return ipInfo, "", nil
}
} else if checkType == "ipv4" {
ipInfoV4Result, cheervisionInfoV4, _, _, _ := baseinfo.RunIpCheck("ipv4")
if ipInfoV4Result != nil {
ipInfo += processPrintIPInfo(" IPV4 ASN : ", " IPV4 Location : ", ipInfoV4Result)
}
if enableSecurityCheck {
var (
wg sync.WaitGroup
ipv4Res, ipv4DNSRes string
err1 error
)
wg.Add(2)
go func() {
defer wg.Done()
ipv4DNSRes = BlackList(ipInfoV4Result, "ipv4", language)
}()
go func() {
defer wg.Done()
ipv4Res, err1 = Ipv4SecurityCheck(ipInfoV4Result, cheervisionInfoV4, language)
}()
wg.Wait()
securityHead, err2 := printhead.PrintDatabaseInfo(language)
if err1 == nil && err2 == nil {
securityInfo = securityHead + Green("IPV4:") + "\n" + ipv4Res + ipv4DNSRes
return ipInfo, securityInfo, nil
} else {
return ipInfo, "", nil
}
} else {
return ipInfo, "", nil
}
} else if checkType == "ipv6" {
_, _, ipInfoV6Result, cheervisionInfoV6, _ := baseinfo.RunIpCheck("ipv6")
if ipInfoV6Result != nil {
ipInfo += processPrintIPInfo(" IPV6 ASN : ", " IPV6 Location : ", ipInfoV6Result)
}
if enableSecurityCheck {
var (
wg sync.WaitGroup
ipv6Res, ipv6DNSRes string
err1 error
)
wg.Add(2)
go func() {
defer wg.Done()
ipv6DNSRes = BlackList(ipInfoV6Result, "ipv6", language)
}()
go func() {
defer wg.Done()
ipv6Res, err1 = Ipv6SecurityCheck(ipInfoV6Result, cheervisionInfoV6, language)
}()
wg.Wait()
securityHead, err2 := printhead.PrintDatabaseInfo(language)
if err1 == nil && err2 == nil {
securityInfo = securityHead + Green("IPV6:") + "\n" + ipv6Res + ipv6DNSRes
return ipInfo, securityInfo, nil
} else {
return ipInfo, "", nil
}
} else {
return ipInfo, "", nil
}
}
return "", "", fmt.Errorf("wrong in NetworkCheck")
}

View File

@@ -1,22 +0,0 @@
package network
import (
"fmt"
"testing"
)
func TestIpv4SecurityCheck(t *testing.T) {
// 单项测试
//result1, _ := Ipv4SecurityCheck("8.8.8.8", nil, "zh")
//fmt.Println(result1)
//result2, _ := Ipv6SecurityCheck("2001:4860:4860::8844", nil, "zh")
//fmt.Println(result2)
// 全项测试
ipInfo, securityInfo, _ := NetworkCheck("both", true, "zh")
fmt.Println("--------------------------------------------------")
fmt.Printf(ipInfo)
fmt.Println("--------------------------------------------------")
fmt.Printf(securityInfo)
fmt.Println("--------------------------------------------------")
}

View File

@@ -1,9 +0,0 @@
package ntrace
import (
"github.com/oneclickvirt/nt3/nt"
)
func TraceRoute3(language, location, checkType string) {
nt.TraceRoute(language, location, checkType)
}

View File

@@ -1,8 +0,0 @@
package ntrace
import "testing"
// https://github.com/nxtrace/NTrace-core/blob/main/fast_trace/fast_trace.go
func TestTraceRoute(t *testing.T) {
TraceRoute3("en", "GZ", "ipv4")
}

View File

@@ -1,12 +0,0 @@
package port
import (
"fmt"
"github.com/oneclickvirt/portchecker/email"
)
// 常用端口阻断检测 TCP/UDP/ICMP 协议
func EmailCheck() {
res := email.EmailCheck()
fmt.Println(res)
}

View File

@@ -1,9 +0,0 @@
package port
import (
"testing"
)
func Test(t *testing.T) {
EmailCheck()
}

View File

@@ -1,57 +0,0 @@
package speedtest
import (
"github.com/oneclickvirt/speedtest/model"
"github.com/oneclickvirt/speedtest/sp"
"strings"
)
func ShowHead(language string) {
sp.ShowHead(language)
}
func NearbySP() {
sp.NearbySpeedTest()
}
func CustomSP(platform, operator string, num int) {
var url, parseType string
if strings.ToLower(platform) == "cn" {
if strings.ToLower(operator) == "cmcc" {
url = model.CnCMCC
} else if strings.ToLower(operator) == "cu" {
url = model.CnCU
} else if strings.ToLower(operator) == "ct" {
url = model.CnCT
} else if strings.ToLower(operator) == "hk" {
url = model.CnHK
} else if strings.ToLower(operator) == "tw" {
url = model.CnTW
} else if strings.ToLower(operator) == "jp" {
url = model.CnJP
} else if strings.ToLower(operator) == "sg" {
url = model.CnSG
}
parseType = "url"
} else if strings.ToLower(platform) == "net" {
if strings.ToLower(operator) == "cmcc" {
url = model.NetCMCC
} else if strings.ToLower(operator) == "cu" {
url = model.NetCU
} else if strings.ToLower(operator) == "ct" {
url = model.NetCT
} else if strings.ToLower(operator) == "hk" {
url = model.NetHK
} else if strings.ToLower(operator) == "tw" {
url = model.NetTW
} else if strings.ToLower(operator) == "jp" {
url = model.NetJP
} else if strings.ToLower(operator) == "sg" {
url = model.NetSG
} else if strings.ToLower(operator) == "global" {
url = model.NetGlobal
}
parseType = "id"
}
sp.CustomSpeedTest(url, parseType, num)
}

View File

@@ -1,8 +0,0 @@
package speedtest
import "testing"
func Test(t *testing.T) {
ShowHead("en")
NearbySP()
}

View File

@@ -1,30 +0,0 @@
package unlocktest
import (
"fmt"
"github.com/oneclickvirt/UnlockTests/utils"
"github.com/oneclickvirt/UnlockTests/uts"
"github.com/oneclickvirt/defaultset"
)
func MediaTest(language string) {
uts.GetIpv4Info(false)
uts.GetIpv6Info(false)
readStatus := uts.ReadSelect(language, "0")
if !readStatus {
return
}
//if language == "zh" {
// fmt.Println("测试时间: ", defaultset.Yellow(time.Now().Format("2006-01-02 15:04:05")))
//} else {
// fmt.Println("Test time: ", defaultset.Yellow(time.Now().Format("2006-01-02 15:04:05")))
//}
if uts.IPV4 {
fmt.Println(defaultset.Blue("IPV4:"))
uts.RunTests(utils.Ipv4HttpClient, "ipv4", language)
}
if uts.IPV6 {
fmt.Println(defaultset.Blue("IPV6:"))
uts.RunTests(utils.Ipv6HttpClient, "ipv6", language)
}
}

View File

@@ -1,7 +0,0 @@
package unlocktest
import "testing"
func Test(t *testing.T) {
MediaTest("zh")
}

View File

@@ -1,21 +0,0 @@
@echo off
setlocal enabledelayedexpansion
set repo_path=C:\Users\spiritlhl\Documents\GoWorks\ecs
git add -A
git commit -am"update"
:push
cd %repo_path%
git push -f origin master
if errorlevel 1 (
echo Push failed. Retrying in 3 seconds...
timeout /nobreak /t 3 >nul
goto push
)
echo Push successful.
endlocal

View File

@@ -1,37 +0,0 @@
@echo off
setlocal enabledelayedexpansion
REM 设置仓库路径
set repo_path=C:\Users\spiritlhl\Documents\GoWorks\ecs
REM 进入仓库目录
cd %repo_path%
REM 添加所有更改并提交
git add -A
git commit -am "update"
REM 推送代码到 master 分支并创建标签
:push
git push -f origin master
if errorlevel 1 (
echo Push failed. Retrying in 3 seconds...
timeout /nobreak /t 3 >nul
goto push
)
REM 提示用户输入版本号
set /p version="Enter the version number (e.g., v1.0.0): "
REM 创建并推送标签
git tag %version%
git push origin %version%
if errorlevel 1 (
echo Tag push failed. Retrying in 3 seconds...
timeout /nobreak /t 3 >nul
goto push_tag
)
echo Push and tag creation successful.
endlocal