Exemplo n.º 1
0
Arquivo: derive.c Projeto: Aconex/pcp
static void
init(void)
{
    if (need_init) {
	char	*configpath;

	if ((configpath = getenv("PCP_DERIVED_CONFIG")) != NULL) {
	    int	sts;
#ifdef PCP_DEBUG
	    if (pmDebug & DBG_TRACE_DERIVE) {
		fprintf(stderr, "Derived metric initialization from $PCP_DERIVED_CONFIG\n");
	    }
#endif
	    sts = pmLoadDerivedConfig(configpath);
#ifdef PCP_DEBUG
	    if (sts < 0 && (pmDebug & DBG_TRACE_DERIVE)) {
		char	errmsg[PM_MAXERRMSGLEN];
		fprintf(stderr, "pmLoadDerivedConfig -> %s\n", pmErrStr_r(sts, errmsg, sizeof(errmsg)));
	    }
#endif
	}
	need_init = 0;
    }
}
Exemplo n.º 2
0
int
main(int argc, char **argv)
{
    int		a, c;
    int		sts;
    int		exitsts = 0;
    char	*source;
    char	*endnum;

    while ((c = pmGetOptions(argc, argv, &opts)) != EOF) {
        switch (c) {
        case 'b':		/* batchsize */
            batchsize = (int)strtol(opts.optarg, &endnum, 10);
            if (*endnum != '\0') {
                pmprintf("%s: -b requires numeric argument\n", pmProgname);
                opts.errors++;
            }
            break;

        case 'c':		/* derived metrics config file */
            sts = pmLoadDerivedConfig(opts.optarg);
            if (sts < 0) {
                fprintf(stderr, "%s: derived configuration(s) error: %s\n", pmProgname, pmErrStr(sts));
                /* errors are not necessarily fatal ... */
            }
            break;

        case 'd':
            p_desc = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'F':
            p_force = p_value = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'f':
            p_value = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'M':
            p_fullmid = 1;
            p_mid = 1;
            need_pmid = 1;
            break;

        case 'm':
            p_mid = 1;
            need_pmid = 1;
            break;

        case 't':
            p_oneline = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'T':
            p_help = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'v':
            verify = 1;
            need_context = 1;
            need_pmid = 1;
            break;

        case 'x':
            events = p_value = 1;
            need_context = 1;
            need_pmid = 1;
            break;
        }
    }
    if (opts.errors) {
        pmUsageMessage(&opts);
        exit(1);
    }

    if (opts.context)
        need_context = 1;

    if (opts.context == PM_CONTEXT_ARCHIVE)
        /*
         * for archives, one metric per batch and start at beginning of
         * archive for each batch so metric will be found if it is in
         * the archive
         */
        batchsize = 1;

    if (verify)
        p_desc = p_mid = p_fullmid = p_help = p_oneline = p_value = p_force = 0;



    if ((namelist = (char **)malloc(batchsize * sizeof(char *))) == NULL) {
        fprintf(stderr, "%s: namelist malloc: %s\n", pmProgname, osstrerror());
        exit(1);
    }

    if ((pmidlist = (pmID *)malloc(batchsize * sizeof(pmID))) == NULL) {
        fprintf(stderr, "%s: pmidlist malloc: %s\n", pmProgname, osstrerror());
        exit(1);
    }

    if (!opts.nsflag)
        need_context = 1; /* for distributed PMNS as no PMNS file given */

    if (need_context) {
        int ctxid;

        if (opts.context == PM_CONTEXT_ARCHIVE)
            source = opts.archives[0];
        else if (opts.context == PM_CONTEXT_HOST)
            source = opts.hosts[0];
        else if (opts.context == PM_CONTEXT_LOCAL)
            source = NULL;
        else {
            opts.context = PM_CONTEXT_HOST;
            source = "local:";
        }
        if ((sts = pmNewContext(opts.context, source)) < 0) {
            if (opts.context == PM_CONTEXT_HOST)
                fprintf(stderr, "%s: Cannot connect to PMCD on host \"%s\": %s\n",
                        pmProgname, source, pmErrStr(sts));
            else if (opts.context == PM_CONTEXT_LOCAL)
                fprintf(stderr, "%s: Cannot make standalone connection on localhost: %s\n",
                        pmProgname, pmErrStr(sts));
            else
                fprintf(stderr, "%s: Cannot open archive \"%s\": %s\n",
                        pmProgname, source, pmErrStr(sts));
            exit(1);
        }
        ctxid = sts;

        if (opts.context == PM_CONTEXT_ARCHIVE) {
            pmTrimNameSpace();
            /* complete TZ and time window option (origin) setup */
            if (pmGetContextOptions(ctxid, &opts)) {
                pmflush();
                exit(1);
            }
        }
    }

    if (opts.optind >= argc) {
        sts = pmTraversePMNS("", dometric);
        if (sts < 0) {
            fprintf(stderr, "Error: %s\n", pmErrStr(sts));
            exitsts = 1;
        }
    }
    else {
        for (a = opts.optind; a < argc; a++) {
            sts = pmTraversePMNS(argv[a], dometric);
            if (sts < 0) {
                fprintf(stderr, "Error: %s: %s\n", argv[a], pmErrStr(sts));
                exitsts = 1;
            }
        }
    }
    report();

    exit(exitsts);
}