1 /* $Id: main.c,v 1.98 2002-10-04 18:15:09 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;
54 struct tms tms1, tms2;
55 struct timeval start_time, end_time;
61 struct recordGroup rGroupDef;
69 sprintf(nbuf, "%.40s(%d)", *argv, getpid());
70 yaz_log_init_prefix (nbuf);
74 gettimeofday(&start_time, 0);
77 rGroupDef.groupName = NULL;
78 rGroupDef.databaseName = NULL;
79 rGroupDef.path = NULL;
80 rGroupDef.recordId = NULL;
81 rGroupDef.recordType = NULL;
82 rGroupDef.flagStoreData = -1;
83 rGroupDef.flagStoreKeys = -1;
85 rGroupDef.databaseNamePath = 0;
86 rGroupDef.explainDatabase = 0;
87 rGroupDef.fileVerboseLimit = 100000;
88 rGroupDef.followLinks = -1;
93 fprintf (stderr, "%s [options] command <dir> ...\n"
95 " update <dir> Update index with files below <dir>.\n"
96 " If <dir> is empty filenames are read from stdin.\n"
97 " delete <dir> Delete index with files below <dir>.\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"
117 , argv, argc, &arg)) != -2)
121 if(cmd == 0) /* command */
125 const char *config = configName ? configName : "zebra.cfg";
126 logf (LOG_LOG, "Zebra version %s %s",
127 ZEBRAVER, ZEBRADATE);
128 zs = zebra_start (config);
131 yaz_log (LOG_FATAL, "Cannot read config %s", config);
134 zh = zebra_open (zs);
136 zebra_shadow_enable (zh, 0);
138 if (rGroupDef.databaseName)
140 if (zebra_select_database (zh, rGroupDef.databaseName))
145 if (zebra_select_database (zh, "Default"))
149 if (!strcmp (arg, "update"))
151 else if (!strcmp (arg, "update1"))
153 else if (!strcmp (arg, "update2"))
155 else if (!strcmp (arg, "dump"))
157 else if (!strcmp (arg, "del") || !strcmp(arg, "delete"))
159 else if (!strcmp (arg, "init"))
163 else if (!strcmp (arg, "commit"))
167 else if (!strcmp (arg, "clean"))
171 else if (!strcmp (arg, "stat") || !strcmp (arg, "status"))
173 zebra_register_statistics (zh,0);
175 else if (!strcmp (arg, "dump") || !strcmp (arg, "dumpdict"))
177 zebra_register_statistics (zh,1);
179 else if (!strcmp (arg, "compact"))
185 logf (LOG_FATAL, "unknown command: %s", arg);
191 rGroupDef.path = arg;
192 zebra_set_group (zh, &rGroupDef);
196 zebra_begin_trans (zh);
202 zebra_repository_update (zh);
205 zebra_repository_delete (zh);
208 logf (LOG_LOG, "dumping %s", rGroupDef.path);
209 zebra_repository_show (zh);
215 log_event_end (NULL, NULL);
220 printf("Zebra %s %s\n", ZEBRAVER, ZEBRADATE);
221 printf(" (C) 1994-2002, Index Data ApS\n");
224 printf(" WIN32 Debug\n");
226 printf(" WIN32 Release\n");
231 " (C) 1996-1999 Julian R Seward. All rights reserved.\n");
235 yaz_log_init_level (yaz_log_mask_str(arg));
237 yaz_log_init_file (arg);
239 mem_max = 1024*1024*atoi(arg);
241 rGroupDef.databaseName = arg;
243 rGroupDef.flagRw = 0;
245 rGroupDef.groupName = arg;
247 rGroupDef.fileVerboseLimit = atoi(arg);
251 rGroupDef.recordType = arg;
255 rGroupDef.followLinks = 0;
257 logf (LOG_WARN, "unknown option '-%s'", arg);
261 zebra_end_trans (zh);
268 gettimeofday(&end_time, 0);
269 usec = (end_time.tv_sec - start_time.tv_sec) * 1000000L +
270 end_time.tv_usec - start_time.tv_usec;
272 yaz_log (LOG_LOG, "zebraidx times: %5.2f %5.2f %5.2f",
273 (double) usec / 1000000.0,
274 (double) (tms2.tms_utime - tms1.tms_utime)/100,
275 (double) (tms2.tms_stime - tms1.tms_stime)/100);