OCPP 2.0.1 LogStatusNotification 메시지

 

LogStatusNotification 개요

LogStatusNotification은 충전소에서 중앙 시스템(CSMS)으로 보내는 로그 업로드 상태 알림 메시지입니다. 이 메시지는 GetLog 요청에 대한 응답으로 로그 수집, 압축, 업로드의 전체 과정에서 발생하는 상태 변화를 실시간으로 CSMS에 알려 로그 관리의 투명성과 추적성을 제공합니다.

메시지 구조

Request (충전소 → CSMS)

{
  "status": "Uploading",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "NoError",
    "additionalInfo": "업로드 진행률: 45% (2.1MB / 4.7MB)"
  }
}

Response (CSMS → 충전소)

{
  "customData": {
    "vendorId": "LogManager",
    "data": "Status acknowledged"
  }
}

주요 필드 설명

Request 필드들

status 필드 (필수)

설명
BadMessage 잘못된 로그 요청 메시지
Idle 유휴 상태 - 로그 작업 없음
NotSupportedOperation 지원되지 않는 작업
PermissionDenied 권한 거부됨
Uploaded 업로드 완료됨
UploadFailure 업로드 실패
Uploading 업로드 진행 중
AcceptedCanceled 승인되었으나 취소됨

requestId 필드 (필수)

필드명 필수여부 타입 설명
requestId 필수 Integer GetLog 요청의 requestId (요청-응답 매칭용)

statusInfo 필드 (선택사항)

필드명 필수여부 타입 설명
reasonCode 선택사항 String 상태 이유 코드
additionalInfo 선택사항 String 추가 상세 정보 (진행률, 오류 메시지 등)

Response 필드들

필드명 필수여부 타입 설명
customData 선택사항 Object 벤더별 사용자 정의 데이터

실제 사용 예제

예제 1: 로그 수집 시작

// Request
{
  "status": "Uploading",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "LogCollectionStarted",
    "additionalInfo": "보안 로그 수집 시작. 예상 시간: 3분, 파일 크기: 4.7MB"
  }
}

// Response
{
  "customData": {
    "vendorId": "LogTracker",
    "data": "Collection started notification received"
  }
}

예제 2: 업로드 진행률 업데이트

// Request
{
  "status": "Uploading",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "UploadInProgress",
    "additionalInfo": "업로드 진행률: 65% (3.1MB / 4.7MB), 남은 시간: 약 2분"
  }
}

// Response
{
  "customData": {
    "vendorId": "ProgressMonitor",
    "data": "Progress update acknowledged"
  }
}

예제 3: 업로드 성공 완료

// Request
{
  "status": "Uploaded",
  "requestId": 12345,
  "statusInfo": {
    "reasonCode": "UploadSuccessful",
    "additionalInfo": "파일 업로드 완료"
  }
}

// Response
{
  "customData": {
    "vendorId": "LogManager",
    "action": "verify_upload",
    "data": "Upload verification scheduled"
  }
}

예제 4: 업로드 실패

// Request
{
  "status": "UploadFailure",
  "requestId": 12346,
  "statusInfo": {
    "reasonCode": "NetworkTimeout",
    "additionalInfo": "업로드 실패. 시도: 2/3, 다음 재시도: 30초 후"
  }
}

// Response
{
  "customData": {
    "vendorId": "RetryManager",
    "action": "schedule_retry",
    "data": "Retry scheduled with extended timeout"
  }
}

예제 5: 권한 거부

// Request
{
  "status": "PermissionDenied",
  "requestId": 12347,
  "statusInfo": {
    "reasonCode": "InsufficientPrivileges",
    "additionalInfo": "보안 로그 접근 권한 없음"
  }
}

// Response
{
  "customData": {
    "vendorId": "AccessControl",
    "action": "permission_review",
    "data": "Permission escalation request logged"
  }
}

예제 6: 지원되지 않는 작업

