示例#1
0
文件: csv.c 项目: chuzig/goaccess
/**
 * Generate CSV on partial fields for the following modules:
 * OS, BROWSERS, REFERRERS, REFERRING_SITES, KEYPHRASES, STATUS_CODES
 */
static void
print_csv_generic (FILE * fp, const GHolder * h, int process)
{
  char *data;
  const char *id = NULL;
  float percent;
  int i, idx, hits;

  if (h->module == BROWSERS)
    id = BROWS_ID;
  else if (h->module == OS)
    id = OPERA_ID;
  else if (h->module == REFERRERS)
    id = REFER_ID;
  else if (h->module == REFERRING_SITES)
    id = SITES_ID;
  else if (h->module == KEYPHRASES)
    id = KEYPH_ID;
  else if (h->module == STATUS_CODES)
    id = CODES_ID;
#ifdef HAVE_LIBGEOIP
  else if (h->module == GEO_LOCATION)
    id = GEOLO_ID;
#endif

  for (i = 0, idx = 0; i < h->idx; i++, idx++) {
    hits = h->items[i].hits;
    data = h->items[i].data;
    percent = get_percentage (process, hits);
    percent = percent < 0 ? 0 : percent;

    fprintf (fp, "\"%d\",", idx);       /* idx */
    fprintf (fp, ",");  /* parent idx */
    fprintf (fp, "\"%s\",", id);
    fprintf (fp, "\"%d\",", hits);
    fprintf (fp, "\"%4.2f%%\",", percent);
    fprintf (fp, "\"");
    escape_cvs_output (fp, data);
    fprintf (fp, "\",");
    fprintf (fp, "\r\n");       /* parent idx */

    if (h->module == OS || h->module == BROWSERS || h->module == STATUS_CODES
#ifdef HAVE_LIBGEOIP
        || h->module == GEO_LOCATION
#endif
      )
      print_csv_sub_items (fp, h->items[i].sub_list, process, id, &idx);
  }
}
示例#2
0
/* Output first-level items. */
static void
print_csv_data (FILE * fp, GHolder * h, int valid)
{
    GMetrics *nmetrics;
    int i;

    for (i = 0; i < h->idx; i++) {
        set_data_metrics (h->items[i].metrics, &nmetrics, valid);

        fprintf (fp, "\"%d\",", i); /* idx */
        fprintf (fp, ",");  /* no parent */
        fprintf (fp, "\"%s\",", module_to_id (h->module));
        fprintf (fp, "\"%d\",", nmetrics->hits);
        fprintf (fp, "\"%d\",", nmetrics->visitors);
        fprintf (fp, "\"%4.2f%%\",", nmetrics->percent);

        if (conf.bandwidth)
            fprintf (fp, "\"%lld\",", (long long) nmetrics->bw.nbw);

        if (conf.serve_usecs) {
            fprintf (fp, "\"%lld\",", (long long) nmetrics->avgts.nts);
            fprintf (fp, "\"%lld\",", (long long) nmetrics->cumts.nts);
            fprintf (fp, "\"%lld\",", (long long) nmetrics->maxts.nts);
        }

        if (conf.append_method && nmetrics->method)
            fprintf (fp, "\"%s\"", nmetrics->method);
        fprintf (fp, ",");

        if (conf.append_protocol && nmetrics->protocol)
            fprintf (fp, "\"%s\"", nmetrics->protocol);
        fprintf (fp, ",");

        fprintf (fp, "\"");
        escape_cvs_output (fp, nmetrics->data);
        fprintf (fp, "\"\r\n");

        if (h->sub_items_size)
            print_csv_sub_items (fp, h, i, valid);

        free (nmetrics);
    }
}
示例#3
0
文件: csv.c 项目: 0-T-0/goaccess
/* Output first-level items.
 *
 * On success, outputs item value. */
static void
print_csv_data (FILE * fp, GHolder * h, GPercTotals totals)
{
  GMetrics *nmetrics;
  int i;

  for (i = 0; i < h->idx; i++) {
    set_data_metrics (h->items[i].metrics, &nmetrics, totals);

    fprintf (fp, "\"%d\",", i); /* idx */
    fprintf (fp, ",");  /* no parent */
    fprintf (fp, "\"%s\",", module_to_id (h->module));

    /* output metrics */
    print_csv_metric_block (fp, nmetrics);

    if (h->sub_items_size)
      print_csv_sub_items (fp, h, i, totals);

    free (nmetrics);
  }
}