Forráskód Böngészése

Own error messages instead libyang standard ones

Serj Kalichev 1 éve
szülő
commit
149fd86efd
3 módosított fájl, 87 hozzáadás és 66 törlés
  1. 3 3
      src/plugin.c
  2. 3 0
      src/private.h
  3. 81 63
      src/syms.c

+ 3 - 3
src/plugin.c

@@ -13,9 +13,6 @@
 #include <klish/kplugin.h>
 #include <klish/kcontext.h>
 
-#include <sysrepo.h>
-#include <sysrepo/xpath.h>
-
 #include "private.h"
 
 
@@ -105,6 +102,9 @@ int kplugin_sysrepo_init(kcontext_t *context)
 
 	kplugin_set_udata(plugin, udata);
 
+	// Logging
+	srp_set_log_func();
+
 	return 0;
 }
 

+ 3 - 0
src/private.h

@@ -56,6 +56,9 @@ int srp_show_running(kcontext_t *context);
 int srp_diff(kcontext_t *context);
 int srp_deactivate(kcontext_t *context);
 
+// Logging
+int srp_set_log_func(void);
+
 // Plugin's user-data service functions
 pline_opts_t *srp_udata_opts(kcontext_t *context);
 faux_argv_t *srp_udata_path(kcontext_t *context);

+ 81 - 63
src/syms.c

@@ -23,6 +23,22 @@
 #include "pline.h"
 #include "private.h"
 
+#define ERRORMSG "Error: "
+
+
+static void _log(LY_LOG_LEVEL level, const char *msg, const char *path)
+{
+	fprintf(stderr, ERRORMSG "%s %s\n", msg, path ? path : "");
+}
+
+
+int srp_set_log_func(void)
+{
+	ly_set_log_clb(_log, 1);
+
+	return 0;
+}
+
 
 static faux_argv_t *param2argv(const faux_argv_t *cur_path,
 	const kpargv_t *pargv, const char *entry_name)
@@ -339,7 +355,7 @@ int srp_set(kcontext_t *context)
 	faux_argv_free(args);
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid set request\n");
+		fprintf(stderr, ERRORMSG "Invalid set request.\n");
 		ret = -1;
 		goto cleanup;
 	}
@@ -348,26 +364,28 @@ int srp_set(kcontext_t *context)
 	while ((expr = (pexpr_t *)faux_list_each(&iter))) {
 		if (!(expr->pat & PT_SET)) {
 			err_num++;
-			fprintf(stderr, "Illegal expression for set operation\n");
+			fprintf(stderr, ERRORMSG "Illegal expression for set operation.\n");
 			break;
 		}
 		if (sr_set_item_str(sess, expr->xpath, expr->value, NULL, 0) !=
 			SR_ERR_OK) {
 			err_num++;
-			fprintf(stderr, "Can't set data\n");
+			fprintf(stderr, ERRORMSG "Can't set data.\n");
 			break;
 		}
 	}
+	if (err_num > 0)
+		ret = -1;
+
+	if (!sr_has_changes(sess))
+		goto cleanup;
 
