void broken_init(pmdaInterface *dp) { #if defined(BUG_5) if (_isDSO) /* * we don't grok PMDA_INTERFACE_77 ... 77 is arbitrary, just needs * to be bigger than currently validand supported */ #if defined(VERSION_1) pmdaDSO(dp, 77, "broken DSO", BROKEN, _helpText); #else pmdaDSO(dp, 77, "broken DSO", _helpText); #endif #elif defined(VERSION_1) if (_isDSO) pmdaDSO(dp, PMDA_PROTOCOL_2, "broken DSO", BROKEN, _helpText); #else if (_isDSO) pmdaDSO(dp, PMDA_INTERFACE_2, "broken DSO", _helpText); #endif if (dp->status != 0) return; pmdaSetFetchCallBack(dp, broken_fetchCallBack); #if defined(BUG_2) pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #elif defined(BUG_3) pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), (pmdaMetric *)0, -1); #elif defined(BUG_4) pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #else pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #endif }
void broken_init(pmdaInterface *dp) { #if defined(BUG_5) if (_isDSO) /* we don't grok PMDA_INTERFACE_4 ... */ #if defined(VERSION_1) pmdaDSO(dp, 4, "broken DSO", BROKEN, _helpText); #else pmdaDSO(dp, 4, "broken DSO", _helpText); #endif #elif defined(VERSION_1) if (_isDSO) pmdaDSO(dp, PMDA_PROTOCOL_2, "broken DSO", BROKEN, _helpText); #else if (_isDSO) pmdaDSO(dp, PMDA_INTERFACE_2, "broken DSO", _helpText); #endif if (dp->status != 0) return; pmdaSetFetchCallBack(dp, broken_fetchCallBack); #if defined(BUG_2) pmdaInit(dp, (pmdaIndom *)0, 0, metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #elif defined(BUG_3) pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), (pmdaMetric *)0, -1); #elif defined(BUG_4) pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #else pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); #endif }
void __PMDA_INIT_CALL papi_init(pmdaInterface *dp) { int sts; if (isDSO) { int sep = __pmPathSeparator(); snprintf(helppath, sizeof(helppath), "%s%c" "papi" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDSO(dp, PMDA_INTERFACE_6, "papi DSO", helppath); } if (dp->status != 0) return; dp->comm.flags |= PDU_FLAG_AUTH; if ((sts = papi_internal_init(dp)) < 0) { __pmNotifyErr(LOG_ERR, "papi_internal_init: %s\n", pmErrStr(sts)); dp->status = PM_ERR_GENERIC; return; } if ((sts = papi_setup_auto_af()) < 0) { __pmNotifyErr(LOG_ERR, "papi_setup_auto_af: %s\n", pmErrStr(sts)); dp->status = PM_ERR_GENERIC; return; } dp->version.six.fetch = papi_fetch; dp->version.six.store = papi_store; dp->version.six.attribute = papi_contextAttributeCallBack; dp->version.six.desc = papi_desc; dp->version.any.text = papi_text; dp->version.four.pmid = papi_name_lookup; dp->version.four.children = papi_children; pmdaSetFetchCallBack(dp, papi_fetchCallBack); pmdaSetEndContextCallBack(dp, papi_endContextCallBack); pmdaInit(dp, NULL, 0, NULL, 0); }
/* * Initialise the agent (both daemon and DSO). */ void aix_init(pmdaInterface *dp) { if (_isDSO) { int sep = __pmPathSeparator(); snprintf(mypath, sizeof(mypath), "%s%c" "aix" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDSO(dp, PMDA_INTERFACE_3, "AIX DSO", mypath); } else { __pmSetProcessIdentity(username); } if (dp->status != 0) return; dp->version.two.fetch = aix_fetch; pmdaSetFetchCallBack(dp, aix_fetch_callback); init_data(dp->domain); pmdaInit(dp, indomtab, indomtab_sz, metrictab, metrictab_sz); }
/* * Initialise the agent (both daemon and DSO). */ void generic_init(pmdaInterface *dp) { if (isDSO) { int sep = __pmPathSeparator(); snprintf(mypath, sizeof(mypath), "%s%c" "generic" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDSO(dp, PMDA_INTERFACE_2, "generic DSO", mypath); } /** else { __pmSetProcessIdentity(username); } */ if (dp->status != 0) return; pmdaSetFetchCallBack(dp, generic_fetchCallBack); pmdaInit(dp, NULL, 0, metrictab, sizeof(metrictab)/sizeof(metrictab[0])); }
/* * Initialise the agent (both daemon and DSO). */ void mounts_init(pmdaInterface *dp) { if (isDSO) { int sep = __pmPathSeparator(); snprintf(mypath, sizeof(mypath), "%s%c" "mounts" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDSO(dp, PMDA_INTERFACE_2, "mounts DSO", mypath); } else { __pmSetProcessIdentity(username); } if (dp->status != 0) return; dp->version.two.fetch = mounts_fetch; pmdaSetFetchCallBack(dp, mounts_fetchCallBack); pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), metrictab, sizeof(metrictab)/sizeof(metrictab[0])); /* Let's grab the info right away just to make sure it's there. */ mounts_grab_config_info(); }
/* * Initialise the agent (both daemon and DSO). * * Do mapping from sysclt(3) names to mibs. * Collect some global constants. * Build the system-specific, but not dynamic, instance domains, * e.g. CPU_INDOM. * Initialize the kernel memory reader. */ void openbsd_init(pmdaInterface *dp) { int i; int m; int sts; struct clockinfo clockrates; size_t sz; int mib[CTL_MAXNAME]; /* enough for longest mib key */ char iname[16]; /* enough for cpuNN.. */ if (isDSO) { char mypath[MAXPATHLEN]; int sep = __pmPathSeparator(); snprintf(mypath, sizeof(mypath), "%s%c" "openbsd" "%c" "help", pmGetConfig("PCP_PMDAS_DIR"), sep, sep); pmdaDSO(dp, PMDA_INTERFACE_5, "openbsd DSO", mypath); } else { __pmSetProcessIdentity(username); } if (dp->status != 0) return; dp->version.four.fetch = openbsd_fetch; dp->version.four.instance = openbsd_instance; pmdaSetFetchCallBack(dp, openbsd_fetchCallBack); pmdaInit(dp, indomtab, indomtablen, metrictab, metrictablen); /* * Link metrictab[] entries via m_user to map[] entries based on * matching sysctl(3) name * * also translate the sysctl(3) name to a mib */ for (m = 0; m < metrictablen; m++) { if (pmid_cluster(metrictab[m].m_desc.pmid) != CL_SYSCTL) { /* not using sysctl(3) */ continue; } for (i = 0; i < maplen; i++) { if (matchname(map[i].m_pcpname, (char *)metrictab[m].m_user)) { if (map[i].m_mib == NULL) { /* * multiple metrictab[] entries may point to the same * mib[] entry, but this is the first time for this * mib[] entry ... */ map[i].m_miblen = sizeof(mib); sts = sysctlnametomib(map[i].m_name, mib, &map[i].m_miblen); if (sts == 0) { map[i].m_mib = (int *)malloc(map[i].m_miblen*sizeof(map[i].m_mib[0])); if (map[i].m_mib == NULL) { fprintf(stderr, "Error: %s (%s): failed mib alloc for sysctl metric \"%s\"\n", map[i].m_pcpname, pmIDStr(metrictab[m].m_desc.pmid), map[i].m_name); __pmNoMem("openbsd_init: mib", map[i].m_miblen*sizeof(map[i].m_mib[0]), PM_FATAL_ERR); /*NOTREACHED*/ } memcpy(map[i].m_mib, mib, map[i].m_miblen*sizeof(map[i].m_mib[0])); } else { fprintf(stderr, "Error: %s (%s): failed sysctlnametomib(\"%s\", ...): %s\n", map[i].m_pcpname, pmIDStr(metrictab[m].m_desc.pmid), map[i].m_name, pmErrStr(-errno)); metrictab[m].m_user = (void *)&bad_mib; } } #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_APPL0) { int p; fprintf(stderr, "Info: %s (%s): sysctl metric \"%s\" -> ", (char *)metrictab[m].m_user, pmIDStr(metrictab[m].m_desc.pmid), map[i].m_name); for (p = 0; p < map[i].m_miblen; p++) { if (p > 0) fputc('.', stderr); fprintf(stderr, "%d", map[i].m_mib[p]); } fputc('\n', stderr); } #endif metrictab[m].m_user = (void *)&map[i]; break; } } if (i == maplen) { fprintf(stderr, "Error: %s (%s): cannot match name in sysctl map[]\n", (char *)metrictab[m].m_user, pmIDStr(metrictab[m].m_desc.pmid)); metrictab[m].m_user = (void *)&bad_mib; } } /* * Collect some global constants needed later ... */ mib[0] = CTL_KERN; mib[1] = KERN_CLOCKRATE; sz = sizeof(clockrates); sts = sysctl(mib, 2, &clockrates, &sz, NULL, 0); if (sts < 0) { fprintf(stderr, "Fatal Error: sysctl(\"kern.clockrate\", ...) failed: %s\n", pmErrStr(-errno)); exit(1); } cpuhz = clockrates.stathz; #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_APPL0) fprintf(stderr, "Info: CPU time \"hz\" = %d\n", cpuhz); #endif mib[0] = CTL_HW; mib[1] = HW_NCPU; sz = sizeof(ncpu); sts = sysctl(mib, 2, &ncpu, &sz, NULL, 0); if (sts < 0) { fprintf(stderr, "Fatal Error: sysctl(\"hw.ncpu\", ...) failed: %s\n", pmErrStr(-errno)); exit(1); } #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_APPL0) fprintf(stderr, "Info: ncpu = %d\n", ncpu); #endif mib[0] = CTL_HW; mib[1] = HW_PAGESIZE; sz = sizeof(pagesize); sts = sysctl(mib, 2, &pagesize, &sz, NULL, 0); if (sts < 0) { fprintf(stderr, "Fatal Error: sysctl(\"hw.pagesize\", ...) failed: %s\n", pmErrStr(-errno)); exit(1); } #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_APPL0) fprintf(stderr, "Info: VM pagesize = %d\n", pagesize); #endif uname(&kernel_uname); /* * Build some instance domains ... */ indomtab[CPU_INDOM].it_numinst = ncpu; indomtab[CPU_INDOM].it_set = (pmdaInstid *)malloc(ncpu * sizeof(pmdaInstid)); if (indomtab[CPU_INDOM].it_set == NULL) { __pmNoMem("openbsd_init: CPU_INDOM it_set", ncpu * sizeof(pmdaInstid), PM_FATAL_ERR); /*NOTREACHED*/ } for (i = 0; i < ncpu; i++) { indomtab[CPU_INDOM].it_set[i].i_inst = i; snprintf(iname, sizeof(iname), "cpu%d", i); indomtab[CPU_INDOM].it_set[i].i_name = strdup(iname); if (indomtab[CPU_INDOM].it_set[i].i_name == NULL) { __pmNoMem("openbsd_init: CPU_INDOM strdup iname", strlen(iname), PM_FATAL_ERR); /*NOTREACHED*/ } } kmemread_init(); }