pcp
[Top] [All Lists]

Re: pmrep python3 buglet

To: Nathan Scott <nathans@xxxxxxxxxx>
Subject: Re: pmrep python3 buglet
From: Marko Myllynen <myllynen@xxxxxxxxxx>
Date: Wed, 2 Dec 2015 10:18:00 +0200
Cc: pcp developers <pcp@xxxxxxxxxxx>
Delivered-to: pcp@xxxxxxxxxxx
In-reply-to: <1971992521.32468346.1449039231736.JavaMail.zimbra@xxxxxxxxxx>
Organization: Red Hat
References: <1971992521.32468346.1449039231736.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-02 08:53, Nathan Scott wrote:
> 
> Hmm, not sure how I managed to overlook this failure before,
> but looks like there's another python3 issue or two still
> lurking in pmrep  (I fixed a few, but, hmm ... missed this).
> 
> qa$ diff 1069.out 1069.out.bad
> 2a3,12
>> Traceback (most recent call last):
>>   File "/bin/pmrep", line 1333, in <module>
>>     P.execute()
>>   File "/bin/pmrep", line 830, in execute
>>     self.report(self.ctstamp, values)
>>   File "/bin/pmrep", line 935, in report
>>     self.write_stdout(tstamp, values)
>>   File "/bin/pmrep", line 1229, in write_stdout
>>     (self.prevvals == None or self.prevvals[i][j][2] == NO_VAL):
>> TypeError: 'dict_values' object does not support indexing
> 
> Any clues?  Otherwise, I'll take a look tomorrow.

yes, this is very recently added check, I just forgot to test with
Python 3, the fix is like in the other such cases:

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

diff --git a/src/pmrep/pmrep.py b/src/pmrep/pmrep.py
index 2ca4c4f..84ee89a 100644
--- a/src/pmrep/pmrep.py
+++ b/src/pmrep/pmrep.py
@@ -1166,12 +1166,12 @@ class PMReporter(object):
 
                 # Raw or rate
                 if not self.metrics[metric][3] and \
-                  (self.prevvals == None or self.prevvals[i][j][2] == NO_VAL):
+                  (self.prevvals == None or list(self.prevvals[i])[j][2] == 
NO_VAL):
                     # Rate not yet possible
                     value = NO_VAL
                 elif self.metrics[metric][3] or \
                   self.descs[i].sem != PM_SEM_COUNTER or \
-                  values[i][j][2] == NO_VAL:
+                  list(values[i])[j][2] == NO_VAL:
                     # Raw
                     value = list(values[i])[j][2]
                 else:
@@ -1183,7 +1183,7 @@ class PMReporter(object):
                         else:
                             scale = pow(1000, (PM_TIME_SEC - 
self.descs[i].contents.units.scaleTime))
                     delta = scale * (float(self.ctstamp) - float(self.ptstamp))
-                    value = (values[i][j][2] - self.prevvals[i][j][2]) / delta 
if delta else 0
+                    value = (list(values[i])[j][2] - 
list(self.prevvals[i])[j][2]) / delta if delta else 0
 
                 # Make sure the value fits
                 if type(value) is int or type(value) is long:

Thanks,

-- 
Marko Myllynen

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