Files
hawkbit/docs
stormc b69bedd8f9 DDI API: Extend API response to report previous update execution status. (#506)
* DDI API: Limit number of feedback messages for an action status.

Even though the number of ActionStatus entries are limited to 1000 per
action using QuotaManagement, there is no limit on the number of
messages that can be sent as part of a single ActionStatus. This allows
a controller to potentially send large number of messages for a single
action.

Limiting the number of allowed messages to 50 using the
javax.validation.constraints.Size within DdiStatus.

Signed-off-by: Christian Storm <christian.storm@siemens.com>
Signed-off-by: Himanshu Kumar Singh <himanshu.singh@siemens.com>
Signed-off-by: Raju HS <raju.hs@siemens.com>

* DDI API: Extend API response to retrieve controller feedback. (#381)

Resolves #381

The mechanism is useful for example, when the client software running on
the device loses this information prior to reporting a final execution
status such as 'closed' to hawkBit. This may happen, e.g., due to a
power cycle or simply a crash. Upon the client software restarting, it
installs the same payload again as advertised by hawkBit (as the device
has not sent a final update execution status). Instead, if the last
feedback sent to hawkBit would be reported back to the device, the
client may resume installation.

Feedback messages sent as part of POST
    /{tenant}/controller/v1/{targetid}/deploymentBase/{actionId}/feedback,
are sent back to controller as part of response to GET
    /{tenant}/controller/v1/{targetid}/deploymentBase/{actionId}.

Following example illustrates the API changes:

1. After retrieving the action from server, controller starts download
and sends a feedback.
curl
'http://127.0.0.1:8080/default/controller/v1/1/deploymentBase/1/feedback'
-i -X POST -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept:
application/hal+json' -d '{
  "id" : "1",
  "time" : "20170406T121500",
  "status" : {
    "result" : {
      "progress" : {
        "of" : 1,
        "cnt" : 0
      },
      "finished" : "none"
    },
    "execution" : "proceeding",
    "details" : [ "proceeding with download" ]
  }
}'

2. Once artifact download has finished, controller sends another
feedback.
curl
'http://127.0.0.1:8080/default/controller/v1/1/deploymentBase/1/feedback'
-i -X POST -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept:
application/hal+json' -d '{
{
  "id" : "1",
  "time" : "20170406T123000",
  "status" : {
    "result" : {
      "progress" : {
        "of" : 1,
        "cnt" : 0
      },
      "finished" : "none"
    },
    "execution" : "proceeding",
    "details" : [ "downloaded artifacts for update" ]
  }
}'

3. If there is a power outage now, the controller can retrieve the
messages posted earlier from the action history when it restarts again.
curl
'http://127.0.0.1:8080/default/controller/v1/1/deploymentBase/1?c=411599879&actionHistory=-1'
-i -H 'Accept: application/hal+json'

Response will be like below
{
  "id": "1",
  "deployment": {
    "download": "forced",
    "update": "forced",
    "chunks": [
      {
      "part": "os",
      "version": "1",
      "name": "1",
      "artifacts": [....],
      }
    ],
  },
  "actionHistory": {
    "status": "RETRIEVED",
    "messages": [
      "downloaded artifacts for update",
      "proceeding with download"
    ]
  }
}

4. Based on the feedback messages, controller may be able to skip the
download and resume with installation and send additional feedback.
curl
'http://127.0.0.1:8080/default/controller/v1/1/deploymentBase/1/feedback'
-i -X POST -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept:
application/hal+json' -d '{
  "id" : "1",
  "time" : "20170406T121314",
  "status" : {
    "result" : {
      "progress" : {
        "of" : 1,
        "cnt" : 0
      },
      "finished" : "none"
    },
    "execution" : "resumed",
    "details" : [ "resuming installation based on previous feedback,
download skipped" ]
  }
}'

Note: The maximum number of messages to be retrieved from the database
by a controller is limited to 100. The actionHistory parameter's value
has the following meaning:

Input Value         | Output
-----------------------------
  <0                | Retrieve maximum allowed number of messages from
                    | action history.
  unspecified or =0 | Do not retrieve any message (default).
  >0                | Retrieve specified number of messages, limited by
                    | maximum allowed number.

Signed-off-by: Christian Storm <christian.storm@siemens.com>
Signed-off-by: Himanshu Kumar Singh <himanshu.singh@siemens.com>
Signed-off-by: Raju HS <raju.hs@siemens.com>
2017-06-06 08:26:01 +02:00
..

Eclipse hawkBit Documentation

The hawkBit documenation is based on the Jekyll

Jekyll is a ruby gem and needs ruby to execute.

Build and Serve documentation

Unix / Mac

On a unix or mac you don't need to extra install Jekyll. The maven build is downloading the ruby runtime and the necessary ruby-gems via the maven rubygems-proxy repository. The ruby runtime is downloaded into the target folder and executed during the build.

To serve the current documentation you only need to call mvn gem:exec@jekyll-serve. It automatically monitors the filesystem and every local changes are generated on-demand on the local server http://127.0.0.1:4000/.

Windows

On a windows operating system you'll need to install Jekyll manually. If you don't have installed Jekyll on your machine you can just use the PortableJekyll project. Just clone the Github repository and start the setpath.cmd which setups the necessary path entries into the CMD (Don't forget to copy them into the environment path variable to have the path set for every command prompt).

The maven build on windows just executes the Jekyll process using the maven-exec plugin. This allows to also use maven build to build and servce the documentation on a windows machine.

To serve the current documentation you only need to call mvn exec:exec@jekyll-serve. It automatically monitors the filesystem and every local changes are generated on-demand on the local server http://127.0.0.1:4000/.