Skip to content

Vận hành

1. Triển khai

Thuộc tínhGiá trị
Imageregistry/helpdesk:<tag>
ProcessesAPI (RUN_MODE=startup) + Worker (RUN_MODE=worker) + Migration một lần (RUN_MODE=migrate)
Container Port3000 (external 31130)
Snowflake node id12
ProbesGET /healthz (live), GET /readyz (ready) — mặc định IGNIS
Chế độ migrationjob chạy một lần (bun run migrate)

API và Worker dùng chung một image; vai trò được chọn bởi RUN_MODE. Worker process phải chạy để giám sát SLA, assignment, escalation, thông báo, enrichment context, và trigger survey hoạt động.

Traefik labels

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.helpdesk.rule=PathPrefix(`/v1/api/helpdesk`)"
  - "traefik.http.services.helpdesk.loadbalancer.server.port=3000"

2. Observability

Tín hiệuNguồnXem ở đâu
Logsstdout, tiền tố [ComponentName] (ví dụ [QueueComponent], [ProcessEscalation]) qua console.log/console.errorkubectl logs <pod> / Loki
MetricsMặc định IGNIS nếu được phơi bàyGrafana
TracesKhông đấu nối
HealthGET /healthz, GET /readyzCổng gateway
Độ sâu hàng đợiBullMQ (Redis)Bull board / kiểm tra Redis

Marker log chính

MarkerÝ nghĩa
[QueueComponent] SLA Monitor cron job scheduledWorker đã boot cron SLA
[ProcessEscalation] Reassigning ticket …Đường tái phân công escalation (xem Vấn đề đã biết)
[EventHandlerRegistry] Handler failed for <event>Lỗi listener in-process (được bắt)

Logging là console.* không có cấu trúc (không có logger key-value trong worker/listener). Lan truyền request-id cross-service chỉ áp dụng ở lớp HTTP IGNIS.

3. Bảo mật

Mối quan tâmGiảm thiểu
AuthNJWT (ES256) được xác thực với JWKS của identity — VerifierApplication
AuthZPhạm vi theo merchant qua assertMerchantAccess() + useRequestContext(); PermissionService helpdesk cho kiểm tra mịn hơn. Không có decorator @authenticate theo route — controller thực thi truy cập trong handler
SecretsEnv (APP_ENV_*) gồm password SMTP + Redis; không bao giờ trong code. .env.development chứa secret dev trông như thật — xoay vòng trước bất kỳ dùng non-dev nào
TenancyTất cả truy vấn ticket được giới hạn theo merchantId / organizerId
Soft-deletedeletedAt — không hard-delete mặc định
Note nội bộ/riêng tưTicketMessage.isInternal ẩn note khỏi người báo cáo

4. Runbook

4.1 Phân loại cảnh báo

Cảnh báoKích hoạtKiểm traSửaLeo thang
helpdeskWorkerDownKhông có log cron SLA-monitorTrạng thái worker podRestart worker (RUN_MODE=worker)on-call backend
helpdeskQueueLagBullMQ pending caoĐộ sâu hàng đợi RedisScale worker / kiểm tra lỗion-call SRE
helpdeskNotificationFailJob notification chạm max retry (5)Credential SMTP / notification-delivery-logSửa SMTP, replay DLQon-call backend
helpdeskSlaBreachSpikeTỷ lệ vi phạm tăngSố đếm status SlaTrackerKiểm tra nhân sự agent / chính sáchsupport-team

4.2 Thao tác thường gặp

Thao tácLệnh / hành động
Tail log APIkubectl logs -n <ns> -f deploy/helpdesk-api
Tail log workerkubectl logs -n <ns> -f deploy/helpdesk-worker
Trigger kiểm tra SLAQueueComponent.triggerSlaCheck({ ticketId? }) (job thủ công, priority HIGH)
Reset cron SLARestart worker đăng ký lại sla-monitor-cron (gỡ lặp lại cũ)
Chạy migrationbun run migrate:dev (theo từng package; không bao giờ chạy bởi agent)
Replay job dead-letterqua HandleDeadLetterUseCase / dlq.helper.ts

5. Vấn đề đã biết

Build TypeScript của @nx/helpdesk hiện đang fail. Theo AGENTS.md của package, nguyên nhân là đường tham chiếu assignTicketUseCase chết. Cuộc gọi tái phân công escalation Level-2+ (this.assignTicketUseCase.execute(...)) trong src/application/use-cases/sla-policy/process-escalation.use-case.ts bị comment out — use-case đó không được inject vào ProcessEscalationUseCase, nên escalation SLA không tái phân công ticket cho senior agent; nó chỉ gửi thông báo escalation-assignment. Không sửa source như một phần công việc tài liệu.

Tác độngChi tiết
Buildbun run rebuild / tsc fail; không thể tạo artifact triển khai cho đến khi sửa
Tái phân công escalationBị tắt — tái phân công senior-agent ở Level 2/3 là no-op (chỉ thông báo)
Drift định danh.env.development mang SVC-00030 / 31032 / 0 cũ; đối chiếu về app-info.json (SVC-00120 / 31130 / 12) khi build được sửa (xem Cấu hình)
Dependency chết@platformatic/kafka được khai báo nhưng không dùng — ứng viên để gỡ

6. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.