nathans pushed to pcp (f21). "Merge branch 'master' into f21"

notifications at fedoraproject.org notifications at fedoraproject.org
Thu Apr 16 02:29:59 UTC 2015


>From 1598a079d852be88974110e7e55a2eb2f1fcfa52 Mon Sep 17 00:00:00 2001
From: Nathan Scott <nathans at redhat.com>
Date: Thu, 16 Apr 2015 12:28:26 +1000
Subject: Remove no-longer-used patch file


diff --git a/bz1194324.patch b/bz1194324.patch
deleted file mode 100644
index 55cedb3..0000000
--- a/bz1194324.patch
+++ /dev/null
@@ -1,3411 +0,0 @@
-diff -Naurp pcp-3.10.2.orig/configure pcp-3.10.2/configure
---- pcp-3.10.2.orig/configure	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/configure	2015-02-23 21:24:36.653658342 +1100
-@@ -798,6 +798,7 @@ qmake
- enable_qt
- qt_release
- QMAKE
-+pcp_python_prog
- enable_python3
- enable_python
- PYTHON3
-@@ -6229,6 +6230,14 @@ done
- fi
- 
- 
-+if test "$enable_python3" = "true"
-+then
-+    pcp_python_prog=$PYTHON3
-+else
-+    pcp_python_prog=$PYTHON
-+fi
-+
-+
- qmake=$QMAKE
- enable_qt=false
- qt_release=release
-diff -Naurp pcp-3.10.2.orig/configure.ac pcp-3.10.2/configure.ac
---- pcp-3.10.2.orig/configure.ac	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/configure.ac	2015-02-23 21:24:36.655658340 +1100
-@@ -534,6 +534,15 @@ AS_IF([test "x$do_python3" != "xno"], [
- ])
- AC_SUBST(enable_python3)
- 
-+dnl choose the prefered python executable (py2 -> py3 transtion)
-+if test "$enable_python3" = "true"
-+then
-+    pcp_python_prog=$PYTHON3
-+else
-+    pcp_python_prog=$PYTHON
-+fi
-+AC_SUBST(pcp_python_prog)
-+
- qmake=$QMAKE
- enable_qt=false
- qt_release=release
-diff -Naurp pcp-3.10.2.orig/man/man1/pmatop.1 pcp-3.10.2/man/man1/pmatop.1
---- pcp-3.10.2.orig/man/man1/pmatop.1	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/man/man1/pmatop.1	2015-02-23 21:21:18.198838491 +1100
-@@ -1,45 +1,50 @@
-+'\"macro stdmacro
-+.\"
-+.\" Copyright (c) 2014-2015 Red Hat.
-+.\" 
-+.\" This program is free software; you can redistribute it and/or modify it
-+.\" under the terms of the GNU General Public License as published by the
-+.\" Free Software Foundation; either version 2 of the License, or (at your
-+.\" option) any later version.
-+.\" 
-+.\" This program is distributed in the hope that it will be useful, but
-+.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-+.\" or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-+.\" for more details.
-+.\"
- .TH PMATOP 1 "PCP" "Performance Co-Pilot"
- .SH NAME
--.B pmatop 
--\- System & Process Monitor
-+\f3pmatop\f1 \- System and Process Monitor
- .SH SYNOPSIS
- Interactive usage:
- .P
- .B pmatop
--[\-g|\-m] [\-L linelen] [\-h host]
--[
--.I interval
--[
--.I samples
--]]
-+[\-g|\-m] [\-L \f2linelen\f1] [\-h \f2host\f1 | \-a \f2archive\f1]
-+[\f2interval\f1 [\f2samples\f1]]
- .P
--Writing and reading raw logfiles:
-+Writing and reading PCP archive folios:
- .P
--.B pmatop
--\-w
--.I rawfile
--[
--.I interval
--[
--.I samples
--]]
-+.BR pmatop
-+\-w \f2rawfile\f1 [\f2interval\f1 [\f2samples\f1]]
- .br
- .B pmatop
--\-r [
--.I rawfile
--] [\-g|\-m] [\-L linelen] [\-h host]
-+\-r [\f2rawfile\f1] [\-g|\-m] [\-L \f2linelen\f1]
- .SH DESCRIPTION
- The program
--.I pmatop
-+.B pmatop
- is an interactive monitor to view the load on a Linux system.
- It shows the occupation of the most critical hardware resources 
- (from a performance point of view) on system level, i.e. cpu, memory, disk
- and network.  By default metrics from the local host are
- displayed, but a different host may be specified with the 
--.I [-h host]
--option.  It is modeled after
-+.IR \-h/\-\-host
-+option, or from a PCP archive using the
-+.IR \-a/\-\-archive
-+option.
-+.PP
-+It is modeled on
- .BR atop (1)
--and provides a showcase for the variety of data available via
-+and provides a showcase for the variety of data available from
- .BR pmcd (1).
- .br
- .PP
-@@ -57,33 +62,33 @@ The intervals are repeated till the numb
- in interactive mode.
- .PP
- When 
--.I pmatop
-+.B pmatop
- is started, it checks whether the standard output channel is connected to a
- screen, or to a file/pipe. In the first case it produces screen control 
- codes (via the ncurses library) and behaves interactively; in the second case
- it produces flat ASCII-output.
- .PP
- In interactive mode, the output of 
--.I pmatop
-+.B pmatop
- scales dynamically to the current dimensions of the screen/window.
- .PP
- Furthermore in interactive mode the output of 
--.I pmatop
-+.B pmatop
- can be controlled by pressing particular keys.
- However it is also possible to specify such key as
--.B flag
-+.I flag
- on the command line. In that case
--.I pmatop
-+.B pmatop
- switches to the indicated mode on beforehand; this mode can 
- be modified again interactively. Specifying such key as flag is especially
- useful when running
--.I pmatop
-+.B pmatop
- with output to a pipe or file (non-interactively).
- These flags are the same as the keys that can be pressed in interactive
- mode (see section INTERACTIVE COMMANDS).
- .SH OUTPUT FORMAT
- The output of 
--.I pmatop
-+.B pmatop
- consists of system level and process level information.  The system
- level information consists of the following output lines:
- .PP
-@@ -146,7 +151,7 @@ The remaining lines are one line per pro
- described below.
- .SH INTERACTIVE COMMANDS
- When running
--.I pmatop
-+.B pmatop
- interactively (no output redirection), keys can be pressed to control the
- output.
- .PP
-@@ -191,16 +196,16 @@ Request for help information (also the k
- .B z
- The pause key can be used to freeze the current situation in order to
- investigate the output on the screen. While 
--.I pmatop
-+.B pmatop
- is paused, the keys described above can be pressed to show other
- information about the current list of processes.
- Whenever the pause key is pressed again,
--pmatop will continue with a next sample.
-+.B pmatop
-+will continue with a next sample.
- .PP
- .SH "SEE ALSO"
- .BR PCPIntro (1),
--.BR collectl (1),
--.BR perl (1),
-+.BR atop (1),
- .BR python (1),
- .BR pmlogger (1),
- .BR pmcd (1),
-@@ -209,4 +214,3 @@ pmatop will continue with a next sample.
- .BR PMAPI (3),
- and
- .BR pcp.conf (5).
--
-diff -Naurp pcp-3.10.2.orig/qa/553 pcp-3.10.2/qa/553
---- pcp-3.10.2.orig/qa/553	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/553	2015-02-23 21:24:36.655658340 +1100
-@@ -10,6 +10,7 @@ echo "QA output created by $seq"
- 
- . ./common.python
- 
-+python_path=`which $python`
- pmda_path="$PCP_PMDAS_DIR/gluster"
- pmda_script="$pmda_path/pmdagluster.python"
- test -f "$pmda_script" || _notrun "pmdagluster not supported"
-@@ -27,6 +28,9 @@ _filter()
- 	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
-         -e '/pmResult/s/ .* numpmid/ ... numpmid/' \
-         -e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*/TIMESTAMP/' \
-+	-e "s;$python_path;\$PCP_PYTHON_PROG;" \
-+	-e "s;$python;python;" \
-+    #end
- 
-     test -f gluster.log && cat gluster.log >> $seq.full
- }
-@@ -49,13 +53,13 @@ PCP_PYTHON_PMNS=root $python "$pmda_scri
- 
- echo "== Testing volume instance domain" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- instance $domain.0
- End-of-File
- 
- echo "== Testing volume information metrics" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- desc gluster.volume.dist.count
- desc gluster.volume.stripe.count
-@@ -68,7 +72,7 @@ End-of-File
- echo "== Testing volume control metric store" | tee -a $seq.full
- $sudo rm -f $tmp.start $tmp.stop
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- desc gluster.volume.profile
- fetch gluster.volume.profile
-@@ -81,13 +85,13 @@ $sudo rm -f $tmp.start $tmp.stop
- 
- echo "== Testing brick instance domain" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- instance $domain.1
- End-of-File
- 
- echo "== Testing brick throughput metrics" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- desc gluster.brick.read_bytes
- fetch gluster.brick.read_bytes
-@@ -97,7 +101,7 @@ End-of-File
- 
- echo "== Testing brick file operation latency metrics" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- desc gluster.brick.latency.getxattr.avg
- desc gluster.brick.latency.getxattr.min
-diff -Naurp pcp-3.10.2.orig/qa/553.out pcp-3.10.2/qa/553.out
---- pcp-3.10.2.orig/qa/553.out	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/553.out	2015-02-23 21:24:36.656658340 +1100
-@@ -1,14 +1,14 @@
- QA output created by 553
- == Testing volume instance domain
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> instance 118.0
- pmInDom: 118.0
- [  0] inst: 0 name: "gv0"
- dbpmda> 
- == Testing volume information metrics
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> getdesc on
- dbpmda> desc gluster.volume.dist.count
- PMID: 118.2.1
-@@ -39,8 +39,8 @@ pmResult ... numpmid: 1
-     inst [0 or ???] value 3
- dbpmda> 
- == Testing volume control metric store
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> getdesc on
- dbpmda> desc gluster.volume.profile
- PMID: 118.2.0
-@@ -67,15 +67,15 @@ dbpmda>
- start gv0 - test 553
- stop gv0 - test 553
- == Testing brick instance domain
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> instance 118.1
- pmInDom: 118.1
- [  0] inst: 0 name: "smash.scott.net.au:/export/brick1/glusterdev1"
- dbpmda> 
- == Testing brick throughput metrics
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> getdesc on
- dbpmda> desc gluster.brick.read_bytes
- PMID: 118.0.0
-@@ -97,8 +97,8 @@ pmResult ... numpmid: 1
-     inst [0 or ???] value 24
- dbpmda> 
- == Testing brick file operation latency metrics
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/gluster/pmdagluster.python
- dbpmda> getdesc on
- dbpmda> desc gluster.brick.latency.getxattr.avg
- PMID: 118.1.74
-diff -Naurp pcp-3.10.2.orig/qa/718 pcp-3.10.2/qa/718
---- pcp-3.10.2.orig/qa/718	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/718	2015-02-23 21:24:36.656658340 +1100
-@@ -2,35 +2,40 @@
- # PCP QA Test No. 718
- # Exercise dbpmda use with the Python implementation of pmdasimple.
- #
--# Copyright (c) 2013 Red Hat.
-+# Copyright (c) 2013,2015 Red Hat.
- #
- 
- seq=`basename $0`
- echo "QA output created by $seq"
- 
- . ./common.python
-+
- $python -c "from pcp import pmda" >/dev/null 2>&1
- [ $? -eq 0 ] || _notrun "python pcp pmda module not installed"
- test -f "$PCP_PMDAS_DIR/simple/pmdasimple.python"
- [ $? -eq 0 ] || _notrun "python simple pmda not yet installed"
- 
-+python_path=`which $python`
- trap "rm -f $tmp.*; exit" 0 1 2 3 15
- 
- _filter()
- {
-     sed \
- 	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
-+	-e "s;$python_path;\$PCP_PYTHON_PROG;" \
-+	-e "s;$python;python;" \
-     | _filter_dumpresult
- }
- 
- domain=253
-+
- # ensure help text exists
- cd "$PCP_PMDAS_DIR/simple"
- $sudo ./Install </dev/null >/dev/null 2>&1
- 
- # real QA test starts here
- $sudo dbpmda -n root -ie <<End-of-File 2>&1 | _filter
--open pipe $python pmdasimple.python
-+open pipe $python_path pmdasimple.python
- getdesc on
- desc simple.numfetch
- fetch simple.numfetch
-diff -Naurp pcp-3.10.2.orig/qa/718.out pcp-3.10.2/qa/718.out
---- pcp-3.10.2.orig/qa/718.out	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/718.out	2015-02-23 21:24:36.656658340 +1100
-@@ -1,6 +1,6 @@
- QA output created by 718
--dbpmda> open pipe /usr/bin/python pmdasimple.python
--Start python PMDA: /usr/bin/python pmdasimple.python
-+dbpmda> open pipe $PCP_PYTHON_PROG pmdasimple.python
-+Start python PMDA: $PCP_PYTHON_PROG pmdasimple.python
- dbpmda> getdesc on
- dbpmda> desc simple.numfetch
- PMID: 253.0.0
-diff -Naurp pcp-3.10.2.orig/qa/722 pcp-3.10.2/qa/722
---- pcp-3.10.2.orig/qa/722	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/722	2015-02-23 21:21:18.199838490 +1100
-@@ -2,7 +2,7 @@
- # PCP QA Test No. 722
- # Exercise the python pmatop implementation
- #
--# Copyright (c) 2013-2014 Red Hat.
-+# Copyright (c) 2013-2015 Red Hat.
- #
- 
- seq=`basename $0`
-@@ -68,18 +68,44 @@ if [ $? -ne 0 ]; then
- fi
- 
- # real QA test starts here
--$PMATOP -r $here/src/pmatop-log.folio -m 1 1 2>&1 | tee -a $tmp.out | redact_header | remove_extra_whitespace
--$PMATOP -r $here/src/pmatop-log.folio -g 1 1 2>&1 | tee -a $tmp.out | redact_header | remove_extra_whitespace
-+rm -f test.pmatop $tmp.folio $tmp.direct
- 
--rm -f test.pmatop
-+# verify mkaf(1) archive folios
-+echo "generic metrics mode" >> $tmp.folio
-+$PMATOP -r $here/src/pmatop-log.folio -m 1 1 2>&1 | tee -a $tmp.folio | redact_header | remove_extra_whitespace
-+echo "memory metrics mode" >> $tmp.folio
-+$PMATOP -r $here/src/pmatop-log.folio -g 1 1 2>&1 | tee -a $tmp.folio | redact_header | remove_extra_whitespace
-+cat $tmp.folio >> $here/seq.full
-+echo "== Archive folio testing complete"
-+
-+# verify pmlogger archive logs
-+echo "generic metrics mode" >> $tmp.direct
-+$PMATOP -a $here/src/pmatop-log -m 1 1 2>&1 | tee -a $tmp.direct | redact_header | remove_extra_whitespace
-+echo "memory metrics mode" >> $tmp.direct
-+$PMATOP -a $here/src/pmatop-log -g 1 1 2>&1 | tee -a $tmp.direct | redact_header | remove_extra_whitespace
-+cat $tmp.direct >> $here/seq.full
-+echo "== Direct archive testing complete"
-+
-+echo "== Comparing direct to folio output"
-+diff $tmp.folio $tmp.direct
-+if [ $? -eq 0 ]; then
-+    echo "  Output compares exactly - good"
-+else
-+    echo "  Folio differs to direct access - bad"
-+fi
-+echo "== Output comparisons all completed"
-+
-+# verify creating archive folios
- $PMATOP -w test.pmatop 0.2 10
- if pmafm test.pmatop  check | grep -q OK
--then echo pmatop log creation OK | tee -a $tmp.out 2>&1
--else echo pmatop log creation FAILED | tee -a $tmp.out 2>&1; fi
-+then echo pmatop log creation OK | tee -a $tmp.write 2>&1
-+else echo pmatop log creation FAILED | tee -a $tmp.write 2>&1; fi
-+cat $tmp.write >> $here/seq.full
-+echo "== Live writer testing complete"
- 
--cat $tmp.out >>$here/$seq.full
-+# finished, clean up
-+eval `pmafm test.pmatop remove`
- 
- # success, all done
--eval `pmafm test.pmatop remove`
- status=0
- exit
-diff -Naurp pcp-3.10.2.orig/qa/722.out pcp-3.10.2/qa/722.out
---- pcp-3.10.2.orig/qa/722.out	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/722.out	2015-02-23 21:21:18.200838489 +1100
-@@ -447,4 +447,458 @@ PID SYSCPU USRCPU VGROW RGROW RUID THR S
- 9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
- 9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
- 9 9s 9s 9K 9 root 9 -- - S 9% ssh-agent
-+== Archive folio testing complete
-+ATOP - Day Month 9 9:9:9 9 9:9:9 elapsed
-+PRC | sys 9h9m | user 9d | #proc 9 | #zombie 9
-+CPU | sys 9% | user 9% | irq 9% | idle 9% | wait 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+CPL | avg9 .9 | avg9 .9 | avg9 .9 | csw 9 | intr 9 |
-+MEM | tot 9G | free 9M | cache 9G | buff 9M | slab 9G |
-+SWP | tot 9G | free 9G | | vmcom 9G | vmlim 9G |
-+PAG | scan 9 | steal 9 | stall 9 | swin 9 | swout 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+DSK | sda | busy 9% | read 9 | write 9 | avio 9 ms |
-+NET | transport | tcpi 9M | tcpo 9M | udpi 9M | udpo 9M |
-+NET | network | ipi 9M | ipo 9M | ipfrw 9M | deliv 9M |
-+NET | lo | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+NET | em9 | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+NET | wlan9 | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+PID VDATA VSTACK VGROW RGROW VSIZE RSIZE MEM CMD
-+9 9G 9K 9G 9M 9G 9M 9% firefox
-+9 9M 9K 9G 9M 9G 9M 9% plugin-containe
-+9 9K 9K 9M 9K 9M 9K 9% Xorg
-+9 9G 9K 9G 9M 9G 9M 9% gnome-shell
-+9 9G 9K 9G 9M 9G 9M 9% thunderbird
-+9 9M 9K 9M 9K 9M 9K 9% ibus-daemon
-+9 9M 9K 9M 9K 9M 9K 9% pulseaudio
-+9 9K 9K 9M 9K 9M 9K 9% ibus-x9
-+9 9M 9K 9M 9M 9M 9M 9% emacs
-+9 9M 9K 9M 9K 9M 9K 9% xchat
-+9 9M 9K 9M 9K 9M 9K 9% polkitd
-+9 9M 9K 9M 9K 9M 9K 9% vino-server
-+9 9M 9K 9M 9K 9M 9K 9% gnome-terminal
-+9 9M 9K 9G 9K 9G 9K 9% gnome-settings-
-+9 9K 9K 9K 9K 9K 9K 9% dbus-daemon
-+9 9 9 9 9 9 9 9% irq/9-iwlwifi
-+9 9M 9K 9M 9K 9M 9K 9% NetworkManager
-+9 9K 9K 9M 9K 9M 9K 9% ibus-engine-sim
-+9 9 9 9 9 9 9 9% rcu_sched
-+9 9K 9K 9K 9K 9K 9K 9% cups-polld
-+9 9M 9K 9M 9K 9M 9K 9% ibus-ui-gtk9
-+9 9K 9K 9M 9K 9M 9K 9% cupsd
-+9 9M 9K 9M 9K 9M 9K 9% nm-applet
-+9 9K 9K 9K 9K 9K 9K 9% irqbalance
-+9 9M 9K 9M 9K 9M 9K 9% upowerd
-+9 9M 9K 9M 9K 9M 9K 9% udisksd
-+9 9M 9K 9M 9K 9M 9K 9% SpiderOakBlue
-+9 9M 9K 9M 9K 9M 9K 9% SpiderOakBlue
-+9 9M 9K 9M 9K 9M 9K 9% mission-control
-+9 9M 9K 9M 9K 9M 9K 9% evince
-+9 9M 9K 9M 9K 9M 9K 9% gnome-screensav
-+9 9K 9K 9K 9K 9K 9K 9% systemd-journal
-+9 9K 9K 9K 9K 9K 9K 9% acpid
-+9 9M 9K 9M 9K 9M 9K 9% gnome-session
-+9 9 9 9 9 9 9 9% khugepaged
-+9 9K 9K 9K 9K 9K 9K 9% wpa_supplicant
-+9 9K 9K 9K 9 9K 9 9% gpm
-+9 9 9 9 9 9 9 9% flush-9:9
-+9 9M 9K 9M 9K 9M 9K 9% deja-dup-monito
-+9 9M 9K 9M 9K 9M 9K 9% evolution-calen
-+9 9M 9K 9M 9K 9M 9K 9% evolution-addre
-+9 9 9 9 9 9 9 9% jbd9/dm-9-9
-+9 9 9 9 9 9 9 9% ksoftirqd/9
-+9 9M 9K 9M 9K 9M 9K 9% tracker-miner-f
-+9 9K 9K 9K 9K 9K 9K 9% systemd-logind
-+9 9K 9K 9M 9K 9M 9K 9% crond
-+9 9 9 9 9 9 9 9% kswapd9
-+9 9K 9K 9K 9K 9K 9K 9% systemd
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9M 9K 9M 9K 9M 9K 9% rtkit-daemon
-+9 9 9 9 9 9 9 9% ksoftirqd/9
-+9 9 9 9 9 9 9 9% ksoftirqd/9
-+9 9 9 9 9 9 9 9% flush-9:9
-+9 9 9 9 9 9 9 9% jbd9/dm-9-9
-+9 9K 9K 9M 9K 9M 9K 9% bash
-+9 9 9 9 9 9 9 9% ksoftirqd/9
-+9 9K 9K 9K 9K 9K 9K 9% pmie
-+9 9M 9K 9M 9K 9M 9K 9% gvfs-udisks9-vo
-+9 9M 9K 9M 9K 9M 9K 9% accounts-daemon
-+9 9M 9K 9M 9K 9M 9K 9% gdm-session-wor
-+9 9M 9K 9M 9K 9M 9K 9% rsyslogd
-+9 9M 9K 9M 9K 9M 9K 9% gnote
-+9 9K 9K 9K 9K 9K 9K 9% dbus-daemon
-+9 9 9 9 9 9 9 9% migration/9
-+9 9K 9K 9K 9K 9K 9K 9% pmdaproc
-+9 9K 9K 9M 9K 9M 9K 9% bash
-+9 9 9 9 9 9 9 9% migration/9
-+9 9K 9K 9K 9K 9K 9K 9% auditd
-+9 9K 9K 9M 9K 9M 9K 9% bash
-+9 9K 9K 9M 9K 9M 9K 9% abrt-watch-log
-+9 9M 9K 9M 9K 9M 9K 9% evolution-alarm
-+9 9K 9K 9K 9K 9K 9K 9% dhclient
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% watchdog/9
-+9 9M 9K 9M 9K 9M 9K 9% gnome-shell-cal
-+9 9 9 9 9 9 9 9% watchdog/9
-+9 9K 9K 9M 9K 9M 9K 9% abrt-applet
-+9 9 9 9 9 9 9 9% watchdog/9
-+9 9 9 9 9 9 9 9% watchdog/9
-+9 9 9 9 9 9 9 9% migration/9
-+9 9K 9K 9M 9K 9M 9K 9% modem-manager
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9K 9K 9M 9K 9M 9K 9% gdm-binary
-+9 9M 9K 9M 9K 9M 9K 9% colord
-+9 9 9 9 9 9 9 9% migration/9
-+9 9K 9K 9K 9K 9K 9K 9% avahi-daemon
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9M 9K 9M 9K 9M 9K 9% tracker-store
-+9 9K 9K 9K 9K 9K 9K 9% rpcbind
-+9 9K 9K 9K 9K 9K 9K 9% chronyd
-+9 9K 9K 9M 9K 9M 9K 9% pmcd
-+9 9 9 9 9 9 9 9% kauditd
-+9 9K 9K 9K 9K 9K 9K 9% dhclient
-+9 9K 9K 9K 9K 9K 9K 9% udevd
-+9 9K 9K 9M 9K 9M 9K 9% bash
-+9 9 9 9 9 9 9 9% kworker/u:9
-+9 9 9 9 9 9 9 9% kthreadd
-+9 9M 9K 9M 9K 9M 9K 9% gnome-keyring-d
-+9 9K 9K 9M 9K 9M 9K 9% bash
-+9 9 9 9 9 9 9 9% jbd9/dm-9-9
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9M 9K 9M 9K 9M 9K 9% gsd-printer
-+9 9K 9K 9K 9K 9K 9K 9% smartd
-+9 9K 9K 9M 9K 9M 9K 9% gvfsd
-+9 9M 9K 9M 9K 9M 9K 9% colord-sane
-+9 9K 9K 9M 9K 9M 9K 9% gvfsd-trash
-+9 9K 9K 9M 9K 9M 9K 9% pmatop.py
-+9 9K 9K 9M 9K 9M 9K 9% abrtd
-+9 9M 9K 9M 9K 9M 9K 9% dconf-service
-+9 9 9 9 9 9 9 9% kworker/u:9
-+9 9 9 9 9 9 9 9% bdi-default
-+9 9 9 9 9 9 9 9% kworker/u:9
-+9 9 9 9 9 9 9 9% khubd
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9K 9K 9K 9K 9K 9K 9% atd
-+9 9K 9K 9M 9K 9M 9K 9% gvfsd-metadata
-+9 9K 9K 9K 9K 9K 9K 9% udevd
-+9 9K 9K 9K 9K 9K 9K 9% bluetoothd
-+9 9M 9K 9M 9K 9M 9K 9% imsettings-daem
-+9 9K 9K 9M 9K 9M 9K 9% abrt-watch-log
-+9 9K 9K 9K 9K 9K 9K 9% rpc.statd
-+9 9K 9K 9K 9K 9K 9K 9% pmlogger
-+9 9 9 9 9 9 9 9% fsnotify_mark
-+9 9K 9K 9M 9K 9M 9K 9% gdm-simple-slav
-+9 9K 9K 9M 9K 9M 9K 9% gvfs-gphoto9-vo
-+9 9 9 9 9 9 9 9% kdevtmpfs
-+9 9K 9K 9M 9K 9M 9K 9% ibus-dconf
-+9 9M 9K 9M 9K 9M 9K 9% gvfsd-http
-+9 9K 9K 9K 9K 9K 9K 9% pmlogger
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9K 9K 9K 9K 9K 9K 9% sshd
-+9 9K 9K 9M 9K 9M 9K 9% gconfd-9
-+9 9M 9K 9M 9K 9M 9K 9% goa-daemon
-+9 9K 9K 9M 9K 9M 9K 9% ibus-engine-pin
-+9 9M 9K 9M 9K 9M 9K 9% evinced
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9 9 9 9 9 9 9% rcu_bh
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9 9 9 9 9 9 9% kworker/9:9H
-+9 9 9 9 9 9 9 9% khelper
-+9 9 9 9 9 9 9 9% netns
-+9 9 9 9 9 9 9 9% kintegrityd
-+9 9 9 9 9 9 9 9% kblockd
-+9 9 9 9 9 9 9 9% ata_sff
-+9 9 9 9 9 9 9 9% md
-+9 9 9 9 9 9 9 9% ksmd
-+9 9 9 9 9 9 9 9% crypto
-+9 9 9 9 9 9 9 9% kthrotld
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% scsi_eh_9
-+9 9 9 9 9 9 9 9% kpsmoused
-+9 9 9 9 9 9 9 9% deferwq
-+9 9 9 9 9 9 9 9% kdmflush
-+9 9 9 9 9 9 9 9% kdmflush
-+9 9K 9K 9M 9K 9M 9K 9% gvfsd-burn
-+9 9 9 9 9 9 9 9% ext9-dio-unwrit
-+9 9 9 9 9 9 9 9% kvm-irqfd-clean
-+9 9 9 9 9 9 9 9% ktpacpid
-+9 9 9 9 9 9 9 9% hd-audio9
-+9 9 9 9 9 9 9 9% cfg9
-+9 9 9 9 9 9 9 9% kdmflush
-+9 9 9 9 9 9 9 9% kdmflush
-+9 9 9 9 9 9 9 9% kdmflush
-+9 9 9 9 9 9 9 9% iwlwifi
-+9 9 9 9 9 9 9 9% jbd9/dm-9-9
-+9 9 9 9 9 9 9 9% ext9-dio-unwrit
-+9 9 9 9 9 9 9 9% ext9-dio-unwrit
-+9 9 9 9 9 9 9 9% ext9-dio-unwrit
-+9 9K 9K 9K 9K 9K 9K 9% avahi-daemon
-+9 9K 9K 9K 9 9K 9 9% system-setup-ke
-+9 9K 9K 9K 9K 9K 9K 9% mcelog
-+9 9 9 9 9 9 9 9% krfcommd
-+9 9 9 9 9 9 9 9% rpciod
-+9 9K 9K 9K 9K 9K 9K 9% dbus-launch
-+9 9M 9K 9M 9K 9M 9K 9% gvfs-fuse-daemo
-+9 9K 9K 9M 9K 9M 9K 9% gvfs-afc-volume
-+9 9M 9K 9M 9K 9M 9K 9% at-spi-bus-laun
-+9 9K 9K 9K 9K 9K 9K 9% gnome-pty-helpe
-+9 9K 9K 9K 9K 9K 9K 9% emacsclient
-+9 9K 9K 9M 9K 9M 9K 9% tools.sh
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% kworker/u:9H
-+9 9K 9K 9K 9K 9K 9K 9% emacsclient
-+9 9K 9K 9K 9K 9K 9K 9% emacsclient
-+9 9 9 9 9 9 9 9% irq/9-mei
-+9 9 9 9 9 9 9 9% hci9
-+9 9 9 9 9 9 9 9% hci9
-+9 9 9 9 9 9 9 9% kworker/u:9H
-+9 9K 9K 9K 9K 9K 9K 9% udevd
-+9 9K 9K 9K 9K 9K 9K 9% pmdaxfs
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9 9 9 9 9 9 9% kworker/9:9
-+9 9K 9K 9K 9K 9K 9K 9% ssh-agent
-+ATOP - Day Month 9 9:9:9 9 9:9:9 elapsed
-+PRC | sys 9h9m | user 9d | #proc 9 | #zombie 9
-+CPU | sys 9% | user 9% | irq 9% | idle 9% | wait 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+cpu | sys 9% | user 9% | irq 9% | idle 9% | cpu9 9% |
-+CPL | avg9 .9 | avg9 .9 | avg9 .9 | csw 9 | intr 9 |
-+MEM | tot 9G | free 9M | cache 9G | buff 9M | slab 9G |
-+SWP | tot 9G | free 9G | | vmcom 9G | vmlim 9G |
-+PAG | scan 9 | steal 9 | stall 9 | swin 9 | swout 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+LVM | x | | read 9 | write 9 |
-+DSK | sda | busy 9% | read 9 | write 9 | avio 9 ms |
-+NET | transport | tcpi 9M | tcpo 9M | udpi 9M | udpo 9M |
-+NET | network | ipi 9M | ipo 9M | ipfrw 9M | deliv 9M |
-+NET | lo | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+NET | em9 | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+NET | wlan9 | pcki 9M | pcko 9M | si 9 Kbps | so 9 Kpbs |
-+PID SYSCPU USRCPU VGROW RGROW RUID THR ST EXC S CPU CMD
-+9 9h9m 9h9m 9K 9K scox 9 -- - S 9% firefox
-+9 9h9m 9h9m 9K 9K scox 9 -- - S 9% plugin-containe
-+9 9h9m 9h9m 9K 9K root 9 -- - S 9% Xorg
-+9 9m9s 9h9m 9K 9K scox 9 -- - S 9% gnome-shell
-+9 9m9s 9h9m 9K 9K scox 9 -- - S 9% thunderbird
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% ibus-daemon
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% pulseaudio
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% ibus-x9
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% emacs
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% xchat
-+9 9m9s 9m9s 9K 9K root 9 -- - S 9% polkitd
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% vino-server
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% gnome-terminal
-+9 9m9s 9m9s 9K 9K scox 9 -- - S 9% gnome-settings-
-+9 9m9s 9m9s 9K 9K dbus 9 -- - S 9% dbus-daemon
-+9 9m9s 9s 9 9 root 9 -- - S 9% irq/9-iwlwifi
-+9 9s 9m9s 9K 9K root 9 -- - S 9% NetworkManager
-+9 9s 9m9s 9K 9K scox 9 -- - S 9% ibus-engine-sim
-+9 9m9s 9s 9 9 root 9 -- - S 9% rcu_sched
-+9 9m9s 9m9s 9K 9K lp 9 -- - S 9% cups-polld
-+9 9s 9m9s 9K 9K scox 9 -- - S 9% ibus-ui-gtk9
-+9 9s 9m9s 9K 9K root 9 -- - S 9% cupsd
-+9 9s 9m9s 9K 9K scox 9 -- - S 9% nm-applet
-+9 9m9s 9s 9K 9 root 9 -- - S 9% irqbalance
-+9 9s 9m9s 9K 9K root 9 -- - S 9% upowerd
-+9 9s 9m9s 9K 9K root 9 -- - S 9% udisksd
-+9 9s 9m9s 9K 9K scox 9 -- - S 9% SpiderOakBlue
-+9 9s 9s 9K 9K scox 9 -- - S 9% SpiderOakBlue
-+9 9s 9s 9K 9K scox 9 -- - S 9% mission-control
-+9 9s 9s 9K 9K scox 9 -- - S 9% evince
-+9 9s 9s 9K 9K scox 9 -- - S 9% gnome-screensav
-+9 9s 9s 9K 9 root 9 -- - S 9% systemd-journal
-+9 9s 9s 9K 9 root 9 -- - S 9% acpid
-+9 9s 9s 9K 9K scox 9 -- - S 9% gnome-session
-+9 9s 9s 9 9 root 9 -- - S 9% khugepaged
-+9 9s 9s 9K 9K root 9 -- - S 9% wpa_supplicant
-+9 9s 9s 9K 9 root 9 -- - S 9% gpm
-+9 9s 9s 9 9 root 9 -- - S 9% flush-9:9
-+9 9s 9s 9K 9K scox 9 -- - S 9% deja-dup-monito
-+9 9s 9s 9K 9K scox 9 -- - S 9% evolution-calen
-+9 9s 9s 9K 9K scox 9 -- - S 9% evolution-addre
-+9 9s 9s 9 9 root 9 -- - D 9% jbd9/dm-9-9
-+9 9s 9s 9 9 root 9 -- - S 9% ksoftirqd/9
-+9 9s 9s 9K 9K scox 9 -- - S 9% tracker-miner-f
-+9 9s 9s 9K 9K root 9 -- - S 9% systemd-logind
-+9 9s 9s 9K 9 root 9 -- - S 9% crond
-+9 9s 9s 9 9 root 9 -- - S 9% kswapd9
-+9 9s 9s 9K 9K root 9 -- - S 9% systemd
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9K 9 rtkit 9 -- - S 9% rtkit-daemon
-+9 9s 9s 9 9 root 9 -- - S 9% ksoftirqd/9
-+9 9s 9s 9 9 root 9 -- - S 9% ksoftirqd/9
-+9 9s 9s 9 9 root 9 -- - S 9% flush-9:9
-+9 9s 9s 9 9 root 9 -- - S 9% jbd9/dm-9-9
-+9 9s 9s 9K 9K scox 9 -- - S 9% bash
-+9 9s 9s 9 9 root 9 -- - S 9% ksoftirqd/9
-+9 9s 9s 9K 9K pcp 9 -- - S 9% pmie
-+9 9s 9s 9K 9K scox 9 -- - S 9% gvfs-udisks9-vo
-+9 9s 9s 9K 9K root 9 -- - S 9% accounts-daemon
-+9 9s 9s 9K 9K root 9 -- - S 9% gdm-session-wor
-+9 9s 9s 9K 9K root 9 -- - S 9% rsyslogd
-+9 9s 9s 9K 9K scox 9 -- - S 9% gnote
-+9 9s 9s 9K 9K scox 9 -- - S 9% dbus-daemon
-+9 9s 9s 9 9 root 9 -- - S 9% migration/9
-+9 9s 9s 9K 9K root 9 -- - R 9% pmdaproc
-+9 9s 9s 9K 9K scox 9 -- - S 9% bash
-+9 9s 9s 9 9 root 9 -- - S 9% migration/9
-+9 9s 9s 9K 9 root 9 -- - S 9% auditd
-+9 9s 9s 9K 9K scox 9 -- - S 9% bash
-+9 9s 9s 9K 9 root 9 -- - S 9% abrt-watch-log
-+9 9s 9s 9K 9K scox 9 -- - S 9% evolution-alarm
-+9 9s 9s 9K 9K root 9 -- - S 9% dhclient
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% watchdog/9
-+9 9s 9s 9K 9K scox 9 -- - S 9% gnome-shell-cal
-+9 9s 9s 9 9 root 9 -- - S 9% watchdog/9
-+9 9s 9s 9K 9K scox 9 -- - S 9% abrt-applet
-+9 9s 9s 9 9 root 9 -- - S 9% watchdog/9
-+9 9s 9s 9 9 root 9 -- - S 9% watchdog/9
-+9 9s 9s 9 9 root 9 -- - S 9% migration/9
-+9 9s 9s 9K 9K root 9 -- - S 9% modem-manager
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9K 9 root 9 -- - S 9% gdm-binary
-+9 9s 9s 9K 9K colord 9 -- - S 9% colord
-+9 9s 9s 9 9 root 9 -- - S 9% migration/9
-+9 9s 9s 9K 9 avahi 9 -- - S 9% avahi-daemon
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9K 9K scox 9 -- - S 9% tracker-store
-+9 9s 9s 9K 9 rpc 9 -- - S 9% rpcbind
-+9 9s 9s 9K 9 chrony 9 -- - S 9% chronyd
-+9 9s 9s 9K 9K pcp 9 -- - S 9% pmcd
-+9 9s 9s 9 9 root 9 -- - S 9% kauditd
-+9 9s 9s 9K 9K root 9 -- - S 9% dhclient
-+9 9s 9s 9K 9 root 9 -- - S 9% udevd
-+9 9s 9s 9K 9K scox 9 -- - S 9% bash
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/u:9
-+9 9s 9s 9 9 root 9 -- - S 9% kthreadd
-+9 9s 9s 9K 9K scox 9 -- - S 9% gnome-keyring-d
-+9 9s 9s 9K 9K scox 9 -- - S 9% bash
-+9 9s 9s 9 9 root 9 -- - S 9% jbd9/dm-9-9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9K 9K scox 9 -- - S 9% gsd-printer
-+9 9s 9s 9K 9 root 9 -- - S 9% smartd
-+9 9s 9s 9K 9 scox 9 -- - S 9% gvfsd
-+9 9s 9s 9K 9 colord 9 -- - S 9% colord-sane
-+9 9s 9s 9K 9K scox 9 -- - S 9% gvfsd-trash
-+9 9s 9s 9K 9K scox 9 -- - S 9% pmatop.py
-+9 9s 9s 9K 9 root 9 -- - S 9% abrtd
-+9 9s 9s 9K 9K scox 9 -- - S 9% dconf-service
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/u:9
-+9 9s 9s 9 9 root 9 -- - S 9% bdi-default
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/u:9
-+9 9s 9s 9 9 root 9 -- - S 9% khubd
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9K 9 root 9 -- - S 9% atd
-+9 9s 9s 9K 9K scox 9 -- - S 9% gvfsd-metadata
-+9 9s 9s 9K 9K root 9 -- - S 9% udevd
-+9 9s 9s 9K 9K root 9 -- - S 9% bluetoothd
-+9 9s 9s 9K 9 scox 9 -- - S 9% imsettings-daem
-+9 9s 9s 9K 9 root 9 -- - S 9% abrt-watch-log
-+9 9s 9s 9K 9 rpcuse 9 -- - S 9% rpc.statd
-+9 9s 9s 9K 9K scox 9 -- - S 9% pmlogger
-+9 9s 9s 9 9 root 9 -- - S 9% fsnotify_mark
-+9 9s 9s 9K 9 root 9 -- - S 9% gdm-simple-slav
-+9 9s 9s 9K 9 scox 9 -- - S 9% gvfs-gphoto9-vo
-+9 9s 9s 9 9 root 9 -- - S 9% kdevtmpfs
-+9 9s 9s 9K 9K scox 9 -- - S 9% ibus-dconf
-+9 9s 9s 9K 9K scox 9 -- - S 9% gvfsd-http
-+9 9s 9s 9K 9K pcp 9 -- - S 9% pmlogger
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9K 9 root 9 -- - S 9% sshd
-+9 9s 9s 9K 9 scox 9 -- - S 9% gconfd-9
-+9 9s 9s 9K 9K scox 9 -- - S 9% goa-daemon
-+9 9s 9s 9K 9 scox 9 -- - S 9% ibus-engine-pin
-+9 9s 9s 9K 9K scox 9 -- - S 9% evinced
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9 9 root 9 -- - S 9% rcu_bh
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9H
-+9 9s 9s 9 9 root 9 -- - S 9% khelper
-+9 9s 9s 9 9 root 9 -- - S 9% netns
-+9 9s 9s 9 9 root 9 -- - S 9% kintegrityd
-+9 9s 9s 9 9 root 9 -- - S 9% kblockd
-+9 9s 9s 9 9 root 9 -- - S 9% ata_sff
-+9 9s 9s 9 9 root 9 -- - S 9% md
-+9 9s 9s 9 9 root 9 -- - S 9% ksmd
-+9 9s 9s 9 9 root 9 -- - S 9% crypto
-+9 9s 9s 9 9 root 9 -- - S 9% kthrotld
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% scsi_eh_9
-+9 9s 9s 9 9 root 9 -- - S 9% kpsmoused
-+9 9s 9s 9 9 root 9 -- - S 9% deferwq
-+9 9s 9s 9 9 root 9 -- - S 9% kdmflush
-+9 9s 9s 9 9 root 9 -- - S 9% kdmflush
-+9 9s 9s 9K 9 scox 9 -- - S 9% gvfsd-burn
-+9 9s 9s 9 9 root 9 -- - S 9% ext9-dio-unwrit
-+9 9s 9s 9 9 root 9 -- - S 9% kvm-irqfd-clean
-+9 9s 9s 9 9 root 9 -- - S 9% ktpacpid
-+9 9s 9s 9 9 root 9 -- - S 9% hd-audio9
-+9 9s 9s 9 9 root 9 -- - S 9% cfg9
-+9 9s 9s 9 9 root 9 -- - S 9% kdmflush
-+9 9s 9s 9 9 root 9 -- - S 9% kdmflush
-+9 9s 9s 9 9 root 9 -- - S 9% kdmflush
-+9 9s 9s 9 9 root 9 -- - S 9% iwlwifi
-+9 9s 9s 9 9 root 9 -- - S 9% jbd9/dm-9-9
-+9 9s 9s 9 9 root 9 -- - S 9% ext9-dio-unwrit
-+9 9s 9s 9 9 root 9 -- - S 9% ext9-dio-unwrit
-+9 9s 9s 9 9 root 9 -- - S 9% ext9-dio-unwrit
-+9 9s 9s 9K 9 avahi 9 -- - S 9% avahi-daemon
-+9 9s 9s 9K 9 root 9 -- - S 9% system-setup-ke
-+9 9s 9s 9K 9 root 9 -- - S 9% mcelog
-+9 9s 9s 9 9 root 9 -- - S 9% krfcommd
-+9 9s 9s 9 9 root 9 -- - S 9% rpciod
-+9 9s 9s 9K 9 scox 9 -- - S 9% dbus-launch
-+9 9s 9s 9K 9 scox 9 -- - S 9% gvfs-fuse-daemo
-+9 9s 9s 9K 9 scox 9 -- - S 9% gvfs-afc-volume
-+9 9s 9s 9K 9 scox 9 -- - S 9% at-spi-bus-laun
-+9 9s 9s 9K 9 scox 9 -- - S 9% gnome-pty-helpe
-+9 9s 9s 9K 9 scox 9 -- - S 9% emacsclient
-+9 9s 9s 9K 9 scox 9 -- - S 9% tools.sh
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/u:9H
-+9 9s 9s 9K 9 scox 9 -- - T 9% emacsclient
-+9 9s 9s 9K 9 scox 9 -- - T 9% emacsclient
-+9 9s 9s 9 9 root 9 -- - S 9% irq/9-mei
-+9 9s 9s 9 9 root 9 -- - S 9% hci9
-+9 9s 9s 9 9 root 9 -- - S 9% hci9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/u:9H
-+9 9s 9s 9K 9K root 9 -- - S 9% udevd
-+9 9s 9s 9K 9K root 9 -- - S 9% pmdaxfs
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9 9 root 9 -- - S 9% kworker/9:9
-+9 9s 9s 9K 9 root 9 -- - S 9% ssh-agent
-+== Direct archive testing complete
-+== Comparing direct to folio output
-+  Output compares exactly - good
-+== Output comparisons all completed
- pmatop log creation OK
-+== Live writer testing complete
-diff -Naurp pcp-3.10.2.orig/qa/729 pcp-3.10.2/qa/729
---- pcp-3.10.2.orig/qa/729	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/729	2015-02-23 21:24:36.657658339 +1100
-@@ -24,7 +24,7 @@ fname = 'src/bug_v2'
- context = pcp.pmapi.pmContext(c_api.PM_CONTEXT_ARCHIVE, fname)
- pmids = context.pmLookupName(['proc.nprocs'])
- descs = context.pmLookupDescs(pmids[0])
--print '%s%s' % (descs[0].contents.units, 'Completed safely')
-+print('%s%s' % (descs[0].contents.units, 'Completed safely'))
- EOF
- 
- cat > $tmp.parse << EOF
-@@ -32,8 +32,8 @@ import pcp.pmapi
- context = pcp.pmapi.pmContext(target='local:')
- try:
-   print(context.pmParseInterval(''))
--except pcp.pmapi.pmErr, error:
--  print 'Completed safely'
-+except pcp.pmapi.pmErr as error:
-+  print('Completed safely')
- EOF
- 
- # real QA test starts here
-diff -Naurp pcp-3.10.2.orig/qa/754 pcp-3.10.2/qa/754
---- pcp-3.10.2.orig/qa/754	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/qa/754	2015-02-23 21:24:36.657658339 +1100
-@@ -2,7 +2,7 @@
- # PCP QA Test No. 754
- # Exercise the Unbound PMDA.
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- #
- 
- seq=`basename $0`
-@@ -10,6 +10,7 @@ echo "QA output created by $seq"
- 
- . ./common.python
- 
-+python_path=`which $python`
- pmda_path="$PCP_PMDAS_DIR/unbound"
- pmda_script="$pmda_path/pmdaunbound.python"
- test -f "$pmda_script" || _notrun "pmdaunbound not supported"
-@@ -31,12 +32,12 @@ _filter()
- {
-     tee -a $seq.full | \
-     sed \
--	-e "s;$python;\$PYTHON;" \
- 	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
- 	-e '/pmResult/s/ .* numpmid/ ... numpmid/' \
- 	-e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*/TIMESTAMP/' \
--
--    test -f unbound.log && cat unbound.log >> $seq.full
-+	-e "s;$python_path;\$PCP_PYTHON_PROG;" \
-+	-e "s;$python;python;" \
-+    #end
- }
- 
- _filter_result()
-@@ -46,7 +47,7 @@ _filter_result()
- 
- domain=132
- test="$here/unbound"
--$sudo rm -f /tmp/unbound-qa.txt		# from test.sh
-+$sudo rm -f unbound.log /tmp/unbound-qa.txt	 # the latter from test.sh
- export UNBOUND_STATS="$here/unbound/test.sh"
- 
- # real QA test starts here
-@@ -54,7 +55,7 @@ PCP_PYTHON_PMNS=root $python "$pmda_scri
- 
- echo "== Testing unbound metric values" | tee -a $seq.full
- cat > $tmp.fetch <<End-of-File
--open pipe $python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- End-of-File
- cat $here/unbound/metrics.list | \
-@@ -62,7 +63,8 @@ while read metric
- do
-     echo fetch $metric >> $tmp.fetch
- done
--$sudo dbpmda -n $tmp.root -ie < $tmp.fetch 2>&1 | _filter
-+dbpmda -n $tmp.root -ie < $tmp.fetch 2>&1 | _filter
-+test -f unbound.log && cat unbound.log >> $seq.full
- 
- status=0
- exit
-diff -Naurp pcp-3.10.2.orig/qa/754.out pcp-3.10.2/qa/754.out
---- pcp-3.10.2.orig/qa/754.out	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/qa/754.out	2015-02-23 21:24:36.658658338 +1100
-@@ -1,7 +1,7 @@
- QA output created by 754
- == Testing unbound metric values
--dbpmda> open pipe $PYTHON $PCP_PMDAS_DIR/unbound/pmdaunbound.python
--Start python PMDA: $PYTHON $PCP_PMDAS_DIR/unbound/pmdaunbound.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/unbound/pmdaunbound.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/unbound/pmdaunbound.python
- dbpmda> getdesc on
- dbpmda> fetch unbound.histogram.262144_000000_to_524288_000000
- PMID(s): 132.0.139
-diff -Naurp pcp-3.10.2.orig/qa/972 pcp-3.10.2/qa/972
---- pcp-3.10.2.orig/qa/972	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/972	2015-02-23 21:24:36.658658338 +1100
-@@ -2,28 +2,20 @@
- # PCP QA Test No. 972
- # Exercise the zswap compressed swap PMDA using dbpmda.
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- #
- 
- seq=`basename $0`
- echo "QA output created by $seq"
- 
--# get standard environment, filters and checks
--. ./common.product
--. ./common.filter
--. ./common.check
-+. ./common.python
- 
-+python_path=`which $python`
- pmda_path="$PCP_PMDAS_DIR/zswap"
- pmda_script="$pmda_path/pmdazswap.python"
- test -f "$pmda_script" || _notrun "pmdazswap not supported"
--python -c "from pcp import pmda" >/dev/null 2>&1
-+$python -c "from pcp import pmda" >/dev/null 2>&1
- [ $? -eq 0 ] || _notrun "python pcp pmda module not installed"
--case `python -V 2>&1 | sed -e 's/Python //'`
--in
--    0.*.*|1.*.*|2.0.*|2.1.*|2.3.*|2.4.*)
--	_notrun "need python 2.5 or later"
--	;;
--esac
- 
- status=1	# failure is the default!
- $sudo rm -rf $tmp.* $seq.full
-@@ -34,10 +26,12 @@ _filter()
-     tee -a $seq.full | \
-     sed \
- 	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
-+	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
-         -e '/pmResult/s/ .* numpmid/ ... numpmid/' \
-         -e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*/TIMESTAMP/' \
--
--    test -f zswap.log && cat zswap.log >> $seq.full
-+	-e "s;$python_path;\$PCP_PYTHON_PROG;" \
-+	-e "s;$python;python;" \
-+    #end
- }
- 
- _setup_zswap_values()
-@@ -54,6 +48,8 @@ _setup_zswap_values()
-     echo 2     > reject_reclaim_fail
-     echo 89123 > stored_pages
-     echo 12435 > written_back_pages
-+
-+    cd $here
- }
- 
- domain=125
-@@ -62,11 +58,11 @@ export ZSWAP_STATS_PATH="$tmp.zswap"
- 
- # real QA test starts here
- _setup_zswap_values
--PCP_PYTHON_PMNS=root python "$pmda_script" > $tmp.root
-+PCP_PYTHON_PMNS=root $python "$pmda_script" > $tmp.root
- 
- echo "== Testing zswap metrics" | tee -a $seq.full
--$sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe /usr/bin/python $pmda_script
-+dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
-+open pipe $python_path $pmda_script
- getdesc on
- desc zswap.pool_limit_hit
- desc zswap.reject_reclaim_fail
-@@ -87,6 +83,7 @@ fetch zswap.duplicate_entry
- fetch zswap.pool_pages
- fetch zswap.stored_pages
- End-of-File
-+test -f zswap.log && cat zswap.log >> $seq.full
- 
- status=0
- exit
-diff -Naurp pcp-3.10.2.orig/qa/972.out pcp-3.10.2/qa/972.out
---- pcp-3.10.2.orig/qa/972.out	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/972.out	2015-02-23 21:24:36.658658338 +1100
-@@ -1,7 +1,7 @@
- QA output created by 972
- == Testing zswap metrics
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/zswap/pmdazswap.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/zswap/pmdazswap.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/zswap/pmdazswap.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/zswap/pmdazswap.python
- dbpmda> getdesc on
- dbpmda> desc zswap.pool_limit_hit
- PMID: 125.0.0
-diff -Naurp pcp-3.10.2.orig/qa/985 pcp-3.10.2/qa/985
---- pcp-3.10.2.orig/qa/985	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/985	2015-02-23 21:24:36.659658337 +1100
-@@ -2,28 +2,20 @@
- # PCP QA Test No. 985
- # Exercise the dmcache PMDA using dbpmda.
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- #
- 
- seq=`basename $0`
- echo "QA output created by $seq"
- 
--# get standard environment, filters and checks
--. ./common.product
--. ./common.filter
--. ./common.check
-+. ./common.python
- 
-+python_path=`which $python`
- pmda_path="$PCP_PMDAS_DIR/dmcache"
- pmda_script="$pmda_path/pmdadmcache.python"
- test -f "$pmda_script" || _notrun "pmdadmcache not supported"
--python -c "from pcp import pmda" >/dev/null 2>&1
-+$python -c "from pcp import pmda" >/dev/null 2>&1
- [ $? -eq 0 ] || _notrun "python pcp pmda module not installed"
--case `python -V 2>&1 | sed -e 's/Python //'`
--in
--    0.*.*|1.*.*|2.0.*|2.1.*|2.3.*|2.4.*)
--	_notrun "need python 2.5 or later"
--	;;
--esac
- 
- status=1	# failure is the default!
- $sudo rm -rf $tmp.* $seq.full
-@@ -36,7 +28,9 @@ _filter()
- 	-e "s;$PCP_PMDAS_DIR;\$PCP_PMDAS_DIR;" \
- 	-e '/pmResult/s/ .* numpmid/ ... numpmid/' \
- 	-e '/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/s/[^ ]*/TIMESTAMP/' \
--
-+	-e "s;$python_path;\$PCP_PYTHON_PROG;" \
-+	-e "s;$python;python;" \
-+    #end
-     test -f dmcache.log && cat dmcache.log >> $seq.full
- }
- 
-@@ -53,11 +47,11 @@ export DM_STATUS=$tmp.dmcache.sh
- 
- # real QA test starts here
- echo "== Finding dmcache metrics" | tee -a $seq.full
--PCP_PYTHON_PMNS=root python "$pmda_script" 2>/dev/null > $tmp.root
-+PCP_PYTHON_PMNS=root $python "$pmda_script" 2>/dev/null > $tmp.root
- 
- echo "== Testing dmcache metrics" | tee -a $seq.full
- $sudo dbpmda -n $tmp.root -ie <<End-of-File 2>&1 | _filter
--open pipe /usr/bin/python $pmda_script
-+open pipe $python_path $pmda_script
- getdesc on
- instance $domain.0
- desc dmcache.size
-diff -Naurp pcp-3.10.2.orig/qa/985.out pcp-3.10.2/qa/985.out
---- pcp-3.10.2.orig/qa/985.out	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/985.out	2015-02-23 21:24:36.659658337 +1100
-@@ -1,8 +1,8 @@
- QA output created by 985
- == Finding dmcache metrics
- == Testing dmcache metrics
--dbpmda> open pipe /usr/bin/python $PCP_PMDAS_DIR/dmcache/pmdadmcache.python
--Start python PMDA: /usr/bin/python $PCP_PMDAS_DIR/dmcache/pmdadmcache.python
-+dbpmda> open pipe $PCP_PYTHON_PROG $PCP_PMDAS_DIR/dmcache/pmdadmcache.python
-+Start python PMDA: $PCP_PYTHON_PROG $PCP_PMDAS_DIR/dmcache/pmdadmcache.python
- dbpmda> getdesc on
- dbpmda> instance 129.0
- pmInDom: 129.0
-diff -Naurp pcp-3.10.2.orig/qa/986 pcp-3.10.2/qa/986
---- pcp-3.10.2.orig/qa/986	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/986	2015-02-23 21:24:36.659658337 +1100
-@@ -2,24 +2,21 @@
- # PCP QA Test No. 986
- # Exercise the dmcache PMDA using the running kernel.
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- #
- 
- seq=`basename $0`
- echo "QA output created by $seq"
- 
--# get standard environment, filters and checks
--. ./common.product
--. ./common.filter
--. ./common.check
-+. ./common.python
- 
- status=1	# failure is the default!
- $sudo rm -f $tmp.* $seq.full
- 
- which dmsetup >/dev/null 2>&1
- test $? -eq 0 || _notrun "Device Mapper 'dmsetup' binary not found"
--python -c 'from pcp import pmda' 2>/dev/null
--test $? -eq 0 || _notrun 'Python pcp pmda module is not installed'
-+$python -c 'from pcp import pmda' 2>/dev/null
-+test $? -eq 0 || _notrun "$python pcp pmda module is not installed"
- 
- _filter_dmcache()
- {
-diff -Naurp pcp-3.10.2.orig/qa/common.python pcp-3.10.2/qa/common.python
---- pcp-3.10.2.orig/qa/common.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/common.python	2015-02-23 21:24:36.660658336 +1100
-@@ -8,8 +8,8 @@
- . ./common.filter
- . ./common.check
- 
--# allow alternate versions of python to be used
--python=${PYTHON:-/usr/bin/python}
-+python=${PCP_PYTHON_PROG:-python}
-+eval $python -c exit 2>/dev/null || _notrun "$python unavailable"
- 
- # verify output from unittest indicates successful testing
- _check_unittest()
-diff -Naurp pcp-3.10.2.orig/qa/pmdas/memory_python/pmdamemory_python.python pcp-3.10.2/qa/pmdas/memory_python/pmdamemory_python.python
---- pcp-3.10.2.orig/qa/pmdas/memory_python/pmdamemory_python.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/pmdas/memory_python/pmdamemory_python.python	2015-02-23 21:24:36.660658336 +1100
-@@ -42,7 +42,7 @@ class MemoryPMDA(PMDA):
-         # At this point if all goes well, the PMDA internal
-         # _metric_names dictionary will contain the metric we just
-         # added. If not, memory has become corrupted.
--        if not self._metric_names.has_key(self.metric_pmid):
-+        if not self.metric_pmid in self._metric_names:
-             self.memory_valid = 0
-             msg = '_metric_names has no matching pmid'
-             self.log(msg)
-@@ -66,14 +66,14 @@ class MemoryPMDA(PMDA):
-         self.memory_valid = 1
-         self.metric_name = name + '.memory_valid'
-         self.metric_pmid = self.pmid(0, 0)
--	self.metric_obj = pmdaMetric(self.metric_pmid, c_api.PM_TYPE_64,
-+        self.metric_obj = pmdaMetric(self.metric_pmid, c_api.PM_TYPE_64,
-                                      c_api.PM_INDOM_NULL, c_api.PM_SEM_COUNTER,
-                                      pmUnits(0, 0, 0, 0, 0, 0))
-         self.metric_oneline = "test metric"
-         self.add_metric(self.metric_name, self.metric_obj, self.metric_oneline)
- 
-         # Make sure the PMDA's internal dictionary is in a good state.
--        if not self._metric_names.has_key(self.metric_pmid):
-+        if not self.metric_pmid in self._metric_names:
-             self.memory_valid = 0
-             msg = '_metric_names has no matching pmid'
-             self.log(msg)
-diff -Naurp pcp-3.10.2.orig/qa/pmdas/slow_python/pmdaslow_python.python pcp-3.10.2/qa/pmdas/slow_python/pmdaslow_python.python
---- pcp-3.10.2.orig/qa/pmdas/slow_python/pmdaslow_python.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/pmdas/slow_python/pmdaslow_python.python	2015-02-23 21:24:36.660658336 +1100
-@@ -32,33 +32,33 @@ class SlowPMDA(PMDA):
-     '''
- 
-     def slow_fetch_callback(self, cluster, item, inst):
--	global fetch_delay
-+        global fetch_delay
- 
--	if int(fetch_delay) < 0:
--	    time.sleep(-1*int(fetch_delay))
-+        if int(fetch_delay) < 0:
-+            time.sleep(-1*int(fetch_delay))
- 
--	if int(fetch_delay) > 0:
--	    time.sleep(int(fetch_delay))
-+        if int(fetch_delay) > 0:
-+            time.sleep(int(fetch_delay))
- 
-         if cluster == 0 and item == 0:
-             return [13, 1]
-         return [c_api.PM_ERR_PMID, 0]
- 
-     def __init__(self, name, domain):
--	global start_delay
-+        global start_delay
- 
-         PMDA.__init__(self, name, domain)
- 
-         self.configfile = PCP.pmGetConfig('PCP_PMDAS_DIR')
-         self.configfile += '/' + name + '/' + name + '.conf'
- 
--	if int(start_delay) > 0:
--	    self.connect_pmcd()
-+        if int(start_delay) > 0:
-+            self.connect_pmcd()
- 
--	if int(start_delay) < 0:
--	    time.sleep(-1*int(start_delay))
--	if int(start_delay) > 0:
--	    time.sleep(int(start_delay))
-+        if int(start_delay) < 0:
-+            time.sleep(-1*int(start_delay))
-+        if int(start_delay) > 0:
-+            time.sleep(int(start_delay))
- 
-         self.add_metric(name + '.thirteen', pmdaMetric(self.pmid(0, 0),
-                 c_api.PM_TYPE_32, c_api.PM_INDOM_NULL, c_api.PM_SEM_INSTANT,
-diff -Naurp pcp-3.10.2.orig/qa/src/test_pcp.python pcp-3.10.2/qa/src/test_pcp.python
---- pcp-3.10.2.orig/qa/src/test_pcp.python	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/qa/src/test_pcp.python	2015-02-23 21:24:36.661658335 +1100
-@@ -30,7 +30,7 @@ def dump_seq(name_p, seq_p):
- 
- def dump_array_ptrs(name_p, arr_p):
-     print(name_p)
--    for i in xrange(len(arr_p)):
-+    for i in range(len(arr_p)):
-         if (i > 0):
-             print(" ", arr_p[i].contents)
-         else:
-@@ -38,7 +38,7 @@ def dump_array_ptrs(name_p, arr_p):
- 
- def dump_array(name_p, arr_p):
-     print(name_p)
--    for i in xrange(len(arr_p)):
-+    for i in range(len(arr_p)):
-         if (i > 0):
-             print(" ", hex(arr_p[i]))
-         else:
-@@ -72,8 +72,9 @@ def test_pcp(self):
-     source = 'localhost'
-     try:
-         (rsltp, errmsg) = ctx.pmParseMetricSpec("kernel.all.load", 0, source)
--        print("pmParseMetricSpec:", rsltp.contents.source)
--        self.assertTrue(rsltp.contents.source == source)
-+        result = rsltp.contents.source.decode()
-+        print("pmParseMetricSpec:", result)
-+        self.assertTrue(result == source)
-     except pmapi.pmErr as error:
-         print("pmParseMetricSpec error: ", error)
- 
-@@ -124,7 +125,7 @@ def test_pcp(self):
-                               api.PM_TYPE_STRING)
-     machine_vp = atom.vp
-     self.assertTrue(machine_u32 != machine_vp)
--    self.assertTrue(type(atom.cp) == type(''))
-+    self.assertTrue(type(atom.cp) == type('') or type(atom.cp) == type(b''))
- 
-     # pmGetChildren
-     if not self.archive_type:
-@@ -179,16 +180,27 @@ def test_pcp(self):
-     dump_array("pmLookupName", self.metric_ids)
-     self.assertTrue(len(self.metric_ids) == 4)
- 
--    for i in xrange(len(metrics)):
-+    for i in range(len(metrics)):
-         # pmNameAll
-+        # one of the returned names should be the same as metrics[i]
-         nameall = ctx.pmNameAll(self.metric_ids[i])
--        print("pmNameAll:", nameall[0])
--        self.assertTrue(nameall[0] == metrics[i])
-+        match = 0
-+        for j in range(len(nameall)):
-+            print("pmNameAll:", nameall[j])
-+            if (nameall[j] == metrics[i]):
-+                match = 1
-+        self.assertTrue(match)
- 
-         # pmNameID
-+        # result will be one of the names from pmNameAll and we've
-+        # already established that one of these is the same as metrics[i]
-         name = ctx.pmNameID(self.metric_ids[i])
--        print("pmNameID:", name)
--        self.assertTrue(name == metrics[i])
-+        print("pmNameID:", name);
-+        match = 0
-+        for j in range(len(nameall)):
-+            if (nameall[j] == name):
-+                match = 1
-+        self.assertTrue(match)
- 
-         # pmLookupDesc
-         descs = ctx.pmLookupDescs(self.metric_ids[i])
-@@ -317,7 +329,7 @@ def test_pcp(self):
-         (units,mult) = ctx.pmParseUnitsStr(5) # type-checking non-string
-         print("pmParseUnitsStr:", units, mult)
-         self.assertTrue(False)
--    except AssertionError as error:
-+    except pmapi.pmErr as error:
-         print("pmParseUnitsStr: ", error)
-         self.assertTrue(True)
- 
-@@ -346,10 +358,10 @@ def test_pcp(self):
-         print("pmStore: ", error)
-         self.assertTrue(True)
- 
--    for i in xrange(results.contents.numpmid):
-+    for i in range(results.contents.numpmid):
-         if (results.contents.get_pmid(i) != self.metric_ids[1]):
-             continue
--        for val in xrange(9):
-+        for val in range(9):
-             # sample.bin - each instance in turn
-             atom = ctx.pmExtractValue(results.contents.get_valfmt(i),
-                                       results.contents.get_vlist(i, val),
-@@ -359,7 +371,7 @@ def test_pcp(self):
-             self.assertTrue(99*(val+1) <= atom.f and atom.f <= 101*(val+1))
- 
-     # pmExtractValue 
--    for i in xrange(results.contents.numpmid):
-+    for i in range(results.contents.numpmid):
-         if (results.contents.get_pmid(i) != self.metric_ids[3]):
-             continue
-         # mem.freemem
-@@ -438,7 +450,10 @@ def test_pcp(self):
-     # pmPrintValue
-     if not self.archive_type:
-         print("pmPrintValue:")
--        ctx.pmPrintValue(sys.__stdout__, results, descs[0], 0, 0, 8)
-+        if sys.version >= '3':
-+            print('Not yet implemented')
-+        else:
-+            ctx.pmPrintValue(sys.__stdout__, results, descs[0], 0, 0, 8)
-         print('')
- 
-     # pmReconnectContext
-diff -Naurp pcp-3.10.2.orig/qa/src/test_pmcc.python pcp-3.10.2/qa/src/test_pmcc.python
---- pcp-3.10.2.orig/qa/src/test_pmcc.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/qa/src/test_pmcc.python	2015-02-23 21:24:36.661658335 +1100
-@@ -1,6 +1,6 @@
- """ Test metric value extraction/reporting using the pcp.pmcc module """
- #
--# Copyright (C) 2013-2014 Red Hat Inc.
-+# Copyright (C) 2013-2015 Red Hat Inc.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -13,9 +13,14 @@
- # for more details.
- #
- 
-+import sys
- import unittest
- from pcp import pmcc, pmapi
- 
-+if sys.version >= '3':
-+    import functools
-+    reduce = functools.reduce
-+
- CPU_METRICS = [ "kernel.all.cpu.sys", "kernel.all.cpu.user",
-                 "kernel.all.cpu.nice", "kernel.all.cpu.idle", ]
- MEM_METRICS = [ "mem.physmem", "mem.freemem", ]
-diff -Naurp pcp-3.10.2.orig/src/include/pcp.conf.in pcp-3.10.2/src/include/pcp.conf.in
---- pcp-3.10.2.orig/src/include/pcp.conf.in	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/include/pcp.conf.in	2015-02-23 21:24:36.662658334 +1100
-@@ -1,5 +1,5 @@
- #
--# Copyright (c) 2013-2014 Red Hat.
-+# Copyright (c) 2013-2015 Red Hat.
- # Copyright (c) 2000-2001,2003 Silicon Graphics, Inc.  All Rights Reserved.
- # 
- # This program is free software; you can redistribute it and/or modify it
-@@ -176,6 +176,9 @@ PCP_PS_PROG=@pcp_ps_prog@
- PCP_PS_HAVE_BSD=@pcp_ps_have_bsd@
- PCP_PS_ALL_FLAGS=@pcp_ps_all_flags@
- 
-+# preferred python executable
-+PCP_PYTHON_PROG=@pcp_python_prog@
-+
- # locate executables
- PCP_WHICH_PROG=@which@
- 
-diff -Naurp pcp-3.10.2.orig/src/pcp/dmcache/pcp-dmcache.py pcp-3.10.2/src/pcp/dmcache/pcp-dmcache.py
---- pcp-3.10.2.orig/src/pcp/dmcache/pcp-dmcache.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pcp/dmcache/pcp-dmcache.py	2015-02-23 21:24:36.662658334 +1100
-@@ -1,6 +1,6 @@
- #!/usr/bin/python
- #
--# Copyright (C) 2014 Red Hat.
-+# Copyright (C) 2014-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -18,6 +18,9 @@
- import sys
- from pcp import pmapi, pmcc
- 
-+if sys.version >= '3':
-+    long = int  # python2 to python3 portability (no long() in python3)
-+
- CACHE_METRICS = ['dmcache.cache.used', 'dmcache.cache.total',
-                  'dmcache.metadata.used', 'dmcache.metadata.total',
-                  'dmcache.read_hits', 'dmcache.read_misses',
-diff -Naurp pcp-3.10.2.orig/src/pcp/free/pcp-free.py pcp-3.10.2/src/pcp/free/pcp-free.py
---- pcp-3.10.2.orig/src/pcp/free/pcp-free.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pcp/free/pcp-free.py	2015-02-23 21:24:36.662658334 +1100
-@@ -1,6 +1,6 @@
- #!/usr/bin/python
- #
--# Copyright (C) 2014 Red Hat.
-+# Copyright (C) 2014-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -19,6 +19,9 @@ import sys
- from pcp import pmapi
- from cpmapi import PM_TYPE_U64, PM_CONTEXT_ARCHIVE, PM_SPACE_KBYTE
- 
-+if sys.version >= '3':
-+    long = int  # python2 to python3 portability (no long() in python3)
-+
- class Free(object):
-     """ Gives a short summary of kernel virtual memory information,
-         in a variety of formats, possibly sampling in a loop.
-diff -Naurp pcp-3.10.2.orig/src/pcp/numastat/pcp-numastat.py pcp-3.10.2/src/pcp/numastat/pcp-numastat.py
---- pcp-3.10.2.orig/src/pcp/numastat/pcp-numastat.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pcp/numastat/pcp-numastat.py	2015-02-23 21:24:36.663658333 +1100
-@@ -1,6 +1,6 @@
- #!/usr/bin/python
- #
--# Copyright (C) 2014 Red Hat.
-+# Copyright (C) 2014-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -20,6 +20,9 @@ import sys
- from pcp import pmapi
- from cpmapi import PM_TYPE_U64
- 
-+if sys.version >= '3':
-+    long = int  # python2 to python3 portability (no long() in python3)
-+
- class NUMAStat(object):
-     """ Gives a short summary of per-node NUMA memory information.
- 
-@@ -103,7 +106,7 @@ class NUMAStat(object):
-             print("No NUMA nodes found, exiting")
-             sys.exit(1)
-         self.resize()
--        maxnodes = (self.width - 16) / 16
-+        maxnodes = int((self.width - 16) / 16)
-         if maxnodes > len(nodes):        # just an initial header suffices
-             header = '%-16s' % ''
-             for node in nodes:
-diff -Naurp pcp-3.10.2.orig/src/pmatop/pmatop.py pcp-3.10.2/src/pmatop/pmatop.py
---- pcp-3.10.2.orig/src/pmatop/pmatop.py	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/pmatop/pmatop.py	2015-02-23 21:21:18.201838488 +1100
-@@ -1,9 +1,6 @@
- #!/usr/bin/python
--
--#
--# pmatop.py
- #
--# Copyright (C) 2013, 2014 Red Hat Inc.
-+# Copyright (C) 2013-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -445,25 +442,19 @@ class _DiskPrint(_AtopPrint):
-     replay_archive = property(None, replay_archive_write, None, None)
- 
-     def disk(self, context):
-+        desc = self.ss.metric_descs[self.ss.metrics_dict['disk.partitions.read']]
-         try:
--            (inst, iname) = context.pmGetInDom(self.ss.metric_descs[self.ss.metrics_dict['disk.partitions.read']])
-+            (inst, iname) = context.pmGetInDom(desc)
-         except pmapi.pmErr as e:
-             iname = iname = "X"
- 
--# Missing: LVM avq (average queue depth)
--
--        lvms = dict(map(lambda x: (os.path.realpath("/dev/mapper/" + x)[5:], x),
--                         (os.listdir("/dev/mapper"))))
-+        # Missing: LVM avq (average queue depth)
-+        # TODO: switch to using disk.dm metrics?
- 
-         for j in xrange(self.ss.get_len(self.ss.get_metric_value('disk.partitions.read'))):
--            if self._replay_archive == True:
--                if iname[j][:2] != "dm":
--                    continue
--                lvm = iname[j]
--            else:
--                if iname[j] not in lvms:
--                    continue
--                lvm = lvms[iname[j]]
-+            if iname[j][:2] != "dm":
-+                continue
-+            lvm = iname[j]
-             partitions_read = self.ss.get_scalar_value('disk.partitions.read', j)
-             partitions_write = self.ss.get_scalar_value('disk.partitions.write', j)
-             if partitions_read == 0 and partitions_write == 0:
-@@ -701,10 +692,8 @@ class _ProcPrint(_AtopPrint):
- 
- class _Options(object):
-     def __init__(self):
--        self.input_file = ""
-         self.output_file = ""
-         self.output_type = "g"
--        self.host = "local:"
-         self.create_archive = False
-         self.replay_archive = False
-         self.have_interval_arg = False
-@@ -719,16 +708,28 @@ class _Options(object):
-         opts.pmSetOptionCallback(self.option_callback)
-         opts.pmSetOverrideCallback(self.override)
-         # leading - returns args that are not options with leading ^A
--        opts.pmSetShortOptions("-gmw:r:L:h:V?")
--        opts.pmSetLongOptionHeader("Options")
-+        opts.pmSetShortOptions("-gmw:r:L:h:a:V?")
-+        opts.pmSetLongOptionText("Interactive: [-g|-m] [-L linelen] [-h host | -a archive] [ interval [ samples ]]")
-+        opts.pmSetLongOptionText("Write folio: pmatop -w folio [ interval [ samples ]]")
-+        opts.pmSetLongOptionText("Read folio: pmatop -r folio [-g|-m] [-L linelen] [-h host]")
-+        opts.pmSetLongOptionHeader("Reporting Options")
-         opts.pmSetLongOption("generic", 0, 'g', '', "Display generic metrics")
-         opts.pmSetLongOption("memory", 0, 'm', '', "Display memory metrics")
--        opts.pmSetLongOption("write", 1, 'w', 'FILENAME', "Write metric data to file")
--        opts.pmSetLongOption("read", 1, 'r', 'FILENAME', "Read metric data from file")
-         opts.pmSetLongOption("width", 1, 'L', 'WIDTH', "Width of the output")
--        opts.pmSetShortUsage("[options]\nInteractive: [-g|-m] [-L linelen] [-h host] [ interval [ samples ]]\nWrite raw logfile: pmatop -w rawfile [ interval [ samples ]]\nRead raw logfile: pmatop -r [ rawfile ] [-g|-m] [-L linelen] [-h host]")
-+        opts.pmSetLongOptionHeader("Folio Options")
-+        opts.pmSetLongOption("write", 1, 'w', 'FILENAME', "Write metric data to PCP archive folio")
-+        opts.pmSetLongOption("read", 1, 'r', 'FILENAME', "Read metric data from PCP archive folio")
-+        opts.pmSetLongOptionHeader("General Options")
-+        opts.pmSetLongOptionAlign()
-+        opts.pmSetLongOptionArchive()
-+        opts.pmSetLongOptionDebug()
-         opts.pmSetLongOptionHost()
-+        opts.pmSetLongOptionOrigin()
-+        opts.pmSetLongOptionStart()
-+        opts.pmSetLongOptionFinish()
-         opts.pmSetLongOptionVersion()
-+        opts.pmSetLongOptionTimeZone()
-+        opts.pmSetLongOptionHostZone()
-         opts.pmSetLongOptionHelp()
-         return opts
- 
-@@ -738,6 +739,8 @@ class _Options(object):
-         # pylint: disable=R0201
-         if opt == 'g':
-             return 1
-+        elif opt == "a":
-+            self.replay_archive = True
-         elif opt == 'L':
-             return 1
-         return 0
-@@ -755,12 +758,9 @@ class _Options(object):
-             self.create_archive = True
-         elif opt == "r":
-             self.opts.pmSetOptionArchiveFolio(optarg)
--            self.input_file = optarg
-             self.replay_archive = True
-         elif opt == "L":
-             self.width = int(optarg)
--        elif opt == 'h':
--            self.host = optarg
-         elif opt == "":
-             if self.have_interval_arg == False:
-                 self.interval_arg = optarg
-@@ -796,14 +796,12 @@ def main(stdscr_p):
-     stdscr.width = opts.width
- 
-     pmc = pmapi.pmContext.fromOptions(opts.opts, sys.argv)
-+    (delta, errmsg) = pmc.pmParseInterval(str(opts.interval_arg) + " seconds")
-     if pmc.type == c_api.PM_CONTEXT_ARCHIVE:
--        pmc.pmSetMode(c_api.PM_MODE_FORW, pmapi.timeval(0, 0), 0)
--
-+        pmc.pmSetMode(c_api.PM_MODE_FORW, delta, 0)
- 
-     host = pmc.pmGetContextHostName()
- 
--    (delta, errmsg) = pmc.pmParseInterval(str(opts.interval_arg) + " seconds")
--
-     ss.setup_metrics(pmc)
- 
-     if opts.create_archive:
-@@ -831,10 +829,10 @@ def main(stdscr_p):
-         elapsed = ss.get_metric_value('kernel.all.uptime')
-         while (i_samples < opts.n_samples) or (opts.n_samples == 0):
-             ss.get_stats(pmc)
-+            stamp = pmc.pmCtime(ss.timestamp)
-             stdscr.move(0, 0)
-             stdscr.addstr('ATOP - %s                %s elapsed\n\n' % (
--                    time.strftime("%c"),
--                    datetime.timedelta(0, elapsed)))
-+                    stamp.rstrip(), datetime.timedelta(0, elapsed)))
-             elapsed = delta.tv_sec
-             stdscr.move(2, 0)
- 
-diff -Naurp pcp-3.10.2.orig/src/pmcd/pmdaproc.sh pcp-3.10.2/src/pmcd/pmdaproc.sh
---- pcp-3.10.2.orig/src/pmcd/pmdaproc.sh	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/pmcd/pmdaproc.sh	2015-02-23 21:24:36.664658332 +1100
-@@ -3,7 +3,7 @@
- #
- # Copyright (c) 1995-2001,2003 Silicon Graphics, Inc.  All Rights Reserved.
- # Portions Copyright (c) 2008 Aconex.  All Rights Reserved.
--# Portions Copyright (c) 2013-2014 Red Hat.
-+# Portions Copyright (c) 2013-2015 Red Hat.
- # 
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -891,17 +891,18 @@ _setup()
-     #
-     if $python_opt
-     then
-+	python=${PCP_PYTHON_PROG:-python}
- 	python_name="${pmda_dir}/pmda${iam}.python"
- 	[ -f "$python_name" ] || python_name="${pmda_dir}/pmda${iam}.py"
- 	if [ -f "$python_name" ]
- 	then
- 	    python_pmns="${pmda_dir}/pmns.python"
- 	    python_dom="${pmda_dir}/domain.h.python"
--	    python -c 'from pcp import pmda' 2>/dev/null
-+	    $python -c 'from pcp import pmda' 2>/dev/null
- 	    if test $? -eq 0
- 	    then
--		eval PCP_PYTHON_DOMAIN=1 python "$python_name" > "$python_dom"
--		eval PCP_PYTHON_PMNS=1 python "$python_name" > "$python_pmns"
-+		eval PCP_PYTHON_DOMAIN=1 $python "$python_name" > "$python_dom"
-+		eval PCP_PYTHON_PMNS=1 $python "$python_name" > "$python_pmns"
- 	    elif $dso_opt || $daemon_opt
- 	    then
- 		:	# we have an alternative, so continue on
-@@ -1080,7 +1081,7 @@ _install()
- 		    fi
- 		elif [ "X$pmda_type" = Xpython ]
- 		then
--		    python -c 'from pcp import pmda' 2>/dev/null
-+		    $python -c 'from pcp import pmda' 2>/dev/null
- 		    if test $? -ne 0
- 		    then
- 			echo 'Python pcp pmda module is not installed, install it and try again'
-@@ -1102,7 +1103,7 @@ _install()
- 	    args=""
- 	elif [ "$pmda_type" = python ]
- 	then
--	    type="pipe	binary		python $python_name $python_args"
-+	    type="pipe	binary		$python $python_name $python_args"
- 	    args=""
- 	else
- 	    type="dso	$dso_entry	$dso_name"
-diff -Naurp pcp-3.10.2.orig/src/pmcollectl/pmcollectl.py pcp-3.10.2/src/pmcollectl/pmcollectl.py
---- pcp-3.10.2.orig/src/pmcollectl/pmcollectl.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pmcollectl/pmcollectl.py	2015-02-23 21:24:36.665658331 +1100
-@@ -1,9 +1,6 @@
- #!/usr/bin/python
--
--#
--# pmcollectl.py
- #
--# Copyright (C) 2012-2014 Red Hat Inc.
-+# Copyright (C) 2012-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -58,7 +55,7 @@ def scale(value, magnitude):
- 
- def record(context, config, duration, path, host):
-     if os.path.exists(path):
--        print ME + "archive %s already exists\n" % path
-+        print(ME + "archive %s already exists\n" % path)
-         sys.exit(1)
-     # Non-graphical application using libpcp_gui services - never want
-     # to see popup dialogs from pmlogger(1) here, so force the issue.
-@@ -99,7 +96,7 @@ class _CollectPrint(object):
-             self.print_header1_detail()
-         elif self.verbosity == "verbose":
-             self.print_header1_verbose()
--	sys.stdout.flush()
-+        sys.stdout.flush()
-     def print_header2(self):
-         if self.verbosity == "brief":
-             self.print_header2_brief()
-@@ -107,7 +104,7 @@ class _CollectPrint(object):
-             self.print_header2_detail()
-         elif self.verbosity == "verbose":
-             self.print_header2_verbose()
--	sys.stdout.flush()
-+        sys.stdout.flush()
-     def print_header1_brief(self):
-         True                        # pylint: disable-msg=W0104
-     def print_header2_brief(self):
-@@ -149,37 +146,38 @@ class _cpuCollectPrint(_CollectPrint):
-     def print_header1_brief(self):
-         sys.stdout.write('#<--------CPU-------->')
-     def print_header1_detail(self):
--        print '# SINGLE CPU STATISTICS'
-+        print('# SINGLE CPU STATISTICS')
-     def print_header1_verbose(self):
--        print '# CPU SUMMARY (INTR, CTXSW & PROC /sec)'
-+        print('# CPU SUMMARY (INTR, CTXSW & PROC /sec)')
- 
-     def print_header2_brief(self):
-         sys.stdout.write('#cpu sys inter  ctxsw')
-     def print_header2_detail(self):
--        print '#   Cpu  User Nice  Sys Wait IRQ  Soft Steal Idle'
-+        print('#   Cpu  User Nice  Sys Wait IRQ  Soft Steal Idle')
-     def print_header2_verbose(self):
--        print '#User  Nice   Sys  Wait   IRQ  Soft Steal  Idle  CPUs  Intr  Ctxsw  Proc  RunQ   Run   Avg1  Avg5 Avg15 RunT BlkT'
-+        print('#User  Nice   Sys  Wait   IRQ  Soft Steal  Idle  CPUs  Intr  Ctxsw  Proc  RunQ   Run   Avg1  Avg5 Avg15 RunT BlkT')
- 
-     def print_brief(self):
--        print "%4d" % (100 * (self.ss.get_metric_value('kernel.all.cpu.nice') +
--                              self.ss.get_metric_value('kernel.all.cpu.user') +
--                              self.ss.get_metric_value('kernel.all.cpu.intr') +
--                              self.ss.get_metric_value('kernel.all.cpu.sys') +
--                              self.ss.get_metric_value('kernel.all.cpu.steal') +
--                              self.ss.get_metric_value('kernel.all.cpu.irq.hard') +
--                              self.ss.get_metric_value('kernel.all.cpu.irq.soft')) /
--                       ss.cpu_total),
--        print "%3d" % (100 * (self.ss.get_metric_value('kernel.all.cpu.intr') +
--                              self.ss.get_metric_value('kernel.all.cpu.sys') +
--                              self.ss.get_metric_value('kernel.all.cpu.steal') +
--                              self.ss.get_metric_value('kernel.all.cpu.irq.hard') +
--                              self.ss.get_metric_value('kernel.all.cpu.irq.soft')) /
--                       ss.cpu_total),
--        print "%5d %6d" % (self.ss.get_metric_value('kernel.all.intr'),
--                           self.ss.get_metric_value('kernel.all.pswitch')),
-+        sys.stdout.write("%4d %3d %5d %6d" % (
-+            100 * (self.ss.get_metric_value('kernel.all.cpu.nice') +
-+                   self.ss.get_metric_value('kernel.all.cpu.user') +
-+                   self.ss.get_metric_value('kernel.all.cpu.intr') +
-+                   self.ss.get_metric_value('kernel.all.cpu.sys') +
-+                   self.ss.get_metric_value('kernel.all.cpu.steal') +
-+                   self.ss.get_metric_value('kernel.all.cpu.irq.hard') +
-+                   self.ss.get_metric_value('kernel.all.cpu.irq.soft')) /
-+                   ss.cpu_total,
-+            100 * (self.ss.get_metric_value('kernel.all.cpu.intr') +
-+                   self.ss.get_metric_value('kernel.all.cpu.sys') +
-+                   self.ss.get_metric_value('kernel.all.cpu.steal') +
-+                   self.ss.get_metric_value('kernel.all.cpu.irq.hard') +
-+                   self.ss.get_metric_value('kernel.all.cpu.irq.soft')) /
-+                   ss.cpu_total,
-+            self.ss.get_metric_value('kernel.all.intr'),
-+            self.ss.get_metric_value('kernel.all.pswitch')))
-     def print_detail(self):
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.cpu.user'))):
--            print "    %3d  %4d %4d  %3d %4d %3d  %4d %5d %4d" % (
-+            print("    %3d  %4d %4d  %3d %4d %3d  %4d %5d %4d" % (
-                 k,
-                 (100 * (self.ss.get_scalar_value('kernel.percpu.cpu.nice', k) +
-                         self.ss.get_scalar_value('kernel.percpu.cpu.user', k) +
-@@ -200,10 +198,10 @@ class _cpuCollectPrint(_CollectPrint):
-             self.ss.get_scalar_value('kernel.percpu.cpu.irq.hard', k),
-             self.ss.get_scalar_value('kernel.percpu.cpu.irq.soft', k),
-             self.ss.get_scalar_value('kernel.percpu.cpu.steal', k),
--                self.ss.get_scalar_value('kernel.percpu.cpu.idle', k) / 10)
-+                self.ss.get_scalar_value('kernel.percpu.cpu.idle', k) / 10))
-     def print_verbose(self):
-         ncpu = self.ss.get_metric_value('hinv.ncpu')
--        print "%4d %6d %5d %4d %4d %5d " % (
-+        print("%4d %6d %5d %4d %4d %5d %6d %6d %5d %5d %6d %5d %5d %5d %5.2f %5.2f %5.2f %4d %4d" % (
-             (100 * (self.ss.get_metric_value('kernel.all.cpu.nice') +
-                     self.ss.get_metric_value('kernel.all.cpu.user') +
-                     self.ss.get_metric_value('kernel.all.cpu.intr') +
-@@ -221,16 +219,12 @@ class _cpuCollectPrint(_CollectPrint):
-              ss.cpu_total),
-             self.ss.get_metric_value('kernel.all.cpu.wait.total'),
-             self.ss.get_metric_value('kernel.all.cpu.irq.hard'),
--            self.ss.get_metric_value('kernel.all.cpu.irq.soft')
--            ),
--        print "%6d %6d %5d %5d %6d" % (
-+            self.ss.get_metric_value('kernel.all.cpu.irq.soft'),
-             self.ss.get_metric_value('kernel.all.cpu.steal'),
-             self.ss.get_metric_value('kernel.all.cpu.idle') / (10 * ncpu),
-             ncpu,
-             self.ss.get_metric_value('kernel.all.intr'),
--            self.ss.get_metric_value('kernel.all.pswitch')
--            ),
--        print "%5d %5d %5d %5.2f %5.2f %5.2f %4d %4d" % (
-+            self.ss.get_metric_value('kernel.all.pswitch'),
-             self.ss.get_metric_value('kernel.all.nprocs'),
-             self.ss.get_metric_value('kernel.all.runnable'),
-             self.ss.get_metric_value('proc.runq.runnable'),
-@@ -238,7 +232,7 @@ class _cpuCollectPrint(_CollectPrint):
-             self.ss.get_metric_value('kernel.all.load')[1],
-             self.ss.get_metric_value('kernel.all.load')[2],
-             self.ss.get_metric_value('kernel.all.runnable'),
--            self.ss.get_metric_value('proc.runq.blocked'))
-+            self.ss.get_metric_value('proc.runq.blocked')))
- 
- 
- # _interruptCollectPrint ---------------------------------------------
-@@ -254,26 +248,26 @@ class _interruptCollectPrint(_CollectPri
-         for k in range(ndashes):
-             hdr += "-"
-         hdr += ">"
--        print hdr,
-+        sys.stdout.write(hdr)
-     def print_header1_detail(self):
--        print '# INTERRUPT DETAILS'
--        print '# Int    ',
-+        print('# INTERRUPT DETAILS')
-+        sys.stdout.write('# Int    ')
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
--            print 'Cpu%d ' % k,
--        print 'Type            Device(s)'
-+            sys.stdout.write('Cpu%d ' % k)
-+        print('Type            Device(s)')
-     def print_header1_verbose(self):
--        print '# INTERRUPT SUMMARY'
-+        print('# INTERRUPT SUMMARY')
-     def print_header2_brief(self):
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
-             if k == 0:
--                print '#Cpu%d ' % k,
-+                sys.stdout.write('#Cpu%d ' % k)
-             else:
--                print 'Cpu%d ' % k,
-+                sys.stdout.write('Cpu%d ' % k)
-     def print_header2_verbose(self):
--        print '#    ',
-+        sys.stdout.write('#    ')
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
--            print 'Cpu%d ' % k,
--        print
-+            sys.stdout.write('Cpu%d ' % k)
-+        print('')
-     def print_brief(self):
-         int_count = []
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
-@@ -283,7 +277,7 @@ class _interruptCollectPrint(_CollectPri
-                     int_count[k] += self.ss.get_scalar_value(self.ss.metrics_dict[j], k)
- 
-         for k in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
--            print "%4d " % (int_count[k]),
-+            sys.stdout.write("%4d " % (int_count[k]))
-     def print_detail(self):
-         for j in ss.metrics:
-             if j[0:24] != 'kernel.percpu.interrupts':
-@@ -297,16 +291,16 @@ class _interruptCollectPrint(_CollectPri
-                     continue
-             if have_nonzero_value:
-                 # pcp does not give the interrupt # so print spaces
--                print "%-8s" % self.ss.metrics[j_i].split(".")[3],
-+                sys.stdout.write("%-8s" % self.ss.metrics[j_i].split(".")[3])
-                 for i in range(self.ss.get_len(self.ss.get_metric_value('kernel.percpu.interrupts.THR'))):
--                    print "%4d " % (self.ss.get_scalar_value(j_i, i)),
-+                    sys.stdout.write("%4d " % (self.ss.get_scalar_value(j_i, i)))
-                 text = (pm.pmLookupText(self.ss.metric_pmids[j_i], c_api.PM_TEXT_ONELINE))
--                print "%-18s %s" % (text[:(str.index(text, " "))],
--                                 text[(str.index(text, " ")):])
-+                print("%-18s %s" % (text[:(str.index(text, " "))],
-+                                 text[(str.index(text, " ")):]))
-     def print_verbose(self):
--        print "     ",
-+        sys.stdout.write("     ")
-         self.print_brief()
--        print
-+        print('')
- 
- 
- # _diskCollectPrint --------------------------------------------------
-@@ -316,14 +310,14 @@ class _diskCollectPrint(_CollectPrint):
-     def print_header1_brief(self):
-         sys.stdout.write('<----------Disks----------->')
-     def print_header1_detail(self):
--        print '# DISK STATISTICS (/sec)'
-+        print('# DISK STATISTICS (/sec)')
-     def print_header1_verbose(self):
--        print '\n\n# DISK SUMMARY (/sec)'
-+        print('\n\n# DISK SUMMARY (/sec)')
-     def print_header2_brief(self):
-         sys.stdout.write(' KBRead  Reads KBWrit Writes')
-     def print_header2_detail(self):
--        print '#          <---------reads---------><---------writes---------><--------averages--------> Pct'
--        print '#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util'
-+        print('#          <---------reads---------><---------writes---------><--------averages--------> Pct')
-+        print('#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util')
-     def print_header2_verbose(self):
-         sys.stdout.write('#KBRead RMerged  Reads SizeKB  KBWrite WMerged Writes SizeKB\n')
-     def print_brief(self):
-@@ -333,17 +327,17 @@ class _diskCollectPrint(_CollectPrint):
-             self.ss.get_metric_value('disk.all.write_bytes'),
-             self.ss.get_metric_value('disk.all.write')))
-     def print_detail(self):
--        for j in xrange(len(self.ss.metric_pmids)):
-+        for j in range(len(self.ss.metric_pmids)):
-             try:
--		if self.ss.metrics[j] == 'disk.dev.read':
--		    (inst, iname) = pm.pmGetInDom(self.ss.metric_descs[j])
--		    break
--            except pmapi.pmErr, e:
-+                if self.ss.metrics[j] == 'disk.dev.read':
-+                    (inst, iname) = pm.pmGetInDom(self.ss.metric_descs[j])
-+                    break
-+            except pmapi.pmErr as e:
-                 iname = "X"
- 
-         # metric values may be scalars or arrays depending on # of disks
--        for j in xrange(len(iname)):
--            print "%-10s %6d %6d %4d %4d  %6d %6d %4d %4d  %6d %6d %4d %6d %4d" % (
-+        for j in range(len(iname)):
-+            print("%-10s %6d %6d %4d %4d  %6d %6d %4d %4d  %6d %6d %4d %6d %4d" % (
-                 iname[j],
-                 self.ss.get_scalar_value('disk.dev.read_bytes', j),
-                 self.ss.get_scalar_value('disk.dev.read_merge', j),
-@@ -353,7 +347,7 @@ class _diskCollectPrint(_CollectPrint):
-                 self.ss.get_scalar_value('disk.dev.write_merge', j),
-                 self.ss.get_scalar_value('disk.dev.write', j),
-                 self.ss.get_scalar_value('disk.dev.blkwrite', j),
--                0, 0, 0, 0, 0)
-+                0, 0, 0, 0, 0))
- # ??? replace 0 with required fields
- 
-     def print_verbose(self):
-@@ -365,7 +359,7 @@ class _diskCollectPrint(_CollectPrint):
-             avgwrsz = self.ss.get_metric_value('disk.all.write_bytes')
-             avgwrsz /= self.ss.get_metric_value('disk.all.write')
- 
--        print '%6d %6d %6d %6d %7d %8d %6d %6d' % (
-+        print('%6d %6d %6d %6d %7d %8d %6d %6d' % (
-             avgrdsz,
-             self.ss.get_metric_value('disk.all.read_merge'),
-             self.ss.get_metric_value('disk.all.read'),
-@@ -373,7 +367,7 @@ class _diskCollectPrint(_CollectPrint):
-             avgwrsz,
-             self.ss.get_metric_value('disk.all.write_merge'),
-             self.ss.get_metric_value('disk.all.write'),
--            0)
-+            0))
- 
- 
- # _memoryCollectPrint ------------------------------------------------
-@@ -383,22 +377,22 @@ class _memoryCollectPrint(_CollectPrint)
-     def print_header1_brief(self):
-         sys.stdout.write('#<-----------Memory----------->')
-     def print_header1_verbose(self):
--        print '# MEMORY SUMMARY'
-+        print('# MEMORY SUMMARY')
-     def print_header2_brief(self):
--        print '#Free Buff Cach Inac Slab  Map'
-+        print('#Free Buff Cach Inac Slab  Map')
-     def print_header2_verbose(self):
--        print '#<-------------------------------Physical Memory--------------------------------------><-----------Swap------------><-------Paging------>'
--        print '#   Total    Used    Free    Buff  Cached    Slab  Mapped    Anon  Commit  Locked Inact Total  Used  Free   In  Out Fault MajFt   In  Out'
-+        print('#<-------------------------------Physical Memory--------------------------------------><-----------Swap------------><-------Paging------>')
-+        print('#   Total    Used    Free    Buff  Cached    Slab  Mapped    Anon  Commit  Locked Inact Total  Used  Free   In  Out Fault MajFt   In  Out')
-     def print_brief(self):
--        print "%4dM %3dM %3dM %3dM %3dM %3dM " % (
-+        sys.stdout.write("%4dM %3dM %3dM %3dM %3dM %3dM " % (
-             scale(self.ss.get_metric_value('mem.freemem'), 1000),
-             scale(self.ss.get_metric_value('mem.util.bufmem'), 1000),
-             scale(self.ss.get_metric_value('mem.util.cached'), 1000),
-             scale(self.ss.get_metric_value('mem.util.inactive'), 1000),
-             scale(self.ss.get_metric_value('mem.util.slab'), 1000),
--            scale(self.ss.get_metric_value('mem.util.mapped'), 1000)),
-+            scale(self.ss.get_metric_value('mem.util.mapped'), 1000)))
-     def print_verbose(self):
--        print "%8dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %5dM %5dM %5dM %5dM %6d %6d %6d %6d %6d %6d " % (
-+        print("%8dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %6dM %5dM %5dM %5dM %5dM %6d %6d %6d %6d %6d %6d " % (
-             scale(self.ss.get_metric_value('mem.physmem'), 1000),
-             scale(self.ss.get_metric_value('mem.util.used'), 1000),
-             scale(self.ss.get_metric_value('mem.freemem'), 1000),
-@@ -419,7 +413,7 @@ class _memoryCollectPrint(_CollectPrint)
-                   self.ss.get_metric_value('mem.vmstat.pgmajfault'), 1000),
-             scale(self.ss.get_metric_value('mem.vmstat.pgmajfault'), 1000),
-             scale(self.ss.get_metric_value('mem.vmstat.pgpgin'), 1000),
--            scale(self.ss.get_metric_value('mem.vmstat.pgpgout'), 1000))
-+            scale(self.ss.get_metric_value('mem.vmstat.pgpgout'), 1000)))
- 
- 
- # _netCollectPrint --------------------------------------------------
-@@ -429,21 +423,21 @@ class _netCollectPrint(_CollectPrint):
-     def print_header1_brief(self):
-         sys.stdout.write('<----------Network---------->')
-     def print_header1_detail(self):
--        print '# NETWORK STATISTICS (/sec)'
-+        print('# NETWORK STATISTICS (/sec)')
-     def print_header1_verbose(self):
--        print '\n\n# NETWORK SUMMARY (/sec)'
-+        print('\n\n# NETWORK SUMMARY (/sec)')
-     def print_header2_brief(self):
-         sys.stdout.write(' KBIn  PktIn  KBOut  PktOut')
-     def print_header2_detail(self):
--        print '#Num    Name   KBIn  PktIn SizeIn  MultI   CmpI  ErrsI  KBOut PktOut  SizeO   CmpO ErrsO'
-+        print('#Num    Name   KBIn  PktIn SizeIn  MultI   CmpI  ErrsI  KBOut PktOut  SizeO   CmpO ErrsO')
-     def print_header2_verbose(self):
--        print '# KBIn  PktIn SizeIn  MultI   CmpI  ErrsI  KBOut PktOut  SizeO   CmpO  ErrsO'
-+        print('# KBIn  PktIn SizeIn  MultI   CmpI  ErrsI  KBOut PktOut  SizeO   CmpO  ErrsO')
-     def print_brief(self):
--        print "%5d %6d %6d %6d" % (
-+        sys.stdout.write("%5d %6d %6d %6d" % (
-             sum(self.ss.get_metric_value('network.interface.in.bytes')) / 1024,
-             sum(self.ss.get_metric_value('network.interface.in.packets')),
-             sum(self.ss.get_metric_value('network.interface.out.bytes')) / 1024,
--            sum(self.ss.get_metric_value('network.interface.out.packets'))),
-+            sum(self.ss.get_metric_value('network.interface.out.packets'))))
-     def average_packet_size(self, bytes, packets):
-         # calculate mean packet size safely (note that divisor may be zero)
-         result = 0
-@@ -456,7 +450,7 @@ class _netCollectPrint(_CollectPrint):
-         # don't include loopback; TODO: pmDelProfile would be more appropriate
-         self.ss.get_metric_value('network.interface.in.bytes')[0] = 0
-         self.ss.get_metric_value('network.interface.out.bytes')[0] = 0
--        print '%6d %5d %6d %6d %6d %6d %6d %6d %6d %6d %7d' % (
-+        print('%6d %5d %6d %6d %6d %6d %6d %6d %6d %6d %7d' % (
-             sum(self.ss.get_metric_value('network.interface.in.bytes')) / 1024,
-             sum(self.ss.get_metric_value('network.interface.in.packets')),
-             self.average_packet_size('in.bytes', 'in.packets'),
-@@ -467,18 +461,18 @@ class _netCollectPrint(_CollectPrint):
-             sum(self.ss.get_metric_value('network.interface.out.packets')),
-             self.average_packet_size('out.bytes', 'out.packets'),
-             sum(self.ss.get_metric_value('network.interface.total.mcasts')),
--            sum(self.ss.get_metric_value('network.interface.out.errors')))
-+            sum(self.ss.get_metric_value('network.interface.out.errors'))))
-     def print_detail(self):
--        for j in xrange(len(self.ss.metric_pmids)):
-+        for j in range(len(self.ss.metric_pmids)):
-             try:
--		if self.ss.metrics[j] == 'network.interface.in.bytes':
--		    (inst, iname) = pm.pmGetInDom(self.ss.metric_descs[j])
--		    break
--            except pmapi.pmErr, e: # pylint: disable-msg=C0103
-+                if self.ss.metrics[j] == 'network.interface.in.bytes':
-+                    (inst, iname) = pm.pmGetInDom(self.ss.metric_descs[j])
-+                    break
-+            except pmapi.pmErr as e: # pylint: disable-msg=C0103
-                 iname = "X"
- 
--        for j in xrange(len(iname)):
--            print '%4d %-7s %6d %5d %6d %6d %6d %6d %6d %6d %6d %6d %7d' % (
-+        for j in range(len(iname)):
-+            print('%4d %-7s %6d %5d %6d %6d %6d %6d %6d %6d %6d %6d %7d' % (
-                 j, iname[j],
-                 self.ss.get_metric_value('network.interface.in.bytes')[j] / 1024,
-                 self.ss.get_metric_value('network.interface.in.packets')[j],
-@@ -493,7 +487,7 @@ class _netCollectPrint(_CollectPrint):
-                 self.ss.get_metric_value('network.interface.out.packets')[j]) / 1024,
-                     self.ss.get_metric_value('network.interface.total.mcasts')[j],
-                     self.ss.get_metric_value(
--                    'network.interface.out.compressed')[j])
-+                    'network.interface.out.compressed')[j]))
- 
- class _Options(object):
-     def __init__(self):
-@@ -532,11 +526,11 @@ class _Options(object):
- 
- 
-     def override(self, opt):
--	""" Override a few standard PCP options to match free(1) """
--	# pylint: disable=R0201
--	if opt == 's' or opt == 'i' or opt == 'h' or opt == "p":
--	    return 1
--	return 0
-+        """ Override a few standard PCP options to match free(1) """
-+        # pylint: disable=R0201
-+        if opt == 's' or opt == 'i' or opt == 'h' or opt == "p":
-+            return 1
-+        return 0
- 
-     def option_callback(self, opt, optarg, index):
-         """ Perform setup for an individual command line option """
-@@ -550,13 +544,13 @@ class _Options(object):
- 
-         # pylint: disable=W0613
-         if opt == 's':
--            for ssx in xrange(len(optarg)):
-+            for ssx in range(len(optarg)):
-                 self.subsys_arg = optarg[ssx:ssx+1]
-                 try:
-                     subsys.append(s_options[self.subsys_arg][0])
-                 except KeyError:
--                    print sys.argv[0] + \
--                    ": Unimplemented subsystem -s" + self.subsys_arg
-+                    print(sys.argv[0] + \
-+                    ": Unimplemented subsystem -s" + self.subsys_arg)
-                     sys.exit(1)
-                 if self.subsys_arg.isupper():
-                     self.verbosity = s_options[self.subsys_arg][1]
-@@ -651,14 +645,14 @@ if __name__ == '__main__':
-     try:
-         ss.setup_metrics(pm)
-         ss.get_stats(pm)
--    except pmapi.pmErr, e:
-+    except pmapi.pmErr as e:
-         if opts.replay_archive:
-             import textwrap
--            print "One of the following metrics is required " + \
-+            print("One of the following metrics is required " + \
-                   "but absent in " + input_file + "\n" + \
--                  textwrap.fill(str(ss.metrics))
-+                  textwrap.fill(str(ss.metrics)))
-         else:
--            print "unable to setup metrics"
-+            print("unable to setup metrics")
-             sys.exit(1)
- 
-     for ssx in subsys:
-@@ -670,20 +664,20 @@ if __name__ == '__main__':
-             if ssx == 0:
-                 continue
-             ssx.print_header1()
--        print
-+        print('')
-         for ssx in subsys:
-             if ssx == 0:
-                 continue
-             ssx.print_header2()
--        print
-+        print('')
- 
-     try:
-         i_samples = 0
-         while (i_samples < opts.n_samples) or (opts.n_samples == 0):
-             pm.pmtimevalSleep(delta)
-             if opts.verbosity != "brief" and len(subsys) > 1:
--                print "\n### RECORD %d >>> %s <<< %s ###" % \
--                      (i_samples+1, host, time.strftime("%a %b %d %H:%M:%S %Y"))
-+                print("\n### RECORD %d >>> %s <<< %s ###" % \
-+                     (i_samples+1, host, time.strftime("%a %b %d %H:%M:%S %Y")))
- 
-             try:
-                 ss.get_stats(pm)
-@@ -698,9 +692,9 @@ if __name__ == '__main__':
-                     ssx.print_line()
-                 if opts.verbosity == "brief":
-                     print
--            except pmapi.pmErr, e:
-+            except pmapi.pmErr as e:
-                 if str(e).find("PM_ERR_EOL") != -1:
--                    print str(e)
-+                    print(str(e))
-                 break
- 
-             i_samples += 1
-diff -Naurp pcp-3.10.2.orig/src/pmdas/dmcache/pmdadmcache.python pcp-3.10.2/src/pmdas/dmcache/pmdadmcache.python
---- pcp-3.10.2.orig/src/pmdas/dmcache/pmdadmcache.python	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/pmdas/dmcache/pmdadmcache.python	2015-02-23 21:24:36.665658331 +1100
-@@ -2,7 +2,7 @@
- Performance Metrics Domain Agent exporting Device Mapper Cache metrics.
- '''
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- # 
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -23,6 +23,10 @@ from cpmapi import (PM_SEM_DISCRETE, PM_
- from subprocess import PIPE, Popen
- from os import getenv
- 
-+import sys
-+if sys.version >= '3':
-+    long = int	# python2 to python3 portability (no long() in python3)
-+
- IOMODES = { 'writeback': 1, 'writethrough': 2, 'passthrough': 3 }
- 
- class DmCacheStats(Structure):
-@@ -65,18 +69,18 @@ class DmCacheStats(Structure):
- 
-         self.size = long(data[2]) - long(data[1])
-         self.metadata_block_size = mbsize
--        self.metadata_used  = long(data[5]) * mbsize / 1024
--        self.metadata_total = long(data[6]) * mbsize / 1024
-+        self.metadata_used  = long(data[5]) * int(mbsize / 1024)
-+        self.metadata_total = long(data[6]) * int(mbsize / 1024)
-         self.cache_block_size = cbsize
--        self.cache_used = long(data[8]) * cbsize / 1024
--        self.cache_total = long(data[9]) * cbsize / 1024
-+        self.cache_used = long(data[8]) * int(cbsize / 1024)
-+        self.cache_total = long(data[9]) * int(cbsize / 1024)
-         self.read_hits = long(data[10])
-         self.read_misses = long(data[11])
-         self.write_hits = long(data[12])
-         self.write_misses = long(data[13])
-         self.demotions = long(data[14])
-         self.promotions = long(data[15])
--        self.dirty = long(data[16]) * cbsize / 1024
-+        self.dirty = long(data[16]) * int(cbsize / 1024)
-         self.iomode = IOMODES[data[18]]
- 
-     def io_mode(self):
-@@ -206,7 +210,7 @@ class DmCachePMDA(PMDA):
-             output, errors = pipe.communicate()
-             if errors:
-                 self.err("refresh: %s error: %s" % (self.dmstatus, errors))
--            for line in output.splitlines():
-+            for line in output.decode().splitlines():
-                 if 'No devices found' in line:
-                     continue
-                 name = line[:line.find(':')]            # extract cache name
-diff -Naurp pcp-3.10.2.orig/src/pmdas/gluster/pmdagluster.python pcp-3.10.2/src/pmdas/gluster/pmdagluster.python
---- pcp-3.10.2.orig/src/pmdas/gluster/pmdagluster.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pmdas/gluster/pmdagluster.python	2015-02-23 21:24:36.666658330 +1100
-@@ -2,7 +2,7 @@
- Performance Metrics Domain Agent exporting Gluster filesystem metrics.
- '''
- #
--# Copyright (c) 2013-2014 Red Hat.
-+# Copyright (c) 2013-2015 Red Hat.
- # 
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -30,6 +30,10 @@ import subprocess
- 
- import threading
- 
-+import sys
-+if sys.version >= '3':
-+    long = int	# python2 to python3 portability (no long() in python3)
-+
- VOL_INFO_COMMAND = 'gluster --xml volume info'
- VOL_STOP_COMMAND = 'gluster --xml volume profile %s stop'
- VOL_START_COMMAND = 'gluster --xml volume profile %s start'
-@@ -233,8 +237,8 @@ class GlusterPMDA(PMDA):
-             return [c_api.PM_ERR_INST, 0]
-         cache = cast(voidp, POINTER(GlusterBrick))
-         brick = cache.contents
--        fileop = item / 4
--        index = item % 4
-+        fileop = int(item / 4)
-+        index = int(item % 4)
-         if (index == 0):
-             return [brick.mintime[fileop], 1]
-         elif (index == 1):
-diff -Naurp pcp-3.10.2.orig/src/pmdas/simple/pmdasimple.python pcp-3.10.2/src/pmdas/simple/pmdasimple.python
---- pcp-3.10.2.orig/src/pmdas/simple/pmdasimple.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pmdas/simple/pmdasimple.python	2015-02-23 21:24:36.666658330 +1100
-@@ -2,7 +2,7 @@
- Python implementation of the "simple" Performance Metrics Domain Agent.
- '''
- #
--# Copyright (c) 2013 Red Hat.
-+# Copyright (c) 2013,2015 Red Hat.
- # 
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -206,7 +206,7 @@ class SimplePMDA(PMDA):
-         self.configfile = PCP.pmGetConfig('PCP_PMDAS_DIR')
-         self.configfile += '/' + name + '/' + name + '.conf'
- 
--	self.connect_pmcd();
-+        self.connect_pmcd()
- 
-         self.color_indom = self.indom(0)
-         self.add_indom(pmdaIndom(self.color_indom, self.colors))
-diff -Naurp pcp-3.10.2.orig/src/pmdas/unbound/pmdaunbound.python pcp-3.10.2/src/pmdas/unbound/pmdaunbound.python
---- pcp-3.10.2.orig/src/pmdas/unbound/pmdaunbound.python	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/pmdas/unbound/pmdaunbound.python	2015-02-23 21:24:36.667658329 +1100
-@@ -20,7 +20,10 @@ from pcp.pmapi import pmUnits
- from pcp.pmda import PMDA, pmdaMetric, pmdaIndom
- from subprocess import Popen, PIPE
- from os import getenv
--import string, shlex
-+import shlex
-+import sys
-+if sys.version >= '3':
-+    long = int	# python2 to python3 portability (no long() in python3)
- 
- class UnboundPMDA(PMDA):
-     '''
-@@ -40,9 +43,9 @@ class UnboundPMDA(PMDA):
-         p.wait()
-         try:
-             stdout, stderr = p.communicate()
--            stdoutlines = string.split(stdout.strip(), '\n')
--            for line in stdoutlines:
--                keyval = string.split(line, '=')
-+            stdoutlines = stdout.decode().strip()
-+            for line in stdoutlines.split('\n'):
-+                keyval = line.split('=')
-                 if keyval[0].startswith( 'histogram' ):
-                     # Replace "." with "_" to avoid splitting metric name in multiple sub sections
-                     keyval[0] = "histogram." + "_".join(str(v) for v in keyval[0].split(".")[1:])
-diff -Naurp pcp-3.10.2.orig/src/pmdas/zswap/pmdazswap.python pcp-3.10.2/src/pmdas/zswap/pmdazswap.python
---- pcp-3.10.2.orig/src/pmdas/zswap/pmdazswap.python	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pmdas/zswap/pmdazswap.python	2015-02-23 21:24:36.667658329 +1100
-@@ -2,7 +2,7 @@
- Performance Metrics Domain Agent exporting Linux compressed swap metrics.
- '''
- #
--# Copyright (c) 2014 Red Hat.
-+# Copyright (c) 2014-2015 Red Hat.
- # 
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -20,6 +20,9 @@ from pcp.pmapi import pmUnits
- from pcp.pmda import PMDA, pmdaMetric, pmdaIndom
- from resource import getpagesize
- from os import getenv, listdir
-+import sys
-+if sys.version >= '3':
-+    long = int	# python2 to python3 portability (no long() in python3)
- 
- ZSWAP_PAGESIZE = getpagesize()
- ZSWAP_STATS_PATH = '/sys/kernel/debug/zswap'
-diff -Naurp pcp-3.10.2.orig/src/pmiostat/pmiostat.py pcp-3.10.2/src/pmiostat/pmiostat.py
---- pcp-3.10.2.orig/src/pmiostat/pmiostat.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/pmiostat/pmiostat.py	2015-02-23 21:24:36.667658329 +1100
-@@ -1,6 +1,6 @@
- #!/usr/bin/python
- #
--# Copyright (C) 2014 Red Hat.
-+# Copyright (C) 2014-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -19,19 +19,19 @@ import sys
- from pcp import pmapi, pmcc
- from cpmapi import PM_TYPE_U64, PM_CONTEXT_ARCHIVE, PM_SPACE_KBYTE
- 
--IOSTAT_SD_METRICS = [ b'disk.dev.read', b'disk.dev.read_bytes',
--                 b'disk.dev.write', b'disk.dev.write_bytes',
--                 b'disk.dev.read_merge', b'disk.dev.write_merge',
--                 b'disk.dev.blkread', b'disk.dev.blkwrite',
--                 b'disk.dev.read_rawactive', b'disk.dev.write_rawactive',
--                 b'disk.dev.avactive']
--
--IOSTAT_DM_METRICS = [ b'disk.dm.read', b'disk.dm.read_bytes',
--                 b'disk.dm.write', b'disk.dm.write_bytes',
--                 b'disk.dm.read_merge', b'disk.dm.write_merge',
--                 b'disk.dm.blkread', b'disk.dm.blkwrite',
--                 b'disk.dm.read_rawactive', b'disk.dm.write_rawactive',
--                 b'disk.dm.avactive']
-+IOSTAT_SD_METRICS = [ 'disk.dev.read', 'disk.dev.read_bytes',
-+                 'disk.dev.write', 'disk.dev.write_bytes',
-+                 'disk.dev.read_merge', 'disk.dev.write_merge',
-+                 'disk.dev.blkread', 'disk.dev.blkwrite',
-+                 'disk.dev.read_rawactive', 'disk.dev.write_rawactive',
-+                 'disk.dev.avactive']
-+
-+IOSTAT_DM_METRICS = [ 'disk.dm.read', 'disk.dm.read_bytes',
-+                 'disk.dm.write', 'disk.dm.write_bytes',
-+                 'disk.dm.read_merge', 'disk.dm.write_merge',
-+                 'disk.dm.blkread', 'disk.dm.blkwrite',
-+                 'disk.dm.read_rawactive', 'disk.dm.write_rawactive',
-+                 'disk.dm.avactive']
- 
- class IostatReport(pmcc.MetricGroupPrinter):
-     Hcount = 0
-@@ -51,45 +51,45 @@ class IostatReport(pmcc.MetricGroupPrint
- 
-     def report(self, manager):
-         if 'dm' in IostatOptions.xflag:
--            subtree = b'disk.dm'
-+            subtree = 'disk.dm'
-         else:
--            subtree = b'disk.dev'
-+            subtree = 'disk.dev'
-         group = manager["iostat"]
- 
--        if group[subtree + b'.read_merge'].netPrevValues == None:
-+        if group[subtree + '.read_merge'].netPrevValues == None:
-             # need two fetches to report rate converted counter metrics
-             return
- 
--        instlist = self.instlist(group, subtree + b'.read')
-+        instlist = self.instlist(group, subtree + '.read')
-         dt = self.timeStampDelta(group)
-         timestamp = group.contextCache.pmCtime(int(group.timestamp)).rstrip()
- 
--        c_rrqm = self.curVals(group, subtree + b'.read_merge')
--        p_rrqm = self.prevVals(group, subtree + b'.read_merge')
-+        c_rrqm = self.curVals(group, subtree + '.read_merge')
-+        p_rrqm = self.prevVals(group, subtree + '.read_merge')
- 
--        c_wrqm = self.curVals(group, subtree + b'.write_merge')
--        p_wrqm = self.prevVals(group, subtree + b'.write_merge')
-+        c_wrqm = self.curVals(group, subtree + '.write_merge')
-+        p_wrqm = self.prevVals(group, subtree + '.write_merge')
- 
--        c_r = self.curVals(group, subtree + b'.read')
--        p_r = self.prevVals(group, subtree + b'.read')
-+        c_r = self.curVals(group, subtree + '.read')
-+        p_r = self.prevVals(group, subtree + '.read')
- 
--        c_w = self.curVals(group, subtree + b'.write')
--        p_w = self.prevVals(group, subtree + b'.write')
-+        c_w = self.curVals(group, subtree + '.write')
-+        p_w = self.prevVals(group, subtree + '.write')
- 
--        c_rkb = self.curVals(group, subtree + b'.read_bytes')
--        p_rkb = self.prevVals(group, subtree + b'.read_bytes')
-+        c_rkb = self.curVals(group, subtree + '.read_bytes')
-+        p_rkb = self.prevVals(group, subtree + '.read_bytes')
- 
--        c_wkb = self.curVals(group, subtree + b'.write_bytes')
--        p_wkb = self.prevVals(group, subtree + b'.write_bytes')
-+        c_wkb = self.curVals(group, subtree + '.write_bytes')
-+        p_wkb = self.prevVals(group, subtree + '.write_bytes')
- 
--        c_ractive = self.curVals(group, subtree + b'.read_rawactive')
--        p_ractive = self.prevVals(group, subtree + b'.read_rawactive')
-+        c_ractive = self.curVals(group, subtree + '.read_rawactive')
-+        p_ractive = self.prevVals(group, subtree + '.read_rawactive')
- 
--        c_wactive = self.curVals(group, subtree + b'.write_rawactive')
--        p_wactive = self.prevVals(group, subtree + b'.write_rawactive')
-+        c_wactive = self.curVals(group, subtree + '.write_rawactive')
-+        p_wactive = self.prevVals(group, subtree + '.write_rawactive')
- 
--        c_avactive = self.curVals(group, subtree + b'.avactive')
--        p_avactive = self.prevVals(group, subtree + b'.avactive')
-+        c_avactive = self.curVals(group, subtree + '.avactive')
-+        p_avactive = self.prevVals(group, subtree + '.avactive')
- 
-         # check availability
-         if p_rrqm == {} or p_wrqm == {} or p_r == {} or p_w == {} or p_rkb == {} \
-@@ -151,7 +151,7 @@ class IostatReport(pmcc.MetricGroupPrint
-             if tot_active:
-                     util = 100.0 * tot_active / dt
- 
--            device = inst.decode('utf-8')	# prepare name for printing
-+            device = inst	# prepare name for printing
-             if "t" in IostatOptions.xflag:
-                 print("%-24s %-12s %7.1f %7.1f %6.1f %6.1f %8.1f %8.1f %8.2f %8.2f %7.1f %7.1f %7.1f %5.1f" \
-                 % (timestamp, device, rrqm, wrqm, r, w, rkb, wkb, avgrqsz, avgqsz, await, r_await, w_await, util))
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/mmv.py pcp-3.10.2/src/python/pcp/mmv.py
---- pcp-3.10.2.orig/src/python/pcp/mmv.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/mmv.py	2015-02-23 21:24:36.668658329 +1100
-@@ -1,7 +1,7 @@
- # pylint: disable=C0103
- """Wrapper module for libpcp_mmv - PCP Memory Mapped Values library
- #
--# Copyright (C) 2013 Red Hat.
-+# Copyright (C) 2013,2015 Red Hat.
- #
- # This file is part of the "pcp" module, the python interfaces for the
- # Performance Co-Pilot toolkit.
-@@ -85,6 +85,13 @@ class mmv_instance(Structure):
-     _fields_ = [("internal", c_int),
-                 ("external", c_char * MMV_NAMEMAX)]
- 
-+    def __init__(self, inst, name):
-+        Structure.__init__(self)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        self.external = name
-+        self.internal = inst
-+
- class mmv_indom(Structure):
-     """ Represents an instance domain (for set valued metrics)
-         Instance domains have associated instances - integer/string pairs.
-@@ -96,6 +103,16 @@ class mmv_indom(Structure):
-                 ("shorttext", c_char_p),
-                 ("helptext", c_char_p)]
- 
-+    def __init__(self, serial, shorttext = '', helptext = ''):
-+        Structure.__init__(self)
-+        if type(helptext) != type(b''):
-+            helptext = helptext.encode('utf-8')
-+        if type(shorttext) != type(b''):
-+            shorttext = shorttext.encode('utf-8')
-+        self.shorttext = shorttext
-+        self.helptext = shorttext
-+        self.serial = serial
-+
-     def set_instances(self, instances):
-         """ Update the instances and counts fields for this indom """
-         self.count = len(instances)
-@@ -118,6 +135,20 @@ class mmv_metric(Structure):
-                 ("shorttext", c_char_p),
-                 ("helptext", c_char_p)]
- 
-+    def __init__(self, name, item, typeof, semantics, dimension, indom = 0, shorttext = '', helptext = ''):
-+        Structure.__init__(self)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(helptext) != type(b''):
-+            helptext = helptext.encode('utf-8')
-+        if type(shorttext) != type(b''):
-+            shorttext = shorttext.encode('utf-8')
-+        self.shorttext = shorttext
-+        self.helptext = shorttext
-+        self.typeof = typeof
-+        self.indom = indom
-+        self.item = item
-+
- ##
- # PCP Memory Mapped Value Services
- 
-@@ -185,6 +216,8 @@ class MemoryMappedValues(object):
-     """
- 
-     def __init__(self, name, flags = 0, cluster = 42):
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         self._name = name
-         self._cluster = cluster  # PMID cluster number (domain is MMV)
-         self._flags = flags      # MMV_FLAGS_* flags
-@@ -263,6 +296,10 @@ class MemoryMappedValues(object):
-             a convenience only for situations where performance will not
-             be affected by repeated (linear) name/inst lookups.
-         """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         return LIBPCP_MMV.mmv_lookup_value_desc(self._handle, name, inst)
- 
-     def add(self, mapping, value):
-@@ -279,6 +316,8 @@ class MemoryMappedValues(object):
- 
-     def set_string(self, mapping, value):
-         """ Set the string mapped metric to a given value """
-+        if type(value) != type(b''):
-+            value = value.encode('utf-8')
-         LIBPCP_MMV.mmv_set_string(self._handle, mapping, value, len(value))
- 
-     def interval_start(self, mapping):
-@@ -294,25 +333,47 @@ class MemoryMappedValues(object):
- 
-     def lookup_add(self, name, inst, value):
-         """ Lookup the named metric[instance] and add a value to it """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_add(self._handle, name, inst, value)
- 
-     def lookup_inc(self, name, inst):
-         """ Lookup the named metric[instance] and add one to it """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_inc(self._handle, name, inst)
- 
-     def lookup_set(self, name, inst, value):
-         """ Lookup the named metric[instance] and set its value """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_set(self._handle, name, inst, value)
- 
-     def lookup_interval_start(self, name, inst):
-         """ Lookup the named metric[instance] and start an interval
-             The opaque handle returned is passed to interval_end().
-         """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         return LIBPCP_MMV.mmv_stats_interval_start(self._handle,
-                                                    None, name, inst)
- 
-     def lookup_set_string(self, name, inst, s):
-         """ Lookup the named metric[instance] and set its string value """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-+        if type(s) != type(b''):
-+            s = s.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_set_strlen(self._handle, name, inst, s, len(s))
- 
-     def lookup_add_fallback(self, name, inst, fall, value):
-@@ -321,6 +382,10 @@ class MemoryMappedValues(object):
-             One example use is: add value to bucketN else use a catch-all
-                                 bucket such as "other"
-         """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_add_fallback(self._handle, name, inst, fall, value)
- 
-     def lookup_inc_fallback(self, name, inst, fallback):
-@@ -328,5 +393,9 @@ class MemoryMappedValues(object):
-             If instance is not found, fallback to using a second instance
-             One sample use is: inc value of BucketA, else inc a catch-all
-         """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         LIBPCP_MMV.mmv_stats_inc_fallback(self._handle, name, inst, fallback)
- 
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/pmapi.py pcp-3.10.2/src/python/pcp/pmapi.py
---- pcp-3.10.2.orig/src/python/pcp/pmapi.py	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/pmapi.py	2015-02-23 21:24:36.669658327 +1100
-@@ -100,18 +100,18 @@ LIBC = CDLL(find_library("c"))
- #
- import sys
- 
--if sys.version > '3':
-+if sys.version >= '3':
-     integer_types = (int,)
-     long = int
- else:
-     integer_types = (int, long,)
- 
- def pyFileToCFile(fileObj):
--    if sys.version > '3':
-+    if sys.version >= '3':
-         from os import fdopen
-         ctypes.pythonapi.PyObject_AsFileDescriptor.restype = ctypes.c_int
-         ctypes.pythonapi.PyObject_AsFileDescriptor.argtypes = [ctypes.py_object]
--        return fdopen(ctypes.pythonapi.PyObject_AsFileDescriptor(pyfile), "r")
-+        return fdopen(ctypes.pythonapi.PyObject_AsFileDescriptor(fileObj), "r", closefd=False)
-     else:
-         ctypes.pythonapi.PyFile_AsFile.restype = ctypes.c_void_p
-         ctypes.pythonapi.PyFile_AsFile.argtypes = [ctypes.py_object]
-@@ -138,8 +138,8 @@ class pmErr(Exception):
-         errStr = create_string_buffer(c_api.PM_MAXERRMSGLEN)
-         errStr = LIBPCP.pmErrStr_r(self.args[0], errStr, c_api.PM_MAXERRMSGLEN)
-         for index in range(1, len(self.args)):
--            errStr += " " + str(self.args[index])
--        return errStr
-+            errStr += b" " + str(self.args[index]).encode('utf-8')
-+        return str(errStr.decode())
- 
-     def progname(self):
-         return c_char_p.in_dll(LIBPCP, "pmProgname").value
-@@ -177,6 +177,8 @@ class timeval(Structure):
-         """ Construct timeval from a string using pmParseInterval """
-         tvp = builder()
-         errmsg = c_char_p()
-+        if type(interval) != type(b''):
-+            interval = interval.encode('utf-8')
-         status = LIBPCP.pmParseInterval(interval, byref(tvp), byref(errmsg))
-         if status < 0:
-             raise pmErr(status, errmsg)
-@@ -288,7 +290,8 @@ class pmUnits(Structure):
- 
-     def __str__(self):
-         unitstr = ctypes.create_string_buffer(64)
--        return str(LIBPCP.pmUnitsStr_r(self, unitstr, 64))
-+        result = LIBPCP.pmUnitsStr_r(self, unitstr, 64)
-+        return str(result.decode())
- 
- class pmValueBlock(Structure):
-     """Value block bitfields for different compilers
-@@ -454,7 +457,7 @@ class pmMetricSpec(Structure):
-                  ("ninst", c_int),
-                  ("inst",  POINTER(c_char_p)) ]
-     def __str__(self):
--        insts = map(lambda x: str(self.inst[x]), range(self.ninst))
-+        insts = list(map(lambda x: str(self.inst[x]), range(self.ninst)))
-         fields = (addressof(self), self.isarch, self.source, insts)
-         return "pmMetricSpec@%#lx src=%s metric=%s insts=" % fields
- 
-@@ -464,6 +467,8 @@ class pmMetricSpec(Structure):
-         errmsg = c_char_p()
-         if type(source) != type(b''):
-             source = source.encode('utf-8')
-+        if type(string) != type(b''):
-+            string = string.encode('utf-8')
-         status = LIBPCP.pmParseMetricSpec(string, isarch, source,
-                                         byref(result), byref(errmsg))
-         if status < 0:
-@@ -1094,11 +1099,13 @@ class pmContext(object):
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP.pmGetChildren(name, byref(offspring))
-         if status < 0:
-             raise pmErr(status)
-         if status > 0:
--            childL = map(lambda x: str(offspring[x]), range(status))
-+            childL = list(map(lambda x: str(offspring[x]), range(status)))
-             LIBC.free(offspring)
-         else:
-             return None
-@@ -1113,13 +1120,15 @@ class pmContext(object):
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP.pmGetChildrenStatus(name,
-                         byref(offspring), byref(childstat))
-         if status < 0:
-             raise pmErr(status)
-         if status > 0:
--            childL = map(lambda x: str(offspring[x]), range(status))
--            statL = map(lambda x: int(childstat[x]), range(status))
-+            childL = list(map(lambda x: str(offspring[x]), range(status)))
-+            statL = list(map(lambda x: int(childstat[x]), range(status)))
-             LIBC.free(offspring)
-             LIBC.free(childstat)
-         else:
-@@ -1145,6 +1154,8 @@ class pmContext(object):
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        if type(filename) != type(b''):
-+            filename = filename.encode('utf-8')
-         status = LIBPCP.pmLoadNameSpace(filename)
-         if status < 0:
-             raise pmErr(status)
-@@ -1156,21 +1167,25 @@ class pmContext(object):
-         c_uint pmid [] = pmLookupName("MetricName")
-         c_uint pmid [] = pmLookupName(("MetricName1", "MetricName2", ...))
-         """
--        if type(nameA) == type(""):
-+        status = LIBPCP.pmUseContext(self.ctx)
-+        if status < 0:
-+            raise pmErr(status)
-+        if type(nameA) == type('') or type(nameA) == type(b''):
-             n = 1
-         else:
-             n = len(nameA)
-         names = (c_char_p * n)()
--        if type(nameA) == type(""):
-+        if type(nameA) == type(''):
-+            names[0] = c_char_p(nameA.encode('utf-8'))
-+        elif type(nameA) == type(b''):
-             names[0] = c_char_p(nameA)
-         else:
-             for i in range(len(nameA)):
--                names[i] = c_char_p(nameA[i])
--
-+                if type(nameA[i]) == type(b''):
-+                    names[i] = c_char_p(nameA[i])
-+                else:
-+                    names[i] = c_char_p(nameA[i].encode('utf-8'))
-         pmidA = (c_uint * n)()
--        status = LIBPCP.pmUseContext(self.ctx)
--        if status < 0:
--            raise pmErr(status)
-         LIBPCP.pmLookupName.argtypes = [c_int, (c_char_p * n), POINTER(c_uint)]
-         status = LIBPCP.pmLookupName(n, names, pmidA)
-         if status < 0:
-@@ -1185,31 +1200,31 @@ class pmContext(object):
-         """PMAPI - Return list of all metric names having this identical PMID
-         tuple names = pmNameAll(metric_id)
-         """
--        nameA_p = POINTER(c_char_p)()
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        nameA_p = POINTER(c_char_p)()
-         status = LIBPCP.pmNameAll(pmid, byref(nameA_p))
-         if status < 0:
-             raise pmErr(status)
--        nameL = map(lambda x: str(nameA_p[x]), range(status))
--        LIBC.free( nameA_p )
-+        nameL = list(map(lambda x: str(nameA_p[x].decode()), range(status)))
-+        LIBC.free(nameA_p)
-         return nameL
- 
-     def pmNameID(self, pmid):
-         """PMAPI - Return a metric name from a PMID
-         name = pmNameID(self.metric_id)
-         """
--        k = c_char_p()
-+        name = c_char_p()
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
--        status = LIBPCP.pmNameID(pmid, byref(k))
-+        status = LIBPCP.pmNameID(pmid, byref(name))
-         if status < 0:
-             raise pmErr(status)
--        name = k.value
--        LIBC.free( k )
--        return name
-+        result = name.value
-+        LIBC.free(name)
-+        return str(result.decode())
- 
-     def pmTraversePMNS(self, name, callback):
-         """PMAPI - Scan namespace, depth first, run CALLBACK at each node
-@@ -1219,6 +1234,8 @@ class pmContext(object):
-         if status < 0:
-             raise pmErr(status)
-         cb = traverseCB_type(callback)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP.pmTraversePMNS(name, cb)
-         if status < 0:
-             raise pmErr(status)
-@@ -1238,6 +1255,10 @@ class pmContext(object):
-         """PMAPI - Register a derived metric name and definition
-         pm.pmRegisterDerived("MetricName", "MetricName Expression")
-         """
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(expr) != type(b''):
-+            expr = expr.encode('utf-8')
-         status = LIBPCP.pmRegisterDerived(name, expr)
-         if status != 0:
-             raise pmErr(status)
-@@ -1245,11 +1266,13 @@ class pmContext(object):
-         if status < 0:
-             raise pmErr(status)
-         
--    def pmLoadDerivedConfig(self, f):
-+    def pmLoadDerivedConfig(self, fname):
-         """PMAPI - Register derived metric names and definitions from a file
-         pm.pmLoadDerivedConfig("FileName")
-         """
--        status = LIBPCP.pmLoadDerivedConfig(f)
-+        if type(fname) != type(b''):
-+            fname = fname.encode('utf-8')
-+        status = LIBPCP.pmLoadDerivedConfig(fname)
-         if status < 0:
-             raise pmErr(status)
-         status = LIBPCP.pmReconnectContext(self.ctx)
-@@ -1262,7 +1285,8 @@ class pmContext(object):
-         definition cannot be parsed
-         pm.pmRegisterDerived()
-         """
--        return str(LIBPCP.pmDerivedErrStr())
-+        result = LIBPCP.pmDerivedErrStr()
-+        return str(result.decode())
- 
-     ##
-     # PMAPI Metrics Description Services
-@@ -1329,9 +1353,9 @@ class pmContext(object):
-         status = LIBPCP.pmLookupInDomText(get_indom(pmdesc), kind, byref(buf))
-         if status < 0:
-             raise pmErr(status)
--        text = str(buf.value)
-+        result = buf.value
-         LIBC.free(buf)
--        return text
-+        return str(result.decode())
- 
-     def pmLookupText(self, pmid, kind = c_api.PM_TEXT_ONELINE):
-         """PMAPI - Lookup the description of a metric from its pmID
-@@ -1366,8 +1390,8 @@ class pmContext(object):
-         if status < 0:
-             raise pmErr(status)
-         if status > 0:
--            nameL = map(lambda x: str(nameA_p[x]), range(status))
--            instL = map(lambda x: int(instA_p[x]), range(status))
-+            nameL = list(map(lambda x: str(nameA_p[x].decode()), range(status)))
-+            instL = list(map(lambda x: int(instA_p[x]), range(status)))
-             LIBC.free(instA_p)
-             LIBC.free(nameA_p)
-         else:
-@@ -1383,6 +1407,8 @@ class pmContext(object):
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP.pmLookupInDom(get_indom(pmdesc), name)
-         if status < 0:
-             raise pmErr(status)
-@@ -1402,9 +1428,9 @@ class pmContext(object):
-         status = LIBPCP.pmNameInDom(get_indom(pmdesc), instval, byref(name_p))
-         if status < 0:
-             raise pmErr(status)
--        outName = str(name_p.value)
-+        result = name_p.value
-         LIBC.free(name_p)
--        return outName
-+        return str(result.decode())
- 
-     ##
-     # PMAPI Context Services
-@@ -1537,7 +1563,8 @@ class pmContext(object):
-         """
-         buflen = c_api.PM_LOG_MAXHOSTLEN
-         buffer = ctypes.create_string_buffer(buflen)
--        return str(LIBPCP.pmGetContextHostName_r(self.ctx, buffer, buflen))
-+        result = LIBPCP.pmGetContextHostName_r(self.ctx, buffer, buflen)
-+        return str(result.decode())
- 
-     ##
-     # PMAPI Timezone Services
-@@ -1555,6 +1582,8 @@ class pmContext(object):
-     @staticmethod
-     def pmNewZone(tz):
-         """PMAPI - Create new zone handle and set reporting timezone """
-+        if type(tz) != type(b''):
-+            tz = tz.encode('utf-8')
-         status = LIBPCP.pmNewZone(tz)
-         if status < 0:
-             raise pmErr(status)
-@@ -1575,9 +1604,9 @@ class pmContext(object):
-         status = LIBPCP.pmWhichZone(byref(tz_p))
-         if status < 0:
-             raise pmErr(status)
--        tz = str(tz_p.value)
-+        tz = tz_p.value
-         LIBC.free(tz_p)
--        return tz
-+        return str(tz.decode())
- 
-     def pmLocaltime(self, seconds):
-         """PMAPI - convert the date and time for a reporting timezone """
-@@ -1597,7 +1626,7 @@ class pmContext(object):
-         result = ctypes.create_string_buffer(32)
-         timetp = c_long(long(seconds))
-         LIBPCP.pmCtime(byref(timetp), result)
--        return str(result.value)
-+        return str(result.value.decode())
- 
-     ##
-     # PMAPI Metrics Services
-@@ -1680,8 +1709,8 @@ class pmContext(object):
-         if status < 0:
-             raise pmErr(status)
-         if status > 0:
--            nameL = map(lambda x: str(nameA_p[x]), range(status))
--            instL = map(lambda x: int(instA_p[x]), range(status))
-+            nameL = list(map(lambda x: str(nameA_p[x].decode()), range(status)))
-+            instL = list(map(lambda x: int(instA_p[x]), range(status)))
-             LIBC.free(instA_p)
-             LIBC.free(nameA_p)
-         else:
-@@ -1697,6 +1726,8 @@ class pmContext(object):
-         status = LIBPCP.pmUseContext(self.ctx)
-         if status < 0:
-             raise pmErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP.pmLookupInDomArchive(get_indom(pmdesc), name)
-         if status < 0:
-             raise pmErr(status)
-@@ -1715,9 +1746,9 @@ class pmContext(object):
-         status = LIBPCP.pmNameInDomArchive(indom, inst, byref(name_p))
-         if status < 0:
-             raise pmErr(status)
--        outName = str(name_p.value)
-+        result = name_p.value
-         LIBC.free(name_p)
--        return outName
-+        return str(result.decode())
- 
-     def pmFetchArchive(self):
-         """PMAPI - Fetch measurements from the target source
-@@ -1740,13 +1771,17 @@ class pmContext(object):
-     @staticmethod
-     def pmGetConfig(variable):
-         """PMAPI - Return value from environment or pcp config file """
--        return str(LIBPCP.pmGetConfig(variable))
-+        if type(variable) != type(b''):
-+            variable = variable.encode('utf-8')
-+        result = LIBPCP.pmGetConfig(variable)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmErrStr(code):
-         """PMAPI - Return value from environment or pcp config file """
-         errstr = ctypes.create_string_buffer(c_api.PM_MAXERRMSGLEN)
--        return str(LIBPCP.pmErrStr_r(code, errstr, c_api.PM_MAXERRMSGLEN))
-+        result = LIBPCP.pmErrStr_r(code, errstr, c_api.PM_MAXERRMSGLEN)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmExtractValue(valfmt, vlist, intype, outtype):
-@@ -1799,19 +1834,22 @@ class pmContext(object):
-     def pmUnitsStr(units):
-         """PMAPI - Convert units struct to a readable string """
-         unitstr = ctypes.create_string_buffer(64)
--        return str(LIBPCP.pmUnitsStr_r(units, unitstr, 64))
-+        result = LIBPCP.pmUnitsStr_r(units, unitstr, 64)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmNumberStr(value):
-         """PMAPI - Convert double value to fixed-width string """
-         numstr = ctypes.create_string_buffer(8)
--        return str(LIBPCP.pmNumberStr_r(value, numstr, 8))
-+        result = LIBPCP.pmNumberStr_r(value, numstr, 8)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmIDStr(pmid):
-         """PMAPI - Convert a pmID to a readable string """
-         pmidstr = ctypes.create_string_buffer(32)
--        return str(LIBPCP.pmIDStr_r(pmid, pmidstr, 32))
-+        result = LIBPCP.pmIDStr_r(pmid, pmidstr, 32)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmInDomStr(pmdescp):
-@@ -1819,7 +1857,8 @@ class pmContext(object):
-         "indom" = pmGetInDom(pmDesc pmdesc)
-         """
-         indomstr = ctypes.create_string_buffer(32)
--        return str(LIBPCP.pmInDomStr_r(get_indom(pmdescp), indomstr, 32))
-+        result = LIBPCP.pmInDomStr_r(get_indom(pmdescp), indomstr, 32)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmTypeStr(typed):
-@@ -1827,7 +1866,8 @@ class pmContext(object):
-         "type" = pmTypeStr(c_api.PM_TYPE_FLOAT)
-         """
-         typestr = ctypes.create_string_buffer(32)
--        return str(LIBPCP.pmTypeStr_r(typed, typestr, 32))
-+        result = LIBPCP.pmTypeStr_r(typed, typestr, 32)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmAtomStr(atom, typed):
-@@ -1835,7 +1875,8 @@ class pmContext(object):
-         "value" = pmAtomStr(atom, c_api.PM_TYPE_U32)
-         """
-         atomstr = ctypes.create_string_buffer(96)
--        return str(LIBPCP.pmAtomStr(byref(atom), typed, atomstr, 96))
-+        result = LIBPCP.pmAtomStr_r(byref(atom), typed, atomstr, 96)
-+        return str(result.decode())
- 
-     @staticmethod
-     def pmPrintValue(fileObj, result, ptype, vset_idx, vlist_idx, min_width):
-@@ -1885,13 +1926,16 @@ class pmContext(object):
- 
-     @staticmethod
-     def pmParseUnitsStr(string):
--        assert isinstance(string, basestring)
-+        if type(string) != type('') and type(string) != type(b''):
-+            raise pmErr(c_api.PM_ERR_CONV, str(string))
-+        if type(string) != type(b''):
-+            string = string.encode('utf-8')
-         result = pmUnits()
-         errmsg = c_char_p()
-         multiplier = c_double()
-         status = LIBPCP.pmParseUnitsStr(string, byref(result), byref(multiplier), byref(errmsg))
-         if status < 0:
--            text = str(errmsg.value)
-+            text = str(errmsg.value.decode())
-             LIBC.free(errmsg)
-             raise pmErr(status, text)
-         return (result, multiplier.value)
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/pmcc.py pcp-3.10.2/src/python/pcp/pmcc.py
---- pcp-3.10.2.orig/src/python/pcp/pmcc.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/pmcc.py	2015-02-23 21:24:36.670658327 +1100
-@@ -1,8 +1,6 @@
- """ Convenience Classes building on the base PMAPI extension module """
- #
--# pmcc.py
--#
--# Copyright (C) 2013-2014 Red Hat
-+# Copyright (C) 2013-2015 Red Hat
- # Copyright (C) 2009-2012 Michael T. Werner
- #
- # This file is part of the "pcp" module, the python interfaces for the
-@@ -33,11 +31,15 @@ class MetricCore(object):
-     PMAPI metrics are unique by name, and MetricCores should be also
-     rarely, some PMAPI metrics with different names might have identical PMIDs
-     PMAPI metrics are unique by (name) and by (name,pmid) - _usually_ by (pmid)
--    too.
-+    too.  Note that names here (and only here) are stored as byte strings for
-+    direct PMAPI access.  All dictionaries/caching strategies built using the
-+    core structure use native strings (i.e., not byte strings in python3).
-     """
- 
-     def __init__(self, ctx, name, pmid):
-         self.ctx = ctx
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         self.name = name
-         self.pmid = pmid
-         self.desc = None
-@@ -73,7 +75,7 @@ class Metric(object):
-     def _R_ctx(self):
-         return self._core.ctx
-     def _R_name(self):
--        return self._core.name
-+        return self._core.name.decode()
-     def _R_pmid(self):
-         return self._core.pmid
-     def _R_desc(self):
-@@ -105,7 +107,7 @@ class Metric(object):
-             try:
-                 name = instD[instval.inst]
-             except KeyError:
--                name = b''
-+                name = ''
-             outAtom = self.ctx.pmExtractValue(
-                     vset.valfmt, instval, self.desc.type, self._convType)
-             if self._convUnits:
-@@ -151,7 +153,7 @@ class Metric(object):
-             try:
-                 name = instD[instval.inst]
-             except KeyError:
--                name = b''
-+                name = ''
-             outAtom = self.ctx.pmExtractValue(vset.valfmt,
-                     instval, self.desc.type, PM_TYPE_DOUBLE)
-             poutAtom = self.ctx.pmExtractValue(pvset.valfmt,
-@@ -281,7 +283,7 @@ class MetricCache(pmContext):
-                     instmap = {}
-             self._mcIndomD.update({indom: instmap})
- 
--        self._mcByNameD.update({core.name: core})
-+        self._mcByNameD.update({core.name.decode(): core})
-         self._mcByPmidD.update({core.pmid: core})
- 
-     def mcGetCoresByName(self, nameL):
-@@ -291,8 +293,8 @@ class MetricCache(pmContext):
-         errL = None
-         # lookup names in cache
-         for index, name in enumerate(nameL):
--            if type(name) != type(b''):
--                name = name.encode('utf-8')
-+            if type(name) == type(b''):
-+                name = name.decode()
-             # lookup metric core in cache
-             core = self._mcByNameD.get(name)
-             if not core:
-@@ -306,8 +308,6 @@ class MetricCache(pmContext):
-         if missD:
-             idL, errL = self.mcFetchPmids(missD.keys())
-             for name, pmid in idL:
--                if type(name) != type(b''):
--                    name = name.encode('utf-8')
-                 if pmid == PM_ID_NULL:
-                     # fetch failed for the given metric name
-                     if not errL:
-@@ -354,7 +354,7 @@ class MetricCache(pmContext):
-             print >> stderr, fail
-             raise SystemExit(1)
- 
--        return zip(nameA, pmidArray), errL
-+        return zip(nameL, pmidArray), errL
- 
- 
- class MetricGroup(dict):
-@@ -412,6 +412,12 @@ class MetricGroup(dict):
-         self._altD = {}
-         self.mgAdd(inL)
- 
-+    def __setitem__(self, attr, value = []):
-+        if attr in self:
-+            raise KeyError("metric group with that key already exists")
-+        else:
-+            dict.__setitem__(self, attr, MetricGroup(self, inL = value))
-+
-     ##
-     # methods
- 
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/pmda.py pcp-3.10.2/src/python/pcp/pmda.py
---- pcp-3.10.2.orig/src/python/pcp/pmda.py	2015-01-24 07:23:07.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/pmda.py	2015-02-23 21:24:36.670658327 +1100
-@@ -1,7 +1,7 @@
- # pylint: disable=C0103
- """Wrapper module for libpcp_pmda - Performace Co-Pilot Domain Agent API
- #
--# Copyright (C) 2013-2014 Red Hat.
-+# Copyright (C) 2013-2015 Red Hat.
- #
- # This file is part of the "pcp" module, the python interfaces for the
- # Performance Co-Pilot toolkit.
-@@ -86,7 +86,7 @@ class pmdaInstid(Structure):
-     def __init__(self, instid, name):
-         Structure.__init__(self)
-         self.i_inst = instid
--        self.i_name = name
-+        self.i_name = name.encode('utf-8')
- 
-     def __str__(self):
-         return "pmdaInstid@%#lx index=%d name=%s" % (addressof(self), self.i_inst, self.i_name)
-@@ -117,7 +117,8 @@ class pmdaIndom(Structure):
-     def set_dict_instances(self, indom, insts):
-         LIBPCP_PMDA.pmdaCacheOp(indom, cpmda.PMDA_CACHE_INACTIVE)
-         for key in insts.keys():
--            LIBPCP_PMDA.pmdaCacheStore(indom, cpmda.PMDA_CACHE_ADD, key, byref(insts[key]))
-+            key8 = key.encode('utf-8')
-+            LIBPCP_PMDA.pmdaCacheStore(indom, cpmda.PMDA_CACHE_ADD, key8, byref(insts[key]))
-         LIBPCP_PMDA.pmdaCacheOp(indom, cpmda.PMDA_CACHE_SAVE)
- 
-     def set_instances(self, indom, insts):
-@@ -271,11 +272,11 @@ class MetricDispatch(object):
-             name = (c_char_p)()
-             sts = LIBPCP_PMDA.pmdaCacheLookup(indom, instance, byref(name), None)
-             if (sts == cpmda.PMDA_CACHE_ACTIVE):
--                return name.value
-+                return str(name.value.decode())
-         elif (entry.it_numinst > 0 and entry.it_indom == indom):
-             for inst in entry.it_set:
-                 if (inst.i_inst == instance):
--                    return inst.i_name
-+                    return str(inst.i_name.decode())
-         return None
- 
- 
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/pmi.py pcp-3.10.2/src/python/pcp/pmi.py
---- pcp-3.10.2.orig/src/python/pcp/pmi.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/pmi.py	2015-02-23 21:24:36.671658326 +1100
-@@ -1,7 +1,7 @@
- # pylint: disable=C0103
- """Wrapper module for libpcp_import - Performace Co-Pilot Log Import API
- #
--# Copyright (C) 2012-2013 Red Hat.
-+# Copyright (C) 2012-2015 Red Hat.
- #
- # This file is part of the "pcp" module, the python interfaces for the
- # Performance Co-Pilot toolkit.
-@@ -168,6 +168,8 @@ class pmiLogImport(object):
-     # overloads
- 
-     def __init__(self, path, inherit = 0):
-+        if type(path) != type(b''):
-+            path = path.encode('utf-8')
-         self._path = path        # the archive path (file name)
-         self._ctx = LIBPCP_IMPORT.pmiStart(c_char_p(path), inherit)
-         if self._ctx < 0:
-@@ -187,6 +189,8 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(hostname) != type(b''):
-+            hostname = hostname.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiSetHostname(c_char_p(hostname))
-         if status < 0:
-             raise pmiErr(status)
-@@ -198,6 +202,8 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(timezone) != type(b''):
-+            timezone = timezone.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiSetTimezone(c_char_p(timezone))
-         if status < 0:
-             raise pmiErr(status)
-@@ -227,6 +233,8 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiAddMetric(c_char_p(name),
-                                         pmid, typed, indom, sem, units)
-         if status < 0:
-@@ -238,6 +246,8 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(instance) != type(b''):
-+            instance = instance.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiAddInstance(indom, c_char_p(instance), instid)
-         if status < 0:
-             raise pmiErr(status)
-@@ -248,6 +258,12 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-+        if type(value) != type(b''):
-+            value = value.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiPutValue(c_char_p(name),
-                                         c_char_p(inst), c_char_p(value))
-         if status < 0:
-@@ -259,6 +275,10 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(name) != type(b''):
-+            name = name.encode('utf-8')
-+        if type(inst) != type(b''):
-+            inst = inst.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiGetHandle(c_char_p(name), c_char_p(inst))
-         if status < 0:
-             raise pmiErr(status)
-@@ -269,6 +289,8 @@ class pmiLogImport(object):
-         status = LIBPCP_IMPORT.pmiUseContext(self._ctx)
-         if status < 0:
-             raise pmiErr(status)
-+        if type(value) != type(b''):
-+            value = value.encode('utf-8')
-         status = LIBPCP_IMPORT.pmiPutValueHandle(handle, c_char_p(value))
-         if status < 0:
-             raise pmiErr(status)
-diff -Naurp pcp-3.10.2.orig/src/python/pcp/pmsubsys.py pcp-3.10.2/src/python/pcp/pmsubsys.py
---- pcp-3.10.2.orig/src/python/pcp/pmsubsys.py	2015-01-21 02:18:01.000000000 +1100
-+++ pcp-3.10.2/src/python/pcp/pmsubsys.py	2015-02-23 21:24:36.671658326 +1100
-@@ -1,7 +1,7 @@
- #
- # Performance Co-Pilot subsystem classes
- #
--# Copyright (C) 2013 Red Hat Inc.
-+# Copyright (C) 2013-2015 Red Hat.
- #
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
-@@ -31,7 +31,7 @@ http://www.performancecopilot.org
- 
- import copy
- import cpmapi as c_api
--from pcp.pmapi import pmErr
-+from pcp.pmapi import pmErr, timeval
- from ctypes import c_char_p
- 
- # python version information and compatibility
-@@ -48,6 +48,7 @@ else:
- class Subsystem(object):
-     def __init__(self):
-         self.metrics = []
-+        self._timestamp = timeval(0, 0)
-         self.diff_metrics = []
-         self.metric_pmids = []
-         self.metric_descs = []
-@@ -55,6 +56,11 @@ class Subsystem(object):
-         self.metrics_dict = {}
-         self.old_metric_values = []
- 
-+    def _R_timestamp(self):
-+        return self._timestamp
-+
-+    timestamp = property(_R_timestamp, None, None, None)
-+
-     def setup_metrics(self, pcp):
-         # remove any unsupported metrics
-         name_pattern = self.metrics[0].split(".")[0] + ".*"
-@@ -162,6 +168,7 @@ class Subsystem(object):
-         list_type = type([])
- 
-         metric_result = pcp.pmFetch(self.metric_pmids)
-+        self._timestamp = metric_result.contents.timestamp
- 
-         if max(self.old_metric_values) == 0:
-             first = True
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/pcp.git/commit/?h=f21&id=4e4e8587bc51c2bd891f80ae47ec7d64cfefc689


More information about the scm-commits mailing list