diff --git a/pcp.spec b/pcp.spec index 200cd85..b9718cc 100644 --- a/pcp.spec +++ b/pcp.spec @@ -1,11 +1,13 @@ Name: pcp Version: 7.0.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: System-level performance monitoring and performance management License: GPL-2.0-or-later AND LGPL-2.1-or-later AND CC-BY-3.0 URL: https://pcp.io Source0: https://github.com/performancecopilot/pcp/releases/pcp-%{version}.src.tar.gz +Patch0: pcp2openmetrics-archive.patch + %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 ExcludeArch: %{ix86} %endif @@ -3422,6 +3424,9 @@ fi %files zeroconf -f pcp-zeroconf-files.rpm %changelog +* Wed Feb 4 2026 Lauren Chilton - 7.0.3-2 +- Fix pcp2openmetrics archive metric querying (RHEL-114006) + * Wed Nov 12 2025 William Cohen - 7.0.3-1 - Update to latest stable version of PCP (RHEL-124897) diff --git a/pcp2openmetrics-archive.patch b/pcp2openmetrics-archive.patch new file mode 100644 index 0000000..b51b8b7 --- /dev/null +++ b/pcp2openmetrics-archive.patch @@ -0,0 +1,99 @@ +From 634789506f10c0156b13bfa6a3f07705ed40b5f1 Mon Sep 17 00:00:00 2001 +From: lmchilton +Date: Tue, 13 Jan 2026 13:32:46 -0500 +Subject: [PATCH] pcp2openmetrics: resolves RHEL-138467 + +multi-instance metrics failing when queried with +singular metrics from archive. Turning interpolation +on resolves this issue. Additional code added to fix +missing headers when 2+ metrics are queried together. +--- + qa/1131 | 3 +++ + qa/1131.out | 12 ++++++++++++ + src/pcp2openmetrics/pcp2openmetrics.py | 8 ++++---- + 3 files changed, 19 insertions(+), 4 deletions(-) + +diff --git a/qa/1131 b/qa/1131 +index 118375d425..026a6ebd97 100755 +--- a/qa/1131 ++++ b/qa/1131 +@@ -31,6 +31,7 @@ signal=$PCP_BINADM_DIR/pmsignal + trap "_cleanup; exit \$status" 0 1 2 3 15 + + A="$here/archives/rep" ++A1="$here/archives/20180606" + hostname=`hostname` + machineid=`_machine_id` + domainid=`_domain_name` +@@ -98,6 +99,8 @@ pcp2openmetrics -s1 -z hinv.ncpu | _filter_pcp2openmetrics + echo "---" + pcp2openmetrics -s2 -x hinv.ncpu | _filter_pcp2openmetrics + echo "---" ++pcp2openmetrics -s2 -a $A1 hinv.ncpu disk.partitions.write | _archive_filter ++echo "---" + pcp2opentelemetry -s1 -H -z hinv.ncpu | _filter_pcp2opentelemetry + echo "---" + +diff --git a/qa/1131.out b/qa/1131.out +index a8fde64d5b..a6e98b0139 100644 +--- a/qa/1131.out ++++ b/qa/1131.out +@@ -2279,6 +2279,18 @@ hinv_ncpu{domainname="DOMAINID",groupid="GROUPID",hostname="HOST",machineid="MAC + hinv_ncpu{domainname="DOMAINID",groupid="GROUPID",hostname="HOST",machineid="MACHINEID",userid="USERID",agent="AGENT"} NCPU + hinv_ncpu{domainname="DOMAINID",groupid="GROUPID",hostname="HOST",machineid="MACHINEID",userid="USERID",agent="AGENT"} NCPU + --- ++# PCP5 hinv_ncpu 60.0.32 u32 PM_INDOM_NULL discrete ++# TYPE hinv_ncpu gauge ++# HELP hinv_ncpu number of CPUs in the system ++hinv_ncpu{domainname="localdomain",groupid="999",hostname="vm01",machineid="3a6b3d7f3b7559c538a5934a24866658",userid="999",agent="linux"} 1 1528207821.599573 ++# PCP5 disk_partitions_write 60.10.1 u32 60.10 counter count ++# TYPE disk_partitions_write counter ++# HELP disk_partitions_write write operations metric for storage partitions ++disk_partitions_write_total{domainname="localdomain",groupid="999",hostname="vm01",machineid="3a6b3d7f3b7559c538a5934a24866658",userid="999",instname="sda1",instid="1",agent="linux",device_type="block",indom_name="per partition"} 88156 1528207821.599573 ++disk_partitions_write_total{domainname="localdomain",groupid="999",hostname="vm01",machineid="3a6b3d7f3b7559c538a5934a24866658",userid="999",instname="sda2",instid="2",agent="linux",device_type="block",indom_name="per partition"} 0 1528207821.599573 ++disk_partitions_write_total{domainname="localdomain",groupid="999",hostname="vm01",machineid="3a6b3d7f3b7559c538a5934a24866658",userid="999",instname="sda5",instid="3",agent="linux",device_type="block",indom_name="per partition"} 2293 1528207821.599573 ++# EOF ++--- + { + "resourceMetrics": [ + { +diff --git a/src/pcp2openmetrics/pcp2openmetrics.py b/src/pcp2openmetrics/pcp2openmetrics.py +index a228aaf340..bc935fab03 100755 +--- a/src/pcp2openmetrics/pcp2openmetrics.py ++++ b/src/pcp2openmetrics/pcp2openmetrics.py +@@ -104,7 +104,7 @@ class PCP2OPENMETRICS(object): + self.precision = 3 # .3f + self.precision_force = None + self.timefmt = TIMEFMT +- self.interpol = 0 ++ self.interpol = 1 + self.count_scale = None + self.count_scale_force = None + self.space_scale = None +@@ -121,7 +121,7 @@ class PCP2OPENMETRICS(object): + self.http_pass = None + self.http_timeout = TIMEOUT + self.no_comment = False +- self.header_flag = True ++ self.headers = [] + + # Internal + self.runtime = -1 +@@ -476,12 +476,12 @@ class PCP2OPENMETRICS(object): + help_dict = {} + help_dict[metric] = context.pmLookupText(pmid[0]) + +- if self.header_flag is True: ++ if metric not in self.headers: + if self.no_comment is False: + body += '# PCP5 %s %s %s %s %s %s\n' % (openmetrics_name(metric), pmIDStr, get_type_string(desc), pmIndomStr, semantics, units) + body += '# TYPE %s %s\n' % (openmetrics_name(metric), openmetrics_type(desc)) + body += '# HELP %s %s\n' % (openmetrics_name(metric), help_dict[metric]) +- self.header_flag = False ++ self.headers.append(metric) + + for inst, name, value in results[metric]: + if isinstance(value, float): +-- +2.51.0 +