1 /* $Id: zebraidx.c,v 1.2 2006-12-05 09:26:37 adam Exp $
2 Copyright (C) 1995-2006
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 this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
38 #include <sys/times.h>
42 #include <yaz/options.h>
43 #include <idzebra/api.h>
47 static void filter_cb(void *cd, const char *name)
52 static void show_filters(ZebraService zs)
54 zebra_filter_info(zs, 0, filter_cb);
57 int main (int argc, char **argv)
64 int enable_commit = 1;
66 Res res = res_open(0, 0);
67 Res default_res = res_open(0, 0);
71 struct tms tms1, tms2;
75 struct timeval start_time, end_time;
87 sprintf(nbuf, "%.40s(%ld)", *argv, (long) getpid());
88 yaz_log_init_prefix (nbuf);
94 gettimeofday(&start_time, 0);
99 fprintf (stderr, "%s [options] command <dir> ...\n"
101 " update <dir> Update index with files below <dir>.\n"
102 " If <dir> is empty filenames are read from stdin.\n"
103 " delete <dir> Delete index with files below <dir>.\n"
104 " create <db> Create database <db>\n"
105 " drop <db> Drop database <db>\n"
106 " commit Commit changes\n"
107 " clean Clean shadow files\n"
109 " -t <type> Index files as <type> (grs or text).\n"
110 " -c <config> Read configuration file <config>.\n"
111 " -g <group> Index files according to group settings.\n"
112 " -d <database> Records belong to Z39.50 database <database>.\n"
113 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
114 " -n Don't use shadow system.\n"
115 " -s Show analysis on stdout, but do no work.\n"
116 " -v <level> Set logging to <level>.\n"
117 " -l <file> Write log to <file>.\n"
118 " -L Don't follow symbolic links.\n"
119 " -f <n> Display information for the first <n> records.\n"
120 " -V Show version.\n", *argv
124 res_set(default_res, "profilePath", DEFAULT_PROFILE_PATH);
125 res_set(default_res, "modulePath", DEFAULT_MODULE_PATH);
126 while ((ret = options("sVt:c:g:d:m:v:nf:l:L", argv, argc, &arg)) != -2)
130 if(cmd == 0) /* command */
134 const char *config = configName ? configName : "zebra.cfg";
135 zs = zebra_start_res(config, default_res, res);
138 yaz_log (YLOG_FATAL, "Cannot read config %s", config);
141 zh = zebra_open (zs, 0);
142 zebra_shadow_enable (zh, enable_commit);
146 zebra_select_database (zh, database) == ZEBRA_FAIL)
148 yaz_log(YLOG_FATAL, "Could not select database %s "
150 database, zebra_errCode(zh) );
153 if (!strcmp (arg, "update"))
155 else if (!strcmp (arg, "update1"))
157 else if (!strcmp (arg, "update2"))
159 else if (!strcmp (arg, "dump"))
161 else if (!strcmp (arg, "del") || !strcmp(arg, "delete"))
163 else if (!strcmp (arg, "init"))
167 else if (!strcmp(arg, "drop"))
171 else if (!strcmp(arg, "create"))
175 else if (!strcmp (arg, "commit"))
179 else if (!strcmp (arg, "clean"))
183 else if (!strcmp (arg, "stat") || !strcmp (arg, "status"))
185 zebra_register_statistics (zh,0);
187 else if (!strcmp (arg, "dumpdict"))
189 zebra_register_statistics (zh,1);
191 else if (!strcmp (arg, "compact"))
195 else if (!strcmp (arg, "filters"))
201 yaz_log (YLOG_FATAL, "unknown command: %s", arg);
207 ZEBRA_RES res = ZEBRA_OK;
211 if (zebra_begin_trans (zh, 1) != ZEBRA_OK)
217 res = zebra_repository_update (zh, arg);
220 res = zebra_repository_delete (zh, arg);
223 res = zebra_repository_show (zh, arg);
227 res = zebra_create_database(zh, arg);
230 res = zebra_drop_database(zh, arg);
237 const char *add = zebra_errAdd(zh);
238 yaz_log(YLOG_FATAL, "Operation failed: %s %s",
239 zebra_errString(zh), add ? add : "");
242 if (zebra_end_trans (zh) != ZEBRA_OK)
243 yaz_log (YLOG_WARN, "zebra_end_trans failed");
250 log_event_end (NULL, NULL);
255 printf("Zebra %s %s\n", ZEBRAVER, ZEBRADATE);
256 printf(" (C) 1994-2006, Index Data ApS\n");
259 printf(" WIN32 Debug\n");
261 printf(" WIN32 Release\n");
265 printf("Using: libbzip2, (C) 1996-1999 Julian R Seward. All rights reserved.\n");
269 yaz_log_init_level (yaz_log_mask_str(arg));
271 yaz_log_init_file (arg);
273 res_set(res, "memMax", arg);
277 res_set(res, "openRW", "0");
279 res_set(res, "group", arg);
281 res_set(res, "fileVerboseLimit", arg);
285 res_set(res, "recordType", arg);
289 res_set(res, "followLinks", "0");
291 yaz_log (YLOG_WARN, "unknown option '-%s'", arg);
295 if (zebra_end_trans (zh) != ZEBRA_OK)
296 yaz_log (YLOG_WARN, "zebra_end_trans failed");
304 gettimeofday(&end_time, 0);
305 usec = (end_time.tv_sec - start_time.tv_sec) * 1000000.0 +
306 end_time.tv_usec - start_time.tv_usec;
308 yaz_log (YLOG_LOG, "zebraidx times: %5.2f %5.2f %5.2f",
310 (double) (tms2.tms_utime - tms1.tms_utime)/100,
311 (double) (tms2.tms_stime - tms1.tms_stime)/100);
316 res_close(default_res);
325 * indent-tabs-mode: nil
327 * vim: shiftwidth=4 tabstop=8 expandtab