コード例 #1
0
ファイル: logger.c プロジェクト: Aconex/pcp
static int
logger_text(int ident, int type, char **buffer, pmdaExt *pmda)
{
    int numstatics = sizeof(static_metrictab)/sizeof(static_metrictab[0]);

    pmdaEventNewClient(pmda->e_context);

    if ((type & PM_TEXT_PMID) == PM_TEXT_PMID) {
	/* Lookup pmid in the metric table. */
	int item = pmid_item(ident);

	/* If the PMID item was for a dynamic metric... */
	if (item >= numstatics && item < nummetrics
	    /* and the PMID matches... */
	    && metrictab[item].m_desc.pmid == (pmID)ident
	    /* and we've got user data... */
	    && metrictab[item].m_user != NULL) {
	    dynamic_metric_info_t *pinfo = metrictab[item].m_user;

	    /* Return the correct help text. */
	    *buffer = (char *)pinfo->help_text;
	    return 0;
	}
    }
    return pmdaText(ident, type, buffer, pmda);
}
コード例 #2
0
ファイル: interrupts.c プロジェクト: ColeJackes/pcp
static int
interrupts_text(pmdaExt *pmda, pmID pmid, int type, char **buf)
{
    int item = pmid_item(pmid);
    int cluster = pmid_cluster(pmid);
    char *text;

    switch (cluster) {
	case CLUSTER_INTERRUPT_LINES:
	    if (item > lines_count)
		return PM_ERR_PMID;
	    text = interrupt_lines[item].text;
	    if (text == NULL || text[0] == '\0')
		return PM_ERR_TEXT;
	    *buf = text;
	    return 0;
	case CLUSTER_INTERRUPT_OTHER:
	    if (item > other_count)
		return PM_ERR_PMID;
	    text = interrupt_other[item].text;
	    if (text == NULL || text[0] == '\0')
		return PM_ERR_TEXT;
	    *buf = text;
	    return 0;
    }
    return PM_ERR_PMID;
}
コード例 #3
0
ファイル: sbstats.c プロジェクト: ColeJackes/pcp
/*
 * Create a new metric table entry based on an existing one.
 *
 */
static void
refresh_metrictable(pmdaMetric *source, pmdaMetric *dest, int lock)
{
    int item = pmid_item(source->m_desc.pmid);
    int domain = pmid_domain(source->m_desc.pmid);
    int cluster = pmid_cluster(source->m_desc.pmid);

    memcpy(dest, source, sizeof(pmdaMetric));
    item += lock * NUM_LOCKSTATS;
    dest->m_desc.pmid = pmid_build(domain, cluster, item);

    if (pmDebug & DBG_TRACE_APPL0)
	fprintf(stderr, "GFS2 sbstats refresh_metrictable: (%p -> %p) "
			"metric ID dup: %d.%d.%d -> %d.%d.%d\n",
			source, dest, domain, cluster,
			pmid_item(source->m_desc.pmid), domain, cluster, item);
}
コード例 #4
0
ファイル: interrupts.c プロジェクト: aeppert/pcp
/*
 * Create a new metric table entry based on an existing one.
 */
