[CLAUDE] PurchaseEvaluation: YC-028 sự cố prod A/059 — FE tách "404 thật ⟂ lỗi hệ thống" 5 site ×2 app + guard disk/orphan vào runbook+cicd-monitor
Sự cố 2 tầng (đã giải trọn trong phiên, chi tiết runs/2026-08-10-S189-bookstart-open/run.md + WAL): - T1: ổ C VPS 0 byte (gitea repo-archive 16,49GB + npm-cache SYSTEM 12,76GB) → SQL Error -2 → "ko duyệt được" rồi FE vẽ mọi lỗi thành "Không tìm thấy phiếu" (#44). Dọn ~30GB cache + AUTO_CLOSE OFF ×3 DB + gỡ nén NTFS 4 file template (#88 tái phát). - T2: 3 sshd mồ côi (lệnh đo ssh bị cắt output) bão hòa 3/3 core → mọi GET detail 5-47s, A/059 (5 NCC) vượt trần hủy ~30s của FE. Kill orphan → A/059 47s→0,38s · phiếu bé 0,17s. Code (5 site cùng lớp, SHA-mirror 4 cặp MATCH, build ×2 xanh): - lib/apiError.ts +isNotFound(err) — chỉ 404 mới được nói "không tìm thấy" - PurchaseEvaluationsListPage (inline + overlay + fullpage) + KhkkListPage + KhkkCreatePage: detail.isError && !404 → "Hệ thống đang chậm hoặc lỗi khi tải phiếu — thử lại (refetch)" Ops-guard (YC-028 (4)): cicd-monitor persona +bước 1b server-health (fsutil free <5GB = FAIL, CPU-delta tìm orphan) · iis-deploy-runbook +§"Disk-free + orphan guard" + sửa path log Serilog sai (Logs\log-*.txt → logs\solution-erp-*.log, đo thật). (6) đóng: log 10/08 mất do đợt "giải phóng dung lượng" hôm qua (retention 30 file config đúng). (3B) cron archive_cleanup Gitea + decompress Vietreport_Master = chờ ngoài giờ (restart service dùng chung VIETREPORT). Sổ: +YC-028 (nguyên văn + 2 tầng đã xử). Squash wal: trailing theo §5.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@ -1,39 +1,33 @@
|
||||
# WAL — auto-generated, không sửa tay
|
||||
updated: 2026-08-11 | session: S189 (phiên-LOGIC L15, window 1) | branch: main
|
||||
|
||||
# 🧊 Vá @S189 dòng nhãn phiên: bản trước gộp *conversation tiếp tục* (đúng, YC-026 sống nguyên) với
|
||||
# *phiên-LOGIC chưa khép* (sai — `_end` L14, 6 bề mặt đồng thuận). Lineage → S189 `run.md`.
|
||||
|
||||
goal: Bookstart L15 chạy TRỌN 1 lượt (YC-018/YC-027) ĐÃ XONG — 12 vai, 8 lượt #53, 0 byte mất.
|
||||
Đang chạy loạt vá từ finding của đội. Phiên GIỮ MỞ chờ việc kế của anh (YC-026).
|
||||
goal: SỰ CỐ PROD A/059 (YC-028) — ĐÃ GIẢI TRỌN 2 TẦNG: (T1) disk 0-byte do cache automation
|
||||
(repo-archive 16,49GB + npm-cache 12,76GB) → SQL Error -2 → "ko duyệt được"/#44;
|
||||
(T2) 3 sshd MỒ CÔI (lệnh đo của lead bị `head` cắt) bão hòa 3/3 core → mọi phiếu 5-47s,
|
||||
A/059 vượt trần hủy 30s FE. SAU FIX: A/059 47s→0,38s · phiếu bé 0,17s · inbox 0,12s.
|
||||
|
||||
chain:
|
||||
[x] Bookstart @open TRỌN: V1 (H1 PASS_WITH_FLAGS-7 + H2 GATE-FAIL-5 → ring1 26Đ/4T/6KC/36) ·
|
||||
V2 (stale 11 FLAG + gap 7 FLAG → ring2 7Đ/3T/14KC/24, enum-gate 18/18) · V3 trio
|
||||
(eval MIXED 38-trục/13-REGRESSION → refine 2-action/16-BÁC → audit 24Đ/7T/4KC re-chạy 98 số) ·
|
||||
V4 shard IM (NO-OP có khai) · V5 detector 58+26 · khối chấm điểm → KHÔNG ĐO ĐƯỢC (A8) ·
|
||||
Phase 3.5 `_mind-s-15` block-0 qua mind-check 10/0 + ctx-audit
|
||||
→ run-trace `.claude/workflows/runs/2026-08-10-S189-bookstart-open/`
|
||||
[x] Vá 3 chỗ KHÔNG nằm bề-mặt-đo đóng băng: `CLAUDE.md:77` → `69, 71, 72` (ring1 phán
|
||||
`ef-core-migration/SKILL.md` là DƯƠNG-GIẢ ⇒ vá 1 chỗ là đủ) · `contract-workflow/SKILL.md`
|
||||
W5 "chưa làm" → ĐÃ LÀM `b275893c` (giữ vế liên-danh N-HĐ còn nợ THẬT) · WAL dòng 2 (trên)
|
||||
[!] Loạt vá CÒN LẠI (chạy ngay sau khi ctx-audit đóng cửa mở — đều là bề-mặt-đo):
|
||||
error-ledger entry TẦNG-2-SAI (L1+L2; 🔴 CẤM chạm `lead_self_audit.flag_classes` — đã niêm phong) ·
|
||||
HANDOFF lật 3 mục NEXT-em đã land `ef1d4fbb` (harvest-curator 21.308 · reviewer 85,7% ·
|
||||
measured 30 row 29/29) · `h24-signal-write.ps1` ghi tally 2 vai H24 · dọn stray dir RỖNG
|
||||
trong run-folder (git MÙ với thư-mục rỗng ⇒ phải `find -type d -empty`)
|
||||
[ ] chờ anh: (76) 2 governor sai đơn-vị [nay có chứng 0/29 vượt theo KÝ-TỰ] · (77) migration-todos
|
||||
đóng băng S168 · (78) check-email:67 cãi P6 · (79) YC-002 · (89) 4 class vượt JUMP a/b/c ·
|
||||
(74) rotate · MỚI: value_protect phủ khối hợp-đồng-vai · MỚI: lật ô YC-008↔YC-010 ·
|
||||
YC-025 review 1 lần GĐ3 prod · "ổn rồi" mở W8-authz · tồn (22)(67)(72)
|
||||
[ ] NEXT-em: gọi `ring5-audit` ở CẢ cửa MỞ (guard RCA ONESHOT-S188 hiện 0-hit `session-start.md`) ·
|
||||
khắc YC-027 vào `/tiep`+`/pause` (nay 2/4 cửa) + dựng phép kiểm ĐỦ-CỬA · sửa regex
|
||||
`**🆕 Last updated:**` trong detector (máy bám mốc cũ 9 ngày) · [carry:sentinel-truoc-bu] ·
|
||||
[carry:reset-doi-het] · w7b-inbox-param
|
||||
[x] Bookstart L15 TRỌN 12 vai + vá 7 bề mặt → push 9b3c0edb
|
||||
[x] T1 disk: xóa repo-archive (cache Gitea tự tái tạo) + npm-cache SYSTEM + 567 u_ex cũ (0,73GB)
|
||||
→ free ~20GB+ · health 200 · AUTO_CLOSE OFF ×3 DB · gỡ nén 4 file template (#88 tái phát;
|
||||
Vietreport_Master.mdf CÒN NÉN — đang mở, cần offline ~10s, làm ngoài giờ)
|
||||
[x] T2 CPU: chẩn đoán ASYNC_NETWORK_IO + query [p7] CPU-66ms-elapsed-23,6s → đo CPU-delta bắt
|
||||
3 sshd orphan 6,3 core-s/5s trên máy 3-core → kill (chừa chain mình) → 0,17-0,41s ×2 lượt.
|
||||
🔴 BÀI HỌC MỚI: `ssh ... | head` = ĐẺ ORPHAN SPIN phía Windows-OpenSSH — cấm head trên
|
||||
ssh output dài; recycle pool + đợi cold-start ~48s trước khi đo
|
||||
[!] Hàng (1)-(6) YC-028 còn: (3B) bật cron archive_cleanup Gitea + decompress Vietreport_Master
|
||||
[ngoài giờ — restart gitea vài giây] · (4) disk-watch vào cicd-monitor persona + runbook ·
|
||||
(5) FE tách "lỗi hệ thống"⟂"không tìm thấy" ×2 app + CÂN NHẮC AsSplitQuery cho
|
||||
GetPurchaseEvaluationQuery:867 (6-include = mìn cartesian khi data lớn) · (6) truy log
|
||||
20260810 biến mất (đọc Serilog retention — lệnh trước chết vì quoting, chưa có data)
|
||||
[ ] chờ anh (cũ): (76)(77)(78)(79) · (89) a/b/c · (74) rotate · value_protect · YC-008↔YC-010 ·
|
||||
YC-025 review GĐ3 · "ổn rồi" mở W8 · tồn (22)(67)(72)
|
||||
[ ] NEXT-em (cũ, run.md S189): ring5 @open · YC-027 đủ-cửa · regex 🆕 detector · sentinel-truoc-bu ·
|
||||
reset-doi-het · w7b-inbox-param · gotcha #89 disk+orphan-sshd + RCA error-ledger
|
||||
|
||||
next: đóng cửa mở (ctx-audit) → chạy loạt vá còn lại → đợi anh. Có lệnh mới ⇒ ghi mạch mới rồi chạy.
|
||||
next: chạy (4)(5)(6) + gotcha #89; (3B) chờ ngoài giờ. Anh em xác nhận phiếu OK thì báo.
|
||||
|
||||
verify:
|
||||
bookstart: ls .claude/workflows/runs/2026-08-10-S189-bookstart-open/*.md | wc -l # >= 12
|
||||
mind: python scripts/session_ctx.py mind-check --session 15 # exit 0
|
||||
🔴 CẤM chạy `PROPOSE archive` cho ring2-audit — move-set = {Role baseline, Runs} ⇒ xoá THƯỚC vai KIỂM.
|
||||
toc-do: curl (token admin) GET A/059 -> 200 <1s # da do x2 lan
|
||||
cpu: ssh delta 5s -> chi gitea ~0,3 core # da do sau kill
|
||||
free: ssh fsutil volume diskfree C: # ~20GB+
|
||||
|
||||
@ -121,6 +121,14 @@ $token = (curl -X POST https://api.solutions.com.vn/api/auth/login `
|
||||
|
||||
# Or UAT scope (non-admin): nv.test@solutions.com.vn / TestUser@123456
|
||||
|
||||
# 1b. 🔴 SERVER-HEALTH GUARD (S189 2026-08-11 — sự cố YC-028 disk-full + orphan-sshd; chi tiết
|
||||
# + lệnh đầy đủ = iis-deploy-runbook §"Disk-free + orphan guard"; chạy MỖI lần smoke):
|
||||
ssh vietreport-vps "fsutil volume diskfree C:" # free < 5GB = FAIL verdict kèm cảnh báo
|
||||
# free từng về 0 (repo-archive Gitea 16,5GB + npm-cache SYSTEM 12,8GB) → SQL Error -2
|
||||
# → FE hiện "Không tìm thấy phiếu" — TRIỆU CHỨNG DATA, GỐC HẠ TẦNG, đừng nghi oan phiếu.
|
||||
# Kèm mắt thứ 2: smoke chậm bất thường (>5s cho GET detail) ⇒ đo CPU-delta tìm process
|
||||
# mồ côi (sshd/powershell spin) THEO RUNBOOK trước khi kết luận code chậm.
|
||||
|
||||
# 2. Smoke 3-5 endpoint expected 2XX (include endpoint mới trong commit diff nếu có)
|
||||
curl -X GET https://api.solutions.com.vn/api/contracts -H "Authorization: Bearer $token" -w "%{http_code}\n"
|
||||
curl -X GET https://api.solutions.com.vn/api/purchase-evaluations -H "Authorization: Bearer $token" -w "%{http_code}\n"
|
||||
|
||||
@ -78,8 +78,9 @@ Get-Website -Name "SolutionErp-*" | Format-Table Name, State, Bindings
|
||||
### Xem log API
|
||||
|
||||
```powershell
|
||||
# Serilog file rolling daily
|
||||
Get-Content "C:\inetpub\solution-erp\api\Logs\log-$(Get-Date -Format 'yyyyMMdd').txt" -Tail 50
|
||||
# Serilog file rolling daily (path ĐO THẬT @S189 2026-08-11 — bản cũ ghi `Logs\log-*.txt` SAI;
|
||||
# config sống: appsettings.Production.json:42 `logs/solution-erp-.log`, retained 30, roll 100MB)
|
||||
Get-Content "C:\inetpub\solution-erp\api\logs\solution-erp-$(Get-Date -Format 'yyyyMMdd').log" -Tail 50
|
||||
|
||||
# IIS log
|
||||
Get-Content "C:\inetpub\logs\LogFiles\W3SVC<ID>\u_ex$(Get-Date -Format 'yyMMdd').log" -Tail 30
|
||||
@ -99,6 +100,30 @@ curl http://127.0.0.1:5443/health/ready
|
||||
curl https://api.solutions.com.vn/health/ready
|
||||
```
|
||||
|
||||
### 🔴 Disk-free + orphan guard (S189 2026-08-11 — sự cố YC-028, PHẢI check khi prod chậm/500)
|
||||
|
||||
```powershell
|
||||
# 1. Disk C: — sự cố thật: 0 byte (repo-archive Gitea 16,5GB + npm-cache SYSTEM 12,8GB)
|
||||
# → SQL Error -2 (không mở nổi connection) → FE hiện "Không tìm thấy phiếu" (#44 class)
|
||||
fsutil volume diskfree C: # free < 5GB = ĐỎ; cache tự phình: C:\gitea\data\repo-archive
|
||||
# (xóa an toàn — Gitea tự tái tạo) + npm-cache SYSTEM (CI)
|
||||
|
||||
# 2. CPU orphan — sự cố thật: 3 sshd mồ côi (ssh bị cắt output giữa chừng) ăn 3/3 core
|
||||
# → mọi API 5-47s, SQL wait ASYNC_NETWORK_IO (client đói CPU không nhận nổi data)
|
||||
$a=@{}; Get-Process | ForEach-Object { $a[$_.Id]=$_.CPU }; Start-Sleep 5
|
||||
Get-Process | ForEach-Object { if($a.ContainsKey($_.Id)){ $d=$_.CPU-$a[$_.Id]; if($d -ge 1){ "$($_.Name) $($_.Id) $([math]::Round($d,1))" } } }
|
||||
# sshd/powershell lạ ăn ≥1 core-s/5s → kill (CHỪA chuỗi tổ tiên session mình)
|
||||
|
||||
# 3. NTFS compression trên .mdf/.ldf (gotcha #88 — "giải phóng dung lượng" nén khi ổ cạn)
|
||||
Get-ChildItem 'C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\DATA' -File |
|
||||
Where-Object { $_.Attributes -match 'Compressed' } # có kết quả = compact /u (DB offline nếu đang mở)
|
||||
|
||||
# 4. AUTO_CLOSE phải OFF (đã set @S189 — ON làm mỗi connection mở lại DB ~5s)
|
||||
sqlcmd -S .\SQLEXPRESS -E -W -Q "SELECT name,is_auto_close_on FROM sys.databases WHERE database_id>4"
|
||||
```
|
||||
|
||||
🔴 **Bài `ssh … | head` (S189):** cắt output sớm làm ssh client thoát nhưng **process phía Windows-OpenSSH chạy tiếp** → orphan spin ăn core. Lệnh ssh dài: bọc `Select-Object -First N` phía REMOTE, đừng `| head` phía local.
|
||||
|
||||
## Let's Encrypt cert — win-acme
|
||||
|
||||
### Check trạng thái
|
||||
|
||||
Reference in New Issue
Block a user