-	if (sr_has_changes(sess)) {
-		if (err_num > 0)
-			sr_discard_changes(sess);
-		else
-			sr_apply_changes(sess, 0);
+	if (err_num > 0) {
+		sr_discard_changes(sess);
+		goto cleanup;
 	}
 
-	if (err_num > 0)
-		ret = -1;
+	sr_apply_changes(sess, 0);
 
 cleanup:
 	pline_free(pline);
@@ -403,24 +421,24 @@ int srp_del(kcontext_t *context)
 	faux_argv_free(args);
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid 'del' request\n");
+		fprintf(stderr, ERRORMSG "Invalid 'del' request.\n");
 		goto err;
 	}
 
 	if (faux_list_len(pline->exprs) > 1) {
-		fprintf(stderr, "Can't delete more than one object\n");
+		fprintf(stderr, ERRORMSG "Can't delete more than one object.\n");
 		goto err;
 	}
 
 	expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs));
 
 	if (!(expr->pat & PT_DEL)) {
-		fprintf(stderr, "Illegal expression for 'del' operation\n");
+		fprintf(stderr, ERRORMSG "Illegal expression for 'del' operation.\n");
 		goto err;
 	}
 
 	if (sr_delete_item(sess, expr->xpath, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't delete data\n");
+		fprintf(stderr, ERRORMSG "Can't delete data.\n");
 		goto err;
 	}
 
@@ -460,24 +478,24 @@ int srp_edit(kcontext_t *context)
 	pline = pline_parse(sess, args, srp_udata_opts(context));
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid 'edit' request\n");
+		fprintf(stderr, ERRORMSG "Invalid 'edit' request.\n");
 		goto err;
 	}
 
 	if (faux_list_len(pline->exprs) > 1) {
-		fprintf(stderr, "Can't process more than one object\n");
+		fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 		goto err;
 	}
 
 	expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs));
 
 	if (!(expr->pat & PT_EDIT)) {
-		fprintf(stderr, "Illegal expression for 'edit' operation\n");
+		fprintf(stderr, ERRORMSG "Illegal expression for 'edit' operation.\n");
 		goto err;
 	}
 
 	if (sr_set_item_str(sess, expr->xpath, NULL, NULL, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't set editing data\n");
+		fprintf(stderr, ERRORMSG "Can't set editing data.\n");
 		goto err;
 	}
 	sr_apply_changes(sess, 0);
@@ -600,19 +618,19 @@ int srp_insert(kcontext_t *context)
 	faux_argv_free(insert_from);
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid 'from' expression\n");
+		fprintf(stderr, ERRORMSG "Invalid 'from' expression.\n");
 		goto err;
 	}
 
 	if (faux_list_len(pline->exprs) > 1) {
-		fprintf(stderr, "Can't process more than one object\n");
+		fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 		goto err;
 	}
 
 	expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs));
 
 	if (!(expr->pat & PT_INSERT)) {
-		fprintf(stderr, "Illegal 'from' expression for 'insert' operation\n");
+		fprintf(stderr, ERRORMSG "Illegal 'from' expression for 'insert' operation.\n");
 		goto err;
 	}
 
@@ -626,7 +644,7 @@ int srp_insert(kcontext_t *context)
 	else if (kpargv_find(pargv, "after"))
 		position = SR_MOVE_AFTER;
 	else {
-		fprintf(stderr, "Illegal 'position' argument\n");
+		fprintf(stderr, ERRORMSG "Illegal 'position' argument.\n");
 		goto err;
 	}
 
@@ -638,19 +656,19 @@ int srp_insert(kcontext_t *context)
 		faux_argv_free(insert_to);
 
 		if (pline_to->invalid) {
-			fprintf(stderr, "Invalid 'to' expression\n");
+			fprintf(stderr, ERRORMSG "Invalid 'to' expression.\n");
 			goto err;
 		}
 
 		if (faux_list_len(pline_to->exprs) > 1) {
-			fprintf(stderr, "Can't process more than one object\n");
+			fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 			goto err;
 		}
 
 		expr_to = (pexpr_t *)faux_list_data(faux_list_head(pline_to->exprs));
 
 		if (!(expr_to->pat & PT_INSERT)) {
-			fprintf(stderr, "Illegal 'to' expression for 'insert' operation\n");
+			fprintf(stderr, ERRORMSG "Illegal 'to' expression for 'insert' operation.\n");
 			goto err;
 		}
 
