1 /* $Id: main.c,v 1.95 2002-08-29 08:47:08 adam Exp $
2 Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
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>
38 #include <yaz/data1.h>
43 int main (int argc, char **argv)
50 int disableCommit = 0;
53 struct tms tms1, tms2;
54 struct timeval start_time, end_time;
60 struct recordGroup rGroupDef;
68 sprintf(nbuf, "%.40s(%d)", *argv, getpid());
69 yaz_log_init_prefix (nbuf);
73 gettimeofday(&start_time, 0);
76 rGroupDef.groupName = NULL;
77 rGroupDef.databaseName = NULL;
78 rGroupDef.path = NULL;
79 rGroupDef.recordId = NULL;
80 rGroupDef.recordType = NULL;
81 rGroupDef.flagStoreData = -1;
82 rGroupDef.flagStoreKeys = -1;
84 rGroupDef.databaseNamePath = 0;
85 rGroupDef.explainDatabase = 0;
86 rGroupDef.fileVerboseLimit = 100000;
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 " commit Commit changes\n"
97 " clean Clean shadow files\n"
99 " -t <type> Index files as <type> (grs or text).\n"
100 " -c <config> Read configuration file <config>.\n"
101 " -g <group> Index files according to group settings.\n"
102 " -d <database> Records belong to Z39.50 database <database>.\n"
103 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
104 " -n Don't use shadow system.\n"
105 " -s Show analysis on stdout, but do no work.\n"
106 " -v <level> Set logging to <level>.\n"
107 " -l <file> Write log to <file>.\n"
108 " -f <n> Display information for the first <n> records.\n"
109 " -V Show version.\n", *argv
113 while ((ret = options ("sVt:c:g:d:m:v:nf:l:"
114 , argv, argc, &arg)) != -2)
118 if(cmd == 0) /* command */
122 const char *config = configName ? configName : "zebra.cfg";
123 logf (LOG_LOG, "Zebra version %s %s",
124 ZEBRAVER, ZEBRADATE);
125 zs = zebra_start (config);
128 yaz_log (LOG_FATAL, "Cannot read config %s", config);
131 zh = zebra_open (zs);
133 zebra_shadow_enable (zh, 0);
135 if (rGroupDef.databaseName)
137 if (zebra_select_database (zh, rGroupDef.databaseName))
142 if (zebra_select_database (zh, "Default"))
146 if (!strcmp (arg, "update"))
148 else if (!strcmp (arg, "update1"))
150 else if (!strcmp (arg, "update2"))
152 else if (!strcmp (arg, "dump"))
154 else if (!strcmp (arg, "del") || !strcmp(arg, "delete"))
156 else if (!strcmp (arg, "init"))
160 else if (!strcmp (arg, "commit"))
164 else if (!strcmp (arg, "clean"))
168 else if (!strcmp (arg, "stat") || !strcmp (arg, "status"))
170 zebra_register_statistics (zh,0);
172 else if (!strcmp (arg, "dump") || !strcmp (arg, "dumpdict"))
174 zebra_register_statistics (zh,1);
176 else if (!strcmp (arg, "compact"))
182 logf (LOG_FATAL, "unknown command: %s", arg);
188 rGroupDef.path = arg;
189 zebra_set_group (zh, &rGroupDef);
190 zebra_begin_trans (zh);
195 zebra_repository_update (zh);
198 zebra_repository_delete (zh);
201 logf (LOG_LOG, "dumping %s", rGroupDef.path);
202 zebra_repository_show (zh);
209 zebra_end_trans (zh);
210 log_event_end (NULL, NULL);
215 fprintf (stderr, "Zebra %s %s\n", ZEBRAVER, ZEBRADATE);
216 fprintf (stderr, " (C) 1994-2002, Index Data ApS\n");
219 fprintf (stderr, " WIN32 Debug\n");
221 fprintf (stderr, " WIN32 Release\n");
225 fprintf (stderr, "libbzip2\n"
226 " (C) 1996-1999 Julian R Seward. All rights reserved.\n");
230 yaz_log_init_level (yaz_log_mask_str(arg));
232 yaz_log_init_file (arg);
234 mem_max = 1024*1024*atoi(arg);
236 rGroupDef.databaseName = arg;
238 rGroupDef.flagRw = 0;
240 rGroupDef.groupName = arg;
242 rGroupDef.fileVerboseLimit = atoi(arg);
246 rGroupDef.recordType = arg;
250 logf (LOG_WARN, "unknown option '-%s'", arg);
255 gettimeofday(&end_time, 0);
256 usec = (end_time.tv_sec - start_time.tv_sec) * 1000000L +
257 end_time.tv_usec - start_time.tv_usec;
259 yaz_log (LOG_LOG, "zebraidx times: %5.2f %5.2f %5.2f",
260 (double) usec / 1000000.0,
261 (double) (tms2.tms_utime - tms1.tms_utime)/100,
262 (double) (tms2.tms_stime - tms1.tms_stime)/100);