Reporting¶
Curtin is capable of reporting its progress via the reporting framework. This enables the user to obtain status information from curtin.
Events¶
- Reporting consists of notification of a series of ‘events. Each event has:
- event_type: ‘start’ or ‘finish’
- description: human readable text
- level: the log level of the event, DEBUG/INFO/WARN etc.
- name: and id for this event
- result: only present when event_type is ‘finish’, its value is one of “SUCCESS”, “WARN”, or “FAIL”. A result of WARN indicates something is likely wrong, but a non-fatal error. A result of “FAIL” is fatal.
- origin: literal value ‘curtin’
- timestamp: the unix timestamp at which this event occurred
- names are unique and hierarchical. For example, a series of names might look like:
- cmd-install (start)
- cmd-install/stage-early (start)
- cmd-install/stage-early (finish)
- cmd-install (finish)
You are guaranteed to always get a finish for each sub-item before finish of the parent item, and guaranteed to get finish for all events. A FAIL result of a sub-item will bubble up to its parent item.
Configuration¶
Reporting configuration is done through the reporting
item in config. An
example config:
reporting:
keyname1:
type: webhook
endpoint: "http://127.0.1.1:8000/"
keyname2:
type: print
install:
log_file: /tmp/install.log
post_files: [/tmp/install.log, /var/log/syslog]
Each entry in the reporting
dictionary must be a dictionary. The key is
only used for reference and to aid in config merging.
- Each entry must have a ‘type’. The currently supported values are:
- log: logs via python logger
- print: prints messages to stdout (for debugging)
- webhook: posts json formatted data to a remote url. Supports Oauth.
Additionally, the webhook reporter will post files on finish of curtin. The user can declare which files should be posted in the install
item via post_files
as shown above. If post_files is not present, it will default to the value of log_file.
Webhook Reporter¶
The webhook reporter posts the event in json format to an endpoint. To enable, provide curtin with config like:
reporting:
mylistener:
type: webhook
endpoint: http://example.com/endpoint/path
consumer_key: "ck_foo"
consumer_secret: "cs_foo"
token_key: "tk_foo"
token_secret: "tk_secret"
level: INFO
The endpoint
key is required. Oauth information (consumer_key,
consumer_secret, token_key, token_secret) is not required, but if provided
then oauth will be used to authenticate to the endpoint on each post. If level
is specified then all messages with a lower priority than specified will be
ignored. Default is INFO.
Journald Reporter¶
The journald reporter sends the events to systemd’s journald. To enable, provide curtin with config like:
reporting:
mylistener:
type: journald
identifier: "my_identifier"
level: DEBUG
The event’s fields are mapped to fields of the resulting journal entry as follows:
- description maps to CURTIN_MESSAGE
- level maps to PRIORITY
- name maps to CURTIN_NAME
- event_type maps to CURTIN_EVENT_TYPE
- result, if present, maps to CURTIN_RESULT
The configured identifier, which defaults to “curtin_event”, becomes the entry’s SYSLOG_IDENTIFIER.
The python-systemd package must be installed to use this handler.
Example Events¶
The following is an example event that would be posted:
{
"origin": "curtin",
"timestamp": 1440688425.6038516,
"event_type": "start",
"name": "cmd-install",
"description": "curtin command install",
"level": "INFO"
}
The post files will look like this:
{
"origin": "curtin",
"files": [
{
"content: "fCBzZmRpc2s....gLS1uby1yZX",
"path": "/var/log/curtin/install.log",
"encoding": "base64"
},
{
"content: "fCBzZmRpc2s....gLS1uby1yZX",
"path": "/var/log/syslog",
"encoding": "base64"
}
],
"description": "curtin command install",
"timestamp": 1440688425.6038516,
"name": "cmd-install",
"result": "SUCCESS",
"event_type": "finish"
}
Example Http Request¶
The following is an example http request from curtin:
Accept-Encoding: identity
Host: localhost:8000
Content-Type: application/json
Connection: close
User-Agent: Curtin/0.1
Content-Length: 156
{
"origin": "curtin",
"timestamp": 1440688425.6038516,
"event_type": "start",
"name": "cmd-install/stage-early",
"description": "preparing for installation"
}
Development / Debug Reporting¶
For debugging and development a simple web server is provided in tools/report-webhook-logger.
Run the web service like:
./tools/report-webhook-logger 8000
And then run your install with appropriate config, like:
sudo ./bin/curtin -vvv install \
--set install/logfile=/tmp/foo \
--set reporting/mypost/type=webhook \
--set reporting/mypost/endpoint=http://localhost:8000/
file://$root_tgz
Legacy Reporter¶
The legacy ‘reporter’ config entry is still supported. This was utilized by MAAS for start/end and posting of the install log at the end of installation.
Its configuration looks like this:
Legacy Reporter Config Example:
reporter:
url: http://example.com/your/path/to/post
consumer_key: "ck_foo"
consumer_secret: "cs_foo"
token_key: "tk_foo"
token_secret: "tk_secret"