Ejemplo n.º 1
0
struct TSDB_metric_t * TSDB_create(struct TSDB_create_opts_t *opts) {
  int   fd, write_len,len;
  int   size = sizeof(unsigned long long);
  int   version = 1;

  assert(opts->magic == TSDB_create_opts_magic);

  assert(opts->columns > 0);

  if(!opts->created_time)
    opts->created_time = time(NULL);

  if(!opts->resolution)
    opts->resolution = 60;
  
  fd = open(opts->filename, O_CREAT | O_RDWR | O_EXCL, 0755);

  if(fd == -1)
    printf("Cannot open %s (%s)\n", opts->filename, strerror(errno));
  assert(fd != -1);

  
  write_len = write(fd, &size, 4);
  assert(write_len == 4);
  write_len = write(fd, &version, 4);
  assert(write_len == 4);
  write_len = write(fd, &opts->resolution, 4);
  assert(write_len == 4);
  write_len = write(fd, &opts->columns, 4);
  assert(write_len == 4);
  write_len = write(fd, &opts->created_time, size);
  assert(write_len == size);

  len = strlen(opts->name) + 1;
  write_len = write(fd, &opts->flags, 4);
  assert(write_len == 4);
  write_len = write(fd, &len, 4);
  assert(write_len == 4);
  write_len = write(fd, opts->name, strlen(opts->name)+1);
  assert(write_len == strlen(opts->name)+1);


  int i;
  for(i = 0; i < opts->columns; i++) {
    len = strlen(opts->col_names[i]) + 1;
    write_len = write(fd, &opts->col_flags[i], 4);
    assert(write_len == 4);
    write_len = write(fd, &len, 4);
    assert(write_len == 4);
    write_len = write(fd, opts->col_names[i], len);
    assert(write_len == len);
  }


  close(fd);

  return TSDB_open(opts->filename);
}
Ejemplo n.º 2
0
int agg_main(int argc, char * const *argv) {
  int o, start, end, interval, column, difference;
  char *filename = 0;
  
  difference = column = start = end = interval = 0;

  while ((o = getopt(argc, argv,
		     "f:s:e:i:h:c:d")) != -1) {

    switch(o) {
    case 'd':
      difference = 1;
      break;
    case 'c':
      column = atoi(optarg);
      break;
    case 'f':
      filename = malloc(strlen(optarg)+1);
      memcpy(filename, optarg, strlen(optarg)+1);
      break;
    case 's':
      start = atoi(optarg);
      break;      
    case 'e':
      end = atoi(optarg);
      break;      
    case 'i':
      interval = atoi(optarg);
      break;      
    }
  }
  
  if(!filename || !start || !end || !interval) {
    WARN("Usage: ngr agg [options]\n");
    return agg_usage();
  }

  int flags;
  if (difference)
    flags = TSDB_COUNTER;
  else
    flags = TSDB_GAUGE;

  struct TSDB_metric_t *metric    = TSDB_open(filename);
  struct TSDB_range_t  *range     = TSDB_timespan(metric, start, end);
  struct TSDB_range_t  *aggregate = TSDB_aggregate(range, interval, flags);

  int rows = aggregate->rows;
  int i = 0;
  while(rows--) {
    int offset = ((i * aggregate->columns) + column);
    printf("AVG: %.4f      MAX: %llu      MIN: %llu      STDDEV: %f\n", aggregate->agg[offset].avg, aggregate->agg[offset].max, aggregate->agg[offset].min, aggregate->agg[offset].stddev);
    i++;
  }
  return 0;
}