Skip to content

Task 2-2: Warn khi macIp Không Tìm Thấy

Phase: 2 - Observability Priority: Low Depends on: Không có Reference: docs/BountyHunter-Backend/details/feature-receiver-service/SPEC.md

Background

Trong JMSReceiverLogMachineListener.getBoothIdFromMacIp(), nếu macIp không tìm thấy, trả về "UNKNOWN" mà không có warning log. Ops team không biết có machine gửi messages mà chưa được register.

Tasks

DI Note: JMSReceiverLogMachineListener đã inject CraneMachineService (hoặc tương đương) qua constructor. Phương thức findByMac(macIp) trả Optional<CraneMachine> — xác nhận return type bằng grep. Method getGroupLabel()getGroupNumber() — xác nhận field names trên entity CraneMachine.

File: receiver-service/jms/JMSReceiverLogMachineListener.java

  • [ ] Thêm warning khi macIp không tìm thấy:

    private String getBoothIdFromMacIp(String macIp) {
        var craneMachine = craneMachineService.findByMac(macIp);
        return craneMachine
            .map(m -> m.getGroupLabel() + "-" + m.getGroupNumber())
            .orElseGet(() -> {
                LOGGER.warn("[RECEIVER] Unknown macIp={} - machine not registered in DB", macIp);
                return "UNKNOWN";
            });
    }
    

  • [ ] Audit các listeners khác nếu cùng có macIp lookup:

    grep -rn "findByMac\|getBoothIdFromMacIp" receiver-service/
    

  • [ ] Tương tự trong JMSReceiverHealthCheckMachineListenerJMSReceiverGameplayMachineListener nếu cũng có lookup pattern này

Verification / Acceptance Criteria

  • [ ] Message với unregistered macIp → log WARN [RECEIVER] Unknown macIp=...
  • [ ] Log được phân biệt rõ với ERROR logs (chỉ WARN, không block processing)
  • [ ] boothId = "UNKNOWN" vẫn được save trong DB record (không throw exception)
  • [ ] Registered macIp: không log WARN, boothId = {groupLabel}-{groupNumber} đúng
  • [ ] Tất cả listeners với macIp lookup đều có warning behavior nhất quán

Files to Modify

  • receiver-service/src/main/java/com/figpop/jms/JMSReceiverLogMachineListener.java
  • receiver-service/src/main/java/com/figpop/jms/JMSReceiverHealthCheckMachineListener.java (nếu applicable)
  • receiver-service/src/main/java/com/figpop/jms/JMSReceiverGameplayMachineListener.java (nếu applicable)