-/*
- * $Id: zoom-benchmark.c,v 1.15 2006-10-04 16:59:35 mike Exp $
- *
- * Asynchronous multi-target client doing search and piggyback retrieval
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2013 Index Data
+ * See the file LICENSE for details.
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <ctype.h>
#include <sys/time.h>
#include <yaz/xmalloc.h>
#include <yaz/options.h>
#include <yaz/zoom.h>
-
/* naming events */
-static char* zoom_events[10];
+static char* zoom_events[ZOOM_EVENT_MAX+1];
/* re-sorting event numbers to progress numbers */
-static int zoom_progress[10];
+static int zoom_progress[ZOOM_EVENT_MAX+1];
/* commando line parameters */
-static struct parameters_t {
+static struct parameters_t {
char host[1024];
char query[1024];
int progress[4096];
int gnuplot;
} parameters;
-struct event_line_t
+struct event_line_t
{
int connection;
long time_sec;
void print_event_line(struct event_line_t *pel)
{
printf ("%d\t%ld.%06ld\t%d\t%d\t%s\t%d\t%s\n",
- pel->connection, pel->time_sec, pel->time_usec,
+ pel->connection, pel->time_sec, pel->time_usec,
pel->progress,
- pel->event, pel->zoom_event,
+ pel->event, pel->zoom_event,
pel->error, pel->errmsg);
}
elc[ielc] += 1;
}
-void print_events(int *elc, struct event_line_t *els,
+void print_events(int *elc, struct event_line_t *els,
int connections){
int i;
int j;
for (i = 0; i < 4096; i++){
parameters.progress[i] = 0;
}
-
+
}
-
-struct time_type
+
+struct time_type
{
struct timeval now;
struct timeval then;
}
-void read_params(int argc, char **argv, struct parameters_t *p_parameters){
+void read_params(int argc, char **argv, struct parameters_t *p_parameters){
char *arg;
int ret;
while ((ret = options("h:q:c:t:p:bgn:", argv, argc, &arg)) != -2)
print_option_error();
}
}
-
+
if(0){
printf("zoom-benchmark\n");
printf(" host: %s \n", p_parameters->host);
read_params(argc, argv, ¶meters);
- z = xmalloc(sizeof(*z) * parameters.concurrent);
- r = xmalloc(sizeof(*r) * parameters.concurrent);
- elc = xmalloc(sizeof(*elc) * parameters.concurrent * parameters.repeat);
- els = xmalloc(sizeof(*els)
- * parameters.concurrent * parameters.repeat * 10);
+ z = (ZOOM_connection *) xmalloc(sizeof(*z) * parameters.concurrent);
+ r = (ZOOM_resultset *) xmalloc(sizeof(*r) * parameters.concurrent);
+ elc = (int *) xmalloc(sizeof(*elc) * parameters.concurrent * parameters.repeat);
+ els = (struct event_line_t *) xmalloc(
+ sizeof(*els) * parameters.concurrent * parameters.repeat * 10);
o = ZOOM_options_create();
/* async mode */
ZOOM_options_set (o, "preferredRecordSyntax", "usmarc");
ZOOM_options_set (o, "elementSetName", "F");
}
-
+
time_init(&time);
/* repeat loop */
for (k = 0; k < parameters.repeat; k++){
/* create connection - pass options (they are the same for all) */
z[i] = ZOOM_connection_create(o);
-
+
/* connect and init */
ZOOM_connection_connect(z[i], parameters.host, 0);
}
r[i] = ZOOM_connection_search_pqf (z[i], parameters.query);
/* network I/O. pass number of connections and array of connections */
- while ((i = ZOOM_event (parameters.concurrent, z))){
+ while ((i = ZOOM_event (parameters.concurrent, z))){
int event = ZOOM_connection_last_event(z[i-1]);
const char *errmsg;
const char *addinfo;
int error = 0;
- int progress = zoom_progress[event];
-
+ //int progress = zoom_progress[event];
+
if (event == ZOOM_EVENT_SEND_DATA || event == ZOOM_EVENT_RECV_DATA)
continue;
/* updating events and event list */
error = ZOOM_connection_error(z[i-1] , &errmsg, &addinfo);
if (error)
- parameters.progress[i] = -progress;
+ parameters.progress[i] = zoom_progress[ZOOM_EVENT_UNKNOWN];
+ //parameters.progress[i] = zoom_progress[ZOOM_EVENT_NONE];
+ else if (event == ZOOM_EVENT_CONNECT)
+ parameters.progress[i] = zoom_progress[event];
else
+ //parameters.progress[i] = zoom_progress[event];
parameters.progress[i] += 1;
-
+
update_events(elc, els,
- k, i-1,
- time_sec(&time), time_usec(&time),
+ k, i-1,
+ time_sec(&time), time_usec(&time),
parameters.progress[i],
- event, zoom_events[event],
+ event, zoom_events[event],
error, errmsg);
}
printf("\n");
printf("\n");
}
-
- print_table_header();
+
+ print_table_header();
print_events(elc, els, parameters.concurrent);
-
+
if (parameters.gnuplot){
printf("end\n");
printf("pause -1 \"Hit ENTER to return\"\n");
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab