+
+ /* parameters */
+ parameters.concurrent = 1;
+ parameters.timeout = 0;
+
+ /* progress initializing */
+ for (i = 0; i < 4096; i++){
+ parameters.progress[i] = 0;
+ }
+
+}
+
+struct time_type
+{
+ struct timeval now;
+ struct timeval then;
+ long sec;
+ long usec;
+};
+
+void time_init(struct time_type *ptime)
+{
+ gettimeofday(&(ptime->now), 0);
+ gettimeofday(&(ptime->then), 0);
+ ptime->sec = 0;
+ ptime->usec = 0;
+}
+
+void time_stamp(struct time_type *ptime)
+{
+ gettimeofday(&(ptime->now), 0);
+ ptime->sec = ptime->now.tv_sec - ptime->then.tv_sec;
+ ptime->usec = ptime->now.tv_usec - ptime->then.tv_usec;
+ if (ptime->usec < 0){
+ ptime->sec--;
+ ptime->usec += 1000000;
+ }
+}
+
+long time_sec(struct time_type *ptime)
+{
+ return ptime->sec;
+}
+
+long time_usec(struct time_type *ptime)
+{
+ return ptime->usec;
+}
+
+void print_option_error()
+{
+ fprintf(stderr, "zoom-benchmark: Call error\n");
+ fprintf(stderr, "zoom-benchmark -h host:port -q pqf-query "
+ "[-c no_concurrent] "
+ "[-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:", argv, argc, &arg)) != -2)
+ {
+ 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);
+ break;
+ case 't':
+ p_parameters->timeout = atoi(arg);
+ break;
+ case 0:
+ print_option_error();
+ break;
+ default:
+ print_option_error();
+ }
+ }
+
+ 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();
+ if (! strlen(p_parameters->query))
+ print_option_error();
+ if (! (p_parameters->concurrent > 0))
+ print_option_error();
+ if (! (p_parameters->timeout >= 0))
+ 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)
+{
+ struct time_type time;
+ ZOOM_connection *z;
+ ZOOM_resultset *r;
+ int *elc;
+ struct event_line_t *els;
+ ZOOM_options o;
+ int i;
+
+ init_statics();
+
+ 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();