int main(int argc, char* argv[]) { int iterations = 0; if (argc < 4) { print_usage(argv[0]); return 1; } int guid_num = atoi(argv[3]); if (argc > 4) { iterations = atoi(argv[4]); } //string server_addr_s("127.0.0.1:5001"); //string local_addr_s("192.168.1.1:3001"); string server_addr_s(argv[1]); string local_addr_s(argv[2]); NetAddr server_addr(NET_ADDR_TYPE_IPV4_PORT, server_addr_s); NetAddr local_addr(NET_ADDR_TYPE_IPV4_PORT, local_addr_s); try { //configure service endpoints Gnrs *gnrs = new Gnrs(server_addr, local_addr); GUID guid = GUID(); guid.init(guid_num); struct timeval t1, t2; gettimeofday(&t1, NULL); list<NetAddr> lkup_addrs = gnrs->lookup(guid); gettimeofday(&t2, NULL); long long delay = 1000000 * (t2.tv_sec - t1.tv_sec); delay += t2.tv_usec - t1.tv_usec; cout << lkup_addrs.size() << " result(s) on lookup for GUID: " << guid.to_int() << "( took " << delay << " us)" << endl; int num_addrs = 0; for (list<NetAddr>::const_iterator it = lkup_addrs.begin(); it != lkup_addrs.end(); it++) { num_addrs++; cout << "INFO: \t Addr #" << num_addrs << " : " << (*it).get_value() << endl; } delete(gnrs); if (!iterations) return 0; long long total_delay = 0; vector<long long>delay_v; for(int i = 0; i < iterations; i++) { Gnrs *gnrs_heap = new Gnrs(server_addr, local_addr); //lookup operation gettimeofday(&t1, NULL); lkup_addrs = gnrs_heap->lookup(guid); gettimeofday(&t2, NULL); delay = 1000000 * (t2.tv_sec - t1.tv_sec); delay += t2.tv_usec - t1.tv_usec; total_delay += delay; delay_v.push_back(delay); delete(gnrs_heap); } /* assuming idempotent, results should remain same despite iterations */ int iter = 0; cout << "Iteration\tLatency(us)" << endl; for (vector<long long>::const_iterator it = delay_v.begin(); it != delay_v.end(); it++) { cout << ++iter << "\t" << *it << endl; } double avg_delay = total_delay / (double)(1000 * iterations); cout <<"INFO: " << "Performed " << iterations << " lookups for GUID '" << guid.to_int() << "' with avg latency of " << avg_delay << " ms" << endl; } catch (NetException &ne) { cerr << "ERROR: " << ne.what() << endl; } return 0; }