Ejemplo n.º 1
0
int main(int argc, char **argv)
{
  cache_perf tc;
  unsigned long long cache_size, num_entries;
  unsigned long int report_interval;
  int   accept_socket, dsocket, cntr = 0;
  lf_entry   next_entry;

  if (argc != 5)
    usage();

  if (sscanf(argv[2], "%llu", &cache_size) != 1)
    usage();

  if (sscanf(argv[3], "%llu", &num_entries) != 1)
    usage();

  if (sscanf(argv[4], "%lu", &report_interval) != 1)
    usage();

  accept_socket = slisten(argv[1]);
  if (accept_socket == -1)
    usage();

  fprintf(stderr, "Starting up cache sim server, params:\n");
  fprintf(stderr, "  port %s, cachesize %llu, num_entries %llu, ri %lu\n",
	  argv[1], cache_size, num_entries, report_interval);

  if (!init_cache_el(cache_size, num_entries, &tc)) {
    fprintf(stderr, "initialize_cache failed.\n");
    usage();
  }

  if ( (dsocket = saccept(accept_socket)) < 0) {
    fprintf(stderr, "accept failed.\n");
    usage();
  }

  while(1) {
    int gne_res;

    gne_res = lf_get_next_entry(dsocket, &next_entry, 3);
    if ( (gne_res != 0) && (gne_res != 1)) {
      fprintf(stderr, "get_next_entry failed.  All done!\n");
      exit(0);
    }

    process_log_entry(&tc, &next_entry);
    cntr++;
    if (gne_res == 1) {
      fprintf(stderr, "All done!\n");
      exit(0);
    }

    if ( (cntr % report_interval) == 0)
      dump_cache_stats(&tc, stdout);

    free(next_entry.url);
  }

  exit(0);
}
Ejemplo n.º 2
0
/*************************************************************
* * Main
**************************************************************/
int main(int argc, char **argv) {

	int		option;
	int		dump_user_info = 0;
	int		dump_stat_info = 0;
	char   		*file = NULL;
	int		file_fd;
	int		shmid = 0;
	char		shmid_buff[256];
	char		cache_magic[64];
	struct stat 	stat_buff;

	while ((option = getopt(argc, argv, "dm:s")) != -1) {
		switch(option) {

			case 'd':
				dump_user_info = 1;
				break;

			case 's':
				dump_stat_info = 1;
				break;

			case 'm':
				file = strdup(optarg);
				break;

			default:
				show_usage();
		}
	}

	if (file == NULL)
		file = PATH_SASLAUTHD_RUNDIR "/cache.mmap";

	if (stat(file, &stat_buff) == -1) {
		fprintf(stderr, "could not stat mmap file: %s\n", file);
		fprintf(stderr, "stat: %s\n", strerror(errno));
		exit(1);
	}

	if ((file_fd = open(file, O_RDONLY)) < 0) {
		fprintf(stderr, "could not open mmap file: %s\n", file);
		fprintf(stderr, "open: %s\n", strerror(errno));
		fprintf(stderr, "perhaps saslcache -m <path>\n");
		exit(1);
	}

	if ((shm_base = mmap(NULL, stat_buff.st_size, PROT_READ, MAP_SHARED, file_fd, 0))== (void *)-1) {
		fprintf(stderr, "could not mmap shared memory file: %s\n", file);
		fprintf(stderr, "mmap: %s\n", strerror(errno));
		exit(1);
	}	

	memcpy(cache_magic, shm_base, 64);
	cache_magic[63] = '\0';

	if (strcmp(cache_magic, CACHE_CACHE_MAGIC) != 0) {
		fprintf(stderr, "mmap file [%s] is not a valid saslauthd cache\n", file);
		exit(1);
	}

	table_stats = shm_base + 64;
//	(char *)table = (char *)table_stats + 128;
	table = (char *)table_stats + 128;

	if (dump_stat_info == 0 && dump_user_info == 0)
		dump_stat_info = 1;

	if (dump_stat_info)
		dump_cache_stats();

	if (dump_user_info)
		dump_cache_users();

	exit(0);	
}