// Request
{
  "status": "NotSupportedOperation",
  "requestId": 12348,
  "statusInfo": {
    "reasonCode": "UnsupportedLogType",
    "additionalInfo": "지원 타입: SecurityLog, DiagnosticsLog"
  }
}

// Response
{
  "customData": {
    "vendorId": "CapabilityManager",
    "data": "Unsupported operation logged for future enhancement"
  }
}

예제 7: 요청 취소

// Request
{
  "status": "AcceptedCanceled",
  "requestId": 12349,
  "statusInfo": {
    "reasonCode": "HigherPriorityRequest",
    "additionalInfo": "긴급 보안 로그 요청(ID: 12350)으로 인해 현재 작업 취소됨"
  }
}

// Response
{
  "customData": {
    "vendorId": "PriorityManager",
    "action": "reschedule_canceled",
    "data": "Canceled request rescheduled for later execution"
  }
}

예제 8: 잘못된 요청

// Request
{
  "status": "BadMessage",
  "requestId": 12350,
  "statusInfo": {
    "reasonCode": "InvalidTimeRange",
    "additionalInfo": "잘못된 시간 범위. oldestTimestamp가 latestTimestamp보다 늦음"
  }
}

// Response
{
  "customData": {
    "vendorId": "ValidationEngine",
    "data": "Message validation error logged"
  }
}

상태 변화 시나리오

성공적인 로그 업로드 흐름

  1. Uploading (수집 시작): "로그 수집을 시작합니다"
  2. Uploading (압축 중): "로그 파일을 압축하고 있습니다"
  3. Uploading (업로드 시작): "업로드를 시작합니다"
  4. Uploading (진행률): "업로드 진행률: 25%, 50%, 75%..."
  5. Uploaded (완료): "업로드가 성공적으로 완료되었습니다"

실패 후 재시도 흐름

  1. Uploading (시작): "첫 번째 업로드 시도"
  2. UploadFailure (실패): "네트워크 오류로 실패, 재시도 예정"
  3. Uploading (재시도): "두 번째 업로드 시도"
  4. Uploaded (성공): "재시도 후 성공적으로 완료"

취소 시나리오

  1. Uploading (진행 중): "업로드 진행 중: 30%"
  2. AcceptedCanceled (취소): "더 높은 우선순위 요청으로 취소"
  3. Idle (대기): "새로운 요청 대기 중"

모니터링 및 알림

진행률 추적

  • 수집 단계: 파일 크기, 예상 시간
  • 압축 단계: 압축률, 최종 파일 크기
  • 업로드 단계: 전송 속도, 완료 예상 시간

오류 처리

  • 네트워크 오류: 재시도 횟수, 다음 시도 시간
  • 권한 오류: 필요 권한, 현재 권한 레벨
  • 시스템 오류: 리소스 부족, 디스크 공간

성능 지표

  • 업로드 속도: MB/초
  • 압축률: 원본 대비 압축 파일 비율
  • 성공률: 전체 요청 대비 성공 비율

중요 포인트

  • LogStatusNotification은 GetLog 요청의 전체 생명주기를 추적하는 핵심 메시지입니다
  • 실시간 진행률 업데이트를 통해 사용자와 시스템 관리자에게 투명성을 제공합니다
  • requestId를 통해 여러 동시 로그 요청을 구별하고 추적할 수 있습니다
  • 상세한 additionalInfo는 문제 해결과 성능 최적화에 중요한 정보를 제공합니다
  • 네트워크 불안정 상황에서의 재시도 로직을 투명하게 보고합니다
  • 권한 관련 오류는 보안 감사 추적에 중요한 정보입니다
  • 대용량 파일 업로드 시 정기적인 진행률 업데이트가 사용자 경험을 개선합니다
  • CSMS는 상태 정보를 바탕으로 자동화된 대응 조치를 수행할 수 있습니다

이 메시지를 통해 로그 수집과 업로드 과정의 완전한 가시성을 확보하고, 문제 발생 시 신속한 대응과 해결이 가능하며, 전체 로그 관리 시스템의 신뢰성과 효율성을 크게 향상시킬 수 있습니다.