ACK: [PATCH 2/4] lib: klog: load labels from json data file rather than auto-generate
Alex Hung
alex.hung at canonical.com
Mon Nov 5 09:29:42 UTC 2012
On 10/31/2012 10:11 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> To ensure we have consistent and well named log failure lables we
> should load them from the json klog data file rather than lazily
> try and automatically generate them based on some regex pattern.
> This leads to more readable labels which are then easily filterable.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/lib/src/fwts_klog.c | 38 ++++++++++++++++++++++++++++++--------
> 1 file changed, 30 insertions(+), 8 deletions(-)
>
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index 34e6c0f..445ae4b 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -284,13 +284,21 @@ static fwts_compare_mode fwts_klog_compare_mode_str_to_val(const char *str)
> * given a key, fetch the string value associated with this object
> * and report an error if it cannot be found.
> */
> -static const char *fwts_json_str(fwts_framework *fw, const char *table, int index, json_object *obj, const char *key)
> +static const char *fwts_json_str(
> + fwts_framework *fw,
> + const char *table,
> + int index,
> + json_object *obj,
> + const char *key,
> + bool log_error)
> {
> const char *str;
>
> str = json_object_get_string(json_object_object_get(obj, key));
> if (FWTS_JSON_ERROR(str)) {
> - fwts_log_error(fw, "Cannot fetch %s val from item %d, table %s.", key, index, table);
> + if (log_error)
> + fwts_log_error(fw, "Cannot fetch %s val from item %d, table %s.",
> + key, index, table);
> return NULL;
> }
> return str;
> @@ -355,22 +363,33 @@ static int fwts_klog_check(fwts_framework *fw,
> fwts_log_error(fw, "Cannot fetch %d item from table %s.", i, table);
> goto fail;
> }
> - if ((str = fwts_json_str(fw, table, i, obj, "compare_mode")) == NULL)
> + if ((str = fwts_json_str(fw, table, i, obj, "compare_mode", true)) == NULL)
> goto fail;
> patterns[i].compare_mode = fwts_klog_compare_mode_str_to_val(str);
>
> - if ((str = fwts_json_str(fw, table, i, obj, "log_level")) == NULL)
> + if ((str = fwts_json_str(fw, table, i, obj, "log_level", true)) == NULL)
> goto fail;
> patterns[i].level = fwts_log_str_to_level(str);
>
> - if ((str = fwts_json_str(fw, table, i, obj, "tag")) == NULL)
> + if ((str = fwts_json_str(fw, table, i, obj, "tag", true)) == NULL)
> goto fail;
> patterns[i].tag = fwts_tag_id_str_to_tag(str);
>
> - if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern")) == NULL)
> + if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL)
> goto fail;
>
> - if ((patterns[i].advice = fwts_json_str(fw, table, i, obj, "advice")) == NULL)
> + if ((patterns[i].advice = fwts_json_str(fw, table, i, obj, "advice", true)) == NULL)
> + goto fail;
> +
> + /* Labels appear in fwts 0.26.0, so are optional with older versions */
> + str = fwts_json_str(fw, table, i, obj, "label", false);
> + if (str) {
> + patterns[i].label = strdup(str);
> + } else {
> + /* Not specified, so automagically generate */
> + patterns[i].label = strdup(fwts_klog_unique_label(patterns[i].pattern));
> + }
> + if (patterns[i].label == NULL)
> goto fail;
>
> if ((patterns[i].re = pcre_compile(patterns[i].pattern, 0, &error, &erroffset, NULL)) == NULL) {
> @@ -388,11 +407,14 @@ static int fwts_klog_check(fwts_framework *fw,
> ret = fwts_klog_scan(fw, klog, fwts_klog_scan_patterns, progress, patterns, errors);
>
> fail:
> - for (i=0; i<n; i++)
> + for (i=0; i<n; i++) {
> if (patterns[i].re)
> pcre_free(patterns[i].re);
> if (patterns[i].extra)
> pcre_free(patterns[i].extra);
> + if (patterns[i].label)
> + free(patterns[i].label);
> + }
> free(patterns);
> fail_put:
> json_object_put(klog_objs);
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list