import pcp-5.2.5-4.el8
This commit is contained in:
parent
d2bea6447c
commit
e13ffd55ed
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/pcp-5.1.1.src.tar.gz
|
SOURCES/pcp-5.2.5.src.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
ecc3f3a9163a2295816ca5eb8d918125670a727e SOURCES/pcp-5.1.1.src.tar.gz
|
d77455b09d679988fae82ead1fb3b4ec65726fa9 SOURCES/pcp-5.2.5.src.tar.gz
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
91dd4ae6b logutil: use $PCP_TMPFILE_DIR for intermediate pmlogger_merge archives
|
|
||||||
b0c90d858 packaging: activate pmlogger_rewrite on upgrades
|
|
||||||
b5e602187 packaging: revert pcp_archive_dir subsitution in build/rpm/GNUmakefile
|
|
||||||
|
|
||||||
--- a/src/pmlogger/pmlogger_merge.sh 2018-06-18 16:24:25.000000000 +1000
|
|
||||||
+++ b/src/pmlogger/pmlogger_merge.sh 2020-06-11 13:10:57.401576513 +1000
|
|
||||||
@@ -26,8 +26,9 @@
|
|
||||||
|
|
||||||
prog=`basename $0`
|
|
||||||
tmp=`mktemp -d /tmp/pcp.XXXXXXXXX` || exit 1
|
|
||||||
+tmpmerge=`mktemp -d $PCP_TMPFILE_DIR/pcp.XXXXXXXXX` || exit 1
|
|
||||||
status=0
|
|
||||||
-trap "rm -rf $tmp; exit \$status" 0 1 2 3 15
|
|
||||||
+trap "rm -rf $tmp $tmpmerge; exit \$status" 0 1 2 3 15
|
|
||||||
|
|
||||||
force=false
|
|
||||||
VERBOSE=false
|
|
||||||
@@ -229,8 +230,8 @@
|
|
||||||
# output = 108 file descriptors which should be well below any
|
|
||||||
# shell-imposed or system-imposed limits
|
|
||||||
#
|
|
||||||
- $VERBOSE && echo " -> partial merge to $tmp/$part"
|
|
||||||
- cmd="pmlogextract $list $tmp/$part"
|
|
||||||
+ $VERBOSE && echo " -> partial merge to $tmpmerge/$part"
|
|
||||||
+ cmd="pmlogextract $list $tmpmerge/$part"
|
|
||||||
if $SHOWME
|
|
||||||
then
|
|
||||||
echo "+ $cmd"
|
|
||||||
@@ -239,13 +240,13 @@
|
|
||||||
then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
- $VERBOSE || echo " -> partial merge to $tmp/$part"
|
|
||||||
+ $VERBOSE || echo " -> partial merge to $tmpmerge/$part"
|
|
||||||
echo "$prog: Directory: `pwd`"
|
|
||||||
- echo "$prog: Failed: pmlogextract $list $tmp/$part"
|
|
||||||
+ echo "$prog: Failed: pmlogextract $list $tmpmerge/$part"
|
|
||||||
_warning
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
- list=$tmp/$part
|
|
||||||
+ list=$tmpmerge/$part
|
|
||||||
part=`expr $part + 1`
|
|
||||||
i=0
|
|
||||||
fi
|
|
||||||
--- a/build/rpm/fedora.spec 2020-05-29 09:15:44.000000000 +1000
|
|
||||||
+++ b/build/rpm/fedora.spec 2020-06-11 13:10:57.402576528 +1000
|
|
||||||
@@ -2814,6 +2814,7 @@
|
|
||||||
chown -R pcp:pcp %{_logsdir}/pmie 2>/dev/null
|
|
||||||
chown -R pcp:pcp %{_logsdir}/pmproxy 2>/dev/null
|
|
||||||
%{install_file "$PCP_PMNS_DIR" .NeedRebuild}
|
|
||||||
+%{install_file "$PCP_LOG_DIR/pmlogger" .NeedRewrite}
|
|
||||||
%if !%{disable_systemd}
|
|
||||||
%systemd_postun_with_restart pmcd.service
|
|
||||||
%systemd_post pmcd.service
|
|
||||||
--- a/build/rpm/pcp.spec.in 2020-05-29 09:16:19.000000000 +1000
|
|
||||||
+++ b/build/rpm/pcp.spec.in 2020-06-11 13:10:57.402576528 +1000
|
|
||||||
@@ -3149,6 +3149,7 @@
|
|
||||||
chown -R pcp:pcp "$PCP_LOG_DIR/pmie" 2>/dev/null
|
|
||||||
chown -R pcp:pcp "$PCP_LOG_DIR/pmproxy" 2>/dev/null
|
|
||||||
%{install_file "$PCP_PMNS_DIR" .NeedRebuild}
|
|
||||||
+%{install_file "$PCP_LOG_DIR/pmlogger" .NeedRewrite}
|
|
||||||
%if "@enable_systemd@" == "true"
|
|
||||||
%systemd_postun_with_restart pmcd.service
|
|
||||||
%systemd_post pmcd.service
|
|
||||||
--- a/debian/pcp.postinst.tail 2019-06-13 09:59:16.000000000 +1000
|
|
||||||
+++ b/debian/pcp.postinst.tail 2020-06-11 13:10:57.402576528 +1000
|
|
||||||
@@ -6,6 +6,8 @@
|
|
||||||
|
|
||||||
touch /var/lib/pcp/pmns/.NeedRebuild
|
|
||||||
chmod 644 /var/lib/pcp/pmns/.NeedRebuild
|
|
||||||
+touch /var/log/pcp/pmlogger/.NeedRewrite
|
|
||||||
+chmod 644 /var/log/pcp/pmlogger/.NeedRewrite
|
|
||||||
|
|
||||||
getent group pcp >/dev/null || groupadd -r pcp
|
|
||||||
getent passwd pcp >/dev/null || \
|
|
||||||
--- a/debian/pcp.prerm 2017-08-17 10:54:50.000000000 +1000
|
|
||||||
+++ b/debian/pcp.prerm 2020-06-11 13:10:57.402576528 +1000
|
|
||||||
@@ -24,3 +24,4 @@
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f /var/lib/pcp/pmns/.NeedRebuild
|
|
||||||
+rm -f /var/log/pcp/pmlogger/.NeedRewrite
|
|
@ -1,21 +0,0 @@
|
|||||||
BZ 1790433 - Missing dependency of pcp-pmda-snmp on net-snmp-perl
|
|
||||||
bc4abb291 pmdasnmp: add Install checks for the required Net::SNMP module
|
|
||||||
|
|
||||||
diff --git a/src/pmdas/snmp/Install b/src/pmdas/snmp/Install
|
|
||||||
index 7fe4193e4..21a76ab56 100755
|
|
||||||
--- a/src/pmdas/snmp/Install
|
|
||||||
+++ b/src/pmdas/snmp/Install
|
|
||||||
@@ -22,6 +22,13 @@ iam=snmp
|
|
||||||
perl_opt=true
|
|
||||||
daemon_opt=false
|
|
||||||
|
|
||||||
+perl -e "use Net::SNMP" 2>/dev/null
|
|
||||||
+if test $? -ne 0; then
|
|
||||||
+ echo "Net::SNMP (Simple Network Management Protocol) perl module is not installed"
|
|
||||||
+ status=1
|
|
||||||
+ exit
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
pmdaSetup
|
|
||||||
pmdaInstall
|
|
||||||
exit
|
|
@ -1,45 +0,0 @@
|
|||||||
BZ 1790452 - Installation of pcp-pmda-samba causes SELinux issues
|
|
||||||
73772a60f selinux: fix pmdasamba(1) operating with selinux enforcing
|
|
||||||
|
|
||||||
--- a/qa/917.out.in 2020-05-19 20:34:46.000000000 +1000
|
|
||||||
+++ pcp-5.1.1/qa/917.out.in 2020-06-22 17:29:14.346713826 +1000
|
|
||||||
@@ -34,6 +34,8 @@
|
|
||||||
! allow [pcp_pmcd_t] [unreserved_port_t] : [tcp_socket] { name_bind name_connect };
|
|
||||||
! allow [pcp_pmcd_t] [unreserved_port_t] : [udp_socket] { name_bind };
|
|
||||||
! allow [pcp_pmlogger_t] [unreserved_port_t] : [tcp_socket] { name_bind };
|
|
||||||
+ allow [pcp_pmcd_t] [samba_var_t] : [dir] { add_name write };
|
|
||||||
+ allow [pcp_pmcd_t] [samba_var_t] : [file] { create };
|
|
||||||
allow [pcp_pmcd_t] [websm_port_t] : [tcp_socket] { name_connect };
|
|
||||||
! allow [pcp_pmcd_t] [pcp_tmp_t] : [file] { execute execute_no_trans map };
|
|
||||||
allow [pcp_pmcd_t] [hostname_exec_t] : [file] { execute execute_no_trans getattr open read };
|
|
||||||
--- a/src/pmdas/samba/pmdasamba.pl 2020-02-04 14:51:57.000000000 +1100
|
|
||||||
+++ pcp-5.1.1/src/pmdas/samba/pmdasamba.pl 2020-06-22 17:29:14.346713826 +1000
|
|
||||||
@@ -41,6 +41,7 @@
|
|
||||||
$pmda->err("pmdasamba failed to open $smbstats pipe: $!");
|
|
||||||
|
|
||||||
while (<STATS>) {
|
|
||||||
+ $_ =~ s/"//g;
|
|
||||||
if (m/^\*\*\*\*\s+(\w+[^*]*)\**$/) {
|
|
||||||
my $heading = $1;
|
|
||||||
$heading =~ s/ +$//g;
|
|
||||||
--- a/src/selinux/pcpupstream.te.in 2020-05-19 20:34:32.000000000 +1000
|
|
||||||
+++ pcp-5.1.1/src/selinux/pcpupstream.te.in 2020-06-22 17:29:14.347713837 +1000
|
|
||||||
@@ -22,6 +22,7 @@
|
|
||||||
type pcp_pmie_exec_t; # pmda.summary
|
|
||||||
type ping_exec_t; # pmda.netcheck
|
|
||||||
type openvswitch_exec_t; # pmda.openvswitch
|
|
||||||
+ type samba_var_t; # pmda.samba
|
|
||||||
type websm_port_t; # pmda.openmetrics
|
|
||||||
type system_cronjob_t;
|
|
||||||
type user_home_t;
|
|
||||||
@@ -151,6 +152,10 @@
|
|
||||||
#type=AVC msg=audit(YYY.94): avc: denied { name_bind } for pid=9365 comm=pmlogger src=4332 scontext=system_u:system_r:pcp_pmlogger_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0
|
|
||||||
@PCP_UNRESERVED_PORT_RULE_PMLOGGER@
|
|
||||||
|
|
||||||
+#type=AVC msg=audit(YYY.97): avc: denied { write } for pid=3507787 comm="smbstatus" name="msg.lock" dev="dm-0" ino=283321 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:samba_var_t:s0 tclass=dir permissive=0
|
|
||||||
+allow pcp_pmcd_t samba_var_t:dir { add_name write }; # pmda.samba
|
|
||||||
+allow pcp_pmcd_t samba_var_t:file { create }; # pmda.samba
|
|
||||||
+
|
|
||||||
#type=AVC msg=audit(YYY.15): avc: denied { name_connect } for pid=13816 comm="python3" dest=9090 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:websm_port_t:s0 tclass=tcp_socket permissive=0
|
|
||||||
allow pcp_pmcd_t websm_port_t:tcp_socket name_connect; # pmda.openmetrics
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,36 +0,0 @@
|
|||||||
BZ 1846705 - Possible memory leak detected in pcp-atop
|
|
||||||
f30aff90b qa: add valgrind suppressions needed for valgrind 3.16
|
|
||||||
|
|
||||||
diff --git a/qa/valgrind-suppress-3.16.0 b/qa/valgrind-suppress-3.16.0
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000..515591747
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/qa/valgrind-suppress-3.16.0
|
|
||||||
@@ -0,0 +1,27 @@
|
|
||||||
+# qa/1080 and qa/490 and qa/386 and qa/459 on Fedora 32
|
|
||||||
+# at 0x483880B: malloc (vg_replace_malloc.c:299)
|
|
||||||
+# by 0x4A0D490: tsearch (in /usr/lib64/libc-2.28.so)
|
|
||||||
+# by 0x4871EA6: __pmFindPDUBuf (pdubuf.c:126)
|
|
||||||
+# ...
|
|
||||||
+{
|
|
||||||
+ tsearch
|
|
||||||
+ Memcheck:Leak
|
|
||||||
+ match-leak-kinds: possible
|
|
||||||
+ fun:malloc
|
|
||||||
+ fun:tsearch
|
|
||||||
+ fun:__pmFindPDUBuf
|
|
||||||
+ ...
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# qa/1080 and qa/490 and qa/386 and qa/459 on Fedora 32
|
|
||||||
+# at 0x483880B: malloc (vg_replace_malloc.c:299)
|
|
||||||
+# by 0x4871E5F: __pmFindPDUBuf (pdubuf.c:115)
|
|
||||||
+# ...
|
|
||||||
+{
|
|
||||||
+ findpdubuf
|
|
||||||
+ Memcheck:Leak
|
|
||||||
+ match-leak-kinds: possible
|
|
||||||
+ fun:malloc
|
|
||||||
+ fun:__pmFindPDUBuf
|
|
||||||
+ ...
|
|
||||||
+}
|
|
@ -1,268 +0,0 @@
|
|||||||
BZ 1846711 - pcp-pmda-openmetrics produces warnings querying grafana in its default configuration
|
|
||||||
0b2ef2d79 pmdaopenmetrics: add control.status metrics, de-verbosify the log, QA updates
|
|
||||||
63605e3db qa/1102: tweak openmetrics QA to be more deterministic
|
|
||||||
649a0c3a2 qa: improve _filter_pmda_remove() in common.filter
|
|
||||||
|
|
||||||
commit 0b2ef2d79686d1e44901263093edeb9e1b9b5f77
|
|
||||||
Author: Mark Goodwin <mgoodwin@redhat.com>
|
|
||||||
Date: Fri Jun 19 12:18:47 2020 +1000
|
|
||||||
|
|
||||||
pmdaopenmetrics: add control.status metrics, de-verbosify the log, QA updates
|
|
||||||
|
|
||||||
Resolves: RHBZ#1846711
|
|
||||||
|
|
||||||
Add openmetrics.control.status (string status per configured URL
|
|
||||||
of the last fetch) and openmetrics.control.status_code, which
|
|
||||||
is the integer response code (e.g. 200 is success) with discrete
|
|
||||||
semantics.
|
|
||||||
|
|
||||||
In addition, we now only spam the PMDA log and systemd journal
|
|
||||||
when a URL fetch fails if openmetrics.control.debug is non-zero.
|
|
||||||
Users can instead rely on the new status metrics, which can also
|
|
||||||
be used for service availability monitoring. These metrics
|
|
||||||
complement the openmetrics.control.parse_time, fetch_time and
|
|
||||||
calls counters.
|
|
||||||
|
|
||||||
Includes QA updates and pmdaopenmetrics(1) doc updates.
|
|
||||||
|
|
||||||
diff --git a/qa/1321.out b/qa/1321.out
|
|
||||||
index cee072cd2..4533bccd8 100644
|
|
||||||
--- a/qa/1321.out
|
|
||||||
+++ b/qa/1321.out
|
|
||||||
@@ -13,6 +13,8 @@ openmetrics.control.calls
|
|
||||||
openmetrics.control.debug
|
|
||||||
openmetrics.control.fetch_time
|
|
||||||
openmetrics.control.parse_time
|
|
||||||
+openmetrics.control.status
|
|
||||||
+openmetrics.control.status_code
|
|
||||||
openmetrics.source1.metric1
|
|
||||||
|
|
||||||
== Created URL file /var/lib/pcp/pmdas/openmetrics/config.d/source2.url
|
|
||||||
@@ -22,6 +24,8 @@ openmetrics.control.calls
|
|
||||||
openmetrics.control.debug
|
|
||||||
openmetrics.control.fetch_time
|
|
||||||
openmetrics.control.parse_time
|
|
||||||
+openmetrics.control.status
|
|
||||||
+openmetrics.control.status_code
|
|
||||||
openmetrics.source1.metric1
|
|
||||||
openmetrics.source2.metric1
|
|
||||||
openmetrics.source2.metric2
|
|
||||||
@@ -33,6 +37,8 @@ openmetrics.control.calls
|
|
||||||
openmetrics.control.debug
|
|
||||||
openmetrics.control.fetch_time
|
|
||||||
openmetrics.control.parse_time
|
|
||||||
+openmetrics.control.status
|
|
||||||
+openmetrics.control.status_code
|
|
||||||
openmetrics.source1.metric1
|
|
||||||
openmetrics.source2.metric1
|
|
||||||
openmetrics.source2.metric2
|
|
||||||
@@ -47,6 +53,8 @@ openmetrics.control.calls
|
|
||||||
openmetrics.control.debug
|
|
||||||
openmetrics.control.fetch_time
|
|
||||||
openmetrics.control.parse_time
|
|
||||||
+openmetrics.control.status
|
|
||||||
+openmetrics.control.status_code
|
|
||||||
openmetrics.source1.metric1
|
|
||||||
openmetrics.source2.metric1
|
|
||||||
openmetrics.source2.metric2
|
|
||||||
@@ -63,6 +71,8 @@ openmetrics.control.calls
|
|
||||||
openmetrics.control.debug
|
|
||||||
openmetrics.control.fetch_time
|
|
||||||
openmetrics.control.parse_time
|
|
||||||
+openmetrics.control.status
|
|
||||||
+openmetrics.control.status_code
|
|
||||||
openmetrics.source1.metric1
|
|
||||||
openmetrics.source2.metric1
|
|
||||||
openmetrics.source2.metric2
|
|
||||||
diff --git a/src/pmdas/openmetrics/pmdaopenmetrics.1 b/src/pmdas/openmetrics/pmdaopenmetrics.1
|
|
||||||
index d3c7aa85f..0c92e2a11 100644
|
|
||||||
--- a/src/pmdas/openmetrics/pmdaopenmetrics.1
|
|
||||||
+++ b/src/pmdas/openmetrics/pmdaopenmetrics.1
|
|
||||||
@@ -413,10 +413,37 @@ log mandatory on 2 second {
|
|
||||||
The PMDA maintains special control metrics, as described below.
|
|
||||||
Apart from
|
|
||||||
.BR openmetrics.control.debug ,
|
|
||||||
-each of these metrics is a counter and has one instance for each configured metric source.
|
|
||||||
-The instance domain is adjusted dynamically as new sources are discovered.
|
|
||||||
+each of these metrics has one instance for each configured metric source.
|
|
||||||
+All of these metrics have integer values with counter semantics, except
|
|
||||||
+.BR openmetrics.control.status ,
|
|
||||||
+which has a string value.
|
|
||||||
+It is important to note that fetching any of the
|
|
||||||
+.B openmetrics.control
|
|
||||||
+metrics will only update the counters and status values if the corresponding URL is actually fetched.
|
|
||||||
+If the source URL is not fetched, the control metric values do not trigger a refresh and the control
|
|
||||||
+values reported represent the most recent fetch of each corresponding source.
|
|
||||||
+.PP
|
|
||||||
+The instance domain for the
|
|
||||||
+.B openmetrics.control
|
|
||||||
+metrics is adjusted dynamically as new sources are discovered.
|
|
||||||
If there are no sources configured, the metric names are still defined
|
|
||||||
but the instance domain will be empty and a fetch will return no values.
|
|
||||||
+.IP \fBopenmetrics.control.status\fP
|
|
||||||
+A string representing the status of the last fetch of the corresponding source.
|
|
||||||
+This will generally be
|
|
||||||
+.B success
|
|
||||||
+for an http response code of 200.
|
|
||||||
+This metric can be used for service availability monitoring - provided, as stated above,
|
|
||||||
+the corresponding source URL is fetched too.
|
|
||||||
+.IP \fBopenmetrics.control.status_code\fP
|
|
||||||
+This metric is similar to
|
|
||||||
+.B openmetrics.control.status
|
|
||||||
+except that it is the integer response code of the last fetch.
|
|
||||||
+A value of
|
|
||||||
+.B 200
|
|
||||||
+usually signifies success and any other value failure.
|
|
||||||
+This metric can also be used for service availability monitoring, with the same caveats as
|
|
||||||
+.BR openmetrics.control.status .
|
|
||||||
.IP \fBopenmetrics.control.calls\fP
|
|
||||||
total number of times each configured metric source has been fetched (if it's a URL)
|
|
||||||
or executed (if it's a script), since the PMDA started.
|
|
||||||
diff --git a/src/pmdas/openmetrics/pmdaopenmetrics.python b/src/pmdas/openmetrics/pmdaopenmetrics.python
|
|
||||||
index a5ed22f13..1486ed676 100755
|
|
||||||
--- a/src/pmdas/openmetrics/pmdaopenmetrics.python
|
|
||||||
+++ b/src/pmdas/openmetrics/pmdaopenmetrics.python
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
#!/usr/bin/env pmpython
|
|
||||||
#
|
|
||||||
-# Copyright (c) 2017-2019 Red Hat.
|
|
||||||
+# Copyright (c) 2017-2020 Red Hat.
|
|
||||||
# Copyright (c) 2017 Ronak Jain.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
|
||||||
@@ -704,6 +704,7 @@ class Source(object):
|
|
||||||
return
|
|
||||||
|
|
||||||
# fetch the document
|
|
||||||
+ status_code = 0
|
|
||||||
try:
|
|
||||||
if self.is_scripted:
|
|
||||||
# Execute file, expecting openmetrics metric data on stdout.
|
|
||||||
@@ -715,6 +716,7 @@ class Source(object):
|
|
||||||
self.document = open(self.url[7:], 'r').read()
|
|
||||||
else:
|
|
||||||
r = self.requests.get(self.url, headers=self.headers, timeout=timeout)
|
|
||||||
+ status_code = r.status_code
|
|
||||||
r.raise_for_status() # non-200? ERROR
|
|
||||||
# NB: the requests package automatically enables http keep-alive and compression
|
|
||||||
self.document = r.text
|
|
||||||
@@ -723,9 +725,13 @@ class Source(object):
|
|
||||||
incr = int(1000 * (time.time() - fetch_time))
|
|
||||||
self.pmda.stats_fetch_time[self.cluster] += incr
|
|
||||||
self.pmda.stats_fetch_time[0] += incr # total for all sources
|
|
||||||
+ self.pmda.stats_status[self.cluster] = "success"
|
|
||||||
+ self.pmda.stats_status_code[self.cluster] = status_code
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
- self.pmda.err('Warning: cannot fetch URL or execute script %s: %s' % (self.path, e))
|
|
||||||
+ self.pmda.stats_status[self.cluster] = 'failed to fetch URL or execute script %s: %s' % (self.path, e)
|
|
||||||
+ self.pmda.stats_status_code[self.cluster] = status_code
|
|
||||||
+ self.pmda.debug('Warning: cannot fetch URL or execute script %s: %s' % (self.path, e)) if self.pmda.dbg else None
|
|
||||||
return
|
|
||||||
|
|
||||||
def refresh2(self, timeout):
|
|
||||||
@@ -844,6 +850,20 @@ class OpenMetricsPMDA(PMDA):
|
|
||||||
pmUnits(0, 0, 0, 0, 0, 0)),
|
|
||||||
'debug flag to enable verbose log messages, to enable: pmstore %s.control.debug 1' % self.pmda_name)
|
|
||||||
|
|
||||||
+ # response status string, per-source end-point
|
|
||||||
+ self.stats_status = {0:"none"} # status string, keyed by cluster number
|
|
||||||
+ self.add_metric('%s.control.status' % self.pmda_name, pmdaMetric(self.pmid(0, 5),
|
|
||||||
+ c_api.PM_TYPE_STRING, self.sources_indom, c_api.PM_SEM_INSTANT,
|
|
||||||
+ pmUnits(0, 0, 0, 0, 0, 0)), # no units
|
|
||||||
+ 'per-end-point source URL response status after the most recent fetch')
|
|
||||||
+
|
|
||||||
+ # response status code, per-source end-point
|
|
||||||
+ self.stats_status_code = {0:0} # status code, keyed by cluster number
|
|
||||||
+ self.add_metric('%s.control.status_code' % self.pmda_name, pmdaMetric(self.pmid(0, 6),
|
|
||||||
+ c_api.PM_TYPE_32, self.sources_indom, c_api.PM_SEM_DISCRETE,
|
|
||||||
+ pmUnits(0, 0, 0, 0, 0, 0)), # no units
|
|
||||||
+ 'per-end-point source URL response status code after the most recent fetch')
|
|
||||||
+
|
|
||||||
# schedule a refresh
|
|
||||||
self.set_need_refresh()
|
|
||||||
|
|
||||||
@@ -961,6 +981,8 @@ class OpenMetricsPMDA(PMDA):
|
|
||||||
self.stats_fetch_calls[cluster] = 0
|
|
||||||
self.stats_fetch_time[cluster] = 0
|
|
||||||
self.stats_parse_time[cluster] = 0
|
|
||||||
+ self.stats_status[cluster] = "unknown"
|
|
||||||
+ self.stats_status_code[cluster] = 0
|
|
||||||
|
|
||||||
save_cluster_table = True
|
|
||||||
self.log("Found source %s cluster %d" % (name, cluster))
|
|
||||||
@@ -996,6 +1018,10 @@ class OpenMetricsPMDA(PMDA):
|
|
||||||
return [self.stats_parse_time[inst], 1] if inst in self.stats_parse_time else [c_api.PM_ERR_INST, 0]
|
|
||||||
elif item == 4: # $(pmda_name).control.debug
|
|
||||||
return [self.dbg, 1]
|
|
||||||
+ elif item == 5: # per-source status string
|
|
||||||
+ return [self.stats_status[inst], 1] if inst in self.stats_status else [c_api.PM_ERR_INST, 0]
|
|
||||||
+ elif item == 6: # per-source status code
|
|
||||||
+ return [self.stats_status_code[inst], 1] if inst in self.stats_status_code else [c_api.PM_ERR_INST, 0]
|
|
||||||
return [c_api.PM_ERR_PMID, 0]
|
|
||||||
|
|
||||||
self.assert_source_invariants(cluster=cluster)
|
|
||||||
|
|
||||||
commit 63605e3db4b2821df2a6ffb21507af91d97f3a8b
|
|
||||||
Author: Mark Goodwin <mgoodwin@redhat.com>
|
|
||||||
Date: Fri Jun 19 10:02:04 2020 +1000
|
|
||||||
|
|
||||||
qa/1102: tweak openmetrics QA to be more deterministic
|
|
||||||
|
|
||||||
Now that pmdaopenmetrics is Installed by default with the localhost
|
|
||||||
grafana metrics URL configured, after _pmdaopenmetrics_save_config
|
|
||||||
we need to _pmdaopenmetrics_remove before _pmdaopenmetrics_install
|
|
||||||
to make qa/1102 deterministic.
|
|
||||||
|
|
||||||
diff --git a/qa/1102 b/qa/1102
|
|
||||||
index f573d14f4..98ff61f5e 100755
|
|
||||||
--- a/qa/1102
|
|
||||||
+++ b/qa/1102
|
|
||||||
@@ -46,6 +46,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
||||||
_stop_auto_restart pmcd
|
|
||||||
|
|
||||||
_pmdaopenmetrics_save_config
|
|
||||||
+_pmdaopenmetrics_remove
|
|
||||||
_pmdaopenmetrics_install
|
|
||||||
|
|
||||||
port=`_find_free_port 10000`
|
|
||||||
diff --git a/qa/1102.out b/qa/1102.out
|
|
||||||
index 5094e4a82..aa74abe44 100644
|
|
||||||
--- a/qa/1102.out
|
|
||||||
+++ b/qa/1102.out
|
|
||||||
@@ -1,5 +1,12 @@
|
|
||||||
QA output created by 1102
|
|
||||||
|
|
||||||
+=== remove openmetrics agent ===
|
|
||||||
+Culling the Performance Metrics Name Space ...
|
|
||||||
+openmetrics ... done
|
|
||||||
+Updating the PMCD control file, and notifying PMCD ...
|
|
||||||
+[...removing files...]
|
|
||||||
+Check openmetrics metrics have gone away ... OK
|
|
||||||
+
|
|
||||||
=== openmetrics agent installation ===
|
|
||||||
Fetch and desc openmetrics metrics: success
|
|
||||||
|
|
||||||
|
|
||||||
commit 649a0c3a2745f549b139ce1250e38a1e90308426
|
|
||||||
Author: Mark Goodwin <mgoodwin@redhat.com>
|
|
||||||
Date: Fri Jun 19 09:55:58 2020 +1000
|
|
||||||
|
|
||||||
qa: improve _filter_pmda_remove() in common.filter
|
|
||||||
|
|
||||||
Filter "Job for pmcd.service canceled" in _filter_pmda_remove.
|
|
||||||
Systemd sometimes (uncommonly) prints this if a PMDA is still
|
|
||||||
starting when a QA test ./Removes it.
|
|
||||||
|
|
||||||
diff --git a/qa/common.filter b/qa/common.filter
|
|
||||||
index a53d4a49d..b327abedc 100644
|
|
||||||
--- a/qa/common.filter
|
|
||||||
+++ b/qa/common.filter
|
|
||||||
@@ -760,6 +760,7 @@ _filter_pmda_remove()
|
|
||||||
_filter_pmda_install |
|
|
||||||
sed \
|
|
||||||
-e '/Removing files/d' \
|
|
||||||
+ -e '/Job for pmcd.service canceled/d' \
|
|
||||||
-e '/Updating the PMCD control file/c\
|
|
||||||
Updating the PMCD control file, and notifying PMCD ...\
|
|
||||||
[...removing files...]'
|
|
@ -1,17 +0,0 @@
|
|||||||
BZ 1848995 - Intermittent pminfo crashes (core dumps)
|
|
||||||
51bb36a84 libpcp: minor clarification to previous fix to use __pmHashInit
|
|
||||||
d0df00ad1 derive_parser.y.in: fix of incomplete initialization of __pmHashCtl struct for F_REGEX node
|
|
||||||
|
|
||||||
diff --git a/src/libpcp/src/derive_parser.y.in b/src/libpcp/src/derive_parser.y.in
|
|
||||||
index 9ed375e01..6756daa77 100644
|
|
||||||
--- a/src/libpcp/src/derive_parser.y.in
|
|
||||||
+++ b/src/libpcp/src/derive_parser.y.in
|
|
||||||
@@ -2598,6 +2598,8 @@ regexpr : opt_bang L_PATTERN
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
np->data.pattern->invert = $1;
|
|
||||||
+ np->data.pattern->used = 0;
|
|
||||||
+ __pmHashInit(&np->data.pattern->hash);
|
|
||||||
$$ = np;
|
|
||||||
}
|
|
||||||
|
|
@ -1,996 +0,0 @@
|
|||||||
BZ 1849511 - resolve covscan and other issues from upstream QA
|
|
||||||
f7f1dd546 pmproxy: complete handling of HTTP/1.1 TRACE requests
|
|
||||||
cc662872b qa: add pcp-free-tera archive to pcp-testsuite package
|
|
||||||
80639d05b pmlogger_check.sh: major overhaul (diags and systemd fixups)
|
|
||||||
460b7ac2a src/pmlogger/rc_pmlogger: use --quick to pmlogger_check
|
|
||||||
0b3b4d4ee src/pmlogger/pmlogger_check.service.in: add --skip-primary arg to pmlogger_check
|
|
||||||
3a68366a8 src/pmlogger/pmlogger.service.in: change ancillary services from After to Before
|
|
||||||
5d65a6035 src/pmlogger/pmlogger_daily.sh: similar changes to pmlogger_check.sh
|
|
||||||
ace576907 src/pmlogger/pmlogger_check.sh: fix locking snarfoo
|
|
||||||
2b2c3db11 src/pmlogger/pmlogger_daily.sh: fix diagnostic spaghetti
|
|
||||||
4cc54287f pmproxy: allow URLs up to 8k in length
|
|
||||||
|
|
||||||
diff -auNr pcp-5.1.1-004/man/man1/pmlogger_check.1 pcp-5.1.1-005/man/man1/pmlogger_check.1
|
|
||||||
--- pcp-5.1.1-004/man/man1/pmlogger_check.1 2020-04-07 13:31:03.000000000 +1000
|
|
||||||
+++ pcp-5.1.1-005/man/man1/pmlogger_check.1 2020-06-22 20:08:18.454403788 +1000
|
|
||||||
@@ -19,7 +19,7 @@
|
|
||||||
\f3pmlogger_daily\f1 \- administration of Performance Co-Pilot archive log files
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B $PCP_BINADM_DIR/pmlogger_check
|
|
||||||
-[\f3\-CNsTV?\f1]
|
|
||||||
+[\f3\-CNpqsTV?\f1]
|
|
||||||
[\f3\-c\f1 \f2control\f1]
|
|
||||||
[\f3\-l\f1 \f2logfile\f1]
|
|
||||||
.br
|
|
||||||
@@ -269,6 +269,20 @@
|
|
||||||
.TP
|
|
||||||
\fB\-p\fR
|
|
||||||
If this option is specified for
|
|
||||||
+.B pmlogger_check
|
|
||||||
+then any line from the control files for the
|
|
||||||
+.I primary
|
|
||||||
+.B pmlogger
|
|
||||||
+will be ignored.
|
|
||||||
+This option is intended for environments where some system daemon,
|
|
||||||
+like
|
|
||||||
+.BR systemd (1),
|
|
||||||
+is responsible for controlling (starting, stopping, restarting, etc.) the
|
|
||||||
+.I primary
|
|
||||||
+.BR pmlogger .
|
|
||||||
+.TP
|
|
||||||
+\fB\-p\fR
|
|
||||||
+If this option is specified for
|
|
||||||
.B pmlogger_daily
|
|
||||||
then the status of the daily processing is polled and if the daily
|
|
||||||
.BR pmlogger (1)
|
|
||||||
@@ -296,6 +310,12 @@
|
|
||||||
.B pmlogger_daily
|
|
||||||
are mutually exclusive.
|
|
||||||
.TP
|
|
||||||
+\fB\-q\fR
|
|
||||||
+If this option is specified for
|
|
||||||
+.B pmlogger_check
|
|
||||||
+then the script will ``quickstart'' avoiding any optional processing
|
|
||||||
+like file compression.
|
|
||||||
+.TP
|
|
||||||
\fB\-r\fR, \fB\-\-norewrite\fR
|
|
||||||
This command line option acts as an override and prevents all archive
|
|
||||||
rewriting with
|
|
||||||
diff -auNr pcp-5.1.1-004/qa/1837 pcp-5.1.1-005/qa/1837
|
|
||||||
--- pcp-5.1.1-004/qa/1837 2020-06-22 20:00:17.636331169 +1000
|
|
||||||
+++ pcp-5.1.1-005/qa/1837 2020-06-22 20:08:18.457403819 +1000
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
#!/bin/sh
|
|
||||||
# PCP QA Test No. 1837
|
|
||||||
-# Exercise PMWEBAPI handling server OPTIONS.
|
|
||||||
+# Exercise PMWEBAPI handling server OPTIONS and TRACE.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2020 Red Hat. All Rights Reserved.
|
|
||||||
#
|
|
||||||
@@ -43,7 +43,12 @@
|
|
||||||
# real QA test starts here
|
|
||||||
_service pmproxy restart >/dev/null 2>&1
|
|
||||||
|
|
||||||
-curl -isS --request-target "*" -X OPTIONS http://localhost:44322 \
|
|
||||||
+echo; echo "=== OPTIONS"
|
|
||||||
+curl -isS -X OPTIONS --request-target "*" http://localhost:44322 \
|
|
||||||
+ 2>&1 | tee -a $here/$seq.full | _webapi_header_filter
|
|
||||||
+
|
|
||||||
+echo; echo "=== TRACE"
|
|
||||||
+curl -isS -X TRACE http://localhost:44322 \
|
|
||||||
2>&1 | tee -a $here/$seq.full | _webapi_header_filter
|
|
||||||
|
|
||||||
echo >>$here/$seq.full
|
|
||||||
diff -auNr pcp-5.1.1-004/qa/1837.out pcp-5.1.1-005/qa/1837.out
|
|
||||||
--- pcp-5.1.1-004/qa/1837.out 2020-06-22 20:00:17.637331179 +1000
|
|
||||||
+++ pcp-5.1.1-005/qa/1837.out 2020-06-22 20:08:18.457403819 +1000
|
|
||||||
@@ -1,6 +1,17 @@
|
|
||||||
QA output created by 1837
|
|
||||||
|
|
||||||
+=== OPTIONS
|
|
||||||
+
|
|
||||||
Access-Control-Allow-Methods: GET, PUT, HEAD, POST, TRACE, OPTIONS
|
|
||||||
Content-Length: 0
|
|
||||||
Date: DATE
|
|
||||||
HTTP/1.1 200 OK
|
|
||||||
+
|
|
||||||
+=== TRACE
|
|
||||||
+
|
|
||||||
+Accept: */*
|
|
||||||
+Content-Length: 0
|
|
||||||
+Date: DATE
|
|
||||||
+HTTP/1.1 200 OK
|
|
||||||
+Host: localhost:44322
|
|
||||||
+User-Agent: curl VERSION
|
|
||||||
diff -auNr pcp-5.1.1-004/qa/archives/GNUmakefile pcp-5.1.1-005/qa/archives/GNUmakefile
|
|
||||||
--- pcp-5.1.1-004/qa/archives/GNUmakefile 2020-03-19 15:15:42.000000000 +1100
|
|
||||||
+++ pcp-5.1.1-005/qa/archives/GNUmakefile 2020-06-22 20:08:18.461403861 +1000
|
|
||||||
@@ -35,6 +35,7 @@
|
|
||||||
pcp-atop.0.xz pcp-atop.meta pcp-atop.index \
|
|
||||||
pcp-atop-boot.0.xz pcp-atop-boot.meta pcp-atop-boot.index \
|
|
||||||
pcp-dstat.0.xz pcp-dstat.meta pcp-dstat.index \
|
|
||||||
+ pcp-free-tera.0.xz pcp-free-tera.meta.xz pcp-free-tera.index \
|
|
||||||
pcp-hotatop.0.xz pcp-hotatop.meta pcp-hotatop.index \
|
|
||||||
pcp-zeroconf.0.xz pcp-zeroconf.meta pcp-zeroconf.index \
|
|
||||||
value-test.0.xz value-test.meta value-test.index \
|
|
||||||
diff -auNr pcp-5.1.1-004/qa/common.check pcp-5.1.1-005/qa/common.check
|
|
||||||
--- pcp-5.1.1-004/qa/common.check 2020-06-22 20:00:17.637331179 +1000
|
|
||||||
+++ pcp-5.1.1-005/qa/common.check 2020-06-22 20:08:18.459403840 +1000
|
|
||||||
@@ -2697,6 +2697,7 @@
|
|
||||||
| col -b \
|
|
||||||
| sed \
|
|
||||||
-e 's/^\(Content-Length:\) [1-9][0-9]*/\1 SIZE/g' \
|
|
||||||
+ -e 's/^\(User-Agent: curl\).*/\1 VERSION/g' \
|
|
||||||
-e 's/^\(Date:\).*/\1 DATE/g' \
|
|
||||||
-e 's/\(\"context\":\) [0-9][0-9]*/\1 CTXID/g' \
|
|
||||||
-e '/^Connection: Keep-Alive/d' \
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmlogger/pmlogger_check.service.in pcp-5.1.1-005/src/pmlogger/pmlogger_check.service.in
|
|
||||||
--- pcp-5.1.1-004/src/pmlogger/pmlogger_check.service.in 2020-05-22 16:40:09.000000000 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmlogger/pmlogger_check.service.in 2020-06-22 20:08:18.452403767 +1000
|
|
||||||
@@ -6,7 +6,7 @@
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
TimeoutStartSec=25m
|
|
||||||
-Environment="PMLOGGER_CHECK_PARAMS=-C"
|
|
||||||
+Environment="PMLOGGER_CHECK_PARAMS=-C --skip-primary"
|
|
||||||
EnvironmentFile=-@PCP_SYSCONFIG_DIR@/pmlogger_timers
|
|
||||||
ExecStart=@PCP_BINADM_DIR@/pmlogger_check $PMLOGGER_CHECK_PARAMS
|
|
||||||
WorkingDirectory=@PCP_VAR_DIR@
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmlogger/pmlogger_check.sh pcp-5.1.1-005/src/pmlogger/pmlogger_check.sh
|
|
||||||
--- pcp-5.1.1-004/src/pmlogger/pmlogger_check.sh 2020-05-04 09:52:04.000000000 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmlogger/pmlogger_check.sh 2020-06-22 20:13:04.029416598 +1000
|
|
||||||
@@ -36,16 +36,24 @@
|
|
||||||
echo >$tmp/lock
|
|
||||||
prog=`basename $0`
|
|
||||||
PROGLOG=$PCP_LOG_DIR/pmlogger/$prog.log
|
|
||||||
+MYPROGLOG=$PROGLOG.$$
|
|
||||||
USE_SYSLOG=true
|
|
||||||
|
|
||||||
_cleanup()
|
|
||||||
{
|
|
||||||
+ if [ -s "$MYPROGLOG" ]
|
|
||||||
+ then
|
|
||||||
+ rm -f "$PROGLOG"
|
|
||||||
+ mv "$MYPROGLOG" "$PROGLOG"
|
|
||||||
+ else
|
|
||||||
+ rm -f "$MYPROGLOG"
|
|
||||||
+ fi
|
|
||||||
$USE_SYSLOG && [ $status -ne 0 ] && \
|
|
||||||
$PCP_SYSLOG_PROG -p daemon.error "$prog failed - see $PROGLOG"
|
|
||||||
- [ -s "$PROGLOG" ] || rm -f "$PROGLOG"
|
|
||||||
lockfile=`cat $tmp/lock 2>/dev/null`
|
|
||||||
rm -f "$lockfile"
|
|
||||||
rm -rf $tmp
|
|
||||||
+ $VERY_VERBOSE && echo "End: `date '+%F %T.%N'`"
|
|
||||||
}
|
|
||||||
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
||||||
|
|
||||||
@@ -86,6 +94,8 @@
|
|
||||||
CHECK_RUNLEVEL=false
|
|
||||||
START_PMLOGGER=true
|
|
||||||
STOP_PMLOGGER=false
|
|
||||||
+QUICKSTART=false
|
|
||||||
+SKIP_PRIMARY=false
|
|
||||||
|
|
||||||
echo > $tmp/usage
|
|
||||||
cat >> $tmp/usage << EOF
|
|
||||||
@@ -94,6 +104,8 @@
|
|
||||||
-l=FILE,--logfile=FILE send important diagnostic messages to FILE
|
|
||||||
-C query system service runlevel information
|
|
||||||
-N,--showme perform a dry run, showing what would be done
|
|
||||||
+ -p,--skip-primary do not start or stop the primary pmlogger instance
|
|
||||||
+ -q,--quick quick start, no compression
|
|
||||||
-s,--stop stop pmlogger processes instead of starting them
|
|
||||||
-T,--terse produce a terser form of output
|
|
||||||
-V,--verbose increase diagnostic verbosity
|
|
||||||
@@ -117,6 +129,7 @@
|
|
||||||
-C) CHECK_RUNLEVEL=true
|
|
||||||
;;
|
|
||||||
-l) PROGLOG="$2"
|
|
||||||
+ MYPROGLOG="$PROGLOG".$$
|
|
||||||
USE_SYSLOG=false
|
|
||||||
daily_args="${daily_args} -l $2.from.check"
|
|
||||||
shift
|
|
||||||
@@ -129,6 +142,10 @@
|
|
||||||
KILL="echo + kill"
|
|
||||||
daily_args="${daily_args} -N"
|
|
||||||
;;
|
|
||||||
+ -p) SKIP_PRIMARY=true
|
|
||||||
+ ;;
|
|
||||||
+ -q) QUICKSTART=true
|
|
||||||
+ ;;
|
|
||||||
-s) START_PMLOGGER=false
|
|
||||||
STOP_PMLOGGER=true
|
|
||||||
;;
|
|
||||||
@@ -162,9 +179,15 @@
|
|
||||||
|
|
||||||
_compress_now()
|
|
||||||
{
|
|
||||||
- # If $PCP_COMPRESSAFTER=0 in the control file(s), compress archives now.
|
|
||||||
- # Invoked just before exit when this script has finished successfully.
|
|
||||||
- $PCP_BINADM_DIR/pmlogger_daily -K $daily_args
|
|
||||||
+ if $QUICKSTART
|
|
||||||
+ then
|
|
||||||
+ $VERY_VERBOSE && echo "Skip compression, -q/--quick on command line"
|
|
||||||
+ else
|
|
||||||
+ # If $PCP_COMPRESSAFTER=0 in the control file(s), compress archives now.
|
|
||||||
+ # Invoked just before exit when this script has finished successfully.
|
|
||||||
+ $VERY_VERBOSE && echo "Doing compression ..."
|
|
||||||
+ $PCP_BINADM_DIR/pmlogger_daily -K $daily_args
|
|
||||||
+ fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# after argument checking, everything must be logged to ensure no mail is
|
|
||||||
@@ -187,26 +210,37 @@
|
|
||||||
#
|
|
||||||
# Exception ($SHOWME, above) is for -N where we want to see the output.
|
|
||||||
#
|
|
||||||
- touch "$PROGLOG"
|
|
||||||
- chown $PCP_USER:$PCP_GROUP "$PROGLOG" >/dev/null 2>&1
|
|
||||||
- exec 1>"$PROGLOG" 2>&1
|
|
||||||
+ touch "$MYPROGLOG"
|
|
||||||
+ chown $PCP_USER:$PCP_GROUP "$MYPROGLOG" >/dev/null 2>&1
|
|
||||||
+ exec 1>"$MYPROGLOG" 2>&1
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if $VERY_VERBOSE
|
|
||||||
+then
|
|
||||||
+ echo "Start: `date '+%F %T.%N'`"
|
|
||||||
+ if `which pstree >/dev/null 2>&1`
|
|
||||||
+ then
|
|
||||||
+ echo "Called from:"
|
|
||||||
+ pstree -spa $$
|
|
||||||
+ echo "--- end of pstree output ---"
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if SaveLogs exists in the $PCP_LOG_DIR/pmlogger directory then save
|
|
||||||
-# $PROGLOG there as well with a unique name that contains the date and time
|
|
||||||
+# $MYPROGLOG there as well with a unique name that contains the date and time
|
|
||||||
# when we're run
|
|
||||||
#
|
|
||||||
if [ -d $PCP_LOG_DIR/pmlogger/SaveLogs ]
|
|
||||||
then
|
|
||||||
- now="`date '+%Y%m%d.%H.%M'`"
|
|
||||||
- link=`echo $PROGLOG | sed -e "s/$prog/SaveLogs\/$prog.$now/"`
|
|
||||||
+ now="`date '+%Y%m%d.%H.%M.%S'`"
|
|
||||||
+ link=`echo $MYPROGLOG | sed -e "s/$prog/SaveLogs\/$prog.$now/"`
|
|
||||||
if [ ! -f "$link" ]
|
|
||||||
then
|
|
||||||
if $SHOWME
|
|
||||||
then
|
|
||||||
- echo "+ ln $PROGLOG $link"
|
|
||||||
+ echo "+ ln $MYPROGLOG $link"
|
|
||||||
else
|
|
||||||
- ln $PROGLOG $link
|
|
||||||
+ ln $MYPROGLOG $link
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -273,7 +307,7 @@
|
|
||||||
|
|
||||||
_unlock()
|
|
||||||
{
|
|
||||||
- rm -f lock
|
|
||||||
+ rm -f "$1/lock"
|
|
||||||
echo >$tmp/lock
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -395,6 +429,41 @@
|
|
||||||
echo "$pid"
|
|
||||||
}
|
|
||||||
|
|
||||||
+# wait for the local pmcd to get going for a primary pmlogger
|
|
||||||
+# (borrowed from qa/common.check)
|
|
||||||
+#
|
|
||||||
+# wait_for_pmcd [maxdelay]
|
|
||||||
+#
|
|
||||||
+_wait_for_pmcd()
|
|
||||||
+{
|
|
||||||
+ # 5 seconds default seems like a reasonable max time to get going
|
|
||||||
+ _can_wait=${1-5}
|
|
||||||
+ _limit=`expr $_can_wait \* 10`
|
|
||||||
+ _i=0
|
|
||||||
+ _dead=true
|
|
||||||
+ while [ $_i -lt $_limit ]
|
|
||||||
+ do
|
|
||||||
+ _sts=`pmprobe pmcd.numclients 2>/dev/null | $PCP_AWK_PROG '{print $2}'`
|
|
||||||
+ if [ "${_sts:-0}" -gt 0 ]
|
|
||||||
+ then
|
|
||||||
+ # numval really > 0, we're done
|
|
||||||
+ #
|
|
||||||
+ _dead=false
|
|
||||||
+ break
|
|
||||||
+ fi
|
|
||||||
+ pmsleep 0.1
|
|
||||||
+ _i=`expr $_i + 1`
|
|
||||||
+ done
|
|
||||||
+ if $_dead
|
|
||||||
+ then
|
|
||||||
+ date
|
|
||||||
+ echo "Arrgghhh ... pmcd at localhost failed to start after $_can_wait seconds"
|
|
||||||
+ echo "=== failing pmprobes ==="
|
|
||||||
+ pmprobe pmcd.numclients
|
|
||||||
+ status=1
|
|
||||||
+ fi
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
_check_archive()
|
|
||||||
{
|
|
||||||
if [ ! -e "$logfile" ]
|
|
||||||
@@ -531,7 +600,17 @@
|
|
||||||
cd "$here"
|
|
||||||
line=`expr $line + 1`
|
|
||||||
|
|
||||||
- $VERY_VERBOSE && echo "[$controlfile:$line] host=\"$host\" primary=\"$primary\" socks=\"$socks\" dir=\"$dir\" args=\"$args\""
|
|
||||||
+
|
|
||||||
+ if $VERY_VERBOSE
|
|
||||||
+ then
|
|
||||||
+ case "$host"
|
|
||||||
+ in
|
|
||||||
+ \#*|'') # comment or empty
|
|
||||||
+ ;;
|
|
||||||
+ *) echo "[$controlfile:$line] host=\"$host\" primary=\"$primary\" socks=\"$socks\" dir=\"$dir\" args=\"$args\""
|
|
||||||
+ ;;
|
|
||||||
+ esac
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
case "$host"
|
|
||||||
in
|
|
||||||
@@ -599,6 +678,15 @@
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
+ # if -s/--skip-primary on the command line, do not process
|
|
||||||
+ # a control file line for the primary pmlogger
|
|
||||||
+ #
|
|
||||||
+ if $SKIP_PRIMARY && [ $primary = y ]
|
|
||||||
+ then
|
|
||||||
+ $VERY_VERBOSE && echo "Skip, -s/--skip-primary on command line"
|
|
||||||
+ continue
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
# substitute LOCALHOSTNAME marker in this config line
|
|
||||||
# (differently for directory and pcp -h HOST arguments)
|
|
||||||
#
|
|
||||||
@@ -610,7 +698,7 @@
|
|
||||||
then
|
|
||||||
pflag=''
|
|
||||||
[ $primary = y ] && pflag=' -P'
|
|
||||||
- echo "Check pmlogger$pflag -h $host ... in $dir ..."
|
|
||||||
+ echo "Checking for: pmlogger$pflag -h $host ... in $dir ..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for directory duplicate entries
|
|
||||||
@@ -664,19 +752,25 @@
|
|
||||||
delay=200 # tenths of a second
|
|
||||||
while [ $delay -gt 0 ]
|
|
||||||
do
|
|
||||||
- if pmlock -v lock >$tmp/out 2>&1
|
|
||||||
+ if pmlock -v "$dir/lock" >$tmp/out 2>&1
|
|
||||||
then
|
|
||||||
- echo $dir/lock >$tmp/lock
|
|
||||||
+ echo "$dir/lock" >$tmp/lock
|
|
||||||
+ if $VERY_VERBOSE
|
|
||||||
+ then
|
|
||||||
+ echo "Acquired lock:"
|
|
||||||
+ ls -l $dir/lock
|
|
||||||
+ fi
|
|
||||||
break
|
|
||||||
else
|
|
||||||
[ -f $tmp/stamp ] || touch -t `pmdate -30M %Y%m%d%H%M` $tmp/stamp
|
|
||||||
- if [ -z "`find lock -newer $tmp/stamp -print 2>/dev/null`" ]
|
|
||||||
+ find $tmp/stamp -newer "$dir/lock" -print 2>/dev/null >$tmp/tmp
|
|
||||||
+ if [ -s $tmp/tmp ]
|
|
||||||
then
|
|
||||||
- if [ -f lock ]
|
|
||||||
+ if [ -f "$dir/lock" ]
|
|
||||||
then
|
|
||||||
echo "$prog: Warning: removing lock file older than 30 minutes"
|
|
||||||
LC_TIME=POSIX ls -l $dir/lock
|
|
||||||
- rm -f lock
|
|
||||||
+ rm -f "$dir/lock"
|
|
||||||
else
|
|
||||||
# there is a small timing window here where pmlock
|
|
||||||
# might fail, but the lock file has been removed by
|
|
||||||
@@ -714,7 +808,7 @@
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
- if [ -f lock ]
|
|
||||||
+ if [ -f "$dir/lock" ]
|
|
||||||
then
|
|
||||||
echo "$prog: Warning: is another PCP cron job running concurrently?"
|
|
||||||
LC_TIME=POSIX ls -l $dir/lock
|
|
||||||
@@ -753,6 +847,14 @@
|
|
||||||
$VERY_VERBOSE && echo "primary pmlogger process $pid not running"
|
|
||||||
pid=''
|
|
||||||
fi
|
|
||||||
+ else
|
|
||||||
+ if $VERY_VERBOSE
|
|
||||||
+ then
|
|
||||||
+ echo "$PCP_TMP_DIR/pmlogger/primary: missing?"
|
|
||||||
+ echo "Contents of $PCP_TMP_DIR/pmlogger"
|
|
||||||
+ ls -l $PCP_TMP_DIR/pmlogger
|
|
||||||
+ echo "--- end of ls output ---"
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
for log in $PCP_TMP_DIR/pmlogger/[0-9]*
|
|
||||||
@@ -798,6 +900,17 @@
|
|
||||||
#
|
|
||||||
PM_LOG_PORT_DIR="$PCP_TMP_DIR/pmlogger"
|
|
||||||
rm -f "$PM_LOG_PORT_DIR/primary"
|
|
||||||
+ # We really starting the primary pmlogger to work, especially
|
|
||||||
+ # in the systemd world, so make sure pmcd is ready to accept
|
|
||||||
+ # connections.
|
|
||||||
+ #
|
|
||||||
+ _wait_for_pmcd
|
|
||||||
+ if [ "$status" = 1 ]
|
|
||||||
+ then
|
|
||||||
+ $VERY_VERBOSE && echo "pmcd not running, skip primary pmlogger"
|
|
||||||
+ _unlock "$dir"
|
|
||||||
+ continue
|
|
||||||
+ fi
|
|
||||||
else
|
|
||||||
args="-h $host $args"
|
|
||||||
envs=""
|
|
||||||
@@ -870,7 +983,7 @@
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
echo "+ ${sock_me}$PMLOGGER $args $LOGNAME"
|
|
||||||
- _unlock
|
|
||||||
+ _unlock "$dir"
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
$PCP_BINADM_DIR/pmpost "start pmlogger from $prog for host $host"
|
|
||||||
@@ -903,7 +1016,7 @@
|
|
||||||
$PCP_ECHO_PROG $PCP_ECHO_N "$pid ""$PCP_ECHO_C" >> $tmp/pmloggers
|
|
||||||
fi
|
|
||||||
|
|
||||||
- _unlock
|
|
||||||
+ _unlock "$dir"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmlogger/pmlogger_daily.sh pcp-5.1.1-005/src/pmlogger/pmlogger_daily.sh
|
|
||||||
--- pcp-5.1.1-004/src/pmlogger/pmlogger_daily.sh 2020-04-07 13:31:03.000000000 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmlogger/pmlogger_daily.sh 2020-06-22 20:08:18.451403756 +1000
|
|
||||||
@@ -31,16 +31,24 @@
|
|
||||||
echo >$tmp/lock
|
|
||||||
prog=`basename $0`
|
|
||||||
PROGLOG=$PCP_LOG_DIR/pmlogger/$prog.log
|
|
||||||
+MYPROGLOG=$PROGLOG.$$
|
|
||||||
USE_SYSLOG=true
|
|
||||||
|
|
||||||
_cleanup()
|
|
||||||
{
|
|
||||||
+ if [ -s "$MYPROGLOG" ]
|
|
||||||
+ then
|
|
||||||
+ rm -f "$PROGLOG"
|
|
||||||
+ mv "$MYPROGLOG" "$PROGLOG"
|
|
||||||
+ else
|
|
||||||
+ rm -f "$MYPROGLOG"
|
|
||||||
+ fi
|
|
||||||
$USE_SYSLOG && [ $status -ne 0 ] && \
|
|
||||||
$PCP_SYSLOG_PROG -p daemon.error "$prog failed - see $PROGLOG"
|
|
||||||
- [ -s "$PROGLOG" ] || rm -f "$PROGLOG"
|
|
||||||
lockfile=`cat $tmp/lock 2>/dev/null`
|
|
||||||
rm -f "$lockfile" "$PCP_RUN_DIR/pmlogger_daily.pid"
|
|
||||||
rm -rf $tmp
|
|
||||||
+ $VERY_VERBOSE && echo "End: `date '+%F %T.%N'`"
|
|
||||||
}
|
|
||||||
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
||||||
|
|
||||||
@@ -215,8 +223,10 @@
|
|
||||||
fi
|
|
||||||
COMPRESSONLY=true
|
|
||||||
PROGLOG=$PCP_LOG_DIR/pmlogger/$prog-K.log
|
|
||||||
+ MYPROGLOG=$PROGLOG.$$
|
|
||||||
;;
|
|
||||||
-l) PROGLOG="$2"
|
|
||||||
+ MYPROGLOG=$PROGLOG.$$
|
|
||||||
USE_SYSLOG=false
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
@@ -278,6 +288,7 @@
|
|
||||||
# $PCP_LOG_DIR/pmlogger/daily.<date>.trace
|
|
||||||
#
|
|
||||||
PROGLOG=$PCP_LOG_DIR/pmlogger/daily.`date "+%Y%m%d.%H.%M"`.trace
|
|
||||||
+ MYPROGLOG=$PROGLOG.$$
|
|
||||||
VERBOSE=true
|
|
||||||
VERY_VERBOSE=true
|
|
||||||
MYARGS="$MYARGS -V -V"
|
|
||||||
@@ -418,13 +429,23 @@
|
|
||||||
#
|
|
||||||
# Exception ($SHOWME, above) is for -N where we want to see the output.
|
|
||||||
#
|
|
||||||
- touch "$PROGLOG"
|
|
||||||
- chown $PCP_USER:$PCP_GROUP "$PROGLOG" >/dev/null 2>&1
|
|
||||||
- exec 1>"$PROGLOG" 2>&1
|
|
||||||
+ touch "$MYPROGLOG"
|
|
||||||
+ chown $PCP_USER:$PCP_GROUP "$MYPROGLOG" >/dev/null 2>&1
|
|
||||||
+ exec 1>"$MYPROGLOG" 2>&1
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if $VERY_VERBOSE
|
|
||||||
+then
|
|
||||||
+ echo "Start: `date '+%F %T.%N'`"
|
|
||||||
+ if `which pstree >/dev/null 2>&1`
|
|
||||||
+ then
|
|
||||||
+ echo "Called from:"
|
|
||||||
+ pstree -spa $$
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if SaveLogs exists in the $PCP_LOG_DIR/pmlogger directory then save
|
|
||||||
-# $PROGLOG there as well with a unique name that contains the date and time
|
|
||||||
+# $MYPROGLOG there as well with a unique name that contains the date and time
|
|
||||||
# when we're run ... skip if -N (showme)
|
|
||||||
#
|
|
||||||
if $SHOWME
|
|
||||||
@@ -433,15 +454,15 @@
|
|
||||||
else
|
|
||||||
if [ -d $PCP_LOG_DIR/pmlogger/SaveLogs ]
|
|
||||||
then
|
|
||||||
- now="`date '+%Y%m%d.%H.%M'`"
|
|
||||||
- link=`echo $PROGLOG | sed -e "s/$prog/SaveLogs\/$prog.$now/"`
|
|
||||||
+ now="`date '+%Y%m%d.%H.%M.%S'`"
|
|
||||||
+ link=`echo $MYPROGLOG | sed -e "s/$prog/SaveLogs\/$prog.$now/"`
|
|
||||||
if [ ! -f "$link" ]
|
|
||||||
then
|
|
||||||
if $SHOWME
|
|
||||||
then
|
|
||||||
- echo "+ ln $PROGLOG $link"
|
|
||||||
+ echo "+ ln $MYPROGLOG $link"
|
|
||||||
else
|
|
||||||
- ln $PROGLOG $link
|
|
||||||
+ ln $MYPROGLOG $link
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -487,19 +508,20 @@
|
|
||||||
delay=200 # tenths of a second
|
|
||||||
while [ $delay -gt 0 ]
|
|
||||||
do
|
|
||||||
- if pmlock -v lock >>$tmp/out 2>&1
|
|
||||||
+ if pmlock -v "$1/lock" >>$tmp/out 2>&1
|
|
||||||
then
|
|
||||||
- echo $1/lock >$tmp/lock
|
|
||||||
+ echo "$1/lock" >$tmp/lock
|
|
||||||
break
|
|
||||||
else
|
|
||||||
[ -f $tmp/stamp ] || touch -t `pmdate -30M %Y%m%d%H%M` $tmp/stamp
|
|
||||||
- if [ ! -z "`find lock -newer $tmp/stamp -print 2>/dev/null`" ]
|
|
||||||
+ find $tmp/stamp -newer "$1/lock" -print 2>/dev/null >$tmp/tmp
|
|
||||||
+ if [ -s $tmp/tmp ]
|
|
||||||
then
|
|
||||||
- if [ -f lock ]
|
|
||||||
+ if [ -f "$1/lock" ]
|
|
||||||
then
|
|
||||||
_warning "removing lock file older than 30 minutes"
|
|
||||||
- LC_TIME=POSIX ls -l $1/lock
|
|
||||||
- rm -f lock
|
|
||||||
+ LC_TIME=POSIX ls -l "$1/lock"
|
|
||||||
+ rm -f "$1/lock"
|
|
||||||
else
|
|
||||||
# there is a small timing window here where pmlock
|
|
||||||
# might fail, but the lock file has been removed by
|
|
||||||
@@ -517,10 +539,10 @@
|
|
||||||
then
|
|
||||||
# failed to gain mutex lock
|
|
||||||
#
|
|
||||||
- if [ -f lock ]
|
|
||||||
+ if [ -f "$1/lock" ]
|
|
||||||
then
|
|
||||||
_warning "is another PCP cron job running concurrently?"
|
|
||||||
- LC_TIME=POSIX ls -l $1/lock
|
|
||||||
+ LC_TIME=POSIX ls -l "$1/lock"
|
|
||||||
else
|
|
||||||
echo "$prog: `cat $tmp/out`"
|
|
||||||
fi
|
|
||||||
@@ -534,7 +556,7 @@
|
|
||||||
|
|
||||||
_unlock()
|
|
||||||
{
|
|
||||||
- rm -f lock
|
|
||||||
+ rm -f "$1/lock"
|
|
||||||
echo >$tmp/lock
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -703,6 +725,9 @@
|
|
||||||
# if the directory containing the archive matches, then the name
|
|
||||||
# of the file is the pid.
|
|
||||||
#
|
|
||||||
+# The pid(s) (if any) appear on stdout, so be careful to send any
|
|
||||||
+# diagnostics to stderr.
|
|
||||||
+#
|
|
||||||
_get_non_primary_logger_pid()
|
|
||||||
{
|
|
||||||
pid=''
|
|
||||||
@@ -713,7 +738,7 @@
|
|
||||||
then
|
|
||||||
_host=`sed -n 2p <$log`
|
|
||||||
_arch=`sed -n 3p <$log`
|
|
||||||
- $PCP_ECHO_PROG $PCP_ECHO_N "... try $log host=$_host arch=$_arch: ""$PCP_ECHO_C"
|
|
||||||
+ $PCP_ECHO_PROG >&2 $PCP_ECHO_N "... try $log host=$_host arch=$_arch: ""$PCP_ECHO_C"
|
|
||||||
fi
|
|
||||||
# throw away stderr in case $log has been removed by now
|
|
||||||
match=`sed -e '3s@/[^/]*$@@' $log 2>/dev/null | \
|
|
||||||
@@ -721,19 +746,19 @@
|
|
||||||
BEGIN { m = 0 }
|
|
||||||
NR == 3 && $0 == "'$dir'" { m = 2; next }
|
|
||||||
END { print m }'`
|
|
||||||
- $VERY_VERBOSE && $PCP_ECHO_PROG $PCP_ECHO_N "match=$match ""$PCP_ECHO_C"
|
|
||||||
+ $VERY_VERBOSE && $PCP_ECHO_PROG >&2 $PCP_ECHO_N "match=$match ""$PCP_ECHO_C"
|
|
||||||
if [ "$match" = 2 ]
|
|
||||||
then
|
|
||||||
pid=`echo $log | sed -e 's,.*/,,'`
|
|
||||||
if _get_pids_by_name pmlogger | grep "^$pid\$" >/dev/null
|
|
||||||
then
|
|
||||||
- $VERY_VERBOSE && echo "pmlogger process $pid identified, OK"
|
|
||||||
+ $VERY_VERBOSE && echo >&2 "pmlogger process $pid identified, OK"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
- $VERY_VERBOSE && echo "pmlogger process $pid not running, skip"
|
|
||||||
+ $VERY_VERBOSE && echo >&2 "pmlogger process $pid not running, skip"
|
|
||||||
pid=''
|
|
||||||
else
|
|
||||||
- $VERY_VERBOSE && echo "different directory, skip"
|
|
||||||
+ $VERY_VERBOSE && echo >&2 "different directory, skip"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo "$pid"
|
|
||||||
@@ -1028,6 +1053,8 @@
|
|
||||||
pid=''
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
+ # pid(s) on stdout, diagnostics on stderr
|
|
||||||
+ #
|
|
||||||
pid=`_get_non_primary_logger_pid`
|
|
||||||
if $VERY_VERBOSE
|
|
||||||
then
|
|
||||||
@@ -1458,7 +1485,7 @@
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
- _unlock
|
|
||||||
+ _unlock "$dir"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmlogger/pmlogger.service.in pcp-5.1.1-005/src/pmlogger/pmlogger.service.in
|
|
||||||
--- pcp-5.1.1-004/src/pmlogger/pmlogger.service.in 2020-06-22 20:00:17.634331148 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmlogger/pmlogger.service.in 2020-06-22 20:08:18.452403767 +1000
|
|
||||||
@@ -2,7 +2,7 @@
|
|
||||||
Description=Performance Metrics Archive Logger
|
|
||||||
Documentation=man:pmlogger(1)
|
|
||||||
After=network-online.target pmcd.service
|
|
||||||
-After=pmlogger_check.timer pmlogger_check.path pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
+Before=pmlogger_check.timer pmlogger_check.path pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
BindsTo=pmlogger_check.timer pmlogger_check.path pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
Wants=pmcd.service
|
|
||||||
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmlogger/rc_pmlogger pcp-5.1.1-005/src/pmlogger/rc_pmlogger
|
|
||||||
--- pcp-5.1.1-004/src/pmlogger/rc_pmlogger 2020-04-21 10:42:02.000000000 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmlogger/rc_pmlogger 2020-06-22 20:08:18.453403777 +1000
|
|
||||||
@@ -96,7 +96,7 @@
|
|
||||||
bgtmp=`mktemp -d $PCP_DIR/var/tmp/pcp.XXXXXXXXX` || exit 1
|
|
||||||
trap "rm -rf $bgtmp; exit \$bgstatus" 0 1 2 3 15
|
|
||||||
|
|
||||||
- pmlogger_check $VFLAG >$bgtmp/pmcheck.out 2>$bgtmp/pmcheck
|
|
||||||
+ pmlogger_check --quick $VFLAG >$bgtmp/pmcheck.out 2>$bgtmp/pmcheck
|
|
||||||
bgstatus=$?
|
|
||||||
if [ -s $bgtmp/pmcheck ]
|
|
||||||
then
|
|
||||||
@@ -125,8 +125,6 @@
|
|
||||||
false
|
|
||||||
else
|
|
||||||
# Really start the pmlogger instances based on the control file.
|
|
||||||
- # Done in the background to avoid delaying the init script,
|
|
||||||
- # failure notification is external (syslog, log files).
|
|
||||||
#
|
|
||||||
$ECHO $PCP_ECHO_N "Starting pmlogger ..." "$PCP_ECHO_C"
|
|
||||||
|
|
||||||
@@ -234,11 +232,9 @@
|
|
||||||
if [ $VERBOSE_CTL = on ]
|
|
||||||
then # For a verbose startup and shutdown
|
|
||||||
ECHO=$PCP_ECHO_PROG
|
|
||||||
- REBUILDOPT=''
|
|
||||||
VFLAG='-V'
|
|
||||||
else # For a quiet startup and shutdown
|
|
||||||
ECHO=:
|
|
||||||
- REBUILDOPT=-s
|
|
||||||
VFLAG=
|
|
||||||
fi
|
|
||||||
|
|
||||||
diff -auNr pcp-5.1.1-004/src/pmproxy/src/http.c pcp-5.1.1-005/src/pmproxy/src/http.c
|
|
||||||
--- pcp-5.1.1-004/src/pmproxy/src/http.c 2020-06-22 20:00:17.635331158 +1000
|
|
||||||
+++ pcp-5.1.1-005/src/pmproxy/src/http.c 2020-06-22 20:08:18.460403851 +1000
|
|
||||||
@@ -324,17 +324,36 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
static sds
|
|
||||||
-http_response_trace(struct client *client)
|
|
||||||
+http_response_trace(struct client *client, int sts)
|
|
||||||
{
|
|
||||||
+ struct http_parser *parser = &client->u.http.parser;
|
|
||||||
dictIterator *iterator;
|
|
||||||
dictEntry *entry;
|
|
||||||
- sds result = sdsempty();
|
|
||||||
+ char buffer[64];
|
|
||||||
+ sds header;
|
|
||||||
+
|
|
||||||
+ parser->http_major = parser->http_minor = 1;
|
|
||||||
+
|
|
||||||
+ header = sdscatfmt(sdsempty(),
|
|
||||||
+ "HTTP/%u.%u %u %s\r\n"
|
|
||||||
+ "%S: Keep-Alive\r\n",
|
|
||||||
+ parser->http_major, parser->http_minor,
|
|
||||||
+ sts, http_status_mapping(sts), HEADER_CONNECTION);
|
|
||||||
+ header = sdscatfmt(header, "%S: %u\r\n", HEADER_CONTENT_LENGTH, 0);
|
|
||||||
|
|
||||||
iterator = dictGetSafeIterator(client->u.http.headers);
|
|
||||||
while ((entry = dictNext(iterator)) != NULL)
|
|
||||||
- result = sdscatfmt("%S: %S\r\n", dictGetKey(entry), dictGetVal(entry));
|
|
||||||
+ header = sdscatfmt(header, "%S: %S\r\n", dictGetKey(entry), dictGetVal(entry));
|
|
||||||
dictReleaseIterator(iterator);
|
|
||||||
- return result;
|
|
||||||
+
|
|
||||||
+ header = sdscatfmt(header, "Date: %s\r\n\r\n",
|
|
||||||
+ http_date_string(time(NULL), buffer, sizeof(buffer)));
|
|
||||||
+
|
|
||||||
+ if (pmDebugOptions.http && pmDebugOptions.desperate) {
|
|
||||||
+ fprintf(stderr, "trace response to client %p\n", client);
|
|
||||||
+ fputs(header, stderr);
|
|
||||||
+ }
|
|
||||||
+ return header;
|
|
||||||
}
|
|
||||||
|
|
||||||
static sds
|
|
||||||
@@ -418,7 +437,7 @@
|
|
||||||
if (client->u.http.parser.method == HTTP_OPTIONS)
|
|
||||||
buffer = http_response_access(client, sts, options);
|
|
||||||
else if (client->u.http.parser.method == HTTP_TRACE)
|
|
||||||
- buffer = http_response_trace(client);
|
|
||||||
+ buffer = http_response_trace(client, sts);
|
|
||||||
else /* HTTP_HEAD */
|
|
||||||
buffer = http_response_header(client, 0, sts, type);
|
|
||||||
suffix = NULL;
|
|
||||||
@@ -533,6 +552,8 @@
|
|
||||||
if (servlet && servlet->on_release)
|
|
||||||
servlet->on_release(client);
|
|
||||||
client->u.http.privdata = NULL;
|
|
||||||
+ client->u.http.servlet = NULL;
|
|
||||||
+ client->u.http.flags = 0;
|
|
||||||
|
|
||||||
if (client->u.http.headers) {
|
|
||||||
dictRelease(client->u.http.headers);
|
|
||||||
@@ -696,29 +717,39 @@
|
|
||||||
{
|
|
||||||
struct client *client = (struct client *)request->data;
|
|
||||||
struct servlet *servlet;
|
|
||||||
- sds buffer;
|
|
||||||
int sts;
|
|
||||||
|
|
||||||
http_client_release(client); /* new URL, clean slate */
|
|
||||||
- /* server options - https://tools.ietf.org/html/rfc7231#section-4.3.7 */
|
|
||||||
- if (length == 1 && *offset == '*' &&
|
|
||||||
- client->u.http.parser.method == HTTP_OPTIONS) {
|
|
||||||
- buffer = http_response_access(client, HTTP_STATUS_OK, HTTP_SERVER_OPTIONS);
|
|
||||||
- client_write(client, buffer, NULL);
|
|
||||||
- } else if ((servlet = servlet_lookup(client, offset, length)) != NULL) {
|
|
||||||
+ /* pass to servlets handling each of our internal request endpoints */
|
|
||||||
+ if ((servlet = servlet_lookup(client, offset, length)) != NULL) {
|
|
||||||
client->u.http.servlet = servlet;
|
|
||||||
- if ((sts = client->u.http.parser.status_code) == 0) {
|
|
||||||
+ if ((sts = client->u.http.parser.status_code) != 0)
|
|
||||||
+ http_error(client, sts, "failed to process URL");
|
|
||||||
+ else {
|
|
||||||
if (client->u.http.parser.method == HTTP_OPTIONS ||
|
|
||||||
client->u.http.parser.method == HTTP_TRACE ||
|
|
||||||
client->u.http.parser.method == HTTP_HEAD)
|
|
||||||
client->u.http.flags |= HTTP_FLAG_NO_BODY;
|
|
||||||
- else
|
|
||||||
- client->u.http.flags &= ~HTTP_FLAG_NO_BODY;
|
|
||||||
client->u.http.headers = dictCreate(&sdsOwnDictCallBacks, NULL);
|
|
||||||
- return 0;
|
|
||||||
}
|
|
||||||
- http_error(client, sts, "failed to process URL");
|
|
||||||
- } else {
|
|
||||||
+ }
|
|
||||||
+ /* server options - https://tools.ietf.org/html/rfc7231#section-4.3.7 */
|
|
||||||
+ else if (client->u.http.parser.method == HTTP_OPTIONS) {
|
|
||||||
+ if (length == 1 && *offset == '*') {
|
|
||||||
+ client->u.http.flags |= HTTP_FLAG_NO_BODY;
|
|
||||||
+ client->u.http.headers = dictCreate(&sdsOwnDictCallBacks, NULL);
|
|
||||||
+ } else {
|
|
||||||
+ sts = client->u.http.parser.status_code = HTTP_STATUS_BAD_REQUEST;
|
|
||||||
+ http_error(client, sts, "no handler for OPTIONS");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ /* server trace - https://tools.ietf.org/html/rfc7231#section-4.3.8 */
|
|
||||||
+ else if (client->u.http.parser.method == HTTP_TRACE) {
|
|
||||||
+ client->u.http.flags |= HTTP_FLAG_NO_BODY;
|
|
||||||
+ client->u.http.headers = dictCreate(&sdsOwnDictCallBacks, NULL);
|
|
||||||
+ }
|
|
||||||
+ /* nothing available to respond to this request - inform the client */
|
|
||||||
+ else {
|
|
||||||
sts = client->u.http.parser.status_code = HTTP_STATUS_BAD_REQUEST;
|
|
||||||
http_error(client, sts, "no handler for URL");
|
|
||||||
}
|
|
||||||
@@ -734,7 +765,7 @@
|
|
||||||
if (pmDebugOptions.http && pmDebugOptions.desperate)
|
|
||||||
printf("Body: %.*s\n(client=%p)\n", (int)length, offset, client);
|
|
||||||
|
|
||||||
- if (servlet->on_body)
|
|
||||||
+ if (servlet && servlet->on_body)
|
|
||||||
return servlet->on_body(client, offset, length);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -828,7 +859,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
client->u.http.privdata = NULL;
|
|
||||||
- if (servlet->on_headers)
|
|
||||||
+ if (servlet && servlet->on_headers)
|
|
||||||
sts = servlet->on_headers(client, client->u.http.headers);
|
|
||||||
|
|
||||||
/* HTTP Basic Auth for all servlets */
|
|
||||||
@@ -857,13 +888,31 @@
|
|
||||||
{
|
|
||||||
struct client *client = (struct client *)request->data;
|
|
||||||
struct servlet *servlet = client->u.http.servlet;
|
|
||||||
+ sds buffer;
|
|
||||||
+ int sts;
|
|
||||||
|
|
||||||
if (pmDebugOptions.http)
|
|
||||||
fprintf(stderr, "HTTP message complete (client=%p)\n", client);
|
|
||||||
|
|
||||||
- if (servlet && servlet->on_done)
|
|
||||||
- return servlet->on_done(client);
|
|
||||||
- return 0;
|
|
||||||
+ if (servlet) {
|
|
||||||
+ if (servlet->on_done)
|
|
||||||
+ return servlet->on_done(client);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ sts = HTTP_STATUS_OK;
|
|
||||||
+ if (client->u.http.parser.method == HTTP_OPTIONS) {
|
|
||||||
+ buffer = http_response_access(client, sts, HTTP_SERVER_OPTIONS);
|
|
||||||
+ client_write(client, buffer, NULL);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ if (client->u.http.parser.method == HTTP_TRACE) {
|
|
||||||
+ buffer = http_response_trace(client, sts);
|
|
||||||
+ client_write(client, buffer, NULL);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
diff -auNr pcp-5.1.1.orig/qa/1608 pcp-5.1.1/qa/1608
|
|
||||||
--- pcp-5.1.1.orig/qa/1608 1970-01-01 10:00:00.000000000 +1000
|
|
||||||
+++ pcp-5.1.1/qa/1608 2020-06-23 12:16:04.005557293 +1000
|
|
||||||
@@ -0,0 +1,58 @@
|
|
||||||
+#!/bin/sh
|
|
||||||
+# PCP QA Test No. 1608
|
|
||||||
+# Exercise a long URL handling in pmproxy.
|
|
||||||
+#
|
|
||||||
+# Copyright (c) 2020 Red Hat. All Rights Reserved.
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+seq=`basename $0`
|
|
||||||
+echo "QA output created by $seq"
|
|
||||||
+
|
|
||||||
+# get standard environment, filters and checks
|
|
||||||
+. ./common.product
|
|
||||||
+. ./common.filter
|
|
||||||
+. ./common.check
|
|
||||||
+
|
|
||||||
+_check_series
|
|
||||||
+which curl >/dev/null 2>&1 || _notrun "No curl binary installed"
|
|
||||||
+
|
|
||||||
+status=1 # failure is the default!
|
|
||||||
+$sudo rm -rf $tmp $tmp.* $seq.full
|
|
||||||
+trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
||||||
+
|
|
||||||
+pmproxy_was_running=false
|
|
||||||
+[ -f $PCP_RUN_DIR/pmproxy.pid ] && pmproxy_was_running=true
|
|
||||||
+echo "pmproxy_was_running=$pmproxy_was_running" >>$here/$seq.full
|
|
||||||
+
|
|
||||||
+_cleanup()
|
|
||||||
+{
|
|
||||||
+ if $pmproxy_was_running
|
|
||||||
+ then
|
|
||||||
+ echo "Restart pmproxy ..." >>$here/$seq.full
|
|
||||||
+ _service pmproxy restart >>$here/$seq.full 2>&1
|
|
||||||
+ _wait_for_pmproxy
|
|
||||||
+ else
|
|
||||||
+ echo "Stopping pmproxy ..." >>$here/$seq.full
|
|
||||||
+ _service pmproxy stop >>$here/$seq.full 2>&1
|
|
||||||
+ fi
|
|
||||||
+ $sudo rm -f $tmp.*
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+_webapi_failure_filter()
|
|
||||||
+{
|
|
||||||
+ _webapi_header_filter | \
|
|
||||||
+ sed \
|
|
||||||
+ -e 's/pmproxy.[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*/PMPROXY\/VERSION/g' \
|
|
||||||
+ #end
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# real QA test starts here
|
|
||||||
+_service pmproxy restart >/dev/null 2>&1
|
|
||||||
+
|
|
||||||
+url="http://localhost:44322/pmapi/context"
|
|
||||||
+aaa=`head -c 10000 < /dev/zero | tr '\0' '\141'`
|
|
||||||
+curl -isS -X OPTIONS "${url}?${aaa}" | _webapi_failure_filter
|
|
||||||
+
|
|
||||||
+# success, all done
|
|
||||||
+status=0
|
|
||||||
+exit
|
|
||||||
diff -auNr pcp-5.1.1.orig/qa/1608.out pcp-5.1.1/qa/1608.out
|
|
||||||
--- pcp-5.1.1.orig/qa/1608.out 1970-01-01 10:00:00.000000000 +1000
|
|
||||||
+++ pcp-5.1.1/qa/1608.out 2020-06-23 12:16:04.005557293 +1000
|
|
||||||
@@ -0,0 +1,16 @@
|
|
||||||
+QA output created by 1608
|
|
||||||
+
|
|
||||||
+</body>
|
|
||||||
+</html>
|
|
||||||
+<body>
|
|
||||||
+<h1>414 URI Too Long</h1>
|
|
||||||
+<head><title>414 URI Too Long</title></head>
|
|
||||||
+<html>
|
|
||||||
+<p><b>unknown servlet</b>: request URL too long</p><hr>
|
|
||||||
+<p><small><i>PMPROXY/VERSION</i></small></p>
|
|
||||||
+Access-Control-Allow-Headers: Accept, Accept-Language, Content-Language, Content-Type
|
|
||||||
+Access-Control-Allow-Origin: *
|
|
||||||
+Content-Length: SIZE
|
|
||||||
+Content-Type: text/html
|
|
||||||
+Date: DATE
|
|
||||||
+HTTP/1.1 414 URI Too Long
|
|
||||||
diff -auNr pcp-5.1.1.orig/qa/group pcp-5.1.1/qa/group
|
|
||||||
--- pcp-5.1.1.orig/qa/group 2020-06-23 12:15:21.335094106 +1000
|
|
||||||
+++ pcp-5.1.1/qa/group 2020-06-23 12:16:54.256102754 +1000
|
|
||||||
@@ -1717,6 +1717,7 @@
|
|
||||||
1600 pmseries pmcd pmproxy pmlogger local
|
|
||||||
1601 pmseries pmproxy local
|
|
||||||
1602 pmproxy local
|
|
||||||
+1608 pmproxy local
|
|
||||||
1622 selinux local
|
|
||||||
1623 libpcp_import collectl local
|
|
||||||
1644 pmda.perfevent local
|
|
||||||
diff -auNr pcp-5.1.1.orig/src/pmproxy/src/http.c pcp-5.1.1/src/pmproxy/src/http.c
|
|
||||||
--- pcp-5.1.1.orig/src/pmproxy/src/http.c 2020-06-23 12:15:21.364094421 +1000
|
|
||||||
+++ pcp-5.1.1/src/pmproxy/src/http.c 2020-06-23 12:16:04.008557325 +1000
|
|
||||||
@@ -21,7 +21,9 @@
|
|
||||||
static int chunked_transfer_size; /* pmproxy.chunksize, pagesize by default */
|
|
||||||
static int smallest_buffer_size = 128;
|
|
||||||
|
|
||||||
-#define MAX_PARAMS_SIZE 4096
|
|
||||||
+/* https://tools.ietf.org/html/rfc7230#section-3.1.1 */
|
|
||||||
+#define MAX_URL_SIZE 8192
|
|
||||||
+#define MAX_PARAMS_SIZE 8000
|
|
||||||
#define MAX_HEADERS_SIZE 128
|
|
||||||
|
|
||||||
static sds HEADER_ACCESS_CONTROL_REQUEST_HEADERS,
|
|
||||||
@@ -720,8 +722,13 @@
|
|
||||||
int sts;
|
|
||||||
|
|
||||||
http_client_release(client); /* new URL, clean slate */
|
|
||||||
+
|
|
||||||
+ if (length >= MAX_URL_SIZE) {
|
|
||||||
+ sts = client->u.http.parser.status_code = HTTP_STATUS_URI_TOO_LONG;
|
|
||||||
+ http_error(client, sts, "request URL too long");
|
|
||||||
+ }
|
|
||||||
/* pass to servlets handling each of our internal request endpoints */
|
|
||||||
- if ((servlet = servlet_lookup(client, offset, length)) != NULL) {
|
|
||||||
+ else if ((servlet = servlet_lookup(client, offset, length)) != NULL) {
|
|
||||||
client->u.http.servlet = servlet;
|
|
||||||
if ((sts = client->u.http.parser.status_code) != 0)
|
|
||||||
http_error(client, sts, "failed to process URL");
|
|
@ -1,273 +0,0 @@
|
|||||||
From 7d4327035fbda12c66d8fc5eb0ed4dcd8e5f0285 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ken McDonell <kenj@kenj.id.au>
|
|
||||||
Date: Mon, 20 Jul 2020 13:19:52 +1000
|
|
||||||
Subject: [PATCH] src/pmlogger: remove systemd path services
|
|
||||||
|
|
||||||
We're not going to use filesystem watchers for /etc/pcp/pmlogger/control*.
|
|
||||||
---
|
|
||||||
src/pmlogger/GNUmakefile | 8 +-------
|
|
||||||
src/pmlogger/pmlogger_check.path.in | 6 ------
|
|
||||||
2 files changed, 1 insertion(+), 13 deletions(-)
|
|
||||||
delete mode 100644 src/pmlogger/pmlogger_check.path.in
|
|
||||||
|
|
||||||
diff --git a/src/pmlogger/GNUmakefile b/src/pmlogger/GNUmakefile
|
|
||||||
index 4503993de..959141eb3 100644
|
|
||||||
--- a/src/pmlogger/GNUmakefile
|
|
||||||
+++ b/src/pmlogger/GNUmakefile
|
|
||||||
@@ -23,7 +23,7 @@ OTHERS = pmnewlog.sh control rc_pmlogger \
|
|
||||||
LDIRT = crontab crontab.docker crontab.daily_report pmlogger.service \
|
|
||||||
pmlogger_daily.service pmlogger_daily-poll.service \
|
|
||||||
pmlogger_daily_report.service pmlogger_daily_report-poll.service \
|
|
||||||
- pmlogger_check.service pmlogger_check.path
|
|
||||||
+ pmlogger_check.service
|
|
||||||
|
|
||||||
ifeq ($(TARGET_OS),linux)
|
|
||||||
CRONTAB_USER = $(PCP_USER)
|
|
||||||
@@ -64,7 +64,6 @@ ifeq ($(ENABLE_SYSTEMD),true)
|
|
||||||
$(INSTALL) -m 644 pmlogger_daily.service $(PCP_SYSTEMDUNIT_DIR)/pmlogger_daily.service
|
|
||||||
$(INSTALL) -m 644 pmlogger_daily-poll.timer $(PCP_SYSTEMDUNIT_DIR)/pmlogger_daily-poll.timer
|
|
||||||
$(INSTALL) -m 644 pmlogger_daily-poll.service $(PCP_SYSTEMDUNIT_DIR)/pmlogger_daily-poll.service
|
|
||||||
- $(INSTALL) -m 644 pmlogger_check.path $(PCP_SYSTEMDUNIT_DIR)/pmlogger_check.path
|
|
||||||
$(INSTALL) -m 644 pmlogger_check.timer $(PCP_SYSTEMDUNIT_DIR)/pmlogger_check.timer
|
|
||||||
$(INSTALL) -m 644 pmlogger_check.service $(PCP_SYSTEMDUNIT_DIR)/pmlogger_check.service
|
|
||||||
$(INSTALL) -m 644 pmlogger_daily_report.timer $(PCP_SYSTEMDUNIT_DIR)/pmlogger_daily_report.timer
|
|
||||||
@@ -130,11 +129,6 @@ pmlogger_check.service : pmlogger_check.service.in
|
|
||||||
-e 's;@PCP_USER@;'$(PCP_USER)';' \
|
|
||||||
# END
|
|
||||||
|
|
||||||
-pmlogger_check.path : pmlogger_check.path.in
|
|
||||||
- $(SED) <$< >$@ \
|
|
||||||
- -e 's;@PCP_PMLOGGERCONTROL_PATH@;'$(PCP_PMLOGGERCONTROL_PATH)';' \
|
|
||||||
- # END
|
|
||||||
-
|
|
||||||
pmlogger_daily_report.service : pmlogger_daily_report.service.in
|
|
||||||
$(SED) <$< >$@ \
|
|
||||||
-e 's;@CRONTAB_DAILY_REPORT_PATH@;'$(CRONTAB_DAILY_REPORT_PATH)';' \
|
|
||||||
diff --git a/src/pmlogger/pmlogger_check.path.in b/src/pmlogger/pmlogger_check.path.in
|
|
||||||
deleted file mode 100644
|
|
||||||
index 7575e046a..000000000
|
|
||||||
--- a/src/pmlogger/pmlogger_check.path.in
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,6 +0,0 @@
|
|
||||||
-[Path]
|
|
||||||
-PathChanged=@PCP_PMLOGGERCONTROL_PATH@
|
|
||||||
-PathChanged=@PCP_PMLOGGERCONTROL_PATH@.d
|
|
||||||
-
|
|
||||||
-[Install]
|
|
||||||
-RequiredBy=pmlogger.service
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
From 35c9843d2f27b8d1cdf62c00d68ce67fda4913e1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ken McDonell <kenj@kenj.id.au>
|
|
||||||
Date: Mon, 20 Jul 2020 13:22:51 +1000
|
|
||||||
Subject: [PATCH] src/pmie: remove systemd path services
|
|
||||||
|
|
||||||
We're not going to use filesystem watchers for /etc/pcp/pmie/control*
|
|
||||||
---
|
|
||||||
src/pmie/GNUmakefile | 10 ++--------
|
|
||||||
src/pmie/pmie_check.path.in | 6 ------
|
|
||||||
2 files changed, 2 insertions(+), 14 deletions(-)
|
|
||||||
delete mode 100644 src/pmie/pmie_check.path.in
|
|
||||||
|
|
||||||
diff --git a/src/pmie/GNUmakefile b/src/pmie/GNUmakefile
|
|
||||||
index fb600b38b..58dd3959a 100644
|
|
||||||
--- a/src/pmie/GNUmakefile
|
|
||||||
+++ b/src/pmie/GNUmakefile
|
|
||||||
@@ -19,7 +19,7 @@ include $(TOPDIR)/src/include/builddefs
|
|
||||||
SUBDIRS = src examples
|
|
||||||
OTHERS = control stomp rc_pmie pmie2col.sh pmie_check.sh pmie_daily.sh
|
|
||||||
LDIRT = crontab crontab.docker pmie.service pmie_daily.service \
|
|
||||||
- pmie_check.service pmie_check.path
|
|
||||||
+ pmie_check.service
|
|
||||||
|
|
||||||
ifeq ($(TARGET_OS),linux)
|
|
||||||
CRONTAB_USER = $(PCP_USER)
|
|
||||||
@@ -30,7 +30,7 @@ CRONTAB_PATH = $(PCP_SYSCONF_DIR)/pmie/crontab
|
|
||||||
endif
|
|
||||||
|
|
||||||
default:: crontab crontab.docker pmie.service pmie_daily.service \
|
|
||||||
- pmie_check.service pmie_check.path
|
|
||||||
+ pmie_check.service
|
|
||||||
|
|
||||||
default:: $(SUBDIRS)
|
|
||||||
$(SUBDIRS_MAKERULE)
|
|
||||||
@@ -54,7 +54,6 @@ ifeq ($(ENABLE_SYSTEMD),true)
|
|
||||||
$(INSTALL) -m 644 pmie.service $(PCP_SYSTEMDUNIT_DIR)/pmie.service
|
|
||||||
$(INSTALL) -m 644 pmie_daily.timer $(PCP_SYSTEMDUNIT_DIR)/pmie_daily.timer
|
|
||||||
$(INSTALL) -m 644 pmie_daily.service $(PCP_SYSTEMDUNIT_DIR)/pmie_daily.service
|
|
||||||
- $(INSTALL) -m 644 pmie_check.path $(PCP_SYSTEMDUNIT_DIR)/pmie_check.path
|
|
||||||
$(INSTALL) -m 644 pmie_check.timer $(PCP_SYSTEMDUNIT_DIR)/pmie_check.timer
|
|
||||||
$(INSTALL) -m 644 pmie_check.service $(PCP_SYSTEMDUNIT_DIR)/pmie_check.service
|
|
||||||
$(INSTALL) -m 644 pmie_timers.sysconfig $(PCP_SYSCONFIG_DIR)/pmie_timers
|
|
||||||
@@ -92,11 +91,6 @@ pmie_check.service : pmie_check.service.in
|
|
||||||
-e 's;@PCP_USER@;'$(PCP_USER)';' \
|
|
||||||
# END
|
|
||||||
|
|
||||||
-pmie_check.path : pmie_check.path.in
|
|
||||||
- $(SED) <$< >$@ \
|
|
||||||
- -e 's;@PCP_PMIECONTROL_PATH@;'$(PCP_PMIECONTROL_PATH)';' \
|
|
||||||
- # END
|
|
||||||
-
|
|
||||||
pmie_daily.service : pmie_daily.service.in
|
|
||||||
$(SED) <$< >$@ \
|
|
||||||
-e 's;@CRONTAB_PATH@;'$(CRONTAB_PATH)';' \
|
|
||||||
diff --git a/src/pmie/pmie_check.path.in b/src/pmie/pmie_check.path.in
|
|
||||||
deleted file mode 100644
|
|
||||||
index 42d8ab18e..000000000
|
|
||||||
--- a/src/pmie/pmie_check.path.in
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,6 +0,0 @@
|
|
||||||
-[Path]
|
|
||||||
-PathChanged=@PCP_PMIECONTROL_PATH@
|
|
||||||
-PathChanged=@PCP_PMIECONTROL_PATH@.d
|
|
||||||
-
|
|
||||||
-[Install]
|
|
||||||
-RequiredBy=pmie.service
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
From c12c82b49aec852acd18d8c02386e25847d62fb1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ken McDonell <kenj@kenj.id.au>
|
|
||||||
Date: Mon, 20 Jul 2020 13:37:23 +1000
|
|
||||||
Subject: [PATCH] src/pmfind: remove systemd path services
|
|
||||||
|
|
||||||
We're not going to use filesystem watchers for /etc/pcp/pmfind
|
|
||||||
---
|
|
||||||
src/pmfind/GNUmakefile | 8 +-------
|
|
||||||
src/pmfind/pmfind.path.in | 5 -----
|
|
||||||
2 files changed, 1 insertion(+), 12 deletions(-)
|
|
||||||
delete mode 100644 src/pmfind/pmfind.path.in
|
|
||||||
|
|
||||||
diff --git a/src/pmfind/GNUmakefile b/src/pmfind/GNUmakefile
|
|
||||||
index a061366f2..7271b4869 100644
|
|
||||||
--- a/src/pmfind/GNUmakefile
|
|
||||||
+++ b/src/pmfind/GNUmakefile
|
|
||||||
@@ -36,7 +36,7 @@ CRONTAB_USER =
|
|
||||||
CRONTAB_PATH = $(PCP_SYSCONF_DIR)/pmfind/crontab
|
|
||||||
endif
|
|
||||||
|
|
||||||
-default : $(CMDTARGET) crontab pmfind.path pmfind.service
|
|
||||||
+default : $(CMDTARGET) crontab pmfind.service
|
|
||||||
|
|
||||||
include $(BUILDRULES)
|
|
||||||
|
|
||||||
@@ -49,7 +49,6 @@ install : default
|
|
||||||
ifeq ($(ENABLE_SYSTEMD),true)
|
|
||||||
$(INSTALL) -m 644 pmfind.service $(PCP_SYSTEMDUNIT_DIR)/pmfind.service
|
|
||||||
$(INSTALL) -m 644 pmfind.timer $(PCP_SYSTEMDUNIT_DIR)/pmfind.timer
|
|
||||||
- $(INSTALL) -m 644 pmfind.path $(PCP_SYSTEMDUNIT_DIR)/pmfind.path
|
|
||||||
else
|
|
||||||
$(INSTALL) -m 755 -d `dirname $(CRONTAB_PATH)`
|
|
||||||
$(INSTALL) -m 644 crontab $(CRONTAB_PATH)
|
|
||||||
@@ -68,11 +67,6 @@ pmfind.service : pmfind.service.in
|
|
||||||
-e 's;@PCP_VAR_DIR@;'$(PCP_VAR_DIR)';' \
|
|
||||||
# END
|
|
||||||
|
|
||||||
-pmfind.path : pmfind.path.in
|
|
||||||
- $(SED) <$< >$@ \
|
|
||||||
- -e 's;@PCP_SYSCONF_DIR@;'$(PCP_SYSCONF_DIR)';' \
|
|
||||||
- # END
|
|
||||||
-
|
|
||||||
crontab: crontab.in
|
|
||||||
$(SED) -e 's;@user@;'$(CRONTAB_USER)';' -e 's;@path@;'$(PCP_BINADM_DIR)';g' $< > $@
|
|
||||||
|
|
||||||
diff --git a/src/pmfind/pmfind.path.in b/src/pmfind/pmfind.path.in
|
|
||||||
deleted file mode 100644
|
|
||||||
index bd49398fb..000000000
|
|
||||||
--- a/src/pmfind/pmfind.path.in
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,5 +0,0 @@
|
|
||||||
-[Path]
|
|
||||||
-PathChanged=@PCP_SYSCONF_DIR@/pmfind
|
|
||||||
-
|
|
||||||
-[Install]
|
|
||||||
-RequiredBy=pmfind.service
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
From 58eea08fb41ab91a71851fe0f38fc690fa7554a2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ken McDonell <kenj@kenj.id.au>
|
|
||||||
Date: Mon, 20 Jul 2020 14:04:54 +1000
|
|
||||||
Subject: [PATCH] src/{pmie,pmlogger,pmfind}: need to remove "path" from
|
|
||||||
associated service files as well
|
|
||||||
|
|
||||||
---
|
|
||||||
src/pmfind/pmfind.service.in | 2 +-
|
|
||||||
src/pmie/pmie.service.in | 4 ++--
|
|
||||||
src/pmlogger/pmlogger.service.in | 4 ++--
|
|
||||||
3 files changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/pmfind/pmfind.service.in b/src/pmfind/pmfind.service.in
|
|
||||||
index f6ee963b7..6e4b6b6d2 100644
|
|
||||||
--- a/src/pmfind/pmfind.service.in
|
|
||||||
+++ b/src/pmfind/pmfind.service.in
|
|
||||||
@@ -3,7 +3,7 @@ Description=Discover remote PCP services for analysis
|
|
||||||
Documentation=man:pmfind(1)
|
|
||||||
After=network-online.target pmcd.service
|
|
||||||
After=pmie_check.timer pmlogger_check.timer
|
|
||||||
-BindsTo=pmfind.timer pmfind.path
|
|
||||||
+BindsTo=pmfind.timer
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
diff --git a/src/pmie/pmie.service.in b/src/pmie/pmie.service.in
|
|
||||||
index 54523bfec..020408fae 100644
|
|
||||||
--- a/src/pmie/pmie.service.in
|
|
||||||
+++ b/src/pmie/pmie.service.in
|
|
||||||
@@ -2,8 +2,8 @@
|
|
||||||
Description=Performance Metrics Inference Engine
|
|
||||||
Documentation=man:pmie(1)
|
|
||||||
After=network-online.target pmcd.service
|
|
||||||
-After=pmie_check.timer pmie_check.path pmie_daily.timer
|
|
||||||
-BindsTo=pmie_check.timer pmie_check.path pmie_daily.timer
|
|
||||||
+After=pmie_check.timer pmie_daily.timer
|
|
||||||
+BindsTo=pmie_check.timer pmie_daily.timer
|
|
||||||
Wants=pmcd.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
diff --git a/src/pmlogger/pmlogger.service.in b/src/pmlogger/pmlogger.service.in
|
|
||||||
index 2467e9933..9dad692d6 100644
|
|
||||||
--- a/src/pmlogger/pmlogger.service.in
|
|
||||||
+++ b/src/pmlogger/pmlogger.service.in
|
|
||||||
@@ -2,8 +2,8 @@
|
|
||||||
Description=Performance Metrics Archive Logger
|
|
||||||
Documentation=man:pmlogger(1)
|
|
||||||
After=network-online.target pmcd.service
|
|
||||||
-Before=pmlogger_check.timer pmlogger_check.path pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
-BindsTo=pmlogger_check.timer pmlogger_check.path pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
+Before=pmlogger_check.timer pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
+BindsTo=pmlogger_check.timer pmlogger_daily.timer pmlogger_daily-poll.timer
|
|
||||||
Wants=pmcd.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
From 739395724c29115e6bf6eb511e48086da48338ab Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nathan Scott <nathans@redhat.com>
|
|
||||||
Date: Wed, 29 Jul 2020 18:32:04 +1000
|
|
||||||
Subject: [PATCH] qa: drop systemd .path files from common remove_job_scheduler
|
|
||||||
|
|
||||||
---
|
|
||||||
qa/common.check | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/qa/common.check b/qa/common.check
|
|
||||||
index e17dc1352..de8a9149f 100644
|
|
||||||
--- a/qa/common.check
|
|
||||||
+++ b/qa/common.check
|
|
||||||
@@ -1616,9 +1616,8 @@ _remove_job_scheduler()
|
|
||||||
|
|
||||||
if systemctl cat pmie_daily.timer >/dev/null 2>&1; then
|
|
||||||
for i in pmie_daily.timer pmie_check.timer pmlogger_daily.timer \
|
|
||||||
- pmlogger_daily-poll.timer pmlogger_check.timer \
|
|
||||||
pmlogger_daily_report.timer pmlogger_daily_report-poll.timer \
|
|
||||||
- pmlogger_check.path pmie_check.path ; do
|
|
||||||
+ pmlogger_daily-poll.timer pmlogger_check.timer ; do
|
|
||||||
$rc_sudo systemctl is-active "$i" > /dev/null || continue
|
|
||||||
$rc_sudo systemctl stop $i >/dev/null
|
|
||||||
echo "$i" >> $rc_systemd_state
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
205
SOURCES/redhat-bugzilla-1926756.patch
Normal file
205
SOURCES/redhat-bugzilla-1926756.patch
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
commit d7679bd7cbb94692250a450bccf9f01cb982467f
|
||||||
|
Author: Mark Goodwin <mgoodwin@redhat.com>
|
||||||
|
Date: Fri Feb 12 10:12:59 2021 +1100
|
||||||
|
|
||||||
|
selinux, qa: allow pmcd to use netlink_tcpdiag_socket for sockets PMDA
|
||||||
|
|
||||||
|
Add SELinux rules allowing pmcd to create, setopt, bind, getattr and
|
||||||
|
nlmsg_read to netlink tcpdiag sockets. Needed by pmdasockets.
|
||||||
|
|
||||||
|
Update qa/1622 and 917.
|
||||||
|
|
||||||
|
Resolves: RHBZ#1926756
|
||||||
|
|
||||||
|
diff --git a/qa/1622 b/qa/1622
|
||||||
|
index 83f260d6d..f62b5f89a 100755
|
||||||
|
--- a/qa/1622
|
||||||
|
+++ b/qa/1622
|
||||||
|
@@ -216,6 +216,11 @@ type=AVC msg=audit(XXX.62): avc: denied { getattr open read } for pid=YYYY co
|
||||||
|
type=AVC msg=audit(XXX.63): avc: denied { connectto } for pid=YYYY comm="pmdaX" name="/" dev="tracefs" ino=1 scontext=system_u:system_r:pcp_pmlogger_t:s0 tcontext=system_u:object_r:saslauthd_t:s0 tclass=unix_stream_socket permissive=0
|
||||||
|
type=AVC msg=audit(XXX.66): avc: denied { sys_rawio } for pid=YYYY comm="pmdaX" name="/" dev="tracefs" ino=1 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:pcp_pmcd_t:s0 tclass=capability permissive=0
|
||||||
|
type=AVC msg=audit(XXX.67): avc: denied { module_request } for pid=YYYY comm="pmdalinux" kmod="netdev-tun0" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=system permissive=0
|
||||||
|
+type=AVC msg=audit(XXX.85): avc: denied { create } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+type=AVC msg=audit(XXX.86): avc: denied { setopt } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+type=AVC msg=audit(XXX.87): avc: denied { bind } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+type=AVC msg=audit(XXX.88): avc: denied { getattr } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+type=AVC msg=audit(XXX.89): avc: denied { nlmsg_read } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Silence is golden ... all AVC's are allowed by active policy"
|
||||||
|
diff --git a/qa/917.out.in b/qa/917.out.in
|
||||||
|
index 69c3b2d12..ddec57f9c 100644
|
||||||
|
--- a/qa/917.out.in
|
||||||
|
+++ b/qa/917.out.in
|
||||||
|
@@ -125,6 +125,7 @@ Checking policies.
|
||||||
|
allow [pcp_pmcd_t] [drbd_exec_t] : [file] { execute execute_no_trans };
|
||||||
|
allow [pcp_pmcd_t] self : [netlink_generic_socket] { bind create getattr setopt write read };
|
||||||
|
allow [pcp_pmcd_t] [sbd_exec_t] : [file] { execute execute_no_trans };
|
||||||
|
+ allow [pcp_pmcd_t] self : [netlink_tcpdiag_socket] { bind create getattr nlmsg_read setopt };
|
||||||
|
allow [pcp_pmcd_t] [etc_t] : [dir] { open read search getattr lock ioctl };
|
||||||
|
allow [pcp_pmcd_t] [shadow_t] : [file] { getattr ioctl lock open read };
|
||||||
|
allow [pcp_pmie_t] [etc_t] : [dir] { open read search getattr lock ioctl };
|
||||||
|
diff --git a/src/selinux/GNUlocaldefs b/src/selinux/GNUlocaldefs
|
||||||
|
index 30b67d907..cbfa34c14 100644
|
||||||
|
--- a/src/selinux/GNUlocaldefs
|
||||||
|
+++ b/src/selinux/GNUlocaldefs
|
||||||
|
@@ -118,5 +118,7 @@ endif
|
||||||
|
|
||||||
|
ifeq "$(PCP_SELINUX_NETLINK_GENERIC_SOCKET_CLASS)" "true"
|
||||||
|
PCP_NETLINK_GENERIC_SOCKET_CLASS="class netlink_generic_socket { bind create getattr setopt write read };"
|
||||||
|
+PCP_NETLINK_TCPDIAG_SOCKET_CLASS="class netlink_tcpdiag_socket { bind create getattr nlmsg_read setopt };"
|
||||||
|
PCP_NETLINK_GENERIC_SOCKET_RULE="allow pcp_pmcd_t self:netlink_generic_socket { bind create getattr setopt write read };"
|
||||||
|
+PCP_NETLINK_TCPDIAG_SOCKET_RULE="allow pcp_pmcd_t self:netlink_tcpdiag_socket { bind create getattr nlmsg_read setopt };"
|
||||||
|
endif
|
||||||
|
diff --git a/src/selinux/GNUmakefile b/src/selinux/GNUmakefile
|
||||||
|
index e16859d7e..d04644fcb 100644
|
||||||
|
--- a/src/selinux/GNUmakefile
|
||||||
|
+++ b/src/selinux/GNUmakefile
|
||||||
|
@@ -80,6 +80,8 @@ $(IAM).te: $(IAM).te.in
|
||||||
|
-e 's+@PCP_ICMP_SOCKET_RULE@+'$(PCP_ICMP_SOCKET_RULE)'+' \
|
||||||
|
-e 's+@PCP_NETLINK_GENERIC_SOCKET_CLASS@+'$(PCP_NETLINK_GENERIC_SOCKET_CLASS)'+' \
|
||||||
|
-e 's+@PCP_NETLINK_GENERIC_SOCKET_RULE@+'$(PCP_NETLINK_GENERIC_SOCKET_RULE)'+' \
|
||||||
|
+ -e 's+@PCP_NETLINK_TCPDIAG_SOCKET_CLASS@+'$(PCP_NETLINK_TCPDIAG_SOCKET_CLASS)'+' \
|
||||||
|
+ -e 's+@PCP_NETLINK_TCPDIAG_SOCKET_RULE@+'$(PCP_NETLINK_TCPDIAG_SOCKET_RULE)'+' \
|
||||||
|
-e 's+@PCP_SELINUX_MACRO_RULE@+'$(PCP_SELINUX_MACRO_RULE)'+' \
|
||||||
|
-e 's+@PACKAGE_VERSION@+'$(PACKAGE_VERSION)'+' \
|
||||||
|
|
||||||
|
diff --git a/src/selinux/pcpupstream.te.in b/src/selinux/pcpupstream.te.in
|
||||||
|
index 36a043be1..d935aee36 100644
|
||||||
|
--- a/src/selinux/pcpupstream.te.in
|
||||||
|
+++ b/src/selinux/pcpupstream.te.in
|
||||||
|
@@ -90,6 +90,7 @@ require {
|
||||||
|
@PCP_BPF_CLASS@
|
||||||
|
class system { module_request };
|
||||||
|
@PCP_NETLINK_GENERIC_SOCKET_CLASS@
|
||||||
|
+ @PCP_NETLINK_TCPDIAG_SOCKET_CLASS@
|
||||||
|
}
|
||||||
|
|
||||||
|
#============= init_t ==============
|
||||||
|
@@ -423,3 +424,11 @@ allow pcp_pmcd_t drbd_exec_t:file { execute execute_no_trans };
|
||||||
|
# pmda-hacluster requirements for checking sbd
|
||||||
|
# type=AVC msg=audit(XXX.81): avc: denied { execute_no_trans } for pid=421434 comm="sh" path="/usr/sbin/sbd" dev="vda1" ino=1050019 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:sbd_exec_t:s0 tclass=file permissive=1
|
||||||
|
@PCP_SBD_EXEC_RULE@
|
||||||
|
+
|
||||||
|
+#=========== pmda-sockets ============
|
||||||
|
+# type=AVC msg=audit(XXX.85): avc: denied { create } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+# type=AVC msg=audit(XXX.86): avc: denied { setopt } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+# type=AVC msg=audit(XXX.87): avc: denied { bind } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+# type=AVC msg=audit(XXX.88): avc: denied { getattr } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+# type=AVC msg=audit(XXX.89): avc: denied { nlmsg_read } for pid=YYYY comm="ss" scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:system_r:pcp_pmcd_t:s0 tclass=netlink_tcpdiag_socket permissive=1
|
||||||
|
+@PCP_NETLINK_TCPDIAG_SOCKET_RULE@
|
||||||
|
|
||||||
|
commit a49772607d80b25b2ae4b8764be709bb27d7e16f
|
||||||
|
Author: Mark Goodwin <mgoodwin@redhat.com>
|
||||||
|
Date: Fri Feb 12 10:09:23 2021 +1100
|
||||||
|
|
||||||
|
pmdasockets: minor changes to Install and Remove, add -U username
|
||||||
|
|
||||||
|
Specify pmns_name in Install and Remove scripts since the pmda name
|
||||||
|
differs to the namespace. Add -U username for optional use when run
|
||||||
|
as a daemon.
|
||||||
|
|
||||||
|
diff --git a/src/pmdas/linux_sockets/GNUmakefile b/src/pmdas/linux_sockets/GNUmakefile
|
||||||
|
index 34897f2e9..a32987ef7 100644
|
||||||
|
--- a/src/pmdas/linux_sockets/GNUmakefile
|
||||||
|
+++ b/src/pmdas/linux_sockets/GNUmakefile
|
||||||
|
@@ -31,7 +31,7 @@ HFILES = indom.h cluster.h ss_stats.h
|
||||||
|
LLDLIBS = $(PCP_PMDALIB)
|
||||||
|
LCFLAGS = $(INVISIBILITY)
|
||||||
|
|
||||||
|
-SCRIPTS = Install Remove
|
||||||
|
+SCRIPTS = Install Remove Upgrade
|
||||||
|
VERSION_SCRIPT = exports
|
||||||
|
LDIRT = domain.h $(VERSION_SCRIPT) $(IAM).log
|
||||||
|
|
||||||
|
diff --git a/src/pmdas/linux_sockets/Install b/src/pmdas/linux_sockets/Install
|
||||||
|
index 4bc934c96..28d7c7f9e 100755
|
||||||
|
--- a/src/pmdas/linux_sockets/Install
|
||||||
|
+++ b/src/pmdas/linux_sockets/Install
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-#! /bin/sh
|
||||||
|
+#!/usr/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2021 Red Hat.
|
||||||
|
#
|
||||||
|
@@ -25,6 +25,8 @@ dso_opt=true
|
||||||
|
pipe_opt=false
|
||||||
|
daemon_opt=false
|
||||||
|
|
||||||
|
+pmns_name=network.persocket # differs to PMDA name
|
||||||
|
+
|
||||||
|
which ss >/dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
diff --git a/src/pmdas/linux_sockets/Remove b/src/pmdas/linux_sockets/Remove
|
||||||
|
index 26edc85aa..3fee6a0e6 100755
|
||||||
|
--- a/src/pmdas/linux_sockets/Remove
|
||||||
|
+++ b/src/pmdas/linux_sockets/Remove
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-#! /bin/sh
|
||||||
|
+#!/usr/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2021 Red Hat.
|
||||||
|
#
|
||||||
|
@@ -19,6 +19,7 @@
|
||||||
|
. $PCP_SHARE_DIR/lib/pmdaproc.sh
|
||||||
|
|
||||||
|
iam=sockets
|
||||||
|
+pmns_name=network.persocket # differs to PMDA name
|
||||||
|
|
||||||
|
pmdaSetup
|
||||||
|
pmdaRemove
|
||||||
|
diff --git a/src/pmdas/linux_sockets/pmda.c b/src/pmdas/linux_sockets/pmda.c
|
||||||
|
index 9bca5d9d0..fab4be290 100644
|
||||||
|
--- a/src/pmdas/linux_sockets/pmda.c
|
||||||
|
+++ b/src/pmdas/linux_sockets/pmda.c
|
||||||
|
@@ -23,6 +23,7 @@
|
||||||
|
#include "ss_stats.h"
|
||||||
|
|
||||||
|
static int _isDSO = 1; /* for local contexts */
|
||||||
|
+static char *username;
|
||||||
|
|
||||||
|
/* metrics supported in this PMDA - see metrictab.c */
|
||||||
|
extern pmdaMetric metrictable[];
|
||||||
|
@@ -200,6 +201,8 @@ sockets_init(pmdaInterface *dp)
|
||||||
|
pmGetConfig("PCP_PMDAS_DIR"), sep, sep);
|
||||||
|
pmdaDSO(dp, PMDA_INTERFACE_7, "SOCKETS DSO", helppath);
|
||||||
|
}
|
||||||
|
+ else
|
||||||
|
+ pmSetProcessIdentity(username);
|
||||||
|
|
||||||
|
if (dp->status != 0)
|
||||||
|
return;
|
||||||
|
@@ -227,12 +230,13 @@ static pmLongOptions longopts[] = {
|
||||||
|
PMOPT_DEBUG,
|
||||||
|
PMDAOPT_DOMAIN,
|
||||||
|
PMDAOPT_LOGFILE,
|
||||||
|
+ PMDAOPT_USERNAME,
|
||||||
|
PMOPT_HELP,
|
||||||
|
PMDA_OPTIONS_END
|
||||||
|
};
|
||||||
|
|
||||||
|
static pmdaOptions opts = {
|
||||||
|
- .short_options = "D:d:l:?",
|
||||||
|
+ .short_options = "D:d:l:U:?",
|
||||||
|
.long_options = longopts,
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -248,6 +252,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
|
_isDSO = 0;
|
||||||
|
pmSetProgname(argv[0]);
|
||||||
|
+ pmGetUsername(&username);
|
||||||
|
pmsprintf(helppath, sizeof(helppath), "%s%c" "sockets" "%c" "help",
|
||||||
|
pmGetConfig("PCP_PMDAS_DIR"), sep, sep);
|
||||||
|
pmdaDaemon(&dispatch, PMDA_INTERFACE_7, pmGetProgname(), SOCKETS, "sockets.log", helppath);
|
||||||
|
@@ -257,6 +262,8 @@ main(int argc, char **argv)
|
||||||
|
pmdaUsageMessage(&opts);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
+ if (opts.username)
|
||||||
|
+ username = opts.username;
|
||||||
|
|
||||||
|
pmdaOpenLog(&dispatch);
|
||||||
|
sockets_init(&dispatch);
|
||||||
|
|
24
SOURCES/redhat-bugzilla-1930284.patch
Normal file
24
SOURCES/redhat-bugzilla-1930284.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Revert upstream PCP commit e01ab96c813fa31e685ac864031d145f63162088
|
||||||
|
|
||||||
|
diff -Naurp pcp-5.2.5.orig/src/pmie/pmie.service.in pcp-5.2.5/src/pmie/pmie.service.in
|
||||||
|
--- pcp-5.2.5.orig/src/pmie/pmie.service.in 2021-02-03 09:58:14.000000000 +1100
|
||||||
|
+++ pcp-5.2.5/src/pmie/pmie.service.in 2021-02-19 10:52:20.786419561 +1100
|
||||||
|
@@ -4,6 +4,7 @@ Documentation=man:pmie(1)
|
||||||
|
After=network-online.target pmcd.service
|
||||||
|
Before=pmie_check.timer pmie_daily.timer
|
||||||
|
BindsTo=pmie_check.timer pmie_daily.timer
|
||||||
|
+Wants=pmcd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
diff -Naurp pcp-5.2.5.orig/src/pmlogger/pmlogger.service.in pcp-5.2.5/src/pmlogger/pmlogger.service.in
|
||||||
|
--- pcp-5.2.5.orig/src/pmlogger/pmlogger.service.in 2021-02-03 09:58:14.000000000 +1100
|
||||||
|
+++ pcp-5.2.5/src/pmlogger/pmlogger.service.in 2021-02-19 10:52:36.111160100 +1100
|
||||||
|
@@ -4,6 +4,7 @@ Documentation=man:pmlogger(1)
|
||||||
|
After=network-online.target pmcd.service
|
||||||
|
Before=pmlogger_check.timer pmlogger_daily.timer pmlogger_daily-poll.timer
|
||||||
|
BindsTo=pmlogger_check.timer pmlogger_daily.timer pmlogger_daily-poll.timer
|
||||||
|
+Wants=pmcd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
568
SPECS/pcp.spec
568
SPECS/pcp.spec
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user