static void setup_event_derived_metrics(void) { int sts; if (pmid_flags == 0) { /* * get PMID for event.flags and event.missed * note that pmUnpackEventRecords() will have called * __pmRegisterAnon(), so the anon metrics * should now be in the PMNS */ char *name_flags = "event.flags"; char *name_missed = "event.missed"; if ((sts = pmLookupName(1, &name_flags, &pmid_flags)) < 0) { /* should not happen! */ fprintf(stderr, "Warning: cannot get PMID for %s: %s\n", name_flags, pmErrStr(sts)); /* avoid subsequent warnings ... */ __pmid_int(&pmid_flags)->item = 1; } sts = pmLookupName(1, &name_missed, &pmid_missed); if (sts < 0) { /* should not happen! */ fprintf(stderr, "Warning: cannot get PMID for %s: %s\n", name_missed, pmErrStr(sts)); /* avoid subsequent warnings ... */ __pmid_int(&pmid_missed)->item = 1; } } }
static void myeventdump(pmValueSet *vsp, int idx, int highres) { int r; /* event records */ int p; /* event parameters */ int flags; int numpmid; int nrecords; pmResult **res = NULL; pmHighResResult **hres = NULL; if (highres) { if ((nrecords = pmUnpackHighResEventRecords(vsp, idx, &hres)) < 0) { printf(" pmUnpackEventRecords: %s\n", pmErrStr(nrecords)); return; } } else { if ((nrecords = pmUnpackEventRecords(vsp, idx, &res)) < 0) { printf(" pmUnpackEventRecords: %s\n", pmErrStr(nrecords)); return; } } printf(" %d event records\n", nrecords); if (pmid_flags == 0) { /* * get PMID for event.flags and event.missed * note that pmUnpackEventRecords() will have called * __pmRegisterAnon(), so the anonymous metrics * should now be in the PMNS */ char *name_flags = "event.flags"; char *name_missed = "event.missed"; int sts; sts = pmLookupName(1, &name_flags, &pmid_flags); if (sts < 0) { /* should not happen! */ fprintf(stderr, "Warning: cannot get PMID for %s: %s\n", name_flags, pmErrStr(sts)); /* avoid subsequent warnings ... */ __pmid_int(&pmid_flags)->item = 1; } sts = pmLookupName(1, &name_missed, &pmid_missed); if (sts < 0) { /* should not happen! */ fprintf(stderr, "Warning: cannot get PMID for %s: %s\n", name_missed, pmErrStr(sts)); /* avoid subsequent warnings ... */ __pmid_int(&pmid_missed)->item = 1; } } for (r = 0; r < nrecords; r++) { printf(" "); if (highres) { numpmid = hres[r]->numpmid; __pmPrintHighResStamp(stdout, &hres[r]->timestamp); } else { numpmid = res[r]->numpmid; __pmPrintStamp(stdout, &res[r]->timestamp); } printf(" --- event record [%d]", r); if (numpmid == 0) { printf(" ---\n"); printf(" ==> No parameters\n"); continue; } if (numpmid < 0) { printf(" ---\n"); printf(" Error: illegal number of parameters (%d)\n", numpmid); continue; } flags = 0; if (highres) { for (p = 0; p < numpmid; p++) myvaluesetdump(hres[r]->vset[p], p, &flags); } else { for (p = 0; p < numpmid; p++) myvaluesetdump(res[r]->vset[p], p, &flags); } } if (highres) pmFreeHighResEventResult(hres); if (res) pmFreeEventResult(res); }