tool-checkVai trò: Máy kiểm tra — Thực thi kiểm tra website bằng trình duyệt thật
Công nghệ: Bun · Elysia · TypeScript · Puppeteer · MongoDB
tool-check là máy thợ của hệ thống — nó thực sự mở trình duyệt, truy cập từng website, và thu thập thông tin. Không có màn hình, không có giao diện, nó chạy âm thầm trên máy chủ.api (trung tâm điều phối)api khi hoàn thành┌─────────────────────────────────────────────────────────────────┐
│ SOURCE: tool-check │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ BỘ ĐIỀU PHỐI CÔNG VIỆC (Dispatcher) │ │
│ │ │ │
│ │ Liên tục hỏi DB: "Có task nào chờ xử lý không?" │ │
│ │ Có task → Phân cho worker rảnh │ │
│ │ Hết slot → Chờ worker nào xong mới lấy task tiếp │ │
│ └────────────────────────┬────────────────────────────────┘ │
│ │ Phân công │
│ ┌───────────────┼───────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Worker 1 │ │ Worker 2 │ │ Worker N │ (tối đa N) │
│ │ (trình │ │ (trình │ │ (trình │ │
│ │ duyệt) │ │ duyệt) │ │ duyệt) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └──────────────┴──────────────┘ │
│ │ Kết quả │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ BỘ GỬI KẾT QUẢ │ │
│ │ (Webhook) │ │
│ │ Báo về api trung │ │
│ │ tâm khi xong │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘API trung tâm tạo "phiếu công việc" (task) trong MongoDB
│
▼
Dispatcher phát hiện task mới đang chờ
│
▼
Kiểm tra: CPU < 70%? RAM < 80%? Còn slot trống?
│
▼ Đủ điều kiện
Đánh dấu task "đang chạy" → giao cho Worker rảnh
│
▼
Worker mở trình duyệt thật (Puppeteer)
→ Dùng proxy IP trung gian (để ẩn danh)
→ Truy cập website cần kiểm tra
→ Thu thập thông tin
│
├── Chụp ảnh màn hình (screenshot)
├── Kiểm tra website có từ khóa không
├── Phát hiện chuyển hướng (redirect)
└── Phân loại loại website (mainsite / satellite)
│
▼
Worker hoàn thành → gửi kết quả về api qua Webhook
│
▼
Worker báo "xong" → Dispatcher giao task tiếp theo| Điều kiện | Hành động |
|---|---|
| CPU > 70% | Dừng lấy task mới, chờ CPU hạ |
| RAM > 80% | Dừng lấy task mới, chờ RAM hạ |
| Tất cả worker đang bận | Chờ cho đến khi có worker nào xong |
| Task ưu tiên (manual) | Được xử lý trước task thường |
MongoDB (nội bộ tool-check)
→ Lưu tạm danh sách task cần làm
→ Theo dõi task nào đang chạy, xong, lỗi
api (trung tâm)
→ Gửi task mới vào MongoDB
→ Nhận kết quả qua Webhook callback
Proxy (lấy từ api)
→ Dùng làm địa chỉ IP trung gian khi truy cập website
→ Tránh bị website nhận ra và chặn
AWS S3 (lưu trữ đám mây)
→ Ảnh chụp màn hình được upload lên đây| Chế độ | Mô tả |
|---|---|
| Tự động (Auto) | Task do api tạo theo lịch hàng ngày, ưu tiên bình thường |
| Thủ công ưu tiên (Priority) | Task do nhân viên bấm tay, được xử lý trước |
| Retry | Task thất bại được tự động thử lại sau 60 giây |
| Old Running Recovery | Khi khởi động lại, hệ thống tự phục hồi các task bị gián đoạn |
tool-checkgiống như đội nhân viên thực địa: nhận phiếu công việc từ trưởng phòng (api), đi thực địa mở website kiểm tra, chụp ảnh bằng chứng, rồi báo cáo lại. Có bao nhiêu nhân viên (worker) thì làm được bấy nhiêu việc cùng lúc, không quá tải nhau.