mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 11:20:43 +00:00
收尾:CHANGELOG 补 1.7.1 + 清历史产物 + 修验证脚本路径
- _build/CHANGELOG.md 补上 1.7.1 条目(发版说明的唯一来源) - 两个验证脚本还在用旧的管理页路径 zhingzhuanzhan, 跑起来会误报失败,改成 zhongzhuanzhan - dist 里清掉 1.6.x 的历史产物(Gitee 发行版里有,删了能下回来)
This commit is contained in:
+20
-1
@@ -1,4 +1,23 @@
|
||||
## 1.7.0
|
||||
## 1.7.1
|
||||
|
||||
- 修手表连上后**一片白屏**:分页初始化函数从没被调用过,
|
||||
标签栏里只剩一个孤立的指示器
|
||||
- 修「被控端已关闭新设备配对」把重装手表的人永久挡在外面:
|
||||
配对码本身就是钥匙,拿着正确的码就该放行
|
||||
- 手表端应用名改成 ykxmz
|
||||
- 修跨网络**延迟高**:隧道退回了 QUIC(`--protocol http2` 参数丢失),
|
||||
可用率只有 48%;恢复 HTTP/2 后可用率 100%
|
||||
- 网络调优持久化:TCP 缓冲 4 MB、FastOpen、
|
||||
空闲后不重置拥塞窗口(长轮询场景关键)
|
||||
- 手表提示改成自诊断式:连不上时直接打出双方地址,
|
||||
一眼看出是网段不同还是连错了 WiFi
|
||||
- 中转站的官网和管理后台分开:
|
||||
`/` 是官网(公开),`/zhongzhuanzhan` 是管理后台(要登录)
|
||||
- 官网重新设计:导航 / 功能 / 三步上手 / 下载 / 常见问题
|
||||
- 官网和管理页统一改成白色简洁风格
|
||||
- 管理入口从官网上移除
|
||||
|
||||
## 1.7.0
|
||||
|
||||
- 电脑端改成 **Windows 安装包**(Inno Setup),双击安装,不再需要解压 zip
|
||||
- 安装向导里填 6 位配对码,装完手表直接连,不用再跑一次设置
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
阶段3+4+5:管理页白色化 + 局域网诊断 + 全量验收
|
||||
|
||||
阶段3 管理页
|
||||
- 清掉全部深色主题残留(地址框 #0b1220、按钮悬停 #262c36、
|
||||
删除按钮 #2d1214 等 11 处),现在 0 处深色
|
||||
- 接口全部正常:health / downloads / netcheck
|
||||
|
||||
阶段4 局域网诊断
|
||||
- 查清楚"电脑不在同一网络"是怎么回事:被控端是**对的**
|
||||
(lan_ips() 报 ['192.168.2.64', '169.254.83.107'],真实地址排第一),
|
||||
是手表当时真不在 192.168.2.x —— 可能连了 5G 频段的另一个路由器,或开着移动数据
|
||||
- 所以改了手表的提示:不再只说"不在同一网络",
|
||||
而是把**双方地址都打出来**,用户一眼能看出是网段不同还是连错 WiFi
|
||||
- 端到端验证局域网路径:认证 1 ms,功能列表 207 项
|
||||
|
||||
阶段1 结论修正(一天内推翻自己两次,如实记录)
|
||||
- 第一次判断"优选 IP 无用":错。半小时内确实能避开超时 IP
|
||||
- 第二次固定优选 IP:也错。那些实测 138ms 的 IP 半小时后全不通了
|
||||
—— Cloudflare anycast 可达性随运营商路由变化,固定 IP 等于钉死到会失效的地址
|
||||
- 最终:不固定,靠 GeoDNS + cloudflared 重试 + ha-connections 2 冗余
|
||||
- 撤销后立即变好:连接稳定 2 条、超时告警 0 次、设备侧延迟 4.40s -> 1.66s
|
||||
- **真正的瓶颈**:分段实测发现本机到 Cloudflare 的**裸 RTT 就 1439 ms**,
|
||||
比经隧道的请求(1215 ms)还慢。说明瓶颈是这条网络的 4G 上行本身,
|
||||
不是设备的隧道。公网侧已无优化空间。
|
||||
- 局域网 118 ms vs 公网 1215 ms,快 10 倍 —— 这才是该走的路
|
||||
|
||||
阶段5 验收
|
||||
- 全量回归 29 项全通过
|
||||
- 设备侧验收 38 项全通过
|
||||
- 成品:setup exe 14.37 MB / server zip / watch apk,已同步到设备下载区
|
||||
+3
-3
@@ -13,8 +13,8 @@ for n in 'ykxmz' '老师抬一下手腕' '电脑端' '服务器端' '手表端';
|
||||
done
|
||||
|
||||
echo
|
||||
echo " 2) 管理页 /zhingzhuanzhan(未登录应看到登录框)"
|
||||
curl -s -o /tmp/login.html --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null
|
||||
echo " 2) 管理页 /zhongzhuanzhan(未登录应看到登录框)"
|
||||
curl -s -o /tmp/login.html --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null
|
||||
for n in 'name=username' 'name=password' 'favicon'; do
|
||||
grep -q "$n" /tmp/login.html && echo " OK $n" || echo " XX $n"
|
||||
done
|
||||
@@ -27,7 +27,7 @@ echo
|
||||
echo " 4) 登录"
|
||||
curl -s -c /tmp/ck2.txt -o /dev/null --max-time 15 -X POST \
|
||||
-d 'username=xmz7891&password=@REVAedu120830' "$BASE/admin/login" 2>/dev/null
|
||||
curl -s -b /tmp/ck2.txt -o /tmp/admin.html --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null
|
||||
curl -s -b /tmp/ck2.txt -o /tmp/admin.html --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null
|
||||
for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do
|
||||
grep -q "$n" /tmp/admin.html && echo " OK $n" || echo " XX $n"
|
||||
done
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
r'''收尾清理:
|
||||
1. 两个验证脚本还在用旧的管理页路径,跑起来会误报失败
|
||||
2. dist 里堆着 1.6.x 的历史产物(Gitee 发行版里都有,删了也能下回来)
|
||||
3. 把改动提交
|
||||
'''
|
||||
from __future__ import annotations
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
|
||||
GIT = r"C:\Program Files\Git\bin\git.exe"
|
||||
OLD, NEW = "zhingzhuanzhan", "zhongzhuanzhan"
|
||||
|
||||
|
||||
def fix_scripts() -> None:
|
||||
"""只改还在用的验证脚本;_build 里的一次性历史脚本不动。"""
|
||||
print(" 一、修还在用的验证脚本")
|
||||
for name in ("check_web.sh", "final_web_check.sh", "verify_site_admin.sh"):
|
||||
path = ROOT / "_build" / name
|
||||
if not path.is_file():
|
||||
continue
|
||||
text = path.read_text(encoding="utf-8")
|
||||
if OLD not in text:
|
||||
print(" %-24s 已经是新路径" % name)
|
||||
continue
|
||||
n = text.count(OLD)
|
||||
path.write_text(text.replace(OLD, NEW), encoding="utf-8", newline="\n")
|
||||
print(" %-24s 改了 %d 处" % (name, n))
|
||||
|
||||
|
||||
def clean_dist() -> None:
|
||||
"""删掉 1.6.x 的历史产物。"""
|
||||
print()
|
||||
print(" 二、清理 dist 里的历史版本")
|
||||
dist = ROOT / "dist"
|
||||
if not dist.is_dir():
|
||||
print(" dist 不存在")
|
||||
return
|
||||
removed = []
|
||||
for path in sorted(dist.iterdir()):
|
||||
if not path.is_file():
|
||||
continue
|
||||
# 保留 1.7.x
|
||||
if "1.7." in path.name:
|
||||
continue
|
||||
if any(tag in path.name for tag in ("1.6.0", "1.6.1", "1.6.2")):
|
||||
path.unlink()
|
||||
removed.append(path.name)
|
||||
for name in removed:
|
||||
print(" 删除 %s" % name)
|
||||
if not removed:
|
||||
print(" 没有要删的")
|
||||
|
||||
print()
|
||||
print(" 剩下的:")
|
||||
for path in sorted(dist.iterdir()):
|
||||
if path.is_file():
|
||||
print(" %-34s %6.2f MB"
|
||||
% (path.name, path.stat().st_size / 1024 / 1024))
|
||||
|
||||
|
||||
def commit() -> None:
|
||||
print()
|
||||
print(" 三、提交")
|
||||
subprocess.run([GIT, "add", "-A"], cwd=str(ROOT), check=False)
|
||||
message = (
|
||||
"收尾:CHANGELOG 补 1.7.1 + 清历史产物 + 修验证脚本路径\n"
|
||||
"\n"
|
||||
"- _build/CHANGELOG.md 补上 1.7.1 条目(发版说明的唯一来源)\n"
|
||||
"- 两个验证脚本还在用旧的管理页路径 zhingzhuanzhan,\n"
|
||||
" 跑起来会误报失败,改成 zhongzhuanzhan\n"
|
||||
"- dist 里清掉 1.6.x 的历史产物(Gitee 发行版里有,删了能下回来)\n"
|
||||
)
|
||||
msg_file = ROOT / "_build" / "_cmsg.txt"
|
||||
msg_file.write_bytes(message.encode("utf-8"))
|
||||
result = subprocess.run([GIT, "commit", "-q", "-F", str(msg_file)],
|
||||
cwd=str(ROOT), capture_output=True, text=True,
|
||||
encoding="utf-8", errors="replace")
|
||||
msg_file.unlink(missing_ok=True)
|
||||
print(" commit exit=%s" % result.returncode)
|
||||
if result.returncode != 0 and result.stdout:
|
||||
print(" " + result.stdout.strip()[:200])
|
||||
|
||||
show = subprocess.run([GIT, "log", "--oneline", "-1"],
|
||||
cwd=str(ROOT), capture_output=True, text=True,
|
||||
encoding="utf-8", errors="replace")
|
||||
print(" " + (show.stdout or "").strip())
|
||||
|
||||
env_push = {"GIT_SSH_COMMAND": r'"C:\Program Files\Git\usr\bin\ssh.exe"'}
|
||||
import os
|
||||
push_env = dict(os.environ)
|
||||
push_env.update(env_push)
|
||||
push = subprocess.run([GIT, "push", "origin", "main"], cwd=str(ROOT),
|
||||
capture_output=True, text=True,
|
||||
encoding="utf-8", errors="replace",
|
||||
env=push_env)
|
||||
tail = (push.stderr or push.stdout or "").strip().splitlines()[-2:]
|
||||
for line in tail:
|
||||
print(" " + line)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
fix_scripts()
|
||||
clean_dist()
|
||||
commit()
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -14,15 +14,15 @@ echo " 主文字色: $(grep -o 'color:#1f2328' /tmp/s.html | head -1)"
|
||||
echo " 底色: $(grep -o 'background:#ffffff' /tmp/s.html | head -1)"
|
||||
|
||||
echo
|
||||
echo " 管理页 /zhingzhuanzhan"
|
||||
curl -s --max-time 15 "$BASE/zhingzhuanzhan" -o /tmp/l.html 2>/dev/null
|
||||
echo " 管理页 /zhongzhuanzhan"
|
||||
curl -s --max-time 15 "$BASE/zhongzhuanzhan" -o /tmp/l.html 2>/dev/null
|
||||
echo " 登录框: $(grep -c 'name=username' /tmp/l.html) 个账号框"
|
||||
echo " 底色: $(grep -o 'background:#ffffff' /tmp/l.html | head -1)"
|
||||
|
||||
echo
|
||||
echo " 登录后管理页"
|
||||
KEY=$(cat /root/lanremote-relay/data/admin_key.txt 2>/dev/null)
|
||||
curl -s --max-time 15 -H "X-Admin: $KEY" "$BASE/zhingzhuanzhan" -o /tmp/a.html 2>/dev/null
|
||||
curl -s --max-time 15 -H "X-Admin: $KEY" "$BASE/zhongzhuanzhan" -o /tmp/a.html 2>/dev/null
|
||||
echo " 下载区: $(grep -c 'dlPanel' /tmp/a.html)"
|
||||
echo " 深色值残留: $(grep -c '0d1117' /tmp/a.html) 处"
|
||||
echo " 白色底色: $(grep -o '\-\-bg:#ffffff' /tmp/a.html | head -1)"
|
||||
|
||||
@@ -14,10 +14,10 @@ for n in 'ykxmz' '老师抬一下手腕' '下载' '电脑端' '服务器端' '
|
||||
done
|
||||
|
||||
echo
|
||||
echo "===== 2. 管理页 /zhingzhuanzhan(应该要登录)====="
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null)
|
||||
echo "===== 2. 管理页 /zhongzhuanzhan(应该要登录)====="
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
|
||||
echo " HTTP $code"
|
||||
login=$(curl -s --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null)
|
||||
login=$(curl -s --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
|
||||
echo "$login" | grep -q 'name=username' && echo " OK 有账号输入框" || echo " XX 没有账号框"
|
||||
echo "$login" | grep -q 'name=password' && echo " OK 有密码输入框" || echo " XX 没有密码框"
|
||||
|
||||
@@ -41,7 +41,7 @@ grep -o 'lr_admin.*' /tmp/ck.txt 2>/dev/null | head -1 | sed 's/^/ /'
|
||||
|
||||
echo
|
||||
echo "===== 6. 带 Cookie 访问管理页(应该看到管理内容)====="
|
||||
admin=$(curl -s -b /tmp/ck.txt --max-time 15 "$BASE/zhingzhuanzhan" 2>/dev/null)
|
||||
admin=$(curl -s -b /tmp/ck.txt --max-time 15 "$BASE/zhongzhuanzhan" 2>/dev/null)
|
||||
for n in 'id=dlPanel' '网络体检' '退出登录' 'favicon'; do
|
||||
echo "$admin" | grep -q "$n" && echo " OK $n" || echo " XX $n"
|
||||
done
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Reference in New Issue
Block a user