edgehog-device-manager / edgehog-device-runtime

Edgehog Device Runtime is a portable middleware written in Rust, that enables remote device management on Linux-based systems.
Apache License 2.0
12 stars 10 forks source link

Make use of updated OTARequest and new OTAEvent interfaces #208

Closed bettio closed 1 year ago

bettio commented 1 year ago
harlem88 commented 1 year ago

OTA flowchart with new status:

flowchart TD
    INIT[[INIT]]
    ACKNOWLEDGED:::sBlock
    DOWNLOADING:::sBlock
    ERROR:::sBlock
    DEPLOYING:::sBlock
    DEPLOYED:::sBlock
    REBOOTING:::sBlock
    FAILURE

    INIT -->|Receive OTA Request| HANDLE_OTA_REQ{handle request}
    HANDLE_OTA_REQ --> |UpdateInProgress| FAILURE[FAILURE]
    HANDLE_OTA_REQ --> |Invalid Request| FAILURE[FAILURE]
    HANDLE_OTA_REQ --> CANCELLING(Cancelling)
    CANCELLING --> HANDLE_OTA_CANCEL_REQ{ ACKN <= state < DING }
    HANDLE_OTA_CANCEL_REQ --> |Cancelled|FAILURE
    FAILURE --> INIT
    HANDLE_OTA_REQ --> ACKNOWLEDGED
    ACKNOWLEDGED --> DOWNLOADING
    DOWNLOADING:::sBlock --> DownRes{ok}
    DownRes{ok} --> |NetworkFAILURE|ERROR
    ERROR --> CHECK_NETWORK_ERR{err < max_retry}
    CHECK_NETWORK_ERR --> DOWNLOADING
    CHECK_NETWORK_ERR --> |NetworkFAILURE|FAILURE
    DownRes{ok} --> |IOFAILURE/InternalFAILURE|FAILURE
    DownRes{ok} --> CHECK_BUNDLE
    CHECK_BUNDLE{verify image} --> |InvalidBaseImage|FAILURE
    CHECK_BUNDLE{verify image} --> DEPLOYING
    DEPLOYING --> DEPLOYING_RESULT{ok}
    DEPLOYING_RESULT --> |Deploying FAILURE|FAILURE
    DEPLOYING_RESULT --> DEPLOYED(DEPLOYED)
    DEPLOYED --> REBOOTING
    REBOOTING --> REB_RESULT{ok}
    REB_RESULT --> |SystemRollback/?|FAILURE
    REB_RESULT --> Success
    Success --> INIT

    style FAILURE fill:#f44336,color:#fff
    style INIT fill:#9E9E9E,color:#fff  
    style Success fill:#4CAF50,color:#fff
    classDef sBlock fill:#2196F3,color:#fff
    classDef cBlock fill:#000000,color:#fff
    classDef rBlock fill:#FFEB3G,color:#fff