[2/4] lib: klog: load labels from json data file rather than auto-generate

Submitted by Colin King on Oct. 31, 2012, 2:11 p.m.

Details

Message ID 1351692684-15611-3-git-send-email-colin.king@canonical.com
State Accepted
Headers show

Commit Message

Colin King Oct. 31, 2012, 2:11 p.m.
From: Colin Ian King <colin.king@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@canonical.com>
---
 src/lib/src/fwts_klog.c |   38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

Comments

Alex Hung Nov. 5, 2012, 9:29 a.m.
On 10/31/2012 10:11 PM, Colin King wrote:
> From: Colin Ian King <colin.king@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@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@canonical.com>
Keng-Yu Lin Nov. 6, 2012, 6:32 a.m.
On Wed, Oct 31, 2012 at 10:11 PM, Colin King <colin.king@canonical.com> wrote:
> From: Colin Ian King <colin.king@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@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);
> --
> 1.7.10.4
>
Acked-by: Keng-Yu Lin <kengyu@canonical.com>

Patch hide | download patch | download mbox

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);