int QmcGroup::useDefaultTZ() { if (my.tzFlag == unknownTZ) return -1; return pmUseZone(my.tzDefault); }
int QmcContext::useTZ() { if (my.source->tzHandle() >= 0) return pmUseZone(my.source->tzHandle()); return 0; }
int QmcGroup::useLocalTZ() { if (tzLocal >= 0) { int sts = pmUseZone(tzLocal); if (sts > 0) { my.tzFlag = localTZ; my.tzDefault = tzLocal; if (pmDebug & DBG_TRACE_PMC) { QTextStream cerr(stderr); cerr << "QmcGroup::useTZ: Using timezone of host \"localhost\"" << endl; } } return sts; } return tzLocal; }
void QmcSource::retryConnect(int type, QString &source) { int oldTZ; int oldContext; int offset; int sts; char *tzs; QString name; QString hostSpec; switch (type) { case PM_CONTEXT_LOCAL: my.desc = "Local context"; my.host = my.source = localHost; my.proxy = ""; break; case PM_CONTEXT_HOST: my.desc = "host \""; my.desc.append(source); my.desc.append(QChar('\"')); my.host = source; my.proxy = getenv("PMPROXY_HOST"); if ((offset = my.host.indexOf('?')) >= 0) { my.attrs = my.host; my.attrs.remove(0, offset+1); my.host.truncate(offset); name = my.attrs.section(QString("container="), -1); if (name != QString::null && (offset = name.indexOf(',')) > 0) name.truncate(offset); my.context_container = name; } if ((offset = my.host.indexOf('@')) >= 0) { my.proxy = my.host; my.proxy.remove(0, offset+1); } my.source = my.host; break; case PM_CONTEXT_ARCHIVE: my.desc = "archive \""; my.desc.append(source); my.desc.append(QChar('\"')); my.source = source; my.proxy = ""; break; } oldContext = pmWhichContext(); hostSpec = source; my.status = pmNewContext(type | my.flags, (const char *)hostSpec.toAscii()); if (my.status >= 0) { my.handles.append(my.status); // Fetch the server-side host name for this context, properly as of pcp 3.8.3+. my.context_hostname = pmGetContextHostName(my.status); // NB: may leak memory if (my.context_hostname == "") // may be returned for errors or PM_CONTEXT_LOCAL my.context_hostname = localHost; if (my.type == PM_CONTEXT_ARCHIVE) { pmLogLabel lp; sts = pmGetArchiveLabel(&lp); if (sts < 0) { pmprintf("%s: Unable to obtain log label for \"%s\": %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(sts)); my.host = "unknown?"; my.status = sts; goto done; } else { my.host = lp.ll_hostname; my.start = lp.ll_start; } sts = pmGetArchiveEnd(&my.end); if (sts < 0) { pmprintf("%s: Unable to determine end of \"%s\": %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(sts)); my.status = sts; goto done; } } else { gettimeofday(&my.start, NULL); my.end = my.start; } if (pmDebug & DBG_TRACE_PMC) { QTextStream cerr(stderr); cerr << "QmcSource::QmcSource: Created context " << my.handles.last() << " to " << my.desc << endl; } oldTZ = pmWhichZone(&tzs); my.tz = pmNewContextZone(); if (my.tz < 0) pmprintf("%s: Warning: Unable to obtain timezone for %s: %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(my.tz)); else { sts = pmWhichZone(&tzs); if (sts >= 0) my.timezone = tzs; else pmprintf("%s: Warning: Unable to obtain timezone for %s: %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(sts)); } if (oldTZ >= 0) { sts = pmUseZone(oldTZ); if (sts < 0) { pmprintf("%s: Warning: Unable to switch timezones." " Using timezone for %s: %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(sts)); } } } else if (pmDebug & DBG_TRACE_PMC) { QTextStream cerr(stderr); cerr << "QmcSource::QmcSource: Context to " << source << " failed: " << pmErrStr(my.status) << endl; } done: sourceList.append(this); if (oldContext >= 0) { sts = pmUseContext(oldContext); if (sts < 0) { pmprintf("%s: Warning: Unable to switch contexts." " Using context to %s: %s\n", pmProgname, (const char *)my.desc.toAscii(), pmErrStr(sts)); } } }