コード例 #1
0
ファイル: main.cpp プロジェクト: LoveSQL/stinger-orig
int
main(int argc, char *argv[])
{
  /* global options */
  int port = 10102;
  int batch_size = 100000;
  int num_batches = -1;
  int nv = 1024;
  int is_int = 0;
  struct hostent * server = NULL;

  int opt = 0;
  while(-1 != (opt = getopt(argc, argv, "p:a:x:y:n:i"))) {
    switch(opt) {
      case 'p': {
	port = atoi(optarg);
      } break;

      case 'x': {
	batch_size = atol(optarg);
      } break;

      case 'y': {
	num_batches = atol(optarg);
      } break;

      case 'a': {
	server = gethostbyname(optarg);
	if(NULL == server) {
	  E_A("ERROR: server %s could not be resolved.", optarg);
	  exit(-1);
	}
      } break;

      case 'i': {
	is_int = 1;
      } break;

      case 'n': {
	nv = atol(optarg);
      } break;

      case '?':
      case 'h': {
	printf("Usage:    %s [-p port] [-a server_addr] [-n num_vertices] [-x batch_size] [-y num_batches] [-i]\n", argv[0]);
	printf("Defaults:\n\tport: %d\n\tserver: localhost\n\tnum_vertices: %d\n-i forces the use of integers in place of strings\n", port, nv);
	exit(0);
      } break;
    }
  }

  V_A("Running with: port: %d\n", port);

  /* connect to localhost if server is unspecified */
  if(NULL == server) {
    server = gethostbyname("localhost");
    if(NULL == server) {
      E_A("ERROR: server %s could not be resolved.", "localhost");
      exit(-1);
    }
  }

  if(!(nv > 0)) {
    printf("ERROR: incorrect number of vertices");
    exit(-1);
  }

  /* start the connection */
  int sock_handle = connect_to_batch_server (server, port);

  /* actually generate and send the batches */
  int64_t line = 0;
  int64_t batch_num = 0;

  srand (time(NULL));

  int64_t scale = 0;
  int64_t tmp_nv = nv;
  while (tmp_nv >>= 1) ++scale;

  double a = 0.55;
  double b = 0.15;
  double c = 0.15;
  double d = 0.25;

  dxor128_env_t env;
  dxor128_seed(&env, 0);

  while(1) {
    StingerBatch batch;
    batch.set_make_undirected(true);
    batch.set_type(is_int ? NUMBERS_ONLY : STRINGS_ONLY);
    batch.set_keep_alive(true);

    std::string src, dest;

    // IF YOU MAKE THIS LOOP PARALLEL, 
    // MOVE THE SRC/DEST STRINGS ABOVE
    for(int e = 0; e < batch_size; e++) {
      line++;

      int64_t u, v;
      rmat_edge (&u, &v, scale, a, b, c, d, &env);

      if(u == v) {
	e--;
	line--;
	continue;
      }

      /* is insert? */
      EdgeInsertion * insertion = batch.add_insertions();

      if(is_int) {
	insertion->set_source(u);
	insertion->set_destination(v);
      } else {
	insertion->set_source_str(build_name(src, u));
	insertion->set_destination_str(build_name(dest, v));
      }

      insertion->set_weight(1);
      insertion->set_time(line);
    }

    V("Sending messages.");

    send_message(sock_handle, batch);
    sleep(2);

    batch_num++;
    if((batch_num >= num_batches) && (num_batches != -1)) {
      break;
    }
    
  }

  StingerBatch batch;
  batch.set_make_undirected(true);
  batch.set_type(is_int ? NUMBERS_ONLY : STRINGS_ONLY);
  batch.set_keep_alive(false);
  send_message(sock_handle, batch);

  return 0;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: anukat2015/stinger
int main(int argc, char *argv[])
{
	/* global options */
	int port = 10102;
	struct hostent * server = NULL;

	int opt = 0;
	uint64_t batch_time = 0;
	uint64_t batch_size = 0;
	while(-1 != (opt = getopt(argc, argv, "p:a:s:t:"))) {
		switch(opt) {
			case 'p': {
				port = atoi(optarg);
			} break;

			case 'a': {
				server = gethostbyname(optarg);
				if(NULL == server) {
					LOG_E_A ("ERROR: server %s could not be resolved.", optarg);
					exit(-1);
				}
			} break;

			case '?':
			case 'h': {
				printf("Usage:  %s [-p port] [-a server_addr] [[-t batch_delay (seconds)]|[-s batch_size]]\n", argv[0]);
				printf("Defaults:\n\tport: %d\n\tserver: localhost\n\tdelay: %f seconds\nbatch_size: %d", port, NETFLOW_BATCH_TIME, NETFLOW_BATCH_SIZE);
				exit(0);
			} break;

			// Time between netflow batches
			case 't': {
				batch_time = atoi(optarg);
			} break;

			// Size of netflow batches
			case 's': {
				batch_size = atoi(optarg);
			} break;
		}
	}

	LOG_D_A ("Running with: port: %d", port);

	/* connect to localhost if server is unspecified */
	if(NULL == server) {
		server = gethostbyname("localhost");
		if(NULL == server) {
			LOG_E_A ("ERROR: server %s could not be resolved.", "localhost");
			exit (-1);
		}
	}

	if(batch_time == 0){
		batch_time = NETFLOW_BATCH_TIME;
	}
	if(batch_size == 0){
		batch_size = NETFLOW_BATCH_SIZE;
	}
	LOG_D_A ("Sending batches every %d seconds", batch_time);

	/* start the connection */
	int sock_handle = connect_to_batch_server (server, port);

	/* actually generate and send the batches */
	int64_t batch_num = 0;

	int line_count;
	char *result;
	char input_line[MAX_LINE];
	std::string line;
	StingerBatch batch;
	batch.set_make_undirected(true);
	batch.set_type(STRINGS_ONLY);
	batch.set_keep_alive(true);
	std::vector<EdgeInsertion> batch_buffer;

	int64_t insertIdx =0;
	int64_t edgeIdx =0;

	double global_start = dpc_tic();
	double start = dpc_tic();
	double timeInSeconds = dpc_toc(start);
	while((result = fgets(input_line, MAX_LINE, stdin )) != NULL) {
		NetflowParse p;
		if(p.isHeader(input_line)) {
			continue;
		}

		p.parseLine(input_line);

		/*
		// DEBUG Ensure unique entry
		std::stringstream bnum;
		bnum << batch_num;

		if(batch_num % 3 == 0) {
			p.src += bnum.str();
			p.dest += bnum.str();
		}
		// END Unique
		*/

		EdgeInsertion * insertion = batch.add_insertions();
		insertion->set_source_str(p.src);
		insertion->set_destination_str(p.dest);
		insertion->set_type_str(p.protocol);
		insertion->set_weight(p.bytes);
		insertion->set_time(p.time);
		if (ferror(stdin)) {
			perror("Error reading stdin.");
		}

		// Assume batches are separated by number of insertions if batch_time is 0 or negative
		if(batch_time <= 0) {
			if (batch_num == 0 || batch_num % batch_size == 0) {
				int batch_size = batch.insertions_size() + batch.deletions_size();
				LOG_D ("Sending message");
				LOG_D_A ("%ld: %d actions. EX: %s:<%s, %s> (w: %d) at time %ld", batch_num, batch_size, p.protocol.c_str(), p.src.c_str(), p.dest.c_str(), p.bytes, p.time);
				send_message(sock_handle, batch);
				batch.clear_insertions();
				batch_num++;
				start = dpc_tic();
			} else {
				batch_buffer.push_back(*insertion);
			}
		}
		// Process new batch of insertions after batch_time seconds
		else {
			timeInSeconds = dpc_toc(start);
			if(timeInSeconds > batch_time){
				int batch_size = batch.insertions_size() + batch.deletions_size();
				// LOG_D_A ("%f Seconds, %ld Batches", timeInSeconds, batch_num);
				LOG_D_A ("%ld: %d actions. EX: %s:<%s, %s> (w: %d) at time %ld after %f seconds", batch_num, batch_size, p.protocol.c_str(), p.src.c_str(), p.dest.c_str(), p.bytes, p.time, dpc_toc(start));
				send_message(sock_handle, batch);
				batch.clear_insertions();
				batch_buffer.clear();
				start = dpc_tic();
				batch_num++;
			} else {
				batch_buffer.push_back(*insertion);
			}
		}
		insertIdx++;
	}

	LOG_D_A("Sent %ld batches in %f seconds. Constructing last batch from buffer ", batch_num, dpc_toc(global_start));

	batch.clear_insertions();
	for (std::vector<EdgeInsertion>::iterator it = batch_buffer.begin() ; it != batch_buffer.end(); ++it) {
		EdgeInsertion * insertion = batch.add_insertions();
		insertion->set_source_str(it->source_str());
		insertion->set_destination_str(it->destination_str());
		insertion->set_type_str(it->type_str());
		insertion->set_weight(it->weight());
		insertion->set_time(it->time());
		// LOG_I_A ("%s:<%s, %s> (w: %ld) at time %ld", insertion->type_str().c_str(), insertion->source_str().c_str(), insertion->destination_str().c_str(), insertion->weight(), insertion->time());
	}

	send_message(sock_handle, batch);
	LOG_D_A("Sent %ld messages from buffer. Total time: %f",batch_buffer.size(), dpc_toc(global_start));

	return 0;
}
コード例 #3
0
ファイル: main.cpp プロジェクト: LoveSQL/stinger-orig
int
main(int argc, char *argv[])
{
  /* global options */
  int port = 10102;
  struct hostent * server = NULL;

  int opt = 0;
  while(-1 != (opt = getopt(argc, argv, "p:a:"))) {
    switch(opt) {
      case 'p': {
	port = atoi(optarg);
      } break;

      case 'a': {
	server = gethostbyname(optarg);
	if(NULL == server) {
	  LOG_E_A ("ERROR: server %s could not be resolved.", optarg);
	  exit(-1);
	}
      } break;

      case '?':
      case 'h': {
	printf("Usage:    %s [-p port] [-a server_addr]\n", argv[0]);
	printf("Defaults:\n\tport: %d\n\tserver: localhost\n", port);
	exit(0);
      } break;
    }
  }

  LOG_D_A ("Running with: port: %d", port);

  /* connect to localhost if server is unspecified */
  if(NULL == server) {
    server = gethostbyname("localhost");
    if(NULL == server) {
      LOG_E_A ("ERROR: server %s could not be resolved.", "localhost");
      exit (-1);
    }
  }

  /* start the connection */
  int sock_handle = connect_to_batch_server (server, port);

  /* actually generate and send the batches */
  int64_t batch_num = 0;
  int64_t time = 0;

  while (1)
  {
    StingerBatch batch;
    batch.set_make_undirected(true);
    batch.set_type(STRINGS_ONLY);
    batch.set_keep_alive(true);

    std::string src, dest;
    std::cout << "\nEnter the source vertex: ";
    std::getline (std::cin, src);

    std::cout << "Enter the destination vertex: ";
    std::getline (std::cin, dest);

    time = get_current_timestamp();

    EdgeInsertion * insertion = batch.add_insertions();
    insertion->set_source_str(src);
    insertion->set_destination_str(dest);
    insertion->set_weight(1);
    insertion->set_time(time);

    LOG_I_A ("%ld: <%s, %s> at time %ld", batch_num, src.c_str(), dest.c_str(), time);
    LOG_D ("Sending message");
    send_message(sock_handle, batch);

    batch_num++;
    
  }

  StingerBatch batch;
  batch.set_make_undirected(true);
  batch.set_type(STRINGS_ONLY);
  batch.set_keep_alive(false);
  send_message(sock_handle, batch);

  return 0;
}