static void
refresh_metrictable(pmdaMetric *source, pmdaMetric *dest, int id)
{
    int domain = pmid_domain(source->m_desc.pmid);
    int cluster = pmid_cluster(source->m_desc.pmid);

    memcpy(dest, source, sizeof(pmdaMetric));
    dest->m_desc.pmid = pmid_build(domain, cluster, id);

    if (pmDebug & DBG_TRACE_LIBPMDA)
	fprintf(stderr, "interrupts refresh_metrictable: (%p -> %p) "
			"metric ID dup: %d.%d.%d -> %d.%d.%d\n",
		source, dest, domain, cluster,
		pmid_item(source->m_desc.pmid), domain, cluster, id);
}
コード例 #5
0
ファイル: sbstats.c プロジェクト: ColeJackes/pcp
static int
sbstats_text(pmdaExt *pmda, pmID pmid, int type, char **buf)
{
    int item = pmid_item(pmid);
    static char text[128];

    if (pmid_cluster(pmid) != CLUSTER_SBSTATS)
	return PM_ERR_PMID;
    if (item < 0 || item >= SBSTATS_COUNT)
	return PM_ERR_PMID;
    snprintf(text, sizeof(text), "%s for %s glocks",
	     stattext[item % NUM_LOCKSTATS], locktype[item / NUM_LOCKSTATS]);

    *buf = text;

    return 0;
}
コード例 #6
0
ファイル: vm_uvmexp.c プロジェクト: ColeJackes/pcp
int
do_vm_uvmexp_metrics(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
{
    int		sts;

    if (inst == PM_IN_NULL) {
	if (valid == 0)
	    /* refesh failed */
	    return PM_ERR_AGAIN;

	sts = 1;
	/* cluster and domain already checked, just need item ... */
	switch (pmid_item(mdesc->m_desc.pmid)) {
	    case 1:		/* kernel.all.pswitch */
		atom->ull = stats.swtch;
		break;

	    case 2:		/* kernel.all.syscall */
		atom->ull = stats.syscalls;
		break;

	    case 3:		/* kernel.all.intr */
		atom->ull = stats.intrs;
		break;

	    case 4:		/* mem.util.all */
		atom->ul = ((int64_t)stats.npages*stats.pagesize+512)/1024;
		break;

	    case 5:		/* mem.util.used */
		atom->ul = ((int64_t)(stats.npages-stats.free)*stats.pagesize+512)/1024;
		break;

	    case 6:		/* mem.util.free */
		atom->ul = ((int64_t)stats.free*stats.pagesize+512)/1024;
		break;

	    case 7:		/* mem.util.paging */
		atom->ul = ((int64_t)stats.paging*stats.pagesize+512)/1024;
		break;

	    case 8:		/* mem.util.cached */
		atom->ul = stats.filepages + stats.execpages;
		atom->ul = ((int64_t)atom->ul*stats.pagesize+512)/1024;
		break;

	    case 9:		/* mem.util.wired */
		atom->ul = ((int64_t)stats.wired*stats.pagesize+512)/1024;
		break;

	    case 10:		/* mem.util.active */
		atom->ul = ((int64_t)stats.active*stats.pagesize+512)/1024;
		break;

	    case 11:		/* mem.util.inactive */
		atom->ul = ((int64_t)stats.inactive*stats.pagesize+512)/1024;
		break;

	    case 12:		/* mem.util.zeropages */
		atom->ul = ((int64_t)stats.zeropages*stats.pagesize+512)/1024;
		break;

	    case 13:		/* mem.util.pagedaemonpages */
		atom->ul = ((int64_t)stats.reserve_pagedaemon*stats.pagesize+512)/1024;
		break;

	    case 14:		/* mem.util.kernelpages */
		atom->ul = ((int64_t)stats.reserve_kernel*stats.pagesize+512)/1024;
		break;

	    case 15:		/* mem.util.anonpages */
		atom->ul = ((int64_t)stats.anonpages*stats.pagesize+512)/1024;
		break;

	    case 16:		/* mem.util.filepages */
		atom->ul = ((int64_t)stats.filepages*stats.pagesize+512)/1024;
		break;

	    case 17:		/* mem.util.execpages */
		atom->ul = ((int64_t)stats.execpages*stats.pagesize+512)/1024;
		break;

	    default:
		sts = PM_ERR_PMID;
		break;
	}
    }
    else {
	/*
	 * these metrics don't have an instance domain
	 */
	sts = PM_ERR_INST;
    }

    return sts;
}
コード例 #7
0
ファイル: netif.c プロジェクト: ColeJackes/pcp
int
do_netif_metrics(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
{
    struct if_msghdr	*ifm;
    int			sts;

    if (!valid)
	return 0;

    if (inst != PM_IN_NULL) {
	/*
	 * per-network interface metrics
	 */
	sts = pmdaCacheLookup(indomtab[NETIF_INDOM].it_indom, inst, NULL, (void **)&ifm);
	if (sts == PMDA_CACHE_ACTIVE) {
	    sts = 1;
	    /* cluster and domain already checked, just need item ... */
	    switch (pmid_item(mdesc->m_desc.pmid)) {
		case 0:		/* network.interface.mtu */
		    atom->ull = ifm->ifm_data.ifi_mtu;
		    break;

		case 1:		/* network.interface.up */
		    atom->ul = (ifm->ifm_flags & IFF_UP) == IFF_UP;
		    break;

		case 2:		/* network.interface.baudrate */
		    atom->ull = ifm->ifm_data.ifi_baudrate;
		    break;

		case 3:		/* network.interface.in.bytes */
		    atom->ull = ifm->ifm_data.ifi_ibytes;
		    break;

		case 4:		/* network.interface.in.packets */
		    atom->ull = ifm->ifm_data.ifi_ipackets;
		    break;

		case 5:		/* network.interface.in.mcasts */
		    atom->ull = ifm->ifm_data.ifi_imcasts;
		    break;

		case 6:		/* network.interface.in.errors */
		    atom->ull = ifm->ifm_data.ifi_ierrors;
		    break;

		case 7:		/* network.interface.in.drops */
		    atom->ull = ifm->ifm_data.ifi_iqdrops;
		    break;

		case 8:		/* network.interface.out.bytes */
		    atom->ull = ifm->ifm_data.ifi_obytes;
		    break;

		case 9:		/* network.interface.out.packets */
		    atom->ull = ifm->ifm_data.ifi_opackets;
		    break;

		case 10:	/* network.interface.out.mcasts */
		    atom->ull = ifm->ifm_data.ifi_omcasts;
		    break;

		case 11:	/* network.interface.out.errors */
		    atom->ull = ifm->ifm_data.ifi_oerrors;
		    break;

		case 12:	/* network.interface.out.collisions */
		    atom->ull = ifm->ifm_data.ifi_collisions;
		    break;

		case 13:	/* network.interface.total.bytes */
		    atom->ull = ifm->ifm_data.ifi_ibytes + ifm->ifm_data.ifi_obytes;
		    break;

		case 14:	/* network.interface.total.packets */
		    atom->ull = ifm->ifm_data.ifi_ipackets + ifm->ifm_data.ifi_opackets;
		    break;

		case 15:	/* network.interface.total.mcasts */
		    atom->ull = ifm->ifm_data.ifi_imcasts + ifm->ifm_data.ifi_omcasts;
		    break;

		case 16:	/* network.interface.total.errors */
		    atom->ull = ifm->ifm_data.ifi_ierrors + ifm->ifm_data.ifi_oerrors;
		    break;

		default:
		    sts = PM_ERR_PMID;
		    break;
	    }
	}
	else
	    sts = 0;
    }
    else {
	/*
	 * most network interface metrics don't have an instance domain
	 *
	 * cluster and domain already checked, just need item ...
	 */
	switch (pmid_item(mdesc->m_desc.pmid)) {
	    case 17:		/* hinv.interface */
		atom->ul = valid;
		sts = 1;
		break;

	    default:
		sts = PM_ERR_INST;
		break;
	}
    }

    return sts;
}