pcp
[Top] [All Lists]

pmrep: minor updates

To: pcp developers <pcp@xxxxxxxxxxx>
Subject: pmrep: minor updates
From: Marko Myllynen <myllynen@xxxxxxxxxx>
Date: Wed, 2 Dec 2015 22:54:39 +0200
Delivered-to: pcp@xxxxxxxxxxx
Organization: Red Hat
Reply-to: myllynen@xxxxxxxxxx
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0
- 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

<Prev in Thread] Current Thread [Next in Thread>
  • pmrep: minor updates, Marko Myllynen <=