/*
 * DFEEDINFO.C	Dump the feed stats cache
 *
 * (c)Copyright 2000, Russell Vincent, All Rights Reserved.  Refer to
 *    the COPYRIGHT file in the base directory of this distribution 
 *    for specific rights granted.
 */

#include "defs.h"

void
Usage(int ac, char **av)
{
    fprintf(stderr, "Show some newsfeed statistics\n");
    fprintf(stderr, "Usage: %s [-a] [-f file] [-I] [-i] [-o] [-P[ext] ] [-r] [-S] [-s] [-t] [-z] [hostname]\n", av[0]);
    fprintf(stderr, "	-a		dump all statcs\n");
    fprintf(stderr, "	-f file		specify the file to use\n");
    fprintf(stderr, "	-I		dump detailed incoming stats\n");
    fprintf(stderr, "	-i		dump incoming stats\n");
    fprintf(stderr, "	-o		dump outgoing stats\n");
    fprintf(stderr, "	-P[ext]		create a snapshot file of the stats\n");
    fprintf(stderr, "	-r		show raw stats (no byte formatting)\n");
    fprintf(stderr, "	-S		dump detailed spool stats\n");
    fprintf(stderr, "	-s		dump spool stats\n");
    fprintf(stderr, "	-t		only print total stats\n");
    fprintf(stderr, "	-z		zero stats\n");
    exit(1);
}

int
main(int ac, char **av)
{
    int i;
    char *hostname = NULL;
    int outstats = 0;
    int instats = 0;
    int indetstats = 0;
    int spoolstats = 0;
    int spooldetstats = 0;
    int zerostats = 0;
    int raw = 0;
    int totalonly = 0;
    int snapshot = 0;
    char *snapext = NULL;

    LoadDiabloConfig(ac, av);

    for (i = 1; i < ac; ++i) {
	char *ptr = av[i];

	if (*ptr != '-') {
	    hostname = ptr;
	    continue;
	}
	ptr += 2;
	switch(ptr[-1]) {
	case 'C':
	    break;
	case 'a':
	    instats = 1;
	    outstats = 1;
	    spoolstats = 1;
	    break;
	case 'f':
	    DFeedStatsPat = (*ptr ? ptr : av[++i]);
	    break;
	case 'I':
	    indetstats = 1;
	    break;
	case 'i':
	    instats = 1;
	    break;
	case 'o':
	    outstats = 1;
	    break;
	case 'P':
	    snapshot = 1;
	    if (*ptr)
		snapext = ptr;
	    break;
	case 'r':
	    raw = 1;
	    break;
	case 'S':
	    spooldetstats = 1;
	    break;
	case 's':
	    spoolstats = 1;
	    break;
	case 't':
	    totalonly = 1;
	    break;
	case 'z':
	    zerostats = 1;
	    break;
	default:
	    Usage(ac, av);
	}
    }
    if (!instats && !indetstats && !outstats &&
				!spoolstats && !spooldetstats &&
				!zerostats && !snapshot)
	Usage(ac, av);
    if (instats) {
	if (totalonly)
	    FeedStatsDump(stdout, "TOTAL", raw, FSTATS_IN);
	else
	    FeedStatsDump(stdout, hostname, raw, FSTATS_IN);
    }
    if (indetstats) {
	if (totalonly)
	    FeedStatsDump(stdout, "TOTAL", raw, FSTATS_INDETAIL);
	else
	    FeedStatsDump(stdout, hostname, raw, FSTATS_INDETAIL);
    }
    if (outstats) {
	if (totalonly)
	    FeedStatsDump(stdout, "TOTAL", raw, FSTATS_OUT);
	else
	    FeedStatsDump(stdout, hostname, raw, FSTATS_OUT);
    }
    if (spoolstats) {
	if (totalonly)
	    FeedStatsDump(stdout, "TOTAL", raw, FSTATS_SPOOL);
	else
	    FeedStatsDump(stdout, hostname, raw, FSTATS_SPOOL);
    }
    if (spooldetstats) {
	if (totalonly)
	    FeedStatsDump(stdout, "TOTAL", raw, FSTATS_SPOOLDETAIL);
	else
	    FeedStatsDump(stdout, hostname, raw, FSTATS_SPOOLDETAIL);
    }
    if (snapshot)
	FeedStatsSnapShot(stdout, hostname, snapext);
    if (zerostats && (instats || indetstats))
	FeedStatsClear(stdout, hostname, FSTATS_IN);
    if (zerostats && outstats)
	FeedStatsClear(stdout, hostname, FSTATS_OUT);
    if (zerostats && (spoolstats || spooldetstats))
	FeedStatsClear(stdout, hostname, FSTATS_SPOOL);
    return(0);
}



syntax highlighted by Code2HTML, v. 0.9.1