- update todo list
- robustify derived metrics loading
- handle delay equally with -h/-L
- fix ext header end time in uninterpolated archive playback mode
---
src/pmrep/TODO | 5 +++--
src/pmrep/pmrep.py | 25 ++++++++++++++++++++-----
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/src/pmrep/TODO b/src/pmrep/TODO
index bd7bd7b..b5cfadd 100644
--- a/src/pmrep/TODO
+++ b/src/pmrep/TODO
@@ -1,12 +1,13 @@
- versioned configuration
- fix get_cmd_line_metrics
+- opt to print archive mark records
- allow defining instances to display
-- possibly default to %c/%X for CSV/stdout
- opt to write cols per row with stdout output
- adjust unit/scale handling to ~match fetchgroup
- -Q/-B/-Y/-W to override per-metric unit/scale/width
- shorten unit display count / sec -> count/s -> c/s if needed
-- -g to output in shortest and/or scientific format (see pmdumptext -G)
+- -g to output in short format (see pmdumptext -F / pmNumberStr)
+- switch using logimport instead pmgui for archive writing (no folios)
- -X to support pmdumptext -X like output (or shorten inst names if needed)
- bash/zsh completion with short help (allow description for sets?)
- handle derived metrics with archives
diff --git a/src/pmrep/pmrep.py b/src/pmrep/pmrep.py
index 06ee3e6..b871d26 100644
--- a/src/pmrep/pmrep.py
+++ b/src/pmrep/pmrep.py
@@ -607,11 +607,26 @@ class PMReporter(object):
# Check the metrics against PMNS, resolve non-leaf metrics
if self.derived:
if self.derived.startswith("/") or self.derived.startswith("."):
- self.context.pmLoadDerivedConfig(self.derived)
+ try:
+ self.context.pmLoadDerivedConfig(self.derived)
+ except pmapi.pmErr as error:
+ sys.stderr.write("Failed to register derived metric:
%s.\n" % str(error))
+ sys.exit(1)
else:
for definition in self.derived.split(","):
- name, expr = definition.split("=")
- self.context.pmRegisterDerived(name.strip(), expr.strip())
+ err = ""
+ try:
+ name, expr = definition.split("=")
+ self.context.pmRegisterDerived(name.strip(),
expr.strip())
+ except ValueError as error:
+ err = "Invalid syntax (expected metric=expression)"
+ except Exception as error:
+ #err = self.context.pmDerivedErrStr() # RHBZ#1286733
+ err = "Unknown reason"
+ finally:
+ if err:
+ sys.stderr.write("Failed to register derived
metric: %s.\n" % err)
+ sys.exit(1)
# Prepare for non-leaf metrics
metrics = self.metrics
self.metrics = OrderedDict()
@@ -762,7 +777,7 @@ class PMReporter(object):
if not self.timefmt:
self.timestamp = 0
- if self.context.type == PM_CONTEXT_HOST:
+ if self.context.type != PM_CONTEXT_ARCHIVE:
self.delay = 1
self.interpol = 1
@@ -989,7 +1004,7 @@ class PMReporter(object):
if self.context.type == PM_CONTEXT_ARCHIVE:
host = self.context.pmGetArchiveLabel().hostname
- if not self.interpol:
+ if not self.interpol and not self.opts.pmGetOptionFinish():
endtime = self.context.pmGetArchiveEnd()
if self.context.type == PM_CONTEXT_HOST:
host = self.source
--
Marko Myllynen
|