1 /* $Id: main.c,v 1.96 2002-09-03 11:44:54 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;
87 rGroupDef.followLinks = -1;
92 fprintf (stderr, "%s [options] command <dir> ...\n"
94 " update <dir> Update index with files below <dir>.\n"
95 " If <dir> is empty filenames are read from stdin.\n"
96 " delete <dir> Delete index with files below <dir>.\n"
97 " commit Commit changes\n"
98 " clean Clean shadow files\n"
100 " -t <type> Index files as <type> (grs or text).\n"
101 " -c <config> Read configuration file <config>.\n"
102 " -g <group> Index files according to group settings.\n"
103 " -d <database> Records belong to Z39.50 database <database>.\n"
104 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
105 " -n Don't use shadow system.\n"
106 " -s Show analysis on stdout, but do no work.\n"
107 " -v <level> Set logging to <level>.\n"
108 " -l <file> Write log to <file>.\n"
109 " -L Don't follow symbolic links.\n"
110 " -f <n> Display information for the first <n> records.\n"
111 " -V Show version.\n", *argv
115 while ((ret = options ("sVt:c:g:d:m:v:nf:l:L"
116 , argv, argc, &arg)) != -2)
120 if(cmd == 0) /* command */
124 const char *config = configName ? configName : "zebra.cfg";
125 logf (LOG_LOG, "Zebra version %s %s",
126 ZEBRAVER, ZEBRADATE);
127 zs = zebra_start (config);
130 yaz_log (LOG_FATAL, "Cannot read config %s", config);
133 zh = zebra_open (zs);
135 zebra_shadow_enable (zh, 0);
137 if (rGroupDef.databaseName)
139 if (zebra_select_database (zh, rGroupDef.databaseName))
144 if (zebra_select_database (zh, "Default"))
148 if (!strcmp (arg, "update"))
150 else if (!strcmp (arg, "update1"))
152 else if (!strcmp (arg, "update2"))
154 else if (!strcmp (arg, "dump"))
156 else if (!strcmp (arg, "del") || !strcmp(arg, "delete"))
158 else if (!strcmp (arg, "init"))
162 else if (!strcmp (arg, "commit"))
166 else if (!strcmp (arg, "clean"))
170 else if (!strcmp (arg, "stat") || !strcmp (arg, "status"))
172 zebra_register_statistics (zh,0);
174 else if (!strcmp (arg, "dump") || !strcmp (arg, "dumpdict"))
176 zebra_register_statistics (zh,1);
178 else if (!strcmp (arg, "compact"))
184 logf (LOG_FATAL, "unknown command: %s", arg);
190 rGroupDef.path = arg;
191 zebra_set_group (zh, &rGroupDef);
192 zebra_begin_trans (zh);
197 zebra_repository_update (zh);
200 zebra_repository_delete (zh);
203 logf (LOG_LOG, "dumping %s", rGroupDef.path);
204 zebra_repository_show (zh);
211 zebra_end_trans (zh);
212 log_event_end (NULL, NULL);
217 fprintf (stderr, "Zebra %s %s\n", ZEBRAVER, ZEBRADATE);
218 fprintf (stderr, " (C) 1994-2002, Index Data ApS\n");
221 fprintf (stderr, " WIN32 Debug\n");
223 fprintf (stderr, " WIN32 Release\n");
227 fprintf (stderr, "libbzip2\n"
228 " (C) 1996-1999 Julian R Seward. All rights reserved.\n");
232 yaz_log_init_level (yaz_log_mask_str(arg));
234 yaz_log_init_file (arg);
236 mem_max = 1024*1024*atoi(arg);
238 rGroupDef.databaseName = arg;
240 rGroupDef.flagRw = 0;
242 rGroupDef.groupName = arg;
244 rGroupDef.fileVerboseLimit = atoi(arg);
248 rGroupDef.recordType = arg;
252 rGroupDef.followLinks = 0;
254 logf (LOG_WARN, "unknown option '-%s'", arg);
259 gettimeofday(&end_time, 0);
260 usec = (end_time.tv_sec - start_time.tv_sec) * 1000000L +
261 end_time.tv_usec - start_time.tv_usec;
263 yaz_log (LOG_LOG, "zebraidx times: %5.2f %5.2f %5.2f",
264 (double) usec / 1000000.0,
265 (double) (tms2.tms_utime - tms1.tms_utime)/100,
266 (double) (tms2.tms_stime - tms1.tms_stime)/100);