@@ -662,7 +680,7 @@ int srp_insert(kcontext_t *context)
 
 	if (sr_move_item(sess, expr->xpath, position,
 		list_keys, leaflist_value, NULL, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't move element\n");
+		fprintf(stderr, ERRORMSG "Can't move element.\n");
 		goto err;
 	}
 	sr_apply_changes(sess, 0);
@@ -686,18 +704,18 @@ int srp_verify(kcontext_t *context)
 	assert(context);
 
 	if (sr_connect(SR_CONN_DEFAULT, &conn)) {
-		fprintf(stderr, "Can't connect to data repository\n");
+		fprintf(stderr, ERRORMSG "Can't connect to data repository.\n");
 		return -1;
 	}
 
 	if (sr_session_start(conn, SRP_REPO_EDIT, &sess)) {
-		fprintf(stderr, "Can't connect to candidate data store\n");
+		fprintf(stderr, ERRORMSG "Can't connect to candidate data store.\n");
 		goto err;
 	}
 
 	// Validate candidate config
 	if (sr_validate(sess, NULL, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Invalid candidate configuration\n");
+		fprintf(stderr, ERRORMSG "Invalid candidate configuration.\n");
 		goto err;
 	}
 
@@ -718,32 +736,32 @@ int srp_commit(kcontext_t *context)
 	assert(context);
 
 	if (sr_connect(SR_CONN_DEFAULT, &conn)) {
-		fprintf(stderr, "Can't connect to data repository\n");
+		fprintf(stderr, ERRORMSG "Can't connect to data repository.\n");
 		return -1;
 	}
 
 	if (sr_session_start(conn, SRP_REPO_EDIT, &sess)) {
-		fprintf(stderr, "Can't connect to candidate data store\n");
+		fprintf(stderr, ERRORMSG "Can't connect to candidate data store.\n");
 		goto err;
 	}
 
 	// Copy candidate to running-config
 	if (sr_session_switch_ds(sess, SR_DS_RUNNING)) {
-		fprintf(stderr, "Can't connect to running-config data store\n");
+		fprintf(stderr, ERRORMSG "Can't connect to running-config data store.\n");
 		goto err;
 	}
 	if (sr_copy_config(sess, NULL, SRP_REPO_EDIT, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't commit to running-config\n");
+		fprintf(stderr, ERRORMSG "Can't commit to running-config.\n");
 		goto err;
 	}
 
 	// Copy running-config to startup-config
 	if (sr_session_switch_ds(sess, SR_DS_STARTUP)) {
-		fprintf(stderr, "Can't connect to startup-config data store\n");
+		fprintf(stderr, ERRORMSG "Can't connect to startup-config data store.\n");
 		goto err;
 	}
 	if (sr_copy_config(sess, NULL, SR_DS_RUNNING, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't store data to startup-config\n");
+		fprintf(stderr, ERRORMSG "Can't store data to startup-config.\n");
 		goto err;
 	}
 
@@ -764,17 +782,17 @@ int srp_rollback(kcontext_t *context)
 	assert(context);
 
 	if (sr_connect(SR_CONN_DEFAULT, &conn)) {
-		fprintf(stderr, "Can't connect to data repository\n");
+		fprintf(stderr, ERRORMSG "Can't connect to data repository.\n");
 		return -1;
 	}
 
 	// Copy running-config to candidate config
 	if (sr_session_start(conn, SRP_REPO_EDIT, &sess)) {
-		fprintf(stderr, "Can't connect to candidate data store\n");
+		fprintf(stderr, ERRORMSG "Can't connect to candidate data store.\n");
 		goto err;
 	}
 	if (sr_copy_config(sess, NULL, SR_DS_RUNNING, 0) != SR_ERR_OK) {
-		fprintf(stderr, "Can't rollback to running-config\n");
+		fprintf(stderr, ERRORMSG "Can't rollback to running-config.\n");
 		goto err;
 	}
 
@@ -814,23 +832,23 @@ int srp_show_xml(kcontext_t *context)
 	faux_argv_free(args);
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid 'show' request\n");
+		fprintf(stderr, ERRORMSG "Invalid 'show' request.\n");
 		goto err;
 	}
 
 	if (faux_list_len(pline->exprs) > 1) {
-		fprintf(stderr, "Can't process more than one object\n");
+		fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 		goto err;
 	}
 
 	expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs));
 	if (!(expr->pat & PT_EDIT)) {
-		fprintf(stderr, "Illegal expression for 'show' operation\n");
+		fprintf(stderr, ERRORMSG "Illegal expression for 'show' operation.\n");
 		goto err;
 	}
 
 	if (sr_get_subtree(sess, expr->xpath, 0, &data) != SR_ERR_OK) {
-		fprintf(stderr, "Can't get specified subtree\n");
+		fprintf(stderr, ERRORMSG "Can't get specified subtree.\n");
 		goto err;
 	}
 
@@ -887,25 +905,25 @@ static int show(kcontext_t *context, sr_datastore_t ds)
 		faux_argv_free(args);
 
 		if (pline->invalid) {
-			fprintf(stderr, "Invalid 'show' request\n");
+			fprintf(stderr, ERRORMSG "Invalid 'show' request.\n");
 			goto err;
 		}
 
 		if (faux_list_len(pline->exprs) > 1) {
-			fprintf(stderr, "Can't process more than one object\n");
+			fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 			goto err;
 		}
 
 		if (!(expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs)))) {
-			fprintf(stderr, "Can't get expression\n");
+			fprintf(stderr, ERRORMSG "Can't get expression.\n");
 			goto err;
 		}
 		if (!(expr->pat & PT_EDIT)) {
-			fprintf(stderr, "Illegal expression for 'show' operation\n");
+			fprintf(stderr, ERRORMSG "Illegal expression for 'show' operation.\n");
 			goto err;
 		}
 		if (!expr->xpath) {
-			fprintf(stderr, "Empty expression for 'show' operation\n");
+			fprintf(stderr, ERRORMSG "Empty expression for 'show' operation.\n");
 			goto err;
 		}
 		xpath = expr->xpath;
