X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=zoom%2Fzoom-benchmark.c;h=c7edd95c404fc032cecfa683644261d13fc7317c;hp=e298129a8ab94befc9260fb225678d0c8b8cedde;hb=66aa379343ce353b8faa99b86c666641bd0b1577;hpb=1908df105a83e97f3e404020fd9f4e2007654afd diff --git a/zoom/zoom-benchmark.c b/zoom/zoom-benchmark.c index e298129..c7edd95 100644 --- a/zoom/zoom-benchmark.c +++ b/zoom/zoom-benchmark.c @@ -1,5 +1,5 @@ /* - * $Id: zoom-benchmark.c,v 1.2 2005-09-09 13:51:43 marc Exp $ + * $Id: zoom-benchmark.c,v 1.10 2005-09-20 09:36:18 marc Exp $ * * Asynchronous multi-target client doing search and piggyback retrieval */ @@ -23,15 +23,78 @@ static int zoom_progress[10]; /* commando line parameters */ static struct parameters_t { - char host[1024]; - char query[1024]; + char host[4096]; + char query[4096]; + char progress[4096]; int concurrent; int timeout; } parameters; +struct event_line_t +{ + int connection; + long time_sec; + long time_usec; + int progress; + int event; + char zoom_event[128]; + int error; + char errmsg[128]; +}; + + +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->progress, + pel->event, pel->zoom_event, + pel->error, pel->errmsg); +} + + +void update_events(int *elc, struct event_line_t *els, + int conn, + long sec, + long usec, + int prog, + int event, + const char * eventmsg, + int error, + const char * errmsg){ + + els[conn * 10 + elc[conn]].connection = conn; + els[conn * 10 + elc[conn]].time_sec = sec; + els[conn * 10 + elc[conn]].time_usec = usec; + els[conn * 10 + elc[conn]].progress = prog; + els[conn * 10 + elc[conn]].event = event; + strcpy(els[conn * 10 + elc[conn]].zoom_event, eventmsg); + els[conn * 10 + elc[conn]].error = error; + strcpy(els[conn * 10 + elc[conn]].errmsg, errmsg); + + //print_event_line(&els[conn*10 + elc[conn]]); + + elc[conn] += 1; +} + +void print_events(int *elc, struct event_line_t *els, + int connections){ + int i; + int j; + for (i=0; i < connections; i++){ + for (j=0; j < elc[i]; j++){ + print_event_line(&els[i*10 + j]); + } + printf("\n"); + } +} + + void init_statics() { + int i; + /* naming events */ zoom_events[ZOOM_EVENT_NONE] = "ZOOM_EVENT_NONE"; zoom_events[ZOOM_EVENT_CONNECT] = "ZOOM_EVENT_CONNECT"; @@ -57,10 +120,14 @@ void init_statics() zoom_progress[ZOOM_EVENT_RECV_SEARCH] = 6; /* parameters */ - //parameters.host = ""; - //parameters.query = ""; parameters.concurrent = 1; parameters.timeout = 0; + + /* progress initializing */ + for (i = 0; i < 4096; i++){ + parameters.progress[i] = 0; + } + } struct time_type @@ -114,36 +181,36 @@ void read_params(int argc, char **argv, struct parameters_t *p_parameters){ char *arg; int ret; while ((ret = options("h:q:c:t:", argv, argc, &arg)) != -2) + { + switch (ret) { - switch (ret) - { - case 'h': - strcpy(p_parameters->host, arg); - break; - case 'q': - strcpy(p_parameters->query, arg); - break; - case 'c': - p_parameters->concurrent = atoi(arg); + case 'h': + strcpy(p_parameters->host, arg); + break; + case 'q': + strcpy(p_parameters->query, arg); + break; + case 'c': + p_parameters->concurrent = atoi(arg); + break; + case 't': + p_parameters->timeout = atoi(arg); break; - case 't': - p_parameters->timeout = atoi(arg); - break; - case 0: - //for (i = 0; ihost); - //printf(" query: %s \n", p_parameters->query); - //printf(" concurrent: %d \n", p_parameters->concurrent); - //printf(" timeout: %d \n\n", p_parameters->timeout); + } + + if(0){ + printf("zoom-benchmark\n"); + printf(" host: %s \n", p_parameters->host); + printf(" query: %s \n", p_parameters->query); + printf(" concurrent: %d \n", p_parameters->concurrent); + printf(" timeout: %d \n\n", p_parameters->timeout); + } if (! strlen(p_parameters->host)) print_option_error(); @@ -155,20 +222,32 @@ void read_params(int argc, char **argv, struct parameters_t *p_parameters){ print_option_error(); } +void print_table_header() +{ + printf ("target\tsecond.usec\tprogress\tevent\teventname\t"); + printf("error\terrorname\n"); +} int main(int argc, char **argv) { - init_statics(); - struct time_type time; + ZOOM_connection *z; + ZOOM_resultset *r; + int *elc; + struct event_line_t *els; + ZOOM_options o; + int i; - read_params(argc, argv, ¶meters); + init_statics(); - ZOOM_connection z[parameters.concurrent]; - ZOOM_resultset r[parameters.concurrent]; - ZOOM_options o = ZOOM_options_create(); + read_params(argc, argv, ¶meters); + z = xmalloc(sizeof(*z) * parameters.concurrent); + r = xmalloc(sizeof(*r) * parameters.concurrent); + elc = xmalloc(sizeof(*elc) * parameters.concurrent); + els = xmalloc(sizeof(*els) * parameters.concurrent * 10); + o = ZOOM_options_create(); /* async mode */ ZOOM_options_set (o, "async", "1"); @@ -177,90 +256,74 @@ int main(int argc, char **argv) ZOOM_options_set (o, "count", "1"); /* preferred record syntax */ - //ZOOM_options_set (o, "preferredRecordSyntax", "usmarc"); - //ZOOM_options_set (o, "elementSetName", "F"); + if (0){ + ZOOM_options_set (o, "preferredRecordSyntax", "usmarc"); + ZOOM_options_set (o, "elementSetName", "F"); + } + /* connect to all concurrent connections*/ - int i; for ( i = 0; i < parameters.concurrent; i++){ + /* set event count to zero */ + elc[i] = 0; + /* 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); + ZOOM_connection_connect(z[i], parameters.host, 0); } /* search all */ for (i = 0; i < parameters.concurrent; i++) r[i] = ZOOM_connection_search_pqf (z[i], parameters.query); - // print header of table - printf ("second.usec\ttarget\tprogress\tevent\teventname\terror\terrorname\n"); time_init(&time); /* network I/O. pass number of connections and array of connections */ while ((i = ZOOM_event (parameters.concurrent, z))) { - time_stamp(&time); - int event = ZOOM_connection_last_event(z[i-1]); const char *errmsg; const char *addinfo; int error = 0; int progress = zoom_progress[event]; + + if (event == ZOOM_EVENT_SEND_DATA || event == ZOOM_EVENT_RECV_DATA) + continue; - + time_stamp(&time); + + /* updating events and event list */ error = ZOOM_connection_error(z[i-1] , &errmsg, &addinfo); if (error) - progress = -progress; - - printf ("%i.%06i\t%d\t%d\t%d\t%s\t%d\t%s\n", - time_sec(&time), time_usec(&time), - i-1, progress, - event, zoom_events[event], - error, errmsg); + parameters.progress[i] = -progress; + else + parameters.progress[i] += 1; + + update_events(elc, els, + i-1, time_sec(&time), time_usec(&time), + parameters.progress[i], + event, zoom_events[event], + error, errmsg); + + } - - /* no more to be done. Inspect results */ - // commented out right now - do nothing -/* for (i = 0; i