1 /* $Id: main.c,v 1.124 2005-05-11 12:39:36 adam Exp $
2 Copyright (C) 1995-2005
5 This file is part of the Zebra server.
7 Zebra is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with Zebra; see the file LICENSE.zebra. If not, write to the
19 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
35 #include <sys/times.h>
39 #include <yaz/options.h>
40 #include <idzebra/api.h>
44 static void filter_cb(void *cd, const char *name)
49 static void show_filters(ZebraService zs)
51 zebra_filter_info(zs, 0, filter_cb);
54 int main (int argc, char **argv)
61 int enable_commit = 1;
63 Res res = res_open(0, 0, 0);
67 struct tms tms1, tms2;
68 struct timeval start_time, end_time;
81 sprintf(nbuf, "%.40s(%ld)", *argv, (long) getpid());
82 yaz_log_init_prefix (nbuf);
86 gettimeofday(&start_time, 0);
91 fprintf (stderr, "%s [options] command <dir> ...\n"
93 " update <dir> Update index with files below <dir>.\n"
94 " If <dir> is empty filenames are read from stdin.\n"
95 " delete <dir> Delete index with files below <dir>.\n"
96 " create <db> Create database <db>\n"
97 " drop <db> Drop database <db>\n"
98 " commit Commit changes\n"
99 " clean Clean shadow files\n"
101 " -t <type> Index files as <type> (grs or text).\n"
102 " -c <config> Read configuration file <config>.\n"
103 " -g <group> Index files according to group settings.\n"
104 " -d <database> Records belong to Z39.50 database <database>.\n"
105 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
106 " -n Don't use shadow system.\n"
107 " -s Show analysis on stdout, but do no work.\n"
108 " -v <level> Set logging to <level>.\n"
109 " -l <file> Write log to <file>.\n"
110 " -L Don't follow symbolic links.\n"
111 " -f <n> Display information for the first <n> records.\n"
112 " -V Show version.\n", *argv
116 while ((ret = options("sVt:c:g:d:m:v:nf:l:L", argv, argc, &arg)) != -2)
120 if(cmd == 0) /* command */
124 const char *config = configName ? configName : "zebra.cfg";
125 yaz_log (YLOG_LOG, "Zebra version %s %s",
126 ZEBRAVER, ZEBRADATE);
127 zs = zebra_start_res (config, 0, res);
130 yaz_log (YLOG_FATAL, "Cannot read config %s", config);
133 zh = zebra_open (zs);
134 zebra_shadow_enable (zh, enable_commit);
138 zebra_select_database (zh, database) == ZEBRA_FAIL)
140 yaz_log(YLOG_FATAL, "Could not select database %s "
142 database, zebra_errCode(zh) );
145 if (!strcmp (arg, "update"))
147 else if (!strcmp (arg, "update1"))
149 else if (!strcmp (arg, "update2"))
151 else if (!strcmp (arg, "dump"))
153 else if (!strcmp (arg, "del") || !strcmp(arg, "delete"))
155 else if (!strcmp (arg, "init"))
159 else if (!strcmp(arg, "drop"))
163 else if (!strcmp(arg, "create"))
167 else if (!strcmp (arg, "commit"))
171 else if (!strcmp (arg, "clean"))
175 else if (!strcmp (arg, "stat") || !strcmp (arg, "status"))
177 zebra_register_statistics (zh,0);
179 else if (!strcmp (arg, "dumpdict"))
181 zebra_register_statistics (zh,1);
183 else if (!strcmp (arg, "compact"))
187 else if (!strcmp (arg, "filters"))
193 yaz_log (YLOG_FATAL, "unknown command: %s", arg);
199 ZEBRA_RES res = ZEBRA_OK;
203 if (zebra_begin_trans (zh, 1) != ZEBRA_OK)
209 res = zebra_repository_update (zh, arg);
212 res = zebra_repository_delete (zh, arg);
215 res = zebra_repository_show (zh, arg);
219 res = zebra_create_database(zh, arg);
222 res = zebra_drop_database(zh, arg);
229 yaz_log(YLOG_WARN, "Operation failed");
232 log_event_end (NULL, NULL);
237 printf("Zebra %s %s\n", ZEBRAVER, ZEBRADATE);
238 printf(" (C) 1994-2005, Index Data ApS\n");
241 printf(" WIN32 Debug\n");
243 printf(" WIN32 Release\n");
247 printf("Using: libbzip2, (C) 1996-1999 Julian R Seward. All rights reserved.\n");
251 yaz_log_init_level (yaz_log_mask_str(arg));
253 yaz_log_init_file (arg);
255 res_set(res, "memMax", arg);
259 res_set(res, "openRW", "0");
261 res_set(res, "group", arg);
263 res_set(res, "fileVerboseLimit", arg);
267 res_set(res, "recordType", arg);
271 res_set(res, "followLinks", "0");
273 yaz_log (YLOG_WARN, "unknown option '-%s'", arg);
277 zebra_end_trans (zh);
284 gettimeofday(&end_time, 0);
285 usec = (end_time.tv_sec - start_time.tv_sec) * 1000000.0 +
286 end_time.tv_usec - start_time.tv_usec;
288 yaz_log (YLOG_LOG, "zebraidx times: %5.2f %5.2f %5.2f",
290 (double) (tms2.tms_utime - tms1.tms_utime)/100,
291 (double) (tms2.tms_stime - tms1.tms_stime)/100);