@@ -974,28 +992,28 @@ int srp_deactivate(kcontext_t *context)
 	faux_argv_free(args);
 
 	if (pline->invalid) {
-		fprintf(stderr, "Invalid 'show' request\n");
+		fprintf(stderr, ERRORMSG "Invalid 'show' request.\n");
 		goto err;
 	}
 
 	if (faux_list_len(pline->exprs) > 1) {
-		fprintf(stderr, "Can't process more than one object\n");
+		fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 		goto err;
 	}
 
 	expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs));
 	if (!(expr->pat & PT_DEL)) {
-		fprintf(stderr, "Illegal expression for 'show' operation\n");
+		fprintf(stderr, ERRORMSG "Illegal expression for 'show' operation.\n");
 		goto err;
 	}
 
 	if (sr_get_subtree(sess, expr->xpath, 0, &data) != SR_ERR_OK) {
-		fprintf(stderr, "Can't get specified subtree\n");
+		fprintf(stderr, ERRORMSG "Can't get specified subtree.\n");
 		goto err;
 	}
 	if (lyd_new_meta(LYD_CTX(data->tree), data->tree, NULL,
 		"junos-configuration-metadata:active", "false", 0, NULL)) {
-		fprintf(stderr, "Can't deactivate\n");
+		fprintf(stderr, ERRORMSG "Can't deactivate.\n");
 		goto err;
 	}
 
@@ -1004,16 +1022,16 @@ int srp_deactivate(kcontext_t *context)
 		printf("META\n");
 
 	if (sr_has_changes(sess))
-		fprintf(stderr, "Has changes\n");
+		fprintf(stderr, ERRORMSG "Has changes.\n");
 
 	if (sr_apply_changes(sess, 0)) {
-		fprintf(stderr, "Can't apply changes\n");
+		fprintf(stderr, ERRORMSG "Can't apply changes.\n");
 	}
 	sr_release_data(data);
 
 
 	if (sr_get_subtree(sess, expr->xpath, 0, &data) != SR_ERR_OK) {
-		fprintf(stderr, "Can't get specified subtree\n");
+		fprintf(stderr, ERRORMSG "Can't get specified subtree.\n");
 		goto err;
 	}
 
@@ -1070,25 +1088,25 @@ int srp_diff(kcontext_t *context)
 		faux_argv_free(args);
 
 		if (pline->invalid) {
-			fprintf(stderr, "Invalid 'show' request\n");
+			fprintf(stderr, ERRORMSG "Invalid 'show' request.\n");
 			goto err;
 		}
 
 		if (faux_list_len(pline->exprs) > 1) {
-			fprintf(stderr, "Can't process more than one object\n");
+			fprintf(stderr, ERRORMSG "Can't process more than one object.\n");
 			goto err;
 		}
 
 		if (!(expr = (pexpr_t *)faux_list_data(faux_list_head(pline->exprs)))) {
-			fprintf(stderr, "Can't get expression\n");
+			fprintf(stderr, ERRORMSG "Can't get expression.\n");
 			goto err;
 		}
 		if (!(expr->pat & PT_EDIT)) {
-			fprintf(stderr, "Illegal expression for 'show' operation\n");
+			fprintf(stderr, ERRORMSG "Illegal expression for 'show' operation.\n");
 			goto err;
 		}
 		if (!expr->xpath) {
-			fprintf(stderr, "Empty expression for 'show' operation\n");
+			fprintf(stderr, ERRORMSG "Empty expression for 'show' operation.\n");
 			goto err;
 		}
 		xpath = expr->xpath;
@@ -1098,16 +1116,16 @@ int srp_diff(kcontext_t *context)
 		xpath = "/*";
 
 	if (sr_get_data(sess1, xpath, 0, 0, 0, &data1) != SR_ERR_OK) {
-		fprintf(stderr, "Can't get specified subtree\n");
+		fprintf(stderr, ERRORMSG "Can't get specified subtree.\n");
 		goto err;
 	}
 	if (sr_get_data(sess2, xpath, 0, 0, 0, &data2) != SR_ERR_OK) {
-		fprintf(stderr, "Can't get specified subtree\n");
+		fprintf(stderr, ERRORMSG "Can't get specified subtree.\n");
 		goto err;
 	}
 
 	if (lyd_diff_siblings(data1->tree, data2->tree, 0, &diff) != LY_SUCCESS) {
-		fprintf(stderr, "Can't generate diff\n");
+		fprintf(stderr, ERRORMSG "Can't generate diff.\n");
 		goto err;
 	}