From ab61d11f4571b95028483121d0d90d5a66183fcf Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sat, 12 Mar 2016 00:55:56 -0500 Subject: [PATCH] config: prefer using $log-levels prop in 2.1 Signed-off-by: Philippe Proulx --- README.md | 6 ++--- barectf/config.py | 33 +++++++++++++++++++----- doc/examples/linux-fs-simple/config.yaml | 2 +- doc/examples/parallella/config.yaml | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 4fe944a..e4c9e59 100644 --- a/README.md +++ b/README.md @@ -288,7 +288,7 @@ as well as a corresponding CTF metadata file. | Property | Type | Description | Required? | Default value | |---|---|---|---|---| | `type-aliases` | Associative array of strings (alias names) to [type objects](#type-objects) or strings (previous alias names) | Type aliases to be used in trace, stream, and event objects | Optional | `{}` | -| `log-levels` | Associative array of strings (log level names) to log level constant integers | Log levels to be used in event objects | Optional | `{}` | +| `$log-levels` | Associative array of strings (log level names) to log level constant integers | Log levels to be used in event objects | Optional | `{}` | | `clocks` | Associative array of strings (clock names) to [clock objects](#clock-object) | Trace clocks | Optional | `{}` | | `env` | Associative array of strings (names) to strings or integers (values) | Trace environment variables | Optional | `{}` | | `trace` | [Trace object](#trace-object) | Metadata common to the whole trace | Required | N/A | @@ -333,7 +333,7 @@ type-aliases: class: array length: 16 element-type: byte -log-levels: +$log-levels: emerg: 0 alert: 1 critical: 2 @@ -585,7 +585,7 @@ A CTF event. | `payload-type` | [Type object](#type-objects) or string (alias name) | Type of event payload (must be a [structure type object](#structure-type-object)) | Required | N/A | Available log level names, for a given event, are defined by the -`log-levels` property of the [metadata object](#metadata-object) +`$log-levels` property of the [metadata object](#metadata-object) containing it. Each field of the event context structure type (`context-type` property) diff --git a/barectf/config.py b/barectf/config.py index 080c004..da03d13 100644 --- a/barectf/config.py +++ b/barectf/config.py @@ -1921,13 +1921,29 @@ class _YamlConfigParser: def _register_log_levels(self, metadata_node): self._log_levels = dict() - if 'log-levels' not in metadata_node: - return + # log levels: + # v2.0: "log-levels" + # v2.1+: "$log-levels" + log_levels_node = None + + if self._version >= 200: + if 'log-levels' in metadata_node: + log_levels_prop = 'log-levels' + log_levels_node = metadata_node[log_levels_prop] - log_levels_node = metadata_node['log-levels'] + if self._version >= 201: + if '$log-levels' in metadata_node: + if log_levels_node is not None: + raise ConfigError('cannot specify both "log-levels" and "$log-levels" properties of metadata object: prefer "$log-levels"') + + log_levels_prop = '$log-levels' + log_levels_node = metadata_node[log_levels_prop] + + if log_levels_node is None: + return if not _is_assoc_array_prop(log_levels_node): - raise ConfigError('"log-levels" property (metadata) must be an associative array') + raise ConfigError('"{}" property (metadata) must be an associative array'.format(log_levels_prop)) for ll_name, ll_value in log_levels_node.items(): if ll_name in self._log_levels: @@ -2145,14 +2161,19 @@ class _YamlConfigParser: if not _is_assoc_array_prop(metadata_node): raise ConfigError('"metadata" property (configuration) must be an associative array') - unk_prop = _get_first_unknown_prop(metadata_node, [ + known_props = [ 'type-aliases', 'log-levels', 'trace', 'env', 'clocks', 'streams', - ]) + ] + + if self._version >= 201: + known_props.append('$log-levels') + + unk_prop = _get_first_unknown_prop(metadata_node, known_props) if unk_prop: add = '' diff --git a/doc/examples/linux-fs-simple/config.yaml b/doc/examples/linux-fs-simple/config.yaml index 1d8a87c..19109e7 100644 --- a/doc/examples/linux-fs-simple/config.yaml +++ b/doc/examples/linux-fs-simple/config.yaml @@ -57,7 +57,7 @@ metadata: - READY - RUNNING - WAITING - log-levels: + $log-levels: EMERG: 0 ALERT: 1 CRIT: 2 diff --git a/doc/examples/parallella/config.yaml b/doc/examples/parallella/config.yaml index 13585a2..63b7064 100644 --- a/doc/examples/parallella/config.yaml +++ b/doc/examples/parallella/config.yaml @@ -62,7 +62,7 @@ metadata: - WAITING str: class: string - log-levels: + $log-levels: EMERG: 0 ALERT: 1 CRIT: 2 -- 2.34.1