X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzebrash.c;h=469cf052fab3b00a827601994e85ec3d450b4d8d;hb=eb8857cfa2ceaa2635f14888b95d6f71b8def045;hp=37dbdb13011d0689fabed32879309eb6a97a945f;hpb=322abc688457f766fbcfe5598cd83a2fbc5d0c4c;p=idzebra-moved-to-github.git diff --git a/index/zebrash.c b/index/zebrash.c index 37dbdb1..469cf05 100644 --- a/index/zebrash.c +++ b/index/zebrash.c @@ -1,5 +1,5 @@ /* zebrash.c - command-line interface to zebra API - * $ID$ + * $Id: zebrash.c,v 1.6 2003-02-12 15:45:59 heikki Exp $ * * Copyrigth 2003 Index Data Aps * @@ -7,7 +7,7 @@ #include #include -#include +#include #include #if HAVE_READLINE_READLINE_H @@ -83,6 +83,8 @@ static int defargint( char *arg, int def ) sscanf(a," %i", &v); return v; } + +int onecommand( char *line, char *outbuff); /************************************** * Simple support commands @@ -126,7 +128,7 @@ static int defargint( char *arg, int def ) { if (!zs) strcat(outbuff,"zebra seems not to have been started, " - "stopping anyway"); + "stopping anyway\n"); zebra_stop(zs); zs=0; return 0; /* ok */ @@ -136,7 +138,7 @@ static int cmd_zebra_open( char *args[], char *outbuff) { if (!zs) strcat(outbuff,"zebra seems not to have been started, " - "trying anyway"); + "trying anyway\n"); zh=zebra_open(zs); return 0; /* ok */ } @@ -145,19 +147,24 @@ static int cmd_zebra_close( char *args[], char *outbuff) { if (!zh) strcat(outbuff,"Seems like you have not called zebra_open," - "trying anyway"); + "trying anyway\n"); zebra_close(zh); return 0; /* ok */ } static int cmd_quickstart( char *args[], char *outbuff) { - cmd_zebra_start(args,outbuff); - cmd_zebra_open(args,outbuff); - yaz_log_init_file("zebrash.log"); - yaz_log_init_prefix("ZebraSh"); - strcat(outbuff,"Started zebra, log in zebrash.log"); - return 0; /* ok */ + char tmp[128]; + onecommand("yaz_log_file zebrash.log",outbuff); + onecommand("yaz_log_prefix ZebraSh", outbuff); + sprintf(tmp, "yaz_log_level 0x%x", LOG_DEFAULT_LEVEL | LOG_APP); + onecommand(tmp,outbuff); + logf(LOG_APP,"quickstart"); + onecommand("zebra_start",outbuff); + onecommand("zebra_open",outbuff); + onecommand("select_database Default",outbuff); + strcat(outbuff,"ok\n"); + return 0; } /************************************** @@ -168,7 +175,7 @@ static int cmd_yaz_log_file( char *args[], char *outbuff) { char *fn = defarg(args[1],0); char tmp[255]; - sprintf(tmp, "sending yaz-log to %s ",fn); + sprintf(tmp, "sending yaz-log to %s\n",fn); strcat(outbuff, tmp); yaz_log_init_file(fn); return 0; /* ok */ @@ -178,7 +185,7 @@ static int cmd_yaz_log_level( char *args[], char *outbuff) { int lev = defargint(args[1],LOG_DEFAULT_LEVEL); char tmp[255]; - sprintf(tmp, "setting yaz-log to level %d (ox%x)",lev,lev); + sprintf(tmp, "setting yaz-log to level %d (ox%x)\n",lev,lev); strcat(outbuff, tmp); yaz_log_init_level(lev); return 0; /* ok */ @@ -188,7 +195,7 @@ static int cmd_yaz_log_prefix( char *args[], char *outbuff) { char *pref = defarg(args[1],"ZebraSh"); char tmp[255]; - sprintf(tmp, "setting yaz-log prefix to %s",pref); + sprintf(tmp, "setting yaz-log prefix to %s\n",pref); strcat(outbuff, tmp); yaz_log_init_prefix(pref); return 0; /* ok */ @@ -212,6 +219,61 @@ static int cmd_logf( char *args[], char *outbuff) return 0; /* ok */ } +/**************** + * Error handling + */ +static int cmd_err ( char *args[], char *outbuff) +{ + char tmp[MAX_OUT_BUFF]; + sprintf(tmp, "errCode: %d \nerrStr: %s\nerrAdd: %s \n", + zebra_errCode (zh), + zebra_errString (zh), + zebra_errAdd (zh) ); + strcat(outbuff, tmp); + return 0; /* ok */ +} +static int cmd_errcode ( char *args[], char *outbuff) +{ + char tmp[MAX_OUT_BUFF]; + sprintf(tmp, "errCode: %d \n", + zebra_errCode (zh)); + strcat(outbuff, tmp); + return 0; /* ok */ +} +static int cmd_errstr ( char *args[], char *outbuff) +{ + char tmp[MAX_OUT_BUFF]; + sprintf(tmp, "errStr: %s\n", + zebra_errString (zh)); + strcat(outbuff, tmp); + return 0; /* ok */ +} +static int cmd_erradd ( char *args[], char *outbuff) +{ + char tmp[MAX_OUT_BUFF]; + sprintf(tmp, "errAdd: %s \n", + zebra_errAdd (zh) ); + strcat(outbuff, tmp); + return 0; /* ok */ +} + +/************************************** + * Admin commands + */ + +static int cmd_init ( char *args[], char *outbuff) +{ + zebra_init(zh); + return 0; /* ok */ +} + +static int cmd_select_database ( char *args[], char *outbuff) +{ + char *db=args[1]; + if (!db) + db="Default"; + return zebra_select_database(zh, args[1]); +} /************************************** * Command table, parser, and help @@ -256,7 +318,7 @@ struct cmdstruct cmds[] = { "[filename]", "Directs the log to filename (or stderr)", cmd_yaz_log_file }, - { "yaz_log_file", + { "yaz_log_level", "[level]", "Sets the logging level (or returns to default)", cmd_yaz_log_level }, @@ -268,6 +330,28 @@ struct cmdstruct cmds[] = { "[level] text...", "writes an entry in the log", cmd_logf}, + + { "", "Error handling:","", 0}, + { "err", "", + "Displays zebra's error status (code, str, add)", + cmd_err}, + { "errcode", "", + "Displays zebra's error code", + cmd_errcode}, + { "errstr", "", + "Displays zebra's error string", + cmd_errstr}, + { "erradd", "", + "Displays zebra's additional error message", + cmd_erradd}, + + { "", "Admin:","", 0}, + { "init", "", + "Initializes the zebra database, destroying all data in it", + cmd_init}, + { "select_database", "basename", + "Selects a database", + cmd_select_database}, { "", "Misc:","", 0}, { "echo", "string", @@ -290,11 +374,13 @@ int onecommand( char *line, char *outbuff) char *args[MAX_NO_ARGS]; int n; char argbuf[MAX_ARG_LEN]; + int rc; + logf(LOG_APP,"%s",line); strncpy(argbuf,line, MAX_ARG_LEN-1); argbuf[MAX_ARG_LEN-1]='\0'; /* just to be sure */ n=split_args(argbuf, args); if (0==n) - return 0; /* no command on line, too bad */ + return -1; /* no command on line, too bad */ for (i=0;cmds[i].cmd;i++) if (0==strcmp(cmds[i].cmd, args[0])) { @@ -304,16 +390,19 @@ int onecommand( char *line, char *outbuff) args[0]=""; return ((cmds[i].testfunc)(args,outbuff)); } - sprintf (outbuff, "Unknown command '%s'. Try help",args[0] ); - return -1; + strcat(outbuff, "Unknown command '"); + strcat(outbuff,args[0] ); + strcat(outbuff,"'. Try help"); + logf(LOG_APP,"Unknown command"); + return -2; } static int cmd_help( char *args[], char *outbuff) { int i; char tmp[MAX_ARG_LEN]; - if (args[1]) - { /* help for a single command */ + if (args[1]) + { /* help for a single command */ for (i=0;cmds[i].cmd;i++) if (0==strcmp(cmds[i].cmd, args[1])) { @@ -360,9 +449,28 @@ int onecommand( char *line, char *outbuff) strcat(outbuff,tmp); } return 0; - } - +} +/* If Zebra reports an error after an operation, + * append it to the outbuff and log it */ +static void Zerrors ( char *outbuff) +{ + int ec; + char tmp[MAX_OUT_BUFF]; + if (!zh) + return ; + ec=zebra_errCode (zh); + if (ec) + { + sprintf(tmp, "Zebra error %d: %s, (%s)", + ec, zebra_errString (zh), + zebra_errAdd (zh) ); + strcat(outbuff, tmp); + strcat(outbuff, "\n"); + logf(LOG_APP, tmp); + } +} + /************************************** * The shell */ @@ -370,6 +478,7 @@ int onecommand( char *line, char *outbuff) void shell() { int rc=0; + char tmp[MAX_ARG_LEN]; while (rc!=-99) { char buf[MAX_ARG_LEN]; @@ -393,15 +502,25 @@ void shell() printf (PROMPT); fflush (stdout); if (!fgets (buf, MAX_ARG_LEN-1, stdin)) - break; + break; #endif outbuff[0]='\0'; rc=onecommand(buf, outbuff); + if (rc==0) + { + strcat(outbuff, "OK\n"); + logf(LOG_APP, "OK"); + } + else if (rc > 0) + { + sprintf(tmp, "command returned %d\n",rc); + strcat(outbuff,tmp); + } + Zerrors(outbuff); printf("%s\n", outbuff); - } - - } - + } /* while */ +} /* shell() */ + /************************************** * Main