/*
- * $Id: zoom-benchmark.c,v 1.11 2005-09-20 11:29:03 marc Exp $
+ * $Id: zoom-benchmark.c,v 1.18 2007-01-04 14:44:34 marc Exp $
*
* Asynchronous multi-target client doing search and piggyback retrieval
*/
int timeout;
char proxy[1024];
int piggypack;
+ int gnuplot;
} parameters;
struct event_line_t
els[iels].time_usec = usec;
els[iels].progress = prog;
els[iels].event = event;
- strcpy(els[iels].zoom_event, eventmsg);
+
+ if (eventmsg)
+ strcpy(els[iels].zoom_event, eventmsg);
+ else
+ strcpy(els[iels].zoom_event, "---");
+
els[iels].error = error;
strcpy(els[iels].errmsg, errmsg);
- //print_event_line(&els[iels]);
+ /* print_event_line(&els[iels]); */
elc[ielc] += 1;
}
-void init_statics()
+void init_statics(void)
{
int i;
char nullstring[1] = "";
zoom_events[ZOOM_EVENT_RECV_APDU] = "ZOOM_EVENT_RECV_APDU";
zoom_events[ZOOM_EVENT_RECV_RECORD] = "ZOOM_EVENT_RECV_RECORD";
zoom_events[ZOOM_EVENT_RECV_SEARCH] = "ZOOM_EVENT_RECV_SEARCH";
+ zoom_events[ZOOM_EVENT_END] = "ZOOM_EVENT_END";
/* re-sorting event numbers to progress numbers */
zoom_progress[ZOOM_EVENT_NONE] = 0;
zoom_progress[ZOOM_EVENT_CONNECT] = 1;
zoom_progress[ZOOM_EVENT_SEND_DATA] = 3;
zoom_progress[ZOOM_EVENT_RECV_DATA] = 4;
- zoom_progress[ZOOM_EVENT_TIMEOUT] = 8;
- zoom_progress[ZOOM_EVENT_UNKNOWN] = 9;
+ zoom_progress[ZOOM_EVENT_TIMEOUT] = 9;
+ zoom_progress[ZOOM_EVENT_UNKNOWN] = 10;
zoom_progress[ZOOM_EVENT_SEND_APDU] = 2;
zoom_progress[ZOOM_EVENT_RECV_APDU] = 5;
zoom_progress[ZOOM_EVENT_RECV_RECORD] = 7;
zoom_progress[ZOOM_EVENT_RECV_SEARCH] = 6;
+ zoom_progress[ZOOM_EVENT_END] = 8;
/* parameters */
parameters.concurrent = 1;
parameters.timeout = 0;
parameters.repeat = 1;
strcpy(parameters.proxy, nullstring);
+ parameters.gnuplot = 0;
parameters.piggypack = 0;
/* progress initializing */
return ptime->usec;
}
-void print_option_error()
+void print_option_error(void)
{
fprintf(stderr, "zoom-benchmark: Call error\n");
fprintf(stderr, "zoom-benchmark -h host:port -q pqf-query "
"[-c no_concurrent (max 4096)] "
"[-n no_repeat] "
"[-b (piggypack)] "
+ "[-g (gnuplot outfile)] "
"[-p proxy] \n");
- //"[-t timeout] \n");
+ /* "[-t timeout] \n"); */
exit(1);
}
void read_params(int argc, char **argv, struct parameters_t *p_parameters){
char *arg;
int ret;
- while ((ret = options("h:q:c:t:p:bn:", argv, argc, &arg)) != -2)
+ while ((ret = options("h:q:c:t:p:bgn:", argv, argc, &arg)) != -2)
{
switch (ret)
{
case 'c':
p_parameters->concurrent = atoi(arg);
break;
- //case 't':
- //p_parameters->timeout = atoi(arg);
- // break;
+#if 0
+ case 't':
+ p_parameters->timeout = atoi(arg);
+ break;
+#endif
case 'b':
p_parameters->piggypack = 1;
break;
+ case 'g':
+ p_parameters->gnuplot = 1;
+ break;
case 'n':
p_parameters->repeat = atoi(arg);
break;
printf(" query: %s \n", p_parameters->query);
printf(" concurrent: %d \n", p_parameters->concurrent);
printf(" repeat: %d \n", p_parameters->repeat);
- //printf(" timeout: %d \n", p_parameters->timeout);
+#if 0
+ printf(" timeout: %d \n", p_parameters->timeout);
+#endif
printf(" proxy: %s \n", p_parameters->proxy);
printf(" piggypack: %d \n\n", p_parameters->piggypack);
+ printf(" gnuplot: %d \n\n", p_parameters->gnuplot);
}
if (! strlen(p_parameters->host))
print_option_error();
}
-void print_table_header()
+void print_table_header(void)
{
+ if (parameters.gnuplot)
+ printf("#");
printf ("target\tsecond.usec\tprogress\tevent\teventname\t");
printf("error\terrorname\n");
}
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,
- } // for (k = 0; k < parameters.repeat; k++) repeat loop
+ } /* for (k = 0; k < parameters.repeat; k++) repeat loop */
/* output */
+
+ if (parameters.gnuplot){
+ printf("# gnuplot data and instruction file \n");
+ printf("# gnuplot thisfile \n");
+ printf("\n");
+ printf("set title \"Z39.50 connection plot\"\n");
+ printf("set xlabel \"Connection\"\n");
+ printf("set ylabel \"Time Seconds\"\n");
+ printf("set zlabel \"Progress\"\n");
+ printf("set ticslevel 0\n");
+ printf("set grid\n");
+ printf("set pm3d\n");
+ printf("splot '-' using ($1):($2):($3) t '' with points\n");
+ printf("\n");
+ printf("\n");
+ }
+
print_table_header();
print_events(elc, els, parameters.concurrent);
+ if (parameters.gnuplot){
+ printf("end\n");
+ printf("pause -1 \"Hit ENTER to return\"\n");
+ }
/* destroy data structures and exit */
xfree(z);