QmcMetric * QmcGroup::addMetric(char const *string, double theScale, bool active) { QmcMetric *metric = new QmcMetric(this, string, theScale, active); if (metric->status() >= 0) metric->context()->addMetric(metric); return metric; }
QmcMetric * QmcGroup::addMetric(pmMetricSpec *theMetric, double theScale, bool active) { QmcMetric *metric = new QmcMetric(this, theMetric, theScale, active); if (metric->status() >= 0) metric->context()->addMetric(metric); return metric; }
void Launch::addMetric(const QmcMetric &metric, const ColorScale &scale, int instance, bool useSocks) { #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_APPL1) { cerr << "Launch::addMetric(2): Adding "; metric.dump(cerr, true, instance); cerr << " (" << _metricCount << ')' << endl; } #endif QmcSource source = metric.context()->source(); QByteArray ba; ba = metric.instName(instance).toLocal8Bit(); addMetric(metric.context()->handle(), source.source(), source.host(), metric.name(), metric.hasInstances() == 0 ? NULL : ba.data(), metric.desc(), scale, useSocks); }
static void dumpHeader() { static bool fullOnce = false; QmcMetric *metric; bool instFlag = false; QString noneStr = "none"; QString srcStr = "Source"; QString metricStr = "Metric"; QString instStr = "Inst"; QString normStr = "Normal"; QString unitStr = "Units"; QString columnStr = "Column"; const char *timeStr; int m; int i; int c; int v; int p; int len = 0; if (niceFlag) { struct timeval pos = { 0, 0 }; timeStr = dumpTime(pos); len = strlen(timeStr); } if (fullFlag) { fullOnce = true; for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; for (i = 0; i < metric->numValues(); i++, v++) { cout << '[' << qSetFieldWidth(2) << v << qSetFieldWidth(0) << "] " << metric->spec(sourceFlag, true, i) << endl; } } cout << endl; } if (fullOnce) { if (timeFlag) { if (len < columnStr.length()) { columnStr.remove(len, columnStr.length() - len); } cout << qSetFieldWidth(len) << columnStr << qSetFieldWidth(0) << delimiter; } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; for (i = 0; i < metric->numValues(); i++) { cout << qSetFieldWidth(width) << v << qSetFieldWidth(0); if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } if (niceFlag && sourceFlag) { if (timeFlag) { if (len < srcStr.length()) { srcStr.remove(len, srcStr.length() - len); } cout << qSetFieldWidth(len) << srcStr << qSetFieldWidth(0) << delimiter; } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; QString const& str = metric->context()->source().host(); strncpy(buffer, (const char *)str.toAscii(), width); buffer[width] = '\0'; for (i = 0; i < metric->numValues(); i++) { cout << qSetFieldWidth(width) << buffer << qSetFieldWidth(0); if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } if (metricFlag || (sourceFlag && !niceFlag)) { if (timeFlag) { if (niceFlag) { if (len < metricStr.length()) { metricStr.remove(len, metricStr.length() - len); } cout << qSetFieldWidth(len) << metricStr << qSetFieldWidth(0); cout << delimiter; } else cout << "Time" << delimiter; } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; if (niceFlag && !instFlag && metric->hasInstances()) instFlag = true; for (i = 0; i < metric->numValues(); i++) { if (niceFlag) { QString const &str = metric->spec(false, false, i); p = str.length() - width; if (p > 0) { for (c = (p - 1 > 0 ? p - 1 : 0); c < str.length(); c++) { if (str[c] == '.') { c++; break; } } if (c < str.length()) cout << qSetFieldWidth(width) << ((const char *)str.toAscii() + c) << qSetFieldWidth(0); else cout << qSetFieldWidth(width) << ((const char *)str.toAscii() + p) << qSetFieldWidth(0); } else { cout << qSetFieldWidth(width) << str << qSetFieldWidth(0); } } else cout << metric->spec(sourceFlag, true, i); if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } if (instFlag) { if (timeFlag) { if (niceFlag) { if (len < instStr.length()) { instStr.remove(len, instStr.length() - len); } cout << qSetFieldWidth(len) << instStr << qSetFieldWidth(0) << delimiter; } else { cout << qSetFieldWidth(len) << errStr << qSetFieldWidth(0) << delimiter; } } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; for (i = 0; i < metric->numValues(); i++) { if (metric->hasInstances()) { QString const &str = metric->instName(i); strncpy(buffer, (const char *)str.toAscii(), width); buffer[width] = '\0'; cout << qSetFieldWidth(width) << buffer << qSetFieldWidth(0); } else cout << qSetFieldWidth(width) << "n/a" << qSetFieldWidth(0); if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } if (normFlag) { if (timeFlag) { if (niceFlag) { if (len < normStr.length()) { normStr.remove(len, normStr.length() - len); } cout << qSetFieldWidth(len) << normStr << qSetFieldWidth(0) << delimiter; } else cout << errStr << delimiter; } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; for (i = 0; i < metric->numValues(); i++) { if (shortFlag) cout << qSetRealNumberPrecision(precision) << qSetFieldWidth(width) << metric->scale() << qSetFieldWidth(0); else if (descFlag) cout << qSetFieldWidth(width) << QmcMetric::formatNumber(metric->scale()) << qSetFieldWidth(0); else cout << fixed << qSetRealNumberPrecision(precision) << qSetFieldWidth(width) << metric->scale() << qSetFieldWidth(0); if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } if (unitFlag) { if (timeFlag) { if (niceFlag) { if (len < unitStr.length()) { unitStr.remove(len, unitStr.length() - len); } cout << qSetFieldWidth(len) << unitStr << qSetFieldWidth(0) << delimiter; } else cout << noneStr << delimiter; } for (m = 0, v = 1; m < metrics.size(); m++) { metric = metrics[m]; QString const &str = (niceFlag ? metric->desc().shortUnits() : metric->desc().units()); for (i = 0; i < metric->numValues(); i++) { if (niceFlag) if (str.length() > width) cout << qSetFieldWidth(width) << ((const char *)str.toAscii() + str.length() - width) << qSetFieldWidth(0); else cout << qSetFieldWidth(width) << str << qSetFieldWidth(0); else cout << str; if (v < numValues) { cout << delimiter; v++; } } } cout << endl; } }