pcp
[Top] [All Lists]

Re: pmrep csv output depends on py version

To: Nathan Scott <nathans@xxxxxxxxxx>
Subject: Re: pmrep csv output depends on py version
From: Marko Myllynen <myllynen@xxxxxxxxxx>
Date: Mon, 7 Dec 2015 23:35:49 +0200
Cc: PCP <pcp@xxxxxxxxxxx>
Delivered-to: pcp@xxxxxxxxxxx
In-reply-to: <1023369628.36547138.1449450592344.JavaMail.zimbra@xxxxxxxxxx>
Organization: Red Hat
References: <1023369628.36547138.1449450592344.JavaMail.zimbra@xxxxxxxxxx>
Reply-to: myllynen@xxxxxxxxxx
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0
Hi,

On 2015-12-07 03:09, Nathan Scott wrote:
> Hi Marko,
> 
> I'm seeing test qa/1069 produce different output depending on the
> python version (2 vs 3).  It looks like we're not using precision
> (self.precision, that is) in this case, should we be?  Maybe some
> judicious use of "round(value, self.precision)" might fix this?

yes, and good idea but with round() I'm seeing e.g. .120 to be
printed as .12, format() always prints according to the precision.


Finetune CSV output across Python versions.

Tweak some old comments while at it.

>From 6c71fcfbfb30adf44900f77d4bdc4fb1de16cdc1 Mon Sep 17 00:00:00 2001
From: Marko Myllynen <myllynen@xxxxxxxxxx>
Date: Mon, 7 Dec 2015 22:07:18 +0200
Subject: [PATCH 6/9] fix csv

---
 src/pmrep/pmrep.py | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/pmrep/pmrep.py b/src/pmrep/pmrep.py
index e3cef6e..773e368 100644
--- a/src/pmrep/pmrep.py
+++ b/src/pmrep/pmrep.py
@@ -1125,7 +1125,7 @@ class PMReporter(object):
                 sys.stdout.write("...\n(Ctrl-C to stop)\n")
 
     def write_archive_pmgui(self):
-        """ Write an archive entry using pmgui """
+        """ Write archive using pmgui """
         # We're not a graphical app, disable popups
         os.environ['PCP_XCONFIRM_PROG'] = '/bin/true'
 
@@ -1185,7 +1185,7 @@ class PMReporter(object):
         sys.stdout.write("\rComplete: 100%.\n")
 
     def write_archive_pmi(self, timestamp, values):
-        """ Write an archive entry using pmi """
+        """ Write an archive record using pmi """
         if timestamp == None and values == None:
             # Complete and close
             self.log.pmiEnd()
@@ -1232,12 +1232,12 @@ class PMReporter(object):
             self.log.pmiWrite(self.ctstamp.tv_sec, self.ctstamp.tv_usec)
 
     def write_csv(self, timestamp, values):
-        """ Write a line in CSV format """
+        """ Write results in CSV format """
         if timestamp == None and values == None:
             # Silent goodbye
             return
 
-        # CSV is always raw not rate
+        # Print the results
         for i, metric in enumerate(self.metrics):
             ins = 1 if self.insts[i][0][0] == PM_IN_NULL else 
len(self.insts[i][0])
             for j in range(ins):
@@ -1249,7 +1249,11 @@ class PMReporter(object):
                     line += timestamp + self.delimiter
                 line += str(self.metrics[metric][0]) + self.delimiter
                 line += str(self.metrics[metric][2][0]) + self.delimiter
-                line += str(list(values[i])[j][2])
+                if type(list(values[i])[j][2]) is float:
+                    fmt = "." + str(self.precision) + "f"
+                    line += format(list(values[i])[j][2], fmt)
+                else:
+                    line += str(list(values[i])[j][2])
                 print(line)
 
     def write_stdout(self, timestamp, values):
@@ -1347,7 +1351,7 @@ class PMReporter(object):
                 self.zabbix_metrics = []
             return
 
-        # Zabbix is always raw not rate
+        # Collect the results
         ts = float(self.ctstamp)
         if self.zabbix_prevsend == None:
             self.zabbix_prevsend = ts
@@ -1360,6 +1364,7 @@ class PMReporter(object):
                 val = str(list(values[i])[j][2])
                 self.zabbix_metrics.append(ZabbixMetric(self.zabbix_host, key, 
val, ts))
 
+        # Send when need
         if self.context.type == PM_CONTEXT_ARCHIVE:
             if len(self.zabbix_metrics) >= self.zabbix_interval:
                 send_to_zabbix(self.zabbix_metrics, self.zabbix_server, 
self.zabbix_port)

Thanks,

-- 
Marko Myllynen

<Prev in Thread] Current Thread [Next in Thread>