From michele@acksyn.org Thu May 1 15:03:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0B6087F55 for ; Thu, 1 May 2014 15:03:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id E57768F8052 for ; Thu, 1 May 2014 13:03:50 -0700 (PDT) X-ASG-Debug-ID: 1398974625-04cb6c1fcccdf00001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id gJEeD1MLsdwAHs6J for ; Thu, 01 May 2014 13:03:46 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id DA2D5261A8; Thu, 1 May 2014 16:03:44 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1398974623; bh=svuwDYKZbeBeAcX2SYwx1uKBrsKrTNsxMeCLgO/Qfv8=; b=Ml+tRpkFzaut QYHdPE1tOSTm9b0e0T7rSte05kEsXQH05vWSV1OvrDQ1MS2dV+r0rI48mcy0HRI/ +/S+Kq32aVNkUhji5y0wkhIWt+cUbUEBekteikWg4M00inNArfSZGiblB4h7azHO LayxYI2F+dAeZsHZkfY+8aAsqgiAYR0= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id DPhqohl9Zxct; Thu, 1 May 2014 16:03:43 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id BC17024D97; Thu, 1 May 2014 16:03:42 -0400 (EDT) Date: Thu, 1 May 2014 21:03:41 +0100 From: Michele Baldessari To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: [pcp] sosreport and pcp Message-ID: <20140501200341.GA23705@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53601960.5000503@internode.on.net> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1398974625 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-BRTS-Evidence: acksyn.org X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5441 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature On Wed, Apr 30, 2014 at 07:28:00AM +1000, Ken McDonell wrote: > On 30/04/14 05:28, Frank Ch. Eigler wrote: > > > >Hi, Michele - > > > >michele wrote: > > > >>[...] > >>I am in the process of adding support for PCP in sosreport[1]. [...] > >>/var/log/pcp, /var/lib/pcp/config, /etc/pcp, > >>/etc/pcp.conf, /etc/pcp.env, /etc/pcp.sh > > > >Note that /etc/pcp.conf is an input to .env / .sh; the latter are just > >non-adustable shell scripts. The variables set inside /etc/pcp.conf > >can redirect the location of many other bits. For example, instead of > >hardcoding the /var/log/pcp directory name, sosreport -might- consider > >getting the PCP_LOG_DIR value out of /etc/pcp.conf. > > Further to Frank's suggestions ... > > 1. /etc/pcp.env is not that useful to collect > 2. use /etc/pcp.conf (or source /etc/pcp.env) in your collector script to > drive the inventory of collection artifacts, e.g. use $PCP_SYSCONF_DIR > instead of /etc/pcp and use $PCP_LOG_DIR instead of /var/log/pcp and use > $PCP_VAR_DIR/config instead of /var/lib/pcp/config > 3. also of value would be the contents of the $PCP_VAR_DIR/pmns directory > 4. /etc/pcp.sh is probably not useful in this context > 5. if you're interested in current state, capturing the output from the > pcp(1) command would be useful > 6. in $PCP_LOG_DIR, always collect the contents of the pmcd subdirectory and > the NOTICES* files > > > > >>[...] I'd imagine that extra carefulness needs to be taken for > >>/var/log/pcp in order to avoid collecting stuff (logger data?) that > >>is bigger than X unless explicitely asked for. I assume they can > >>grow moderately big, although I don't have any real-world data on > >>that. > > > >The bulk archives (*.[0-9]*, .meta, .index files) certainly grow big: > >10-20 MB per day per host, kept by default for 14 days. It can blow > >up multiplicatively for longer-than-default or multiple-host > >logging. OTOH, the files are highly (90%+) compressible, and provide > >a good detailed performance overview of the host(s). > > If you're able to able to use heuristics to refine the selection here (there > are PCP archives below the $PCP_LOG_DIR/pmlogger and $PCP_LOG_DIR/pmmgr > directories), ... > > a. pick all the *.log files > b. restrict the subdirectories to names that match hostname(1) (the others > are remote machines, and less useful for sosreport I presume) > c. there is basically a currently being written archive and then archives > for the last N days ... the current and yesterday is probably most useful if > space becomes an issue (name matches on a pattern like *DDDDMMYY* will work, > pmdate -1d '%Y%m%d' is helpful here to get yesterday's date pattern, else > used find ... -mtime -1) > > If you need someone to review / check a collection or exercise your changes > just let us know. Hi Ken, if you have some spare time to check it here are the rpms: - EL7 - http://acksyn.org/files/rpms/sosreport/pcp/el7/ - F20 - http://acksyn.org/files/rpms/sosreport/pcp/f20/ An example RHEL7 sosreport: http://acksyn.org/files/rpms/sosreport/pcp/el7/sosreport-rhel7-20140501215220.tar.xz Code is here: https://github.com/mbaldessari/sosreport/tree/pcp-plugin I've tested it a bit here and most bits seem in place. Unless I hear major screaming, I'll ping Bryn about it in the next days. Thanks again and regards, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From fche@redhat.com Thu May 1 15:56:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E9CA87F55 for ; Thu, 1 May 2014 15:56:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B98D7304062 for ; Thu, 1 May 2014 13:56:23 -0700 (PDT) X-ASG-Debug-ID: 1398977782-04bdf02b8c21ccc0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id brYb8Ik6mfxFM5bB for ; Thu, 01 May 2014 13:56:22 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s41Ku6M2007764 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 1 May 2014 16:56:06 -0400 Received: from fche.csb (vpn-48-176.rdu2.redhat.com [10.10.48.176]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s41Ku5sZ005968; Thu, 1 May 2014 16:56:06 -0400 Received: by fche.csb (Postfix, from userid 2569) id 5437D581C7; Thu, 1 May 2014 16:56:05 -0400 (EDT) To: Michele Baldessari Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> X-ASG-Orig-Subj: Re: sosreport and pcp From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 01 May 2014 16:56:05 -0400 In-Reply-To: <20140501200341.GA23705@marquez.int.rhx> (Michele Baldessari's message of "Thu, 1 May 2014 21:03:41 +0100") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1398977782 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Michele - > [...] > Code is here: > https://github.com/mbaldessari/sosreport/tree/pcp-plugin More specifically here: https://github.com/mbaldessari/sosreport/blob/pcp-plugin/sos/plugins/pcp.py Looks good. Unless I misread, it looks like it adds only the archives and some of the named files from kenj's list. It'd be nice if the script also added more general wildcardy patterns such as: self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*.log*')) self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*/*.log*')) self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*/config*')) to catch as many error-log / generated-config files as possible. These are small and useful for diagnostics. - FChE From michele@acksyn.org Thu May 1 17:00:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1025F7F55 for ; Thu, 1 May 2014 17:00:34 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D8F568F8035 for ; Thu, 1 May 2014 15:00:33 -0700 (PDT) X-ASG-Debug-ID: 1398981628-04bdf02b8d2209a0001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id 58UbqVCe4i9U34v4 for ; Thu, 01 May 2014 15:00:28 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id E88C1261A8; Thu, 1 May 2014 18:00:26 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1398981626; bh=f8z/qaYIf2WaAII8kLI/22D/zt3ck6tXunnlD8qBanE=; b=YJIW8FsfRtib Z3merHvNkbWrYEv7GbSsO3MnckLuOA0zCB1w5KzIIIson8cAQE2KBbatVaTr80Jy FiZWJ9fxhctfhmALN9pwRt/Xa61eAomLA1IgIjtuQRiHzLRBYj9CBEQXTvcPge2P UP6WetJO8NfBE2wDCLShPxrzk1Oo4wI= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 5JCK7nv9u3l8; Thu, 1 May 2014 18:00:26 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id E86FD248A3; Thu, 1 May 2014 18:00:25 -0400 (EDT) Date: Thu, 1 May 2014 23:00:25 +0100 From: Michele Baldessari To: "Frank Ch. Eigler" Cc: Ken McDonell , pcp@oss.sgi.com Subject: Re: sosreport and pcp Message-ID: <20140501220025.GB23705@marquez.int.rhx> X-ASG-Orig-Subj: Re: sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1398981628 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Frank, On Thu, May 01, 2014 at 04:56:05PM -0400, Frank Ch. Eigler wrote: > > [...] > > Code is here: > > https://github.com/mbaldessari/sosreport/tree/pcp-plugin > > More specifically here: > > https://github.com/mbaldessari/sosreport/blob/pcp-plugin/sos/plugins/pcp.py > > Looks good. Unless I misread, it looks like it adds only the > archives and some of the named files from kenj's list. It'd be > nice if the script also added more general wildcardy patterns > such as: > > self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*.log*')) > self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*/*.log*')) > self.add_copy_spec(os.path.join(self.pcp_log_dir, '*/*/config*')) > > to catch as many error-log / generated-config files as possible. > These are small and useful for diagnostics. Thanks for the review. I was a bit wary of adding too many globs as we're trying to actually slim the size of sosreports a bit down, but I guess these are just logfiles that don't grow all too much and are easily compressable. I'll add this. Thanks for the review, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From wwwrun@oss.sgi.com Thu May 1 17:47:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id D5E107F58; Thu, 1 May 2014 17:47:24 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1054] New: pmlogextract can exhaust open-files rlimits Date: Thu, 01 May 2014 22:47:24 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter cc classification Message-ID: Content-Type: multipart/alternative; boundary="1398984444.4DF7F4E1.16155"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1398984444.4DF7F4E1.16155 Date: Thu, 1 May 2014 17:47:24 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1054 Bug ID: 1054 Summary: pmlogextract can exhaust open-files rlimits Product: pcp Version: unspecified Hardware: All OS: Linux Status: NEW Severity: major Priority: P5 Component: pcp Assignee: pcp@kenj.com.au Reporter: fche@redhat.com CC: pcp@oss.sgi.com Classification: Unclassified If targeting a host whose pmcd suffers numerous brief outages, pmmgr (in granular mode) can generate numerous archives. It defers their merge until the next granularity period (day). (pmlogger_check* could do the same, if it were to respond to the death of pmlogger/pmcd's as quickly as pmmgr does). The problem comes up if pmlogextract is given >350ish archives as input, overflowing the default-1024 "ulimit -n" / setrlimit(2) RLIMIT_NOFILE with: pmlogextract: Error: cannot open archive "/var/log/pcp/pmmgr/HOSTNAME/archive-20140430.132052": Too many open files because it keeps open all input volumes, meta, and index files, throughout the merging process. It would be better if pmlogextract worked in two passes, computing an ordering on the input archives first, then copying them over (with only the current input & output files actually being open). -- You are receiving this mail because: You are on the CC list for the bug. --1398984444.4DF7F4E1.16155 Date: Thu, 1 May 2014 17:47:24 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"
Bug ID 1054
Summary pmlogextract can exhaust open-files rlimits
Product pcp
Version unspecified
Hardware All
OS Linux
Status NEW
Severity major
Priority P5
Component pcp
Assignee pcp@kenj.com.au
Reporter fche@redhat.com
CC pcp@oss.sgi.com
Classification Unclassified

If targeting a host whose pmcd suffers numerous brief outages, pmmgr 
(in granular mode) can generate numerous archives.  It defers their
merge until the next granularity period (day).  (pmlogger_check* could
do the same, if it were to respond to the death of pmlogger/pmcd's as
quickly as pmmgr does).

The problem comes up if pmlogextract is given >350ish archives as input,
overflowing the default-1024 "ulimit -n" / setrlimit(2) RLIMIT_NOFILE
with:

  pmlogextract: Error: cannot open archive
"/var/log/pcp/pmmgr/HOSTNAME/archive-20140430.132052": Too many open files

because it keeps open all input volumes, meta, and index files, throughout
the merging process.  It would be better if pmlogextract worked in two
passes, computing an ordering on the input archives first, then copying
them over (with only the current input & output files actually being open).


You are receiving this mail because:
  • You are on the CC list for the bug.
--1398984444.4DF7F4E1.16155-- From nscott@redhat.com Fri May 2 01:07:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 51C467F55 for ; Fri, 2 May 2014 01:07:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2E9628F8039 for ; Thu, 1 May 2014 23:07:14 -0700 (PDT) X-ASG-Debug-ID: 1399010828-04bdf02b8d23afb0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id lk0l1SvtJmD4Wgo5 for ; Thu, 01 May 2014 23:07:09 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s42678fb029074 for ; Fri, 2 May 2014 02:07:08 -0400 Date: Fri, 2 May 2014 02:07:08 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <710954544.16108816.1399010828551.JavaMail.zimbra@redhat.com> In-Reply-To: <1755700945.16107411.1399010378060.JavaMail.zimbra@redhat.com> Subject: Release reminder email MIME-Version: 1.0 X-ASG-Orig-Subj: Release reminder email Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Release reminder email Thread-Index: s8nRA154m17VcZxsq2r3qvltYPM92Q== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1399010828 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5458 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, Ah - I've forgotten to send the release reminder email Ken suggested at the last meeting ... here it is! We're about two weeks out from the next release now. On a completely unrelated note, I noticed PCP shot past the half-million lines-of-code mark in February (at least, thats according to https://www.ohloh.net/p/pcp)... we should bake a cake and celebrate! :) cheers. -- Nathan From wwwrun@oss.sgi.com Fri May 2 11:49:55 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 464087F66; Fri, 2 May 2014 11:49:55 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 973] libpcp solib extensions cause development/testing complications Date: Fri, 02 May 2014 16:49:54 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: mort@sgi.com X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_status resolution Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1399049395.5ca5c2.10337"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1399049395.5ca5c2.10337 Date: Fri, 2 May 2014 11:49:55 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=973 Frank Ch. Eigler changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #1 from Frank Ch. Eigler --- Nathan's symbol versioning additions from Dec. 2013 address this to a large extent, in that new executables running against older libraries (with the same SONAME) give more meaningful error messages. -- You are receiving this mail because: You are on the CC list for the bug. --1399049395.5ca5c2.10337 Date: Fri, 2 May 2014 11:49:55 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 973
What Removed Added
Status NEW RESOLVED
Resolution --- FIXED

Comment # 1 on bug 973 from
Nathan's symbol versioning additions from Dec. 2013 address this to a large
extent, in that new executables running against older libraries (with the
same SONAME) give more meaningful error messages.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1399049395.5ca5c2.10337-- From wwwrun@oss.sgi.com Fri May 2 12:20:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 7D1B329DF9; Fri, 2 May 2014 12:20:09 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 1055] New: multithreaded libpcp race conditions Date: Fri, 02 May 2014 17:20:09 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: pcp@kenj.com.au X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter cc classification Message-ID: Content-Type: multipart/alternative; boundary="1399051209.1e3a1.13146"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1399051209.1e3a1.13146 Date: Fri, 2 May 2014 12:20:09 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=1055 Bug ID: 1055 Summary: multithreaded libpcp race conditions Product: pcp Version: unspecified Hardware: All OS: Linux Status: NEW Severity: major Priority: P5 Component: pcp Assignee: pcp@kenj.com.au Reporter: fche@redhat.com CC: pcp@oss.sgi.com Classification: Unclassified Just so we forget, there are a number of race conditions and similar problems in the multi-threading support in libpcp. Since we have no known multi-threaded clients other than a few pcpqa synethetic tests, these are not high priority problems. They are listed here just to avoid being forgotten. http://oss.sgi.com/archives/pcp/2014-03/msg00124.html - access.c, getClientIds(), a mismatched PM_UNLOCK in the loop around line 1295. (By the way, the 'myhostid' variable is probably a symptom of more inappropriate FQDN assumptions that will need to be fixed.) - context.c, pmNewContext(), contexts*, old_*context* used unprotected in FAILED: path. - context.c, pmDupContext(), quite possibly unsafe if another thread is manipulating the oldcon at the same time; by the way, is that condition (same pmUseContext by different threads) detected / forbidden / permitted? The __pmHandleToPtr() ctxp->c_lock design sounds fine, but it's not used in all context-structure users - context.c __pmHandleToPtr race condition between the libpcp unlock and the context lock (what if another thread deletes the context) during this time?) (Flipping the locks around could maybe cause deadlocks OTOH; __pmLogFetchInterp nests the libpcp lock within the ctxp lock already.) - interp.c cache_read: race condition between PM_UNLOCK and use of lfup pointer; another thread may have nuked that cache[] slot in the mean time; this general pattern recurs several places in the code (look for UNLOCK followed by a return FOO->BAR, e.g. logmeta.c) - util.c: using libpcp lock for all kinds of printing, possibly nesting within context locks -> possible deadlock - loop.c: no locking at all -- You are receiving this mail because: You are on the CC list for the bug. --1399051209.1e3a1.13146 Date: Fri, 2 May 2014 12:20:09 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"
Bug ID 1055
Summary multithreaded libpcp race conditions
Product pcp
Version unspecified
Hardware All
OS Linux
Status NEW
Severity major
Priority P5
Component pcp
Assignee pcp@kenj.com.au
Reporter fche@redhat.com
CC pcp@oss.sgi.com
Classification Unclassified

Just so we forget, there are a number of race conditions and
similar problems in the multi-threading support in libpcp.
Since we have no known multi-threaded clients other than a few
pcpqa synethetic tests, these are not high priority problems.
They are listed here just to avoid being forgotten.

http://oss.sgi.com/archives/pcp/2014-03/msg00124.html


- access.c, getClientIds(), a mismatched PM_UNLOCK in the loop around
  line 1295.  (By the way, the 'myhostid' variable is probably a
  symptom of more inappropriate FQDN assumptions that will need to be
  fixed.)

- context.c, pmNewContext(), contexts*, old_*context* used unprotected
  in FAILED: path.

- context.c, pmDupContext(), quite possibly unsafe if another thread
  is manipulating the oldcon at the same time; by the way, is that
  condition (same pmUseContext by different threads) detected /
  forbidden / permitted?  The __pmHandleToPtr() ctxp->c_lock design
  sounds fine, but it's not used in all context-structure users

- context.c __pmHandleToPtr race condition between the libpcp unlock
  and the context lock (what if another thread deletes the context)
  during this time?)  (Flipping the locks around could maybe cause
  deadlocks OTOH; __pmLogFetchInterp nests the libpcp lock within the
  ctxp lock already.)

- interp.c cache_read: race condition between PM_UNLOCK and use of      
  lfup pointer; another thread may have nuked that cache[] slot in the
  mean time; this general pattern recurs several places in the code
  (look for UNLOCK followed by a return FOO->BAR, e.g. logmeta.c)

- util.c: using libpcp lock for all kinds of printing, possibly
  nesting within context locks -> possible deadlock

- loop.c: no locking at all


You are receiving this mail because:
  • You are on the CC list for the bug.
--1399051209.1e3a1.13146-- From kenj@internode.on.net Sun May 4 23:45:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7E5B47F52 for ; Sun, 4 May 2014 23:45:13 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 1A10FAC004 for ; Sun, 4 May 2014 21:45:09 -0700 (PDT) X-ASG-Debug-ID: 1399265104-04cbb03cc7301a90001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id D7kvBcEoR9HO5G9u for ; Sun, 04 May 2014 21:45:04 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgQWACwWZ1N20fC0PGdsb2JhbAANTINVh3i+SQMBAQEBOIMIUTANFhgDAgECATEnBgIBAa4ApHgXjm+EKQSvbg Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail05.adl6.internode.on.net with ESMTP; 05 May 2014 14:15:03 +0930 Message-ID: <536717E1.7080002@internode.on.net> Date: Mon, 05 May 2014 14:47:29 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - pmlc <---> pmlogger access controls Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: pcp updates - pmlc <---> pmlogger access controls Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1399265104 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5543 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Another item from the last developers conf call. Changes committed to git://oss.sgi.com/kenj/pcp.git dev man/man1/pmlc.1 | 75 ++++++++++++ man/man1/pmlogger.1 | 79 +++++++++--- qa/897 | 80 +++++++++++++ qa/897.out | 283 ++++++++++++++++++++++++++++++++++++++++++++++ qa/group | 1 src/pmlc/actions.c | 36 +++++ src/pmlogger/src/dopdu.c | 61 +++++++-- src/pmlogger/src/logger.h | 2 src/pmlogger/src/ports.c | 4 9 files changed, 575 insertions(+), 46 deletions(-) commit cd5c362f65c1c1d07d3d4e22ce90238f6497a547 Author: Ken McDonell Date: Mon May 5 13:41:09 2014 +1000 qa/897 (new) - exercise pmlc<-->pmlogger access controls commit 188790922fe6094fe63320bf0da040fbb28d597a Author: Ken McDonell Date: Mon May 5 13:39:37 2014 +1000 pmlc man page - access controls Document how pmlogger access controls effect pmlc behaviour. commit 1967f245af9bc20958187a13f3499cb4a7e3b496 Author: Ken McDonell Date: Mon May 5 13:36:53 2014 +1000 pmlogger - improve pmlc access controls Specifically, don't execute pmlc's "new volume" nor "sync" commands unless the pmlogger access control allows mandatory operations. Also clean up the semantics of the control variable used to hold access capabilities, and add comments around the parts of the code that are subject to access control restrictions. commit 23c6e92668e24e2a08132afc5d9bd46bfe143347 Author: Ken McDonell Date: Mon May 5 13:35:25 2014 +1000 pmlc/actions.c - improved error handling With tightened access control enforcement at pmlogger, some PDU exchenges can now return a error PDU in places that were not being handled correctly in the pmlc code. commit aa68af6cc770b3891a6f5cd4d7cd85b9021ddaa0 Author: Ken McDonell Date: Mon May 5 12:09:15 2014 +1000 pmlogger man page - more verbose description of [access] section From nscott@redhat.com Mon May 5 00:10:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0DD267F54 for ; Mon, 5 May 2014 00:10:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 04C47304053 for ; Sun, 4 May 2014 22:10:47 -0700 (PDT) X-ASG-Debug-ID: 1399266642-04cb6c728f320830001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id RFpWraSN8rdkwEPn for ; Sun, 04 May 2014 22:10:42 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s455Afee027256 for ; Mon, 5 May 2014 01:10:41 -0400 Date: Mon, 5 May 2014 01:10:41 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1723367238.505495.1399266641616.JavaMail.zimbra@redhat.com> In-Reply-To: <1798384154.504691.1399266376367.JavaMail.zimbra@redhat.com> Subject: pcp updates: pmgetopt MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: pmgetopt Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: pmgetopt Thread-Index: q8YDaVisOx26At4reSylgyl1xSz+zw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399266642 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5543 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... (Especially for you to review Ken, or should I say, Captain Shell Script! This now works, for example: pcp --host verge --pmie) Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 22 ++ man/man1/pmgetopt.1 | 218 ++++++++++++++++++++ qa/738.out | 14 + qa/978 | 93 ++++++++ qa/978.out | 63 +++++ qa/group | 1 qa/src/getoptions.c | 2 src/GNUmakefile | 2 src/libpcp/src/getopt.c | 2 src/pcp/pcp.sh | 153 ++++++++------ src/pmconfig/pmconfig.c | 25 -- src/pmgetopt/.gitignore | 1 src/pmgetopt/GNUmakefile | 31 ++ src/pmgetopt/pmgetopt.c | 466 ++++++++++++++++++++++++++++++++++++++++++++ src/pmlogger/pmlogmv.sh | 49 +++- src/pmlogger/src/pmlogger.c | 2 src/pmval/pmval.c | 4 17 files changed, 1047 insertions(+), 101 deletions(-) commit c5ca16fa64782483e04f277c072d46a2b061066a Author: Nathan Scott Date: Mon May 5 15:03:19 2014 +1000 Update the CHANGELOG with the story so far for this release commit 9b24739c43e9626f0a256e661ca2b1fb776d787b Author: Nathan Scott Date: Mon May 5 15:02:04 2014 +1000 Use simpler shell-quoting mechanism in pmconfig(1) from getopt(1) commit 2f2df6fe3693cf728cb45d2d8efb616eaa992a7d Author: Nathan Scott Date: Mon May 5 15:01:03 2014 +1000 Add a pmgetopt(1) command for shell scripts long option parsing Inspired by getopt(1), this commit adds a pmgetopt(1) for PCP shell scripts to acquire cross-platform long option argument handling, in addition to their existing short option forms. Its output matches closely with the quoted variant of the getopt(1) output, however it differs significantly wrt configuration. It also differs in that it can be asked to call on pmUsageMessage(3) to generate the usage message for the script. Instead of an arcane combination of command line options to specify both long and short options, a usage-message-alike configuration syntax is implemented. This aids conversion of our existing shell scripts, since they have usage messages already. It does imply the use of temporary files for configuration but we make such extensive use of such files already that I figure thats not a big problem for PCP (though it likely would have been for the folks who originally wrote the getopt(1) command). This also gives opportunity to sneak in short-cuts for specifying the "standard" PCPIntro(1) options. A man page and test qa/978 are added to document and test it. Also the pcp(1) and pmlogmv(1) scripts have been initially converted to demonstrate and further exercise its use. commit 01a865d5f37177703d9381844354e76c961fa3a9 Author: Nathan Scott Date: Mon May 5 10:40:17 2014 +1000 Skip arg errors when simply requesting a usage message (pmlogger/pmval) From nscott@redhat.com Mon May 5 02:33:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9ED337F58 for ; Mon, 5 May 2014 02:33:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id F1F84AC004 for ; Mon, 5 May 2014 00:33:35 -0700 (PDT) X-ASG-Debug-ID: 1399275210-04cb6c7291324590001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 6SWMzpAyQyTJxRdE for ; Mon, 05 May 2014 00:33:31 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s457XSdf003781; Mon, 5 May 2014 03:33:28 -0400 Date: Mon, 5 May 2014 03:33:28 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <1305468312.563111.1399275208034.JavaMail.zimbra@redhat.com> In-Reply-To: <536717E1.7080002@internode.on.net> References: <536717E1.7080002@internode.on.net> Subject: Re: [pcp] pcp updates - pmlc <---> pmlogger access controls MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp updates - pmlc <---> pmlogger access controls Content-Type: multipart/mixed; boundary="----=_Part_563109_170239682.1399275208032" X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates - pmlc <---> pmlogger access controls Thread-Index: BAIY9qlYr8h/4GgHZ5Eh8giR13N0wQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1399275211 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5546 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ------=_Part_563109_170239682.1399275208032 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Ken, ----- Original Message ----- > Another item from the last developers conf call. > [...] Awesome. :) I'm seeing a QA failure on 381 - looks like the pmlc flush command is able to get EPERM under some conditions. Could be a primary logger using the (pre-existing) system logger config with a new pmlc? Since flush is now a no-op, should this just always succeed perhaps, independent of any permission settings? .bad file attached - everything else is passing for me here. cheers. -- Nathan ------=_Part_563109_170239682.1399275208032 Content-Type: application/octet-stream; name=381.out.bad Content-Disposition: attachment; filename=381.out.bad Content-Transfer-Encoding: base64 UUEgb3V0cHV0IGNyZWF0ZWQgYnkgMzgxCgo9PT0gX2hvc3Q9IF9sb2dnZXJfaWQ9UUEtUE1MT0dH RVItUElEID09PQoKcG1sYz4gY29ubmVjdCBwcmltYXJ5IApwbWxjPiBzdGF0dXMKcG1sb2dnZXIg W3ByaW1hcnldIG9uIGhvc3QgTE9DQUwtSE9TVCBpcyBsb2dnaW5nIG1ldHJpY3MgZnJvbSBob3N0 IC4uLgouLi4gc3RhdHVzIG91dHB1dCAuLi4KcG1sYz4gcXVlcnkgc2FtcGxlLmRyaWZ0CnNhbXBs ZS5kcmlmdAogICAgYWR2ICBvZmYgbmwgICAgICAgICAgICAgCgpwbWxjPiBjb25uZWN0IHBvcnQg NDMzMCAKcG1sYz4gc3RhdHVzCnBtbG9nZ2VyIFtQTUxPR0dFUi1QSURdIG9uIGhvc3QgTE9DQUwt SE9TVCBpcyBsb2dnaW5nIG1ldHJpY3MgZnJvbSBob3N0IC4uLgouLi4gc3RhdHVzIG91dHB1dCAu Li4KcG1sYz4gZmx1c2gKRXJyb3I6IE5vIHBlcm1pc3Npb24gdG8gcGVyZm9ybSByZXF1ZXN0ZWQg b3BlcmF0aW9uCnBtbGM+IGNvbm5lY3QgUUEtUE1MT0dHRVItUElEIApwbWxjPiBzdGF0dXMKcG1s b2dnZXIgW1FBLVBNTE9HR0VSLVBJRF0gb24gaG9zdCBMT0NBTC1IT1NUIGlzIGxvZ2dpbmcgbWV0 cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBzdGF0dXMgb3V0cHV0IC4uLgpwbWxjPiBmbHVzaApwbWxj PiAKCj09PSBfaG9zdD0gX2xvZ2dlcl9pZD1wb3J0IFFBLVBNTE9HR0VSLVBPUlQgPT09CgpwbWxj PiBjb25uZWN0IHByaW1hcnkgCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbcHJpbWFyeV0gb24gaG9z dCBMT0NBTC1IT1NUIGlzIGxvZ2dpbmcgbWV0cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBzdGF0dXMg b3V0cHV0IC4uLgpwbWxjPiBxdWVyeSBzYW1wbGUuZHJpZnQKc2FtcGxlLmRyaWZ0CiAgICBhZHYg IG9mZiBubCAgICAgICAgICAgICAKCnBtbGM+IGNvbm5lY3QgcG9ydCA0MzMwIApwbWxjPiBzdGF0 dXMKcG1sb2dnZXIgW1BNTE9HR0VSLVBJRF0gb24gaG9zdCBMT0NBTC1IT1NUIGlzIGxvZ2dpbmcg bWV0cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBzdGF0dXMgb3V0cHV0IC4uLgpwbWxjPiBmbHVzaApF cnJvcjogTm8gcGVybWlzc2lvbiB0byBwZXJmb3JtIHJlcXVlc3RlZCBvcGVyYXRpb24KcG1sYz4g Y29ubmVjdCBwb3J0IFFBLVBNTE9HR0VSLVBPUlQgCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbUUEt UE1MT0dHRVItUElEXSBvbiBob3N0IExPQ0FMLUhPU1QgaXMgbG9nZ2luZyBtZXRyaWNzIGZyb20g aG9zdCAuLi4KLi4uIHN0YXR1cyBvdXRwdXQgLi4uCnBtbGM+IGZsdXNoCnBtbGM+IAoKPT09IF9o b3N0PUBMT0NBTC1IT1NUIF9sb2dnZXJfaWQ9UUEtUE1MT0dHRVItUElEID09PQoKcG1sYz4gY29u bmVjdCBwcmltYXJ5IEBMT0NBTC1IT1NUCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbcHJpbWFyeV0g b24gaG9zdCBMT0NBTC1IT1NUIGlzIGxvZ2dpbmcgbWV0cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBz dGF0dXMgb3V0cHV0IC4uLgpwbWxjPiBxdWVyeSBzYW1wbGUuZHJpZnQKc2FtcGxlLmRyaWZ0CiAg ICBhZHYgIG9mZiBubCAgICAgICAgICAgICAKCnBtbGM+IGNvbm5lY3QgcG9ydCA0MzMwIEBMT0NB TC1IT1NUCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbUE1MT0dHRVItUElEXSBvbiBob3N0IExPQ0FM LUhPU1QgaXMgbG9nZ2luZyBtZXRyaWNzIGZyb20gaG9zdCAuLi4KLi4uIHN0YXR1cyBvdXRwdXQg Li4uCnBtbGM+IGZsdXNoCkVycm9yOiBObyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gcmVxdWVzdGVk IG9wZXJhdGlvbgpwbWxjPiBjb25uZWN0IFFBLVBNTE9HR0VSLVBJRCBATE9DQUwtSE9TVApwbWxj PiBzdGF0dXMKcG1sb2dnZXIgW1FBLVBNTE9HR0VSLVBJRF0gb24gaG9zdCBMT0NBTC1IT1NUIGlz IGxvZ2dpbmcgbWV0cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBzdGF0dXMgb3V0cHV0IC4uLgpwbWxj PiBmbHVzaApwbWxjPiAKCj09PSBfaG9zdD1ATE9DQUwtSE9TVCBfbG9nZ2VyX2lkPXBvcnQgUUEt UE1MT0dHRVItUE9SVCA9PT0KCnBtbGM+IGNvbm5lY3QgcHJpbWFyeSBATE9DQUwtSE9TVApwbWxj PiBzdGF0dXMKcG1sb2dnZXIgW3ByaW1hcnldIG9uIGhvc3QgTE9DQUwtSE9TVCBpcyBsb2dnaW5n IG1ldHJpY3MgZnJvbSBob3N0IC4uLgouLi4gc3RhdHVzIG91dHB1dCAuLi4KcG1sYz4gcXVlcnkg c2FtcGxlLmRyaWZ0CnNhbXBsZS5kcmlmdAogICAgYWR2ICBvZmYgbmwgICAgICAgICAgICAgCgpw bWxjPiBjb25uZWN0IHBvcnQgNDMzMCBATE9DQUwtSE9TVApwbWxjPiBzdGF0dXMKcG1sb2dnZXIg W1BNTE9HR0VSLVBJRF0gb24gaG9zdCBMT0NBTC1IT1NUIGlzIGxvZ2dpbmcgbWV0cmljcyBmcm9t IGhvc3QgLi4uCi4uLiBzdGF0dXMgb3V0cHV0IC4uLgpwbWxjPiBmbHVzaApFcnJvcjogTm8gcGVy bWlzc2lvbiB0byBwZXJmb3JtIHJlcXVlc3RlZCBvcGVyYXRpb24KcG1sYz4gY29ubmVjdCBwb3J0 IFFBLVBNTE9HR0VSLVBPUlQgQExPQ0FMLUhPU1QKcG1sYz4gc3RhdHVzCnBtbG9nZ2VyIFtRQS1Q TUxPR0dFUi1QSURdIG9uIGhvc3QgTE9DQUwtSE9TVCBpcyBsb2dnaW5nIG1ldHJpY3MgZnJvbSBo b3N0IC4uLgouLi4gc3RhdHVzIG91dHB1dCAuLi4KcG1sYz4gZmx1c2gKcG1sYz4gCgo9PT0gX2hv c3Q9QFJFTU9URS1IT1NUIF9sb2dnZXJfaWQ9UE1MT0dHRVItUElEID09PQoKcG1sYz4gY29ubmVj dCBwcmltYXJ5IEBSRU1PVEUtSE9TVApwbWxjPiBzdGF0dXMKcG1sb2dnZXIgW3ByaW1hcnldIG9u IGhvc3QgUkVNT1RFLUhPU1QgaXMgbG9nZ2luZyBtZXRyaWNzIGZyb20gaG9zdCAuLi4KLi4uIHN0 YXR1cyBvdXRwdXQgLi4uCnBtbGM+IHF1ZXJ5IHNhbXBsZS5kcmlmdApzYW1wbGUuZHJpZnQKICAg IGFkdiAgb2ZmIG5sICAgICAgICAgICAgIAoKcG1sYz4gY29ubmVjdCBwb3J0IDQzMzAgQFJFTU9U RS1IT1NUCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbUE1MT0dHRVItUElEXSBvbiBob3N0IFJFTU9U RS1IT1NUIGlzIGxvZ2dpbmcgbWV0cmljcyBmcm9tIGhvc3QgLi4uCi4uLiBzdGF0dXMgb3V0cHV0 IC4uLgpwbWxjPiBmbHVzaApwbWxjPiBjb25uZWN0IFBJRCBAUkVNT1RFLUhPU1QKcG1sYz4gc3Rh dHVzCnBtbG9nZ2VyIFtQTUxPR0dFUi1QSURdIG9uIGhvc3QgUkVNT1RFLUhPU1QgaXMgbG9nZ2lu ZyBtZXRyaWNzIGZyb20gaG9zdCAuLi4KLi4uIHN0YXR1cyBvdXRwdXQgLi4uCnBtbGM+IGZsdXNo CnBtbGM+IApXYWl0aW5nIGZvciBwbWNkIHRvIHRlcm1pbmF0ZSAuLi4KCgo9PT0gX2hvc3Q9IF9s b2dnZXJfaWQ9UUEtUE1MT0dHRVItUElEID09PQoKcG1sYz4gY29ubmVjdCBwcmltYXJ5IApVbmFi bGUgdG8gY29ubmVjdCB0byBwcmltYXJ5IHBtbG9nZ2VyIGF0IExPQ0FMLUhPU1Q6IENvbm5lY3Rp b24gcmVmdXNlZApwbWxjPiBzdGF0dXMKRXJyb3IgWzxzdGRpbj4sIGxpbmUgMl0KTm90IGNvbm5l Y3RlZCB0byBhbnkgcG1sb2dnZXIgaW5zdGFuY2UKcG1sYz4gcXVlcnkgRXJyb3IgWzxzdGRpbj4s IGxpbmUgM10KTm90IGNvbm5lY3RlZCB0byBhbnkgcG1sb2dnZXIgaW5zdGFuY2UKc2FtcGxlLmRy aWZ0CnBtbGM+IGNvbm5lY3QgcG9ydCA0MzMwIApVbmFibGUgdG8gY29ubmVjdCB0byBwbWxvZ2dl ciBvbiBwb3J0IDQzMzAgYXQgTE9DQUwtSE9TVDogQ29ubmVjdGlvbiByZWZ1c2VkCnBtbGM+IHN0 YXR1cwpFcnJvciBbPHN0ZGluPiwgbGluZSA1XQpOb3QgY29ubmVjdGVkIHRvIGFueSBwbWxvZ2dl ciBpbnN0YW5jZQpwbWxjPiBmbHVzaApFcnJvciBbPHN0ZGluPiwgbGluZSA2XQpOb3QgY29ubmVj dGVkIHRvIGFueSBwbWxvZ2dlciBpbnN0YW5jZQpwbWxjPiBjb25uZWN0IFFBLVBNTE9HR0VSLVBJ RCAKcG1sYz4gc3RhdHVzCnBtbG9nZ2VyIFtRQS1QTUxPR0dFUi1QSURdIG9uIGhvc3QgTE9DQUwt SE9TVCBpcyBsb2dnaW5nIG1ldHJpY3MgZnJvbSBob3N0IC4uLgouLi4gc3RhdHVzIG91dHB1dCAu Li4KcG1sYz4gZmx1c2gKcG1sYz4gCgo9PT0gX2hvc3Q9IF9sb2dnZXJfaWQ9cG9ydCBRQS1QTUxP R0dFUi1QT1JUID09PQoKcG1sYz4gY29ubmVjdCBwcmltYXJ5IApVbmFibGUgdG8gY29ubmVjdCB0 byBwcmltYXJ5IHBtbG9nZ2VyIGF0IExPQ0FMLUhPU1Q6IENvbm5lY3Rpb24gcmVmdXNlZApwbWxj PiBzdGF0dXMKRXJyb3IgWzxzdGRpbj4sIGxpbmUgMl0KTm90IGNvbm5lY3RlZCB0byBhbnkgcG1s b2dnZXIgaW5zdGFuY2UKcG1sYz4gcXVlcnkgRXJyb3IgWzxzdGRpbj4sIGxpbmUgM10KTm90IGNv bm5lY3RlZCB0byBhbnkgcG1sb2dnZXIgaW5zdGFuY2UKc2FtcGxlLmRyaWZ0CnBtbGM+IGNvbm5l Y3QgcG9ydCA0MzMwIApVbmFibGUgdG8gY29ubmVjdCB0byBwbWxvZ2dlciBvbiBwb3J0IDQzMzAg YXQgTE9DQUwtSE9TVDogQ29ubmVjdGlvbiByZWZ1c2VkCnBtbGM+IHN0YXR1cwpFcnJvciBbPHN0 ZGluPiwgbGluZSA1XQpOb3QgY29ubmVjdGVkIHRvIGFueSBwbWxvZ2dlciBpbnN0YW5jZQpwbWxj PiBmbHVzaApFcnJvciBbPHN0ZGluPiwgbGluZSA2XQpOb3QgY29ubmVjdGVkIHRvIGFueSBwbWxv Z2dlciBpbnN0YW5jZQpwbWxjPiBjb25uZWN0IHBvcnQgUUEtUE1MT0dHRVItUE9SVCAKcG1sYz4g c3RhdHVzCnBtbG9nZ2VyIFtRQS1QTUxPR0dFUi1QSURdIG9uIGhvc3QgTE9DQUwtSE9TVCBpcyBs b2dnaW5nIG1ldHJpY3MgZnJvbSBob3N0IC4uLgouLi4gc3RhdHVzIG91dHB1dCAuLi4KcG1sYz4g Zmx1c2gKcG1sYz4gCgo9PT0gX2hvc3Q9QFJFTU9URS1IT1NUIF9sb2dnZXJfaWQ9UE1MT0dHRVIt UElEID09PQoKcG1sYz4gY29ubmVjdCBwcmltYXJ5IEBSRU1PVEUtSE9TVApwbWxjPiBzdGF0dXMK cG1sb2dnZXIgW3ByaW1hcnldIG9uIGhvc3QgUkVNT1RFLUhPU1QgaXMgbG9nZ2luZyBtZXRyaWNz IGZyb20gaG9zdCAuLi4KLi4uIHN0YXR1cyBvdXRwdXQgLi4uCnBtbGM+IHF1ZXJ5IHNhbXBsZS5k cmlmdApzYW1wbGUuZHJpZnQKICAgIGFkdiAgb2ZmIG5sICAgICAgICAgICAgIAoKcG1sYz4gY29u bmVjdCBwb3J0IDQzMzAgQFJFTU9URS1IT1NUCnBtbGM+IHN0YXR1cwpwbWxvZ2dlciBbUE1MT0dH RVItUElEXSBvbiBob3N0IFJFTU9URS1IT1NUIGlzIGxvZ2dpbmcgbWV0cmljcyBmcm9tIGhvc3Qg Li4uCi4uLiBzdGF0dXMgb3V0cHV0IC4uLgpwbWxjPiBmbHVzaApwbWxjPiBjb25uZWN0IFBJRCBA UkVNT1RFLUhPU1QKcG1sYz4gc3RhdHVzCnBtbG9nZ2VyIFtQTUxPR0dFUi1QSURdIG9uIGhvc3Qg UkVNT1RFLUhPU1QgaXMgbG9nZ2luZyBtZXRyaWNzIGZyb20gaG9zdCAuLi4KLi4uIHN0YXR1cyBv dXRwdXQgLi4uCnBtbGM+IGZsdXNoCnBtbGM+IAoKTG9nIGZvciBwbWxvZ2dlciBvbiBIT1NUIHN0 YXJ0ZWQgREFURQoKQ29uZmlnIHBhcnNlZApTdGFydGluZyBsb2dnZXIgZm9yIGhvc3QgIkhPU1Qi CkFyY2hpdmUgYmFzZW5hbWU6IEFSQ0hJVkUKcG1sb2dnZXI6IFNpZ25hbGxlZCAoc2lnbmFsPTE1 KSwgZXhpdGluZwoKTG9nIGZpbmlzaGVkIERBVEUKClN0YXJ0aW5nIHBtY2QgLi4uIApTdGFydGlu ZyBwbWxvZ2dlciAuLi4gCg== ------=_Part_563109_170239682.1399275208032-- From kenj@internode.on.net Mon May 5 02:34:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 36A767F58 for ; Mon, 5 May 2014 02:34:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 95555AC004 for ; Mon, 5 May 2014 00:34:03 -0700 (PDT) X-ASG-Debug-ID: 1399275237-04cbb03cc53060d0001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id YELg1D2lfTX9zxEv for ; Mon, 05 May 2014 00:33:57 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AiCMAEk+Z1N20fC0PGdsb2JhbABZgwZPxREDAoEVFwMBAQEBODWCJQEBBQgCHhACHBUODQMCBgMYLhkgChQCBB4FiDAOyl4XjFeBeweEPwSQCIpolH4r Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO bozohorize) ([118.209.240.180]) by ipmail05.adl6.internode.on.net with ESMTP; 05 May 2014 17:03:10 +0930 From: "Ken McDonell" To: "'Michele Baldessari'" Cc: References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> In-Reply-To: <20140501200341.GA23705@marquez.int.rhx> Subject: Re: [pcp] sosreport and pcp Date: Mon, 5 May 2014 17:33:07 +1000 X-ASG-Orig-Subj: Re: [pcp] sosreport and pcp Message-ID: <005101cf6834$43bbc140$cb3343c0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQEsj0kNDUyK5doBFAx9bmzmqnXJJADpu4ggAbZh1P4CcL1cowHP8N+U Content-Language: en-au X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1399275237 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5546 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header On 02/05/14 06:03, Michele Baldessari wrote: > ... > Hi Ken, > > if you have some spare time to check it here are the rpms: > - EL7 - http://acksyn.org/files/rpms/sosreport/pcp/el7/ > - F20 - http://acksyn.org/files/rpms/sosreport/pcp/f20/ Thanks. Took it for a spin on F20. There are some dirs. below /var/lib/pcp/config that will not really help (they are populated from the RPMS and either not likely to be changed and/or not likely to shed light on any "issue") ... namely pmchart, pmlogconf, pmieconf and pmlogrewrite. Dropping these reduces the file count by over 50% in my test case, but does not reduce the tarball volume by much ... it just makes it a little more trees and less forest when you unpack the tarball. And if Frank's general suggestion below /var/log/pcp does not already catch these, I'd suggest adding /var/log/pcp/pmie/ and /var/log/pcp/pmproxy. Also /var/log/pcp/pmwebd and /var/log/pcp/pmmgr may contain relevant info, but I'll defer to Frank who's the expert on these ones. Looks good and thanks. From kenj@internode.on.net Mon May 5 05:11:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id A6B8C7F66 for ; Mon, 5 May 2014 05:11:57 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8684A8F8039 for ; Mon, 5 May 2014 03:11:54 -0700 (PDT) X-ASG-Debug-ID: 1399284708-04cbb03cc430ed70001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id 5hpANEvOIytOWFNP for ; Mon, 05 May 2014 03:11:49 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhFbAApjZ1N20fC0PGdsb2JhbABZgwaEDoQ5vSGBFxcDAQEBATg1giUBAQUIAhkEAS4jDAEDAgYDFQEEAiMDAgIZIAoDEQIEEwsFiDCmdaQeF4EqjSgHgnSBSwSQCJ9mKw Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO bozohorize) ([118.209.240.180]) by ipmail05.adl6.internode.on.net with ESMTP; 05 May 2014 19:41:47 +0930 From: "Ken McDonell" To: "'Nathan Scott'" Cc: References: <536717E1.7080002@internode.on.net> <1305468312.563111.1399275208034.JavaMail.zimbra@redhat.com> In-Reply-To: <1305468312.563111.1399275208034.JavaMail.zimbra@redhat.com> Subject: RE: [pcp] pcp updates - pmlc <---> pmlogger access controls Date: Mon, 5 May 2014 20:11:45 +1000 X-ASG-Orig-Subj: RE: [pcp] pcp updates - pmlc <---> pmlogger access controls Message-ID: <001001cf684a$6bf10560$43d31020$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 15.0 Thread-Index: AQFtEZrjKNcBqX3L28qiyfYnzVF5QADNQE96m/AEB0A= Content-Language: en-au X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1399284708 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.01 X-Barracuda-Spam-Status: No, SCORE=0.01 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5549 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header > -----Original Message----- > From: Nathan Scott [mailto:nathans@redhat.com] > Sent: Monday, 5 May 2014 5:33 PM > ... > I'm seeing a QA failure on 381 - looks like the pmlc flush command is = able to > get EPERM under some conditions. Could be a primary logger using the = (pre- > existing) system logger config with a new pmlc? >=20 > Since flush is now a no-op, should this just always succeed perhaps, > independent of any permission settings? .bad file attached - = everything else > is passing for me here. Thank for this. And I agree. With the next round of changes, pmlc sync/flush is a no-op at the new = pmlogger and always returns success. So this means ... old pmlc <--> new pmlogger; does not show a regression new pmlc <--> old pmlogger; historical behaviour preserved new pmlc <--> new pmlogger; flush/sync is a no-op independent of access = controls From michele@acksyn.org Mon May 5 13:42:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id ADF637F87 for ; Mon, 5 May 2014 13:42:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7DB7930406B for ; Mon, 5 May 2014 11:42:29 -0700 (PDT) X-ASG-Debug-ID: 1399315346-04bdf02b8b34c020001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id 5QCjVxyNU7YPVRl7 for ; Mon, 05 May 2014 11:42:27 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 471802781D; Mon, 5 May 2014 14:42:26 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1399315345; bh=TqOqvC+kRVnjZ6SecVzmdDp4arRiFjFtWXKToKux2OA=; b=AZh7qDoC1ent 7q7/gnRFYyOmiGY5tHGxExsrhUc4Xu5d9kHdUchFM6B/BiZPbhkY6fhm3KgvcsRZ JD4l/L/cDCaVZP0T6K2+wJmXX5H9XwCFqlSiTSUa82HheAGR1I7eyPEZCvdPczl8 bwhXBwQchcPwwWa99835LcEK7L48uIg= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id ZgRTYfjNBVwU; Mon, 5 May 2014 14:42:25 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 53B1F248A3; Mon, 5 May 2014 14:42:25 -0400 (EDT) Date: Mon, 5 May 2014 19:42:24 +0100 From: Michele Baldessari To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: [pcp] sosreport and pcp Message-ID: <20140505184224.GB26622@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> <005101cf6834$43bbc140$cb3343c0$@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <005101cf6834$43bbc140$cb3343c0$@internode.on.net> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1399315347 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5559 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Ken, On Mon, May 05, 2014 at 05:33:07PM +1000, Ken McDonell wrote: > On 02/05/14 06:03, Michele Baldessari wrote: > >if you have some spare time to check it here are the rpms: > >- EL7 - http://acksyn.org/files/rpms/sosreport/pcp/el7/ > >- F20 - http://acksyn.org/files/rpms/sosreport/pcp/f20/ > > Thanks. Took it for a spin on F20. Thanks for testing, much appreciated. > There are some dirs. below /var/lib/pcp/config that will not really help > (they are populated from the RPMS and either not likely to be changed and/or > not likely to shed light on any "issue") ... namely pmchart, pmlogconf, > pmieconf and pmlogrewrite. Dropping these reduces the file count by over > 50% in my test case, but does not reduce the tarball volume by much ... it > just makes it a little more trees and less forest when you unpack the > tarball. Ah ok, makes sense. I have added the appropriate add_forbidden_path() calls so we skip these. > And if Frank's general suggestion below /var/log/pcp does not already catch > these, I'd suggest adding /var/log/pcp/pmie/ and > /var/log/pcp/pmproxy. If the files in there end up with *config or *log, we are covered. > Also /var/log/pcp/pmwebd and /var/log/pcp/pmmgr may contain relevant info, > but I'll defer to Frank who's the expert on these ones. Same here, if the files end with .log or .config. One of my goals with this sosreport exercise, is to create a script like sarstats[1] that I can simply point at an uncompressed sosreport and quickly get a decent overview of the main PCP stats collected on the machine. cheers, Michele [1] https://github.com/mbaldessari/sarstats -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From kenj@internode.on.net Mon May 5 18:09:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2897D7F78 for ; Mon, 5 May 2014 18:09:51 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id ABE6EAC002 for ; Mon, 5 May 2014 16:09:47 -0700 (PDT) X-ASG-Debug-ID: 1399331385-04bdf02b8a35caf0001-S8gJnT Received: from ipmail05.adl6.internode.on.net (ipmail05.adl6.internode.on.net [150.101.137.143]) by cuda.sgi.com with ESMTP id QgxxYgqjZWKWmbZa for ; Mon, 05 May 2014 16:09:45 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.143 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ak4XAGgZaFN20fC0PGdsb2JhbAANTINVh3i9IgGBOwMBAQEBOIMIUTANFhgDAgECATEnBgIBAa9hpicXjm+EKQSvbg Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail05.adl6.internode.on.net with ESMTP; 06 May 2014 08:39:44 +0930 Message-ID: <53681ACC.7090905@internode.on.net> Date: Tue, 06 May 2014 09:12:12 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - drop access control for pmlc sync no-op Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: pcp updates - drop access control for pmlc sync no-op Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail05.adl6.internode.on.net[150.101.137.143] X-Barracuda-Start-Time: 1399331385 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5566 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Changes committed to git://oss.sgi.com/kenj/pcp.git dev man/man1/pmlc.1 | 1 - qa/897.out | 3 --- src/pmlogger/src/dopdu.c | 13 +++++++------ 3 files changed, 7 insertions(+), 10 deletions(-) commit 2a8914e93dd3152979718ae8150d75bcbbd8410c Author: Ken McDonell Date: Tue May 6 09:10:38 2014 +1000 pmlogger <--> pmlc - no access controls for sync/flush (now a no-op) From nscott@redhat.com Mon May 5 18:10:29 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 47E377F78 for ; Mon, 5 May 2014 18:10:29 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 32CB4304032 for ; Mon, 5 May 2014 16:10:26 -0700 (PDT) X-ASG-Debug-ID: 1399331419-04cb6c72913669f0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 2RQ1ky3TkGKVKpse for ; Mon, 05 May 2014 16:10:20 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s45NAJgg015298 for ; Mon, 5 May 2014 19:10:19 -0400 Date: Mon, 5 May 2014 19:10:19 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <180418944.1215064.1399331419551.JavaMail.zimbra@redhat.com> In-Reply-To: <733114861.1214634.1399331280978.JavaMail.zimbra@redhat.com> Subject: pcp updates: script long options MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: script long options Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: script long options Thread-Index: pmcyDPe5Ch96iv8T56zcauqZ+ICK/g== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1399331419 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5566 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... (That's it, all sh scripts are long-option converted now I think) Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 8 + qa/.gitignore | 2 qa/1108 | 12 -- qa/183 | 8 - qa/183.out | 97 +++++++++++++++++++++++ qa/183.out.irix | 77 ------------------ qa/183.out.linux | 77 ------------------ qa/338 | 16 --- qa/530 | 15 --- qa/532 | 24 ----- qa/532.out | 150 ++++++++++++++++++++++++++++++++++++ qa/532.out.1 | 150 ------------------------------------ qa/532.out.2 | 150 ------------------------------------ qa/738.out | 4 src/pmie/pmie2col | 60 +++++++++----- src/pmie/pmie_check.sh | 46 ++++++++--- src/pmie/pmie_daily.sh | 70 ++++++++++------- src/pmlogconf/pmlogconf-setup.sh | 57 ++++++++----- src/pmlogconf/pmlogconf.sh | 85 +++++++++++--------- src/pmlogger/pmlogger_check.sh | 48 ++++++++--- src/pmlogger/pmlogger_daily.sh | 93 +++++++++++++--------- src/pmlogger/pmlogger_merge.sh | 40 ++++++--- src/pmlogger/pmlogmv.sh | 49 ++++++------ src/pmlogger/pmnewlog.sh | 115 +++++++++++++++++----------- src/pmlogsummary/pmwtf.sh | 159 ++++++++++++++++++++------------------- src/pmsignal/pmsignal.sh | 64 +++++++++++---- 26 files changed, 805 insertions(+), 871 deletions(-) commit f30fe6bc9383e9214bbb215ccbabb16e8eca26d0 Author: Nathan Scott Date: Tue May 6 09:04:13 2014 +1000 Convert pmlogconf and pmsignal scripts over to long options Make use of pmgetopt in these scripts. For pmlogconf, in the absense of a given host argument I noticed "localhost" was in use, over the now prefered "local:" - this has been converted to the new form and tested as well. commit 84511b113f609ee290b2fa8d4edd1d5d3e55592d Author: Nathan Scott Date: Tue May 6 09:00:14 2014 +1000 Convert pmlog* and pmie shell scripts over to long options Make use of pmgetopt in the pmie and pmlogger cron scripts, as well as a few other pmie/pmlogger helpers like pmie2col and pmwtf. From kenj@internode.on.net Tue May 6 00:53:35 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 58BDF29E14 for ; Tue, 6 May 2014 00:53:35 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 493E88F8033 for ; Mon, 5 May 2014 22:53:32 -0700 (PDT) X-ASG-Debug-ID: 1399355606-04cb6c1fcc228c40001-S8gJnT Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id cpSavZJ5m8FaTxIE for ; Mon, 05 May 2014 22:53:27 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApMBANp3aFN20fC0/2dsb2JhbAANS8V0gxGBLYMZAQEBAwE4Mw4FCwsYCSUPAkYGDQEHAQGINadLpi0XjlIHhD8Er3U Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail07.adl2.internode.on.net with ESMTP; 06 May 2014 15:23:16 +0930 Message-ID: <53687954.70903@internode.on.net> Date: Tue, 06 May 2014 15:55:32 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Michele Baldessari CC: pcp@oss.sgi.com Subject: Re: [pcp] sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> <005101cf6834$43bbc140$cb3343c0$@internode.on.net> <20140505184224.GB26622@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] sosreport and pcp In-Reply-To: <20140505184224.GB26622@marquez.int.rhx> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1399355606 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5577 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 06/05/14 04:42, Michele Baldessari wrote: >... >> And if Frank's general suggestion below /var/log/pcp does not already catch >> these, I'd suggest adding /var/log/pcp/pmie/ and >> /var/log/pcp/pmproxy. > > If the files in there end up with *config or *log, we are covered. > > ... >> Also /var/log/pcp/pmwebd and /var/log/pcp/pmmgr may contain relevant info, >> but I'll defer to Frank who's the expert on these ones. > > Same here, if the files end with .log or .config. Hmm, not quite Can we add .log.prev to the suffixes list? Sometimes the bad thing you're looking for was _before_ the last reboot or pmcd restart, and the .prev files may be helpful here. The pmmgr subdirectory also contains config.* files (not *.config), and a bunch of PCP archives in pmmgr/ similar to pmlogger/ Now the archives are a bit tricky ... it looks (I've never checked this before) like pmmgr _and_ pmlogger_control/pmlogger_daily may be both running collecting archives with the very similar, but not identical pmlogger configuration files. This is the case on my workstation, but that could be decades away fro a default install. I would expect that depending on local enable/disable actions by a sysadmin, you may have neither, one or the other, or both sets of archives. When both are available, it is further complicated by the fact that the actual configuration file for the two pmloggers may have been modified by local sysadmin action. I don't have a good heuristic to choose one if you want to avoid capturing both, but .. > One of my goals with this sosreport exercise, is to create a script like > sarstats[1] that I can simply point at an uncompressed sosreport and > quickly get a decent overview of the main PCP stats collected on the > machine. OK, one possible heuristic is 1. start with metrics you need for a sarstat-like tool ... as a starter, check the calls to put() and putinst() in sar2pcp from the pcp rpms 2. process the most recent archive from each of /var/log/pcp/{pmlogger,pmmgr}/ and use pminfo -a .meta to get the metrics in that archive, cull those not in the list from 1. 3. choose the archive with the longest matching list of metrics from 2. This sort of assumes the last archive in each directory is easily found (lexical sorting will work, pick the .meta files as these must be there and are unique) and that this archive is currently active (pminfo -f pmcd.pmlogger.archive will help ... in fact that avoids any lexical sorting completely and only lists the active ones). And it assumes the logging intervals for the metrics are similar (true by default I think). Hope this helps rather than confuses the issue. From michele@acksyn.org Tue May 6 07:15:16 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 215E08002 for ; Tue, 6 May 2014 07:15:16 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id A87BEADC55 for ; Tue, 6 May 2014 05:15:12 -0700 (PDT) X-ASG-Debug-ID: 1399378507-04cbb03cc4365050001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id Lql1kEJOakTPTjaw for ; Tue, 06 May 2014 05:15:07 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id D429526F8C; Tue, 6 May 2014 08:15:06 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1399378506; bh=m/3iHPhQ9ZGwhbkw/5jfzzLttUg1fiya0WNQvsM/o6c=; b=XgHT8LYB9V4U 7rcNzau88jR9H8vEaejjgat1Xpqb64ZJUVxkt/oDHbLauRQ7WZixaI7lwn6lSt09 WtU2uci+ABDFT1DJa/QvSe22opkheBbDK5uQGLIHXdHL//ThfhZAPHz0SRQbNXFs F82ACl6sfiIFJfaCBybJzHZERCNzei8= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 71Q0uHuR7V5p; Tue, 6 May 2014 08:15:06 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id D96BE268E8; Tue, 6 May 2014 08:15:05 -0400 (EDT) Date: Tue, 6 May 2014 13:15:05 +0100 From: Michele Baldessari To: Ken McDonell Cc: pcp@oss.sgi.com Subject: Re: [pcp] sosreport and pcp Message-ID: <20140506121505.GD26622@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] sosreport and pcp References: <20140429141502.GD15985@marquez.int.rhx> <53601960.5000503@internode.on.net> <20140501200341.GA23705@marquez.int.rhx> <005101cf6834$43bbc140$cb3343c0$@internode.on.net> <20140505184224.GB26622@marquez.int.rhx> <53687954.70903@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53687954.70903@internode.on.net> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1399378507 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Ken, On Tue, May 06, 2014 at 03:55:32PM +1000, Ken McDonell wrote: > On 06/05/14 04:42, Michele Baldessari wrote: > >... > >>And if Frank's general suggestion below /var/log/pcp does not already catch > >>these, I'd suggest adding /var/log/pcp/pmie/ and > >>/var/log/pcp/pmproxy. > > > >If the files in there end up with *config or *log, we are covered. > > > > ... > >>Also /var/log/pcp/pmwebd and /var/log/pcp/pmmgr may contain relevant info, > >>but I'll defer to Frank who's the expert on these ones. > > > >Same here, if the files end with .log or .config. > > Hmm, not quite > > Can we add .log.prev to the suffixes list? Sometimes the bad thing you're > looking for was _before_ the last reboot or pmcd restart, and the .prev > files may be helpful here. Yep, those are already covered as we have *.log* under /var/log/pcp/ (*/*.log and */*/*.log) > The pmmgr subdirectory also contains config.* files (not *.config), and a > bunch of PCP archives in pmmgr/ similar to pmlogger/ I had added config* but wrote *.config in my mail. The former is the one in the code. Is that fine as it is or do I need to tweak this? > Now the archives are a bit tricky ... it looks (I've never checked this > before) like pmmgr _and_ pmlogger_control/pmlogger_daily may be both running > collecting archives with the very similar, but not identical pmlogger > configuration files. This is the case on my workstation, but that could be > decades away fro a default install. > > I would expect that depending on local enable/disable actions by a sysadmin, > you may have neither, one or the other, or both sets of archives. > > When both are available, it is further complicated by the fact that the > actual configuration file for the two pmloggers may have been modified by > local sysadmin action. > > I don't have a good heuristic to choose one if you want to avoid capturing > both, but .. I think it might be best to start off by collecting the archives of pmlogger of the host itself. Once we observe how many sosreport we get where having pmmgr/hostname would have been needed, we can reassess this. My gut feeling is that, at least initially, the most used use-case will be a moderately simple log collection for the single host. In any case we can amend here as necessary once we have the first pcp-enabled sosreports flowing in. > >One of my goals with this sosreport exercise, is to create a script like > >sarstats[1] that I can simply point at an uncompressed sosreport and > >quickly get a decent overview of the main PCP stats collected on the > >machine. > > OK, one possible heuristic is > > 1. start with metrics you need for a sarstat-like tool ... as a starter, > check the calls to put() and putinst() in sar2pcp from the pcp rpms > 2. process the most recent archive from each of > /var/log/pcp/{pmlogger,pmmgr}/ and use pminfo -a .meta to > get the metrics in that archive, cull those not in the list from 1. > 3. choose the archive with the longest matching list of metrics from 2. > > This sort of assumes the last archive in each directory is easily found > (lexical sorting will work, pick the .meta files as these must be there and > are unique) and that this archive is currently active (pminfo -f > pmcd.pmlogger.archive will help ... in fact that avoids any lexical sorting > completely and only lists the active ones). > > And it assumes the logging intervals for the metrics are similar (true by > default I think). Thanks, I'll definitely take a look at that. regards, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From kenj@internode.on.net Tue May 6 17:22:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E68497F37 for ; Tue, 6 May 2014 17:22:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id D178330404E for ; Tue, 6 May 2014 15:22:42 -0700 (PDT) X-ASG-Debug-ID: 1399414960-04cb6c1fcc24a4d0001-S8gJnT Received: from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net [150.101.137.141]) by cuda.sgi.com with ESMTP id sWsTHWM5kRRXZUOP for ; Tue, 06 May 2014 15:22:41 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.141 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuAuAKBfaVN20fC0PGdsb2JhbAANTYNVxTUHAYE4AwEBAQE4g1kwDRYYAwIBAgExJwYCAQGwVqYbF45vhCkEmnOVBQ Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail04.adl6.internode.on.net with ESMTP; 07 May 2014 07:52:39 +0930 Message-ID: <53696144.7030304@internode.on.net> Date: Wed, 07 May 2014 08:25:08 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - pmdaConnect for systemd pmda Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: pcp updates - pmdaConnect for systemd pmda Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail04.adl6.internode.on.net[150.101.137.141] X-Barracuda-Start-Time: 1399414960 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5594 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Changes from Frank, reviewed by Ken. Changes committed to git://oss.sgi.com/kenj/pcp.git dev src/pmdas/systemd/GNUmakefile | 4 src/pmdas/systemd/systemd.c | 15 +-- ... commit 1143add309d43c39b3a408ef17d189ce83cd2403 Merge: d09d8bc ef641e4 Author: Ken McDonell Date: Wed May 7 06:26:11 2014 +1000 Merge branch 'fche/systemd-slow' of git://sourceware.org/git/pcpfans into dev commit ef641e488d7e8eb1ecad1ee09df09d4718faa464 Author: Frank Ch. Eigler Date: Fri Apr 11 18:28:54 2014 -0400 pmda systemd: adopt slow-start capability This may fix RHBZ1073658. commit 8d0b3db3832d57fe22b77f00240d9ac894433675 Author: Frank Ch. Eigler Date: Fri Apr 11 14:33:42 2014 -0400 pmdasystemd: drop the .so mode of operation The C code doesn't work with the .so mode, so stop building the code that way entirely. From nscott@redhat.com Tue May 6 17:49:57 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F0B8E7F51 for ; Tue, 6 May 2014 17:49:57 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AF2A48F8033 for ; Tue, 6 May 2014 15:49:57 -0700 (PDT) X-ASG-Debug-ID: 1399416592-04bdf02b8d397310001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id wz8tFoMT1EBf2RCc for ; Tue, 06 May 2014 15:49:52 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s46MnpB5027626 for ; Tue, 6 May 2014 18:49:51 -0400 Date: Tue, 6 May 2014 18:49:51 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1996430040.1970536.1399416591535.JavaMail.zimbra@redhat.com> In-Reply-To: <1918896803.1969899.1399416369861.JavaMail.zimbra@redhat.com> Subject: pcp updates: pmimport move, pmdaproc fix, fche+kenj merge MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: pmimport move, pmdaproc fix, fche+kenj merge Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: pmimport move, pmdaproc fix, fche+kenj merge Thread-Index: 3RN0dktVZroSOjTWlh6PFkFdluE3bA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1399416592 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5595 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/279 | 2 qa/279.out | 8 src/GNUmakefile | 5 src/collectl2pcp/.gitignore | 2 src/collectl2pcp/GNUmakefile | 47 src/collectl2pcp/collectl2pcp.c | 268 ++++ src/collectl2pcp/cpu.c | 72 + src/collectl2pcp/disk.c | 53 src/collectl2pcp/generic.c | 35 src/collectl2pcp/header.c | 143 ++ src/collectl2pcp/load.c | 32 src/collectl2pcp/metrics.c | 1672 +++++++++++++++++++++++++++++++ src/collectl2pcp/metrics.h | 90 + src/collectl2pcp/net.c | 64 + src/collectl2pcp/pmdesc.c | 84 + src/collectl2pcp/proc.c | 191 +++ src/collectl2pcp/timestamp.c | 58 + src/collectl2pcp/util.c | 207 +++ src/iostat2pcp/.gitignore | 6 src/iostat2pcp/GNUmakefile | 43 src/iostat2pcp/README | 123 ++ src/iostat2pcp/iostat2pcp | 859 +++++++++++++++ src/mrtg2pcp/.gitignore | 6 src/mrtg2pcp/GNUmakefile | 43 src/mrtg2pcp/README | 13 src/mrtg2pcp/mrtg2pcp | 144 ++ src/pmcd/pmdaproc.sh | 4 src/pmdas/systemd/GNUmakefile | 4 src/pmdas/systemd/systemd.c | 15 src/pmimport/.gitignore | 1 src/pmimport/GNUmakefile | 31 src/pmimport/collectl2pcp/.gitignore | 2 src/pmimport/collectl2pcp/GNUmakefile | 47 src/pmimport/collectl2pcp/collectl2pcp.c | 268 ---- src/pmimport/collectl2pcp/cpu.c | 72 - src/pmimport/collectl2pcp/disk.c | 53 src/pmimport/collectl2pcp/generic.c | 35 src/pmimport/collectl2pcp/header.c | 143 -- src/pmimport/collectl2pcp/load.c | 32 src/pmimport/collectl2pcp/metrics.c | 1672 ------------------------------- src/pmimport/collectl2pcp/metrics.h | 90 - src/pmimport/collectl2pcp/net.c | 64 - src/pmimport/collectl2pcp/pmdesc.c | 84 - src/pmimport/collectl2pcp/proc.c | 191 --- src/pmimport/collectl2pcp/timestamp.c | 58 - src/pmimport/collectl2pcp/util.c | 207 --- src/pmimport/iostat2pcp/.gitignore | 6 src/pmimport/iostat2pcp/GNUmakefile | 43 src/pmimport/iostat2pcp/README | 123 -- src/pmimport/iostat2pcp/iostat2pcp | 859 --------------- src/pmimport/mrtg2pcp/.gitignore | 6 src/pmimport/mrtg2pcp/GNUmakefile | 43 src/pmimport/mrtg2pcp/README | 13 src/pmimport/mrtg2pcp/mrtg2pcp | 144 -- src/pmimport/sar2pcp/.gitignore | 6 src/pmimport/sar2pcp/GNUmakefile | 43 src/pmimport/sar2pcp/README | 81 - src/pmimport/sar2pcp/sar2pcp | 719 ------------- src/pmimport/sheet2pcp/.gitignore | 6 src/pmimport/sheet2pcp/GNUmakefile | 43 src/pmimport/sheet2pcp/sheet2pcp | 843 --------------- src/python/pcp/pmcc.py | 6 src/sar2pcp/.gitignore | 6 src/sar2pcp/GNUmakefile | 43 src/sar2pcp/README | 81 + src/sar2pcp/sar2pcp | 719 +++++++++++++ src/sheet2pcp/.gitignore | 6 src/sheet2pcp/GNUmakefile | 43 src/sheet2pcp/sheet2pcp | 843 +++++++++++++++ 69 files changed, 6019 insertions(+), 6049 deletions(-) commit 153a033fe6433de7e790833d2d5e60a8a9235870 Merge: 528c621 1143add Author: Nathan Scott Date: Wed May 7 08:43:53 2014 +1000 Merge branch 'dev' of git://git.performancecopilot.org/kenj/pcp into dev commit 528c621c19261da062082afca022c2918c786689 Author: Nathan Scott Date: Wed May 7 08:43:04 2014 +1000 Make pmcc python module prefer local: over localhost connections commit 1143add309d43c39b3a408ef17d189ce83cd2403 Merge: d09d8bc ef641e4 Author: Ken McDonell Date: Wed May 7 06:26:11 2014 +1000 Merge branch 'fche/systemd-slow' of git://sourceware.org/git/pcpfans into dev commit 8e7a26e10815d47099415b8cd7ca6ec8b9f56d9b Author: Nathan Scott Date: Tue May 6 17:20:37 2014 +1000 Fix a bug in the pmdaproc.sh pmcd_wait delay overrides Looks like this one has been lurking in there forever, but there is a typo (too few underscores) in the check on entering __wait_for_pmcd for a timeout override. Test qa/279 is updated to exercise the fix as well. commit c1060f4771fad4dee5cee48227e3bd94327aabf2 Author: Nathan Scott Date: Tue May 6 10:39:23 2014 +1000 Make pmimport sub-directories top level components The existence of a src/pmimport is a historical quirk that has resulted from there once being a pmimport(1) command on IRIX. We've long since moved to a model where each little importer is a self-contained command/script, instead of the DSO model that one (no-longer-existing) tool loads. So, move each import utility up to the src level where they nowadays rightly belong. commit ef641e488d7e8eb1ecad1ee09df09d4718faa464 Author: Frank Ch. Eigler Date: Fri Apr 11 18:28:54 2014 -0400 pmda systemd: adopt slow-start capability This may fix RHBZ1073658. commit 8d0b3db3832d57fe22b77f00240d9ac894433675 Author: Frank Ch. Eigler Date: Fri Apr 11 14:33:42 2014 -0400 pmdasystemd: drop the .so mode of operation The C code doesn't work with the .so mode, so stop building the code that way entirely. From nscott@redhat.com Tue May 6 22:00:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2E8157F37 for ; Tue, 6 May 2014 22:00:56 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 08580304053 for ; Tue, 6 May 2014 20:00:52 -0700 (PDT) X-ASG-Debug-ID: 1399431650-04bdf02b8a39e8e0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id CQqhtEkXDJcDQ1HN for ; Tue, 06 May 2014 20:00:50 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4730o5x007192 for ; Tue, 6 May 2014 23:00:50 -0400 Date: Tue, 6 May 2014 23:00:50 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <999840973.2073937.1399431650473.JavaMail.zimbra@redhat.com> In-Reply-To: <785556648.2072647.1399431009101.JavaMail.zimbra@redhat.com> Subject: pcp-gui updates: prepare for reentry MIME-Version: 1.0 X-ASG-Orig-Subj: pcp-gui updates: prepare for reentry Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp-gui updates: prepare for reentry Thread-Index: N9ZSQwcKBmIZ273B3T+GPXizP365OQ== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1399431650 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5602 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp/pcp-gui.git dev [snipped unhelpfully large diffstat] commit a6a1440019ab6c34d821639e642f29a9c76f203f Author: Nathan Scott Date: Wed May 7 12:47:08 2014 +1000 Remove last three configure-driven xml file generations These can easily be generated in the makefile, just like other files already were - make it so. Simplify merging into core PCP. commit e559d021ee49da73e1b041ceae3917aa1af47a33 Author: Nathan Scott Date: Wed May 7 11:44:34 2014 +1000 Rename libraries to match pcp conventions, merge preparation Several other improvements lurk herein also. The configure- driven project file creation is removed, and replaced with a different mechanism which drives debug/release build settings from build rules instead. Also, enable SVG chart generation support in Qwt builds, as pmchart support for that is planned. commit e064dcd41ece089cefc748bfb7f4d6821c2ba574 Author: Nathan Scott Date: Tue May 6 14:22:09 2014 +1000 Update pmchart Net views to filter more virt interface names commit 54ec46ad714c2ed2960f909039f1e77660f4b9cc Author: Nathan Scott Date: Tue May 6 14:17:12 2014 +1000 Switch to the naming conventions used in pcp git tree Rename several src subdirs to match the convention used in the pcp tree, in preparation for merging. commit 9c3122a6c719734dfe10f11947afad7a80ecc0aa Author: Nathan Scott Date: Tue May 6 13:53:50 2014 +1000 Refactor include/pmtime.h working towards tree unification One issue with reunifying pcp and pcp-gui is the presence of pmtime.h below the include directory in both trees. It has quite different contents in both places, although from a high level its all about time control clients. Its installed only in the pcp tree, so we'll go with that one as golden. Move the gui variant into Qmc (Qt Metrics Class) library, and do a better job of sharing some of the code backing it in the process. From pcolby@gmail.com Wed May 7 06:39:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id DC4BD7F3F for ; Wed, 7 May 2014 06:39:56 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id CA3FE8F8037 for ; Wed, 7 May 2014 04:39:56 -0700 (PDT) X-ASG-Debug-ID: 1399462792-04cbb03cc4393b40001-S8gJnT Received: from mail-yk0-f171.google.com (mail-yk0-f171.google.com [209.85.160.171]) by cuda.sgi.com with ESMTP id jT27l2CCDlSFcj2M (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 07 May 2014 04:39:52 -0700 (PDT) X-Barracuda-Envelope-From: pcolby@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.171 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] Received: by mail-yk0-f171.google.com with SMTP id 142so688153ykq.2 for ; Wed, 07 May 2014 04:39:52 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:message-id:subject:from:to:content-type; bh=D34wTcWTlBfA9s6XbaYScuwG7rFnXHLpqFQR3tfqggA=; b=hL369aYvO+loVK8qSDzplhftR8yiq8S1KYkoUTvOAQMVcbVgx/JWaz0NYga2ctBkJx NBlqQ0LVoXAo3T3gvZuPU138w4kBDtiEKUnmCeBqBWnrL7IOnReM8NfrIvM++qErF/zo lPLxDrSqjFLvAIz1Hjacq4XeoZdH8SjsMUwNMIAZHvqeNzaZNwq/BVf/8dcW2siF47GH 5XVrbrp3DciEqfDWCtEpdy9QpEcA9yFTddwPjbwEdvXA2CQG6Vh6KCMdOJZAszlWR+EE duQT2qERDHlqPm9E9NtVXHahGKzcPCPnWFXf+V+yCAgfUQFSkSRfzpcWMfPLtpWMOSOE k1ag== MIME-Version: 1.0 X-Received: by 10.236.133.145 with SMTP id q17mr67411938yhi.3.1399462791973; Wed, 07 May 2014 04:39:51 -0700 (PDT) Sender: pcolby@gmail.com Received: by 10.170.191.133 with HTTP; Wed, 7 May 2014 04:39:51 -0700 (PDT) Date: Wed, 7 May 2014 21:39:51 +1000 X-Google-Sender-Auth: IgWlMw1EvZcVcr3LvGab0NAfyNU Message-ID: Subject: What does "sts" stand for? From: Paul Colby X-ASG-Orig-Subj: What does "sts" stand for? To: pcp@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-yk0-f171.google.com[209.85.160.171] X-Barracuda-Start-Time: 1399462792 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5610 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi guys, I'm just curious... in various places, such as the pmdaCache man page, and the Simple PMDA example, PCP API return values are assigned to variables called "sts". I understand that this, usually at least, an integer such that negative values indicate errors, etc, but I'm just curious as to the choice of the three letters "sts". Do they stand for something in particular? Cheers, pc ---- http://colby.id.au From kenj@internode.on.net Wed May 7 07:46:56 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 36CFE7F52 for ; Wed, 7 May 2014 07:46:56 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 26E8F30404E for ; Wed, 7 May 2014 05:46:55 -0700 (PDT) X-ASG-Debug-ID: 1399466810-04cb6c1fcc266990001-S8gJnT Received: from ipmail07.adl2.internode.on.net (ipmail07.adl2.internode.on.net [150.101.137.131]) by cuda.sgi.com with ESMTP id CWK5Ad2TMto9DmmE for ; Wed, 07 May 2014 05:46:51 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.131 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApMBAJMqalN20fC0/2dsb2JhbAANTcY0gxEBgTCDGQEBAQQ4QBELGAkWDwkDAgECAUUTCAEBsUimOBeOWRaEKQEDr3g Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail07.adl2.internode.on.net with ESMTP; 07 May 2014 22:16:50 +0930 Message-ID: <536A2BC4.2060400@internode.on.net> Date: Wed, 07 May 2014 22:49:08 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] What does "sts" stand for? References: X-ASG-Orig-Subj: Re: [pcp] What does "sts" stand for? In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail07.adl2.internode.on.net[150.101.137.131] X-Barracuda-Start-Time: 1399466810 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5611 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On 07/05/14 21:39, Paul Colby wrote: > Hi guys, > > I'm just curious... in various places, such as the pmdaCache man page, > and the Simple PMDA example, PCP API return values are assigned to > variables called "sts". I understand that this, usually at least, an > integer such that negative values indicate errors, etc, but I'm just > curious as to the choice of the three letters "sts". Do they stand > for something in particular? G'day Paul. It is a truncation of status ... from the days of FortranIV and punched cards long before VeryLongCamelCaseVariableNames became popular. Blame me. From ofvekk43uu@cursa.com Wed May 7 12:24:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,MIME_QP_LONG_LINE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 16FF97F3F for ; Wed, 7 May 2014 12:24:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id DE0578F8035 for ; Wed, 7 May 2014 10:24:10 -0700 (PDT) X-ASG-Debug-ID: 1399483444-04bdf02b8b3c4290001-S8gJnT Received: from smtp42.singnet.com.sg (smtp42.singnet.com.sg [165.21.103.146]) by cuda.sgi.com with ESMTP id mOAS44wVMkQEWAaA for ; Wed, 07 May 2014 10:24:05 -0700 (PDT) X-Barracuda-Envelope-From: ofvekk43uu@cursa.com X-Barracuda-Apparent-Source-IP: 165.21.103.146 Received: from [172.16.183.120] ([116.12.183.94]) by smtp42.singnet.com.sg (8.14.3/8.14.1) with ESMTP id s47HNFBk027438; Thu, 8 May 2014 01:23:42 +0800 Message-Id: <201405071723.s47HNFBk027438@smtp42.singnet.com.sg> Content-Type: multipart/alternative; boundary="===============1414214594==" MIME-Version: 1.0 Subject: NetSpend - New Message To: Recipients X-ASG-Orig-Subj: NetSpend - New Message From: "NetSpend" Date: Thu, 08 May 2014 01:23:45 +0800 X-PMX-Version: 5.5.2.363555, Antispam-Engine: 2.6.1.350677, Antispam-Data: 2014.5.7.171819 X-PMX-AS: AS-Check X-PMX-Score: Probability=10% X-Barracuda-Connect: smtp42.singnet.com.sg[165.21.103.146] X-Barracuda-Start-Time: 1399483444 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.82 X-Barracuda-Spam-Status: No, SCORE=1.82 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH, BSF_SC7_SA578_CH, HTML_MESSAGE, MIME_QP_LONG_LINE, MIME_QP_LONG_LINE_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5617 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.82 MIME_QP_LONG_LINE_2 RAW: Quoted-printable line longer than 76 chars 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address 0.50 BSF_SC7_SA578_CH Custom Rule SA578_CH You will not see this in a MIME-aware mail reader. --===============1414214594== Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body netSpend Survey Department selected you to take part in our quick survey. = To earn your 80$ reward, please click here . = =20 --===============1414214594== Content-Type: text/html; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body

netSpend Survey Department selected you to take part in our quick s= urvey.

To earn your 80$ reward, please click here .

 

--===============1414214594==-- From pcolby@gmail.com Wed May 7 16:18:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A9D7D7F52 for ; Wed, 7 May 2014 16:18:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 52B23AC003 for ; Wed, 7 May 2014 14:18:37 -0700 (PDT) X-ASG-Debug-ID: 1399497515-04cb6c72913cd610001-S8gJnT Received: from mail-yk0-f171.google.com (mail-yk0-f171.google.com [209.85.160.171]) by cuda.sgi.com with ESMTP id 36XXZFg6d05YgABN (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Wed, 07 May 2014 14:18:35 -0700 (PDT) X-Barracuda-Envelope-From: pcolby@gmail.com X-Barracuda-Apparent-Source-IP: 209.85.160.171 X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] Received: by mail-yk0-f171.google.com with SMTP id 142so1386508ykq.2 for ; Wed, 07 May 2014 14:18:35 -0700 (PDT) X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] X-Barracuda-IPDD: Level1 [gmail.com/209.85.160.171] DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=rjj2xd4OUHlxdA+EBr2lh90+jmWRPx31MIF8z0cBdUo=; b=wMHEFsT2WYNzZJBniEGbzlE0i3MVAVmjoIBGDA7K9KoQo36vwmdWvrauGjn/9M1ihO e8D90FTMOyGDItnS6ncelaqXWCKLe6dSsDuSBmr4gDH2sdRD2QOuYBSu+A0uGs763vi9 j7oYsETkKKyD3VMsG2w3rTFfYbNEPES2hIpJs7Q6jVms1mOOwAa/CVzNKpu9r51rE2Ak JroRNr8UPJbEukVTqH/bko03aYJ56YUlyUryIHYuVMP12dZR3fpUMm9Ir/yWrS2aINBU nTAoaFJA0DLm8FKOmZy/S8hB5/CetWfK1JDOMWEw79qRHG2EWMvHgIje4ZlU1aGPFiWU ng5Q== MIME-Version: 1.0 X-Received: by 10.236.82.207 with SMTP id o55mr71395760yhe.13.1399497515109; Wed, 07 May 2014 14:18:35 -0700 (PDT) Sender: pcolby@gmail.com Received: by 10.170.191.133 with HTTP; Wed, 7 May 2014 14:18:35 -0700 (PDT) In-Reply-To: <536A2BC4.2060400@internode.on.net> References: <536A2BC4.2060400@internode.on.net> Date: Thu, 8 May 2014 07:18:35 +1000 X-Google-Sender-Auth: wla5w2KkCtlNSVNDoiSg6kVwvmg Message-ID: Subject: Re: [pcp] What does "sts" stand for? From: Paul Colby X-ASG-Orig-Subj: Re: [pcp] What does "sts" stand for? To: Ken McDonell Cc: pcp@oss.sgi.com Content-Type: text/plain; charset=UTF-8 X-Barracuda-Connect: mail-yk0-f171.google.com[209.85.160.171] X-Barracuda-Start-Time: 1399497515 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5622 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Thanks Ken :) pc. On Wed, May 7, 2014 at 10:49 PM, Ken McDonell wrote: > On 07/05/14 21:39, Paul Colby wrote: >> >> Hi guys, >> >> I'm just curious... in various places, such as the pmdaCache man page, >> and the Simple PMDA example, PCP API return values are assigned to >> variables called "sts". I understand that this, usually at least, an >> integer such that negative values indicate errors, etc, but I'm just >> curious as to the choice of the three letters "sts". Do they stand >> for something in particular? > > > > G'day Paul. > > It is a truncation of status ... from the days of FortranIV and punched > cards long before VeryLongCamelCaseVariableNames became popular. > > Blame me. > > _______________________________________________ > pcp mailing list > pcp@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/pcp From nscott@redhat.com Thu May 8 18:32:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CCC867F53 for ; Thu, 8 May 2014 18:32:24 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 62103AC013 for ; Thu, 8 May 2014 16:32:21 -0700 (PDT) X-ASG-Debug-ID: 1399591936-04cbb03cc73ec0b0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 60zErgMYv8SZybEf for ; Thu, 08 May 2014 16:32:16 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s48NWFbB024121 for ; Thu, 8 May 2014 19:32:16 -0400 Date: Thu, 8 May 2014 19:32:15 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1288451386.3614375.1399591935746.JavaMail.zimbra@redhat.com> In-Reply-To: <108499473.3613230.1399591282381.JavaMail.zimbra@redhat.com> Subject: Tree merge complete MIME-Version: 1.0 X-ASG-Orig-Subj: Tree merge complete Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Tree merge complete Thread-Index: GqRkUKAFFYMT2xK8ARmjBORwjn583Q== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1399591936 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5653 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi all, The pcp-gui<->pcp git tree merge is now done & in the dev branch. I'm doing a few packaging builds on various platforms now, so I'd expect a few small follow-up commits to fix up small details from those. But the ./configure && make should work fine now, and all of the QA tests should continue to pass. And Makepkgs RPM builds are working OK. Note the new --with-qt / --without-qt configure options, default is on (with a Qt/qmake verification check or two of course), but you can explicitly disable it should the need arise. commit 353590b93dda7bf2c6c13aa8d96210c61c9dc3bd Merge: 153a033 a6a1440 Author: Nathan Scott Date: Fri May 9 08:48:23 2014 +1000 Stitch the pcp-gui and pcp git trees back together again Following up on discussion from the last two developers meetings, this commit merges the pcp-gui tree back into pcp. This includes all of the commands, man pages, books, QA, configury, and so on. The configure script will now dynamically switch on/off the Qt components depending on whether a viable (4.4+) Qt toolchain is found. cheers. -- Nathan From nscott@redhat.com Fri May 9 02:03:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id D9CC57F51 for ; Fri, 9 May 2014 02:03:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B49018F8039 for ; Fri, 9 May 2014 00:03:00 -0700 (PDT) X-ASG-Debug-ID: 1399618973-04bdf02b8d4284f0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id vq7EGOlBBWdAMRBs for ; Fri, 09 May 2014 00:02:53 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4972roZ025367 for ; Fri, 9 May 2014 03:02:53 -0400 Date: Fri, 9 May 2014 03:02:53 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <603056405.3785419.1399618972999.JavaMail.zimbra@redhat.com> In-Reply-To: <1926051800.3785046.1399618942919.JavaMail.zimbra@redhat.com> Subject: pcp updates: merge fallout MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: merge fallout Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: merge fallout Thread-Index: j5ugmbgb2dTPcm2lQ3u7Hz5UXDstqw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399618973 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5663 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev configure | 2 configure.in | 2 debian/GNUmakefile | 2 debian/pcp-doc.install | 12 debian/pcp-gui.install | 3 debian/rules | 14 dev/null |binary man/html/cpuperf/GNUmakefile | 4 man/html/diskmodel/GNUmakefile | 4 man/html/diskperf/GNUmakefile | 4 man/html/images/GNUmakefile | 2 man/html/pmie/GNUmakefile | 4 man/html/pmview/GNUmakefile | 4 man/man1/GNUmakefile | 1 qa/.gitignore | 21 qa/1001 | 2 qa/1001.out | 2 qa/1002 | 2 qa/1002.out | 2 qa/1003 | 2 qa/1003.out | 2 qa/1004 | 2 qa/1004.out | 2 qa/1005 | 2 qa/1005.out | 2 qa/1006 | 2 qa/1006.out | 2 qa/1007 | 2 qa/1007.out | 2 qa/1008 | 2 qa/1008.out | 2 qa/1009 | 2 qa/1009.out | 2 qa/1010 | 2 qa/1010.out | 2 qa/1011 | 2 qa/1011.out | 2 qa/1012 | 2 qa/1012.out | 2 qa/1013 | 6 qa/1013.out | 2 qa/1014 | 4 qa/1014.out | 2 qa/1015 | 4 qa/1015.out | 2 qa/1016 | 4 qa/1016.out | 2 qa/1017 | 4 qa/1017.out | 2 qa/1018 | 6 qa/1018.out | 2 qa/1019 | 4 qa/1019.out | 2 qa/1020 | 4 qa/1020.out | 2 qa/1021 | 4 qa/1021.out | 2 qa/1022 | 2 qa/1022.out | 2 qa/1023 | 2 qa/1023.out | 2 qa/1024 | 35 - qa/1024.out | 4 qa/1025 | 2 qa/1025.out | 2 qa/1026 | 2 qa/1026.out | 2 qa/1027 | 2 qa/1027.out | 2 qa/1028 | 2 qa/1028.out | 2 qa/1029 | 2 qa/1029.out | 2 qa/151 | 24 qa/151.out | 195 ++++++++ qa/151.out.1 | 195 -------- qa/151.out.2 | 195 -------- qa/GNUmakefile | 5 qa/archives/GNUmakefile | 6 qa/common.cmd | 255 ---------- qa/group | 1 qa/qt/.gitignore | 20 qa/qt/GNUmakefile | 24 qa/qt/GNUmakefile.install | 41 + qa/qt/qmc_context/GNUmakefile | 31 + qa/qt/qmc_context/GNUmakefile.install | 18 qa/qt/qmc_context/qmc_context.cpp | 241 +++++++++ qa/qt/qmc_context/qmc_context.pro | 12 qa/qt/qmc_desc/GNUmakefile | 31 + qa/qt/qmc_desc/GNUmakefile.install | 18 qa/qt/qmc_desc/qmc_desc.cpp | 98 ++++ qa/qt/qmc_desc/qmc_desc.pro | 12 qa/qt/qmc_dynamic/GNUmakefile | 31 + qa/qt/qmc_dynamic/GNUmakefile.install | 18 qa/qt/qmc_dynamic/qmc_dynamic.cpp | 347 ++++++++++++++ qa/qt/qmc_dynamic/qmc_dynamic.pro | 12 qa/qt/qmc_event/GNUmakefile | 31 + qa/qt/qmc_event/GNUmakefile.install | 18 qa/qt/qmc_event/qmc_event.cpp | 85 +++ qa/qt/qmc_event/qmc_event.pro | 12 qa/qt/qmc_format/GNUmakefile | 31 + qa/qt/qmc_format/GNUmakefile.install | 18 qa/qt/qmc_format/qmc_format.cpp | 37 + qa/qt/qmc_format/qmc_format.pro | 12 qa/qt/qmc_group/GNUmakefile | 31 + qa/qt/qmc_group/GNUmakefile.install | 18 qa/qt/qmc_group/qmc_group.cpp | 827 ++++++++++++++++++++++++++++++++++ qa/qt/qmc_group/qmc_group.pro | 12 qa/qt/qmc_hosts/GNUmakefile | 31 + qa/qt/qmc_hosts/GNUmakefile.install | 18 qa/qt/qmc_hosts/qmc_hosts.cpp | 115 ++++ qa/qt/qmc_hosts/qmc_hosts.pro | 12 qa/qt/qmc_indom/GNUmakefile | 31 + qa/qt/qmc_indom/GNUmakefile.install | 18 qa/qt/qmc_indom/qmc_indom.cpp | 133 +++++ qa/qt/qmc_indom/qmc_indom.pro | 12 qa/qt/qmc_metric/GNUmakefile | 31 + qa/qt/qmc_metric/GNUmakefile.install | 18 qa/qt/qmc_metric/qmc_metric.cpp | 280 +++++++++++ qa/qt/qmc_metric/qmc_metric.pro | 12 qa/qt/qmc_source/GNUmakefile | 31 + qa/qt/qmc_source/GNUmakefile.install | 18 qa/qt/qmc_source/qmc_source.cpp | 126 +++++ qa/qt/qmc_source/qmc_source.pro | 12 qa/src/qmc_context/GNUmakefile | 22 qa/src/qmc_context/qmc_context.cpp | 241 --------- qa/src/qmc_context/qmc_context.pro | 12 qa/src/qmc_desc/GNUmakefile | 22 qa/src/qmc_desc/qmc_desc.cpp | 98 ---- qa/src/qmc_desc/qmc_desc.pro | 12 qa/src/qmc_dynamic/GNUmakefile | 22 qa/src/qmc_dynamic/qmc_dynamic.cpp | 347 -------------- qa/src/qmc_dynamic/qmc_dynamic.pro | 12 qa/src/qmc_event/GNUmakefile | 22 qa/src/qmc_event/qmc_event.cpp | 85 --- qa/src/qmc_event/qmc_event.pro | 12 qa/src/qmc_format/GNUmakefile | 22 qa/src/qmc_format/qmc_format.cpp | 37 - qa/src/qmc_format/qmc_format.pro | 12 qa/src/qmc_group/GNUmakefile | 22 qa/src/qmc_group/qmc_group.cpp | 827 ---------------------------------- qa/src/qmc_group/qmc_group.pro | 12 qa/src/qmc_hosts/GNUmakefile | 22 qa/src/qmc_hosts/qmc_hosts.cpp | 115 ---- qa/src/qmc_hosts/qmc_hosts.pro | 12 qa/src/qmc_indom/GNUmakefile | 22 qa/src/qmc_indom/qmc_indom.cpp | 133 ----- qa/src/qmc_indom/qmc_indom.pro | 12 qa/src/qmc_metric/GNUmakefile | 22 qa/src/qmc_metric/qmc_metric.cpp | 280 ----------- qa/src/qmc_metric/qmc_metric.pro | 12 qa/src/qmc_source/GNUmakefile | 22 qa/src/qmc_source/qmc_source.cpp | 126 ----- qa/src/qmc_source/qmc_source.pro | 12 qa/views/GNUmakefile | 4 src/libpcp_qmc/src/GNUmakefile | 14 src/libpcp_qwt/src/GNUmakefile | 12 src/pmchart/GNUmakefile | 17 src/pmchart/views/GNUmakefile | 6 src/pmdumptext/GNUmakefile | 13 src/pmquery/GNUmakefile | 13 src/pmtime/GNUmakefile | 13 162 files changed, 3361 insertions(+), 3472 deletions(-) commit 15c46fbad01b70a0dee10fbac55d20902bd9a4d1 Author: Nathan Scott Date: Fri May 9 16:02:38 2014 +1000 Correct a path for Debian packaging of pcp-gui files commit 34f9fa7529c3007955c19785eacbf38972857fc5 Author: Nathan Scott Date: Fri May 9 16:00:50 2014 +1000 Ensure pmchart is descended properly, else views missing from packages commit 2989d4774d4e2052bf11c909952dea6294b33890 Author: Nathan Scott Date: Fri May 9 15:44:49 2014 +1000 Add the pcp-gui section 1 man pages back into the mix commit 50f0e6b4be8df2358d5965a6466fa9720074c440 Author: Nathan Scott Date: Fri May 9 15:31:31 2014 +1000 Ensure test qa/151 is running, after longopts conversions commit 7df651fa6a254bdd38a2c015adf36eaa09ae6d6a Author: Nathan Scott Date: Fri May 9 15:29:24 2014 +1000 Work toward getting installed pcp-testsuite QA runs working again commit 8f93549721dfb5d61b7a95936a8076a8f2ffa40d Author: Nathan Scott Date: Fri May 9 14:01:42 2014 +1000 Fixes to Debian packaging after pcp-gui git merge commit 4736a17f6cd228c8923cd057c475a031af85d53b Author: Nathan Scott Date: Fri May 9 13:34:28 2014 +1000 Fix the generation of pcp_doc_dir, had an empty PACKAGE setting commit 95872b76a9f07ca60afaa14fd3eb9b4b0aaffe62 Author: Nathan Scott Date: Fri May 9 13:31:43 2014 +1000 Remove an unused file from QA, leftover from gui merge commit 36ee7e382906d5a575bf25d56ba1190651ddc76d Author: Nathan Scott Date: Fri May 9 11:26:51 2014 +1000 Update Qt lib makefiles for non-qt-enabled builds commit cace6b7b774692cc8ac64dee8f66476e1d9fb3bf Author: Nathan Scott Date: Fri May 9 10:33:24 2014 +1000 Resolve several incorrect packaging paths, merge fallout From karen.wrench@tiscali.co.uk Fri May 9 07:59:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.3 required=5.0 tests=FREEMAIL_FROM,FREEMAIL_REPLYTO, FREEMAIL_REPLYTO_END_DIGIT,HTML_MESSAGE,T_FREEMAIL_DOC_PDF autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 34F747F51 for ; Fri, 9 May 2014 07:59:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3D9498F8035 for ; Fri, 9 May 2014 05:59:31 -0700 (PDT) X-ASG-Debug-ID: 1399640364-04cbb03cc6405960001-S8gJnT Received: from out.ipsmtp3nec.opaltelecom.net (out.ipsmtp3nec.opaltelecom.net [62.24.202.75]) by cuda.sgi.com with ESMTP id 5LWYa7TNK4KXQYeF (version=TLSv1 cipher=RC4-SHA bits=128 verify=NO) for ; Fri, 09 May 2014 05:59:25 -0700 (PDT) X-Barracuda-Envelope-From: karen.wrench@tiscali.co.uk X-Barracuda-Apparent-Source-IP: 62.24.202.75 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: At0HAGvQbFM+GIt+/2dsb2JhbADKcYEJ X-IPAS-Result: At0HAGvQbFM+GIt+/2dsb2JhbADKcYEJ X-IronPort-AV: E=Sophos;i="4.97,1018,1389744000"; d="pdf'?scan'208";a="140402686" Received: from lb-mask.bir.opaltelecom.net (HELO ms6gb1.int.opaltelecom.net) ([62.24.139.126]) by out.ipsmtp3nec.opaltelecom.net with ESMTP; 09 May 2014 13:59:24 +0100 Received: from (41.189.42.227) by webmail.tiscali.co.uk; Fri, 9 May 2014 13:59:24 +0100 Message-ID: <16389446.866611399640364367.JavaMail.defaultUser@defaultHost> Date: Fri, 9 May 2014 13:59:24 +0100 (BST) From: "karen.wrench@tiscali.co.uk" Reply-To: carol_s1975@live.com Subject: =?UTF-8?B?dHI6IFJlIOKAj+KAj+KAjw==?= =?UTF-8?B?4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP?= =?UTF-8?B?4oCP4oCP4oCP4oCPQ09ORklSTUFUSU9O4oCP4oCP4oCP4oCP?= MIME-Version: 1.0 X-ASG-Orig-Subj: =?UTF-8?B?dHI6IFJlIOKAj+KAj+KAjw==?= =?UTF-8?B?4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP4oCP?= =?UTF-8?B?4oCP4oCP4oCP4oCPQ09ORklSTUFUSU9O4oCP4oCP4oCP4oCP?= Content-Type: multipart/mixed; boundary="----=_Part_25693_19708771.1399640364251" X-Barracuda-Connect: out.ipsmtp3nec.opaltelecom.net[62.24.202.75] X-Barracuda-Start-Time: 1399640365 X-Barracuda-Encrypted: RC4-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.51 X-Barracuda-Spam-Status: No, SCORE=2.51 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MV0224, BSF_SC0_TG783c, BSF_SC0_TG783d, HTML_MESSAGE, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5669 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.21 MISSING_HEADERS Missing To: header 0.00 HTML_MESSAGE BODY: HTML included in message 0.50 BSF_SC0_MV0224 FULL: Custom rule MV0224 0.00 TO_CC_NONE No To: or Cc: header 0.30 BSF_SC0_TG783c Custom Rule TG783c 0.50 BSF_SC0_TG783d Custom Rule TG783d To: undisclosed-recipients:; ------=_Part_25693_19708771.1399640364251 Content-Type: multipart/alternative; boundary="----=_Part_25694_29519493.1399640364251" ------=_Part_25694_29519493.1399640364251 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Madame /Monsieur, Nous sommes heureux de vous informer du r=C3=A9sultat des programmes internationaux de gagnants de loterie tenus il y a deux jours de cela =C3=A0 notre si=C3=A8ge sis =C3=A0 New York. Votre adres= se E-mail =C3=A9t=C3=A9 d=C3=A9sign=C3=A9 comme gagnants de cette ann=C3=A9e v= ous faites donc partie des heureux (es) gagnants de la LOTERIE MICROSOFT BILL GATES=20 FONDATION. Veuillez trouvez en fichier joint votre NOTIFICATION DE VOTRE GAIN DE 250.000=E2=82=AC. Pour toute information veuillez adresser par E-mail le formulaire suivant c= i dessous que vous devez remplir =C3=A0 l=E2=80=99adresse E-mail de Ma=C3=AEtre JACQUES CAPLAIN charg=C3=A9 de vou= s indiquer les conditions g=C3=A9n=C3=A9rales de remise de votre gain. FORMULAIRE DE V=C3=89RIFICATION VOTRE NOM ET PR=C3=89NOMS : AGE : SEXE : ADRESSE PERMANENTE : PAYS : VILLE : CODE POSTAL : FONCTION: MOBILE : SITUATION MATRIMONIALE: Contacter Me JACQUES CAPLAIN =C3=89mail: maitre.jacques_caplain@hotmail.fr T=C3=A9l=C3=A9phone : ( 00225 ) 41 50 68 85 Madame Solange Fournier =20 coordinatrice et directrice des op=C3=A9rations Recevez les f=C3=A9licitations une fois de plus de nos membres du Programme= =09=09 =09 =09=09 =09=09 =09 =09=09 =20 =20 ------=_Part_25694_29519493.1399640364251 Content-Type: text/html;charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Madame = /Monsieur,

Nous sommes heureux de vous informer du r=C3=A9sultat d= es
programmes internationaux de gagnants de loterie tenus il y a
deux= jours de cela =C3=A0 notre si=C3=A8ge sis =C3=A0 New York. Votre adresseE-mail =C3=A9t=C3=A9 d=C3=A9sign=C3=A9 comme gagnants de cette ann=C3=A9e= vous faites donc
partie des heureux (es) gagnants de la LOTERIE MICROSOFT  BILL GATES=20 FONDATION. Veuillez trouvez en fichier joint votre NOTIFICATION DE VOTRE GAIN DE 250.000=E2=82=AC.
Pour toute information veuillez= adresser par E-mail le formulaire suivant ci dessous que vous devez rempli= r =C3=A0
l=E2=80=99adresse E-mail de Ma=C3=AEtre  JACQUES CAPLAIN <= /span>charg=C3=A9 de vous indiquer les conditions g=C3=A9n=C3=A9rales de re= mise de votre
gain.

FORMULAIRE DE V=C3=89RIFICATION
VOTRE NOM = ET PR=C3=89NOMS :
AGE :
SEXE :
ADRESSE PERMANENTE :
PAYS :
V= ILLE :
CODE POSTAL :
FONCTION:
MOBILE :
SITUATION MATRIMONIALE:=

Contacter Me JACQUES CAPLAIN
=C3=89mail: maitre.jacques_caplain= @hotmail.fr
T=C3=A9l=C3=A9phone : ( 00225 ) 41 50 6= 8 85
Madame Solange Fournier  
coordinatrice et directrice des op=C3=A9rations
Recevez les f=C3=A9licitations une fois de plus de nos membres du Programm= e
=09=09 =09 =09=09
=09=09 =09 =09=09=
=

------=_Part_25694_29519493.1399640364251-- ------=_Part_25693_19708771.1399640364251 Content-Type: APPLICATION/PDF; name=2012_melanchon.pps-.pdf Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=2012_melanchon.pps-.pdf; size=306840 JVBERi0xLjUKJeLjz9MKMSAwIG9iaiAKPDwKL01hcmtJbmZvIAo8PAovTWFya2VkIHRydWUKPj4K L0xhbmcgKGZyLUZSKQovUGFnZXMgMiAwIFIKL1N0cnVjdFRyZWVSb290IDMgMCBSCi9UeXBlIC9D YXRhbG9nCj4+CmVuZG9iaiAKMiAwIG9iaiAKPDwKL0tpZHMgWzQgMCBSIDUgMCBSXQovQ291bnQg MgovVHlwZSAvUGFnZXMKPj4KZW5kb2JqIAo0IDAgb2JqIAo8PAovR3JvdXAgCjw8Ci9DUyAvRGV2 aWNlUkdCCi9UeXBlIC9Hcm91cAovUyAvVHJhbnNwYXJlbmN5Cj4+Ci9TdHJ1Y3RQYXJlbnRzIDAK L1BhcmVudCAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUuMiA4NDEuNDRdCi9SZXNvdXJjZXMgCjw8 Ci9Gb250IAo8PAovRjIgNiAwIFIKL0YxIDcgMCBSCi9GNCA4IDAgUgovRjMgOSAwIFIKPj4KL1hP YmplY3QgCjw8Ci9JbWFnZTUgMTAgMCBSCj4+Ci9Qcm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIg L0ltYWdlQyAvSW1hZ2VJXQo+PgovVGFicyAvUwovQ29udGVudHMgMTEgMCBSCi9UeXBlIC9QYWdl Cj4+CmVuZG9iaiAKMTEgMCBvYmogCjw8Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9MZW5ndGggMzM1 Mwo+PgpzdHJlYW0KeJzNW1lv40YSfjfg/9B5IxcRh83u5rEIBNiynSgZOxPHSRBs9oFj014vZNmj YzDYX5tX/4utqj4pSpZsMUASWEORxe46vrq6W+zdB/bNN+/OR+MTlg6H7PhkxD4dHqhKJZliKfxf Sp5IvBykSZpWRSpzdv1wePBu/FDfNYqdPLKfDg/Y6Tm9WKRJmUmWFzIRJZOySkrBMpGkks2aw4Pf /sGmQBxMyt+9r6d3LGqmg2+PY8/BTgMdXwEfZ5xVSZWzq9vDA04sc2bfLsuEl+zqwT6Z3dmry28P D/4VnR/FefR9PFDRj/FARpfsfBwPyuj9+1hGY7gloot4wLPoZ/jOTuCSR0dw+Ws8KCJgHm6k0THc uByPiO4HuD6PBxVRXbD43+zq+8ODU2ATdLS3VJkskpSvSJUUZeklM9+0dKfAxC+XIEYefUCO8bvm Gdk7iwdZdElsj39CUX85jUXELkjK0zgro99AJ3Dn95gXRj9OSDZyyrg8QpWNj3EanOHnfaTOGM9a MkuUuQhlTtkdfpCEKxomFIboyvoGVJGDhndQ/fsfUbtXoCRFSrkck/JPY2VustERmgSBNb4g5bKv EDhfkX2+gv/gCX72qUxelUmahVK8oMw1Xq14UkkYVCZpCf8k+QanFl21v/Sq1TrnKMU6tSsQVhqG UwCCVbv/ptV+ERtPvhqfxYDPMV6P4CYC9WpMrnCxUaXbeexqVJYJBMQWg6/QqIK5OGcCwq2qGE8F DrZep7Kj0/DlovvyVixzYn27Uk+apyVi9R70OMdYySYQNWtEK9NPPk5Qz/j8Gp/Xi3uMJ49TF2+m j3C5qGfwRQAdWKGexEXUMAwdN42jO59tjJlvlTYTKhFFS1otHbgPWFlL3LpjpKaw9iv6ZyvQU9wb /YAPfaT/ej+2sy7bIoO4p9pG8sCaoOZENMOP53lTk16XYBWGYecGjdDsydEK0AXGm438bIvD6m3g XaMXC94U1OPAC6ZTENcMeM03k+Fr1NF/yYCPqBfSGanp/H4yuX9E5E5Bc3NMfn1bkQuJaavFrdfa k+OHOLsDLuhbM5+DK93fxpVl9JpyRptUG/0h5hV6FDoZ3LyzGKgZCrYAap4TMq7/A0B9prsaH8xK jjQF0XyGPwKTgq9A88WOhsrRZA+x/msWVAvgg3+ySYNERLkghS7AvfuFX8UTUW1S5Db45X3DD+tj 1Y33J82cPWFArO97R1LKUfINEzceC/oS7bqY67iaBfc0vu5iaTCD9lvMkOaZWAdYzSjE460JiFMj 7boxNR2Nd/8ZAFF7Gvan87EMiRR+pGZYLg1mwflQVYRn74AufHmkEsVkUtNcSJX0jK28SvJik2q3 Yat4G7bEZmyVEou0FT6+SdNMpqmqhgouZQl/+XAg4DoVw0EG/3I1HOAzLvW/9r6ASyk1rTwZgtXh QmWaSKlhuUo7gr8z8zfSpBJJ+TDHf/JhOKsSbiCawQ4sjzS1uY0Mq5zepqcjw4esaP6VQYm60N9F IBI/aotmJkHpuAgm5e3blvOCJpLhAE4fpRFDM6LMhPb2cU5s5kf6VblGcGQXJSTe/YTpmX+FNFp6 sda9KiXN2mKyMColHQ57jqsiKaoNmNuK/bL3uFpkWAiv8vEBC62XE6WLHpQsM0cNKStMllDFTjGw 6DzZd4yGGinPNgkx6H+6IinzTdPtJ92a8MRLLJA3TGdgygvvLN4rw4BSEryLMGIY3z/TaHeol11f wxHQJeWakHFmfEcZXzOhoQxGgYBZaqcOQ5MdIRsZfrzzErdAxsOoUtqosuLdhiErvXbWQWUphY/Y od8XaZsLy5ybrOcqvkgysSNkOu5e9e7uOcfFnVU+jlt1Af7pakC3O1RgYbW6gD7Tle+rlcNtXEb1 RyTVJUr/ziewst8gwSdkZGkYhwI8YCwo2HX7kQH/RtT6foYkzTxhVIRfQrHlIl7jCzO8X9euA7yj 0T9joUY0X7tqfAT3TvHiR+oX/+y5cFKgFrVJB9vQxNPeKydZJUqtCU2urMmNk60vVnzBkA55FZYp 4I4h4UuxSuZ6XBoABirC8cpuRYJBgJ/o9zkOcCyw1BvawKHjEDzjJpTCu0VQFYQVluXBlYKmfOGi XTd15Fut97JA5pVAmxYrNZiud8KCxYVradReGtFe0oOtzFZVmxvSVlz15SGpxQfN3qMl4nstrLbj m/eOb1EmqVjXGZRG8cdencpDEy0aZlxXUAZoMqZy6TPMm2ENL/RQBdf31QrtauXemsqmQXjPJDcN Pl/yWucpAqOuYvflLI4oBqisQ9mGbsGTaWddB05iu9B8heL2HlhWSn4DejdcZbRquiZrGG24nhuD jCqFtZDbjv3uxsu+pUKWJ4p3GDla4pqFW6ea1MvYLEo8U3706xVrF71c10BZltbjnmd6CbtZxia9 OqKJXt5R0WSJw7j79WJBhPU1TXn/GWoPvWTiSJovwEcwfu/1SFZBM1BtUpNfwLmmKxDkBhWn9aFX R0Fg6Vf7lrbHojtjvKK1nWZmNdgs+l6HAREKtUmErXspUpW4Qi3SDPerOU9UtmnPubs/9fLL27ZS IGwh5+Hmgv5U8BluMPi7enV6NNErcXn0aanX2arofxrMYBG3oYIXiLwyekQyaxcgwRXbx/u4CO9N YgT6A1xXeg9mUdMnw9GDzRZ6dzFrzNZLHdM6OdybsXPa5cBpJ3gHRyQuaTjaA9po+1002TU9h2pa tPT4GtMLkSe8YFIIXCRGvKlyk+27+2hb3tYsy83GF6nH6wv7aJincwrpLlHaftBkGJtcVeYSokso 0rSSJWUDaXKIzhmY9Vwqq8wtkeo8CaUkUmcnOoUIs5onlCXDzhf+zjTZmf4qgAXBTdkm/KKZqRaH trzDe5SKNBOFZTFYm9SvHKEsJtdzneBsOWcEMInTVbyt0mNklj29fCDXQBd9lD31+popLKiY0czk 7RqF5iyCIoO7eqU1gmFLmbxu5i+4nh/mG5gKY4MX7ISp7mGHrEoEbyPqFUm3u8u2L7R5mVTVTtAW HtakuKIN3yyAbxU2LN7Ux0HTEDgGOUpq+qmg2bBOkx+1wSm4rofR0gLsJLh1iNGQlqdCD8hOTW/T 6WN0dVbpCrDU0CssaUFu7NduC//cgHu1bnZ+krfWcgdudhkUkQUBLtcMmPKZ8Gf7RQtLC1FpVau8 N4Xe5fRH7qWFlMVfgd8ST6O0YPMK/Ha36XZi44W8nBaJLLbjl47oTBeYYDHnNTNG25tpxOZY7Sxn C8i7+2hqjYtxqKzVzhw6wBs/EtrYZE8wbpatpA0DXON2NlX4ZsmB2K7UVv4tHaMNnAuDzaOw+fHx +ljv54Qx346GIV/anYw1ET/v7vWsJj/tCGbpd6gs4o3w+BItDxRhhvBvH/vGUecgP1OnrTXiUmpQ f4FjcIVtVMvar3CM7h7jno6BlXkldnCM7x4f0CvgI+OR3gtmNXwu2QdbdCZ0MDJddzASvlyOzVkZ PGl5waiurBmdD5rOdbuEbQW9sHx2temSzg492QNDeBTBHjzSh4a6Jzexuh2vPbm5sVZ9qzE5rge1 dPgKY3Y3zfY1ZikTtYsxLx6Xc1oa/kyrzFO9ulwZQ7Cn2vUW10RAiv54j9c19hj68NcN3m0Y7bI1 i0VsCfUZL9e43LZbGDwTVprpiJy6j6VtJ9gCnwBL5pyZZgOhMb2lvmeGEMQFbnZj52afEIgr/QwO A1L2ntYy0dbzKwze3TbZ1+CFwHPA2w1OR3zJdItGW56ayHqGB/TQiDdovblvHXnptIk9X+26zWfU a00Z8o+Itl7/iDE5FkBNG6sYH6g7vLnXh0HADF/2MsO6s3zQW8J7O8vfs+ND+4Ye35r+FWeRu/sd ++Ig54ncoTyP3jc6mpLVp9d6Q4zWuyoCwQCPYk5oCYsg8Tyn7SekuSOXtCc6tfveUALAsQgkZOvZ c734A1FBR5kJQU8YEJb49LM9LzpdMLj3ES8JUVOM+LfdxQ50c0oVztefLBJ9MqDXavbsws4zuzWH rwDwfYcA2gNoafwVpu9uBexreglPdqlsNx4DeHNriIS7M4CNlumtpW9Q7NYBFnu4HeAKv6A8w7KW t7v5VhFoyslw1CLYwBgN28WfdAsUuOVe2VdNVUqMjFrnElyhatb9XalrimW+0lt1+WytRxwF/XFr zWTglKMbM91ReukCtrgK+EqPbe0a1N6mWc5IZOVEDmSRK+soL+jZNqvpyLcN0G73XEzJpOJtOL3C sbr7DPs6FrZluzjWlT+SW9OC/2yOEZHRAquuaR5nNxitpjp3NnRuwVBRZUPptJldU4GDuXOK71IQ XDxTvu47gekfELVkfMUyKwAt4bv8qCsTL/+q68WBtlmIc5FUf7/fdL1NJmORlkx/6S+6euVe5FlS 7M59z7oTucJuetfZf4953sfP2HZgdtOv2Dyrrwpy3S2L/RwozRL1d/gN21s0aX7C5mXYIYL9H5Rl 2B0KZW5kc3RyZWFtIAplbmRvYmogCjEwIDAgb2JqIAo8PAovV2lkdGggODI3Ci9CaXRzUGVyQ29t cG9uZW50IDgKL0ludGVycG9sYXRlIHRydWUKL0hlaWdodCAxMTY5Ci9TdWJ0eXBlIC9JbWFnZQov RmlsdGVyIC9EQ1REZWNvZGUKL0xlbmd0aCA5MDU5NwovVHlwZSAvWE9iamVjdAovQ29sb3JTcGFj ZSAvRGV2aWNlUkdCCj4+CnN0cmVhbQr/2P/gABBKRklGAAEBAQBgAGAAAP/bAEMACAYGBwYFCAcH BwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/b AEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMv/AABEIBJEDOwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUG BwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR 8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5 eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj 5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQAC 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 U3VidHlwZSAvVHJ1ZVR5cGUKL0xhc3RDaGFyIDIzOAovV2lkdGhzIDEzIDAgUgovVHlwZSAvRm9u dAo+PgplbmRvYmogCjEyIDAgb2JqIAo8PAovRm9udE5hbWUgL0FyaWFsCi9TdGVtViA0NAovTGVh ZGluZyAzMwovQXNjZW50IDkwNQovRmxhZ3MgMzIKL0ZvbnRXZWlnaHQgNDAwCi9YSGVpZ2h0IDI1 MAovRGVzY2VudCAtMjEwCi9BdmdXaWR0aCA0NDEKL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDI2 NjUKL0ZvbnRCQm94IFstNjY1IC0yMTAgMjAwMCA3MjhdCi9UeXBlIC9Gb250RGVzY3JpcHRvcgov Q2FwSGVpZ2h0IDcyOAo+PgplbmRvYmogCjYgMCBvYmogCjw8Ci9GaXJzdENoYXIgMzIKL0ZvbnRE ZXNjcmlwdG9yIDE0IDAgUgovTmFtZSAvRjIKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKL0Jh c2VGb250IC9UaW1lcyMyME5ldyMyMFJvbWFuCi9TdWJ0eXBlIC9UcnVlVHlwZQovTGFzdENoYXIg MjMzCi9XaWR0aHMgMTUgMCBSCi9UeXBlIC9Gb250Cj4+CmVuZG9iaiAKMTQgMCBvYmogCjw8Ci9G b250TmFtZSAvVGltZXMjMjBOZXcjMjBSb21hbgovU3RlbVYgNDAKL0xlYWRpbmcgNDIKL0FzY2Vu dCA4OTEKL0ZsYWdzIDMyCi9Gb250V2VpZ2h0IDQwMAovWEhlaWdodCAyNTAKL0Rlc2NlbnQgLTIx NgovQXZnV2lkdGggNDAxCi9JdGFsaWNBbmdsZSAwCi9NYXhXaWR0aCAyNTY4Ci9Gb250QkJveCBb LTU2OCAtMjE2IDIwMDAgNjkzXQovVHlwZSAvRm9udERlc2NyaXB0b3IKL0NhcEhlaWdodCA2OTMK Pj4KZW5kb2JqIAo5IDAgb2JqIAo8PAovRGVzY2VuZGFudEZvbnRzIDE2IDAgUgovQmFzZUZvbnQg L1RpbWVzIzIwTmV3IzIwUm9tYW4KL1N1YnR5cGUgL1R5cGUwCi9Ub1VuaWNvZGUgMTcgMCBSCi9F bmNvZGluZyAvSWRlbnRpdHktSAovVHlwZSAvRm9udAo+PgplbmRvYmogCjE2IDAgb2JqIFsxOCAw IFJdCmVuZG9iaiAKMTggMCBvYmogCjw8Ci9CYXNlRm9udCAvVGltZXMjMjBOZXcjMjBSb21hbgov Q0lEU3lzdGVtSW5mbyAxOSAwIFIKL0RXIDEwMDAKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovRm9u dERlc2NyaXB0b3IgMjAgMCBSCi9XIDIxIDAgUgovQ0lEVG9HSURNYXAgL0lkZW50aXR5Ci9UeXBl IC9Gb250Cj4+CmVuZG9iaiAKMTkgMCBvYmogCjw8Ci9TdXBwbGVtZW50IDAKL1JlZ2lzdHJ5IChB ZG9iZSkKL09yZGVyaW5nIChJZGVudGl0eSkKPj4KZW5kb2JqIAoyMCAwIG9iaiAKPDwKL0ZvbnRO YW1lIC9UaW1lcyMyME5ldyMyMFJvbWFuCi9TdGVtViA0MAovRm9udEZpbGUyIDIyIDAgUgovTGVh ZGluZyA0MgovQXNjZW50IDg5MQovRmxhZ3MgMzIKL0ZvbnRXZWlnaHQgNDAwCi9YSGVpZ2h0IDI1 MAovRGVzY2VudCAtMjE2Ci9BdmdXaWR0aCA0MDEKL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDI1 NjgKL0ZvbnRCQm94IFstNTY4IC0yMTYgMjAwMCA2OTNdCi9UeXBlIC9Gb250RGVzY3JpcHRvcgov Q2FwSGVpZ2h0IDY5Mwo+PgplbmRvYmogCjggMCBvYmogCjw8Ci9EZXNjZW5kYW50Rm9udHMgMjMg MCBSCi9CYXNlRm9udCAvQXJpYWwKL1N1YnR5cGUgL1R5cGUwCi9Ub1VuaWNvZGUgMjQgMCBSCi9F bmNvZGluZyAvSWRlbnRpdHktSAovVHlwZSAvRm9udAo+PgplbmRvYmogCjIzIDAgb2JqIFsyNSAw IFJdCmVuZG9iaiAKMjUgMCBvYmogCjw8Ci9CYXNlRm9udCAvQXJpYWwKL0NJRFN5c3RlbUluZm8g MjYgMCBSCi9EVyAxMDAwCi9TdWJ0eXBlIC9DSURGb250VHlwZTIKL0ZvbnREZXNjcmlwdG9yIDI3 IDAgUgovVyAyOCAwIFIKL0NJRFRvR0lETWFwIC9JZGVudGl0eQovVHlwZSAvRm9udAo+PgplbmRv YmogCjI2IDAgb2JqIAo8PAovU3VwcGxlbWVudCAwCi9SZWdpc3RyeSAoQWRvYmUpCi9PcmRlcmlu ZyAoSWRlbnRpdHkpCj4+CmVuZG9iaiAKMjcgMCBvYmogCjw8Ci9Gb250TmFtZSAvQXJpYWwKL1N0 ZW1WIDQ0Ci9Gb250RmlsZTIgMjkgMCBSCi9MZWFkaW5nIDMzCi9Bc2NlbnQgOTA1Ci9GbGFncyAz MgovRm9udFdlaWdodCA0MDAKL1hIZWlnaHQgMjUwCi9EZXNjZW50IC0yMTAKL0F2Z1dpZHRoIDQ0 MQovSXRhbGljQW5nbGUgMAovTWF4V2lkdGggMjY2NQovRm9udEJCb3ggWy02NjUgLTIxMCAyMDAw IDcyOF0KL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgNzI4Cj4+CmVuZG9iaiAKNSAw IG9iaiAKPDwKL01lZGlhQm94IFswIDAgNTk1LjIgODQxLjQ0XQovUmVzb3VyY2VzIAo8PAovRm9u dCAKPDwKL0YyIDYgMCBSCi9GMSA3IDAgUgovRjUgMzAgMCBSCi9GNCA4IDAgUgo+PgovWE9iamVj dCAKPDwKL0ltYWdlMjIgMzEgMCBSCj4+Ci9Qcm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0lt YWdlQyAvSW1hZ2VJXQo+PgovUGFyZW50IDIgMCBSCi9Db250ZW50cyAzMiAwIFIKL1N0cnVjdFBh cmVudHMgMQovR3JvdXAgCjw8Ci9DUyAvRGV2aWNlUkdCCi9UeXBlIC9Hcm91cAovUyAvVHJhbnNw YXJlbmN5Cj4+Ci9Bbm5vdHMgWzMzIDAgUl0KL1R5cGUgL1BhZ2UKL1RhYnMgL1MKPj4KZW5kb2Jq IAozMiAwIG9iaiAKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAzODY4Cj4+CnN0cmVh bQp4nMVcW28bxxV+N+D/MHkqNwjXO7e9BAJRirIcOZIlS5TTNigKQqJkBhJl62K0+bVBn+KX/oae c2Zmd5Z7Fck2sEnOzvXMd24zZ2fEXp2wnZ1XR5ODPRaNRmx3b8I+v3yhMx0KzSL4lyoeKkwOozCK siRSMbu4ffni1cHt7HouBNu7Y+9fvmCvjyaMeb3xV4ez5TUbzJfDN7uB7Xp3Cg33BeOCTa9evuA0 An6nMgoVm0K/EbvGrzcvX/w8YMHf2fTtyxevpzUDiKYBvF55HMbUa01fMM0kClOhWKKiMFGMJzzM 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 cmVhbSAKZW5kb2JqIAozMSAwIG9iaiAKPDwKL1dpZHRoIDgyNwovQml0c1BlckNvbXBvbmVudCA4 Ci9JbnRlcnBvbGF0ZSB0cnVlCi9IZWlnaHQgMTE2OQovU3VidHlwZSAvSW1hZ2UKL0ZpbHRlciAv RENURGVjb2RlCi9MZW5ndGggNzgxODkKL1R5cGUgL1hPYmplY3QKL0NvbG9yU3BhY2UgL0Rldmlj ZVJHQgo+PgpzdHJlYW0K/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQN DAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjL/wAARCASRAzsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJ ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcF BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJma oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oA DAMBAAIRAxEAPwDsFTnnrUyp3NOVMe5qZI+metfG0qNj62UyNI88npVlI8j0FOSPufyqwkecE8Cu 6nSOedQYkfYdPWrCR9h19aekecYGBU6R9h09a64UzlnUGpHgjuasJHjBPWnImOB19amRPxNdUKZy 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 E0lAgzTScUFsVGT+dK5SQpNMLe/FIzYqJm7mobLURzPn6VEz9hTWf8BUDyZyBwKylM2jAc8mOB1q B5ME9zTHk7D86rvJgkDk1zzqHTCmPeTuevpVeSTuenpTHkxnu1QO/OT1rknUOqFMc8mfYVAz5+lN d+MnpUDvn6VxVKp1QgPaTsPzqFm/OkZvyqJn7CuCpWN4wFZ8D3pnJNAGacBXLrM02EAp4H50qrmp lXsK6KdIlyGKmD6mp1T1pUTHTk1OkeOvJrup0jCUxqRk8n8qsJHn2FOSPu35VYSPPJ49q7adM5Z1 BqR9gMCp0j7AU9I8+wqwkfYDArrhTOadQYkePc1OseOvJpypjgVMqY9zXRGBzSmNVPWpgvrSquPr UoX1rdRMJSGhc/SpAKUCnAVaRk2IBS9KXpSVRIUUU0mgBSabmkJpu4etTcpIeTTS3rTWbH1qNm55 pNlKI5mz7CombPsKa7461Cz568CspSNYwHNJn7tQs+OlNZ8+wqu8hPC/nWE6h0QgPeTA9TVZ5Mde TTWkxwKrvJj3Ncs6h1Qpj3k7sarvJnrwKY8mOvJqu79ya46lU6oUyRn3ewqFn9KazZHPAqFmz7Cu GpWN4wOT1vwvq+qarPd2niq8sIZNu22iD7UwoBxhx1Iz071m/wDCC6+P+Z41L8n/APjld51NJn3r RZjXiuVNfcjN4Sm3dr8WcJ/wgmvf9DxqX5P/APHKQeBdfP8AzO+o/k//AMcrvArHvUyqx6dKqOPx Muq+5f5CeFprp+LOBHgHX+3jrU/++X/+O04fD/xB28dann/df/47XoCITwBU6IR05NdUMXXe7X3I ylQgun4s89Hw68RY58famP8AgL//AB2nj4c+Iz1+IGqD/gMn/wAdr0VI2HfJqwkRHLH8K6o16r/4 ZGEqUV/w7PNl+GniZh/yUPVQP92T/wCO1Knwy8Tnp8RtWA/3ZP8A49XpqRk8k1OkZPfArpjOo/8A hjnlCP8ATPMF+FviYn5fiTq//fMv/wAep4+FXinPHxM1n/vmX/49XqqJnoMCp1QdBW8ZyMJKJ5QP hR4q/wCin6zn/dl/+PVJ/wAKm8V/9FQ1r/vmX/4/XrCrjpyalVPxNapsxdjyMfCTxaf+ap60Pwl/ +P04fCLxd/0VbXP++Zf/AI/XrwWnBatGbseQj4Q+Lz/zVfXPyl/+P07/AIVF4v8A+isa5/3zN/8A H69eopok8g/4VF4v/wCisa5+U3/x+l/4VF4v/wCir65+U3/x+vX6aTTA8h/4VD4v/wCis65+U3/x +j/hUfi//oq+uflN/wDH69dJphb0qbjSPIz8JfFw/wCar65+U3/x+mn4TeLR/wA1W1zP0l/+P16y W9KiZ8dOTUOZooHk5+FHiwDn4p63+Uv/AMfpp+FnisDn4o61+Uv/AMer1Rnx7moXfHLGs3VaNY0k eWn4XeKe/wAT9ax7iX/49UZ+GXigHj4m6z+Uv/x6vT3kJ5JwKrvJn2FYyxEkbxoRZ5ofhv4nHA+J WsH8Jf8A49UTfDnxKD/yUfVyfpJ/8er0Z5XIwBj3qB5W6BfxrCeMkjeOFi/+HPOW+HfiQc/8LE1Y n6Sf/Haa3w+8RDr8QNVP4Sf/AB2vQWf3yaiZyO/Nck8fUXX8EdEcJDt+LOBbwD4hxz4/1T8pP/jt bXh7RNQ0NboX+uXOq+ds2edu/d7c5xlm65H5VvMX6lqiZierVxV8wqTi4t/gjenhYxlzL8x5bPSo y3YUhOacF9a8hzlN2R22sIFz1qRVz7CnKnrUqpn2Fb0qBEpDVTsKmRPTk05Ez04FTomeFr0KdEwl MaiEe5qdIyOTz7U9I8cAZNTpHj3Nd1Omc06g1I+5/KrCR568CnJHjryfSrKRd2/KuuFM5Z1BiR5x 2WrCJxgdKcqd+1SqmfYV0xgc0pjVTsOtTKmPrSquOBUgFaqJhKQgFPC+tAXH1p4FaJGbYAUoFKBQ TVWIuHSkJozTScUAKTTC1IT60wt78VLZaQpPpTGf0601nz9KiZ+wrNyNIxHM+Pc1C745PX0pjyY4 HWoHkwT3NYymbwgPeTuenpVZ5M57CmvJ3PX0qtJJ3PT0rnnUOmFMkeTOQOBVd5Ow/OmPJkegquz5 +lcdSqdcKY9n/OoXfHuaa0nYfnULNz71w1Kp0RgOZ+5qJn7mms2PrTOSa4Kla+iN1EUkn6UAUAU8 D061nGDk7sdxoFSqhPWlVMHnk1OqetddOkRKYxUz24qdEz0GBTkjzyeParCR59hXdTpHNOoMSPsB VhI8dOTT0jzwBgVOkfYCu2FM5p1CNI8Hnk1ZSPufyp6R49zU6x468muqFM5p1Bqpnk1OqZHtSqnr UwX1rojA5pTGqvp0qVV7Uqrn6VIB2FapGLkIFxTgKUCnYxVpGbYgFLSUUxBQTikJphNK47Ck00mm lsUxm9alstRFZs/Smbx61Gz59hUfm+xqHI0UCwW9KhaTHuaY0melRM/pWcpmkYDnfHXrUDyY5Jpr yY9zVZ5MdeTXPOodEID3kz14FV3kz7CmvJ3Jqu8mevSuWdQ6oUxzSZ4FQNJ2FMZ8+wqJn9K4qlU6 owFZ8e5qJmx15NNZ/SmZrhqVbm8YgTnrSZoNIATXO3c0CnhfWlVfSpFTHua0hSvuS5AqetSomfYU 9I8cmp1T1rup0jCUxiJ6cCp0jzwBT0j3ewqwkeenArup0jlnUGJHjoMmrCR49zT0j7KKnSPHTk11 wpnNOoNWPHLVMsefvU9Ux7mplT1rpjA5pTEVM+1SqvpxSqnrUgFbKJg5CKuOlPApQtOAxVpGTYAU tFLVEhSE4oJppNACk0wnFBao2bH1qWy0hWb1qNmz7Cms2OTUTP69KzcjSMBzPnpULP6U1nyPaq7S E8Dj3rGUzojAe8mOnJqu8mOvJpjydh+dV3kI6cmuadQ6YUx7ydyageTPJOBTHkx15NV3fua5KlQ6 YUx7v+AqFnz0pjPnr0qFn/AVw1Kp0xgPZ/SoWbH1pC2elRluwrgqVjeMRWb86ZyxpQuetSqmfYVg oyqMq9hqr6dalVMe5pyp2FTKnpya7aVGxnKY1Ux1qdY+5/KnImPc1OkeOTz7V306RzymMSPPXpVl I8jjgU5I+7flVhI89eBXbCkcs6gxI+y1Yjj5wOvrT0jzjstWETjA6V1QpnLOoMSPHuanVPzpyp2H WpVQD610Ric8pjVTufyqUClAp4X1rVRMXIQLn6U8DigCnAVdjNsAKXpR0pCaYhSaSkJ4phalcaQ4 tioyfzpCfSmM/p1qWy0hWbFRM3c0jPj3NQO+OT19KzlI1jAez/gKgeTOQOBTHk7np6VXeTOewrCU zohTHvJ2H51XeTBIHJpryZyBwKrvL2H51yzqHVCmOeQDPdqgd+560xnx9agdyPc1x1Kp0wpj3fjJ 6VA759hSM/c1Ezdya4alY6YwFZvyqJm7CgsW+lAWuGVRy2NUrCAZpwFKBT1TPWqhTBsRVzUyJ2FO VM9sCpkTPTgV206JjKZGiY6cmrKR4PPJpyR9gKsJHjgcmu6nSOedQYkZ6n8qsJGTyePanpHjryan SPufyrrhTOWdQakefpVhE7AYFOWPuanVMj2rqhA5pzGImOBUypj605V9OlSqvpW8YnPKY1Vx9alC +tKFxTgK0SMXIAKcBQBS1RNw6UlFBOKYgppNITTSaVykhSaYW9KaW/Komf0qGy1Ecz49zUTPjr1p jSdhUDvj3NZSmbxgPd+7VH5p9KheTA55NReY3qKxdQ3jTLbPn2FV3kzwv50x5MjngVWeTPsKxnUN IUyRpOwqu8mPc01pM8Cq7SdhXHUqHVCmOeQDryagd+Msaaz49zUTNjrya4qlU6YwHM+evAqJmz7C mk560lcU6lzdRsFJiinhfWs0myr2Ghc1Kq56dKcqetTKmfYV006JnKYxEzwBU6JjpyaeiZ6cCpkT PAFd1Okc8pjVTHuanSLu35U9I8Hjk1YSPHua7YUzlnUGrHnk1OkefYU9Y8ctU6x5+9XVCmc06g1E 9OBU6p2FKqZ9qmVfTgV0Ric0pjVXHTk1KqY56mlVQOlPArVIxcgApwFKBS1djNsKKWkJpiFppNIT TScUNjsOJphb0ppb1qNmz7CobLURS3pUTPjpyaRnz0qFn9KylI2jAV3x7moHcDk0jyY6cmq7yY68 msJzOiEB7yZ5JwKrvJn2FMeTuTVd5M8k4Fcs6h0wpkjyZ4HHvVZ5Ow/OmvJn2FQNJ6VyVKp1Qpjm fHTk1Ez49zTWf0qFmx9a4KlY6IwHM3c1EzZ60hb86ZyxrhqVb6I2URSacFx1pyr6dakVMe5op0nJ 3YOQip61KqZ9hTlTHWp1TufyrvpUTCUxiJnp0qdEzwKekeevSrCR5HHArup0jnnUI0jwcAZNWEjx 7mnpH2FWI4+cDr612wpnLOoMSPB55PpVlI+5/KnJHj3NTqmPrXTGByzqDVT8qlVMj0FOVO5/KpQK 3UTCUxFXHAp4FKFz9KeBWiRk2NC/nT8UAU7GKshsMUZoJpKBBmmk4oLYqMn86VykhSaYW9+KRmxU TN3NQ2WojmfP0qJn7Cms/wCAqB5M5A4FZSmbRgOeTHA61A8mCe5pjydh+dV3kwSBya551DphTHvJ 3PX0qvJJ3PT0pjyYz3aoHfnJ61yTqHVCmOeTPsKgZ8/Smu/GT0qB3z9K4qlU6oQHtJ2H51CzfnSM 35VEz9hXBUrG8YCs+B70zkmgDNOArl1mabCAU8D86VVzUyr2FdFOkS5DFTB9TU6p60qJjpyanSPH Xk13U6RhKY1IyeT+VWEjz7CnJH3b8qsJHnk8e1dtOmcs6g1I+wGBU6R9gKekefYVYSPsBgV1wpnN OoMSPHuanWPHXk05UxwKmVMe5rojA5pTGqnrUwX1pVXH1qUL61uomEpDQufpUgFKBTgKtIybEApe lL0pKokKKKaTQApNMJoJphb0qWykhS2KjZvWms+Pc1E7469azcjWMRWfPsKhZ89OBTXfucVA7568 CsZTN4wHNJ2H51XeTHA596R5M9OBVV5Oy/nXNOodMKZI8mB6mot5/vVE0mOBURfn7361yuodMaZa eTuxqu8mevApjyY6nJqu79yaxqVTWFMkZ93sKhZ/Sms2RzwKhZs/SuGpWOiMBzP6UzNJSVySlc1S sLmjaTShc1Iq56DiiMHIG7DVX0qVUx7mnImeAKnRMdOTXbTpGMpjVjxyanVPWnKmPc1OkXdvyrtp 0jnnUGpHu9hVhI89OBT0jzyanSPPsK7IUzlnUGpH2AqdI8dOTTkTPTgVYVOMCuqMDlnMYqYPqamV PWnKuOnJqVUx7mt1E55TGqnrUoFKBTgK0SMmxAPSnAUAUtWS2FLR0ppNAhSaaTQTTC3pSbKSFLYq Nmx9aaW9KiZ8dOTWbkaRiOZu5qJn9elMZ8e5qF3xyaylI2jAez5HtUDyZ4HHvTHk4yTgVWeTPsK5 51DphTJHk7L+dV3kweOTTHkzwOPeoHk7L+dcs6h0wpjnkx1OTUDv3NMZ8e5qFnx9a4qlU6oQHM/r 0qJnz7Cms3c1GzZ61w1KxvGIpbPSoy3YUhOacF9a4nOU3oa2sIFz1qRVz7CnKnrUqpn2Fb0qBEpD VTsKmRPTk05Ez04FTomeFr0KdEwlMaiEe5qdIyOTz7U9I8cAZNTpHj3Nd1Omc06g1I+5/KrCR568 CnJHjryfSrKRd2/KuuFM5Z1BiR5x2WrCJxgdKcqd+1SqmfYV0xgc0pjVTsOtTKmPrSquOBUgFaqJ hKQgFPC+tAXH1p4FaJGbYAUoFKBQTVWIuHSkJozTScUAKTTC1IT60wt78VLZaQpPpTGf0601nz9K iZ+wrNyNIxHM+Pc1C745PX0pjyY4HWoHkwT3NYymbwgPeTuenpVZ5M57CmvJ3PX0qtJJ3PT0rnnU OmFMkeTOQOBVd5Ow/OmPJkegquz5+lcdSqdcKY9n/OoXfHuaa0nYfnULNz71w1Kp0RgOZ+5qJn7m ms2PrTOSa4Kla+iN1EUkn6UAUAU8D061nGDk7sdxoFSqhPWlVMHnk1OqetddOkRKYxUz24qdEz0G BTkjzyeParCR59hXdTpHNOoMSPsBVhI8dOTT0jzwBgVOkfYCu2FM5p1CNI8Hnk1ZSPufyp6R49zU 6x468muqFM5p1Bqpnk1OqZHtSqnrUwX1rojA5pTGqvp0qVV7Uqrn6VIB2FapGLkIFxTgKUCnYxVp GbYgFLSUUxBQTikJphNK47Ck00mmlsUxm9alstRHM2fpUTP6U1nz7CoGkz04FZykaxgOaTsKgd8e 5pGk7D86rvJjgc+9c86h0QgPeQDryarvJ3J/CmPJj3NV3k5yTk1zTqHVCmPeTPsKrvJnpwKa8ncm q7vnrwK46lU6YUx7yZ4FQ7l9aaz59hUe8VxTranRGBOz49zUTNjryaaz+lMzWNSrcuMQJz1pM0Gk AJrnbuaBTwvrSqvpUqpj3NaQpN7kuQip61KiZ9hT0jxyanVPWu6nSMJTGInpwKnSMngCnpHu9hVh I89OBXdTpHNOoMSPHQZNWEjx7mnpH2UVOkeOnJrrhTOWdQaseOWqZY8/ep6pj3NTKnrXTGBzSmIq Z9hUqr6cClVPWpAK2UTnchFXHSngUoWnAYq0jNsAKWilqiQpCcUE00mi4Ck0wnFBao2bH1qWy0hW b1qNmz14FNZscmomf16Vm5GkYDmfPSoWf0prPke1V2kJ4HHvWMpnRGA95MdOTVd5MdeTTHk7D86r vIR05Nc06h0wpj3k7k1A8meScCmPJjryaru/c1yVKh0wpj3f8BULPnpTGfPXpULP+ArhqVTqjAez +lQs2PrSFs9KjLdhXBUrG0Yis350zljShc9alVM+wrBRlNlXsNVfTrUqpj3NOVOwqZU9OTXbSo2M 5TGqmOtTrH3P5U5Ex7mp0jxyefau+nSOeUxiR569KspHkccCnJH3b8qsJHnrwK7YUjlnUGJH2WrE cfOB19aekecdlqwicYHSuqFM5Z1BiR49zU6p+dOVOw61KqAfWuiMTnlMaqdz+VSgUoFPC+taqJi5 CBc/SngcUAU4CrsZtgBS9KOlITTEKTSUhPFMLUrjSHFsVGT+dIT6Uxn9OtS2WkKzYqJm7mkZ8e5q B3xyevpWcpGsYD2f8BUDyZyBwKY8nc9PSq7yZz2FYSmdEKY95Ow/Oq7yYJA5NNeTOQOBVd5ew/Ou WdQ6oUxzyAZ7tUDv3PWmM+PrUDuR7muOpVOmFMe78ZPSoHfPsKRn7mombuTXDUrHTGArN+VRM3YU Fi30oC1wyqOWxqlYQDNOApQKeqZ61UKYNiKuamROwpypntgVMiZ6cCu2nRMZTI0THTk1ZSPB55NO SPsBVhI8cDk13U6RzzqDEjPU/lVhIyeTx7U9I8deTU6R9z+VdcKZyzqDUjz9KsInYDApyx9zU6pk e1dUIHNOYxExwKmVMfWnKvp0qVV9K3jE55TGquPrUoX1pQuKcBWiRi5ABTgKAKWqJuHSkooJxTEF NJpCaaTSuUkKTTC3pTS35VEz+lQ2WojmfHuaiZ8detMaTsKgd8e5rKUzeMB7v3aoHfPXgU15MdeT VZ5O5P4VzTqHRCmSPJnocCqzydl/OmvJn2FV3kz04Fcs6p1Qpj2kxwKrvJj3NNaTsKgZ/SuKpVOm NMcz+vJqJm9aaz49zUZNcNSqdEYgTmiiisHJs0CkxR1p4X1pJNhew0LmpVXPTpTlT1qZUz7CumnR M5TGImeAKnRMdOTT0TPTgVMiZ4Arup0jnlMaqY9zU6Rd2/KnpHg8cmrCR49zXbCmcs6g1Y88mp0j z7CnrHjlqnWPP3q6oUzmnUGonpwKnVOwpVTPtUyr6cCuiMTmlMaq46cmpVTHPU0qqB0p4FapGLkA FOApQKWrsZthRS0hNMQtNJpCaaTihsaQ4mmFvSms3rUbNn2FQ2WoilvSomfHTk0jPnpULP6VlKRt GArvj3NQO4HJpHkxwOTVd5MdeTWE5m8ID3kzyTgVXeTPsKY8ncmq7yZ5JwK5Z1DqhTJHkzwOPeqz ydh+dNeTPsKgaQnpXJUqnVCmOZ8dOTUTPj3NNZ/SoWbH1rgqVjojAczdzUTNnrSFvzphyTXDUq30 Rsoik04LjrSqvp1qVUx7mlTpOTuwchFT1qVUz7CnKmOtTqnc/lXoUqJhKYxEz06VOiZ4FPSPPXpV hI8jjgV3U6RzzqEaR4OAMmrCR49zT0j7CrEcfOB19a7YUzlnUGJHg88n0qykfc/lTkjx7mp1TH1r pjA5ZzGqn5VKqZHoKcqdz+VSgVuomEpiKuOBTwKULn6U8CtEjJsaF/On4oAp2MVZDYYozQTSUCDN NJxQWxUZP50rlJCk0wt78UjNiombuahstRHM+fpUTP2FNZ/wFQPJnIHArKUzaMBzyY4HWoHkwT3N MeTsPzqu8mCQOTXPOodMKY95O56+lV5JO56elMeTGe7VA785PWuSdU6oUxzyZ9hUDPn6U134yelQ O+fpXFUqnVCA9pOw/OoWb86Rm/KomfsK4KlY3jAVnwPemck0AZpwFcuszTYQCngfnSquamVewrop 0iHIYqYPqanVPWlRMdOTU6R468mu6nRMJTGpGTyfyqwkefYU5I+7flVhI88nj2rtp0zmnUGpH2Aw KnSPsBT0jz7CrCR9gMCuuFM5p1BiR49zU6x468mnKmOBUypj3NdEYHNKY1U9amC+tKq4+tShfWt1 EwlIaFz9KkApQKcBVpGTYgFL0pelJVEhRRTSaAFJphNBNMLelS2UkKWxUbN601nx7monfHXrWbka xiKz59hULPnpwKa79zioHfPXgVjKZvGA5pOw/Oq7yY4HPvSPJnpwKqvJ2X865p1DphTJHkx7mq7v 3Jyaa0mOBVd5Me5rkqVDqhTHvJ3Jqu7568Cms/ryaiZvWuGpWOmMBzPn2FQs3pSFs0lcU6jZuo2E paBTgvrWaTb0KYgGadtHpUipn2FP2j0reNIzciBV9KlVMe5pyJ2AqdEx05Nb06REpjVjxyanVPWn KmPc1OkXdvyrtp0jnnUGpHu9hVhI89OBT0jzyanSPPsK7IUzlnUGpH2AqdI8dOTTkTPTgVYVOMCu qMDlnMYqYPqamVPWnKuOnJqVUx7mt1E55TGqnrUoFKBTgK0SMmxAPSnAVx2sfFDwh4f1WfS9V1Y2 17Bt8yI20r7dyhhyqEdCO9Uf+F2fD3/oYf8AySuP/iKuxFz0Clrz/wD4XZ8Pf+hh/wDJO4/+N03/ AIXX8Pf+hg/8krj/AOIpgegk00muAPxq+Hv/AEMA/wDAO4/+N1d0j4neEPEGrQaXpWrm5vZ8+XGL aVN21Sx5ZAOgPepY0dgWHaonfH1qpqOpwaZbefcCcpuC/uLd5mz/ALqKT+lc3f8AxH8NaYYxe3V1 bGXOzz9PuE3Y643R89R0qoUatRL2cW79ilyrc6lmYcmomdu/SuKPxZ8F9f7Zyf8Ar1m/+IpjfFbw aef7Zz/26zf/ABFaPL8Z/wA+n9zNIyh3R2TOxHtULSMeBx71xrfFPwe3/MZ4/wCvWb/4ioX+J/hB uP7YOP8Ar2m/+JrKWW43/n0/uZvGdPujsHl4wo/Gq7y49zXJP8TvCR4GsEe/2aX/AOJqFviT4Vz8 urH6/Z5f/ia555Vj/wDn0/uZ0Qq0v5kdY8hHXk1Wd+5rl2+I3hbtq2T/ANe8v/xNRn4h+F+v9q5P /XvL/wDE1yTynMX/AMun9z/yOiNegvtI6ZnJHPSoWkz7CuaPxC8Mn/mJ/wDkvJ/8TTD4/wDDZ/5i X/kvJ/8AE1xVMnzH/nzL7n/kbxxWH/mR0hb0qMsegrnD498Nn/mJf+QJP/iaUeO/DI66l/5Lyf8A xNccsjzOT/gy+5/5GixeHX2kdCFz1qVUJ9hXODx74Z76oP8AwHl/+Jp6+P8Awx31XA/695f/AImt qfDuYrei/uf+QnjaH8yOmVewFTKh7cmuZX4heFen9rYH/XvL/wDE09fiL4THH9rY/wC3eX/4mu2n kOPX/Lp/czGWMpfzI6lEIPXJqdIyOTz7Vyy/Ejwiv/MZ5/69Zf8A4mpl+JXg9ef7Z5/69pv/AIiu uGSY1f8ALp/cznni6f8AMjq0jPVvyqwkZI54FcgnxN8HDk6zn2+yzf8AxFTL8UvBn8Wtfh9lm/8A iK6YZRjFvSf3M5p4mH8yOxjjcgdlqwiHGB0rjF+K/gvvrWB/16zf/EVIvxZ8Ff8AQbwP+vWb/wCI reOV4tf8u39zOeVaL6o7VV7DrUyoB9a4kfFrwMOP7a/8lZ//AIipB8XfAo/5jJ/8BZ//AIirWXYp f8u5fc/8jGVaPc7YCngetcMPi74FH/MbP/gJP/8AEUo+L/gT/oNH/wABJ/8A4irWAxP/AD7l9z/y IdSPc7oCgCuGHxi8Df8AQab/AMBJv/iKP+Fw+Bv+gy3/AICTf/EVX1HFf8+39zJ513O7pCa4X/hc Xgb/AKDJ/wDASb/4ik/4XD4F/wCgyf8AwEm/+Io+o4r/AJ9v7mLmXc7smmFq4Y/F/wADH/mNH/wF n/8AiKYfi94H/wCg1/5KT/8AxFT9SxS3py+5/wCRalHudwSe1Rs5HTrXEH4u+CjwNa4/69Zv/iKa 3xa8Fdta/wDJWb/4ipeDxP8AI/uZace6O2ZmHfJqu745PX0rjG+LHgztrWT/ANes3/xFRN8U/B3U azk/9es3/wARWcsDiv8An2/uZtFx7o7J5G6k8elVnkY55wK5Bvih4QPP9sZP/XtN/wDEVC3xN8JN /wAxj8Ps0v8A8TWM8Bi/+fb+5nTCVPujrXlzkDgVA8vYD8a5R/iX4Ub/AJivH/XvL/8AE1E3xH8K ngarx/17y/8AxNcs8vxr/wCXb+5nRGrT7o6pnx9agd8e5rl2+Ivhfouq/j9nl/8AiaiPxB8MdtU/ 8gSf/E1x1Mtx3/Pt/d/wDojVpfzI6Zn7momfnJrmj4/8M/8AQTyf+uEn/wATTD488Nk86n/5Lyf/ ABNcVTK8e9qT+7/gG8a9H+ZHSFs/SkGfSudHjzwyP+Yn/wCQJP8A4mnDx94Y/wCgn/5Lyf8AxNYr JMe3d0n93/AH9ao/zI6MCpFQnrXNr4+8LjrqvP8A17y//E1KvxB8K99V/wDJeX/4muinkmN6039z Ili6X8yOlVSe2BUyJnp0rmV+IfhPvq3/AJLy/wDxNSr8R/CP/QWwP+vaX/4mu2nk2LX/AC7f3Mwl iqf8yOpSPsKnSPHA5NcovxJ8IDj+2MD/AK9pv/iKmX4m+DV4Gs/+Ss3/AMRXXHKcUt6f4HPPE0/5 kdckeDyMmp0j7t+VPSPHuanWPHXk1nGnYynUGqmeTU6pke1KqetTBfWuiMDnlMaq+nSpVXtSqufp UgHYVqkYuQgXFOApQKdjFWkZtiAUtJRTEFBOKQmmE0rjsKTTSaaWxTGb1qWy1EczZ+lRM/pTWfPs KgaTPTgVnKRrGA5pOwqB3x7mkaTsPzqu8mOBz71zzqHRCA95AOvJqu8ncn8KY8mPc1XeTnJOTXNO odUKY95M+wqu8menAprydyaru+evArjqVTphTHvJngVAz+lIz59hULP6Vw1Kx0xgOZ8e5qMmiiuS UrmqVgoAzSgZ6VIq+lKMHIG7DVXH1qVU9acqenJqZUx7muynRMZTGrHn71Tbaesf96pvLb0ruhS0 MJTKqJkccCp0jJ4Ap6R7vYVYSPPTgVrTpGc6gxI8dBk1YSPHuaekfZRU6R46cmuuFM5Z1Bqx45ap ljz96nqmPc1MqetdMYHNKYipn2FSqvpwKVU9akArZROdyEVcdKeBShacBirSM2wApaKWqJCkJxQT TSaLgKTTCcUFqjZsfWpbLSFZvWo2bPXgU1mxyaiZ/XpWbkaRgKz56Vl6lpWmaqYxqGnWl55Wdn2i BZNucZxkcZwPyq6z5HtUDyZ4HHvUe2cHzRdmbRp3MZ/CXhheB4e0sn/rzj/wqB/C3hpf+Zf0sn0+ xx/4VsPJ2X86rvJjpyazljqy+2/vOiFCPYyH8MeHRydB0v8ACzj/AMKhfw14d6nQtLA/684//ia1 Xkx15NQO/c1yzzHEL7b+9nRDDw7GU3hzQT/zAtMA/wCvWP8AwqNvDugnpomm/wDgLH/hWiznv0qN nY+wrlqZriv+fj+9m8cNT/lRmN4f0Ttoenf+Asf+FRnw/og6aJp//gKn+FaJZj0qMsegrhqZviv+ fkvvZusNT/lRnnw/og/5g+n/APgMn+FIPD2jk/8AIH0//wABk/wrRC56mpFTPsKxjmONm/4svvZX saS+yvuMxfD2jf8AQG08/wDbsn+FSL4c0T/oCaeT/wBeqf4VqqnYVMiegya7KeNxf/PyX3sylTpf yoyV8NaIOuiad/4Cp/hUy+GNDzltC076fZU/wrWRMH1NTrGRyefau6njMX/z8l97MJQp/wAqMlPC ugtydD00D/r0j/wqZfCnh9v+YDpgHr9lj/wrYSM9W/KrKRk9RgV2QxWJ/nf3s5pqn2Rip4S8Onga Dpf42kf/AMTU6eEPDZGP+Ef0sn3s4/8ACttI8kcYWrCJwABxW8MTX6zf3nLNQ7GEng3wyP8AmXtL J/684/8ACpF8F+GOp8O6WT/15x/4VvqnYDmpVTH1rZV638z+8xly9jBXwT4Y6nw5pX0+xx/4U8eC PC3/AELelf8AgJH/AIVvhaeF9atVqv8AM/vMXbsc8PBHhX/oXNJ/8A4/8KePBHhX/oW9J/8AAOP/ AAroBSgVXtand/eS7djn/wDhBvCn/Qt6R/4Bx/4Uf8IR4U/6FvSf/AOP/wCJroqQmj2tTuxWOe/4 Qfwp/wBC3pP/AIBx/wCFH/CEeFP+ha0j/wAA4/8ACt8kYppaj2s+7+9jS8jA/wCEJ8Kj/mWtJ/8A AOP/AApp8FeFR/zLek/+Acf+FbxamM+OnWpdap3f3lKHkYTeC/CoH/It6V/4Bx/4VE3g3wv1/wCE c0kf9ucf+FbjSYHXJqF5Mck8+lQ8TVXV/eaxp+Rit4P8L4z/AMI5pYH/AF5x/wCFQt4S8MHp4d0s D1+xx/4VtPL3J49KrPJnPOBWMsXVX2n950QorsZDeFPDXQeH9L+v2OP/AAqF/C/hscDQNLz/ANec f+FazyZyBwKrvJ2H51zzzCstpv7zphQj2MlvDPh1f+YDpef+vOP/AOJqFvDfh8c/2Hpn0FpH/hWo z/nULuB15Nck8zxH87+9nTDDw7GW3h3Qhz/Yemj/ALdY/wDCom8P6Gf+YJpwH/XrH/hWkz9zUTOe prkqZril9t/ezeOHp/yozW0DRP8AoCadj/r1T/Co20HReg0XT/8AwFT/AArTLM30pAp9K45Zri5b VJfezRYekvsozB4d0b/oD6f/AOAyf4U8eHdE/wCgNp//AICp/hWkFqRUz1q4Y/Gf8/JfexOlS/lX 3GWPDein/mDaf/4Cp/hUq+GtE6DRNOP/AG6p/hWsqE/SpUQnoMCuynjMX/z8l97MZU6f8qMlfDOh 9P7D04n/AK9U/wAKnTwvoQ66HppP/Xqn+Fa6R9gKsJGQeOTXbDF4r+d/ezCcKf8AKjGTwp4e6toW mfT7JH/hUyeEfDx5OhaWPb7HH/hW2kYHUZNTpF3b8q6YYqv/ADP72c81DsYqeEPDrc/2BpeP+vOP /Cpl8HeGj08PaXj/AK84/wDCtxY+5qdUz2wK3jXrP7T+85pcvYYiY4FTKmPrTlX06VKq+lKMTOUx qrj61KF9aULinAVokYuQAU4CgClqibh0pKKCcUxBTSaQmmk0rlJCk0wt6U0t+VRM/pUNlqI5nx7m omfHXrTGk7CoHfHuaylM3jAe792qB3z14FNeTHXk1WeTuT+Fc06h0QpkjyZ6HAqs8nZfzpryZ9hV d5M9OBXLOqdUKY9pMcCq7yY9zTWk7CoGf0riqVTpjTHM/ryaiZvWms+Pc1GTXDUqnRGIpbNJSUoG a527mgU4L60qqB7mpVT1rSFO+5LkIqE+wqVEz04FOWPP3qnVM+wrup0jCUxiJ2UVYSPHTk05I89O BVlI+yiu2nTOadQYkeD6mpfLb2qZI8dOTUvl+9dcaZzSqFVY88mp0jz7CnrHjlqnWPP3q0hTM51B qJ6cCp1TsKVUz7VMq+nArojE5pTGquOnJqVUxz1NKqgdKeBWqRi5ABTgKUClq7GbYUUtITTELTSa Qmmk4obHYcTTC3pTWb1qNmz7CobLURS3pUTPjpyaRnJ6VCz+lZSkbRgK749zUDuByaR5McDk1XeT HXk1hOZvCA95M8k4FV3kz7CmPJ3JqB5O5OBXLOodUKY95M8Dj3qs8nYfnTXkz7CoGk9K5KlU6oUx zPjpyaiZwPc01n9KhZsfWuCpWOiMBzN3NRM2etIW/Omcsa4alW+iNlEUmnBcdacq+nWpFTHuaKdJ yd2DkIqetSqmfYU5Ux1qdU7n8q76VEwlMYiZ9hU6J2FPSPPXpVhI8jjgV3U6RzzqEaR4OAMmrCR4 56mnpH2FWI4+cDr612wpnLOoMSPB55PpVlI+5/KnJHj3NTqmPrXTGByzqDVT8qlVMj0FOVO5/KpQ K3UTCUxFXHAp4FKFz9KeBWiRk2NC4+tPxSgUuMVdiGwxRmgmkoEGaaTigtioyfzpXKSFJphb34pG bFRM3c1DZaiOZ8/SomfsKaz/AICoHkzkDgVlKZtGA55McDrUDyYJ7mmPJ2H51XeTBIHJrnnUOmFM e8nc9fSq7ydz09KY8mM92qB35yetck6h1Qpjnkz7CoGfP0prvxk9Kgd8/SuKpVOqEB7Sdh+dQs35 0jN+VRM/YVwVKxvGArPge9M5JoAzTgK5dZmmwgFPA/OlVc1Mq9hXRTpEOQxUx7mp1T1pUTHTk1Ok eOvJrup0jGUxqRk8n8qsJHn2FOSPu35VYSPPJ49q7adM5Z1BqR9gMCp0j7AU9I8+wqwkfYDArrhT OadQYkePc1OseOvJpypjgVMqY9zXRGBzSmNVPWpgvrSquPrUoX1rdRMJSGhc/SpAKUCnAVaRk2IB S9KXpSVRIUUU0mgBSaYTQTTC3pUtlJClsVGzetNZ8e5qJ3x161m5GsYis+fYVCz56cCmu/c4qB3z 14FYymbxgOaTsPzqu8mOBz70jyZ6cCqrydl/OuadQ6YUyR5Me5qu79ycmmtJjgVXeTHua5KlQ6oU x7ydyaru+evAprP68momb1rhqVjpjAcz59hULN6UhbNJXFOo2bqNhKWgU4L61mk29CmNC5qVV9Kc qZ9hUqJnoMCuinSMpTGqnpyamVMe5p6J2UVOkeOnJrvp0jCUxix/3qsJFnlvyp6R456mrCRY5b8q 7IUzmnUGpH+VTonpwKeqetTJHn2FdcKZyzqDUTsBUnl+5qVV9OBUm0VuoHO5ldUwfU1MqetOVcdO TUqpj3NWomcpjVT1qUClApwFaJGTYgHpTgKAKWrJbClo6U0mgQpNNJoJphb0pNlJClsVGzY+tNLe lRM+OnJrNyNIxHM56moWc9+lclrXw78I6/qs+qappX2i9n2+ZJ9plTdtUKOFYAcAdqyz8JPAa/8A MD/8m5//AIuk5RNIxl2O8Z8/Sq7SE8Dj3rhm+FPgYc/2IAP+vuf/AOLqJvhb4IzxouB/19zf/F1z ynDubxhPsdu8h6Kfxqu8mDwcmuJb4XeC/wCHRP8Ayam/+LqJvhl4NHC6L+P2qb/4uuac6fVv7v8A gnRCFTsvv/4B2bvg5JyageQ9WP4VxzfDXweOmjDP/XzN/wDF1Pp3gzw9o1/Fe2GneTdRZ2P58jYy CDwWI6E1y1alK2kn93/BOmEanVL7/wDgHRs/r0qJnz7Cms3c1GzZ615NWsdsYils9KjLdhSE5pwX 1ric5TehrawgXPWpFXPsKcqetSqmfYVvSoESkNVOwqZE9OTTkTPTgVOiZ4WvQp0TCUxqIR7mp0jI 5PPtT0jxwBk1OkePc13U6ZzTqDUj7n8qsJHnrwKckeOvJ9KspF3b8q64UzlnUGJHnHZasInGB0py p37VKqZ9hXTGBzSmNVOw61MqY+tKq44FSAVqomEpCAU8L60BcfWngVokZtgBSgUoFBNVYi4dKQmj NNJxQApNMLUhPrTC3vxUtlpCk+lMZ/TrTWfP0qJn7Cs3I0jEcz49zULvjk9fSmPJjgdageTBPc1j KZvCA95O56elVnkznsKa8nc9fSq0knc9PSuedQ6YUyR5M5A4FV3k7D86Y8mR6Cq7Pn6Vx1Kp1wpj 2f8AOoXfHuaa0nYfnULNz71w1Kp0RgOZ+5qJn7mms2PrTOSa4Kla+iN1EUkn6UAUAU8D061nGDk7 sdxoFSqhPWlVMHnk1OqetddOkRKYxUz24qdEz0GBTkjzyeParCR59hXdTpHNOoMSPsBVhI8dOTT0 jzwBgVOkfYCu2FM5p1CNI8Hnk1ZSPufyp6R49zU6x468muqFM5p1Bqpnk1OqZHtSqnrUwX1rojA5 pTGqvp0qVV7Uqrn6VIB2FapGLkIFxTgKUCnYxVpGbYgFLSUUxBQTikJphNK47Ck00mmlsUxm9als tRHM2fpUTP6U1nz7CoGkz04FZykaxgOaTsKgd8e5pGk7D86rvJjgc+9c86h0QgPeQDryarvJ3J/C mPJj3NV3k5yTk1zTqHVCmPeTPsKrvJnpwKa8ncmq7vnrwK46lU6YUx7yZ4FQM/pSM+fYVCz+lcNS sdMYDmfHuajJoorklK5qlYKAM0oGelSKvpSjByBuw1Vx9alVPWnKnpyamVMe5rsp0TGUxqxk9anV M+wpyx/3qsJFnlvyrup0jnnUGJHnpwKspH2UU9I8+wqdE7DgV2QpnLOoNSPHTk1OqY+tOVOwFTom OnWuqMDmlMaqY5apgvrSquPc1Kqetbxic8piKufYU/aPSnAU7FaJGTkRquOlPApQtOAxTSJbAClo paokKQnFBNNJouApNMJxQWqNmx9alstIVm9ajZs9eBTWbHJqJn9elZuRpGA5nz0qFn9Kaz5HtVdp CeBx71jKZ0RgPeTHTk1XeTHXk0x5Ow/Oq7yEdOTXNOodMKY95O5qB5M8k4FMeTHXk1A79zXJUqHT CmOd8+wqFnz0pjPnr0qFn/AVw1Kp0xgPZ/SoWbH1pC2elRluwrgqVjeMRWb86ZyxpQuetSqmfYVg oymyr2Gqvp1qVUx7mnKnYVMqenJrtpUbGcpjVTHWp1j7n8qciY9zU6R45PPtXfTpHPKYxI89elWU jyOOBTkj7t+VWEjz14FdsKRyzqDEj7LViOPnA6+tPSPOOy1YROMDpXVCmcs6gxI8e5qdU/OnKnYd alVAPrXRGJzymNVO5/KpQKUCnhfWtVExchAufpTwOKAKcBV2M2wApelHSkJpiFJpKQnimFqVxpDi 2KjJ/OkJ9KYz+nWpbLSFZsVEzdzSM+Pc1A745PX0rOUjWMB7P+AqB5M5A4FMeTuenpVd5M57CsJT OiFMe8nYfnVd5MEgcmmvJnIHAqu8vYfnXLOodUKY55AM92qB37nrTGfH1qB3I9zXHUqnTCmPd+Mn pUDvn2FIz9zUTN3JrhqVjpjAVm/KombsKCxb6UBa4ZVHLY1SsIBmnAUoFPVM9aqFMGxFXNTInYU5 Uz2wKmRM9OBXbTomMpkaJjpyaspHg88mnJH2AqwkeOBya7qdI551BiRnqfyqwkZPJ49qekeOvJqd I+5/KuuFM5Z1BqR5+lWETsBgU5Y+5qdUyPauqEDmnMYiY4FTKmPrTlX06VKq+lbxic8pjVXH1qUL 60oXFOArRIxcgApwFAFLVE3DpSUUE4piCmk0hNNJpXKSFJphb0ppb8qiZ/SobLURzPj3NRM+OvWm NJ2FQO+Pc1lKZvGA937tUDvnrwKa8mOvJqs8ncn8K5p1DohTJHkz0OBVZ5Oy/nTXkz7Cq7yZ6cCu WdU6oUx7SY4FV3kx7mmtJ2FQM/pXFUqnTGmOZ/Xk1EzetNZ8e5qMmuGpVOiMRS2aSkpQM1zt3NAp wX1pVUD3NSqnrWkKd9yXIRUJ9hUqJnpwKcsefvVOqZ9hXdTpGEpjETsoqwkeOnJpyR56cCrKR9lF dtOmc06gxI8H1NWEjxy35U9I8dOTU6pj611wpnLOoNVPWpkTPsKeseOTUyr610xgc0pjVT04FSqv pTlTPsKkC+lbKJhKYiringUoFPArRIybEApaKMVRIUUtITQAtNJpCaaTihsdhxNMLelNLetRs2fY VDZaiKW9KiZ8dOTSM+elQs/pWUpG0YCu+Pc1A7gcmkeTHTk1XeTHXk1hOZ0QgPeTPJOBVd5M+wpj ydyarvJnknArlnUOmFMkeTPA496rPJ2H5015M+wqBpPSuSpVOqFMcz46cmomfHuaaz+lQs2PrXBU rHRGA5m7mombPWkLfnTOWNcNSrfRGyiKTTguOtOVfTrUipj3NFOk5O7ByEVPWpVTPsKcqY61Oqdz +Vd9KiYSmMRM9OlTomeBT0jz16VYSPI44Fd1Okc86hGkeDgDJqwkePc09I+wqxHHzgdfWu2FM5Z1 BiR4PPJ9KspH3P5U5I8e5qdUx9a6YwOWdQaqflUqpkegpyp3P5VKBW6iYSmIq44FPApQufpTwK0S MmxoX86figCnYxVkNhijNBNJQIM00nFBbFRk/nSuUkKTTC3vxSM2KiZu5qGy1Ecz5+lRM/YU1n/A VA8mcgcCspTNowHPJjgdageTBPc0x5Ow/Oq7yYJA5Nc86h0wpj3k7nr6VXkk7np6Ux5MZ7tUDvzk 9a5J1DqhTHPJn2FQM+fpTXfjJ6VA75+lcVSqdUID2k7D86hZvzpGb8qiZ+wrgqVjeMBWfA96ZyTQ BmnAVy6zNNhAKeB+dKq5qZV7CuinSJchipg+pqdU9aVEx05NTpHjrya7qdIwlMakZPJ/KrCR59hT kj7t+VWEjzyePau2nTOWdQakfYDAqdI+wFPSPPsKsJH2AwK64UzmnUGJHj3NTrHjryacqY4FTKmP c10Rgc0pjVT1qYL60qrj61KF9a3UTCUhoXP0qQClApwFWkZNiAUvSl6UlUSFFFNJoAUmmE0E0wt6 VLZSQpbFRs3rTWfHuaid8detZuRrGIrPn2FQs+enAprv3OKgd89eBWMpm8YDmk7D86rvJjgc+9I8 menAqq8nZfzrmnUOmFMkeTHuaru/cnJprSY4FV3kx7muSpUOqFMe8ncmq7vnrwKaz+vJqJm9a4al Y6YwHM+fYVCzelIWzSVxTqNm6jYSloFOC+tZpNvQpjQualVfSnKmfYVKiZ6DArop0jKUxqp6cmpl THuaeidlFTpHjpya76dIwlMYsf8AeqwkWeW/KnpHjnqasJFjlvyrshTOadQakf5VOienAp6p61Mk efYV1wpnLOoNROwFTImBxyaeqenAqVV9K6IxOaUxqrj61KqetOVcU8CtVExlIQCngUoFLVpGdw4o opelMQdKTNITSZouFhxNNJoJphb0pNlJClsVGzY+tNLelRM+OnJrNyNIxHM3c1Ez+vSmM+Pc1C74 5NZSkbRgPZ8j2qB5M8Dj3pjycZJwKrPJn2Fc86h0wpkjydl/Oq7yYPHJpjyZ4HHvUDydl/OuWdQ6 YUxzyY6nJqB37mmM+Pc1Cz4+tcVSqdUIDmf16VEz59hTWbuajZs9a4alY3jEUtnpUZbsKQnNOC+t cTnKb0NbWEC561Iq59hTlT1qVUz7Ct6VAiUhqp2FTInpyaciZ6cCp0TPC16FOiYSmNRCPc1OkZHJ 59qekeOAMmp0jx7mu6nTOadQakfc/lVhI89eBTkjx15PpVlIu7flXXCmcs6gxI847LVhE4wOlOVO /apVTPsK6YwOaUxqp2HWplTH1pVXHAqQCtVEwlIQCnhfWgLj608CtEjNsAKUClAoJqrEXDpSE0Zp pOKAFJphakJ9aYW9+KlstIUn0pjP6daaz5+lRM/YVm5GkYjmfHuahd8cnr6Ux5McDrUDyYJ7msZT N4QHvJ3PT0qs8mc9hTXk7nr6VWkk7np6VzzqHTCmSPJnIHAqu8nYfnTHkyPQVXZ8/SuOpVOuFMez /nULvj3NNaTsPzqFm5964alU6IwHM/c1Ez9zTWbH1pnJNcFStfRG6iKST9KAKAKeB6dazjByd2O4 0CpVQnrSqmDzyanVPWuunSIlMYqZ7cVOiZ6DApyR55PHtVhI8+wrup0jmnUGJH2AqwkeOnJp6R54 AwKnSPsBXbCmc06hGkeDzyaspH3P5U9I8e5qdY8deTXVCmc06g1UzyanVMj2pVT1qYL610Rgc0pj VX06VKq9qVVz9KkA7CtUjFyEC4pwFKBTsYq0jNsQClpKKYgoJxSE0wmlcdhSaaTTS2KYzetS2Woj mbP0qJn9Kaz59hUDSZ6cCs5SNYwHNJ2FQO+Pc0jSdh+dV3kxwOfeuedQ6IQHvIB15NV3k7k/hTHk x7mq7yc5Jya5p1DqhTHvJn2FV3kz04FNeTuTVd3z14FcdSqdMKY95M8CoGf0pGfPsKhZ/SuGpWOm MBzPj3NRk0UVySlc1SsFAGaUDPSpFX0pRg5A3Yaq4+tSqnrTlT05NTKmPc12U6JjKY1YyetTqmfY U5Y/71WEizy35V3U6RzzqDEjz04FWUj7KKekefYVOidhwK7IUzlnUGpHjpyanVMfWnKnYCp0THTr XVGBzSmNVMctUwX1pVXHualVPWt4xOeUxFTPsKkC+lKBTwK0SMXIQCngYo4oqyApaOlITQAE00mg mmFvSk2NIUnFN3GmM1M3e9Q2aKJKzetRs2evAprNjk1Ez+vSpciowHM+elQs/pTWfI9qrtITwOPe sZTOiMB7yY6cmq7yY68mmPJ2H51XeQjpya5p1DphTHvJ3JqB5M8k4FMeTHXk1Xd+5rkqVDphTHu/ 4CoWfPSmM+evSoWf8BXDUqnVGA9n9KhZsfWkLZ6VGW7CuCpWNoxFZvzpnLGlC561Kq59hWCjKbLv Yaq+nWpVTHuacqdgKmVPTk120qNjKUxqpjrU6x9z+VORMe5qdI8cnn2rvp0jnlMYkeevSrKR5HHA pyR92/KrCR568Cu2FI5Z1BiR9lqxHHzgdfWnpHnHZasInGB0rqhTOWdQYkePc1OqfnTlTsOtSqgH 1rojE55TGqnc/lUoFKBTwvrWqiYuQgXP0p4HFAFPAq7GbYgFL0o6UhNMQpNJSE8UwtSuNIcWxUZP 50hNMZ/TrUtlpCs2KiZu5pGfHuagd8cnr6VnKRrGA9n/AAFQPJnIHApjyHqenpVd5M57CsJTOiFM e8nYfnVd5MEgcmmvJnIHAqu8vYfnXLOodUKY55AM92qB37nrTGfH1qB3I9zXHUqnTCmPd+MnpUDv n2FIz9zUTN3NcNSsdMYCs35VEzdhQWLfSgLXDKo5aI1SsIBmnAUoFPVM9aqFMHIRVzUyJ2FOVM+w qZEz04FdtOkYymRomOnJqykeDzyackfYCrCR44HJrup0jnnUGJGep/KrCRk8nj2p6R468mp0j7n8 q64UzlnUGpHn6VYROwGBTlj7mp1TI9q6oQOacxiJjgVMqY+tOVfTpUqr6VvGJzymNVcfWpQvrShc U4CtEjFyACnAUAUtUTcOlJRQTimIKaTSE00mlcpIUmmFvSmlvyqJn9KhstRHM+Pc1Ez469aY0nYV A749zWUpm8YD3fu1QO+evApryY68mqzydyfwrmnUOiFMkeTPQ4FVnk7L+dNeTPsKrvJnpwK5Z1Tq hTHtJjgVXeTHuaa0nYVAz+lcVSqdMaY5n9eTUTN601nx7moya4alU6IxFLZpKSlAzXO3c0CnBfWl VQPc1KqetaQp33JchFQn2FSomenApyx5+9U6pn2Fd1OkYSmMROyirCR46cmnJHnpwKspH2UV206Z zTqDEjwfU1YSPHLflT0jx05NTqmPrXXCmcs6g1U9amRM+wp6x45NTKvrXTGBzSmNVPTgVKq+lOVM +wqQL6VsomEpiKuKeBSgU8CtEjJsQClopaokSl6UhNNJoAUmmk9zSE4pjN61LZSQpbNRlvSms3rw KhZ8+wrNyNYxHs/pUZbnrUZfPSofMX1rJzNlAsM+Pc1A7gcmkeTHTk1XeTHXk1nOZrCA95M8k4FV 3kz7CmPJ3Jqu8meScCuWdQ6YUyR5M8Dj3qs8nYfnTXkz7CoGk9K5KlU6oUxzPjpyaiZ8e5prP6VC zY+tcFSsdEYDmbuaiZs9aQt+dM5Y1w1Kt9EbKIpNKFx1p6r6dakVMe5pU6Tk7sHKw1UPepAp9MCs W88WaFpV9LZ31/5VzHjenkyNjIBHIXHQiol+IXhTPzar+H2eX/4mvfoZPi5xU40209U9dTiniaad m0dMiZ74FWEjJ4FcuvxF8JZ51fA/69pf/ialX4keEOn9s4H/AF7Tf/E13U8mxa/5d/gznliYfzI6 pEYcA5NWUjI7ZNcivxM8Hjgaxj/t2m/+IqZfif4NX/mNfj9lm/8AiK64ZTil/wAu/wAGc08TF/aR 1yRkdeT6VZSI9W/KuOX4p+Cl/wCY1z/16zf/ABFSr8V/BQ5Otc/9es3/AMRXRHLsSv8Al2/uZzSr xfVHaKn5VKqZ9hXFL8WfA/U61+H2Sb/4inj4ueBv+g1/5KT/APxFaLAYj+R/czGVVdzuAoHAp4Fc OPi74F/6DR/8BJ//AIilHxf8Cj/mMn/wEm/+IrRYKv8AyP7mZOpHud0FA+tKBXDj4weBf+g0f/AS f/4igfGDwL/0Gz/4Czf/ABFV9TxH8j+5k8y7nc80bj6Vwv8AwuLwL/0Gj/4CTf8AxFH/AAuLwN/0 Gj/4CTf/ABFH1Sv/ACP7mTddzuiaQsK4U/GDwL21o/8AgJP/APEU0/F/wN/0Gj/4CT//ABFL6piP 5H9zKTj3O4JNMLH14rhz8XfBH/QbP/gJN/8AEU1vi54KPXW//JWb/wCIpPB4j+R/cyk490dszE9O lRM56CuKb4teCj/zGuP+vWb/AOIqJ/iv4NPA1nj/AK9Zv/iKiWCxP8j+5msXHujs3kYcA81A8jAn 1rjm+Kfg/ous/j9mm/8AiKhf4n+EO2sEn1+zTf8AxNZSwGL/AOff4M6ITh3R17yN1J59KrySN1J4 9K5Nvib4Sxkavk/9e0v/AMTUDfEnwqef7Wyf+veX/wCJrnnl2M/59v7mdUJ0+6OreTI9qhZ8/SuV b4jeFyP+Qt+H2eX/AOJqJviJ4Yb/AJivH/XvL/8AE1x1Mtxz/wCXb+5nRGrS7o6dpOMAfjUTP+dc 0fiD4ZP/ADE//IEn/wATUbeP/DfbU/8AyBJ/8TXFUyzH9KT+7/gG0a9H+ZHSM/HvTDya5wePPDXf VP8AyXk/+Jpw8e+Gf+gn/wCQJP8A4muR5NmEnrSf3f8AANPrNFfaR0QFPA/OubHj7wx/0E//ACBJ /wDE1Kvj/wALj/mK/wDkvL/8TW8Mjx3/AD6f3MTxVL+ZHRqmO2TU6p61zC/ELwqv/MW5/wCveX/4 mpl+IfhIcnVwT/17y/8AxNddPJcav+Xb+5mMsVT/AJkdOkbHluParCRErxwtcsnxI8IdW1f8Ps0v /wATWtovizQ/EV61ppmoefcJGZWTyZF+UEDOWUDqwrq/svE0ouU4NJdWjneJjJ2TRtpHngDAqwkf YCnpHnpwKsJH2AwKmFMznUGJHj3NTrHjryacqY4FTKmPc10Rgc0pjVT1qYL60qrj61KF9a3UTCUh oXP0qQClApwFWkZNiAUvSl6UlUSFFFNJoAUmmE0E0wt6VLZSQpbFRs3rTWfHuaid8detZuRrGIrP n2FQs+enAprv3OKgd89eBWMpm8YDmk7D86rvJjgc+9I8menAqq8nZfzrmnUOmFMkeTHuaru/cnJp rSY4FV3kx7muSpUOqFMe8ncmq7vnrwKaz+vJqJm9a4alY6YwHM+fYVCzelIWzSVxTqNm6jYSloFO C+tZpNvQpjQualVfSnKmfYVKiZ6DArop0jKUxqp6cmplTHuaeidlFTpHjpya76dIwlMYsf8Aeqwk WeW/KnpHjnqasJFjlvyrshTOadQakf5VOienAp6p61MkefYV1wpnLOoNROwFTImBxyaeqenAqVV9 K6IxOaUxqrj61KqetOVcU8CtVExlIQCngUoFLVpGdw4oopelMQdKQmkJppNFwsKTTC2OlNLZphb0 qGzRRFLYqNnx7mms/pUDPg+prJyNYwHu/c1A8ncnApryAe5qs8ncn8KwlM6IQHvLkegqLzR71E8m RknAqLzR6VzyqanTGmWnk7L+dV3kweOTTHkJ4HHvUDydl/Osp1DSFMc8mOpyagd+5pjPj3NQs+Pr XFUqnVCA5n9elRM+fYU1m7mo2bPWuGpWN4xFLZ6VGW7CkJzTgvrXE5ym9DW1hAuetSKufYU5U9al VM+wrelQIlIaqdhUyJ6cmnImenAqdEzwtehTomEpmdNoWk3c7T3Wl2VxO/3pJbdWY8Y6kUqeFdAH J0PTD7fZI/8ACthIwOAMmrCRgdsmvYpYjERSjGbsvM4ZqHYxk8JeHeraDpn0+yR/4VMnhDw23J0D SwP+vSP/AOJraSPHXk+lWUi7t+VdcMRX6yf3s5pqHYwk8H+G2/5l/S8f9ecf+FWF8G+GCMf8I7pf 1+yx/wCFbip7cVKqZ9hW8cRV/mf3nNLl7GCvgvwx0/4RzSj/ANucf+FSL4J8L/8AQuaST/15p/hW +oA4FSAelWq9X+Z/eZSt2MAeCfCv/Qt6T/4CJ/hSjwP4V7+G9J/8A4/8K6EcfWnAVftJ/wAz+8zd uxz48DeFf+hb0n/wDj/wpR4G8K/9C3pP/gHH/hXQijml7Wp/MyTnf+EH8KD/AJlvSP8AwDj/AMKP +EI8J/8AQt6R/wCAcf8AhXQ00nFHtKnd/eOxz58D+Ff+hb0n/wAA4/8ACkPgnwp/0Lek/wDgHH/h W8Wphb8qXtZ/zP7ylAwj4L8K/wDQt6R/4Bx/4VE3g3wqOB4b0nP/AF5x/wCFbzPn6VEz9hUvETXV /eaRprsYbeDfCw/5lzSs/wDXnH/hUT+EfC6/8y7pX0+xx/4VsvLjgdaheTGecmspYuqvtP7zaNJd jGfwl4Y6/wDCPaWB/wBecf8AhUD+FvDf/Qv6WB/15x/4VsPJ3PX0qu8nc9PSsZY6qvtv7zphQj2M p/DHhs9NA0sD1+xx/wDxNQP4b8PdF0HS/r9kj/8Aia1Hkz7CoGcE+1ck8xrLab+9nTDDw7GW3hvQ BwNB0zP/AF6x/wCFRN4e0If8wPTc/wDXrH/hWm0nYfnULMc+9ctTNMT/ADv72bxw8P5UZjeH9E/6 Aenf+Aqf4VG3h/ROv9iaeP8At1T/AArRZzn3pnzMa4amb4rZTl97Nlh6f8qM0+H9GJ40bT//AAFT /CnDw7ov/QH0/wD8Bk/wrSApwH51Ecwxj3qS+9jdGn/KvuMweHtF/wCgNp//AICp/hT18NaIeuja f/4Cp/hWqqY9zUyp611U8biv+fkvvZnKnS/lX3GUvhrRG66Jp2P+vVP8KlXwxoZ6aHpuPX7Kn+Fa 6xk8nj2qwkbEegrtp4vFfzy+9nPKFP8AlRjp4V0E8DQ9NP1tY/8ACp08KeH+n9g6YT/16x/4VsJG TwBgVYSPsBXXDFYn+d/eznmodkYqeEfDg66BpZP/AF6R/wDxNX9P0HSdNmM9lpllaysu0vDbojFf QkDpwPyrTSMDtk1OqAdeTW3tq8laUm16nPLlWyGqmeTU6pke1KqetTBfWnGBlKY1V9OlSqvalVc/ SpAOwrVIxchAuKcBSgU7GKtIzbEApaSimIKCcUhNMJpXHYUmmk00timM3rUtlqI5mz9KiZ/Sms+f YVA0menArOUjWMBzSdhUDvj3NI0nYfnVd5McDn3rnnUOiEB7yAdeTVd5O5P4Ux5Me5qu8nOScmua dQ6oUx7yZ9hVd5M9OBTXk7k1Xd89eBXHUqnTCmPeTPAqBn9KRnz7CoWf0rhqVjpjAcz49zUZNFFc kpXNUrBQBmlAz0qRV9KUYOQN2GquPrUqp605U9OTUypj3NdlOiYymNWMnrU6pn2FOWP+9VhIs8t+ Vd1Okc86gxI89OBVlI+yinpHn2FTonYcCuyFM5Z1BqR46cmp1TH1pyp2AqdEx0611Rgc0pjVTHLV MF9aVVx7mpVT1reMTnlMRUz7CpAvpSgU8CtEjFyEAp4GKOKKsgKWjpSE0ABNNJoJphb0pNjSHEgV GzetNLVEz/iazbNIxHM3rwKhZ8+wpHfuagd+5OBWUpm8YD2fPSq7ydl/OmPJn2FV3kJ4HHvXPOod EKY95MdOTVd5MdeTTXk7L+dV3kweOTXLOodUKY95O5qLzD6ConfHXk1HvauOdXU6IwLDyfgKhZ89 KYz5HPSoWf8AAVjUqmsYD2f0qFmx9aQtnpUZbsK4KlY2jEVm/OmcsaULnrUqpn2FYKMpsq9hqr6d alVMe5pyp2FTKnpya7aVGxnKY1Ux1qdY+5/KnImPc1OkeOTz7V306RzymMSPPXpVlI8jjgU5I+7f lVhI89eBXbCkcs6gxI+y1Yjj5wOvrT0jzjstWETjA6V1QpnLOoMSPHuanVPzpyp2HWpVQD610Ric 8pjVTufyqUClAp4X1rVRMXIQLn6U8DigCnAVdjNsAKXpR0pCaYhSaSkJ4phalcaQ4tioyfzpCfSm M/p1qWy0hWbFRM3c0jPj3NQO+OT19KzlI1jAez/gKgeTOQOBTHk7np6VXeTOewrCUzohTHvJ2H51 XeTBIHJpryZyBwKrvL2H51yzqHVCmOeQDPdqgd+560xnx9agdyPc1x1Kp0wpj3fuelQO+fYUjP3N Qs3cmuGpWOmMBzN+VRM3YUFi30oC1wyqOWxqlYQDNOApQKeqZ61UKYNiKuamROwpypntgVMiZ6cC u2nRMZTI0TB45NWUjweeTTkj7AVYSPHA5Nd1Okc86gxIz1P5VYSMnk8e1PSPHXk1Okfc/lXXCmcs 6g1I8/SrCJ2AwKcsfc1OqZHtXVCByzmMRMcCplTH1pyr6dKlVfSt4xMJTGquPrUoX1pQuKcBWiRi 5ABTgKAKWqJuHSkooJxTEFNJpCaaTSuUkKTTC3pTS35VEz+lQ2WojmfHuaiZ8detMaTsKgd8e5rK UzeMB7v3aoHfPXgU15MdeTVZ5O5P4VzTqHRCmSPJnocCqzydl/OmvJn2FV3kz04Fcs6p1Qpj2kxw KrvJj3NNaTsKgZ/SuKpVOmNMcz+vJqJm9aaz49zUZNcNSqdEYils0lJSgZrnbuaBTgvrSqoHualV PWtIU77kuQioT7CpUTPTgU5Y8/eqdUz7Cu6nSMJTGInZRVhI8dOTTkjz04FWUj7KK7adM5p1BiR4 PqasJHjlvyp6R46cmp1TH1rrhTOWdQaqetTImfYU9Y8cmplX1rpjA5pTGqnpwKlVfSnKmfYVIF9K 2UTCUxFXFPApQKeBWiRk2IBS0UtUSJS9KQmmk0AKTTSe5pCcUxm9alspIUtmoy3pTWb14FQs+fYV m5GsYj2f0qFnwfU01nz0qu8nZfzrGUzeMB7yAe5qu8ncn8KY8mOhyarvJjrya5p1DphTHvJnknAq u8mfYU15O5NV3fPXgVyVKp1QpjnkJ4HHvULP6U1nJ9hULOT0riqVjpjAVnx7mmbvc0wt6U3NcUqu puokrN3NRM2etIW/Om8sawnVvoilECacFx1pyr6dakVMe5op0nJ3YOQip61KqZ9hTlTHWp1Tufyr vpUTCUxiJnp0qdEzwKekeevSrCR5HHArup0jnnUI0jwcAZNWEjx7mnpH2FWI4+cDr612wpnLOoMS PB55PpVlI+5/KnJHj3NTqmPrXTGByzqDVT8qlVMj0FOVO5/KpQK3UTCUxFXHAp4FKFz9KeBWiRk2 NC/nT8UAU7GKshsMUZoJpKBBmmk4oLYqMn86VykhSaYW9+KRmxUTN3NQ2WojmfP0qJn7Cms/4CoH kzkDgVlKZtGA55McDrUDyYJ7mmPJ2H51XeTBIHJrnnUOmFMe8nc9fSq8knc9PSmPJjPdqgd+cnrX JOodUKY55M+wqBnz9Ka78ZPSoHfP0riqVTqhAe0nYfnULN+dIzflUTP2FcFSsbxgKz4HvTOSaAM0 4CuXWZpsIBTwPzpVXNTKvYV0U6RLkMVMH1NTqnrSomOnJqdI8deTXdTpGEpjUjJ5P5VYSPPsKckf dvyqwkeeTx7V206ZyzqDUj7AYFTpH2Ap6R59hVhI+wGBXXCmc06gxI8e5qdY8deTTlTHAqZUx7mu iMDmlMaqetTBfWlVcfWpQvrW6iYSkNC5+lSAUoFOAq0jJsQCl6UvSkqiQooppNACk0wmgmmFvSpb KSFLYqNm9aaz49zUTvjr1rNyNYxFZ8+wqFnz04FNd+5xUDvnrwKxlM3jAc0nYfnVd5McDn3pHkz0 4FVXk7L+dc06h0wpkjyY9zVd37k5NNaTHAqu8mPc1yVKh1Qpj3k7k1Xd89eBTWf15NRM3rXDUrHT GA5nz7CoWb0pC2aSuKdRs3UbCUtApwX1rNJt6FMaFzUqr6U5Uz7CpUTPQYFdFOkZSmNVPTk1MqY9 zT0TsoqdI8dOTXfTpGEpjFj/AL1WEizy35U9I8c9TVhIsct+VdkKZzTqDUj/ACqdE9OBT1T1qZI8 +wrrhTOWdQaidgKmRMDjk09U9OBUqr6V0Ric0pjVXH1qVU9acq4p4FaqJjKQgFPApQKWrSM7hxRR S9KYg6UhNITTSaLhYUmmFsdKaWzTC3pUNmiiKWxUbPj3NNZ/SoGfB9TWTkaxgPd+5qB5O5OBTXkA 9zVZ5O5P4VhKZ0QgPeTPsKrvITwOPemvJnknAqu8mfYVzTqHVCmPeTsv51XeTHAOTTHkJ4HHvULP 6Vx1Kp0wpjnfHXk1C79zTWfHTk1CzfnXDUrHTGA5m9TxUZbP0pCfWm8k1wzqGqQE0bW9BT1THuad tNSqblqx3IlXPWpFXPsKcqetSqmfYVrSoEykNVOwqZE9OTTkTPTgVOiZ4WvQp0TCUxqIR7mp0jI5 PPtT0jxwBk1OkePc13U6ZzTqDUj7n8qsJHnrwKckeOvJ9KspF3b8q64UzlnUGJHnHZasInGB0pyp 37VKqZ9hXTGBzSmNVOw61MqY+tKq44FSAVqomEpCAU8L60BcfWngVokZtgBSgUoFBNVYi4dKQmjN NJxQApNMLUhPrTC3vxUtlpCk+lMZ/TrTWfP0qJn7Cs3I0jEcz49zULvjk9fSmPJjgdageTBPc1jK ZvCA95O56elVnkznsKa8nc9fSq0knc9PSuedQ6YUyR5M5A4FV3k7D86Y8mR6Cq7Pn6Vx1Kp1wpj2 f86hd8e5prSdh+dQs3PvXDUqnRGA5n7momfuaazY+tM5JrgqVr6I3URSSfpQBQBTwPTrWcYOTux3 GgVKqE9aVUweeTU6p61106REpjFTPbip0TPQYFOSPPJ49qsJHn2Fd1Okc06gxI+wFWEjx05NPSPP AGBU6R9gK7YUzmnUI0jweeTVlI+5/KnpHj3NTrHjrya6oUzmnUGqmeTU6pke1KqetTBfWuiMDmlM aq+nSpVXtSqufpUgHYVqkYuQgXFOApQKdjFWkZtiAUtJRTEFBOKQmmE0rjsKTTSaaWxTGb1qWy1E czZ+lRM/pTWfPsKgaTPTgVnKRrGA5pOwqB3x7mkaTsPzqu8mOBz71zzqHRCA95AOvJqu8ncn8KY8 mPc1XeTnJOTXNOodUKY95M+wqu8menAprydyaru+evArjqVTphTHvJngVAz+lIz59hULP6Vw1Kx0 xgOZ8e5qMmiiuSUrmqVgoAzSgZ6VIq+lKMHIG7DVXH1qVU9acqenJqZUx7muynRMZTGrGT1qdUz7 CnLH/eqwkWeW/Ku6nSOedQYkeenAqykfZRT0jz7Cp0TsOBXZCmcs6g1I8dOTU6pj605U7AVOiY6d a6owOaUxqpjlqmC+tKq49zUqp61vGJzymIqZ9hUgX0pQKeBWiRi5CAU8DFHFFWQFLR0pCaAAmmk0 E0wt6UmxpDiQKjZvWmlqiZ/xNZtmkYjmb14FQs+fYUjv3NQO/cnArKUzeMB7PnpVd5Oy/nTHkz7C q7yE8Dj3rnnUOiFMe8mOnJqu8mOvJprydl/Oq7yYPHJrlnUOqFMe8nc1Xd89eBTXfHXk1C79zXFU qnTCA5nz7CoWfPSms+ep4qMtn6Vw1Kp0RgKW9KYTSE05U9a5HNydkabDQpNSqvpSqufpUqoT7Ctq VEmUhFX060/y/epETPAqTyx6mu6FLQxcyuqY61Osfc/lTkTHuanSPHJ59q2p0jOUxiR569KspHkc cCnJH3b8qsJHnrwK7YUjlnUGJH2WrEcfOB19aekecdlqwicYHSuqFM5Z1BiR49zU6p+dOVOw61Kq AfWuiMTnlMaqdz+VSgUoFPC+taqJi5CBc/SngcUAU4CrsZtgBS9KOlITTEKTSUhPFMLUrjSHFsVG T+dIT6Uxn9OtS2WkKzYqJm7mkZ8e5qB3xyevpWcpGsYD2f8AAVA8mcgcCmPJ3PT0qu8mc9hWEpnR CmPeTsPzqu8mCQOTTXkzkDgVXeXsPzrlnUOqFMc8gGe7VA79z1pjPj61A7ke5rjqVTphTHu/GT0q B3z7CkZ+5qJm7k1w1Kx0xgKzflUTN2FBYt9KAtcMqjlsapWEAzTgKUCnqmetVCmDYirmpkTsKcqZ 7YFTImenArtp0TGUyNEx05NWUjweeTTkj7AVYSPHA5Nd1Okc86gxIz1P5VYSMnk8e1PSPHXk1Okf c/lXXCmcs6g1I8/SrCJ2AwKcsfc1OqZHtXVCBzTmMRMcCplTH1pyr6dKlVfSt4xOeUxqrj61KF9a ULinAVokYuQAU4CgClqibh0pKKCcUxBTSaQmmk0rlJCk0wt6U0t+VRM/pUNlqI5nx7momfHXrTGk 7CoHfHuaylM3jAe792qB3z14FNeTHXk1WeTuT+Fc06h0QpkjyZ6HAqs8nZfzpryZ9hVd5M9OBXLO qdUKY9pMcCq7yY9zTWk7CoGf0riqVTpjTHM/ryaiZvWms+Pc1GTXDUqnRGIpbNJSUoGa527mgU4L 60qqB7mpVT1rSFO+5LkIqE+wqVEz04FOWPP3qnVM+wrup0jCUxiJ2UVYSPHTk05I89OBVlI+yiu2 nTOadQYkeD6mrCR45b8qekeOnJqdUx9a64UzlnUGqnrUyJn2FPWPHJqZV9a6YwOaUxqp6cCpVX0p ypn2FSBfStlEwlMRVxTwKUCngVokZNiAUtFLVEiUvSkJppNACk00nuaQnFMZvWpbKSFLZqMt6U1m 9eBULPn2FZuRrGI9n9KhZ8H1NNZ89KrvJ2X86xlM3jAe8gHuarvJ3J/CmPJjocmq7yY68muadQ6Y Ux7yZ5JwKrvJn2FNeTuTVd3z14FclSqdUKY55CeBx71Cz+lNZyfYVCzk9K4qlY6YwHM+D6moWb86 Qt6UwmuCpVN1EUn1pvJNAUtUqr6VglKZV7DVTHualC+tOVfTrUqpj3NdlKiZymNVPWpljyOeBTlj xyasJH3b8q76dI55zGJHnjoKl8tamSPPXgVJsX0FdcaRzSqalVI8HAGTVhI8e5p6R9lqxHHzgdfW toUzOdQYkeDzyfSrKR9z+VOSPHuanVMfWumMDlnUGqn5VKqZHoKcqdz+VSgVuomEpiKuOBTwKULn 6U8CtEjJsaF/On4oAp2MVZDYYozQTSUCDNNJxQWxUZP50rlJCk0wt78UjNiombuahstRHM+fpUTP 2FNZ/wABUDyZyBwKylM2jAc8mOB1qB5ME9zTHk7D86rvJgkDk1zzqHTCmPeTuevpVeSTuenpTHkx nu1QO/OT1rknUOqFMc8mfYVAz5+lNd+MnpUDvn6VxVKp1QgPaTsPzqFm/OkZvyqJn7CuCpWN4wFZ 8D3pnJNAGacBXLrM02EAp4H50qrmplXsK6KdIlyGKmD6mp1T1pUTHTk1OkeOvJrup0jCUxqRk8n8 qsJHn2FOSPu35VYSPPJ49q7adM5Z1BqR9gMCp0j7AU9I8+wqwkfYDArrhTOadQYkePc1OseOvJpy pjgVMqY9zXRGBzSmNVPWpgvrSquPrUoX1rdRMJSGhc/SpAKUCnAVaRk2IBS9KXpSVRIUUU0mgBSa YTQTTC3pUtlJClsVGzetNZ8e5qJ3x161m5GsYis+fYVCz56cCmu/c4qB3z14FYymbxgOaTsPzqu8 mOBz70jyZ6cCqrydl/OuadQ6YUyR5Me5qu79ycmmtJjgVXeTHua5KlQ6oUx7ydyaru+evAprP68m omb1rhqVjpjAcz59hULN6UhbNJXFOo2bqNhKWgU4L61mk29CmNC5qVV9KcqZ9hUqJnoMCuinSMpT GqnpyamVMe5p6J2UVOkeOnJrvp0jCUxix/3qsJFnlvyp6R456mrCRY5b8q7IUzmnUGpH+VTonpwK eqetTJHn2FdcKZyzqDUTsBUyJgccmnqnpwKlVfSuiMTmlMaq4+tSqnrTlXFPArVRMZSEAp4FKBS1 aRncOKKKXpTEHSkJpCaaTRcLCk0wtjpTS2aYW9Khs0URS2KjZ8e5prP6VAz4PqaycjWMB7v3NQPJ 3JwKa8gHuarPJ3J/CsJTOiEB7yZ9hVd5CeBx7015M8k4FV3kz7CuadQ6oUx7ydl/Oq7yY4ByaY8h PA496hZ/SuOpVOmFMc7468moXfuaaz46cmoWb864alY6YwHM3qeKjLZ+lIT603kmuGdQ1SAntTlT 1pVTHualC460QpuTuwbGqufpUqoT7CnKnrUyx568Cu+lRMpTGomeBU6JzgDJpyR59hVhI+y13U6R zTqDUjx7mp0jxyfyp6R4OAMmrCR456muuFM5Z1BiRd2/KpAtTrHjk1JsPpXTGBzOoVkjzjstWETj A6U5U79qlVM+wrSMCJTGqnYdamVMfWlVccCpAK1UTCUhAKeF9aAuPrTwK0SM2wApQKUCgmqsRcOl ITRmmk4oAUmmFqQn1phb34qWy0hSfSmM/p1prPn6VEz9hWbkaRiOZ8e5qF3xyevpTHkxwOtQPJgn uaxlM3hAe8nc9PSqzyZz2FNeTuevpVaSTuenpXPOodMKZI8mcgcCq7ydh+dMeTI9BVdnz9K46lU6 4Ux7P+dQu+Pc01pOw/OoWbn3rhqVTojAcz9zUTP3NNZsfWmck1wVK19EbqIpJP0oAoAp4Hp1rOMH J3Y7jQKlVCetKqYPPJqdU9a66dIiUxipntxU6JnoMCnJHnk8e1WEjz7Cu6nSOadQYkfYCrCR46cm npHngDAqdI+wFdsKZzTqEaR4PPJqykfc/lT0jx7mp1jx15NdUKZzTqDVTPJqdUyPalVPWpgvrXRG BzSmNVfTpUqr2pVXP0qQDsK1SMXIQLinAUoFOxirSM2xAKWkopiCgnFITTCaVx2FJppNNLYpjN61 LZaiOZs/Somf0prPn2FQNJnpwKzlI1jAc0nYVA749zSNJ2H51XeTHA596551DohAe8gHXk1XeTuT +FMeTHuarvJzknJrmnUOqFMe8mfYVXeTPTgU15O5NV3fPXgVx1Kp0wpj3kzwKgZ/SkZ8+wqFn9K4 alY6YwHM+Pc1GTRRXJKVzVKwUAZpQM9KkVfSlGDkDdhqrj61KqetOVPTk1MqY9zXZTomMpjVjJ61 OqZ9hTlj/vVYSLPLflXdTpHPOoMSPPTgVZSPsop6R59hU6J2HArshTOWdQakeOnJqdUx9acqdgKn RMdOtdUYHNKY1Uxy1TBfWlVce5qVU9a3jE55TEVM+wqQL6UoFPArRIxchAKeBijiirIClo6UhNAA TTSaCaYW9KTY0hxIFRs3rTS1RM/4ms2zSMRzN68CoWfPsKR37moHfuTgVlKZvGA9nz0qu8nZfzpj yZ9hVd5CeBx71zzqHRCmPeTHTk1XeTHXk015Oy/nVd5MHjk1yzqHVCmPeTuaru+evAprvjryahd+ 5riqVTphAcz59hULPnpTWfPU8VGWz9K4alU6IwFLelMJpCacqetcjm5OyNNhoUmpVX0pVXP0qVUz 7CtqVEmUhFX061KqY7ZNORM8Cp0TsBk16FOkYSmMWPHJqwkfdvyp6R456mp0jxyefau2nTOadQak eevAqwkeenApyRd2/KrCR59hXVCmcs6g1I+wFTomOnJpypnpwKmVOwrpjA5pTGqmD6mpNhp6rjp1 p+z3rZRMHIhVO5/KpQKUCnhfWqUSXIQLn6U8DigCnAVdjNsAKXpR0pCaYhSaSkJ4phalcaQ4tioy fzpCfSmM/p1qWy0hWbFRM3c0jPj3NQO+OT19KzlI1jAez/gKgeTOQOBTHk7np6VXeTOewrCUzohT HvJ2H51XeTBIHJpryZyBwKrvL2H51yzqHVCmOeQDPdqgd+560xnx9agdyPc1x1Kp0wpj3fjJ6VA7 59hSM/c1Ezdya4alY6YwFZvyqJm7CgsW+lAWuGVRy2NUrCAZpwFKBT1TPWqhTBsRVzUyJ2FOVM9s CpkTPTgV206JjKZGiY6cmrKR4PPJpyR9gKsJHjgcmu6nSOedQYkZ6n8qsJGTyePanpHjryanSPuf yrrhTOWdQakefpVhE7AYFOWPuanVMj2rqhA5pzGImOBUypj605V9OlSqvpW8YnPKY1Vx9alC+tKF xTgK0SMXIAKcBQBS1RNw6UlFBOKYgppNITTSaVykhSaYW9KaW/Komf0qGy1Ecz49zUTPjr1pjSdh UDvj3NZSmbxgPd+7VA7568CmvJjryarPJ3J/CuadQ6IUyR5M9DgVWeTsv5015M+wqu8menArlnVO qFMe0mOBVd5Me5prSdhUDP6VxVKp0xpjmf15NRM3rTWfHuajJrhqVTojEUtmkpKUDNc7dzQKcF9a VVA9zUqp61pCnfclyEVCfYVKiZ6cCnLHn71TqmfYV3U6RhKYxE7KKsJHjpyackeenAqykfZRXbTp nNOoMSPB9TVhI8ct+VPSPHTk1OqY+tdcKZyzqDVT1qZEz7CnrHjk1Mq+tdMYHNKY1U9OBUqr6U5U z7CpAvpWyiYSmIq4p4FKBTwK0SMmxAKWilqiRKXpSE00mgBSaaT3NITimM3rUtlJCls1GW9Kazev AqFnz7Cs3I1jEez+lQs+D6mms+elV3k7L+dYymbxgPeQD3NV3k7k/hTHkx0OTVd5MdeTXNOodMKY 95M8k4FV3kz7CmvJ3Jqu7568CuSpVOqFMc8hPA496hZ/Sms5PsKhZyelcVSsdMYDmfB9TULN+dIW 9KYTXBUqm6iKT603kmgKWqVV9KwSlMq9hqpj3NShfWnKvp1qVUx7muylRM5TGqnrUyx5HPApyx45 NWEj7t+Vd9Okc85jEjz7CrCR9lp6R568CrCR56cCu2FM5p1CNI8HAGTVlI8e5p6RjoBU6Jjpya6o UzlnUGLHjk1OqetOVMH1NTKnrW8YHNKY1Vz7CpFX8qcF9aeFzWyRi5CBfSl2in0VdiLjAv50/FAF OximJsMUZoJpKBBmmk4oLYqMn86VykhSaYW9+KRmxUTN3NQ2WojmfP0qJn7Cms/4CoHkzkDgVlKZ tGA55McDrUDyYJ7mmPJ2H51XeTBIHJrnnUOmFMe8nc9fSq8knc9PSmPJjPdqgd+cnrXJOodUKY55 M+wqBnz9Ka78ZPSoHfP0riqVTqhAe0nYfnULN+dIzflUTP2FcFSsbxgKz4HvTOSaAM04CuXWZpsI BTwPzpVXNTKvYV0U6RLkMVMH1NTqnrSomOnJqdI8deTXdTpGEpjUjJ5P5VYSPPsKckfdvyqwkeeT x7V206ZyzqDUj7AYFTpH2Ap6R59hVhI+wGBXXCmc06gxI8e5qdY8deTTlTHAqZUx7muiMDmlMaqe tTBfWlVcfWpQvrW6iYSkNC5+lSAUoFOAq0jJsQCl6UvSkqiQooppNACk0wmgmmFvSpbKSFLYqNm9 aaz49zUTvjr1rNyNYxFZ8+wqFnz04FNd+5xUDvnrwKxlM3jAc0nYfnVd5McDn3pHkz04FVXk7L+d c06h0wpkjyY9zVd37k5NNaTHAqu8mPc1yVKh1Qpj3k7k1Xd89eBTWf15NRM3rXDUrHTGA5nz7CoW b0pC2aSuKdRs3UbCUtApwX1rNJt6FMaFzUqr6U5Uz7CpUTPQYFdFOkZSmNVPTk1MqY9zT0TsoqdI 8dOTXfTpGEpjFj/vVYSLPLflT0jxz1NWEixy35V2QpnNOoNSP8qnRPTgU9U9amSPPsK64UzlnUGo nYCpkTA45NPVPTgVKq+ldEYnNKY1Vx9alVPWnKuKeBWqiYykIBTwKUClq0jO4cUUUvSmIOlITSE0 0mi4WFJphbHSmls0wt6VDZooilsVGz49zTWf0qBnwfU1k5GsYD3fuageTuTgU15APc1WeTuT+FYS mdEID3kz7Cq7yE8Dj3pryZ5JwKrvJn2Fc06h1Qpj3k7L+dV3kxwDk0x5CeBx71Cz+lcdSqdMKY53 x15NQu/c01nx05NQs351w1Kx0xgOZvU8VGWz9KQn1pvJNcM6hqkBPanKnrSqmPc1KFx1ohTcndg2 NVc/SpVQn2FOVPWpljz14Fd9KiZSmNRM8Cp0TnAGTTkjz7CrCR9lrup0jmnUGpHj3NTpHjk/lT0j wcAZNWEjxz1NdcKZyzqDEi7t+VWEjz9KcseDk1OqetdMYHNOY1U/KplTsKcqZ9hUir+VdEYnPKYi rjp1p4X86cF9KeBitEjJyEC+tOooqiAooooAd0pCaM00nFMQpNMLUhPrTC3vxUtlpCk+lMZ/TrTW fP0qJn7Cs3I0jEcz49zULvjk9fSmPJjgdageTBPc1jKZvCA95O56elVnkznsKa8nc9fSq0knc9PS uedQ6YUyR5M5A4FV3k7D86Y8mR6Cq7Pn6Vx1Kp1wpj2f86hd8e5prSdh+dQs3PvXDUqnRGA5n7mo mfuaazY+tM5JrgqVr6I3URSSfpQBQBTwPTrWcYOTux3GgVKqE9aVUweeTU6p61106REpjFTPbip0 TPQYFOSPPJ49qsJHn2Fd1Okc06gxI+wFWEjx05NPSPPAGBU6R9gK7YUzmnUI0jweeTVlI+5/KnpH j3NTrHjrya6oUzmnUGqmeTU6pke1KqetTBfWuiMDmlMaq+nSpVXtSqufpUgHYVqkYuQgXFOApQKd jFWkZtiAUtJRTEFBOKQmmE0rjsKTTSaaWxTGb1qWy1EczZ+lRM/pTWfPsKgaTPTgVnKRrGA5pOwq B3x7mkaTsPzqu8mOBz71zzqHRCA95AOvJqu8ncn8KY8mPc1XeTnJOTXNOodUKY95M+wqu8menApr ydyaru+evArjqVTphTHvJngVAz+lIz59hULP6Vw1Kx0xgOZ8e5qMmiiuSUrmqVgoAzSgZ6VIq+lK MHIG7DVXH1qVU9acqenJqZUx7muynRMZTGrGT1qdUz7CnLH/AHqsJFnlvyrup0jnnUGJHnpwKspH 2UU9I8+wqdE7DgV2QpnLOoNSPHTk1OqY+tOVOwFTomOnWuqMDmlMaqY5apgvrSquPc1Kqetbxic8 piKmfYVIF9KUCngVokYuQgFPAxRxRVkBS0dKQmgAJppNBNMLelJsaQ4kCo2b1ppaomf8TWbZpGI5 m9eBULPn2FI79zUDv3JwKylM3jAez56VXeTsv50x5M+wqu8hPA496551DohTHvJjpyarvJjryaa8 nZfzqu8mDxya5Z1DqhTHvJ3NV3fPXgU13x15NQu/c1xVKp0wgOZ8+wqFnz0prPnqeKjLZ+lcNSqd EYClvSmE0hNOVPWuRzcnZGmw0KTUqr6Uqrn6VKqZ9hW1KiTKQir6dalVMdsmnImeBU6J2Aya9CnS MJTGLHjk1YSPu35U9I8c9TU6R45PPtXbTpnNOoNSPPXgVYSPPTgU5Iu7flVhI8+wrqhTOWdQakfY Cp0THTk05Uz04FTKnYV0xgc0pjVTHuamVMDmlVcdOtSBfzrZRMJSEC+tPC5pQvrTq0sZNhRRRTEF FFBOKACk3Cmlvypm6lcaRKWxUZP50hPpTGf060mykhWbFRM3c0jPj3NQO+OT19KzlI1jAez/AICo HkzkDgUx5O56elV3kznsKwlM6IUx7ydh+dV3kwSByaa8mcgcCq7y9h+dcs6h1QpjnkAz3aoHfuet MZ8fWoHcj3NcdSqdMKY934yelQO+fYUjP3NRM3cmuGpWOmMBWb8qiZuwoLFvpQFrhlUctjVKwgGa cBSgU9Uz1qoUwbEVc1MidhTlTPbAqZEz04FdtOiYymRomOnJqykeDzyackfYCrCR44HJrup0jnnU GJGep/KrCRk8nj2p6R468mp0j7n8q64UzlnUGpHn6VYROwGBTlj7mp1TI9q6oQOacxiJjgVMqY+t OVfTpUqr6VvGJzymNVcfWpQvrShcU4CtEjFyACnAUAUtUTcOlJRQTimIKaTSE00mlcpIUmmFvSml vyqJn9KhstRHM+Pc1Ez469aY0nYVA749zWUpm8YD3fu1QO+evApryY68mqzydyfwrmnUOiFMkeTP Q4FVnk7L+dNeTPsKrvJnpwK5Z1TqhTHtJjgVXeTHuaa0nYVAz+lcVSqdMaY5n9eTUTN601nx7moy a4alU6IxFLZpKSlAzXO3c0CnBfWlVQPc1KqetaQp33JchFQn2FSomenApyx5+9U6pn2Fd1OkYSmM ROyirCR46cmnJHnpwKspH2UV206ZzTqDEjwfU1YSPHLflT0jx05NTqmPrXXCmcs6g1U9amRM+wp6 x45NTKvrXTGBzSmNVPTgVKq+lOVM+wqQL6VsomEpiKuKeBSgU8CtEjJsQClopaokSl6UhNNJoAUm mk9zSE4pjN61LZSQpbNRlvSms3rwKhZ8+wrNyNYxHs/pULPg+pprPnpVd5Oy/nWMpm8YD3kA9zVd 5O5P4Ux5MdDk1XeTHXk1zTqHTCmPeTPJOBVd5M+wprydyaru+evArkqVTqhTHPITwOPeoWf0prOT 7CoWcnpXFUrHTGA5nwfU1CzfnSFvSmE1wVKpuoik+tN5JoClqlVfSsEpTKvYaqY9zUoX1pyr6dal VMe5rspUTOUxqp61MseRzwKcseOTVhI+7flXfTpHPOYxI8+wqwkfZaekeevAqwkeenArthTOadQj SPBwBk1ZSPHuaekY6AVOiY6cmuqFM5Z1Bix45NTqnrTlTB9TUyp61vGBzSmNVc+wqRV/KnBfWnhc 1skYuQgX0p4GKWirM2wooooAKKKaW9KAFJApjNTS1MZsfWpbLURWbuaZ5ntUbPjk9aZ5h9qhyNFA nZ8/SomfsKaz/gKgeTOQOBUSmaRgOeTHA61A8mCe5pjydh+dV3kwSBya551DohTHvJ3PX0qvJJ3P T0pjyYz3aoHfnJ61yTqHVCmOeTPsKgZ8/Smu/GT0qB3z9K4qlU6oQHtJ2H51CzfnSM35VEz9hXBU rG8YCs+B70zkmgDNOArl1mabCAU8D86VVzUyr2FdFOkS5DFTB9TU6p60qJjpyanSPHXk13U6RhKY 1IyeT+VWEjz7CnJH3b8qsJHnk8e1dtOmcs6g1I+wGBU6R9gKekefYVYSPsBgV1wpnNOoMSPHuanW PHXk05UxwKmVMe5rojA5pTGqnrUwX1pVXH1qUL61uomEpDQufpUgFKBTgKtIybEApelL0pKokKKK aTQApNMJoJphb0qWykhS2KjZvWms+Pc1E7469azcjWMRWfPsKhZ89OBTXfucVA7568CsZTN4wHNJ 2H51XeTHA596R5M9OBVV5Oy/nXNOodMKZI8mPc1Xd+5OTTWkxwKrvJj3NclSodUKY95O5NV3fPXg U1n9eTUTN61w1Kx0xgOZ8+wqFm9KQtmkrinUbN1GwlLQKcF9azSbehTGhc1Kq+lOVM+wqVEz0GBX RTpGUpjVT05NTKmPc09E7KKnSPHTk1306RhKYxY/71WEizy35U9I8c9TVhIsct+VdkKZzTqDUj/K p0T04FPVPWpkjz7CuuFM5Z1BqJ2AqZEwOOTT1T04FSqvpXRGJzSmNVcfWpVT1pyringVqomMpCAU 8ClApatIzuHFFFL0piDpSE0hNNJouFhSaYWx0ppbNMLelQ2aKIpbFRs+Pc01n9KgZ8H1NZORrGA9 37moHk7k4FNeQD3NVnk7k/hWEpnRCA95M+wqu8hPA496a8meScCq7yZ9hXNOodUKY95Oy/nVd5Mc A5NMeQngce9Qs/pXHUqnTCmOd8deTULv3NNZ8dOTULN+dcNSsdMYDmb1PFRls/SkJ9abyTXDOoap AT2pyp60qpj3NShcdaIU3J3YNjVXP0qVUJ9hTlT1qZY89eBXfSomUpjUTPAqdE5wBk05I8+wqwkf Za7qdI5p1BqR49zU6R45P5U9I8HAGTVhI8c9TXXCmcs6gxIu7flVhI8/SnLHg5NTqnrXTGBzTmNV PyqZU7CnKmfYVIq/lXRGJzymIq46daeF/OnBfSngYrRIychAvrTqKKogKKKKACgnFITio2agaQ4t +VRlvypGbHJqJnz14FQ5FqI5n7ComfHTrTGfPTpULSdh+dYymbxgOdwPc1H5jetQvJjIHWo959TW bmbqmWnk7np6VWeTOewprydz19KrSSdz09KxnUNIUyR5M5A4FV3k7D86Y8mR6Cq7Pn6Vx1Kp1wpj 2f8AOoXfHuaa0nYfnULNz71w1Kp0RgOZ+5qJn7mms2PrTOSa4Kla+iN1EUkn6UAUAU8D061nGDk7 sdxoFSqhPWlVMHnk1OqetddOkRKYxUz24qdEz0GBTkjzyeParCR59hXdTpHNOoMSPsBVhI8dOTT0 jzwBgVOkfYCu2FM5p1CNI8Hnk1ZSPufyp6R49zU6x468muqFM5p1Bqpnk1OqZHtSqnrUwX1rojA5 pTGqvp0qVV7Uqrn6VIB2FapGLkIFxTgKUCnYxVpGbYgFLSUUxBQTikJphNK47Ck00mmlsUxm9als tRHM2fpUTP6U1nz7CoGkz04FZykaxgOaTsKgd8e5pGk7D86rvJjgc+9c86h0QgPeQDryarvJ3J/C mPJj3NV3k5yTk1zTqHVCmPeTPsKrvJnpwKa8ncmq7vnrwK46lU6YUx7yZ4FQM/pSM+fYVCz+lcNS sdMYDmfHuajJoorklK5qlYKAM0oGelSKvpSjByBuw1Vx9alVPWnKnpyamVMe5rsp0TGUxqxk9anV M+wpyx/3qsJFnlvyrup0jnnUGJHnpwKspH2UU9I8+wqdE7DgV2QpnLOoNSPHTk1OqY+tOVOwFTom OnWuqMDmlMaqY5apgvrSquPc1Kqetbxic8piKmfYVIF9KUCngVokYuQgFPAxRxRVkBS0dKQmgAJp pNBNMLelJsaQ4kCo2b1ppaomf8TWbZpGI5m9eBULPn2FI79zUDv3JwKylM3jAez56VXeTsv50x5M +wqu8hPA496551DohTHvJjpyarvJjryaa8nZfzqu8mDxya5Z1DqhTHvJ3NV3fPXgU13x15NQu/c1 xVKp0wgOZ8+wqFnz0prPnqeKjLZ+lcNSqdEYClvSmE0hNOVPWuRzcnZGmw0KTUqr6Uqrn6VKqZ9h W1KiTKQir6dalVMdsmnImeBU6J2Aya9CnSMJTGLHjk1YSPu35U9I8c9TU6R45PPtXbTpnNOoNSPP XgVYSPPTgU5Iu7flVhI8+wrqhTOWdQakfYCp0THTk05Uz04FTKnYV0xgc0pjVTHuamVMDmlVcdOt SBfzrZRMJSEC+tPC5pQvrTq0sZNhRRRTEFFFBOKADtTS1IW/Koy35UmykhS1MZsfWms/YVCz46da zcjSMRzPjk9ahd+56U13x9ageTHJ6+lYymbxgOeTPsKgeTOQOBTJJOMnp6VXkkznnC1zTqHTCmPe TsPzqIuM9f1qF5M5A6VFvFcsqup1Rplp5AM92qB37nrTGfH1qB3I9zWVSqXCmPd+MnpUDvn2FIz9 zUTN3JrhqVjpjAVm/KombsKCxb6UBa4ZVHLY1SsIBmnAUoFPVM9aqFMGxFXNTInYU5Uz2wKmRM9O BXbTomMpkaJjpyaspHg88mnJH2AqwkeOBya7qdI551BiRnqfyqwkZPJ49qekeOvJqdI+5/KuuFM5 Z1BqR5+lWETsBgU5Y+5qdUyPauqEDmnMYiY4FTKmPrTlX06VKq+lbxic8pjVXH1qUL60oXFOArRI xcgApwFAFLVE3DpSUUE4piCmk0hNNJpXKSFJphb0ppb8qiZ/SobLURzPj3NRM+OvWmNJ2FQO+Pc1 lKZvGA937tUDvnrwKa8mOvJqs8ncn8K5p1DohTJHkz0OBVZ5Oy/nTXkz7Cq7yZ6cCuWdU6oUx7SY 4FV3kx7mmtJ2FQM/pXFUqnTGmOZ/Xk1EzetNZ8e5qMmuGpVOiMRS2aSkpQM1zt3NApwX1pVUD3NS qnrWkKd9yXIRUJ9hUqJnpwKcsefvVOqZ9hXdTpGEpjETsoqwkeOnJpyR56cCrKR9lFdtOmc06gxI 8H1NWEjxy35U9I8dOTU6pj611wpnLOoNVPWpkTPsKeseOTUyr610xgc0pjVT04FSqvpTlTPsKkC+ lbKJhKYiringUoFPArRIybEApaKWqJEpelITTSaAFJppPc0hOKYzetS2UkKWzUZb0prN68CoWfPs KzcjWMR7P6VCz4Pqaaz56VXeTsv51jKZvGA95APc1XeTuT+FMeTHQ5NV3kx15Nc06h0wpj3kzyTg VXeTPsKa8ncmq7vnrwK5KlU6oUxzyE8Dj3qFn9Kazk+wqFnJ6VxVKx0xgOZ8H1NQs350hb0phNcF SqbqIpPrTeSaApapVX0rBKUyr2GqmPc1KF9acq+nWpVTHua7KVEzlMaqetTLHkc8CnLHjk1YSPu3 5V306RzzmMSPPsKsJH2WnpHnrwKsJHnpwK7YUzmnUI0jwcAZNWUjx7mnpGOgFTomOnJrqhTOWdQY seOTU6p605UwfU1Mqetbxgc0pjVXPsKkVfypwX1p4XNbJGLkIF9KeBiloqzNsKKKKACiimlvSgBS QKYzU0tTGbH1qWy1EVm7momfPPQU1nxyetQu/c9KylI1jAcz5+lQtJ2H50x5PwFQPJnIHArCUzoj Ae8mMgdarSSYz3amvJ2H51XeTBIHJrmnUOqFMdJJjk9fSoHfPJ6elMZ8e5qB3xyevpXHUqnTCmPd /wABUZkGelRu5PJ6elR7q4p1tTojAsNJ2H51CzfnSM35VEz9hWFSsXGArPge9M5JoAzTgK5dZmmw gFPA/OlVc1Mq9hXRTpEuQxUwfU1OqetKiY6cmp0jx15Nd1OkYSmNSMnk/lVhI8+wpyR92/KrCR55 PHtXbTpnLOoNSPsBgVOkfYCnpHn2FWEj7AYFdcKZzTqDEjx7mp1jx15NOVMcCplTHua6IwOaUxqp 61MF9aVVx9alC+tbqJhKQ0Ln6VIBSgU4CrSMmxAKXpS9KSqJCiimk0AKTTCaCaYW9KlspIUtio2b 1prPj3NRO+OvWs3I1jEVnz7CoWfPTgU137nFQO+evArGUzeMBzSdh+dV3kxwOfekeTPTgVVeTsv5 1zTqHTCmSPJj3NV3fuTk01pMcCq7yY9zXJUqHVCmPeTuTVd3z14FNZ/Xk1EzetcNSsdMYDmfPsKh ZvSkLZpK4p1GzdRsJS0CnBfWs0m3oUxoXNSqvpTlTPsKlRM9BgV0U6RlKY1U9OTUypj3NPROyip0 jx05Nd9OkYSmMWP+9VhIs8t+VPSPHPU1YSLHLflXZCmc06g1I/yqdE9OBT1T1qZI8+wrrhTOWdQa idgKmRMDjk09U9OBUqr6V0Ric0pjVXH1qVU9acq4p4FaqJjKQgFPApQKWrSM7hxRRS9KYg6UhNIT TSaLhYUmmFsdKaWzTC3pUNmiiKWxUbPj3NNZ/SoGfB9TWTkaxgPd+5qB5O5OBTXkA9zVZ5O5P4Vh KZ0QgPeTPsKrvITwOPemvJnknAqu8mfYVzTqHVCmPeTsv51XeTHAOTTHkJ4HHvULP6Vx1Kp0wpjn fHXk1C79zTWfHTk1CzfnXDUrHTGA5m9TxUZbP0pCfWm8k1wzqGqQE9qcqetKqY9zUoXHWiFNyd2D Y1Vz9KlVCfYU5U9amWPPXgV30qJlKY1EzwKnROcAZNOSPPsKsJH2Wu6nSOadQakePc1OkeOT+VPS PBwBk1YSPHPU11wpnLOoMSLu35VYSPP0pyx4OTU6p610xgc05jVT8qmVOwpypn2FSKv5V0Ric8pi KuOnWnhfzpwX0p4GK0SMnIQL606iiqICiiigAoJxSE4qNmoGkOLflUZb8qRmxyaiZ89eBUORaiOZ +wqJnx060xnz06VC0nYfnWMpm8YDncD3NQPJjk9fSmvJjIHWq0kmM9zXPOZ0Qpj5JO5PHpVd5M57 LTJJMcnr6VXd+56elcs6h1Qpj3kzkDpVdn7D86R349BUDvngdK4qlU6oQHvJjgdahZufU01m9KjZ 8fWuCrWN4xFZvWkLnNRgEnNP2iuZuUtUaWSAk/hQBQBTwPTrRGDk7sVxoFSqhPWlVMHnk1Oqetdd OkRKYxUz24qdEz0GBTkjzyeParCR59hXdTpHNOoMSPsBVhI8dOTT0jzwBgVOkfYCu2FM5p1CNI8H nk1ZSPufyp6R49zU6x468muqFM5p1Bqpnk1OqZHtSqnrUwX1rojA5pTGqvp0qVV7Uqrn6VIB2Fap GLkIFxTgKUCnYxVpGbYgFLSUUxBQTikJphNK47Ck00mmlsUxm9alstRHM2fpUTP6U1nz7CoGkz04 FZykaxgOaTsKgd8e5pGk7D86rvJjgc+9c86h0QgPeQDryarvJ3J/CmPJj3NV3k5yTk1zTqHVCmPe TPsKrvJnpwKa8ncmq7vnrwK46lU6YUx7yZ4FQM/pSM+fYVCz+lcNSsdMYDmfHuajJoorklK5qlYK AM0oGelSKvpSjByBuw1Vx9alVPWnKnpyamVMe5rsp0TGUxqxk9anVM+wpyx/3qsJFnlvyrup0jnn UGJHnpwKspH2UU9I8+wqdE7DgV2QpnLOoNSPHTk1OqY+tOVOwFTomOnWuqMDmlMaqY5apgvrSquP c1Kqetbxic8piKmfYVIF9KUCngVokYuQgFPAxRxRVkBS0dKQmgAJppNBNMLelJsaQ4kCo2b1ppao mf8AE1m2aRiOZvXgVCz59hSO/c1A79ycCspTN4wHs+elV3k7L+dMeTPsKrvITwOPeuedQ6IUx7yY 6cmq7yY68mmvJ2X86rvJg8cmuWdQ6oUx7ydzVd3z14FNd8deTULv3NcVSqdMIDmfPsKhZ89Kaz56 nioy2fpXDUqnRGApb0phNITTlT1rkc3J2RpsNCk1Kq+lKq5+lSqmfYVtSokykIq+nWpVTHbJpyJn gVOidgMmvQp0jCUxix45NWEj7t+VPSPHPU1OkeOTz7V206ZzTqDUjz14FWEjz04FOSLu35VYSPPs K6oUzlnUGpH2AqdEx05NOVM9OBUyp2FdMYHNKY1Ux7mplTA5pVXHTrUgX862UTCUhAvrTwuaUL60 6tLGTYUUUUxBRRQTigA7U0tSFvyqMt+VJspIUtTGbH1prP2FQs+OnWs3I0jEcz45PWoXfuelNd8f WoHkxyevpWMpm8YDnkz7CoHkzkDgUySTjJ6elV5JM55wtc06h0wpj3l7L+dV3kwSByaY8mcgdKrs /YfnXJUqnVCmPd/xNQu+OT19Ka8mOB1qFm/E1xVKp0xgOZ88np6VEzflTWb1qMksa8+pWvobxiKz Z4FAX1pQv508CsowcndlXsIBS4qRU7n8qk2e1dUKWhm5kCrmpkTsKcqZ7YFTImenArenRIlMjRMd OTVlI8Hnk05I+wFWEjxwOTXdTpHPOoMSM9T+VWEjJ5PHtT0jx15NTpH3P5V1wpnLOoNSPP0qwidg MCnLH3NTqmR7V1Qgc05jETHAqZUx9acq+nSpVX0reMTnlMaq4+tShfWlC4pwFaJGLkAFOAoApaom 4dKSignFMQU0mkJppNK5SQpNMLelNLflUTP6VDZaiOZ8e5qJnx160xpOwqB3x7mspTN4wHu/dqgd 89eBTXkx15NVnk7k/hXNOodEKZI8mehwKrPJ2X86a8mfYVXeTPTgVyzqnVCmPaTHAqu8mPc01pOw qBn9K4qlU6Y0xzP68momb1prPj3NRk1w1Kp0RiKWzSUlKBmudu5oFOC+tKqge5qVU9a0hTvuS5CK hPsKlRM9OBTljz96p1TPsK7qdIwlMYidlFWEjx05NOSPPTgVZSPsortp0zmnUGJHg+pqwkeOW/Kn pHjpyanVMfWuuFM5Z1Bqp61MiZ9hT1jxyamVfWumMDmlMaqenAqVV9KcqZ9hUgX0rZRMJTEVcU8C lAp4FaJGTYgFLRS1RIlL0pCaaTQApNNJ7mkJxTGb1qWykhS2ajLelNZvXgVCz59hWbkaxiPZ/SoW fB9TTWfPSq7ydl/OsZTN4wHvIB7mq7ydyfwpjyY6HJqu8mOvJrmnUOmFMe8meScCq7yZ9hTXk7k1 Xd89eBXJUqnVCmOeQngce9Qs/pTWcn2FQs5PSuKpWOmMBzPg+pqFm/OkLelMJrgqVTdRFJ9abyTQ FLVKq+lYJSmVew1Ux7mpQvrTlX061KqY9zXZSomcpjVT1qZY8jngU5Y8cmrCR92/Ku+nSOecxiR5 9hVhI+y09I89eBVhI89OBXbCmc06hGkeDgDJqykePc09Ix0AqdEx05NdUKZyzqDFjxyanVPWnKmD 6mplT1reMDmlMaq59hUir+VOC+tPC5rZIxchAvpTwMUtFWZthRRRQAUUU0t6UAKSBTGamlqYzY+t S2Wois3c1Ez556Cms+OT1qF37npWUpGsYDmfP0qFpOw/OmPJ+AqB5M5A4FYSmdEYD3kxkDrVaSTG e7U15Ow/Oq7yYJA5Nc06h1QpjpJMcnr6VA755PT0pjPj3NQO+OT19K46lU6YUx7vn2FQO+eB0pHc nk9PSomb8q4alY6YwFZvSo2bH1ppbPAoC+tcM6jk9DVKwgBJzTwKUCpFT8qcKYOQ1VzwKmRMe5pU TsOlTInYda7adIxlMaqY+tSbDUyR4x3NSiI4612wpaGEqhVSMnk8e1WEjz7CnJH3b8qsJHnk8e1b U6ZlOoNSPsBgVOkfYCnpHn2FWEj7AYFdcKZzTqDEjx7mp1jx15NOVMcCplTHua6IwOaUxqp61MF9 aVVx9alC+tbqJhKQ0Ln6VIBSgU4CrSMmxAKXpS9KSqJCiimk0AKTTCaCaYW9KlspIUtio2b1prPj 3NRO+OvWs3I1jEVnz7CoWfPTgU137nFQO+evArGUzeMBzSdh+dV3kxwOfekeTPTgVVeTsv51zTqH TCmSPJj3NV3fuTk01pMcCq7yY9zXJUqHVCmPeTuTVd3z14FNZ/Xk1EzetcNSsdMYDmfPsKhZvSkL ZpK4p1GzdRsJS0CnBfWs0m3oUxoXNSqvpTlTPsKlRM9BgV0U6RlKY1U9OTUypj3NPROyip0jx05N d9OkYSmMWP8AvVYSLPLflT0jxz1NWEixy35V2QpnNOoNSP8AKp0T04FPVPWpkjz7CuuFM5Z1BqJ2 AqZEwOOTT1T04FSqvpXRGJzSmNVcfWpVT1pyringVqomMpCAU8ClApatIzuHFFFL0piDpSE0hNNJ ouFhSaYWx0ppbNMLelQ2aKIpbFRs+Pc01n9KgZ8H1NZORrGA937moHk7k4FNeQD3NVnk7k/hWEpn RCA95M+wqu8hPA496a8meScCq7yZ9hXNOodUKY95Oy/nVd5McA5NMeQngce9Qs/pXHUqnTCmOd8d eTULv3NNZ8dOTULN+dcNSsdMYDmb1PFRls/SkJ9abyTXDOoapAT2pyp60qpj3NShcdaIU3J3YNjV XP0qVUJ9hTlT1qZY89eBXfSomUpjUTPAqdE5wBk05I8+wqwkfZa7qdI5p1BqR49zU6R45P5U9I8H AGTVhI8c9TXXCmcs6gxIu7flVhI8/SnLHg5NTqnrXTGBzTmNVPyqZU7CnKmfYVIq/lXRGJzymIq4 6daeF/OnBfSngYrRIychAvrTqKKogKKKKACgnFITio2agaQ4t+VRlvypGbHJqJnz14FQ5FqI5n7C omfHTrTGfPTpULSdh+dYymbxgOdwPc1A8mOT19Ka8mMgdarSSYz3Nc85nRCmPkk7k8elV3kznstM kkxyevpVd37np6VyzqHVCmPeTOQOlV2fsPzpHfj0FQO+eB0riqVTqhAe8mOB1qFm59TTWb0qNnx9 a4KtY3jEVm9ajJLGgAsc08CuW7mzTYQL+dPApVXPAqVEA9zW9OkTKQ1U7n8qmVMjJ6U9U/Opkj7n 8q7qdIwlMaiZ9hU6R9h09aekecE8CrCR5x2FdtOkc06gyOPsOvrUoiOOtTJHngdPWpREMV1xp6HN KpqU0jweeTVlI+5/KnpHj3NTrHjrya0hTM51Bqpnk1OqZHtSqnrUwX1rojA5pTGqvp0qVV7Uqrn6 VIB2FapGLkIFxTgKUCnYxVpGbYgFLSUUxBQTikJphNK47Ck00mmlsUxm9alstRHM2fpUTP6U1nz7 CoGkz04FZykaxgOaTsKgd8e5pGk7D86rvJjgc+9c86h0QgPeQDryarvJ3J/CmPJj3NV3k5yTk1zT qHVCmPeTPsKrvJnpwKa8ncmq7vnrwK46lU6YUx7yZ4FQM/pSM+fYVCz+lcNSsdMYDmfHuajJoork lK5qlYKAM0oGelSKvpSjByBuw1Vx9alVPWnKnpyamVMe5rsp0TGUxqxk9anVM+wpyx/3qsJFnlvy rup0jnnUGJHnpwKspH2UU9I8+wqdE7DgV2QpnLOoNSPHTk1OqY+tOVOwFTomOnWuqMDmlMaqY5ap gvrSquPc1Kqetbxic8piKmfYVIF9KUCngVokYuQgFPAxRxRVkBS0dKQmgAJppNBNMLelJsaQ4kCo 2b1ppaomf8TWbZpGI5m9eBULPn2FI79zUDv3JwKylM3jAez56VXeTsv50x5M+wqu8hPA496551Do hTHvJjpyarvJjryaa8nZfzqu8mDxya5Z1DqhTHvJ3NV3fPXgU13x15NQu/c1xVKp0wgOZ8+wqFnz 0prPnqeKjLZ+lcNSqdEYClvSmE0hNOVPWuRzcnZGmw0KTUqr6Uqrn6VKqZ9hW1KiTKQir6dalVMd smnImeBU6J2Aya9CnSMJTGLHjk1YSPu35U9I8c9TU6R45PPtXbTpnNOoNSPPXgVYSPPTgU5Iu7fl VhI8+wrqhTOWdQakfYCp0THTk05Uz04FTKnYV0xgc0pjVTHuamVMDmlVcdOtSBfzrZRMJSEC+tPC 5pQvrTq0sZNhRRRTEFFFBOKADtTS1IW/Koy35UmykhS1MZsfWms/YVCz46dazcjSMRzPjk9ahd+5 6U13x9ageTHJ6+lYymbxgOeTPsKgeTOQOBTJJOMnp6VXkkznnC1zTqHTCmPeXsv51XeTBIHJpjyZ yB0quz9h+dclSqdUKY93/E1C745PX0pryY4HWoWb8TXFUqnTGA5nzyenpUTN+VNZvWoySxrz6la+ hvGIrNngUBfWlC/nTwKyjByd2Vew0LUoTP0pVTufyqZUzyelddOkZymNROw6VMidh1p6Jn2FTpH2 HT1rvp0TnnMYkeMetWEjxgnrT0j7Dr61YSPGO5rthTOadQYkfc/lVhI84J6U9I8YJ5NWFT1rqhTO WdQYicegqTaPT9KlVM9ak2+1bqBzOZWRMcCplTH1pyr6dKlVfSrjEmUxqrj61KF9aULinAVokYuQ AU4CgClqibh0pKKCcUxBTSaQmmk0rlJCk0wt6U0t+VRM/pUNlqI5nx7momfHXrTGk7CoHfHuaylM 3jAe792qB3z14FNeTHXk1WeTuT+Fc06h0QpkjyZ6HAqs8nZfzpryZ9hVd5M9OBXLOqdUKY9pMcCq 7yY9zTWk7CoGf0riqVTpjTHM/ryaiZvWms+Pc1GTXDUqnRGIpbNJSUoGa527mgU4L60qqB7mpVT1 rSFO+5LkIqE+wqVEz04FOWPP3qnVM+wrup0jCUxiJ2UVYSPHTk05I89OBVlI+yiu2nTOadQYkeD6 mrCR45b8qekeOnJqdUx9a64UzlnUGqnrUyJn2FPWPHJqZV9a6YwOaUxqp6cCpVX0pypn2FSBfStl EwlMRVxTwKUCngVokZNiAUtFLVEiUvSkJppNACk00nuaQnFMZvWpbKSFLZqMt6U1m9eBULPn2FZu RrGI9n9KhZ8H1NNZ89KrvJ2X86xlM3jAe8gHuarvJ3J/CmPJjocmq7yY68muadQ6YUx7yZ5JwKrv Jn2FNeTuTVd3z14FclSqdUKY55CeBx71Cz+lNZyfYVCzk9K4qlY6YwHM+D6moWb86Qt6UwmuCpVN 1EUn1pvJNAUtUqr6VglKZV7DVTHualC+tOVfTrUqpj3NdlKiZymNVPWpljyOeBTljxyasJH3b8q7 6dI55zGJHn2FWEj7LT0jz14FWEjz04FdsKZzTqEaR4OAMmrKR49zT0jHQCp0THTk11QpnLOoMWPH JqdU9acqYPqamVPWt4wOaUxqrn2FSKv5U4L608LmtkjFyEC+lPAxS0VZm2FFFFABRRTS3pQApIFM ZqaWpjNj61LZaiKzdzUTPnnoKaz45PWoXfuelZSkaxgOZ8/SoWk7D86Y8n4CoHkzkDgVhKZ0RgPe TGQOtVpJMZ7tTXk7D86rvJgkDk1zTqHVCmOkkxyevpUDvnk9PSmM+Pc1A745PX0rjqVTphTHu+fY VA754HSkdyeT09KiZvyrhqVjpjAVm9KjZsfWmls8CgL61wzqOT0NUrCAEnNPApQKkVPypwpg5DVX PAqZEx7mlROw6VMidh1rtp0jGUxqpj61Okfc/lT0jxjjJqwkeME8mu6nSOedQYkecE8CrCR5x2FO SPufyqwkecE8CuyFM5Z1BiR56dPWrCR44HX1p6Jx6Cp1T06V1Rgcs6gxEx7mplTHXk05Vx0qQL+d bxiYSkIF9aftPpTguPrT8VokZOREFz9KkApQKcBTSJbEApelL0pKokKKKaTQApNMJoJphb0qWykh S2KjZvWms+Pc1E7469azcjWMRWfPsKhZ89OBTXfucVA7568CsZTN4wHNJ2H51XeTHA596R5M9OBV V5Oy/nXNOodMKZI8mPc1Xd+5OTTWkxwKrvJj3NclSodUKY95O5NV3fPXgU1n9eTUTN61w1Kx0xgO Z8+wqFm9KQtmkrinUbN1GwlLQKcF9azSbehTGhc1Kq+lOVM+wqVEz0GBXRTpGUpjVT05NTKmPc09 E7KKnSPHTk1306RhKYxY/wC9VhIs8t+VPSPHPU1YSLHLflXZCmc06g1I/wAqnRPTgU9U9amSPPsK 64UzlnUGonYCpkTA45NPVPTgVKq+ldEYnNKY1Vx9alVPWnKuKeBWqiYykIBTwKUClq0jO4cUUUvS mIOlITSE00mi4WFJphbHSmls0wt6VDZooilsVGz49zTWf0qBnwfU1k5GsYD3fuageTuTgU15APc1 WeTuT+FYSmdEID3kz7Cq7yE8Dj3pryZ5JwKrvJn2Fc06h1Qpj3k7L+dV3kxwDk0x5CeBx71Cz+lc dSqdMKY53x15NQu/c01nx05NQs351w1Kx0xgOZvU8VGWz9KQn1pvJNcM6hqkBPanKnrSqmPc1KFx 1ohTcndg2NVc/SpVQn2FOVPWpljz14Fd9KiZSmNRM8Cp0TnAGTTkjz7CrCR9lrup0jmnUGpHj3NT pHjk/lT0jwcAZNWEjxz1NdcKZyzqDEi7t+VWEjz9KcseDk1OqetdMYHNOY1U/KplTsKcqZ9hUir+ VdEYnPKYirjp1p4X86cF9KeBitEjJyEC+tOooqiAooooAKCcUhOKjZqBpDi35VGW/KkZscmomfPX gVDkWojmfsKiZ8dOtMZ89OlQtJ2H51jKZvGA53A9zUDyY5PX0pryYyB1qtJJjPc1zzmdEKY+STuT x6VXeTOey0ySTHJ6+lV3fuenpXLOodUKY95M5A6VXZ+w/Okd+PQVA754HSuKpVOqEB7yY4HWoWbn 1NNZvSo2fH1rgq1jeMRWb1qMksaACxzTwK5bubNNhAv508ClVc8CpUQD3Nb06RMpDVTufyqZUyMn pT1T86mSPufyrup0jCUxqJn2FTpH2HT1p6R5wTwKsJHnHYV206RzTqDEj7Dr61YSPGO5p6R9h09a sJHjgdfWuuFM5Z1BiR4IJ5NWFT1pVTHuamVMdeTXTGBzSmNVM9amVfwFKF9akC561uomEpCKvpTw vpSgU4CrSMmwApcUtFVYkQClpKKACgnFITTCaVx2FJppNNLYpjN61LZaiOZs/Somf0prPn2FQNJn pwKzlI1jAc0nYVA749zSNJ2H51XeTHA596551DohAe8gHXk1XeTuT+FMeTHuarvJzknJrmnUOqFM e8mfYVXeTPTgU15O5NV3fPXgVx1Kp0wpj3kzwKgZ/SkZ8+wqFn9K4alY6YwHM+Pc1GTRRXJKVzVK wUAZpQM9KkVfSlGDkDdhqrj61KqetOVPTk1MqY9zXZTomMpjVjJ61OqZ9hTlj/vVYSLPLflXdTpH POoMSPPTgVZSPsop6R59hU6J2HArshTOWdQakeOnJqdUx9acqdgKnRMdOtdUYHNKY1Uxy1TBfWlV ce5qVU9a3jE55TEVM+wqQL6UoFPArRIxchAKeBijiirIClo6UhNAATTSaCaYW9KTY0hxIFRs3rTS 1RM/4ms2zSMRzN68CoWfPsKR37moHfuTgVlKZvGA9nz0qu8nZfzpjyZ9hVd5CeBx71zzqHRCmPeT HTk1XeTHXk015Oy/nVd5MHjk1yzqHVCmPeTuaru+evAprvjryahd+5riqVTphAcz59hULPnpTWfP U8VGWz9K4alU6IwFLelMJpCacqetcjm5OyNNhoUmpVX0pVXP0qVUz7CtqVEmUhFX061KqY7ZNORM 8Cp0TsBk16FOkYSmMWPHJqwkfdvyp6R456mp0jxyefau2nTOadQakeevAqwkeenApyRd2/KrCR59 hXVCmcs6g1I+wFTomOnJpypnpwKmVOwrpjA5pTGqmPc1MqYHNKq46dakC/nWyiYSkIF9aeFzShfW nVpYybCiiimIKKKCcUAHamlqQt+VRlvypNlJClqYzY+tNZ+wqFnx061m5GkYjmfHJ61C79z0prvj 61A8mOT19KxlM3jAc8mfYVA8mcgcCmSScZPT0qvJJnPOFrmnUOmFMe8vZfzqu8mCQOTTHkzkDpVd n7D865KlU6oUx7v+JqF3xyevpTXkxwOtQs34muKpVOmMBzPnk9PSomb8qazetRkljXn1K19DeMRW bPAoC+tKF/OngVlGDk7sq9hoWpQmfpSqnc/lUypnk9K66dIzlMaidh0qZE7DrT0TPsKnSPsOnrXf TonPOYxI8Y9asJHjBPWnpH2HX1qwkeMdzXbCmc06gxI+5/KrCR5wTwKekeME8mrCp611QpnLOoMR OPQVOqccdKVUz1qZV/AV0Rgc0pjVXHSpAv50qr6VIBjgVqkYuQgXH1p4FKBSgVdjNsAKWiiqEFJS E4pM0rgOppNITTSaVykhSaYW9KaW/Komf0qGy1Ecz49zUTPjr1pjSdhUDvj3NZSmbxgPd+7VA756 8CmvJjryarPJ3J/CuadQ6IUyR5M9DgVWeTsv5015M+wqu8menArlnVOqFMe0mOBVd5Me5prSdhUD P6VxVKp0xpjmf15NRM3rTWfHuajJrhqVTojEUtmkpKUDNc7dzQKcF9aVVA9zUqp61pCnfclyEVCf YVKiZ6cCnLHn71TqmfYV3U6RhKYxE7KKsJHjpyackeenAqykfZRXbTpnNOoMSPB9TVhI8ct+VPSP HTk1OqY+tdcKZyzqDVT1qZEz7CnrHjk1Mq+tdMYHNKY1U9OBUqr6U5Uz7CpAvpWyiYSmIq4p4FKB TwK0SMmxAKWilqiRKXpSE00mgBSaaT3NITimM3rUtlJCls1GW9KazevAqFnz7Cs3I1jEez+lQs+D 6mms+elV3k7L+dYymbxgPeQD3NV3k7k/hTHkx0OTVd5MdeTXNOodMKY95M8k4FV3kz7CmvJ3Jqu7 568CuSpVOqFMc8hPA496hZ/Sms5PsKhZyelcVSsdMYDmfB9TULN+dIW9KYTXBUqm6iKT603kmgKW qVV9KwSlMq9hqpj3NShfWnKvp1qVUx7muylRM5TGqnrUyx5HPApyx45NWEj7t+Vd9Okc85jEjz7C rCR9lp6R568CrCR56cCu2FM5p1CNI8HAGTVlI8e5p6RjoBU6Jjpya6oUzlnUGLHjk1OqetOVMH1N TKnrW8YHNKY1Vz7CpFX8qcF9aeFzWyRi5CBfSngYpaKszbCiiigAooppb0oAUkCmM1NLUxmx9als tRFZu5qJnzz0FNZ8cnrULv3PSspSNYwHM+fpULSdh+dMeT8BUDyZyBwKwlM6IwHvJjIHWq0kmM92 prydh+dV3kwSBya5p1DqhTHSSY5PX0qB3zyenpTGfHuagd8cnr6Vx1Kp0wpj3fPsKgd88DpSO5PJ 6elRM35Vw1Kx0xgKzelRs2PrTS2eBQF9a4Z1HJ6GqVhACTmngUoFSKn5U4UwchqrngVMiY9zSonY dKmROw61206RjKY1Ux9anSPufyp6R4xxk1YSPGCeTXdTpHPOoMSPOCeBVhI847CnJH3P5VYSPOCe BXZCmcs6gxI89OnrVhI8cDr609E49BU6p6dK6owOWdQYiY9zUypjryacq46VIF/Ot4xMJSEC+tPC 5604L+dPArRIychAKUAU4Clq7EXCiikJpiDNNJoJphNS2NIUmm5HrTGf0qPcPWocjRRJy2KjZvWm s+Pc1E7469alyKjEVnz7CoWfPTgU137nFQO+evArGUzeMBzSdh+dV3kxwOfekeTPTgVVeTsv51zT qHTCmSPJj3NV3fuTk01pMcCq7yY9zXJUqHVCmPeTuTVd3z14FNZ/Xk1EzetcNSsdMYDmfPsKhZvS kLZpK4p1GzdRsJS0CnBfWs0m3oUxoXNSqvpTlTPsKlRM9BgV0U6RlKY1U9OTUypj3NPROyip0jx0 5Nd9OkYSmMWP+9VhIs8t+VPSPHPU1YSLHLflXZCmc06g1I/yqdE9OBT1T1qZI8+wrrhTOWdQaidg KmRMDjk09U9OBUqr6V0Ric0pjVXH1qVU9acq4p4FaqJjKQgFPApQKWrSM7hxRRS9KYg6UhNITTSa LhYUmmFsdKaWzTC3pUNmiiKWxUbPj3NNZ/SoGfB9TWTkaxgPd+5qB5O5OBTXkA9zVZ5O5P4VhKZ0 QgPeTPsKrvITwOPemvJnknAqu8mfYVzTqHVCmPeTsv51XeTHAOTTHkJ4HHvULP6Vx1Kp0wpjnfHX k1C79zTWfHTk1CzfnXDUrHTGA5m9TxUZbP0pCfWm8k1wzqGqQE9qcqetKqY9zUoXHWiFNyd2DY1V z9KlVCfYU5U9amWPPXgV30qJlKY1EzwKnROcAZNOSPPsKsJH2Wu6nSOadQakePc1OkeOT+VPSPBw Bk1YSPHPU11wpnLOoMSLu35VYSPP0pyx4OTU6p610xgc05jVT8qmVOwpypn2FSKv5V0Ric8piKuO nWnhfzpwX0p4GK0SMnIQL606iiqICiiigAoJxSE4qNmoGkOLflUZb8qRmxyaiZ89eBUORaiOZ+wq Jnx060xnz06VC0nYfnWMpm8YDncD3NQPJjk9fSmvJjIHWq0kmM9zXPOZ0Qpj5JO5PHpVd5M57LTJ JMcnr6VXd+56elcs6h1Qpj3kzkDpVdn7D86R349BUDvngdK4qlU6oQHvJjgdahZufU01m9KjZ8fW uCrWN4xFZvWoySxoALHNPArlu5s02EC/nTwKVVzwKlRAPc1vTpEykNVO5/KplTIyelPVPzqZI+5/ Ku6nSMJTGomfYVOkfYdPWnpHnBPAqwkecdhXbTpHNOoMSPsOvrVhI8Y7mnpH2HT1qwkeOB19a64U zlnUGJHggnk1YVPWlVMe5qZUx15NdMYHNKY1Uz1qZV/AUoX1qQLnrW6iYSkIq+lPC+lKBTgKtIyb AClApaKqxIUUmaaTRcBScU0mkJqNmx9alspIczetRM2fYU1m9etRM+OTWbkaxgOZvwFR+YvqajeT I9BUPme1ZOZvGBaaTHAqB3x7mkaTsPzqu8mOBz71nOoXCA95AOvJqu8ncn8KY8mPc1XeTnJOTXNO odUKY95M+wqu8menAprydyaru+evArjqVTphTHvJngVAz+lIz59hULP6Vw1Kx0xgOZ8e5qMmiiuS UrmqVgoAzSgZ6VIq+lKMHIG7DVXH1qVU9acqenJqZUx7muynRMZTGrGT1qdUz7CnLH/eqwkWeW/K u6nSOedQYkeenAqykfZRT0jz7Cp0TsOBXZCmcs6g1I8dOTU6pj605U7AVOiY6da6owOaUxqpjlqm C+tKq49zUqp61vGJzymIqZ9hUgX0pQKeBWiRi5CAU8DFHFFWQFLR0pCaAAmmk0E0wt6UmxpDiQKj ZvWmlqiZ/wATWbZpGI5m9eBULPn2FI79zUDv3JwKylM3jAez56VXeTsv50x5M+wqu8hPA496551D ohTHvJjpyarvJjryaa8nZfzqu8mDxya5Z1DqhTHvJ3NV3fPXgU13x15NQu/c1xVKp0wgOZ8+wqFn z0prPnqeKjLZ+lcNSqdEYClvSmE0hNOVPWuRzcnZGmw0KTUqr6Uqrn6VKqZ9hW1KiTKQir6dalVM dsmnImeBU6J2Aya9CnSMJTGLHjk1YSPu35U9I8c9TU6R45PPtXbTpnNOoNSPPXgVYSPPTgU5Iu7f lVhI8+wrqhTOWdQakfYCp0THTk05Uz04FTKnYV0xgc0pjVTHuamVMDmlVcdOtSBfzrZRMJSEC+tP C5pQvrTq0sZNhRRRTEFFFBOKADtTS1IW/Koy35UmykhS1MZsfWms/YVCz46dazcjSMRzPjk9ahd+ 56U13x9ageTHJ6+lYymbxgOeTPsKgeTOQOBTJJOMnp6VXkkznnC1zTqHTCmPeXsv51XeTBIHJpjy ZyB0quz9h+dclSqdUKY93/E1C745PX0pryY4HWoWb8TXFUqnTGA5nzyenpUTN+VNZvWoySxrz6la +hvGIrNngUBfWlC/nTwKyjByd2Vew0LUoTP0pVTufyqZUzyelddOkZymNROw6VMidh1p6Jn2FTpH 2HT1rvp0TnnMYkeMetWEjxgnrT0j7Dr61YSPGO5rthTOadQYkfc/lVhI84J4FPSPGCeTVhU9a6oU zlnUGInHoKnVOOOlKqZ61Mq/gK6IwOaUxqrjpUgX86VV9KkAxwK1SMXIQLj608ClApQKuxm2AFLR RVCCkJpCcU0mlcdhSaYTTWb1qNmz7CobLURzP6VEzY6U1m/KoWk7L+dZSkaxgOeQD3NQM/c8mms/ YVXeTB9TWEpnTCBI792qLzT6VC8mOScmofMb1Fc8qmp0Rplx5M9DgVWeTsv5015M+wqu8menArKd U0hTHtJjgVXeTHuaa0nYVAz+lcVSqdMaY5n9eTUTN601nx7moya4alU6IxFLZpKSlAzXO3c0CnBf WlVQPc1KqetaQp33JchFQn2FSomenApyx5+9U6pn2Fd1OkYSmMROyirCR46cmnJHnpwKspH2UV20 6ZzTqDEjwfU1YSPHLflT0jx05NTqmPrXXCmcs6g1U9amRM+wp6x45NTKvrXTGBzSmNVPTgVKq+lO VM+wqQL6VsomEpiKuKeBSgU8CtEjJsQClopaokSl6UhNNJoAUmmk9zSE4pjN61LZSQpbNRlvSms3 rwKhZ8+wrNyNYxHs/pULPg+pprPnpVd5Oy/nWMpm8YD3kA9zVd5O5P4Ux5MdDk1XeTHXk1zTqHTC mPeTPJOBVd5M+wprydyaru+evArkqVTqhTHPITwOPeoWf0prOT7CoWcnpXFUrHTGA5nwfU1CzfnS FvSmE1wVKpuoik+tN5JoClqlVfSsEpTKvYaqY9zUoX1pyr6dalVMe5rspUTOUxqp61MseRzwKcse OTVhI+7flXfTpHPOYxI8+wqwkfZaekeevAqwkeenArthTOadQjSPBwBk1ZSPHuaekY6AVOiY6cmu qFM5Z1Bix45NTqnrTlTB9TUyp61vGBzSmNVc+wqRV/KnBfWnhc1skYuQgX0p4GKWirM2wooooAKK KaW9KAFJApjNTS1MZsfWpbLURWbuaiZ889BTWfHJ61C79z0rKUjWMBzPn6VC0nYfnTHk/AVA8mcg cCsJTOiMB7yYyB1qtJJjPdqa8nYfnVd5MEgcmuadQ6oUx0kmOT19Kgd88np6Uxnx7moHfHJ6+lcd SqdMKY93z7CoHfPA6UjuTyenpUTN+VcNSsdMYCs3pUbNj600tngUBfWuGdRyehqlYQAk5p4FKBUi p+VOFMHIaq54FTImPc0qJ2HSpkTsOtdtOkYymNVMfWp0j7n8qekeMcZNWEjxgnk13U6RzzqDEjzg ngVYSPOOwpyR9z+VWEjzgngV2QpnLOoMSPPTp61YSPHA6+tPROPQVOqenSuqMDlnUGImPc1MqY68 mnKuOlSBfzreMTCUhAvrTwuetOC/nTwK0SMnIQClAFOApauxFwoopCaYgzTSaCaYTUtjSFJqNnx9 aRn9KiLelQ5GkYis3r1qJnxyaa8mPc1A79zyaxlI3jAe8mfYVA0mfYU134yarPJnrwKwnUOiFMe8 vZfzqu8mOBz7015CenAqu0nZfzrknUOqFMe7475NRbz61E8mOB+dRluetckqup0RgWXk7k1Xd89e BTWf15NRM3rWFSsaRgOZ8+wqFm9KQtmkrinUbN1GwlLQKcF9azSbehTGhc1Kq+lOVM+wqVEz0GBX RTpGUpjVT05NTKmPc09E7KKnSPHTk1306RhKYxY/71WEizy35U9I8c9TVhIsct+VdkKZzTqDUj/K p0T04FPVPWpkjz7CuuFM5Z1BqJ2AqZEwOOTT1T04FSqvpXRGJzSmNVcfWpVT1pyringVqomMpCAU 8ClApatIzuHFFFL0piDpSE0hNNJouFhSaYWx0ppbNMLelQ2aKIpbFRs+Pc01n9KgZ8H1NZORrGA9 37moHk7k4FNeQD3NVnk7k/hWEpnRCA95M+wqu8hPA496a8meScCq7yZ9hXNOodUKY95Oy/nVd5Mc A5NMeQngce9Qs/pXHUqnTCmOd8deTULv3NNZ8dOTULN+dcNSsdMYDmb1PFRls/SkJ9abyTXDOoap AT2pyp60qpj3NShcdaIU3J3YNjVXP0qVUJ9hTlT1qZY89eBXfSomUpjUTPAqdE5wBk05I8+wqwkf Za7qdI5p1BqR49zU6R45P5U9I8HAGTVhI8c9TXXCmcs6gxIu7flVhI8/SnLHg5NTqnrXTGBzTmNV PyqZU7CnKmfYVIq/lXRGJzymIq46daeF/OnBfSngYrRIychAvrTqKKogKKKKACgnFITio2agaQ4t +VRlvypGbHJqJnz14FQ5FqI5n7ComfHTrTGfPTpULSdh+dYymbxgOdwPc1A8mOT19Ka8mMgdarSS Yz3Nc85nRCmPkk7k8elV3kznstMkkxyevpVd37np6VyzqHVCmPeTOQOlV2fsPzpHfj0FQO+eB0ri qVTqhAe8mOB1qFm59TTWb0qNnx9a4KtY3jEVm9ajJLGgAsc08CuW7mzTYQL+dPApVXPAqVEA9zW9 OkTKQ1U7n8qmVMjJ6U9U/Opkj7n8q7qdIwlMaiZ9hU6R9h09aekecE8CrCR5x2FdtOkc06gxI+w6 +tWEjxjuaekfYdPWrCR44HX1rrhTOWdQYkeCCeTVhU9aVUx7mplTHXk10xgc0pjVTPWplX8BShfW pAuetbqJhKQir6U8L6UoFOAq0jJsAKUCloqrEhRSZppNFwFJxTSaQmo2bH1qWykhzN61EzZ9hTWb 161Ez45NZuRrGA5m/AVC8nZfzpryZ9hUDPn2FYymdEYDmfHSoHkA9zTHk7L+dV3kI4HPvXNOodEK Y95Mck5NV3fPLU13x7mq7yEdeTXJUqnVCmPd89eBUDyZ6cCmO+eTUTNn2FcVSqdMYDmf0qPcPWml s02uGVW70NlEkZ8e5qMmiiplK5SVgoAzSgZ6VIq+lKMHIG7DVXH1qVU9acqenJqZUx7muynRMZTG rGT1qdUz7CnLH/eqwkWeW/Ku6nSOedQYkeenAqykfZRT0jz7Cp0TsOBXZCmcs6g1I8dOTU6pj605 U7AVOiY6da6owOaUxqpjlqmC+tKq49zUqp61vGJzymIqZ9hUgX0pQKeBWiRi5CAU8DFHFFWQFLR0 pCaAAmmk0E0wt6UmxpDiQKjZvWmlqiZ/xNZtmkYjmb14FQs+fYUjv3NQO/cnArKUzeMB7PnpVd5O y/nTHkz7Cq7yE8Dj3rnnUOiFMe8mOnJqu8mOvJprydl/Oq7yYPHJrlnUOqFMe8nc1Xd89eBTXfHX k1C79zXFUqnTCA5nz7CoWfPSms+ep4qMtn6Vw1Kp0RgKW9KYTSE05U9a5HNydkabDQpNSqvpSquf pUqpn2FbUqJMpCKvp1qVUx2yaciZ4FTonYDJr0KdIwlMYseOTVhI+7flT0jxz1NTpHjk8+1dtOmc 06g1I89eBVhI89OBTki7t+VWEjz7CuqFM5Z1BqR9gKnRMdOTTlTPTgVMqdhXTGBzSmNVMe5qZUwO aVVx061IF/OtlEwlIQL608LmlC+tOrSxk2FFFFMQUUUE4oAO1NLUhb8qjLflSbKSFLUxmx9aaz9h ULPjp1rNyNIxHM+OT1qF37npTXfH1qB5Mcnr6VjKZvGA55M+wqB5M5A4FMkk4yenpVeSTOecLXNO odMKY95ey/nVd5MEgcmmPJnIHSq7P2H51yVKp1Qpj3f8TULvjk9fSmvJjgdahZvxNcVSqdMYDmfP J6elRM35U1m9ajJLGvPqVr6G8Yis2eBQF9aUL+dPArKMHJ3ZV7DQtShM/SlVO5/KplTPJ6V106Rn KY1E7DpUyJ2HWnomfYVOkfYdPWu+nROecxiR4x61YSPGCetPSPsOvrVhI8Y7mu2FM5p1BiR9z+VW EjzgngU9I8YJ5NWFT1rqhTOWdQYicegqdU446UqpnrUyr+ArojA5pTGquOlSBfzpVX0qQDHArVIx chAuPrTwKUClAq7GbYAUtFFUIKQmkJxTSaVx2FJphNNZvWo2bPsKhstRHM/pUTNjpTWb8qhaTsv5 1lKRrGA55APc1A79zyaaz9hVd5MH1NYSmdEIEjvxlqrvJnrwKY8mOScmq7vnlq5p1DqhTHvJnpwK rtJ2H5015CRzwKrvJ6cCuOpVOmFMe8mOBz71Cz49zTWf0qIt6Vw1Kx0xgKzevWmE5pKK45ScjVKw UYpQM0uKFFhcbTgvrSqoHualVPWrhTvuJyEVCfYVKiZ6cCnLHn71TqmfYV3U6RhKYxE7KKsJHjpy ackeenAqykfZRXbTpnNOoMSPB9TVhI8ct+VPSPHTk1OqY+tdcKZyzqDVT1qZEz7CnrHjk1Mq+tdM YHNKY1U9OBUqr6U5Uz7CpAvpWyiYSmIq4p4FKBTwK0SMmxAKWilqiRKXpSE00mgBSaaT3NITimM3 rUtlJCls1GW9KazevAqFnz7Cs3I1jEez+lQs+D6mms+elV3k7L+dYymbxgPeQD3NV3k7k/hTHkx0 OTVd5MdeTXNOodMKY95M8k4FV3kz7CmvJ3Jqu7568CuSpVOqFMc8hPA496hZ/Sms5PsKhZyelcVS sdMYDmfB9TULN+dIW9KYTXBUqm6iKT603kmgKWqVV9KwSlMq9hqpj3NShfWnKvp1qVUx7muylRM5 TGqnrUyx5HPApyx45NWEj7t+Vd9Okc85jEjz7CrCR9lp6R568CrCR56cCu2FM5p1CNI8HAGTVlI8 e5p6RjoBU6Jjpya6oUzlnUGLHjk1OqetOVMH1NTKnrW8YHNKY1Vz7CpFX8qcF9aeFzWyRi5CBfSn gYpaKszbCiiigAooppb0oAUkCmM1NLUxmx9alstRFZu5qJnzz0FNZ8cnrULv3PSspSNYwHM+fpUL Sdh+dMeT8BUDyZyBwKwlM6IwHvJjIHWq0kmM92prydh+dV3kwSBya5p1DqhTHSSY5PX0qB3zyenp TGfHuagd8cnr6Vx1Kp0wpj3fPsKgd88DpSO5PJ6elRM35Vw1Kx0xgKzelRs2PrTS2eBQF9a4Z1HJ 6GqVhACTmngUoFSKn5U4UwchqrngVMiY9zSonYdKmROw61206RjKY1Ux9anSPufyp6R4xxk1YSPG CeTXdTpHPOoMSPOCeBVhI847CnJH3P5VYSPOCeBXZCmcs6gxI89OnrVhI8cDr609E49BU6p6dK6o wOWdQYiY9zUypjryacq46VIF/Ot4xMJSEC+tPC5604L+dPArRIychAKUAU4Clq7EXCiikJpiDNNJ oJphNS2NIUmo2fH1pGf0qIt6VDkaRiKzevWomfHJpryY9zUDv3PJrGUjeMB7yZ9hUDSZ9hTXfjJq s8mevArCdQ6IUx7y9l/Oq7yY4HPvTXkJ6cCq7Sdl/OuSdQ6oUx7vjvk1A8mOvJpjyY4H51Cz49zX FUqnTCArvnk1EzZ56Cms3r1qMtmuGpVOiMBxbNNozRmufV7l2ClC557U5U9amVPWtYU7icrDVTsB gU7ZUqpn2FSbFrshS0MXMrqnpyamVMe5p6J2UVOkeOnJranSM5TGLH/eqwkWeW/KnpHjnqasJFjl vyrshTOadQakf5VOienAp6p61MkefYV1wpnLOoNROwFTImBxyaeqenAqVV9K6IxOaUxqrj61Kqet OVcU8CtVExlIQCngUoFLVpGdw4oopelMQdKQmkJppNFwsKTTC2OlNLZphb0qGzRRFLYqNnx7mms/ pUDPg+prJyNYwHu/c1A8ncnApryAe5qs8ncn8KwlM6IQHvJn2FV3kJ4HHvTXkzyTgVXeTPsK5p1D qhTHvJ2X86rvJjgHJpjyE8Dj3qFn9K46lU6YUxzvjryahd+5prPjpyahZvzrhqVjpjAczep4qMtn 6UhPrTeSa4Z1DVICe1OVPWlVMe5qULjrRCm5O7Bsaq5+lSqhPsKcqetTLHnrwK76VEylMaiZ4FTo nOAMmnJHn2FWEj7LXdTpHNOoNSPHuanSPHJ/KnpHg4AyasJHjnqa64UzlnUGJF3b8qsJHn6U5Y8H JqdU9a6YwOacxqp+VTKnYU5Uz7CpFX8q6IxOeUxFXHTrTwv504L6U8DFaJGTkIF9adRRVEBRRRQA UE4pCcVGzUDSHFvyqMt+VIzY5NRM+evAqHItRHM/YVEz46daYz56dKhaTsPzrGUzeMBzuB7moHkx yevpTXkxkDrVaSTGe5rnnM6IUx8kncnj0qu8mc9lpkkmOT19Kru/c9PSuWdQ6oUx7yZyB0quz9h+ dI78egqB3zwOlcVSqdUID3kxwOtQs3PqaazelRs+PrXBVrG8Yis3rUZJY0AFjmngVy3c2abCBfzp 4FKq54FSogHua3p0iZSGqnc/lUypkZPSnqn51Mkfc/lXdTpGEpjUTPsKnSPsOnrT0jzgngVYSPOO wrtp0jmnUGJH2HX1qwkeMdzT0j7Dp61YSPHA6+tdcKZyzqDEjwQTyasKnrSqmPc1MqY68mumMDml MaqZ61Mq/gKUL61IFz1rdRMJSEVfSnhfSlApwFWkZNgBSgUtFVYkKKTNNJouApOKaTSE1GzY+tS2 UkOZvWombPsKazevWomfHJrNyNYwHM34CoXk7L+dNeTPsKgZ8+wrGUzojAcz46VA8gHuaY8nZfzq u8hHA5965p1DohTHvJjknJqu755amu+Pc1XeQjrya5KlU6oUx7vnrwKgeTPTgUx3zyaiZs+wriqV TpjAcz+lRFvSmls0lcM6jexuo2CjFFKFJ+lZpNlXEAyalVMe5pypnpwKlVOwrpp0jOUxqpj3NTLH /ep6JjoMmp0jx7mu6nSOeUxqR55NSbfb9KmSLu35VP5Z9K7I0jmlUKSR56cCrKR9lFPSPPsKnROw 4FaQpmc6g1I8dOTU6pj605U7AVOiY6da6owOaUxqpjlqmC+tKq49zUqp61vGJzymIqZ9hUgX0pQK eBWiRi5CAU8DFHFFWQFLR0pCaAAmmk0E0wt6UmxpDiQKjZvWmlqiZ/xNZtmkYjmb14FQs+fYUjv3 NQO/cnArKUzeMB7PnpVd5Oy/nTHkz7Cq7yE8Dj3rnnUOiFMe8mOnJqu8mOvJprydl/Oq7yYPHJrl nUOqFMe8nc1Xd89eBTXfHXk1C79zXFUqnTCA5nz7CoWfPSms+ep4qMtn6Vw1Kp0RgKW9KYTSE05U 9a5HNydkabDQpNSqvpSqufpUqpn2FbUqJMpCKvp1qVUx2yaciZ4FTonYDJr0KdIwlMYseOTVhI+7 flT0jxz1NTpHjk8+1dtOmc06g1I89eBVhI89OBTki7t+VWEjz7CuqFM5Z1BqR9gKnRMdOTTlTPTg VMqdhXTGBzSmNVMe5qZUwOaVVx061IF/OtlEwlIQL608LmlC+tOrSxk2FFFFMQUUUE4oAO1NLUhb 8qjLflSbKSFLUxmx9aaz9hULPjp1rNyNIxHM+OT1qF37npTXfH1qB5Mcnr6VjKZvGA55M+wqB5M5 A4FMkk4yenpVeSTOecLXNOodMKY95ey/nVd5MEgcmmPJnIHSq7P2H51yVKp1Qpj3f8TULvjk9fSm vJjgdahZvxNcVSqdMYDmfPJ6elRM35U1m9ajJLGvPqVr6G8Yis2eBQF9aUL+dPArKMHJ3ZV7DQtS hM/SlVO5/KplTPJ6V106RnKY1E7DpUyJ2HWnomfYVOkfYdPWu+nROecxiR4x61YSPGCetPSPsOvr VhI8Y7mu2FM5p1BiR9z+VWEjzgngU9I8YJ5NWFT1rqhTOWdQYicegqdU446UqpnrUyr+ArojA5pT GquOlSBfzpVX0qQDHArVIxchAuPrTwKUClAq7GbYAUtFFUIKQmkJxTSaVx2FJphNNZvWo2bPsKhs tRHM/pUTNjpTWb8qhaTsv51lKRrGA55APc1A79zyaaz9hVd5MH1NYSmdEIEjvxlqrvJnrwKY8mOS cmq7vnlq5p1DqhTHvJnpwKrtJ2H5015CRzwKrvJ6cCuOpVOmFMe8mOBz71Cz49zTWf0qIt6Vw1Kx 0xgKzevWmE5pKK45ScjVKwUUoGakVMD1NOMGwbsNVPWpVT1pypj3NTLH/errp0jKUxqoT7Cp0jz0 4FPSPPJqwkefYV3U6RzTqDEj7KKsJHjpyaekeenAqwkfYCuyFM5Z1Bix49zUvln2qREx0GTUvle9 dCgc0p6lZU9amRM+wp6x45aplX1rSMCJTGqnpwKlVfSnKmfYVIF9K2UTCUxFXFPApQKeBWiRk2IB S0UtUSJS9KQmmk0AKTTSe5pCcUxm9alspIUtmoy3pTWb14FQs+fYVm5GsYj2f0qFnwfU01nz0qu8 nZfzrGUzeMB7yAe5qu8ncn8KY8mOhyarvJjrya5p1DphTHvJnknAqu8mfYU15O5NV3fPXgVyVKp1 QpjnkJ4HHvULP6U1nJ9hULOT0riqVjpjAcz4PqahZvzpC3pTCa4KlU3URSfWm8k0BS1SqvpWCUpl XsNVMe5qUL605V9OtSqmPc12UqJnKY1U9amWPI54FOWPHJqwkfdvyrvp0jnnMYkefYVYSPstPSPP XgVYSPPTgV2wpnNOoRpHg4AyaspHj3NPSMdAKnRMdOTXVCmcs6gxY8cmp1T1pypg+pqZU9a3jA5p TGqufYVIq/lTgvrTwua2SMXIQL6U8DFLRVmbYUUUUAFFFNLelACkgUxmppamM2PrUtlqIrN3NRM+ eegprPjk9ahd+56VlKRrGA5nz9KhaTsPzpjyfgKgeTOQOBWEpnRGA95MZA61Wkkxnu1NeTsPzqu8 mCQOTXNOodUKY6STHJ6+lQO+eT09KYz49zUDvjk9fSuOpVOmFMe759hUDvngdKR3J5PT0qJm/KuG pWOmMBWb0qNmx9aaWzwKAvrXDOo5PQ1SsIASc08ClAqRU/KnCmDkNVc8CpkTHuaVE7DpUyJ2HWu2 nSMZTGqmPrU6R9z+VPSPGOMmrCR4wTya7qdI551BiR5wTwKsJHnHYU5I+5/KrCR5wTwK7IUzlnUG JHnp09asJHjgdfWnonHoKnVPTpXVGByzqDETHuamVMdeTTlXHSpAv51vGJhKQgX1p4XPWnBfzp4F aJGTkIBSgCnAUtXYi4UUUhNMQZppNBNMJqWxpCk1Gz4+tIz+lRFvSocjSMRWb161Ez45NNeTHuag d+55NYykbxgPeTPsKgaTPsKa78ZNVnkz14FYTqHRCmPeXsv51XeTHA596a8hPTgVXaTsv51yTqHV CmPd8d8moHkx15NMeTHA/OoWfHua4qlU6YQFd88mombPPQU1m9etRls1w1Kp0RgOLZptGaM1z6vc uwUoXPPanKnrUyp61rCncTlYYqZ6cCplTsKcqZ9hU6R56cCu2nSMJTGonPHWp0jx15NPSPsoqwke OnJrtp0jmnUGJFjlvyqykeeTTljx7mp1jx96uuFM5Z1Bqpn2FTomRxwKcseetTqvHoK6YwOaUxqp joKfsFOVc9OlSbBWyiYORAq4+tSqnrTlXFPAqlEmUhAKeBSgUtWkZ3Diiil6UxB0pCaQmmk0XCwp NMLY6U0tmmFvSobNFEUtio2fHuaaz+lQM+D6msnI1jAe79zUDydycCmvIB7mqzydyfwrCUzohAe8 mfYVXeQngce9NeTPJOBVd5M+wrmnUOqFMe8nZfzqu8mOAcmmPITwOPeoWf0rjqVTphTHO+OvJqF3 7mms+OnJqFm/OuGpWOmMBzN6nioy2fpSE+tN5JrhnUNUgJ7U5U9aVUx7mpQuOtEKbk7sGxqrn6VK qE+wpyp61MseevArvpUTKUxqJngVOic4AyackefYVYSPstd1Okc06g1I8e5qdI8cn8qekeDgDJqw keOeprrhTOWdQYkXdvyqwkefpTljwcmp1T1rpjA5pzGqn5VMqdhTlTPsKkVfyrojE55TEVcdOtPC /nTgvpTwMVokZOQgX1p1FFUQFFFFABQTikJxUbNQNIcW/Koy35UjNjk1Ez568Coci1Ecz9hUTPjp 1pjPnp0qFpOw/OsZTN4wHO4HuageTHJ6+lNeTGQOtVpJMZ7mueczohTHySdyePSq7yZz2WmSSY5P X0qu79z09K5Z1DqhTHvJnIHSq7P2H50jvx6CoHfPA6VxVKp1QgPeTHA61Czc+pprN6VGz4+tcFWs bxiKzetRkljQAWOaeBXLdzZpsIF/OngUqrngVKiAe5renSJlIaqdz+VTKmRk9KeqfnUyR9z+Vd1O kYSmNRM+wqdI+w6etPSPOCeBVhI847Cu2nSOadQYkfYdfWrCR4x3NPSPsOnrVhI8cDr611wpnLOo MSPBBPJqwqetKqY9zUypjrya6YwOaUxqpnrUyr+ApQvrUgXPWt1EwlIRV9KeF9KUCnAVaRk2AFKB S0VViQopM00mi4Ck4ppNITUbNj61LZSQ5m9aiZs+wprN69aiZ8cms3I1jAczfgKheTsv5015M+wq Bnz7CsZTOiMBzPjpUDyAe5pjydl/Oq7yEcDn3rmnUOiFMe8mOScmq7vnlqa749zVd5COvJrkqVTq hTHu+evAqB5M9OBTHfPJqJmz7CuKpVOmMBzP6VEW9KaWzSVwzqN7G6jYKMUUoUn6Vmk2VcQDJqVU x7mnKmenAqVU7CumnSM5TGqmPc1Msf8Aep6JjoMmp0jx7mu6nSOeUxqx55NTpHn2FPSLHLflVlI8 8muyFI5Z1CNI/TAFWUj7AU5Uz7Cp0TPTgV1wpnNOoMRMHgZNTqmPc09UA6VIq+lbxgc0pjQvrUqp 605Vx7mngVsomLkIBTse1KBTquxncYBTwMUcUUxBS0dKQmgAJppNBNMLelJsaQ4kCo2b1ppaomf8 TWbZpGI5m9eBULPn2FI79zUDv3JwKylM3jAez56VXeTsv50x5M+wqu8hPA496551DohTHvJjpyar vJjryaa8nZfzqu8mDxya5Z1DqhTHvJ3NV3fPXgU13x15NQu/c1xVKp0wgOZ8+wqFnz0prPnqeKjL Z+lcNSqdEYClvSmE0hNOVPWuRzcnZGmw0KTUqr6Uqrn6VKqZ9hW1KiTKQir6dalVMdsmnImeBU6J 2Aya9CnSMJTGLHjk1YSPu35U9I8c9TU6R45PPtXbTpnNOoNSPPXgVYSPPTgU5Iu7flVhI8+wrqhT OWdQakfYCp0THTk05Uz04FTKnYV0xgc0pjVTHuamVMDmlVcdOtSBfzrZRMJSEC+tPC5pQvrTq0sZ NhRRRTEFFFBOKADtTS1IW/Koy35UmykhS1MZsfWms/YVCz46dazcjSMRzPjk9ahd+56U13x9ageT HJ6+lYymbxgOeTPsKgeTOQOBTJJOMnp6VXkkznnC1zTqHTCmPeXsv51XeTBIHJpjyZyB0quz9h+d clSqdUKY93/E1C745PX0pryY4HWoWb8TXFUqnTGA5nzyenpUTN+VNZvWoySxrz6la+hvGIrNngUB fWlC/nTwKyjByd2Vew0LUoTP0pVTufyqZUzyelddOkZymNROw6VMidh1p6Jn2FTpH2HT1rvp0Tnn MYkeMetWEjxgnrT0j7Dr61YSPGO5rthTOadQYkfc/lVhI84J4FPSPGCeTVhU9a6oUzlnUGInHoKn VOOOlKqZ61Mq/gK6IwOaUxqrjpUgX86VV9KkAxwK1SMXIQLj608ClApQKuxm2AFLRRVCCkJpCcU0 mlcdhSaYTTWb1qNmz7CobLURzP6VEzY6U1m/KoWk7L+dZSkaxgOeQD3NQO/c8mms/YVXeTB9TWEp nRCBI78Zaq7yZ68CmPJjknJqu755auadQ6oUx7yZ6cCq7Sdh+dNeQkc8Cq7yenArjqVTphTHvJjg c+9Qs+Pc01n9KiLelcNSsdMYCs3r1phOaSiuOUnI1SsFFKBmpFTA9TTjBsG7DVT1qVU9acqY9zUy x/3q66dIylMaqE+wqdI89OBT0jzyasJHn2Fd1Okc06gxI+yirCR46cmnpHnpwKsJH2UV2QpnLOoM SPHuanWPHWnImOgyanVMe5rqjA5pTGrHnrUyrx6CnBfWpFT1reMTnlMRVz0HFSquOlAFPArRIxch AKcBilApauxNwoopM0CCl6UhNNJoAUmmk9zSE4pjN61LZSQpbNRlvSms3rwKhZ8+wrNyNYxHs/pU LPg+pprPnpVd5Oy/nWMpm8YD3kA9zVd5O5P4Ux5MdDk1XeTHXk1zTqHTCmPeTPJOBVd5M+wprydy aru+evArkqVTqhTHPITwOPeoWf0prOT7CoWcnpXFUrHTGA5nwfU1CzfnSFvSmE1wVKpuoik+tN5J oClqlVfSsEpTKvYaqY9zUoX1pyr6dalVMe5rspUTOUxqp61MseRzwKcseOTVhI+7flXfTpHPOYxI 8+wqwkfZaekeevAqwkeenArthTOadQjSPBwBk1ZSPHuaekY6AVOiY6cmuqFM5Z1Bix45NTqnrTlT B9TUyp61vGBzSmNVc+wqRV/KnBfWnhc1skYuQgX0p4GKWirM2wooooAKKKaW9KAFJApjNTS1MZsf WpbLURWbuaiZ889BTWfHJ61C79z0rKUjWMBzPn6VC0nYfnTHk/AVA8mcgcCsJTOiMB7yYyB1qtJJ jPdqa8nYfnVd5MEgcmuadQ6oUx0kmOT19Kgd88np6Uxnx7moHfHJ6+lcdSqdMKY93z7CoHfPA6Uj uTyenpUTN+VcNSsdMYCs3pUbNj600tngUBfWuGdRyehqlYQAk5p4FKBUip+VOFMHIaq54FTImPc0 qJ2HSpkTsOtdtOkYymNVMfWp0j7n8qekeMcZNWEjxgnk13U6RzzqDEjzgngVYSPOOwpyR9z+VWEj zgngV2QpnLOoMSPPTp61YSPHA6+tPROPQVOqenSuqMDlnUGImPc1MqY68mnKuOlSBfzreMTCUhAv rTwuetOC/nTwK0SMnIQClAFOApauxFwoopCaYgzTSaCaYTUtjSFJqNnx9aRn9KiLelQ5GkYis3r1 qJnxyaa8mPc1A79zyaxlI3jAe8mfYVA0mfYU134yarPJnrwKwnUOiFMe8vZfzqu8mOBz7015CenA qu0nZfzrknUOqFMe7475NQPJjryaY8mOB+dQs+Pc1xVKp0wgK755NRM2eegprN69ajLZrhqVTojA cWzTaM0Zrn1e5dgpQuee1OVPWplT1rWFO4nKwxUz04FTKnYU5Uz7Cp0jz04FdtOkYSmNROeOtTpH jryaekfZRVhI8dOTXbTpHNOoMSLHLflVlI88mnLHj3NTrHj71dcKZyzqDVTPsKnRMjjgU5Y89anV cj0FdMYHNKY1Ux0qRV9Kcq56DipQuBxWyiYSkNVce5p4FKB6U4DFaJGTYgFOpaKokKKQmkJoACaT NNJx1pu81NxpEhNMLY6U0tmmFvSk2WoilsVGz49zTWf0qBnwfU1k5GsYD3fuageTuTgU15APc1We TuT+FYSmdEID3kz7Cq7yE8Dj3pryZ5JwKrvJn2Fc06h1Qpj3k7L+dV3kxwDk0x5CeBx71Cz+lcdS qdMKY53x15NQu/c01nx05NQs351w1Kx0xgOZvU8VGWz9KQn1pvJNcM6hqkBPanKnrSqmPc1KFx1o hTcndg2NVc/SpVQn2FOVPWpljz14Fd9KiZSmNRM8Cp0TnAGTTkjz7CrCR9lrup0jmnUGpHj3NTpH jk/lT0jwcAZNWEjxz1NdcKZyzqDEi7t+VWEjz9KcseDk1OqetdMYHNOY1U/KplTsKcqZ9hUir+Vd EYnPKYirjp1p4X86cF9KeBitEjJyEC+tOooqiAooooAKCcUhOKjZqBpDi35VGW/KkZscmomfPXgV DkWojmfsKiZ8dOtMZ89OlQtJ2H51jKZvGA53A9zUDyY5PX0pryYyB1qtJJjPc1zzmdEKY+STuTx6 VXeTOey0ySTHJ6+lV3fuenpXLOodUKY95M5A6VXZ+w/Okd+PQVA754HSuKpVOqEB7yY4HWoWbn1N NZvSo2fH1rgq1jeMRWb1qMksaACxzTwK5bubNNhAv508ClVc8CpUQD3Nb06RMpDVTufyqZUyMnpT 1T86mSPufyrup0jCUxqJn2FTpH2HT1p6R5wTwKsJHnHYV206RzTqDEj7Dr61YSPGO5p6R9h09asJ HjgdfWuuFM5Z1BiR4IJ5NWFT1pVTHuamVMdeTXTGBzSmNVM9amVfwFKF9akC561uomEpCKvpTwvp SgU4CrSMmwApQKWiqsSFFJmmk0XAUnFNJpCajZsfWpbKSHM3rUTNn2FNZvXrUTPjk1m5GsYDmb8B ULydl/OmvJn2FQM+fYVjKZ0RgOZ8dKgeQD3NMeTsv51XeQjgc+9c06h0Qpj3kxyTk1Xd88tTXfHu arvIR15NclSqdUKY93z14FQPJnpwKY755NRM2fYVxVKp0xgOZ/Soi3pTS2aSuGdRvY3UbBRiilCk /Ss0myriAZNSqmPc05Uz04FSqnYV006RnKY1Ux7mplj/AL1PRMdBk1OkePc13U6RzymNWPPJqdI8 +wp6RY5b8qspHnk12QpHLOoRpH6YAqykfYCnKmfYVOiZ6cCuuFM5p1BiJg8DJqdUx7mnqgHSpFX0 reMDmlMaF9alVPWnKuPc08CtlExchAKeBQBTqtIzbAD0paKKYgpCaQmkJpDsBNMLYpC3pUZb0qWy 1EcW9aZuNRs+Pc1HuPqahyNFAnZvU4FQs+fYUjv3NQO/cnArOUzSMB7PnpVd5Oy/nTHkz7Cq7yE8 Dj3rnnUOiFMe8mOnJqu8mOvJprydl/Oq7yYPHJrlnUOqFMe8nc1Xd89eBTXfHXk1C79zXFUqnTCA 5nz7CoWfPSms+ep4qMtn6Vw1Kp0RgKW9KYTSE05U9a5HNydkabDQpNSqvpSqufpUqpn2FbUqJMpC Kvp1qVUx2yaciZ4FTonYDJr0KdIwlMYseOTVhI+7flT0jxz1NTpHjk8+1dtOmc06g1I89eBVhI89 OBTki7t+VWEjz7CuqFM5Z1BqR9gKnRMdOTTlTPTgVMqdhXTGBzSmNVMe5qZUwOaVVx061IF/OtlE wlIQL608LmlC+tOrSxk2FFFFMQUUUE4oAO1NLUhb8qjLflSbKSFLUxmx9aaz9hULPjp1rNyNIxHM +OT1qF37npTXfH1qB5Mcnr6VjKZvGA55M+wqB5M5A4FMkk4yenpVeSTOecLXNOodMKY95ey/nVd5 MEgcmmPJnIHSq7P2H51yVKp1Qpj3f8TULvjk9fSmvJjgdahZvxNcVSqdMYDmfPJ6elRM35U1m9aj JLGvPqVr6G8Yis2eBQF9aUL+dPArKMHJ3ZV7DQtShM/SlVO5/KplTPJ6V106RnKY1E7DpUyJ2HWn omfYVOkfYdPWu+nROecxiR4x61YSPGCetPSPsOvrVhI8Y7mu2FM5p1BiR9z+VWEjzgngU9I8YJ5N WFT1rqhTOWdQYicegqdU446UqpnrUyr+ArojA5pTGquOlSBfzpVX0qQDHArVIxchAuPrTwKUClAq 7GbYAUtFFUIKQmkJxTSaVx2FJphNNZvWo2bPsKhstRHM/pUTNjpTWb8qhaTsv51lKRrGA55APc1A 79zyaaz9hVd5MH1NYSmdEIEjvxlqrvJnrwKY8mOScmq7vnlq5p1DqhTHvJnpwKrtJ2H5015CRzwK rvJ6cCuOpVOmFMe8mOBz71Cz49zTWf0qIt6Vw1Kx0xgKzevWmE5pKK45ScjVKwUUoGakVMD1NOMG wbsNVPWpVT1pypj3NTLH/errp0jKUxqoT7Cp0jz04FPSPPJqwkefYV3U6RzTqDEj7KKsJHjpyaek eenAqwkfZRXZCmcs6gxI8e5qdY8daciY6DJqdUx7muqMDmlMaseetTKvHoKcF9akVPWt4xOeUxFX PQcVKq46UAU8CtEjFyEApwGKUClq7E3CiikJoEBNITSE0wtilcaQpOOtMZs00t61GzY61DZooji3 4CoWkz0prvkc8CoGfPsKylM2jAc0gHSot3vUbSZ4FQ+YvrWLmdEYFt5APc1XeTuT+FMeTHQ5NV3k x15NYzqGkKY95M8k4FV3kz7CmvJ3Jqu7568CuSpVOqFMc8hPA496hZ/Sms5PsKhZyelcVSsdMYDm fB9TULN+dIW9KYTXBUqm6iKT603kmgKWqVV9KwSlMq9hqpj3NShfWnKvp1qVUx7muylRM5TGqnrU yx5HPApyx45NWEj7t+Vd9Okc85jEjz7CrCR9lp6R568CrCR56cCu2FM5p1CNI8HAGTVlI8e5p6Rj oBU6Jjpya6oUzlnUGLHjk1OqetOVMH1NTKnrW8YHNKY1Vz7CpFX8qcF9aeFzWyRi5CBfSngYpaKs zbCiiigAooppb0oAUkCmM1NLUxmx9alstRFZu5qJnzz0FNZ8cnrULv3PSspSNYwHM+fpULSdh+dM eT8BUDyZyBwKwlM6IwHvJjIHWq0kmM92prydh+dV3kwSBya5p1DqhTHSSY5PX0qB3zyenpTGfHua gd8cnr6Vx1Kp0wpj3fPsKgd88DpSO5PJ6elRM35Vw1Kx0xgKzelRs2PrTS2eBQF9a4Z1HJ6GqVhA CTmngUoFSKn5U4UwchqrngVMiY9zSonYdKmROw61206RjKY1Ux9anSPufyp6R4xxk1YSPGCeTXdT pHPOoMSPOCeBVhI847CnJH3P5VYSPOCeBXZCmcs6gxI89OnrVhI8cDr609E49BU6p6dK6owOWdQY iY9zUypjryacq46VIF/Ot4xMJSEC+tPC5604L+dPArRIychAKUAU4Clq7EXCiikJpiDNNJoJphNS 2NIUmo2fH1pGf0qIt6VDkaRiKzevWomfHJpryY9zUDv3PJrGUjeMB7yZ9hUDSZ9hTXfjJqs8mevA rCdQ6IUx7y9l/Oq7yY4HPvTXkJ6cCq7Sdl/OuSdQ6oUx7vjvk1A8mOvJpjyY4H51Cz49zXFUqnTC Arvnk1EzZ56Cms3r1qMtmuGpVOiMBxbNNozRmufV7l2ClC557U5U9amVPWtYU7icrDFTPTgVMqdh TlTPsKnSPPTgV206RhKY1E5461OkeOvJp6R9lFWEjx05NdtOkc06gxIsct+VWUjzyacsePc1OseP vV1wpnLOoNVM+wqdEyOOBTljz1qdVyPQV0xgc0pjVTHSpFX0pyrnoOKlC4HFbKJhKQ1Vx7mngUoH pTgMVokZNiAU6loqiQopCaQmgANITTScdaYzZqWykhS3pUZbHSkLcegqFnz0rNyNYxHM+Pc1C746 8mmNJjpUDyY9zWMpm8YD3k7sarvJnrwKY8mOpyageTuxrmnUOmFMc8mfYVF5o96ieTPXgVF5vtXP KqdMaZaeTsv51XeTHAOTTHkJ4HHvULP6VhUq2NIQHO+OvJqF37mms+Pc1CzfnXDUrHTGA5m9TxUZ bP0pCfWm8sa4Z1DVICe1OVPWlVMe5qULjrRCm5O7Bsaq5+lSqhPsKcqetTLHnrwK76VEylMaiZ4F TonOAMmnJHn2FWEj7Cu6nSOadQakePc1OkeOT+VPSPHAGTVhI8c9TXXCmcs6gxIu7flVhI8/SnLH g5NTqnrXTGBzTmNVPyqZU7CnKmfYVIq/lXRGJzymIq46daeF/OnBfSngYrRIychAvrTqKKogKKKK ACgnFITio2agaQ4t+VRlvypGbHJqJnz14FQ5FqI5n7ComfHTrTGfPTpULSdh+dYymbxgOdwPc1A8 mOT19Ka8mMgdarSSYz3Nc85nRCmPkk7k8elV3kznstMkkxyevpVd37np6VyzqHVCmPeTOQOlV2fs PzpHfj0FQO+eB0riqVTqhAe8mOB1qFm59TTWb0qNnx9a4KtY3jEVm9ajJLGgAk5p4Fcl3NmmwgX8 6eBSqueBUqIB7muinSJlIaqdz+VTKmRk9KeqfnUyR9z+Vd1OkYSmNRM+wqdI+w6etPSPOCeBVhI8 47Cu2nSOadQYkfYdfWrCR4x3NPSPsOnrVhI8cDr611wpnLOoMSPBBPJqwqetKqY9zUypjrya6YwO aUxqpnrUyr+ApQvrUgXPWt1EwlIRV9KeF9KUCnAVaRk2AFKBS0VViQopM00mi4Ck4ppNITUbNj61 LZSQ5m9aiZs+wprN69aiZ8cms3I1jAczfgKheTsv5015M+wqBnz7CsZTOiMBzPjpUDyAe5pjydl/ Oq7yEcDn3rmnUOiFMe8mOScmq7vnlqa749zVd5MdetclSqdUKY93z14FQPJnpwKY755NRM2fYVxV Kp0xgOZ/Soi3pTS2aSuGdRvY3UbBRiilCk/Ss0myriAZNSqmPc05UzwOBUqp2FdNOkZymNVMe5qZ Y/71PRMdOTU6R49zXdTpHPKY1Y88mp0jz7CnpFjlvyqysfc12QpHLOoRpHnpgCrKR9gKcqZ9hU6J npwK64UzlnUGImDwMmp1THuaeqY6VIq+lbxgc8pjQvrUqp605Vx7mngVsomLkIBTwKAKdVpGbYAe lLRRTEFITSE00mkOwpNMLYpC3pUZb0qWy1EcW9TUTMBTWfHuahd8dTk1nKRrGA53z14FQM+fYU13 7sarvJnr0rnlM6IUx7SZ4FV2kxwtMeTPsKrtJngVzTqHTCmPeTHTk1XeQA88mmtJ2FQM+Pc1x1Kp 1QpjnfuTUfmH2qNn9eTUW8+tcU62puoGxrX/ACE5/wDgP8hWcelFFdGJ+N+phhv4cfQgph6miivM mdsRh605O9FFc3Ut7Eo61In3hRRXdSMpE1TjpRRXoUjCRYX7o+lWY/uiiiuyByTJ4+9Tp978KKK6 oHNMnT7wqaiit4nNLcmqQdBRRWyMWPXpS0UVZmFFFFABRRRQBGeppjdaKKTKRE/3qik+6PrRRWUj aJC/3TVdvun6UUVzzOiBAelVm+8frRRXPM6oFeT75qCT71FFcdQ6YEUnQfWoG6UUVw1Op0wIz901 FRRXnVDaI9acOlFFOmDJk6CpV+9+FFFd1PoYyJ4/vCrA+8PrRRXfTOaZYHSpk+6PpRRXZA5pFqP7 oqePpRRXVE5Jkyd6kXrRRW8TCRKOoqSiitUYsdTh0ooqkQwoNFFMBp6Uw9DRRUsaG1DRRUSNIkbf eNQSfeH0oorKRtAhk7VBJ9w0UVzzOmBXb7p+lV6KK5JnVAr1BJ940UVx1NjqiQv96om7UUVxVepv EbRRRXIaB3qUUUVrTJZMOg+lSx9PxoorupmEiePrViP75+lFFdtPoc0ydfvL9asj7tFFdkDlmWe9 TL90fSiiumJzSJU6VKneiitYmEiQUo6/jRRWiMmPpaKKpEhSGiihgNNMfpRRUspEZ6UyiioZoivU DfeP1oorCR0RIJPvD6VXl7UUVhM6aZBL0H1qBun4UUVyT3OmBXqCiiuKodUSFvvGkoorgnubo//Z CmVuZHN0cmVhbSAKZW5kb2JqIAozMyAwIG9iaiAKPDwKL0YgNAovQlMgCjw8Ci9XIDAKPj4KL1N1 YnR5cGUgL0xpbmsKL0EgCjw8Ci9VUkkgKG1haWx0bzptYWl0cmUuamFjcXVlc19jYXBsYWluQGhv dG1haWwuZnIpCi9UeXBlIC9BY3Rpb24KL1MgL1VSSQo+PgovU3RydWN0UGFyZW50IDIKL1JlY3Qg WzExMC4yMiA1NDEuMjkgMjgwLjA5IDU1Mi43OV0KPj4KZW5kb2JqIAozMCAwIG9iaiAKPDwKL0Zp cnN0Q2hhciAzMgovRm9udERlc2NyaXB0b3IgMzQgMCBSCi9OYW1lIC9GNQovRW5jb2RpbmcgL1dp bkFuc2lFbmNvZGluZwovQmFzZUZvbnQgL0FyaWFsLEJvbGQKL1N1YnR5cGUgL1RydWVUeXBlCi9M YXN0Q2hhciAxMTcKL1dpZHRocyAzNSAwIFIKL1R5cGUgL0ZvbnQKPj4KZW5kb2JqIAozNCAwIG9i aiAKPDwKL0ZvbnROYW1lIC9BcmlhbCxCb2xkCi9TdGVtViA0NwovTGVhZGluZyAzMwovQXNjZW50 IDkwNQovRmxhZ3MgMzIKL0ZvbnRXZWlnaHQgNzAwCi9YSGVpZ2h0IDI1MAovRGVzY2VudCAtMjEw Ci9BdmdXaWR0aCA0NzkKL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDI2MjgKL0ZvbnRCQm94IFst NjI4IC0yMTAgMjAwMCA3MjhdCi9UeXBlIC9Gb250RGVzY3JpcHRvcgovQ2FwSGVpZ2h0IDcyOAo+ PgplbmRvYmogCjMgMCBvYmogCjw8Ci9QYXJlbnRUcmVlIDM2IDAgUgovUm9sZU1hcCAzNyAwIFIK L1BhcmVudFRyZWVOZXh0S2V5IDMKL0sgWzM4IDAgUl0KL1R5cGUgL1N0cnVjdFRyZWVSb290Cj4+ CmVuZG9iaiAKMzcgMCBvYmogCjw8Ci9EaWFncmFtIC9GaWd1cmUKL0hlYWRlciAvU2VjdAovV29y a3NoZWV0IC9QYXJ0Ci9Gb290ZXIgL1NlY3QKL0lubGluZVNoYXBlIC9TZWN0Ci9TbGlkZSAvUGFy dAovRm9vdG5vdGUgL05vdGUKL0Fubm90YXRpb24gL1NlY3QKL0NoYXJ0IC9TZWN0Ci9EaWFsb2dz aGVldCAvUGFydAovRW5kbm90ZSAvTm90ZQovQXJ0aWZhY3QgL1NlY3QKL0NoYXJ0c2hlZXQgL1Bh cnQKL1dvcmtib29rIC9Eb2N1bWVudAovTWFjcm9zaGVldCAvUGFydAovVGV4dGJveCAvU2VjdAo+ PgplbmRvYmogCjM2IDAgb2JqIAo8PAovTnVtcyBbMCAzOSAwIFIgMSA0MCAwIFIgMiA0MSAwIFJd Cj4+CmVuZG9iaiAKMzggMCBvYmogCjw8Ci9QIDMgMCBSCi9LIFs0MiAwIFIgNDMgMCBSIDQ0IDAg UiA0NSAwIFIgNDYgMCBSXQovVHlwZSAvU3RydWN0RWxlbQovUyAvU2VjdAo+PgplbmRvYmogCjQy IDAgb2JqIAo8PAovUGcgNCAwIFIKL1AgMzggMCBSCi9BbHQgKCkKL0sgWzBdCi9UeXBlIC9TdHJ1 Y3RFbGVtCi9TIC9GaWd1cmUKPj4KZW5kb2JqIAozOSAwIG9iaiBbNDIgMCBSIDQ3IDAgUiA0OCAw IFIgNDkgMCBSIDUwIDAgUiA1MSAwIFIgNTIgMCBSIDUzIDAgUiA1NCAwIFIgNTUgMCBSIDU2IDAg UiA1NyAwIFIgNTggMCBSIDU5IDAgUiA2MCAwIFIgNjEgMCBSIDYyIDAgUiA2MyAwIFIgNjQgMCBS IDY1IDAgUiA2NiAwIFIgNjcgMCBSIDY4IDAgUiA2OSAwIFIgNzAgMCBSXQplbmRvYmogCjQzIDAg b2JqIAo8PAovUGcgNCAwIFIKL1AgMzggMCBSCi9LIFs0NyAwIFIgNDggMCBSIDQ5IDAgUiA1MCAw IFIgNTEgMCBSIDUyIDAgUiA1MyAwIFIgNTQgMCBSIDU1IDAgUiA1NiAwIFIgNTcgMCBSIDU4IDAg UiA1OSAwIFIgNjAgMCBSIDYxIDAgUiA2MiAwIFIgNjMgMCBSIDY0IDAgUiA2NSAwIFIgNjYgMCBS IDY3IDAgUiA2OCAwIFIgNjkgMCBSIDcwIDAgUl0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4K ZW5kb2JqIAo0NyAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMV0KL1R5cGUgL1N0 cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo0OCAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAg UgovSyBbMl0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo0OSAwIG9iaiAKPDwK L1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbM10KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5k b2JqIAo1MCAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbNF0KL1R5cGUgL1N0cnVj dEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo1MSAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgov SyBbNV0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo1MiAwIG9iaiAKPDwKL1Bn IDQgMCBSCi9QIDQzIDAgUgovSyBbNl0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2Jq IAo1MyAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbN10KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo1NCAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBb OF0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo1NSAwIG9iaiAKPDwKL1BnIDQg MCBSCi9QIDQzIDAgUgovSyBbOV0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo1 NiAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMTBdCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNTcgMCBvYmogCjw8Ci9QZyA0IDAgUgovUCA0MyAwIFIKL0sgWzEx XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjU4IDAgb2JqIAo8PAovUGcgNCAw IFIKL1AgNDMgMCBSCi9LIFsxMl0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo1 OSAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMTNdCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNjAgMCBvYmogCjw8Ci9QZyA0IDAgUgovUCA0MyAwIFIKL0sgWzE0 XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjYxIDAgb2JqIAo8PAovUGcgNCAw IFIKL1AgNDMgMCBSCi9LIFsxNV0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo2 MiAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMTZdCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNjMgMCBvYmogCjw8Ci9QZyA0IDAgUgovUCA0MyAwIFIKL0sgWzE3 XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjY0IDAgb2JqIAo8PAovUGcgNCAw IFIKL1AgNDMgMCBSCi9LIFsxOF0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo2 NSAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMTldCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNjYgMCBvYmogCjw8Ci9QZyA0IDAgUgovUCA0MyAwIFIKL0sgWzIw XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjY3IDAgb2JqIAo8PAovUGcgNCAw IFIKL1AgNDMgMCBSCi9LIFsyMV0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo2 OCAwIG9iaiAKPDwKL1BnIDQgMCBSCi9QIDQzIDAgUgovSyBbMjJdCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNjkgMCBvYmogCjw8Ci9QZyA0IDAgUgovUCA0MyAwIFIKL0sgWzIz XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjcwIDAgb2JqIAo8PAovUGcgNCAw IFIKL1AgNDMgMCBSCi9LIFsyNF0KL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo0 NCAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDM4IDAgUgovQWx0ICgpCi9LIFswXQovVHlwZSAvU3Ry dWN0RWxlbQovUyAvRmlndXJlCj4+CmVuZG9iaiAKNDAgMCBvYmogWzQ0IDAgUiA0NSAwIFIgNzEg MCBSIDcyIDAgUiA3MyAwIFIgNzQgMCBSIDc1IDAgUiA3NiAwIFIgNzcgMCBSIDc4IDAgUiA3OSAw IFIgODAgMCBSIDgxIDAgUiA4MiAwIFIgODMgMCBSIDg0IDAgUiA4NSAwIFIgODYgMCBSIDg3IDAg UiA4OCAwIFIgODkgMCBSIDkwIDAgUiA5MSAwIFIgOTIgMCBSIDkzIDAgUiA5NCAwIFIgOTUgMCBS IDk2IDAgUiA5NyAwIFIgOTggMCBSIDk5IDAgUiAxMDAgMCBSIDEwMSAwIFIgMTAyIDAgUiAxMDMg MCBSIDEwNCAwIFIgMTA1IDAgUiAxMDYgMCBSIDEwNyAwIFIgMTA4IDAgUiAxMDkgMCBSXQplbmRv YmogCjQ1IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgMzggMCBSCi9LIFsxXQovVHlwZSAvU3RydWN0 RWxlbQovUyAvUAo+PgplbmRvYmogCjQ2IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgMzggMCBSCi9L IFs3MSAwIFIgNzIgMCBSIDczIDAgUiA3NCAwIFIgNzUgMCBSIDc2IDAgUiA3NyAwIFIgNzggMCBS IDExMCAwIFIgODIgMCBSIDgzIDAgUiA4NCAwIFIgODUgMCBSIDg2IDAgUiA4NyAwIFIgODggMCBS IDg5IDAgUiA5MCAwIFIgOTEgMCBSIDkyIDAgUiA5MyAwIFIgOTQgMCBSIDk1IDAgUiA5NiAwIFIg OTcgMCBSIDk4IDAgUiA5OSAwIFIgMTAwIDAgUiAxMDEgMCBSIDEwMiAwIFIgMTAzIDAgUiAxMDQg MCBSIDEwNSAwIFIgMTA2IDAgUiAxMDcgMCBSIDEwOCAwIFIgMTA5IDAgUl0KL1R5cGUgL1N0cnVj dEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo3MSAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgov SyAyCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9TcGFuCj4+CmVuZG9iaiAKNzIgMCBvYmogCjw8Ci9Q ZyA1IDAgUgovUCA0NiAwIFIKL0sgWzNdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9i aiAKNzMgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIKL0sgWzRdCi9UeXBlIC9TdHJ1Y3RF bGVtCi9TIC9QCj4+CmVuZG9iaiAKNzQgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIKL0sg WzVdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKNzUgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzZdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAK NzYgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIKL0sgWzddCi9UeXBlIC9TdHJ1Y3RFbGVt Ci9TIC9QCj4+CmVuZG9iaiAKNzcgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIKL0sgWzhd Ci9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKNzggMCBvYmogCjw8Ci9QZyA1IDAg UgovUCA0NiAwIFIKL0sgWzldCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKMTEw IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFs3OSAwIFIgNDEgMCBSIDgxIDAgUl0K L1R5cGUgL1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAo3OSAwIG9iaiAKPDwKL1BnIDUgMCBS Ci9QIDExMCAwIFIKL0sgMTAKL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1NwYW4KPj4KZW5kb2JqIAo0 MSAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDExMCAwIFIKL0sgWzExMSAwIFIgODAgMCBSXQovVHlw ZSAvU3RydWN0RWxlbQovUyAvTGluawo+PgplbmRvYmogCjExMSAwIG9iaiAKPDwKL1BnIDUgMCBS Ci9PYmogMzMgMCBSCi9UeXBlIC9PQkpSCj4+CmVuZG9iaiAKODAgMCBvYmogCjw8Ci9QZyA1IDAg UgovUCA0MSAwIFIKL0sgMTEKL1R5cGUgL1N0cnVjdEVsZW0KL1MgL1NwYW4KPj4KZW5kb2JqIAo4 MSAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDExMCAwIFIKL0sgMTIKL1R5cGUgL1N0cnVjdEVsZW0K L1MgL1NwYW4KPj4KZW5kb2JqIAo4MiAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MTNdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKODMgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzE0XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog Cjg0IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFsxNV0KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo4NSAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MTZdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKODYgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzE3XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog Cjg3IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFsxOF0KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo4OCAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MTldCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKODkgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzIwXQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog CjkwIDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFsyMV0KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo5MSAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MjJdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKOTIgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzIzXQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog CjkzIDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFsyNF0KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo5NCAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MjVdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKOTUgMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzI2XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog Cjk2IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFsyN10KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAo5NyAwIG9iaiAKPDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBb MjhdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9iaiAKOTggMCBvYmogCjw8Ci9QZyA1 IDAgUgovUCA0NiAwIFIKL0sgWzI5XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmog Cjk5IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFszMF0KL1R5cGUgL1N0cnVjdEVs ZW0KL1MgL1AKPj4KZW5kb2JqIAoxMDAgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIKL0sg WzMxXQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjEwMSAwIG9iaiAKPDwKL1Bn IDUgMCBSCi9QIDQ2IDAgUgovSyBbMzJdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVuZG9i aiAKMTAyIDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFszM10KL1R5cGUgL1N0cnVj dEVsZW0KL1MgL1AKPj4KZW5kb2JqIAoxMDMgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAwIFIK L0sgWzM0XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjEwNCAwIG9iaiAKPDwK L1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBbMzVdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+CmVu ZG9iaiAKMTA1IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFszNl0KL1R5cGUgL1N0 cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAoxMDYgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0NiAw IFIKL0sgWzM3XQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjEwNyAwIG9iaiAK PDwKL1BnIDUgMCBSCi9QIDQ2IDAgUgovSyBbMzhdCi9UeXBlIC9TdHJ1Y3RFbGVtCi9TIC9QCj4+ CmVuZG9iaiAKMTA4IDAgb2JqIAo8PAovUGcgNSAwIFIKL1AgNDYgMCBSCi9LIFszOV0KL1R5cGUg L1N0cnVjdEVsZW0KL1MgL1AKPj4KZW5kb2JqIAoxMDkgMCBvYmogCjw8Ci9QZyA1IDAgUgovUCA0 NiAwIFIKL0sgWzQwXQovVHlwZSAvU3RydWN0RWxlbQovUyAvUAo+PgplbmRvYmogCjEzIDAgb2Jq IFsyNzggMjc4IDAgMCAwIDAgMCAxOTEgMzMzIDMzMyAwIDAgMjc4IDMzMyAyNzggMCA1NTYgNTU2 IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMjc4IDAgMCAwIDAgMCAwIDY2NyA2Njcg NzIyIDcyMiA2NjcgNjExIDc3OCA3MjIgMjc4IDUwMCA2NjcgNTU2IDgzMyA3MjIgNzc4IDY2NyA3 NzggNzIyIDY2NyA2MTEgNzIyIDY2NyA5NDQgNjY3IDY2NyA2MTEgMCAwIDAgMCAwIDAgNTU2IDU1 NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMjIyIDAgMjIyIDgzMyA1NTYgNTU2IDU1NiA1 NTYgMzMzIDUwMCAyNzggNTU2IDUwMCAwIDUwMCA1MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCA1NTYgMCA1NTYgMCAwIDAgMCAwIDU1NiA1NTYgMCAwIDAgMCAyNzhdCmVuZG9i aiAKMTUgMCBvYmogWzI1MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjUwIDMzMyAyNTAgMCA1MDAg MCA1MDAgMCAwIDUwMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAgMCA3MjIgNjY3IDY2NyA3MjIgNjEx IDAgMCAwIDMzMyAwIDAgMCA4ODkgMCA3MjIgNTU2IDAgNjY3IDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCA0NDQgNTAwIDQ0NCA1MDAgNDQ0IDMzMyA1MDAgNTAwIDI3OCAyNzggMCAyNzggNzc4 IDUwMCA1MDAgNTAwIDUwMCAzMzMgMzg5IDI3OCA1MDAgNTAwIDAgNTAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgNDQ0IDAgMCAwIDAgMCAwIDAgMCA0NDRdCmVuZG9iaiAKMTcg MCBvYmogCjw8Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9MZW5ndGggMzY5Cj4+CnN0cmVhbQp4nH2S TW+DMAyG7/yKHLtDRcJHaSWE1NJW4rAPje007UCD6ZBGQIEe+PdLbNp1ndRIgJ7Y72sn2E2zbabq gbkvupU5DKyqVamhb09aAjvAsVaOWLCylsNE+JZN0TmuEedjP0CTqap14pi5rybYD3pks3XZHuDB cZ91CbpWRzZ7T3PD+anrvqEBNTDuJAkroTJGj0X3VDTAXJTNs9LE62GcG81vxtvYAfOQBTUj2xL6 rpCgC3UEJ+ZmJSzem5U4oMqbuE+qQyW/Co3Zvsnm3OMJUkQUEO2JUnSaNOLscCkoyEKE+PH5lE3x 6LagWFJaiCXEmigi2hKtkUwXlgJBRLqAdKYnpBWSz4m21436/xoNJkOquSDfID1rcZMMAzp5uKLN 9M+RvNsjhRtMi5aoXZD9jt+/tYh6jkTCPmw6ldotk8+7tTb2sj0uUqy1WRCtrmvZv26H8zJS8qS1 mSacYBwjO0C1gsuQd21nVfb5AQs33sUKZW5kc3RyZWFtIAplbmRvYmogCjIyIDAgb2JqIAo8PAov RmlsdGVyIC9GbGF0ZURlY29kZQovTGVuZ3RoIDU3NjQxCi9MZW5ndGgxIDIwMTUzMgo+PgpzdHJl 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 KUUZooxUCpRiZY6yCtNaZZeyRzmi9lGr4H+vxHS/+pT6Lqy0TqfpszGN1q/WP2zYYUwxjjbONL36 0+c/p/5c/vO+ZmqOa76w+c7m55o/1qZqV6L/LuJPoy2nG9DLezAGN2B6FCPxKXqRXqV3RF+/ZArT Y8THMCdGQzo+tZFsFA41xrDz2URMUzBNY9MxVbKZbC6mFWwl+zW7jv2G3cJ+J6a7sW0b2J/YU5j+ wrZiepvtZx+xT9iXCgaxomI0u5R+SqYyHFtaoIxSxiuTMM1RFmGqUS5XluETelhpULYoe9Rw1QVr W6lept6j/ll9Xn1L/UGn6NJ1mbpc3VTdHN11up263bq9uh/1Nn2Rfq7+fv3zhnjDOYYphvmGuw2b DUcMPxkNxgk4XF1ufMuomVywVi9hu5886ZpTpmEnW6yP0F2h7Mf3Ikat0d/ApmCPGZRSdYF6q/qG fjY7ptrZe6xWnadeoj2kFivfq4vYVOVZlqja9DnqbLqZNLZJOaB8rXysi2SlylGWovst+4uySC2A R8ft6pu6SN11+iM40n2HcpSr2TblBfU69Trtr5Sjv5/t19+v7Ca7rkkJp/34Vt+g3IVKryvzlNVU pjtH/yPNw37/k/4K7O/zlBtZqvqW7n46rDqVr+Bd3Qmr8Robq0tSLlaGs02wuD+zvvQ5u4xq2O/I zZ5mH7BGHBM/oj7MxilB+LQ8ioUNxWH3a6qDvaUGem+8ZclKJJugHFOmqM8YdqmD4fbsojfoKqay LIydFprpUnwD1ir9YNOKYE3eZNkUQ3fB3n/d/Ay32Pq9+tUYZw+o6TSJsugXyg7KwXfjMKYyup6y aSvG4I2UpdxNy7WVrBp2/3zYT4Xgt1EmM8Na/g9ZXwIYVXW2fc656+x39ntnvTeTmSyTZCaZmSQT ArkQ1gAmyhpwTER+cSeJSoWWn7hQBLTwadVSKcTWpS792HFAq7HFBVtaulnb6mfqT/2omv58/dBq Icn3njtB7f8z3rPNOXfO8r7P+7zvvaAf5rYJ7IWPlAEW9iD6dNuM3gTUn4//hr6GVdCsYVTJ0m/u Y2cBMvUC/m6Hz2pUgNpu9AB/hPsN6sR+hFh1fA9I+TvoKrA5/wd+P4BaYX4r0GNsDcxaBWTuhxG7 x+ciHT7fRD/DBG2EOU8DPe9i5wLyPjxxA6zwerBRC8AmnkTXTzyC2uHsrpi4e2I76pl4bOJK8FQX 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 O5eLc/oOOEvFeZhR+syB2036VEE6ZzrbxJK+o/FvlDIvfV6BUX2HnFXigq42p05c1DnqbBSXhLKd RnFp3xD71wT4r79I3K+/KP/1l0K9XN1AEvkvvmbzX3x9mf/iK1dtV3vIV9V+9Q9IIf8117f5r7mq NS9p8olO86+aP5Am/gs0A/+92ZuYYxHJJX9HCCkhb5Bs0kwCpIB8H5eObCU/JCvJHvJfyetkP65V 5CA5TBrJP5OjxEBOk/fJGnKD3Cbrye/JfdJLHpII8QpUyCPfEzYJm8lhYYfwPvkfwkfCLfInRYei i/xVsU/xMxJRHFP8UkhQnFNcEpIUdxV/EKYrHiYmCF9KzE18QfiKcpPymPCC8oTyl0KD8h3lO0Kj 8ozyN8Jq5QcqpdCqSlLNFH6sek6VI+xTfVnlF/Yn+ZM20MSk7ydto6lJ/yWpn85M+knSQfps0n9P OktfTrqUdI2uSPoo6SF9LemvyTNoO/smhYY0aZppNKzJ0MykGzTXNb+nm1PeSvkJ3ZEynirQd1Oz U7PppdTZqXPp5dSXUl+iH6YuSF1AR4gAu3TwT0pz2G9mKltkdBCyYgvJrtRXtlR2VPZU2is9lcHK jZVbKrdX9lfuqdxfebBysPJI5fHKU5VnKy9UXqkcqbxZeRd9DrLfYHHfEvW31d8mVF2uLue/Vcug C+gCQugSuoQItIgWEUr/nv49SaDL6beJgv/NkJJW0kqioivpSqKmr9NGkkQN1EBSaTN9k6TxvxZK p120i0ynNmqDzF7qIs/wvxmaCXvnkizlb5S/IbOwpqvkOl9ZBvtlWulZ0lz6uIyUKctSyjLKsspy ynLL8sryywrLisuWl5WitapMV9ZYZixrK+ssM5c5ynxl4bJNpWfLtpbtKNtVeqFsb9mBskOlV8qG yo6WnSg7XXaudKTsYtnVsutlt8ruld4se1D2sOxJ6d1yWno27rogX1fkayR23ZSucnXpaHla6Xj5 DGBJeXb5nPJ55QvKF5UvLS8pLy/vLq8ury8dKW9Cz+Zy9m/ICKqfwpqZT8U5++16AelB1BYRJ2J+ OY/z7yK+D5NKRPg/kyrE9/vkNXIPVzW3UY3qK6oXSK3qRdWLZKXqZdXLpF71imoheV2Vr8onq1SF qkLSqCpSFZHVqmJVMWlSrVCVkjdUq1VNxKDSq/TYLwLZhZ3ErDyXJBKiTQNmyMgG5pBibbo2Uztb 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 Pe37efatM/m29ZjzRyJe6uzueTGh+xTnG2OrWp2dsFZeMrRjtAkJszZ9H552qs9u+08HTld6ni+y IaMm54Qm7ILzq59eyj79UbXc5cwDoyTjo+kN0+3rHao1vn6Jeyc7s6umfPEcv6n3d7YK8Wr97d2i b8fa3sv9fYPvKQvdRdSr6sgwx7upYw+Umr8oPvGmw90kU09VN0+9vNZ7B5dNfjOsZfK6sjKdrdO4 HdajS3oMvxbdP/5/AXlhYJAKZW5kc3RyZWFtIAplbmRvYmogCjIxIDAgb2JqIFswIFs3NzhdIDMg WzI1MCAzMzNdIDcgWzUwMF0gMTUgWzI1MF0gMTkgWzUwMCA1MDAgNTAwXSAyNCBbNTAwXSAyNiBb NTAwXSAyOSBbMjc4XSAzNiBbNzIyXSA0MCBbNjExXSA0NCBbMzMzXSA0OCBbODg5XSA2OCBbNDQ0 IDUwMCA0NDQgNTAwIDQ0NCAzMzMgNTAwXSA3NiBbMjc4IDI3OF0gNzkgWzI3OCA3NzggNTAwIDUw MCA1MDAgNTAwIDMzMyAzODkgMjc4IDUwMCA1MDBdIDkxIFs1MDBdIDEwNiBbNDQ0XSAxMTIgWzQ0 NCA0NDRdIDE3OSBbNDQ0XSAxODIgWzMzM11dCmVuZG9iaiAKMjQgMCBvYmogCjw8Ci9GaWx0ZXIg L0ZsYXRlRGVjb2RlCi9MZW5ndGggMzgwCj4+CnN0cmVhbQp4nH1Ty26DMBC88xU+pocIbB4hEkJK aCJx6EOlPVU9EHtJkYpBhhz4+9pe8qwaSyDNeHZntFq7Wf6Yy3og7qtqeQEDqWopFPTtQXEgO9jX 0qExETUfJmT/vCk7x9XFxdgP0OSyap0kIe6bvuwHNZLZSrQ7eHDcFyVA1XJPZh9ZoXFx6LofaEAO xHPSlAiodKOnsnsuGyCuLZvnQt/XwzjXNWfF+9gBYRZTDMNbAX1XclCl3IOTePqkJNnqkzogxc39 VLWr+HeprNrXas9jnlVPPDuqzk3XVuZlqI5TQ1JqEWVIbqYW/zixwMoCeunk/3FiEXZbodq3Tgx9 fQwbLC3ph0iiMmT37X1sES7v2wdTSlRH1DoF22OtJTNLhjiSEJWL+Mqe3dpHGDbD6BFm3lxNnf4J s/Cwt57zp5Gj/yZOvy69gluvlUnGzCQNWlOLKE5yHSHCHBnmyOLLHGZrzHKfVpIflNLbaF+AXUOz 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 uiU+gaJU/ibsWOspHo9NyfoLl2y/W0j+dqurMOWs+OrETVsvKGK+vY+Gz/vblrRIlv12rwp2DcmB fBGm+vnGStd2y4qll892Hlraebro7uK9XmzYN4cwIj/Wt9Ao2RCMApEgGMSBGHIrLgwkAC18OYzB NbHkNRDXROIoumhg8oC/y9SEebEx4XGBsRHztP7gTPxUHlgxKuTDSpfLGfILEh/UyuQWDv/40OXH alb6cZe/e97jycOWRc/rbFilci31kKxVrm34iSyZD27Ou6LyS2LVQyeuvnV1b9LD/MMWe3gfTpSM fGmr+LnwcOsN1TXjtA0NpwXGhEY8C45c//KHKt6bxhbdR8dSm06/G/zlc4RPa45D91nLiiXN+buK T3ZqKy+8LVV1uvTUo4V7hscWrt3ZIep3RGX7Od8Nmde8mlesS14RpcWEtkhVJ/WTmrfQddxGXb/G mH6RhXdg7Fg73vuTuwzfrxvZViqrkxP00XfpY+V5ZjUfdVYtfLdGOE25oBEN2O1v4H2+tCRMaNoQ +mNx2OFl5/Y2tkYseFO+dNmEolRKk02l+v02S7QolWJwlfA/Tsc/XiJ/d+EWcHQsnMKqfstF6d9u /PLwOSV7kEiO3H8wNxOJrM2sWPNJf6KiyvTVF4x3rEp60jl77qnex2fW1T58/wd/ElOkTmHGeSX9 47NcrPw0ppadD2/MlzuGhsHAh+8Kx1TxRv1qIpKR5lnmtV+d/cTvkd/+/NTxxYmTbNaMPfaiqT52 W9umObNa2+/P3f8xL6Fouca0fatbO3bQx93jXY5ZJg61sO+nYNvxw8NOvWOOvE2y1BpdXaszDbov dnifnrDyQZL98FeFS980FKrASxu7ljsbGrdMuL6sZtVs4cy6M+W6239J7PPy/mXBzgTjqKTJoOHH cyd9n93fEW6cteuqoo9Rzq8OfnOCfRzUKwepLPqolNiM7u/pnDakud16lVbDeaox8+5Bs7Tg8x2f 7xg4q6S9lr035ah/kWfdheZiG5FdrI2vq9mehu1GH+wA+C+LUybYCmVuZHN0cmVhbSAKZW5kb2Jq IAoyOCAwIG9iaiBbMCBbNzUwXSAzIFsyNzggMjc4XSAxMSBbMzMzIDMzM10gMTcgWzI3OCAyNzhd IDM2IFs2NjddIDM4IFs3MjIgNzIyIDY2NyA2MTEgNzc4XSA0NCBbMjc4IDUwMCA2NjcgNTU2IDgz MyA3MjIgNzc4IDY2N10gNTMgWzcyMiA2NjcgNjExIDcyMiA2NjcgOTQ0XSA2MCBbNjY3XSA2OCBb NTU2IDU1NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjJdIDc5IFsyMjIgODMzIDU1NiA1NTYg NTU2IDU1NiAzMzMgNTAwIDI3OCA1NTYgNTAwXSA5MSBbNTAwIDUwMF0gMTAxIFs2NjddIDEwNiBb NTU2XSAxMTIgWzU1NiA1NTZdIDE3NyBbNTU2XSAxODIgWzIyMl0gMjAyIFs2NjddXQplbmRvYmog CjM1IDAgb2JqIFsyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNzggMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDk3NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1NTYgMCA1NTYgMCA1NTYgMzMzIDAg NjExIDI3OCAyNzggMCAyNzggODg5IDYxMSA2MTEgNjExIDYxMSAzODkgNTU2IDMzMyA2MTFdCmVu ZG9iaiAKMTEyIDAgb2JqIAo8PAovQ3JlYXRvciAo/v8AQwBvAG4AdgAyAHAAZABmAC4AYwBvAG0p Ci9UaXRsZSAoTUFKT1IgTUlMTElPTlMgREFWSUQgQlJJQ0tNQU4gRVVST1BFIEFGUklRVUUgTkVX IFlPUksgQ0FSQUlCRVMpCi9BdXRob3IgKHBjKQovUHJvZHVjZXIgKP7/AEMAbwBuAHYAMgBwAGQA ZgAuAGMAbwBtKQovTW9kRGF0ZSAoRDoyMDEyMDMxMzE5NTg1MSswMScwMCcpCi9DcmVhdGlvbkRh dGUgKEQ6MjAxMjAzMTMxOTU4NTErMDEnMDAnKQo+PgplbmRvYmogeHJlZgowIDExMwowMDAwMDAw MDAwIDY1NTM1IGYgCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDEzMiAwMDAwMCBuIAowMDAw MTgwMjQ0IDAwMDAwIG4gCjAwMDAwMDAxOTcgMDAwMDAgbiAKMDAwMDA5Njk1NCAwMDAwMCBuIAow MDAwMDk1MTU4IDAwMDAwIG4gCjAwMDAwOTQ3NDQgMDAwMDAgbiAKMDAwMDA5NjI5OCAwMDAwMCBu IAowMDAwMDk1NjAwIDAwMDAwIG4gCjAwMDAwMDM5NTUgMDAwMDAgbiAKMDAwMDAwMDUyNSAwMDAw MCBuIAowMDAwMDk0OTE4IDAwMDAwIG4gCjAwMDAxODcxODAgMDAwMDAgbiAKMDAwMDA5NTM0NiAw MDAwMCBuIAowMDAwMTg3NzYxIDAwMDAwIG4gCjAwMDAwOTU3NDYgMDAwMDAgbiAKMDAwMDE4ODI2 OCAwMDAwMCBuIAowMDAwMDk1NzcyIDAwMDAwIG4gCjAwMDAwOTU5NDkgMDAwMDAgbiAKMDAwMDA5 NjAyNiAwMDAwMCBuIAowMDAwMjQ2NDQ4IDAwMDAwIG4gCjAwMDAxODg3MTMgMDAwMDAgbiAKMDAw MDA5NjQzMCAwMDAwMCBuIAowMDAwMjQ2NzMyIDAwMDAwIG4gCjAwMDAwOTY0NTYgMDAwMDAgbiAK MDAwMDA5NjYxOSAwMDAwMCBuIAowMDAwMDk2Njk2IDAwMDAwIG4gCjAwMDAzMDM1ODQgMDAwMDAg biAKMDAwMDI0NzE4OCAwMDAwMCBuIAowMDAwMTc5ODE5IDAwMDAwIG4gCjAwMDAxMDEyNDYgMDAw MDAgbiAKMDAwMDA5NzMwMSAwMDAwMCBuIAowMDAwMTc5NjI3IDAwMDAwIG4gCjAwMDAxNzk5OTkg MDAwMDAgbiAKMDAwMDMwMzkyNSAwMDAwMCBuIAowMDAwMTgwNjQzIDAwMDAwIG4gCjAwMDAxODAz NTcgMDAwMDAgbiAKMDAwMDE4MDcwMiAwMDAwMCBuIAowMDAwMTgwODkwIDAwMDAwIG4gCjAwMDAx ODMyMjggMDAwMDAgbiAKMDAwMDE4NDczNiAwMDAwMCBuIAowMDAwMTgwODAyIDAwMDAwIG4gCjAw MDAxODEwODQgMDAwMDAgbiAKMDAwMDE4MzE0MCAwMDAwMCBuIAowMDAwMTgzNTQ0IDAwMDAwIG4g CjAwMDAxODM2MTkgMDAwMDAgbiAKMDAwMDE4MTMyNSAwMDAwMCBuIAowMDAwMTgxNDAwIDAwMDAw IG4gCjAwMDAxODE0NzUgMDAwMDAgbiAKMDAwMDE4MTU1MCAwMDAwMCBuIAowMDAwMTgxNjI1IDAw MDAwIG4gCjAwMDAxODE3MDAgMDAwMDAgbiAKMDAwMDE4MTc3NSAwMDAwMCBuIAowMDAwMTgxODUw IDAwMDAwIG4gCjAwMDAxODE5MjUgMDAwMDAgbiAKMDAwMDE4MjAwMCAwMDAwMCBuIAowMDAwMTgy MDc2IDAwMDAwIG4gCjAwMDAxODIxNTIgMDAwMDAgbiAKMDAwMDE4MjIyOCAwMDAwMCBuIAowMDAw MTgyMzA0IDAwMDAwIG4gCjAwMDAxODIzODAgMDAwMDAgbiAKMDAwMDE4MjQ1NiAwMDAwMCBuIAow MDAwMTgyNTMyIDAwMDAwIG4gCjAwMDAxODI2MDggMDAwMDAgbiAKMDAwMDE4MjY4NCAwMDAwMCBu IAowMDAwMTgyNzYwIDAwMDAwIG4gCjAwMDAxODI4MzYgMDAwMDAgbiAKMDAwMDE4MjkxMiAwMDAw MCBuIAowMDAwMTgyOTg4IDAwMDAwIG4gCjAwMDAxODMwNjQgMDAwMDAgbiAKMDAwMDE4Mzk2MiAw MDAwMCBuIAowMDAwMTg0MDM4IDAwMDAwIG4gCjAwMDAxODQxMTMgMDAwMDAgbiAKMDAwMDE4NDE4 OCAwMDAwMCBuIAowMDAwMTg0MjYzIDAwMDAwIG4gCjAwMDAxODQzMzggMDAwMDAgbiAKMDAwMDE4 NDQxMyAwMDAwMCBuIAowMDAwMTg0NDg4IDAwMDAwIG4gCjAwMDAxODQ2NTggMDAwMDAgbiAKMDAw MDE4NDg4NyAwMDAwMCBuIAowMDAwMTg0OTY0IDAwMDAwIG4gCjAwMDAxODUwNDIgMDAwMDAgbiAK MDAwMDE4NTExOCAwMDAwMCBuIAowMDAwMTg1MTk0IDAwMDAwIG4gCjAwMDAxODUyNzAgMDAwMDAg biAKMDAwMDE4NTM0NiAwMDAwMCBuIAowMDAwMTg1NDIyIDAwMDAwIG4gCjAwMDAxODU0OTggMDAw MDAgbiAKMDAwMDE4NTU3NCAwMDAwMCBuIAowMDAwMTg1NjUwIDAwMDAwIG4gCjAwMDAxODU3MjYg MDAwMDAgbiAKMDAwMDE4NTgwMiAwMDAwMCBuIAowMDAwMTg1ODc4IDAwMDAwIG4gCjAwMDAxODU5 NTQgMDAwMDAgbiAKMDAwMDE4NjAzMCAwMDAwMCBuIAowMDAwMTg2MTA2IDAwMDAwIG4gCjAwMDAx ODYxODIgMDAwMDAgbiAKMDAwMDE4NjI1OCAwMDAwMCBuIAowMDAwMTg2MzM0IDAwMDAwIG4gCjAw MDAxODY0MTAgMDAwMDAgbiAKMDAwMDE4NjQ4NyAwMDAwMCBuIAowMDAwMTg2NTY0IDAwMDAwIG4g CjAwMDAxODY2NDEgMDAwMDAgbiAKMDAwMDE4NjcxOCAwMDAwMCBuIAowMDAwMTg2Nzk1IDAwMDAw IG4gCjAwMDAxODY4NzIgMDAwMDAgbiAKMDAwMDE4Njk0OSAwMDAwMCBuIAowMDAwMTg3MDI2IDAw MDAwIG4gCjAwMDAxODcxMDMgMDAwMDAgbiAKMDAwMDE4NDU2MyAwMDAwMCBuIAowMDAwMTg0ODI4 IDAwMDAwIG4gCjAwMDAzMDQxNTggMDAwMDAgbiAKdHJhaWxlcgoKPDwKL0luZm8gMTEyIDAgUgov Um9vdCAxIDAgUgovU2l6ZSAxMTMKL0lEIFs8MWM3NWUyZDYwYTdhNjA0ZDk1MzRmOTY5M2RlMDJm NzA+IDwxYzc1ZTJkNjBhN2E2MDRkOTUzNGY5NjkzZGUwMmY3MD5dCj4+CnN0YXJ0eHJlZgozMDQ0 MTkKJSVFT0YK ------=_Part_25693_19708771.1399640364251-- From minnus@buffalo.edu Fri May 9 14:13:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 7B44A7F3F for ; Fri, 9 May 2014 14:13:01 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7866E304064 for ; Fri, 9 May 2014 12:12:58 -0700 (PDT) X-ASG-Debug-ID: 1399662773-04cbb03cc7412f10001-S8gJnT Received: from mtareserve1.acsu.buffalo.edu (mtareserve4.acsu.buffalo.edu [128.205.7.164]) by cuda.sgi.com with ESMTP id JzGeJ9fDbqQiBSe4 for ; Fri, 09 May 2014 12:12:53 -0700 (PDT) X-Barracuda-Envelope-From: minnus@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.7.164 Received: from localmailC.acsu.buffalo.edu (localmailc.acsu.buffalo.edu [128.205.5.204]) by mtareserve1.acsu.buffalo.edu (Postfix) with ESMTP id AF5B83B5 for ; Fri, 9 May 2014 15:12:53 -0400 (EDT) Received: from localmailC.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id A9C47CC6A for ; Fri, 9 May 2014 15:12:53 -0400 (EDT) Received: from localmailC.acsu.buffalo.edu (localhost [127.0.0.1]) by localmailC.acsu.buffalo.edu (Postfix) with ESMTP id D2D9DCC64 for ; Fri, 9 May 2014 15:12:52 -0400 (EDT) Received: from smtp.buffalo.edu (smtp1.acsu.buffalo.edu [128.205.5.253]) by localmailC.acsu.buffalo.edu (Prefixe) with ESMTP id C5F97CC63 for ; Fri, 9 May 2014 15:12:52 -0400 (EDT) Received: from gilmour.ccr.buffalo.edu (gilmour.ccr.buffalo.edu [128.205.40.13]) (Authenticated sender: minnus@buffalo.edu) by smtp.buffalo.edu (Postfix) with ESMTPSA id B9784B254 for ; Fri, 9 May 2014 15:12:52 -0400 (EDT) Message-ID: <536D28B4.6010504@buffalo.edu> Date: Fri, 09 May 2014 15:12:52 -0400 From: Martins Innus User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: hotproc rfc Content-Type: multipart/mixed; boundary="------------070509060209010008030601" X-ASG-Orig-Subj: hotproc rfc X-PM-EL-Spam-Prob: : 8% X-Barracuda-Connect: mtareserve4.acsu.buffalo.edu[128.205.7.164] X-Barracuda-Start-Time: 1399662773 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5676 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is a multi-part message in MIME format. --------------070509060209010008030601 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hello, I have started looking into reviving the hotproc pmda. Before I get too far into it, I wanted to make sure no one else was looking at it and if my approach looks reasonable. Attached are both modified source files and a patch to linux_proc of a git checkout around the time of roughly 3.9.2. This is very much a proof of concept at this point, memory allocation could likely be optimized, no error checking, qa, etc. My intent was to try to factor this into the standard linux_proc pmda to make maintaining it easier. My goal was minimal code changes, and piggyback as much as possible onto existing code to do the data fetches into /proc. To do this I replicated the metrics from root_proc that seemed to be reasonable to track on a hotproc basis and just offset the cluster #. This could be automated with an awk script as originally done in hotproc. I have done VERY minimal testing, but this should compile and at this point present a duplicate of the proc metrics under the hotproc namespace. My plan was then to start importing the config file parsing from the old hotproc and do the pid filtering based on those parameters. I haven't yet really thought about all the extra stuff the hotproc pmda gave you in terms of cpu cycles consumed by un-tracked processes, etc. At this point my use case is just to present non-root, high cpu processes but I figure trying to get as much of the original hotproc functionality would be desirable. Hopefully these can be added in as I progress. I am not tied at all to the approach as implemented. I just wanted to get something up and running as quickly as possible to get a feel for the level of effort required. Feel free to suggest better ways of doing this. I have many more questions once I can get some direction on the way to proceed. Thanks Martins --------------070509060209010008030601 Content-Type: application/octet-stream; x-mac-type="0"; x-mac-creator="0"; name="hotproc_zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hotproc_zip" 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 --------------070509060209010008030601-- From mgoodwin@redhat.com Fri May 9 19:37:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 68FB67F3F for ; Fri, 9 May 2014 19:37:04 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5F2388F8039 for ; Fri, 9 May 2014 17:37:04 -0700 (PDT) X-ASG-Debug-ID: 1399682220-04cbb03cc641c070001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id dptQR45QpCSvVhfD for ; Fri, 09 May 2014 17:37:00 -0700 (PDT) X-Barracuda-Envelope-From: mgoodwin@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4A0ax1U013915 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 9 May 2014 20:37:00 -0400 Received: from [10.64.48.197] (vpn1-48-197.bne.redhat.com [10.64.48.197]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4A0avrR006182; Fri, 9 May 2014 20:36:58 -0400 Message-ID: <536D74A9.1050009@redhat.com> Date: Sat, 10 May 2014 10:36:57 +1000 From: Mark Goodwin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] Tree merge complete References: <1288451386.3614375.1399591935746.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Tree merge complete In-Reply-To: <1288451386.3614375.1399591935746.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1399682220 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/09/2014 09:32 AM, Nathan Scott wrote: > Hi all, > > The pcp-gui<->pcp git tree merge is now done & in the dev branch. looks like all the commit/revision history for the pcp-gui bits didn't survive the move .. was that intentional? Does it matter? e.g. # git log src/pmchart/main.cpp commit 353590b93dda7bf2c6c13aa8d96210c61c9dc3bd Merge: 153a033 a6a1440 Author: Nathan Scott Date: Fri May 9 08:48:23 2014 +1000 Stitch the pcp-gui and pcp git trees back together again Following up on discussion from the last two developers meetings, this commit merges the pcp-gui tree back into pcp. This includes all of the commands, man pages, books, QA, configury, and so on. The configure script will now dynamically switch on/off the Qt components depending on whether a viable (4.4+) Qt toolchain is found. commit 54ec46ad714c2ed2960f909039f1e77660f4b9cc Author: Nathan Scott Date: Tue May 6 14:17:12 2014 +1000 Switch to the naming conventions used in pcp git tree Rename several src subdirs to match the convention used in the pcp tree, in preparation for merging. Cheers -- Mark From nscott@redhat.com Sat May 10 19:09:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 86BA329DF8 for ; Sat, 10 May 2014 19:09:06 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 543C58F8039 for ; Sat, 10 May 2014 17:09:02 -0700 (PDT) X-ASG-Debug-ID: 1399766941-04cb6c728f4525a0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id aB0TdJLAPjNLPj2y for ; Sat, 10 May 2014 17:09:01 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4B090OX021434; Sat, 10 May 2014 20:09:00 -0400 Date: Sat, 10 May 2014 20:09:00 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Mark Goodwin Cc: pcp@oss.sgi.com Message-ID: <492961605.4522266.1399766940215.JavaMail.zimbra@redhat.com> In-Reply-To: <536D74A9.1050009@redhat.com> References: <1288451386.3614375.1399591935746.JavaMail.zimbra@redhat.com> <536D74A9.1050009@redhat.com> Subject: Re: [pcp] Tree merge complete MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Tree merge complete Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Tree merge complete Thread-Index: cckYbeSz4B0iTEm6phV9raLrQrlqnQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399766941 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5706 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Mark, ----- Original Message ----- > On 05/09/2014 09:32 AM, Nathan Scott wrote: > > Hi all, > > > > The pcp-gui<->pcp git tree merge is now done & in the dev branch. > > looks like all the commit/revision history for the pcp-gui bits didn't > survive the move .. was that intentional? Does it matter? > > e.g. > > # git log src/pmchart/main.cpp To go back in git history before the move, you need to use --follow, e.g. git log --follow --oneline src/pmchart/main.cpp 54ec46a Switch to the naming conventions used in pcp git tree 9c3122a Refactor include/pmtime.h working towards tree unification 7fdde42 Add support for a global font preference setting 8268b91 Add preference setting save/restore for saved hosts and fonts 78c8657 Fix botch in getopts handling causing local context creation always e617725 Reinstate accidentally removed option for hosts, and missed (C) update 7131a29 Add pmchart options to set font size and family f6e4553 Fix pmchart handling of missing metrics in View files with archives 9d6d3aa Fixes a sigsegv in pmchart command line error handling fbbf4fd Revert "QString toAscii decorruption" [...] cheers. -- Nathan From kenj@internode.on.net Sun May 11 05:01:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 90A907F47 for ; Sun, 11 May 2014 05:01:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 57675304048 for ; Sun, 11 May 2014 03:01:28 -0700 (PDT) X-ASG-Debug-ID: 1399802482-04bdf02b8b47a870001-S8gJnT Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id 1nsRfIeFA5FXJqSv for ; Sun, 11 May 2014 03:01:22 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.145 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Aq4VAHhJb1N20fC0PGdsb2JhbAANTINVx1kDAQEBATiDWTANFhgDAgECATEnBgIBAYhKqxikXReOb4QqBLAXWw Received: from ppp118-209-240-180.lns20.mel6.internode.on.net (HELO [192.168.1.100]) ([118.209.240.180]) by ipmail06.adl6.internode.on.net with ESMTP; 11 May 2014 19:31:21 +0930 Message-ID: <536F4B10.7010804@internode.on.net> Date: Sun, 11 May 2014 20:04:00 +1000 From: Ken McDonell User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: pcp updates - slow archives Content-Type: text/plain; charset=ISO-8859-1 X-ASG-Orig-Subj: pcp updates - slow archives Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ipmail06.adl6.internode.on.net[150.101.137.145] X-Barracuda-Start-Time: 1399802482 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5715 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- qa/787 will fail for everyone else for the time being ... I have libpcp changes that reduce the number of log I/Os to 1/3 or 1/4 of their previous values in the bad cases. The qa test shows these numbers. But unfortunately the libpcp code is not yet ready for checkin. This commit is to (a) reserve qa/787, and (b) show Frank that I have not forgotten about this problem ... 8^)> Expect the real libpcp fix in late June when I'll be back. Changes committed to git://oss.sgi.com/kenj/pcp.git dev qa/787 | 82 +++ qa/787.out | 1283 ++++++++++++++++++++++++++++++++++++++++++++++++++++ qa/group | 1 qa/src/GNUlocaldefs | 3 qa/src/interp1.c | 37 - qa/src/slow.0 |binary qa/src/slow.index |binary qa/src/slow.meta |binary 8 files changed, 1389 insertions(+), 17 deletions(-) commit 068ab84d26645a4895220edb70b8cdca0320b734 Author: Ken McDonell Date: Sun May 11 19:58:31 2014 +1000 qa/787 (new) - exercise slow archive reading Uses the reduced version of Frank's archive that used to show really excessive log I/O for some metrics in the presence of records. commit 76d90572c199f472318bd238e5d60711fd45e62d Author: Ken McDonell Date: Sun May 11 06:55:05 2014 +1000 qa/slow archive This is a reduced version of Frank's archive (super-SLOW-merged-archive-20140124.225919) that demonstrates really excessive log I/O for some metrics in the presence of records. See http://oss.sgi.com/bugzilla/show_bug.cgi?id=1044 for details. From nscott@redhat.com Sun May 11 18:47:47 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 190D27F3F for ; Sun, 11 May 2014 18:47:47 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9CB14AC005 for ; Sun, 11 May 2014 16:47:46 -0700 (PDT) X-ASG-Debug-ID: 1399852061-04cbb03cc54582b0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id mUxznf7k8K0DthcQ for ; Sun, 11 May 2014 16:47:41 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4BNlbZG022645; Sun, 11 May 2014 19:47:37 -0400 Date: Sun, 11 May 2014 19:47:36 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: pcp@oss.sgi.com Message-ID: <370838426.4744907.1399852056949.JavaMail.zimbra@redhat.com> In-Reply-To: <536F4B10.7010804@internode.on.net> References: <536F4B10.7010804@internode.on.net> Subject: Re: [pcp] pcp updates - slow archives MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcp updates - slow archives Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates - slow archives Thread-Index: r4KJ1ZwrM4UW0oROBbt7DiGvYEriiw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399852061 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5731 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > qa/787 will fail for everyone else for the time being ... I have libpcp > changes that reduce the number of log I/Os to 1/3 or 1/4 of their previous > values in the bad cases. The qa test shows these numbers. But > unfortunately the libpcp code is not yet ready for checkin. > > This commit is to (a) reserve qa/787, and (b) show Frank that I have not > forgotten about this problem ... 8^)> Thanks Ken. I'll extend the existing "retired" concept that the QA scripts have to add a "reserved" keyword also - and mark this one as such, so that it doesn't run-and-fail for everyone until you're back online. > Expect the real libpcp fix in late June when I'll be back. Happy travelling, see you when you're back. cheers. -- Nathan From nscott@redhat.com Sun May 11 21:35:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 545D07F47 for ; Sun, 11 May 2014 21:35:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 33A4B304048 for ; Sun, 11 May 2014 19:35:10 -0700 (PDT) X-ASG-Debug-ID: 1399862106-04cbb03cc445c4a0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id vA32MPaguZ8NwlJT for ; Sun, 11 May 2014 19:35:06 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4C2Z4Fa010720; Sun, 11 May 2014 22:35:04 -0400 Date: Sun, 11 May 2014 22:35:04 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martins Innus Cc: pcp@oss.sgi.com Message-ID: <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> In-Reply-To: <536D28B4.6010504@buffalo.edu> References: <536D28B4.6010504@buffalo.edu> Subject: Re: [pcp] hotproc rfc MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] hotproc rfc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: hotproc rfc Thread-Index: u8pfHxrU+LH7cgla2h3djy6QndgD7w== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399862106 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5735 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Martins, It is good to hear someone's become interested in this topic again! ----- Original Message ----- > Hello, > I have started looking into reviving the hotproc pmda. Before I > get too far into it, I wanted to make sure no one else was looking at it > and if my approach looks reasonable. AFAIK, noone else has been looking into it recently. I have wondered for some time whether its functionality could be alternately achieved, using cgroups (albeit on Linux only) however ... and there is increasing levels of interest in PCP and cgroups in some quarters (esp. due to containers making extensive use of cgroups -- LXC & Docker being hot topics atm). > [...] > I haven't yet really thought about all the extra stuff the hotproc > pmda gave you in terms of cpu cycles consumed by un-tracked processes, > etc. At this point my use case is just to present non-root, high cpu > processes but I figure trying to get as much of the original hotproc > functionality would be desirable. Hopefully these can be added in as I > progress. > > I am not tied at all to the approach as implemented. I just wanted > to get something up and running as quickly as possible to get a feel for > the level of effort required. Feel free to suggest better ways of doing > this. I have many more questions once I can get some direction on the > way to proceed. My recollection is that pmdahotproc presents all of the proc metrics for a set of "interesting" processes, below the hotproc.* namespace. It uses a set of rules to identify the processes of interest, which are evaluated on a user-defined polling interval. On Linux, the cgroup concept could provide a more flexible mechanism. The kernel support means the "hot process" evaluation side of things becomes optional (IOW, one could deem processes worthy of logging or whatever-one- would-otherwise-use-hotproc-metrics-for simply by ensuring the processes to be monitored start in a specific cgroup, using existing cgroup tools. Which, for some potential use-cases, is a big win cos walking the complete list of processes can be prohibitively expensive, for very large process counts. A handy mechanism for obtaining only the processes in a specific cgroup is provided by the kernel already, and the Linux pmdaproc already knows how to use it. There's also the cgclassify(1) daemon, which could be used to provide some of the other pmdahotproc bits, by automatically moving processes into a closely-monitored cgroup. Or, perhaps more realistically (if we want to use live performance data for making cgroup classifications, which we'll surely want to do at some point), the parts of pmdahotproc that perform the rule evaluation could be carved off into a pmdaproc/cgclassify helper utility, and instead of having pmdahotproc providing both the metrics and the "process hotness" evaluation functions, we could use the existing proc PMDA (-r option, and/or the proc.control.perclient.cgroups metric) for the metrics, and a separate hunk of code for the cgroup evaluation. Possibly pmie could be used for this classification side of things, then we'd not need a new tool for that either - worth experimenting with I think. There are other good advantages to using cgroups for this task too. The kernel tracks memory utilisation, CPU utilisation, hardware performance counters, and now it seems even some I/O stats, at the cgroup level. So, hopefully we can get a richer set of stats, and more cheaply, than the traditional pmdahotproc provided. And then there's the whole PMDA source code & namespace management issues that you'll have come across in looking into pmdahotproc so far ... it'd be nice to dodge all of that and simply have the one pmdaproc, if we can. cheers. -- Nathan From minnus@buffalo.edu Mon May 12 09:53:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B9FFF7F3F for ; Mon, 12 May 2014 09:53:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 20689AC003 for ; Mon, 12 May 2014 07:53:26 -0700 (PDT) X-ASG-Debug-ID: 1399906402-04cb6c72904905c0001-S8gJnT Received: from mtareserve1.acsu.buffalo.edu (mtareserve5.acsu.buffalo.edu [128.205.6.3]) by cuda.sgi.com with ESMTP id LNHEEc77Vwq38UnP for ; Mon, 12 May 2014 07:53:22 -0700 (PDT) X-Barracuda-Envelope-From: minnus@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.6.3 Received: from localmailB.acsu.buffalo.edu (localmailb.acsu.buffalo.edu [128.205.5.200]) by mtareserve1.acsu.buffalo.edu (Postfix) with ESMTP id 23023601; Mon, 12 May 2014 10:53:22 -0400 (EDT) Received: from localmailB.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 1C183F371; Mon, 12 May 2014 10:53:22 -0400 (EDT) Received: from localmailB.acsu.buffalo.edu (localhost [127.0.0.1]) by localmailB.acsu.buffalo.edu (Postfix) with ESMTP id 3795AF36E; Mon, 12 May 2014 10:53:21 -0400 (EDT) Received: from smtp.buffalo.edu (smtp3.acsu.buffalo.edu [128.205.5.226]) by localmailB.acsu.buffalo.edu (Prefixe) with ESMTP id F063DF36D; Mon, 12 May 2014 10:53:20 -0400 (EDT) Received: from gilmour.ccr.buffalo.edu (gilmour.ccr.buffalo.edu [128.205.40.13]) (Authenticated sender: minnus@buffalo.edu) by smtp.buffalo.edu (Postfix) with ESMTPSA id A79E6B196; Mon, 12 May 2014 10:53:20 -0400 (EDT) Message-ID: <5370E060.7090407@buffalo.edu> Date: Mon, 12 May 2014 10:53:20 -0400 From: Martins Innus User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] hotproc rfc References: <536D28B4.6010504@buffalo.edu> <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] hotproc rfc In-Reply-To: <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-PM-EL-Spam-Prob: : 8% X-Barracuda-Connect: mtareserve5.acsu.buffalo.edu[128.205.6.3] X-Barracuda-Start-Time: 1399906402 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5747 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Nathan, On 5/11/14 10:35 PM, Nathan Scott wrote: > [...] > On Linux, the cgroup concept could provide a more flexible mechanism. The > kernel support means the "hot process" evaluation side of things becomes > optional (IOW, one could deem processes worthy of logging or whatever-one- > would-otherwise-use-hotproc-metrics-for simply by ensuring the processes > to be monitored start in a specific cgroup, using existing cgroup tools. > Which, for some potential use-cases, is a big win cos walking the complete > list of processes can be prohibitively expensive, for very large process > counts. A handy mechanism for obtaining only the processes in a specific > cgroup is provided by the kernel already, and the Linux pmdaproc already > knows how to use it. I'm not too familiar with actually modifying cgroups, but we use them here extensively with various software that supports them natively: slurm, various MPIs, etc. I had not thought about using cgroups to manage a set of hotprocs. As I've started to look into this, its not clear to me if moving processes around between cgroups would break these existing tools. Slurm for instance, starts in a cgroup, and then spawns tasks which then live under that same hierarchy. If one, but not all, of these new processes becomes "hot", I can imagine that there would be some ramifications to moving it to a different cgroup, without its siblings, parent, etc. This will require some testing. Let me know if i've misunderstood or if you have thoughts on this. > [...] > the "process hotness" evaluation functions, we could use the existing proc > PMDA (-r option, and/or the proc.control.perclient.cgroups metric) for the > metrics, and a separate hunk of code for the cgroup evaluation. Yeah, I had planned to use a similar methodology to segregate the "hot" processes. > Possibly > pmie could be used for this classification side of things, then we'd not > need a new tool for that either - worth experimenting with I think. > > There are other good advantages to using cgroups for this task too. The > kernel tracks memory utilisation, CPU utilisation, hardware performance > counters, and now it seems even some I/O stats, at the cgroup level. So, > hopefully we can get a richer set of stats, and more cheaply, than the > traditional pmdahotproc provided. Those would be great to have, and likely would provide a lot of good metrics for validation of whether you have the right "hot" processes. > > And then there's the whole PMDA source code & namespace management issues > that you'll have come across in looking into pmdahotproc so far ... it'd > be nice to dodge all of that and simply have the one pmdaproc, if we can. > Right. My goal in all this was to try to get it into one pmda. Thanks Martins From fche@redhat.com Mon May 12 10:18:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 273B87F3F for ; Mon, 12 May 2014 10:18:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 106CF304053 for ; Mon, 12 May 2014 08:18:36 -0700 (PDT) X-ASG-Debug-ID: 1399907915-04cb6c1fcc33f690001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ibJMguiTGODt3Lrz for ; Mon, 12 May 2014 08:18:36 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4CFIW4Y000574 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 12 May 2014 11:18:33 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4CFIWn5009522; Mon, 12 May 2014 11:18:32 -0400 Received: by fche.csb (Postfix, from userid 2569) id AF2CB58182; Mon, 12 May 2014 11:18:31 -0400 (EDT) To: Nathan Scott Cc: Martins Innus , pcp@oss.sgi.com Subject: Re: hotproc rfc References: <536D28B4.6010504@buffalo.edu> <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: hotproc rfc From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 12 May 2014 11:18:31 -0400 In-Reply-To: <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Sun, 11 May 2014 22:35:04 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1399907915 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 nathans wrote: > [...] > AFAIK, noone else has been looking into it recently. I have wondered for > some time whether its functionality could be alternately achieved, using > cgroups (albeit on Linux only) [...] I get the impression that cgroups are a hammer for a different & orthogonal nail of a problem. > [...] There's also the cgclassify(1) daemon, which could be used to > provide some of the other pmdahotproc bits, by automatically moving > processes into a closely-monitored cgroup. [...] Sure, if one's willing to let a monitoring tool make observable administrative changes like that. For what it's worth, a different way one might this hotproc facility working would be via pmapi client-side logic, kind of like derived-metrics. Let a client periodically poll the metrics needed to compute the 'hotness' predicates, and update its own indom profiles. That way, the "hotness" definitions need not be hard-coded & centralized, nor even require any code/config changes at the server. - FChE From nscott@redhat.com Mon May 12 18:25:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B249E7F3F for ; Mon, 12 May 2014 18:25:51 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8AAEC304151 for ; Mon, 12 May 2014 16:25:48 -0700 (PDT) X-ASG-Debug-ID: 1399937143-04cb6c72914a08b0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id yvJaVx4Tp5oLXYJ4 for ; Mon, 12 May 2014 16:25:44 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4CNPgIp010977; Mon, 12 May 2014 19:25:42 -0400 Date: Mon, 12 May 2014 19:25:42 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martins Innus Cc: pcp@oss.sgi.com Message-ID: <1374573617.5942237.1399937142272.JavaMail.zimbra@redhat.com> In-Reply-To: <5370E060.7090407@buffalo.edu> References: <536D28B4.6010504@buffalo.edu> <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> <5370E060.7090407@buffalo.edu> Subject: Re: [pcp] hotproc rfc MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] hotproc rfc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: hotproc rfc Thread-Index: PngsC2CQJ9ukUqlH6Fe+OWNZ91arHg== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1399937144 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Martins, ----- Original Message ----- > Nathan, > > On 5/11/14 10:35 PM, Nathan Scott wrote: > > [...] > > On Linux, the cgroup concept could provide a more flexible mechanism. The > > kernel support means the "hot process" evaluation side of things becomes > > optional (IOW, one could deem processes worthy of logging or whatever-one- > > would-otherwise-use-hotproc-metrics-for simply by ensuring the processes > > to be monitored start in a specific cgroup, using existing cgroup tools. > > Which, for some potential use-cases, is a big win cos walking the complete > > list of processes can be prohibitively expensive, for very large process > > counts. A handy mechanism for obtaining only the processes in a specific > > cgroup is provided by the kernel already, and the Linux pmdaproc already > > knows how to use it. > > I'm not too familiar with actually modifying cgroups, but we use them > here extensively with various software that supports them natively: > slurm, various MPIs, etc. I had not thought about using cgroups to > manage a set of hotprocs. As I've started to look into this, its not > clear to me if moving processes around between cgroups would break these > existing tools. Slurm for instance, starts in a cgroup, and then spawns > tasks which then live under that same hierarchy. If one, but not all, > of these new processes becomes "hot", I can imagine that there would be > some ramifications to moving it to a different cgroup, without its > siblings, parent, etc. This will require some testing. Let me know if > i've misunderstood or if you have thoughts on this. Oh, absolutely - I would also tend to think moving between cgroups would cause widespread issues. AIUI, processes can belong to multiple cgroups however - so, instead of *moving* from existing group(s) into a new group I think we should have an additional pcp group, into which process can be dynamically added/removed - orthogonal to any/all other cgroups they are in already. Then pmlogger and other clients could make use of the proc metrics, as-is, which would be a pre-filtered set of processes. > [...] > Right. My goal in all this was to try to get it into one pmda. Cool, provided my "AIUI" statement above is correct :) - cgroups seem to offer a very effective (code-wise), & very efficient, path to this goal. cheers. -- Nathan From minnus@buffalo.edu Mon May 12 19:08:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6B1BD7F3F for ; Mon, 12 May 2014 19:08:24 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 10DA4AC001 for ; Mon, 12 May 2014 17:08:20 -0700 (PDT) X-ASG-Debug-ID: 1399939696-04bdf02b8a4bee10001-S8gJnT Received: from mtareserve1.acsu.buffalo.edu (mtareserve5.acsu.buffalo.edu [128.205.6.3]) by cuda.sgi.com with ESMTP id k8Zc0S7ECJAGajvY for ; Mon, 12 May 2014 17:08:16 -0700 (PDT) X-Barracuda-Envelope-From: minnus@buffalo.edu X-Barracuda-Apparent-Source-IP: 128.205.6.3 Received: from localmailC.acsu.buffalo.edu (localmailc.acsu.buffalo.edu [128.205.5.204]) by mtareserve1.acsu.buffalo.edu (Postfix) with ESMTP id 18FE5110; Mon, 12 May 2014 20:08:16 -0400 (EDT) Received: from localmailC.acsu.buffalo.edu (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 14281E6A5; Mon, 12 May 2014 20:08:16 -0400 (EDT) Received: from localmailC.acsu.buffalo.edu (localhost [127.0.0.1]) by localmailC.acsu.buffalo.edu (Postfix) with ESMTP id 9703CE6A2; Mon, 12 May 2014 20:08:15 -0400 (EDT) Received: from smtp.buffalo.edu (smtp2.acsu.buffalo.edu [128.205.5.254]) by localmailC.acsu.buffalo.edu (Prefixe) with ESMTP id 8BB14E6A1; Mon, 12 May 2014 20:08:15 -0400 (EDT) Received: from [10.0.1.6] (cpe-69-204-8-250.buffalo.res.rr.com [69.204.8.250]) (Authenticated sender: minnus@buffalo.edu) by smtp.buffalo.edu (Postfix) with ESMTPSA id 3E1E2B228; Mon, 12 May 2014 20:08:15 -0400 (EDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (1.0) Subject: Re: [pcp] hotproc rfc From: Martins Innus X-ASG-Orig-Subj: Re: [pcp] hotproc rfc X-Mailer: iPad Mail (11D167) In-Reply-To: <1374573617.5942237.1399937142272.JavaMail.zimbra@redhat.com> Date: Mon, 12 May 2014 20:08:13 -0400 Cc: "pcp@oss.sgi.com" Content-Transfer-Encoding: 7bit Message-Id: References: <536D28B4.6010504@buffalo.edu> <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> <5370E060.7090407@buffalo.edu> <1374573617.5942237.1399937142272.JavaMail.zimbra@redhat.com> To: Nathan Scott X-PM-EL-Spam-Prob: XX: 28% X-Barracuda-Connect: mtareserve5.acsu.buffalo.edu[128.205.6.3] X-Barracuda-Start-Time: 1399939696 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Nathan, > > Oh, absolutely - I would also tend to think moving between cgroups would > cause widespread issues. AIUI, processes can belong to multiple cgroups > however - so, instead of *moving* from existing group(s) into a new group > I think we should have an additional pcp group, into which process can be > dynamically added/removed - orthogonal to any/all other cgroups they are > in already. Then pmlogger and other clients could make use of the proc > metrics, as-is, which would be a pre-filtered set of processes. > Ok. I had assumed processes could only be in one cgroup. I will investigate. Thanks Martins From nscott@redhat.com Mon May 12 20:45:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 41F3C7F47 for ; Mon, 12 May 2014 20:45:26 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id C4D96AC003 for ; Mon, 12 May 2014 18:45:22 -0700 (PDT) X-ASG-Debug-ID: 1399945517-04cb6c72914a5000001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id pFraHDjaMu8jBobU for ; Mon, 12 May 2014 18:45:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4D1jGlT024772; Mon, 12 May 2014 21:45:16 -0400 Date: Mon, 12 May 2014 21:45:16 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Martins Innus Cc: pcp@oss.sgi.com Message-ID: <724411246.5962999.1399945516363.JavaMail.zimbra@redhat.com> In-Reply-To: References: <536D28B4.6010504@buffalo.edu> <1139662762.4765310.1399862104653.JavaMail.zimbra@redhat.com> <5370E060.7090407@buffalo.edu> <1374573617.5942237.1399937142272.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] hotproc rfc MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] hotproc rfc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: hotproc rfc Thread-Index: EICggX2A/L1nGnvgtxP+OwX5m0HFSA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1399945517 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5763 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > > Nathan, > > > > > Oh, absolutely - I would also tend to think moving between cgroups would > > cause widespread issues. AIUI, processes can belong to multiple cgroups > > however - so, instead of *moving* from existing group(s) into a new group > > I think we should have an additional pcp group, into which process can be > > dynamically added/removed - orthogonal to any/all other cgroups they are > > in already. Then pmlogger and other clients could make use of the proc > > metrics, as-is, which would be a pre-filtered set of processes. > > > Ok. I had assumed processes could only be in one cgroup. I will investigate. > Didn't quite work the way I expected initially, but the following magic incantation appears to give us something we could perhaps work with ... # mkdir /sys/fs/cgroup/pcp # mount -t cgroup -o name=pcp,none cgroup /sys/fs/cgroup/pcp This is on Fedora20 ... other distros, incl. older Fedora/RHEL tend to mount 'em in other places (and may not support all those options above, haven't looked) - you can use "pminfo --fetch cgroup.mounts" to find where they're mounted, or plain old "mount -l -t cgroup". I'm gonna wander off and continue 3.9.3 release preparations for now, but I very much looking forward to the results of your own experimentation in this area. I keep thinking of interesting new ways we might be able to use this sort of facility (and ways it could've been used in past deployments I've been involved in, where chunks of pmdaproc were duplicated and customised for monitoring specific processes in detail) -- will talk soon. cheers. -- Nathan From nscott@redhat.com Tue May 13 00:20:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3D2C07F3F for ; Tue, 13 May 2014 00:20:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C511AAC005 for ; Mon, 12 May 2014 22:20:02 -0700 (PDT) X-ASG-Debug-ID: 1399958398-04bdf02b8a4c8630001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id iHY3QvU7VMftQHQH for ; Mon, 12 May 2014 22:19:58 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4D5Jwk1023723 for ; Tue, 13 May 2014 01:19:58 -0400 Date: Tue, 13 May 2014 01:19:58 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <757461057.6000786.1399958398367.JavaMail.zimbra@redhat.com> In-Reply-To: <716525852.5996037.1399957120810.JavaMail.zimbra@redhat.com> Subject: pcp updates: qa & builds MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: qa & builds Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: qa & builds Thread-Index: H92kPCzkMjtBR4JvuQ4wrJIIn6SQCw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1399958398 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5767 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev Makepkgs | 16 build/mac/install-pcp-gui | 830 ------------------- build/mac/installer-resources/ReadMe.html | 47 - build/mac/uninstall-pcp-gui | 68 - qa/704 | 2 qa/787 | 84 + qa/787.out | 1283 ++++++++++++++++++++++++++++++ qa/GNUmakefile | 2 qa/archives/GNUmakefile | 2 qa/common | 48 - qa/group | 9 qa/new | 6 qa/qt/qmc_context/GNUmakefile | 10 qa/qt/qmc_desc/GNUmakefile | 10 qa/qt/qmc_dynamic/GNUmakefile | 10 qa/qt/qmc_event/GNUmakefile | 10 qa/qt/qmc_format/GNUmakefile | 10 qa/qt/qmc_group/GNUmakefile | 10 qa/qt/qmc_hosts/GNUmakefile | 10 qa/qt/qmc_indom/GNUmakefile | 10 qa/qt/qmc_metric/GNUmakefile | 10 qa/qt/qmc_source/GNUmakefile | 10 qa/src/GNUlocaldefs | 3 qa/src/interp1.c | 49 - qa/src/slow.0 |binary qa/src/slow.index |binary qa/src/slow.meta |binary qa/views/GNUmakefile | 2 src/GNUmakefile | 26 src/include/builddefs.in | 2 src/include/pcp/impl.h | 33 src/libpcp_qmc/src/libpcp_qmc.pro | 1 src/pmchart/pmchart.pro | 1 src/pmdumptext/pmdumptext.pro | 1 src/pmtime/pmtime.pro | 1 35 files changed, 1539 insertions(+), 1077 deletions(-) commit a95a9de1175cc7a351e52507ca7a20e4843fa33d Author: Nathan Scott Date: Tue May 13 14:55:43 2014 +1000 Implement pmInDom_build and pmID_build using memcpy While merging pcp-gui into pcp, the optimisation levels at which the Qt test programs are built now follows the rest of the build and is no longer forced to "debug" builds only. This has uncovered a problem in the casting mechanism used by pmID_build and pmInDom_build in impl.h, which ultimately can result in a pmID of 0.0.0 (or pmInDom of 0.0) being set due to the breaking of strict-aliasing rules. QA test 1015, which uses qmc_desc.cpp and passes the QmcDesc constructor a PMID from pmID_build, picked up the problem. I tossed up going with an ifdef __cplusplus variant of these two helper interfaces, but in the end went with the simplest approach of always using memcpy. commit dff1686a9b5be5d3c6c88949b4340fe9ed548df6 Author: Nathan Scott Date: Tue May 13 12:52:40 2014 +1000 Add -d option into qa/src/interp1.c for new-style output Commit 068ab84d2 has accidentally regressed test qa/091 by changing the output that interp1.c produces, which it was relying on being a certain way. Resolve this by adding a new option to get the new output, and keep on using the old output in existing tests. Quite probably test 091 could be reworked to use the new output, but going for the simplest fix at this stage. commit bc21c5777f2a8117cd72c7c35fec1bc1421301d3 Author: Nathan Scott Date: Tue May 13 12:33:19 2014 +1000 Ensure the Qt test programs end up in the pcp-testsuite package commit 5e650b20580000bb2570a64a05e63bfd7cdcc50f Author: Nathan Scott Date: Mon May 12 16:24:53 2014 +1000 Correct paths for Qt tool QA subdirs, post-gui-merge commit 1408de56f3134a49b2f1b2cba2c77e331ccb4536 Author: Nathan Scott Date: Mon May 12 16:21:20 2014 +1000 Correct paths for more installed QA subdirs, post-gui-merge commit 969f2e67b8a54d537168c290c1484f3b71246f68 Author: Nathan Scott Date: Mon May 12 16:11:31 2014 +1000 Add missing include/lib paths for picking up built libs vs installed commit 81e2d48eba24972be7bbe5d2db653aa4a4ac2a3b Author: Nathan Scott Date: Mon May 12 16:08:45 2014 +1000 Remove hard-coded make options in Makepkgs, add deps to src makefile commit ef790489c2c1649b944f2b90eb4ac72226499fc5 Author: Nathan Scott Date: Mon May 12 12:41:36 2014 +1000 Add reserved test support into new script and into packaging commit e343812ddd6f416433327c4a508c7f758af0d738 Author: Nathan Scott Date: Mon May 12 11:10:47 2014 +1000 Build fix for Mac OS X builds after the pcp-gui merge. Also some minor documentation updates for the Mac installer. commit 046deb5d8f613d6689dff6fda0b70099edb17759 Author: Nathan Scott Date: Mon May 12 10:34:54 2014 +1000 Add "reserved" keyword into qa/group, along lines of "retired" commit e38be7e69428dcb9b3d6303f67272ad18dfc8d95 Merge: b23f447 068ab84 Author: Nathan Scott Date: Mon May 12 09:30:54 2014 +1000 Merge branch 'dev' of git://git.performancecopilot.org/kenj/pcp into dev commit b23f447943a8ceba46357be31596044c6450bcef Author: Nathan Scott Date: Mon May 12 09:30:27 2014 +1000 Remove leftover MacOSX packaging files from git merge commit 068ab84d26645a4895220edb70b8cdca0320b734 Author: Ken McDonell Date: Sun May 11 19:58:31 2014 +1000 qa/787 (new) - exercise slow archive reading Uses the reduced version of Frank's archive that used to show really excessive log I/O for some metrics in the presence of records. commit 76d90572c199f472318bd238e5d60711fd45e62d Author: Ken McDonell Date: Sun May 11 06:55:05 2014 +1000 qa/slow archive This is a reduced version of Frank's archive (super-SLOW-merged-archive-20140124.225919) that demonstrates really excessive log I/O for some metrics in the presence of records. See http://oss.sgi.com/bugzilla/show_bug.cgi?id=1044 for details. From nscott@redhat.com Tue May 13 07:58:29 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 2E1DD7F3F for ; Tue, 13 May 2014 07:58:29 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id F184E8F804B for ; Tue, 13 May 2014 05:58:25 -0700 (PDT) X-ASG-Debug-ID: 1399985896-04cbb03cc44a1590001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id RwUg6MYw5qZj2QPx for ; Tue, 13 May 2014 05:58:17 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4DCwFjR007976 for ; Tue, 13 May 2014 08:58:16 -0400 Date: Tue, 13 May 2014 08:58:15 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <145247895.6286143.1399985895874.JavaMail.zimbra@redhat.com> In-Reply-To: <1647937212.6285854.1399985854686.JavaMail.zimbra@redhat.com> Subject: pcp updates: misc fixes, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: misc fixes, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: misc fixes, qa Thread-Index: p1PjEKO3eNDDO9UZpyQ0THXwfCiG+A== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1399985896 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5774 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/830 | 30 ++++++++++ qa/830.out | 5 + qa/group | 1 src/pcp/pcp.sh | 6 +- src/pmie/GNUmakefile | 6 +- src/pmie/pmie2col | 133 ----------------------------------------------- src/pmie/pmie2col.sh | 133 +++++++++++++++++++++++++++++++++++++++++++++++ src/pmlogger/pmlogmv.sh | 40 +++++++------- src/pmsignal/pmsignal.sh | 3 - 9 files changed, 197 insertions(+), 160 deletions(-) commit 57a6755b9f12e4cf0e68f54035c89507eb372708 Author: Nathan Scott Date: Tue May 13 22:53:28 2014 +1000 Fix error handling in pcp(1) when metric source unavailable Resolve a couple of issues in the handling of pmNewContext failure in pcp(1) script - in live mode, we were search pminfo stdout for a failure message which was on stderr; in archive mode we had some spurious additional warnings from pmdumplog reading the label. Add test qa/830 exercising the correct behaviour for these cases. commit d6c669e3b2ec80e8256b8ef5d725ec717065097c Author: Nathan Scott Date: Tue May 13 18:49:58 2014 +1000 Correct the pmsignal trap handler, was leaving tmpfiles behind Ditto for pmlogmv, and rename the pmie2col script to have the same .sh suffix as all other scripts - makes auditing easier. From wwwrun@oss.sgi.com Wed May 14 08:19:08 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE,NO_RELAYS autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: by oss.sgi.com (Postfix, from userid 30) id 5041A7F4E; Wed, 14 May 2014 08:19:08 -0500 (CDT) From: bugzilla-daemon@oss.sgi.com To: pcp@oss.sgi.com Subject: [Bug 934] drop make src-lnk-pcp etc. mechanism to create source tarball Date: Wed, 14 May 2014 13:19:07 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Classification: Unclassified X-Bugzilla-Product: pcp X-Bugzilla-Component: pcp X-Bugzilla-Keywords: X-Bugzilla-Severity: major X-Bugzilla-Who: fche@redhat.com X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P5 X-Bugzilla-Assigned-To: mgoodwin@redhat.com X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: bug_status resolution Message-ID: In-Reply-To: References: Content-Type: multipart/alternative; boundary="1400073548.E2c31.10596"; charset="us-ascii" X-Bugzilla-URL: http://oss.sgi.com/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 --1400073548.E2c31.10596 Date: Wed, 14 May 2014 08:19:08 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" http://oss.sgi.com/bugzilla/show_bug.cgi?id=934 Frank Ch. Eigler changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution|--- |FIXED --- Comment #4 from Frank Ch. Eigler --- nathans converted Makepkgs to git-archive for source-tree packing. -- You are receiving this mail because: You are on the CC list for the bug. --1400073548.E2c31.10596 Date: Wed, 14 May 2014 08:19:08 -0500 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8" changed bug 934
What Removed Added
Status ASSIGNED RESOLVED
Resolution --- FIXED

Comment # 4 on bug 934 from
nathans converted Makepkgs to git-archive for source-tree packing.


You are receiving this mail because:
  • You are on the CC list for the bug.
--1400073548.E2c31.10596-- From brolley@redhat.com Wed May 14 12:38:51 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 415327F4E for ; Wed, 14 May 2014 12:38:51 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 17EA28F8050 for ; Wed, 14 May 2014 10:38:50 -0700 (PDT) X-ASG-Debug-ID: 1400089129-04cbb03cc44dbdd0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id TaaTWE2FJ7DY9chr for ; Wed, 14 May 2014 10:38:49 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4EHcmGp005554 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 May 2014 13:38:49 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4EHcmob017568 for ; Wed, 14 May 2014 13:38:48 -0400 Message-ID: <5373AAA7.70004@redhat.com> Date: Wed, 14 May 2014 13:40:55 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: __pmDiscoverServices()/pmfind Enhancements Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: __pmDiscoverServices()/pmfind Enhancements Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400089129 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Nathan has suggested adding an option to pmfind and/or the __pmDiscoverServices() API to resolve the host names of the discovered servers. Similar to the -r option of avahi-browse. I think it's a good idea and that it should not be too hard to implement. Similarly, while discussing the new active probing mode, Frank suggested a global timeout option. After probing for the given amount of time, the process would be stopped and the results obtained thus far would be reported. I think that this is also a good idea. Along similar lines, it might be nice if the results could be reported as they were discovered, rather than all at the end. Then a user could choose to terminate the process once enough results have been obtained or even once a particular result has been obtained. This could probably be done using a callback. Thoughts? More ideas while we're at it? Dave From brolley@redhat.com Wed May 14 12:43:12 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 585867F4E for ; Wed, 14 May 2014 12:43:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2FDB48F8037 for ; Wed, 14 May 2014 10:43:12 -0700 (PDT) X-ASG-Debug-ID: 1400089390-04bdf02b8b51aeb0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vNfDkgbOhfLjVTSY for ; Wed, 14 May 2014 10:43:11 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4EHhAeH019883 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 May 2014 13:43:10 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4EHhAiM003613 for ; Wed, 14 May 2014 13:43:10 -0400 Message-ID: <5373ABAD.4030300@redhat.com> Date: Wed, 14 May 2014 13:45:17 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> X-ASG-Orig-Subj: Re: [pcp] __pmDiscoverServices()/pmfind Enhancements In-Reply-To: <5373AAA7.70004@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400089391 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/14/2014 01:40 PM, Dave Brolley wrote: > Hi, > > Nathan has suggested adding an option to pmfind and/or the > __pmDiscoverServices() API to resolve the host names of the discovered > servers. Similar to the -r option of avahi-browse. I think it's a good > idea and that it should not be too hard to implement. > > Similarly, while discussing the new active probing mode, Frank > suggested a global timeout option. After probing for the given amount > of time, the process would be stopped and the results obtained thus > far would be reported. I think that this is also a good idea. > > Along similar lines, it might be nice if the results could be reported > as they were discovered, rather than all at the end. Then a user could > choose to terminate the process once enough results have been obtained > or even once a particular result has been obtained. This could > probably be done using a callback. > > Thoughts? More ideas while we're at it? Heh -- just thought of another one. In the current API, we know which service we're trying to discover (e.g. pmcd). Perhaps once it is known that something is listening, we should also try to connect as an actual client of that service (i.e. go through the handshake). In that way we could report whether the discovered server actually represents the service we wanted and whether we have permission to connect. Dave From fche@redhat.com Wed May 14 13:39:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 35AF07F3F for ; Wed, 14 May 2014 13:39:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 02EE9304051 for ; Wed, 14 May 2014 11:39:49 -0700 (PDT) X-ASG-Debug-ID: 1400092788-04bdf02b8a51d300001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Svw2A0fQe6GpR0mV for ; Wed, 14 May 2014 11:39:48 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4EIdmUA024743 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 14 May 2014 14:39:48 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4EIdmFK015197; Wed, 14 May 2014 14:39:48 -0400 Received: by fche.csb (Postfix, from userid 2569) id 9A3C958393; Wed, 14 May 2014 14:39:47 -0400 (EDT) To: Dave Brolley Cc: pcp@oss.sgi.com Subject: Re: __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> <5373ABAD.4030300@redhat.com> X-ASG-Orig-Subj: Re: __pmDiscoverServices()/pmfind Enhancements From: fche@redhat.com (Frank Ch. Eigler) Date: Wed, 14 May 2014 14:39:47 -0400 In-Reply-To: <5373ABAD.4030300@redhat.com> (Dave Brolley's message of "Wed, 14 May 2014 13:45:17 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400092788 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 brolley wrote: > [...] >> Thoughts? More ideas while we're at it? (All of the above make sense.) > Heh -- just thought of another one. > > In the current API, we know which service we're trying to discover > (e.g. pmcd). Perhaps once it is known that something is listening, we > should also try to connect as an actual client of that service > (i.e. go through the handshake). [...] The complete handshake can need more information than just the hostspec (ip address:port) string, like ssl and authentication info. We'd have to find some way of passing that info into the discovery function. Plus, we know that libpcp is not as thread-safe as formerly believed, and making concurrent trial connections might rely upon the problematic code. I suggest leaving this aspect in the hands of the pmDiscoverServices client. By the way, the pmDiscoverServices.3 man page should include some examples of output, to make concrete the generic "URL" term. - FChE From brolley@redhat.com Wed May 14 15:21:44 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B03E87F3F for ; Wed, 14 May 2014 15:21:44 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9BADD8F8037 for ; Wed, 14 May 2014 13:21:44 -0700 (PDT) X-ASG-Debug-ID: 1400098900-04cb6c7290502690001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id ilnZ5TnsnrZUgekZ for ; Wed, 14 May 2014 13:21:40 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4EKLdiP022448 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 May 2014 16:21:40 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4EKLd9G012271 for ; Wed, 14 May 2014 16:21:39 -0400 Message-ID: <5373D0D2.5090902@redhat.com> Date: Wed, 14 May 2014 16:23:46 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400098900 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, The commits below have been pushed to my brolley/dev branch in the pcpfans repository. They collectively represent an implementation of an active probing mode for __pmDiscoverServices() / pmfind. This mode is activated by passing in a string of the form probe=
/ as the 'mechanism' string to __pmDiscoverServices(). The implementation supports inet and ipv6 addresses, for example: "probe=192.168.1.0/24" "probe=fe80::3e97:eff:fed9:0/112" These correspond to the CIDR notation for a subnet range. A connection will be attempted on each address in the range on the port indicated by the 'service' string ("pmcd" is still the only service supported). In order that the probing be completed in a reasonable amount of time, each connection is attempted on its own thread (on platforms that support pthreads). The code is sensitive to encountering limits on the number of open fds and active threads. In addition, the user may specifically limit the number of active threads using the additional specification "maxThreads=" For example: "probe=192.168.1.0/24,maxThreads=50" Each thread uses the minimum amount of stack supported by the system (PTHREAD_STACK_MIN). When using pmfind, the search spec is provided by the -m option. For example: pmfind -m probe=192.168.1.0/24" pmfind -m probe=fe80::3e97:eff:fed9:0/112" pmfind -m probe=192.168.1.0/24,maxThreads=50 I am soliciting review of the code and the user interface. All comments and suggestions are welcome. Dave --------------------------------------------------------------------------- commit d4e3baa39437d6f00ef6871dc05e376e3a35c256 Author: Dave Brolley Date: Tue May 13 17:19:57 2014 -0400 Add a configure check for the presence of sem_t in . commit 5cb6494ef28bc084bd49d8c5c8192e8ac8f264dd Author: Dave Brolley Date: Tue May 13 16:59:01 2014 -0400 Use a __pmSockAddr to count the number of active probing threads as they finish. commit 56113a27a1ff372feb35b1580a5c1d764621ade4 Author: Dave Brolley Date: Tue May 13 16:27:37 2014 -0400 Set a small stack size for each active probing worker thread. THREAD_STACK_MIN appears to be sufficient. commit 0ac32a160d472c20d058426c96a04ed3249ea7eb Author: Dave Brolley Date: Tue May 13 15:56:20 2014 -0400 Implement a max threads control for active service probing. Implemented as part of the mechanism string for use by API users as well as by pmfind(1). commit d39843cf6dbf338745aebb6421c7e7c36ef44f6c Author: Dave Brolley Date: Mon May 12 14:41:59 2014 -0400 Native (non-NSPR) implementation of service probing. Consolidates common code between the native and NSPR implementation. commit da42ecfddf37b1283a8aa04f55ee3aef1a9710d2 Author: Dave Brolley Date: Mon May 12 13:05:46 2014 -0400 Fix concurrency problem in active probing. The size of the results list was not always guarded. commit f1950eb25df22ba7cc2f3d32a4f27d2e04f4d21b Author: Dave Brolley Date: Mon May 12 11:27:23 2014 -0400 For active probing, reduce the timeout for a conneciton in progress. From 5 seconds to 1 second. commit d22f8abba9262c75d458c26919fcd814d96e8edd Author: Dave Brolley Date: Mon May 12 11:09:08 2014 -0400 Add some tracing for active probing. Tracing mesages generated when fd and thread limits reached. commit 4a64f4e67420ec38d463b5bf8b0955e76149090b Author: Dave Brolley Date: Mon May 12 11:04:36 2014 -0400 Threaded probing for PCP services. Active probing now done on a separate trhead for each address. commit 8fb4a0c73702e4663517f78259202503e0eedf23 Author: Dave Brolley Date: Tue May 6 16:32:27 2014 -0400 __pmAddDiscoveredService() should return negative error codes. So that they can be distinguished from the updated number of urls. All callers updated. commit 83f6b0c44c8eeb9d1217ad2fa4556f3254518792 Author: Dave Brolley Date: Tue May 6 14:52:44 2014 -0400 pmfind: Finalize iteration API for subnet addresses. commit 7cab926e462e13967b178a5953e5824df8a37326 Author: Dave Brolley Date: Mon May 5 15:41:47 2014 -0400 New source files for active service probing. commit e685accd03273bd8e0180313d80d159670136448 Author: Dave Brolley Date: Mon May 5 15:37:04 2014 -0400 Initial framework for PCP service discovery via active probing. From brolley@redhat.com Wed May 14 15:25:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id CA6277F3F for ; Wed, 14 May 2014 15:25:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 592E7AC00C for ; Wed, 14 May 2014 13:25:08 -0700 (PDT) X-ASG-Debug-ID: 1400099106-04cb6c7290502820001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id qT52ED3pSp0EV7XL for ; Wed, 14 May 2014 13:25:07 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4EKP6AB024247 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 14 May 2014 16:25:06 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4EKP3nn011606 for ; Wed, 14 May 2014 16:25:05 -0400 Message-ID: <5373D19E.20906@redhat.com> Date: Wed, 14 May 2014 16:27:10 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Parameter to __pmSockAddrToString Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: Parameter to __pmSockAddrToString Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400099106 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Noticed while working on active probing. One should be able to pass 'const __pmSockAddr *' to __pmSockAddrToString(). This change does not affect existing callers. on the brolley/dev branch of pcpfans. Dave -------------------------------- commit 696ea39bdcccb377060dfdba4f1eb7ce8b792a7c Author: Dave Brolley Date: Tue May 6 17:02:51 2014 -0400 __pmSockAddrToString() should (and now does) take (const __pmSockAddr *). From michele@acksyn.org Wed May 14 18:51:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id D482D7F3F for ; Wed, 14 May 2014 18:51:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B8C5F304051 for ; Wed, 14 May 2014 16:51:52 -0700 (PDT) X-ASG-Debug-ID: 1400111507-04bdf02b8c527590001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id XmJwJszB0M5a9vDA for ; Wed, 14 May 2014 16:51:47 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 87DA527476; Wed, 14 May 2014 19:51:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= x-mailer:message-id:date:date:subject:subject:from:from:received :received; s=2010; t=1400111505; bh=olTu5e2m4/l/fSX2/GM/VdEt6TnU 6r4fZQv8o/dZNwQ=; b=OnYGmpqe9nEQNok437vcJxEMAKl5Tj+TQ4eAPZ5lyTMv nxqsXq6ak85Uu9o8MlwAYZtK9qYia2aq2S/Ns5CERtvnkR1v7KHP3Ygagyl1Seqh 99q8/QZN5DDeiLl4qCpQB+ixCPRlRDXfxpPFg23ZD2amOZaVxEK2GjZv4mCiteU= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 6rxckz4WVsgA; Wed, 14 May 2014 19:51:45 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id B0019261FA; Wed, 14 May 2014 19:51:45 -0400 (EDT) From: Michele Baldessari To: pcp@oss.sgi.com Cc: Michele Baldessari Subject: [RFC] Collect additional metrics from /proc/net/netstat Date: Thu, 15 May 2014 00:51:36 +0100 X-ASG-Orig-Subj: [RFC] Collect additional metrics from /proc/net/netstat Message-Id: <1400111497-2534-1-git-send-email-michele@acksyn.org> X-Mailer: git-send-email 1.9.0 X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400111507 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5817 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi all, this patch mimics src/pmdas/linux/proc_net_snmp.[ch] and extends the network.{tcp,ip} namespaces in order to get a better glimpse at the behaviour of the Linux network stack. The rationale behind these new metrics is that these days, in order to troubleshoot network performance issues you really need to look at all of these metrics to understand why a certain workload is not performing as expected. I will also submit two other separate PMDAs (sctp and ethtool -S) later on. RFC since a) I just started reading up on PCP and b) I am unsure if it is okay to add ~120 metrics in the Linux PMDA or if it is preferable to put these in a separate one. Any feedback is appreciated. cheers, Michele Michele Baldessari (1): Add /proc/net/netstat support src/pmdas/linux/GNUmakefile | 7 +- src/pmdas/linux/clusters.h | 2 + src/pmdas/linux/help | 126 ++++++++ src/pmdas/linux/pmda.c | 609 +++++++++++++++++++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.c | 353 +++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.h | 150 +++++++++ src/pmdas/linux/root_linux | 119 ++++++++ 7 files changed, 1364 insertions(+), 2 deletions(-) create mode 100644 src/pmdas/linux/proc_net_netstat.c create mode 100644 src/pmdas/linux/proc_net_netstat.h -- 1.9.0 From michele@acksyn.org Wed May 14 18:51:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 16B227F53 for ; Wed, 14 May 2014 18:51:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 099EE304064 for ; Wed, 14 May 2014 16:51:53 -0700 (PDT) X-ASG-Debug-ID: 1400111509-04cbb03cc74e9650001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id kuQ7P8KcTAC3lGWa for ; Wed, 14 May 2014 16:51:49 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 08B95261FA; Wed, 14 May 2014 19:51:49 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= references:in-reply-to:x-mailer:message-id:date:date:subject :subject:from:from:received:received; s=2010; t=1400111506; bh=H M+CkdUlb/zFLZjgAZoKga5NbGX89fezvPhMRF2ElFQ=; b=SRMWNBfvNWYeUFLII if7uViM4ZNXkvkmo/pteVvYpHufpmZyWbH/EZDFG4Lha0t7FKgP0Jc1piqCri9n1 J+eq+JHTev+H1znERcPNDcuM9vUutLwnOa+lE82m1qlqoHdAuM2ZoaBaOaD+/dqb 1bO+swgqIxAWKf/wqKNGqcvk90= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 2kGTKGJzT5kD; Wed, 14 May 2014 19:51:46 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 6CA9827767; Wed, 14 May 2014 19:51:46 -0400 (EDT) From: Michele Baldessari To: pcp@oss.sgi.com Cc: Michele Baldessari Subject: [RFC] Add /proc/net/netstat support Date: Thu, 15 May 2014 00:51:37 +0100 X-ASG-Orig-Subj: [RFC] Add /proc/net/netstat support Message-Id: <1400111497-2534-2-git-send-email-michele@acksyn.org> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1400111497-2534-1-git-send-email-michele@acksyn.org> References: <1400111497-2534-1-git-send-email-michele@acksyn.org> X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400111509 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5817 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature In order to troubleshoot a certain class of networking issues it is extremely useful to collect the tcp and ip statistics exported by /proc/net/netstat Signed-off-by: Michele Baldessari --- src/pmdas/linux/GNUmakefile | 7 +- src/pmdas/linux/clusters.h | 2 + src/pmdas/linux/help | 126 ++++++++ src/pmdas/linux/pmda.c | 609 +++++++++++++++++++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.c | 353 +++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.h | 150 +++++++++ src/pmdas/linux/root_linux | 119 ++++++++ 7 files changed, 1364 insertions(+), 2 deletions(-) create mode 100644 src/pmdas/linux/proc_net_netstat.c create mode 100644 src/pmdas/linux/proc_net_netstat.h diff --git a/src/pmdas/linux/GNUmakefile b/src/pmdas/linux/GNUmakefile index 08a00f347e4c..4a0cc4f7b980 100644 --- a/src/pmdas/linux/GNUmakefile +++ b/src/pmdas/linux/GNUmakefile @@ -34,7 +34,8 @@ CFILES = pmda.c \ proc_scsi.c proc_cpuinfo.c proc_net_tcp.c \ proc_slabinfo.c sem_limits.c msg_limits.c shm_limits.c \ proc_uptime.c proc_sys_fs.c proc_vmstat.c \ - sysfs_kernel.c linux_table.c numa_meminfo.c + sysfs_kernel.c linux_table.c numa_meminfo.c \ + proc_net_netstat.c HFILES = clusters.h indom.h convert.h \ proc_stat.h proc_meminfo.h proc_loadavg.h \ @@ -44,7 +45,8 @@ HFILES = clusters.h indom.h convert.h \ proc_scsi.h proc_cpuinfo.h proc_net_tcp.h \ proc_slabinfo.h sem_limits.h msg_limits.h shm_limits.h \ proc_uptime.h proc_sys_fs.h proc_vmstat.h \ - sysfs_kernel.h linux_table.h numa_meminfo.h + sysfs_kernel.h linux_table.h numa_meminfo.h \ + proc_net_netstat.h VERSION_SCRIPT = exports HELPTARGETS = help.dir help.pag @@ -107,6 +109,7 @@ pmda.o proc_cpuinfo.o proc_stat.o: proc_cpuinfo.h pmda.o proc_loadavg.o: proc_loadavg.h pmda.o proc_meminfo.o: proc_meminfo.h pmda.o proc_net_dev.o: proc_net_dev.h +pmda.o proc_net_netstat.o: proc_net_netstat.h pmda.o proc_net_rpc.o: proc_net_rpc.h pmda.o proc_net_snmp.o: proc_net_snmp.h pmda.o proc_net_sockstat.o: proc_net_sockstat.h diff --git a/src/pmdas/linux/clusters.h b/src/pmdas/linux/clusters.h index 45b95117476c..3343f3fe5f61 100644 --- a/src/pmdas/linux/clusters.h +++ b/src/pmdas/linux/clusters.h @@ -73,6 +73,8 @@ enum { CLUSTER_INTERRUPT_OTHER,/* 50 /proc/interrupts percpu interrupts */ PROC_PID_FD, /* 51 /proc//fd -> proc PMDA */ CLUSTER_LV, /* 52 /dev/mapper */ + CLUSTER_NET_NETSTAT, /* 53 /proc/net/netstat */ + NUM_CLUSTERS /* one more than highest numbered cluster */ }; diff --git a/src/pmdas/linux/help b/src/pmdas/linux/help index de117e5675bf..aa0095aa5b35 100644 --- a/src/pmdas/linux/help +++ b/src/pmdas/linux/help @@ -872,6 +872,132 @@ tools running on IRIX. @ network.udplite.sndbuferrors count of udplite send buffer errors @ network.udplite.incsumerrors count of udplite in checksum errors +@ network.ip.innoroutes Number of IP datagrams discarded due to no routes in forwarding path +@ network.ip.intruncatedpkts Number of IP datagrams discarded due to frame not carrying enough data +@ network.ip.inmcastpkts Number of received IP multicast datagrams +@ network.ip.outmcastpkts Number of sent IP multicast datagrams +@ network.ip.inbcastpkts Number of received IP broadcast datagrams +@ network.ip.outbcastpkts Number of sent IP bradcast datagrams +@ network.ip.inoctets Number of received octets +@ network.ip.outoctets Number of sent octets +@ network.ip.inmcastoctets Number of received IP multicast octets +@ network.ip.outmcastoctets Number of sent IP multicast octets +@ network.ip.inbcastoctets Number of received IP broadcast octets +@ network.ip.outbcastoctets Number of sent IP broadcast octets +@ network.ip.csumerrors Number of IP datagrams with checksum errors +@ network.ip.noectpkts Number of packets received with NOECT +@ network.ip.ect1pkts Number of packets received with ECT(1) +@ network.ip.ect0pkts Number of packets received with ECT(0) +@ network.ip.cepkts Number of packets received with Congestion Experimented + +@ network.tcp.syncookiessent Number of sent SYN cookies +@ network.tcp.syncookiesrecv Number of received SYN cookies +@ network.tcp.syncookiesfailed Number of failed SYN cookies +@ network.tcp.embryonicrsts Number of resets received for embryonic SYN_RECV sockets +@ network.tcp.prunecalled Number of packets pruned from receive queue because of socket buffer overrun +@ network.tcp.rcvpruned Number of packets pruned from receive queue +@ network.tcp.ofopruned Number of packets dropped from out-of-order queue because of socket buffer overrun +@ network.tcp.outofwindowicmps Number of dropped out of window ICMPs +@ network.tcp.lockdroppedicmps Number of dropped ICMP because socket was locked +@ network.tcp.arpfilter Number of arp packets filtered +@ network.tcp.timewaited Number of TCP sockets finished time wait in fast timer +@ network.tcp.timewaitrecycled Number of time wait sockets recycled by time stamp +@ network.tcp.timewaitkilled Number of TCP sockets finished time wait in slow timer +@ network.tcp.pawspassiverejected Number of passive connections rejected because of timestamp +@ network.tcp.pawsactiverejected Number of active connections rejected because of timestamp +@ network.tcp.pawsestabrejected Number of packets rejects in established connections because of timestamp +@ network.tcp.delayedacks Number of delayed acks sent +@ network.tcp.delayedacklocked Number of delayed acks further delayed because of locked socket +@ network.tcp.delayedacklost Number of times quick ack mode was activated times +@ network.tcp.listenoverflows Number of times the listen queue of a socket overflowed +@ network.tcp.listendrops Number of SYNs to LISTEN sockets dropped +@ network.tcp.prequeued Number of packets directly queued to recvmsg prequeue +@ network.tcp.directcopyfrombacklog Number of bytes directly in process context from backlog +@ network.tcp.directcopyfromprequeue Number of bytes directly received in process context from prequeue +@ network.tcp.prequeueddropped Number of packets dropped from prequeue +@ network.tcp.hphits Number of packet headers predicted +@ network.tcp.hphitstouser Number of packets header predicted and directly queued to user +@ network.tcp.pureacks Number of acknowledgments not containing data payload received +@ network.tcp.hpacks Number of predicted acknowledgments +@ network.tcp.renorecovery Number of times recovered from packet loss due to fast retransmit +@ network.tcp.sackrecovery Number of times recovered from packet loss by selective acknowledgements +@ network.tcp.sackreneging Number of bad SACK blocks received +@ network.tcp.fackreorder Number of times detected reordering using FACK +@ network.tcp.sackreorder Number of times detected reordering using SACK +@ network.tcp.renoreorder Number of times detected reordering using reno fast retransmit +@ network.tcp.tsreorder Number of times detected reordering times using time stamp +@ network.tcp.fullundo Number of congestion windows fully recovered without slow start +@ network.tcp.partialundo Number of congestion windows partially recovered using Hoe heuristic +@ network.tcp.dsackundo Number of congestion windows recovered without slow start using DSACK +@ network.tcp.lossundo Number of congestion windows recovered without slow start after partial ack +@ network.tcp.lostretransmit Number of retransmits lost +@ network.tcp.renofailures Number of timeouts after reno fast retransmit +@ network.tcp.sackfailures Number of timeouts after SACK recovery +@ network.tcp.lossfailures Number of timeouts in loss state +@ network.tcp.fastretrans Number of fast retransmits +@ network.tcp.forwardretrans Number of forward retransmits +@ network.tcp.slowstartretrans Number of retransmits in slow start +@ network.tcp.timeouts Number of other TCP timeouts +@ network.tcp.lossprobes Number of sent TCP loss probes +@ network.tcp.lossproberecovery Number of TCP loss probe recoveries +@ network.tcp.renorecoveryfail Number of reno fast retransmits failed +@ network.tcp.sackrecoveryfail Number of SACK retransmits failed +@ network.tcp.schedulerfail Number of times receiver scheduled too late for direct processing +@ network.tcp.rcvcollapsed Number of packets collapsed in receive queue due to low socket buffer +@ network.tcp.dsackoldsent Number of DSACKs sent for old packets +@ network.tcp.dsackofosent Number of DSACKs sent for out of order packets +@ network.tcp.dsackrecv Number of DSACKs received +@ network.tcp.dsackoforecv Number of DSACKs for out of order packets received +@ network.tcp.abortondata Number of connections reset due to unexpected data +@ network.tcp.abortonclose Number of connections reset due to early user close +@ network.tcp.abortonmemory Number of connections aborted due to memory pressure +@ network.tcp.abortontimeout Number of connections aborted due to timeout +@ network.tcp.abortonlinger Number of connections aborted after user close in linger timeout +@ network.tcp.abortfailed Number of times unable to send RST due to no memory +@ network.tcp.memorypressures Numer of times TCP ran low on memory +@ network.tcp.sackdiscard Number of SACKs discarded +@ network.tcp.dsackignoredold Number of ignored old duplicate SACKs +@ network.tcp.dsackignorednoundo Number of ignored duplicate SACKs with undo_marker not set +@ network.tcp.spuriousrtos Number of FRTO's successfully detected spurious RTOs +@ network.tcp.md5notfound Number of times MD5 hash expected but not found +@ network.tcp.md5unexpected Number of times MD5 hash unexpected but found +@ network.tcp.sackshifted Number of SACKs shifted +@ network.tcp.sackmerged Number of SACKs merged +@ network.tcp.sackshiftfallback Number of SACKs fallbacks +@ network.tcp.backlogdrop Number of frames dropped because of full backlog queue +@ network.tcp.minttldrop Number of frames dropped when TTL is under the minimum +@ network.tcp.deferacceptdrop Number of dropped ACK frames when socket is in SYN-RECV state +Due to SYNACK retrans count lower than defer_accept value + +@ network.tcp.iprpfilter Number of packets dropped in input path because of rp_filter settings +@ network.tcp.timewaitoverflow Number of occurences of time wait bucket overflow +@ network.tcp.reqqfulldocookies Number of times a SYNCOOKIE was replied to client +@ network.tcp.reqqfulldrop Number of times a SYN request was dropped due to disabled syncookies +@ network.tcp.retransfail Number of failed tcp_retransmit_skb() calls +@ network.tcp.rcvcoalesce Number of times tried to coalesce the receive queue +@ network.tcp.ofoqueue Number of packets queued in OFO queue +@ network.tcp.ofodrop Number of packets meant to be queued in OFO but dropped because socket rcvbuf limit hit +@ network.tcp.ofomerge Number of packets in OFO that were merged with other packets +@ network.tcp.challengeack Number of challenge ACKs sent (RFC 5961 3.2) +@ network.tcp.synchallenge Number of challenge ACKs sent in response to SYN packets +@ network.tcp.fastopenactive Number of successful active fast opens +@ network.tcp.fastopenactivefail Number of fast open attempts failed due to remote not accepting it or time outs +@ network.tcp.fastopenpassive Number of successful passive fast opens +@ network.tcp.fastopenpassivefail Number of passive fast open attempts failed +@ network.tcp.fastopenlistenoverflow Number of times the fastopen listen queue overflowed +@ network.tcp.fastopencookiereqd Number of fast open cookies requested +@ network.tcp.spuriosrtxhostqueues Number of times detected that the fast clone is not yet freed in tcp_transmit_skb() +@ network.tcp.busypollrxpackets Number of low latency application-fetched packets +@ network.tcp.autocorking Number of times stack detected skb was underused and its flush was deferred +@ network.tcp.fromzerowindowadv Number of times window went from zero to non-zero +@ network.tcp.tozerowindowadv Number of times window went from non-zero to zero +@ network.tcp.wantzerowindowadv Number of times zero window announced +@ network.tcp.synretrans Number of SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits +@ network.tcp.origdatasent Number of outgoing packets with original data +Excluding retransmission but including data-in-SYN). This counter is different from +TcpOutSegs because TcpOutSegs also tracks pure ACKs. TCPOrigDataSent is +more useful to track the TCP retransmission rate. + @ pmda.uname identity and type of current system Identity and type of current system. The concatenation of the values returned from utsname(2), also similar to uname -a. diff --git a/src/pmdas/linux/pmda.c b/src/pmdas/linux/pmda.c index 85097c20475e..33ec40de3fc4 100644 --- a/src/pmdas/linux/pmda.c +++ b/src/pmdas/linux/pmda.c @@ -48,6 +48,7 @@ #include "proc_net_sockstat.h" #include "proc_net_tcp.h" #include "proc_partitions.h" +#include "proc_net_netstat.h" #include "proc_net_snmp.h" #include "proc_scsi.h" #include "proc_slabinfo.h" @@ -96,6 +97,7 @@ int _pm_idletime_size; /* size in bytes of the idle cputime metric */ proc_vmstat_t _pm_proc_vmstat; proc_net_snmp_t _pm_proc_net_snmp; pmdaInstid _pm_proc_net_snmp_indom_id[NR_ICMPMSG_COUNTERS]; +proc_net_netstat_t _pm_proc_net_netstat; /* * Metric Instance Domains (statically initialized ones only) @@ -2323,6 +2325,605 @@ static pmdaMetric metrictab[] = { { PMDA_PMID(CLUSTER_NET_SNMP,89), PM_TYPE_U64, ICMPMSG_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, +/* + * network netstat cluster + */ + +/* network.ip.innoroutes */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INNOROUTES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.intruncatedpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INTRUNCATEDPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inmcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outmcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inbcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outbcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,6), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,7), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inmcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outmcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,9), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inbcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outbcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,11), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.csumerrors */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CSUMERRORS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.noectpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_NOECTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,13), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.ect1pkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT1PKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.ect0pkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT0PKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.cepkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CEPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiessent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiesrecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESRECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,18), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiesfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,19), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.embryonicrsts */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_EMBRYONICRSTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,20), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prunecalled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PRUNECALLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,21), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvpruned */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_RCVPRUNED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofopruned */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OFOPRUNED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.outofwindowicmps */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lockdroppedicmps */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.arpfilter */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_ARPFILTER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaited */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitrecycled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitkilled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITKILLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawspassiverejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,30), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawsactiverejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawsestabrejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSESTABREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacklocked */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacklost */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOST], + { PMDA_PMID(CLUSTER_NET_NETSTAT,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.listenoverflows */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENOVERFLOWS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.listendrops */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENDROPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prequeued */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,38), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.directcopyfrombacklog */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG], + { PMDA_PMID(CLUSTER_NET_NETSTAT,39), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.directcopyfromprequeue */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,40), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prequeuedropped */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,41), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hphits*/ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,42), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hphitstouser */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,43), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pureacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPUREACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hpacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renorecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackrecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackreneging */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRENEGING], + { PMDA_PMID(CLUSTER_NET_NETSTAT,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fackreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFACKREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renoreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.tsreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTSREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fullundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFULLUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.partialundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPARTIALUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lostretransmit */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renofailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackfailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,59), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossfailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,60), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,61), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.forwardretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,62), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.slowstartretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,63), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timeouts */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEOUTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,64), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossprobes */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,65), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossproberecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,66), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renorecoveryfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,67), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackrecoveryfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,68), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.schedulerfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,69), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvcollapsed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,70), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackoldsent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,71), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackofosent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,72), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackrecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKRECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,73), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackoforecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFORECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,74), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortondata */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONDATA], + { PMDA_PMID(CLUSTER_NET_NETSTAT,75), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonclose */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONCLOSE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,76), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonmemory */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONMEMORY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,77), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortontimeout */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,78), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonlinger */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONLINGER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,79), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,80), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.memorypressures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,81), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackdiscard */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKDISCARD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,82), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackignoredold */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,83), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackignorednoundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,84), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.spuriousrtos */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,85), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.md5notfound */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND], + { PMDA_PMID(CLUSTER_NET_NETSTAT,86), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.md5unexpected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,87), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackshifted */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,88), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackmerged */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKMERGED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,89), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackshiftfallback */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK], + { PMDA_PMID(CLUSTER_NET_NETSTAT,90), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.backlogdrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPBACKLOGDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,91), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.minttldrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMINTTLDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,92), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.deferacceptdrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,93), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.iprpfilter */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_IPRPFILTER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,94), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitoverflow */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW], + { PMDA_PMID(CLUSTER_NET_NETSTAT,95), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.reqqfulldocookies */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,96), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.reqqfulldrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,97), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.retransfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRETRANSFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,98), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvcoalesce */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOALESCE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,99), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofoqueue */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOQUEUE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,100), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofodrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFODROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,101), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofomerge */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOMERGE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,102), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.challengeack */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPCHALLENGEACK], + { PMDA_PMID(CLUSTER_NET_NETSTAT,103), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.synchallenge */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,104), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenactive */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,105), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenactivefail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,106), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenpassive */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,107), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenpassivefail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,108), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenlistenoverflow */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW], + { PMDA_PMID(CLUSTER_NET_NETSTAT,109), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopencookiereqd */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,110), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.spuriousrtxhostqueues */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,111), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.busypollrxpackets */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,112), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.autocorking */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPAUTOCORKING], + { PMDA_PMID(CLUSTER_NET_NETSTAT,113), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fromzerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,114), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.tozerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,115), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.wantzerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,116), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.synretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,117), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.origdatasent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPORIGDATASENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,118), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + /* hinv.map.scsi */ { NULL, { PMDA_PMID(CLUSTER_SCSI,0), PM_TYPE_STRING, SCSI_INDOM, PM_SEM_DISCRETE, @@ -3164,6 +3765,9 @@ linux_refresh(pmdaExt *pmda, int *need_refresh) if (need_refresh[CLUSTER_NET_TCP]) refresh_proc_net_tcp(&proc_net_tcp); + if (need_refresh[CLUSTER_NET_NETSTAT]) + refresh_proc_net_netstat(&_pm_proc_net_netstat); + if (need_refresh[CLUSTER_SLAB]) refresh_proc_slabinfo(&proc_slabinfo); @@ -3296,6 +3900,11 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom) return 0; /* no value available on this kernel */ } else + if (idp->cluster == CLUSTER_NET_NETSTAT) { + if (*(__uint64_t *)mdesc->m_user == (__uint64_t)-1) + return 0; /* no value available on this kernel */ + } + else if (idp->cluster == CLUSTER_NET_NFS) { /* * check if rpc stats are available diff --git a/src/pmdas/linux/proc_net_netstat.c b/src/pmdas/linux/proc_net_netstat.c new file mode 100644 index 000000000000..801f582b8355 --- /dev/null +++ b/src/pmdas/linux/proc_net_netstat.c @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2014 Red Hat. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "pmapi.h" +#include "impl.h" +#include "pmda.h" +#include "proc_net_netstat.h" + +extern proc_net_netstat_t _pm_proc_net_netstat; + +typedef struct { + const char *field; + __uint64_t *offset; +} netstat_fields_t; + +netstat_fields_t netstat_ip_fields[] = { + { .field = "InNoRoutes", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INNOROUTES] }, + { .field = "InTruncatedPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INTRUNCATEDPKTS] }, + { .field = "InMcastPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTPKTS] }, + { .field = "OutMcastPkts ", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTPKTS] }, + { .field = "InBcastPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTPKTS] }, + { .field = "OutBcastPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTPKTS] }, + { .field = "InOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INOCTETS] }, + { .field = "OutOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTOCTETS] }, + { .field = "InMcastOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTOCTETS] }, + { .field = "OutMcastOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTOCTETS] }, + { .field = "InBcastOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTOCTETS] }, + { .field = "OutBcastOctets", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTOCTETS] }, + { .field = "InCsumErrors", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CSUMERRORS] }, + { .field = "InNoECTPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_NOECTPKTS] }, + { .field = "InECT1Pkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT1PKTS] }, + { .field = "InECT0Pkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT0PKTS] }, + { .field = "InCEPkts", + .offset = &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CEPKTS] } +}; + + +netstat_fields_t netstat_tcp_fields[] = { + { .field = "SyncookiesSent", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESSENT] }, + { .field = "SyncookiesRecv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESRECV] }, + { .field = "SyncookiesFailed", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED] }, + { .field = "EmbryonicRsts", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_EMBRYONICRSTS] }, + { .field = "PruneCalled", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PRUNECALLED] }, + { .field = "RcvPruned", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_RCVPRUNED] }, + { .field = "OfoPruned", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OFOPRUNED] }, + { .field = "OutOfWindowIcmps", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS] }, + { .field = "LockDroppedIcmps", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS] }, + { .field = "ArpFilter", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_ARPFILTER] }, + { .field = "TW", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITED] }, + { .field = "TWRecycled", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED] }, + { .field = "TWKilled", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITKILLED] }, + { .field = "PAWSPassive", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED] }, + { .field = "PAWSActive", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED] }, + { .field = "PAWSEstab", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSESTABREJECTED] }, + { .field = "DelayedACKs", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKS] }, + { .field = "DelayedACKLocked", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED] }, + { .field = "DelayedACKLost", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOST] }, + { .field = "ListenOverflows", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENOVERFLOWS] }, + { .field = "ListenDrops", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENDROPS] }, + { .field = "TCPPrequeued", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUED] }, + { .field = "TCPDirectCopyFromBacklog", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG] }, + { .field = "TCPDirectCopyFromPrequeue", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE] }, + { .field = "TCPPrequeueDropped", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED] }, + { .field = "TCPHPHits", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITS] }, + { .field = "TCPHPHitsToUser", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER] }, + { .field = "TCPPureAcks", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPUREACKS] }, + { .field = "TCPHPAcks", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPACKS] }, + { .field = "TCPRenoRecovery", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERY] }, + { .field = "TCPSackRecovery", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERY] }, + { .field = "TCPSACKReneging", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRENEGING] }, + { .field = "TCPFACKReorder", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFACKREORDER] }, + { .field = "TCPSACKReorder", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKREORDER] }, + { .field = "TCPRenoReorder", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOREORDER] }, + { .field = "TCPTSReorder", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTSREORDER] }, + { .field = "TCPFullUndo", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFULLUNDO] }, + { .field = "TCPPartialUndo", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPARTIALUNDO] }, + { .field = "TCPDSACKUndo", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKUNDO] }, + { .field = "TCPLossUndo", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSUNDO] }, + { .field = "TCPLostRetransmit", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT] }, + { .field = "TCPRenoFailures", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOFAILURES] }, + { .field = "TCPSackFailures", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKFAILURES] }, + { .field = "TCPLossFailures", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSFAILURES] }, + { .field = "TCPFastRetrans", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTRETRANS] }, + { .field = "TCPForwardRetrans", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS] }, + { .field = "TCPSlowStartRetrans", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS] }, + { .field = "TCPTimeouts", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEOUTS] }, + { .field = "TCPLossProbes", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBES] }, + { .field = "TCPLossProbeRecovery", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY] }, + { .field = "TCPRenoRecoveryFail", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL] }, + { .field = "TCPSackRecoveryFail", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL] }, + { .field = "TCPSchedulerFailed", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED] }, + { .field = "TCPRcvCollapsed", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED] }, + { .field = "TCPDSACKOldSent", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT] }, + { .field = "TCPDSACKOfoSent", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT] }, + { .field = "TCPDSACKRecv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKRECV] }, + { .field = "TCPDSACKOfoRecv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFORECV] }, + { .field = "TCPAbortOnData", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONDATA] }, + { .field = "TCPAbortOnClose", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONCLOSE] }, + { .field = "TCPAbortOnMemory", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONMEMORY] }, + { .field = "TCPAbortOnTimeout", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT] }, + { .field = "TCPAbortOnLinger", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONLINGER] }, + { .field = "TCPAbortFailed", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTFAILED] }, + { .field = "TCPMemoryPressures", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES] }, + { .field = "TCPSACKDiscard", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKDISCARD] }, + { .field = "TCPDSACKIgnoredOld", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD] }, + { .field = "TCPDSACKIgnoredNoUndo", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO] }, + { .field = "TCPSpuriousRTOs", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS] }, + { .field = "TCPMD5NotFound", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND] }, + { .field = "TCPMD5Unexpected", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED] }, + { .field = "TCPSackShifted", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTED] }, + { .field = "TCPSackMerged", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKMERGED] }, + { .field = "TCPSackShiftFallback", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK] }, + { .field = "TCPBacklogDrop", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPBACKLOGDROP] }, + { .field = "TCPMinTTLDrop", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMINTTLDROP] }, + { .field = "TCPDeferAcceptDrop", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP] }, + { .field = "IPReversePathFilter", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_IPRPFILTER] }, + { .field = "TCPTimeWaitOverflow", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW] }, + { .field = "TCPReqQFullDoCookies", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES] }, + { .field = "TCPReqQFullDrop", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDROP] }, + { .field = "TCPRetransFail", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRETRANSFAIL] }, + { .field = "TCPRcvCoalesce", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOALESCE] }, + { .field = "TCPOFOQueue", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOQUEUE] }, + { .field = "TCPOFODrop", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFODROP] }, + { .field = "TCPOFOMerge", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOMERGE] }, + { .field = "TCPChallengeACK", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPCHALLENGEACK] }, + { .field = "TCPSYNChallenge", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE] }, + { .field = "TCPFastOpenActive", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE] }, + { .field = "TCPFastOpenPassive", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL] }, + { .field = "TCPFastOpenPassiveFail", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL] }, + { .field = "TCPFastOpenListenOverflow", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW] }, + { .field = "TCPFastOpenCookieReqd", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD] }, + { .field = "TCPSpuriousRtxHostQueues", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES] }, + { .field = "BusyPollRxPackets", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS] }, + { .field = "TCPAutoCorking", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPAUTOCORKING] }, + { .field = "TCPFromZeroWindowAdv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV] }, + { .field = "TCPToZeroWindowAdv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV] }, + { .field = "TCPWantZeroWindowAdv", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV] }, + { .field = "TCPSynRetrans", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNRETRANS] }, + { .field = "TCPOrigDataSent", + .offset = &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPORIGDATASENT] } +}; + +static void +get_fields(netstat_fields_t *fields, char *header, char *buffer) +{ + int i, j, count; + char *p, *indices[NETSTAT_MAX_COLUMNS]; + + /* first get pointers to each of the column headings */ + strtok(header, " "); + for (i = 0; i < NETSTAT_MAX_COLUMNS; i++) { + if ((p = strtok(NULL, " \n")) == NULL) + break; + indices[i] = p; + } + count = i; + + /* + * Extract values via back-referencing column headings. + * "i" is the last found index, which we use for a bit + * of optimisation for the (common) in-order maps case + * (where "in order" means in the order defined by the + * passed in "fields" table which typically matches the + * kernel - but may be out-of-order for older kernels). + */ + strtok(buffer, " "); + for (i = j = 0; j < count && fields[i].field; j++, i++) { + if ((p = strtok(NULL, " \n")) == NULL) + break; + if (strcmp(fields[i].field, indices[j]) == 0) + *fields[i].offset = strtoull(p, NULL, 10); + else { + for (i = 0; fields[i].field; i++) { + if (strcmp(fields[i].field, indices[j]) != 0) + continue; + *fields[i].offset = strtoull(p, NULL, 10); + break; + } + if (fields[i].field == NULL) /* not found, ignore */ + i = 0; + } + } +} + + +#define NETSTAT_IP_OFFSET(ii, pp) (int64_t *)((char *)pp + \ + (__psint_t)netstat_ip_fields[ii].offset - (__psint_t)&_pm_proc_net_netstat.ip) +#define NETSTAT_TCP_OFFSET(ii, pp) (int64_t *)((char *)pp + \ + (__psint_t)netstat_tcp_fields[ii].offset - (__psint_t)&_pm_proc_net_netstat.tcp) + +static void +init_refresh_proc_net_netstat(proc_net_netstat_t *netstat) +{ + int i; + + /* initially, all marked as "no value available" */ + for (i = 0; netstat_ip_fields[i].field != NULL; i++) + *(NETSTAT_IP_OFFSET(i, netstat->ip)) = -1; + for (i = 0; netstat_tcp_fields[i].field != NULL; i++) + *(NETSTAT_TCP_OFFSET(i, netstat->tcp)) = -1; +} + +int +refresh_proc_net_netstat(proc_net_netstat_t *netstat) +{ + /* Need a sufficiently large value to hold a full line */ + char header[2048]; + char values[2048]; + FILE *fp; + + init_refresh_proc_net_netstat(netstat); + if ((fp = fopen("/proc/net/netstat", "r")) == NULL) + return -oserror(); + while (fgets(header, sizeof(header), fp) != NULL) { + if (fgets(values, sizeof(values), fp) != NULL) { + if (strncmp(values, "IpExt:", 6) == 0) + get_fields(netstat_ip_fields, header, values); + else if (strncmp(values, "TcpExt:", 7) == 0) + get_fields(netstat_tcp_fields, header, values); + else + __pmNotifyErr(LOG_ERR, "Unrecognised /proc/net/netstat row: %s\n", values); + } + } + fclose(fp); + return 0; +} diff --git a/src/pmdas/linux/proc_net_netstat.h b/src/pmdas/linux/proc_net_netstat.h new file mode 100644 index 000000000000..4a5a9c893a11 --- /dev/null +++ b/src/pmdas/linux/proc_net_netstat.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2014 Red Hat. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#define NETSTAT_MAX_COLUMNS 256 /* arbitrary upper bound (228 observed as of 22/04/2014)*/ + +enum { + _PM_NETSTAT_IPEXT_INNOROUTES = 0, + _PM_NETSTAT_IPEXT_INTRUNCATEDPKTS, + _PM_NETSTAT_IPEXT_INMCASTPKTS, + _PM_NETSTAT_IPEXT_OUTMCASTPKTS, + _PM_NETSTAT_IPEXT_INBCASTPKTS, + _PM_NETSTAT_IPEXT_OUTBCASTPKTS, + _PM_NETSTAT_IPEXT_INOCTETS, + _PM_NETSTAT_IPEXT_OUTOCTETS, + _PM_NETSTAT_IPEXT_INMCASTOCTETS, + _PM_NETSTAT_IPEXT_OUTMCASTOCTETS, + _PM_NETSTAT_IPEXT_INBCASTOCTETS, + _PM_NETSTAT_IPEXT_OUTBCASTOCTETS, + _PM_NETSTAT_IPEXT_CSUMERRORS, + _PM_NETSTAT_IPEXT_NOECTPKTS, + _PM_NETSTAT_IPEXT_ECT1PKTS, + _PM_NETSTAT_IPEXT_ECT0PKTS, + _PM_NETSTAT_IPEXT_CEPKTS, + _PM_NETSTAT_IPEXT_NFIELDS /* must be last */ +}; + +enum { + _PM_NETSTAT_TCPEXT_SYNCOOKIESSENT = 0, + _PM_NETSTAT_TCPEXT_SYNCOOKIESRECV, + _PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED, + _PM_NETSTAT_TCPEXT_EMBRYONICRSTS, + _PM_NETSTAT_TCPEXT_PRUNECALLED, + _PM_NETSTAT_TCPEXT_RCVPRUNED, + _PM_NETSTAT_TCPEXT_OFOPRUNED, + _PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS, + _PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS, + _PM_NETSTAT_TCPEXT_ARPFILTER, + _PM_NETSTAT_TCPEXT_TIMEWAITED, + _PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED, + _PM_NETSTAT_TCPEXT_TIMEWAITKILLED, + _PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED, + _PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED, + _PM_NETSTAT_TCPEXT_PAWSESTABREJECTED, + _PM_NETSTAT_TCPEXT_DELAYEDACKS, + _PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED, + _PM_NETSTAT_TCPEXT_DELAYEDACKLOST, + _PM_NETSTAT_TCPEXT_LISTENOVERFLOWS, + _PM_NETSTAT_TCPEXT_LISTENDROPS, + _PM_NETSTAT_TCPEXT_TCPPREQUEUED, + _PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG, + _PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE, + _PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED, + _PM_NETSTAT_TCPEXT_TCPHPHITS, + _PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER, + _PM_NETSTAT_TCPEXT_TCPPUREACKS, + _PM_NETSTAT_TCPEXT_TCPHPACKS, + _PM_NETSTAT_TCPEXT_TCPRENORECOVERY, + _PM_NETSTAT_TCPEXT_TCPSACKRECOVERY, + _PM_NETSTAT_TCPEXT_TCPSACKRENEGING, + _PM_NETSTAT_TCPEXT_TCPFACKREORDER, + _PM_NETSTAT_TCPEXT_TCPSACKREORDER, + _PM_NETSTAT_TCPEXT_TCPRENOREORDER, + _PM_NETSTAT_TCPEXT_TCPTSREORDER, + _PM_NETSTAT_TCPEXT_TCPFULLUNDO, + _PM_NETSTAT_TCPEXT_TCPPARTIALUNDO, + _PM_NETSTAT_TCPEXT_TCPDSACKUNDO, + _PM_NETSTAT_TCPEXT_TCPLOSSUNDO, + _PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT, + _PM_NETSTAT_TCPEXT_TCPRENOFAILURES, + _PM_NETSTAT_TCPEXT_TCPSACKFAILURES, + _PM_NETSTAT_TCPEXT_TCPLOSSFAILURES, + _PM_NETSTAT_TCPEXT_TCPFASTRETRANS, + _PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS, + _PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS, + _PM_NETSTAT_TCPEXT_TCPTIMEOUTS, + _PM_NETSTAT_TCPEXT_TCPLOSSPROBES, + _PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY, + _PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL, + _PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL, + _PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED, + _PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED, + _PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT, + _PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT, + _PM_NETSTAT_TCPEXT_TCPDSACKRECV, + _PM_NETSTAT_TCPEXT_TCPDSACKOFORECV, + _PM_NETSTAT_TCPEXT_TCPABORTONDATA, + _PM_NETSTAT_TCPEXT_TCPABORTONCLOSE, + _PM_NETSTAT_TCPEXT_TCPABORTONMEMORY, + _PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT, + _PM_NETSTAT_TCPEXT_TCPABORTONLINGER, + _PM_NETSTAT_TCPEXT_TCPABORTFAILED, + _PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES, + _PM_NETSTAT_TCPEXT_TCPSACKDISCARD, + _PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD, + _PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO, + _PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS, + _PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND, + _PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED, + _PM_NETSTAT_TCPEXT_SACKSHIFTED, + _PM_NETSTAT_TCPEXT_SACKMERGED, + _PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK, + _PM_NETSTAT_TCPEXT_TCPBACKLOGDROP, + _PM_NETSTAT_TCPEXT_TCPMINTTLDROP, + _PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP, + _PM_NETSTAT_TCPEXT_IPRPFILTER, + _PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW, + _PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES, + _PM_NETSTAT_TCPEXT_TCPREQQFULLDROP, + _PM_NETSTAT_TCPEXT_TCPRETRANSFAIL, + _PM_NETSTAT_TCPEXT_TCPRCVCOALESCE, + _PM_NETSTAT_TCPEXT_TCPOFOQUEUE, + _PM_NETSTAT_TCPEXT_TCPOFODROP, + _PM_NETSTAT_TCPEXT_TCPOFOMERGE, + _PM_NETSTAT_TCPEXT_TCPCHALLENGEACK, + _PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE, + _PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE, + _PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL, + _PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVE, + _PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL, + _PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW, + _PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD, + _PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES, + _PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS, + _PM_NETSTAT_TCPEXT_TCPAUTOCORKING, + _PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV, + _PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV, + _PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV, + _PM_NETSTAT_TCPEXT_TCPSYNRETRANS, + _PM_NETSTAT_TCPEXT_TCPORIGDATASENT, + _PM_NETSTAT_TCPEXT_NFIELDS /* must be last */ +}; + + +typedef struct { + __uint64_t ip[_PM_NETSTAT_IPEXT_NFIELDS]; + __uint64_t tcp[_PM_NETSTAT_TCPEXT_NFIELDS]; +} proc_net_netstat_t; + +extern int refresh_proc_net_netstat(proc_net_netstat_t *); diff --git a/src/pmdas/linux/root_linux b/src/pmdas/linux/root_linux index 5f0058fb8f11..9f233471cd4b 100644 --- a/src/pmdas/linux/root_linux +++ b/src/pmdas/linux/root_linux @@ -501,6 +501,23 @@ network.ip { fragoks 60:14:16 fragfails 60:14:17 fragcreates 60:14:18 + innoroutes 60:53:00 + intruncatedpkts 60:53:01 + inmcastpkts 60:53:02 + outmcastpkts 60:53:03 + inbcastpkts 60:53:04 + outbcastpkts 60:53:05 + inoctets 60:53:06 + outoctets 60:53:07 + inmcastoctets 60:53:08 + outmcastoctets 60:53:09 + inbcastoctets 60:53:10 + outbcastoctets 60:53:11 + csumerrors 60:53:12 + noectpkts 60:53:13 + ect1pkts 60:53:14 + ect0pkts 60:53:15 + cepkts 60:53:16 } network.icmp { @@ -549,6 +566,108 @@ network.tcp { inerrs 60:14:62 outrsts 60:14:63 incsumerrors 60:14:64 + syncookiessent 60:53:17 + syncookiesrecv 60:53:18 + syncookiesfailed 60:53:19 + embryonicrsts 60:53:20 + prunecalled 60:53:21 + rcvpruned 60:53:22 + ofopruned 60:53:23 + outofwindowicmps 60:53:24 + lockdroppedicmps 60:53:25 + arpfilter 60:53:26 + timewaited 60:53:27 + timewaitrecycled 60:53:28 + timewaitkilled 60:53:29 + pawspassiverejected 60:53:30 + pawsactiverejected 60:53:31 + pawsestabrejected 60:53:32 + delayedacks 60:53:33 + delayedacklocked 60:53:34 + delayedacklost 60:53:35 + listenoverflows 60:53:36 + listendrops 60:53:37 + prequeued 60:53:38 + directcopyfrombacklog 60:53:39 + directcopyfromprequeue 60:53:40 + prequeueddropped 60:53:41 + hphits 60:53:42 + hphitstouser 60:53:43 + pureacks 60:53:44 + hpacks 60:53:45 + renorecovery 60:53:46 + sackrecovery 60:53:47 + sackreneging 60:53:48 + fackreorder 60:53:49 + sackreorder 60:53:50 + renoreorder 60:53:51 + tsreorder 60:53:52 + fullundo 60:53:53 + partialundo 60:53:54 + dsackundo 60:53:55 + lossundo 60:53:56 + lostretransmit 60:53:57 + renofailures 60:53:58 + sackfailures 60:53:59 + lossfailures 60:53:60 + fastretrans 60:53:61 + forwardretrans 60:53:62 + slowstartretrans 60:53:63 + timeouts 60:53:64 + lossprobes 60:53:65 + lossproberecovery 60:53:66 + renorecoveryfail 60:53:67 + sackrecoveryfail 60:53:68 + schedulerfail 60:53:69 + rcvcollapsed 60:53:70 + dsackoldsent 60:53:71 + dsackofosent 60:53:72 + dsackrecv 60:53:73 + dsackoforecv 60:53:74 + abortondata 60:53:75 + abortonclose 60:53:76 + abortonmemory 60:53:77 + abortontimeout 60:53:78 + abortonlinger 60:53:79 + abortfailed 60:53:80 + memorypressures 60:53:81 + sackdiscard 60:53:82 + dsackignoredold 60:53:83 + dsackignorednoundo 60:53:84 + spuriousrtos 60:53:85 + md5notfound 60:53:86 + md5unexpected 60:53:87 + sackshifted 60:53:88 + sackmerged 60:53:89 + sackshiftfallback 60:53:90 + backlogdrop 60:53:91 + minttldrop 60:53:92 + deferacceptdrop 60:53:93 + iprpfilter 60:53:94 + timewaitoverflow 60:53:95 + reqqfulldocookies 60:53:96 + reqqfulldrop 60:53:97 + retransfail 60:53:98 + rcvcoalesce 60:53:99 + ofoqueue 60:53:100 + ofodrop 60:53:101 + ofomerge 60:53:102 + challengeack 60:53:103 + synchallenge 60:53:104 + fastopenactive 60:53:105 + fastopenactivefail 60:53:106 + fastopenpassive 60:53:107 + fastopenpassivefail 60:53:108 + fastopenlistenoverflow 60:53:109 + fastopencookiereqd 60:53:110 + spuriosrtxhostqueues 60:53:111 + busypollrxpackets 60:53:112 + autocorking 60:53:113 + fromzerowindowadv 60:53:114 + tozerowindowadv 60:53:115 + wantzerowindowadv 60:53:116 + synretrans 60:53:117 + origdatasent 60:53:118 } network.udp { -- 1.9.0 From nscott@redhat.com Wed May 14 21:38:03 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DCB217F3F for ; Wed, 14 May 2014 21:38:03 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id B405830404E for ; Wed, 14 May 2014 19:38:00 -0700 (PDT) X-ASG-Debug-ID: 1400121474-04bdf02b8c52e290001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 9sRg0PBMBYEaPeLc for ; Wed, 14 May 2014 19:37:54 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4F2bsjs010188 for ; Wed, 14 May 2014 22:37:54 -0400 Date: Wed, 14 May 2014 22:37:53 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <859839493.7613017.1400121473961.JavaMail.zimbra@redhat.com> In-Reply-To: <614334436.7601585.1400117899759.JavaMail.zimbra@redhat.com> Subject: pcp updates: merge scox+mgoodwin, build, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: merge scox+mgoodwin, build, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: merge scox+mgoodwin, build, qa Thread-Index: Tk3P/u5NzNK5F7dqH8j8ZZGm+1G00A== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1400121474 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5820 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 7 +++++-- build/rpm/fedora.spec | 19 ++++++++++++------- debian/changelog | 5 +++-- debian/control | 4 ++-- debian/pcp-gui.install | 2 -- qa/709 | 28 +++++++++++++++++++++++----- qa/709.out | 4 +++- src/include/builddefs.in | 2 +- src/include/buildrules | 24 ------------------------ src/libpcp/src/p_result.c | 6 +++--- src/pmcollectl/pmcollectl.py | 14 ++++++++------ 11 files changed, 60 insertions(+), 55 deletions(-) commit 86f5154492541df40544754ffaf3e410c437dc61 Author: Nathan Scott Date: Thu May 15 11:35:24 2014 +1000 Add notes of couple of BZs fixed into the RPM spec file commit 0b6713276c335c17614e445684c5735200e3905e Author: Nathan Scott Date: Thu May 15 11:09:24 2014 +1000 Fix 32bit compile warnings in recent libpcp diagnostic additions commit 298580b565956b42766e4ab7d5f78d45e1320cb9 Author: Nathan Scott Date: Thu May 15 11:08:31 2014 +1000 Debian packaging updates preparing for merge release commit 872fb051bfd5105bffc055ef09ecb6583ce0d0d2 Author: Nathan Scott Date: Thu May 15 11:08:03 2014 +1000 Remove some no-longer-used Makepkgs make targets commit 8fb957e389e815e2950b3ac2cd64f85a7101e0c1 Author: Nathan Scott Date: Thu May 15 11:07:32 2014 +1000 Fedora/EPEL specfile updates preparing for merge release commit 736c72f4acb3e7b78b1811f17b17133c57968f60 Author: Nathan Scott Date: Thu May 15 09:46:41 2014 +1000 Remove newly added hard-coded path to /usr/bin/grep in qa/709 Some boxen (eg RHEL6 here) have /bin/grep only, so just pick it up from the $PATH. Also resolved some whitespace differences in the output from current dev pmcollectl to the version from Stans current dev branch. commit ade472612090499690f86e40771930acc6755e59 Author: Nathan Scott Date: Thu May 15 09:14:32 2014 +1000 Update 3.9.3 release date stamp, changelogs commit 482022a1f317b5729ef15937ffc13b712b354657 Merge: 57a6755 cf157c7 Author: Nathan Scott Date: Thu May 15 09:07:03 2014 +1000 Merge branch 'scox/dev' of ../pcpfans into scox-merge Conflicts: qa/709.out [Resolved, and added notrun() for non-Linux hosts now for lsblk use] commit cf157c7f40dcf80c7681c707bb121b4c9889e9f1 Merge: 42809c9 a59d970 Author: Nathan Scott Date: Thu May 15 08:51:14 2014 +1000 Merge branch 'scox/dev' of git://sourceware.org/git/pcpfans into scox/dev commit a59d970db0fd0bddb4e137afa0de1036204bd993 Author: Mark Goodwin Date: Wed May 14 16:14:38 2014 -0400 Use the correct metric names for pmcollectl disk and network details. pmcollectl.py: Fetch the disk and network instance names. 709: Test it. From nscott@redhat.com Thu May 15 01:49:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 384727F3F for ; Thu, 15 May 2014 01:49:20 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 274DD8F8039 for ; Wed, 14 May 2014 23:49:19 -0700 (PDT) X-ASG-Debug-ID: 1400136555-04cbb03cc64f8aa0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id sp4WMDT4jq3GsZMR for ; Wed, 14 May 2014 23:49:15 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4F6nCqd008378; Thu, 15 May 2014 02:49:12 -0400 Date: Thu, 15 May 2014 02:49:12 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <724194126.7674818.1400136552701.JavaMail.zimbra@redhat.com> In-Reply-To: <1400111497-2534-1-git-send-email-michele@acksyn.org> References: <1400111497-2534-1-git-send-email-michele@acksyn.org> Subject: Re: [pcp] [RFC] Collect additional metrics from /proc/net/netstat MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] [RFC] Collect additional metrics from /proc/net/netstat Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Collect additional metrics from /proc/net/netstat Thread-Index: uJj40BP4uZMRL5Xy4NJS5r7SojMaSw== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1400136555 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, ----- Original Message ----- > Hi all, > > this patch mimics src/pmdas/linux/proc_net_snmp.[ch] and extends the > network.{tcp,ip} namespaces in order to get a better glimpse at the > behaviour of the Linux network stack. > > The rationale behind these new metrics is that these days, in order > to troubleshoot network performance issues you really need to look at > all of these metrics to understand why a certain workload is not > performing as expected. I will also submit two other separate PMDAs > (sctp and ethtool -S) later on. Very cool, thanks! > RFC since a) I just started reading up on PCP and b) I am unsure > if it is okay to add ~120 metrics in the Linux PMDA or if it is > preferable to put these in a separate one. > > Any feedback is appreciated. I'll review more closely once this current release is out the door, but the answer to b) is "its fine". If/when we do reach a point down the track where we collectively decide there's too many metrics in a particular PMDA, there are approaches we've used before to split 'em up (while preserving the namespace, transitioning PMIDs safely, etc). A few other things to think about at this stage: - it'd be a good idea to consider whether all/some/none of these new metrics should be in the default-logged (by the system pmlogger) set of metrics (and what sort of sampling interval would suit); - whether default or not, a src/pmlogconf/tools/netstat file (or some other similarly named file closeby there) would be a welcome addition to help people record these metrics; - in terms of automated testing, the qa/957 test case automatically will use valgrind to check your new additions to the kernel PMDA, but we should add 2 new (similar) tests for the other two new PMDAs (I'll help you with that once they exist if you like); - we should also check the actual values being exported match what we expect. In some cases we've used other tools for verifying (see qa/635 for a networking example) but I have another, more generic approach planned for the kernel metrics (incl. these) which I hope to tackle next release - leave that with me & I'll get back to you on that one, I may need just some test case data from you there. cheers. -- Nathan From pcp-announce-bounces@oss.sgi.com Thu May 15 05:21:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from oss.sgi.com (localhost [IPv6:::1]) by oss.sgi.com (Postfix) with ESMTP id BBF507F56; Thu, 15 May 2014 05:21:21 -0500 (CDT) X-Original-To: pcp-announce@oss.sgi.com Delivered-To: pcp-announce@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 635CF7F54 for ; Thu, 15 May 2014 05:21:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 20D31304067 for ; Thu, 15 May 2014 03:21:20 -0700 (PDT) X-ASG-Debug-ID: 1400149274-04bdf02b8a53d5e0001-87ZIJf Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id VCqBMC3liRplu1RB for ; Thu, 15 May 2014 03:21:14 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4FALEF3008027 for ; Thu, 15 May 2014 06:21:14 -0400 Date: Thu, 15 May 2014 06:21:14 -0400 (EDT) From: Nathan Scott To: pcp-announce Message-ID: <927408479.7798730.1400149274481.JavaMail.zimbra@redhat.com> In-Reply-To: <728397125.7791825.1400148390937.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 X-ASG-Orig-Subj: Performance Co-Pilot 3.9.4 released X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Performance Co-Pilot 3.9.4 released Thread-Index: 9p/RMd7paZ4+VCdwzvLkjGpVSXYFgg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400149274 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5828 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Subject: [pcp-announce] Performance Co-Pilot 3.9.4 released X-BeenThere: pcp-announce@oss.sgi.com X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Nathan Scott List-Id: pcp announcements List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pcp-announce-bounces@oss.sgi.com Sender: pcp-announce-bounces@oss.sgi.com Hi all, It is that time again. This release includes the usual bevy of bug fixes, improvements to pmlogger write patterns, as well as changes to many PMDAs and clients to support long options. We are almost at the end point where all tools support both option forms now - the last few remaining stragglers will arrive next month. Links to source and binaries here: http://www.performancecopilot.org Another noticeable change is that we have switched to releasing the pcp-gui package from within the main PCP build, instead of via a separate release. This will allow us to more rapidly get new GUI features out, and removes some administrative overhead. For the most part, there's no resulting end user visible change except on Mac OS X where there is now just one .dmg package. Enjoy! pcp-3.9.4 (15 May 2014) - pmlogger: improved archive I/O features, esp for access to archives while they are actively being written - pmlogger/pmlc: all flushing operations are now no-ops, but they remain available for backward compatibility - pcp-free: use pmConvScale in case metric units ever change - pmlogmv: fix a couple of argument handling corner cases - another round of IPv6 updates throughout PCP, making use of __pm* networking APIs instead of e.g. gethostbyname. - archive utilities updated for long option support: pmdumplog, pmlogcheck, pmlogextract, pmlogger, pmloglabel, pmlogreduce, pmlogrewrite and pmlogsummary - PMDAs with long option support: pmdaapache, pmdabash, pmdagfs2, pmdasample, pmdasimple, pmdatrivial - libpcp: allow addition of free-form text to usage messages - pmgetopt: new cross-platform long option handling utility, allowing pcp shell scripts to acquire long option support - shell scripts updated to support long options: pcp, pmie2col, pmie_check, pmie_daily, pmlogger_check, pmlogger_daily, pmlogger_merge, pmlogmv, pmnewlog, pmwtf, pmsignal, pmlogconf - pmlogger: improve pmlc access controls - man pages: more detailed pmlc/pmlogger access control docs - pmda systemd: adopt slow-start capability - pcp command: improved error handling - pmcollectl: correct reporting of disk and network details - merged pcp-gui source tree (back) into pcp cheers. -- Nathan _______________________________________________ pcp-announce mailing list pcp-announce@oss.sgi.com http://oss.sgi.com/mailman/listinfo/pcp-announce From michele@acksyn.org Thu May 15 07:42:25 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 056517F3F for ; Thu, 15 May 2014 07:42:25 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id AF2528F8039 for ; Thu, 15 May 2014 05:42:21 -0700 (PDT) X-ASG-Debug-ID: 1400157736-04bdf02b8b5455c0001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id 1AFgNeCBb8yezORz for ; Thu, 15 May 2014 05:42:16 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 3243A279DB; Thu, 15 May 2014 08:42:15 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1400157734; bh=ZcWaJMsBOrqwekedVb0YMxb5w64hVF9n1e1qKmYuWCo=; b=YAlA5mDH1bRK ZjddMa+1PIU5sXMk620pcghr1rwWUsMkd8txicb6hfDKXkRDo3TNN0wrQtmaUb3G MTnAdWPPXdK4JqKPxzbwI/eg/2iYxuQgPvCXVBcTwu3AbYj2//PDNZ9hNP3u13zq MVWhrCOSgqiWdNeonNWMvkttpMtA3VM= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id CvWp4HfnsyIe; Thu, 15 May 2014 08:42:14 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 1E708243BA; Thu, 15 May 2014 08:42:14 -0400 (EDT) Date: Thu, 15 May 2014 13:42:13 +0100 From: Michele Baldessari To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: [pcp] [RFC] Collect additional metrics from /proc/net/netstat Message-ID: <20140515124213.GB7055@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] [RFC] Collect additional metrics from /proc/net/netstat References: <1400111497-2534-1-git-send-email-michele@acksyn.org> <724194126.7674818.1400136552701.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <724194126.7674818.1400136552701.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400157736 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5830 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Nathan, On Thu, May 15, 2014 at 02:49:12AM -0400, Nathan Scott wrote: > > this patch mimics src/pmdas/linux/proc_net_snmp.[ch] and extends the > > network.{tcp,ip} namespaces in order to get a better glimpse at the > > behaviour of the Linux network stack. > > > > The rationale behind these new metrics is that these days, in order > > to troubleshoot network performance issues you really need to look at > > all of these metrics to understand why a certain workload is not > > performing as expected. I will also submit two other separate PMDAs > > (sctp and ethtool -S) later on. > > Very cool, thanks! > > > RFC since a) I just started reading up on PCP and b) I am unsure > > if it is okay to add ~120 metrics in the Linux PMDA or if it is > > preferable to put these in a separate one. > > > > Any feedback is appreciated. > > I'll review more closely once this current release is out the door, > but the answer to b) is "its fine". If/when we do reach a point down > the track where we collectively decide there's too many metrics in a > particular PMDA, there are approaches we've used before to split 'em > up (while preserving the namespace, transitioning PMIDs safely, etc). > > A few other things to think about at this stage: > > - it'd be a good idea to consider whether all/some/none of these new > metrics should be in the default-logged (by the system pmlogger) set > of metrics (and what sort of sampling interval would suit); Good point. I'll add some defaults with rationale in my next submission > - whether default or not, a src/pmlogconf/tools/netstat file (or some > other similarly named file closeby there) would be a welcome addition > to help people record these metrics; Yup. Duly noted. > - in terms of automated testing, the qa/957 test case automatically > will use valgrind to check your new additions to the kernel PMDA, but > we should add 2 new (similar) tests for the other two new PMDAs (I'll > help you with that once they exist if you like); > > - we should also check the actual values being exported match what > we expect. In some cases we've used other tools for verifying (see > qa/635 for a networking example) but I have another, more generic > approach planned for the kernel metrics (incl. these) which I hope > to tackle next release - leave that with me & I'll get back to you > on that one, I may need just some test case data from you there. Ok, I'll make sure to add some qa tests when submitting the non-rfc version. My current plan is more or less the following: - /proc/net/netstat Extend existing linux PMDA. Extends network.{tcp,ip} namespaces - /proc/net/sctp/snmp and /proc/net/sctp/assocs New separate SCTP PMDA (separate as in 99% of cases, it is of zero interest) Creates new network.sctp namespace and contains generic SCTP stack stats and indoms for specific association data - ethtool -S Separate PMDA in python (for now). Creates the new network.ethtool. namespace. This one seems to be the most complex in terms of NMS modelling. More on this when I have something a bit more consumable. - /proc/net/softnet_stat This helps for scheduling issue. Will start by stuffing it in the Linux PMDA. We can reconsider once we see the amount of metrics. - /proc/net/udp and /proc/net/udp6 UDP counters. Will start by stuffing it in the Linux PMDA. We can reconsider once we see the amount of metrics. - /proc/net/tcp6 We currently have /proc/net/tcp and are missing the ipv6 version - /proc/net/snmp6 We currently have /proc/net/snmp and are missing the ipv6 counterpart - /proc/buddyinfo It's good to collect fragmentation stats over time as some drivers have been known to misbehave under the slightest memory pressure conditions. We'll then need to see what makes sense to be collected by default and with what intervals and what not. Anyway, thanks for the feedback. I'll publish a proper reviewable git tree with my progress on this and post it here. regards, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From nscott@redhat.com Thu May 15 18:19:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 79BB17F51 for ; Thu, 15 May 2014 18:19:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id CA2F3AC00E for ; Thu, 15 May 2014 16:18:59 -0700 (PDT) X-ASG-Debug-ID: 1400195933-04cbb03cc7520b60001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id 1qc0an1Alhl245KK for ; Thu, 15 May 2014 16:18:53 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4FNIqCF008762 for ; Thu, 15 May 2014 19:18:53 -0400 Date: Thu, 15 May 2014 19:18:52 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <71911816.8555130.1400195932539.JavaMail.zimbra@redhat.com> In-Reply-To: <1971746542.8555023.1400195859903.JavaMail.zimbra@redhat.com> Subject: pcp updates: misc release admin, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: misc release admin, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: misc release admin, qa Thread-Index: VIpf9BGuqsYVUW6Cik/sFAALRqdGew== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1400195933 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5842 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev CHANGELOG | 5 GNUmakefile | 4 VERSION.pcp | 4 build/GNUmakefile | 5 build/rpm/fedora.spec | 51 +- debian/changelog | 10 doc/.gitignore | 1 doc/CHANGES | 519 --------------------- doc/COPYING | 921 -------------------------------------- doc/GNUmakefile | 26 - doc/INSTALL | 14 doc/PORTING | 86 --- qa/709 | 111 ++-- qa/709.out | 2 qa/qt/qmc_context/qmc_context.cpp | 2 qa/qt/qmc_context/qmc_context.pro | 1 qa/qt/qmc_desc/qmc_desc.cpp | 9 qa/qt/qmc_desc/qmc_desc.pro | 1 qa/qt/qmc_dynamic/qmc_dynamic.cpp | 6 qa/qt/qmc_dynamic/qmc_dynamic.pro | 1 qa/qt/qmc_event/qmc_event.pro | 1 qa/qt/qmc_format/qmc_format.pro | 1 qa/qt/qmc_group/qmc_group.cpp | 12 qa/qt/qmc_group/qmc_group.pro | 1 qa/qt/qmc_hosts/qmc_hosts.pro | 1 qa/qt/qmc_indom/qmc_indom.pro | 1 qa/qt/qmc_metric/qmc_metric.pro | 1 qa/qt/qmc_source/qmc_source.pro | 1 src/pmsnap/GNUmakefile | 6 29 files changed, 155 insertions(+), 1649 deletions(-) commit 9c6c95c625946a9088ec33ad02cee8d7c086b1a4 Author: Nathan Scott Date: Fri May 16 09:08:57 2014 +1000 Make the collectl test faster and platform-independent once more In the leadup to 3.9.4 we added a last minute fix to pmcollectl, and tested it via an extension to qa/709. This commit builds on that extension, removing Linux-specific aspects of those changes. Additionally, I noticed the test was starting to take a fair bit of time (~1 minute) and getting longer with each extension which seemed a bit odd. Turned out to be relatively simple to get the test to execute more quickly by reducing the sampling interval. Further work remains there, once pmcollectl is able to record at sub-second intervals (RH BZ 1098117). With this change, we have carved off 20-30 seconds or so, with that other change we should get the test down to running in less than 10seconds all up (it's at around 40sec elapsed time now). Which all helps when trying to debug/run the test multiple times in the leadup to a release. :) commit 125a7796dfa59abb73a54cc6aad8dfd0eec89fc2 Author: Nathan Scott Date: Fri May 16 08:59:09 2014 +1000 Conditionalise the Fedora/EPEL spec Qt usage for EPEL5 One of the (hopefully last) remaining issues with the pcp-gui merge was uncovered while doing the release builds - the spec for EPEL5 attempts the pcp-gui build unconditionally. Turns out this is a problem, and we weren't building pcp-gui at all on EPEL5 before - due to the age on the Qt packages there. But, no reason not to have pcp-doc there ... so now we can do that. This change conditionalises the spec so that we can go forward with almost-identical specs and future release builds will be uncomplicated once more. commit 67e83d23fbd1d60440c090ad16d3165eef01bdef Author: Nathan Scott Date: Fri May 16 08:53:43 2014 +1000 Correctly cleanup the build tree from Makepkgs commit 152a306034be612996a2c5c0e3588bc723868944 Author: Nathan Scott Date: Thu May 15 16:12:42 2014 +1000 Bump release details in dev branch for next release commit b45d1df6008aa063cf2105f461724255beeb4950 Author: Nathan Scott Date: Thu May 15 14:38:53 2014 +1000 Bump version and changelog info for pcp-3.9.4 release Additionally, the Fedora/EPEL spec file is updated to allow for a conditional libmicrohttpd-devel dependency/build, just in case it isn't available. Defaults to enabled, though. commit c7c234e80b1e0d4ff22b64af078f9e326ce32197 Author: Nathan Scott Date: Thu May 15 14:36:27 2014 +1000 Remove doc directory, leftover from gui merge commit 8bfbd481a7a210713f940c0274afa1a101028ab7 Author: Nathan Scott Date: Thu May 15 14:26:53 2014 +1000 Fix compiler warnings from the Qt test programs commit 33648068457788d07e10b6f831f90b063dd5b900 Author: Nathan Scott Date: Thu May 15 14:26:24 2014 +1000 Update Qt test programs to use the in-tree, not installed, libpcp From nscott@redhat.com Fri May 16 04:22:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 10DA87F5A for ; Fri, 16 May 2014 04:22:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 829DFAC00C for ; Fri, 16 May 2014 02:22:15 -0700 (PDT) X-ASG-Debug-ID: 1400232129-04cb6c728f55b8f0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id N2kDZJfXLBuKN6hm for ; Fri, 16 May 2014 02:22:09 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4G9M6uC031781; Fri, 16 May 2014 05:22:07 -0400 Date: Fri, 16 May 2014 05:22:06 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Cc: michele@acksyn.org Message-ID: <396789190.8764540.1400232126774.JavaMail.zimbra@redhat.com> In-Reply-To: <357055149.8764260.1400232093325.JavaMail.zimbra@redhat.com> Subject: pcp updates: netstat metrics, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: netstat metrics, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: netstat metrics, qa Thread-Index: L+tfMbaK42rhbpqqW8NhRIxnbCg8Pw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400232129 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5852 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev debian/changelog | 1 qa/003 | 22 + qa/1010 | 3 qa/1010.out | 14 qa/qt/qmc_desc/qmc_desc.cpp | 3 src/pmdas/linux/GNUmakefile | 7 src/pmdas/linux/clusters.h | 2 src/pmdas/linux/help | 136 ++++++++ src/pmdas/linux/pmda.c | 609 +++++++++++++++++++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.c | 353 +++++++++++++++++++++ src/pmdas/linux/proc_net_netstat.h | 150 +++++++++ src/pmdas/linux/root_linux | 121 +++++++ src/pmdas/mmv/GNUmakefile | 1 src/pmdumptext/pmdumptext.cpp | 556 +++++++++++---------------------- src/pmtime/main.cpp | 92 +---- 15 files changed, 1630 insertions(+), 440 deletions(-) commit 22da97f0ca6d2b52269c719f0e5baa36513985ec Author: Nathan Scott Date: Fri May 16 19:18:47 2014 +1000 Ensure build dirt is cleaned for MMV helper/demo tools commit a875d38a73d22497df2a61878b0a76da26b1b27f Author: Nathan Scott Date: Fri May 16 19:17:38 2014 +1000 Resolve regression recently introduced in QmcDesc test case commit 8028dab6b0867e70be042b2a8008873fae79e466 Author: Nathan Scott Date: Fri May 16 19:16:59 2014 +1000 Updates to QA after recent Linux kernel network metric additions Small stuff, test 003 needed addition filtering to handle the new expected-fail cases for some platforms, and a couple of the help text entries were beyond the length limit checked by test qa/469. Renamed one new metric which misspelt "spurious" as "spurios". commit eb4d18a822568f0434245677773c1b8f658d0367 Author: Michele Baldessari Date: Fri May 16 18:57:09 2014 +1000 Add /proc/net/netstat support to the Linux kernel PMDA In order to troubleshoot a certain class of networking issues it is extremely useful to collect the tcp and ip statistics exported by /proc/net/netstat Signed-off-by: Michele Baldessari commit 895c79ac16fa5ac4437acc7b7c9730ec4fabba67 Author: Nathan Scott Date: Fri May 16 15:37:49 2014 +1000 Convert pmtime and pmdumptext to using long option parsing From brolley@redhat.com Fri May 16 11:16:10 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9516229DFA for ; Fri, 16 May 2014 11:16:10 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7060F304048 for ; Fri, 16 May 2014 09:16:07 -0700 (PDT) X-ASG-Debug-ID: 1400256965-04cbb03cc455d4b0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JYIo5WmSDuGirCxN for ; Fri, 16 May 2014 09:16:06 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4GGG4xn021026 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 16 May 2014 12:16:05 -0400 Received: from [10.10.57.202] (vpn-57-202.rdu2.redhat.com [10.10.57.202]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4GGG4qi017590 for ; Fri, 16 May 2014 12:16:04 -0400 Message-ID: <53763A45.6010403@redhat.com> Date: Fri, 16 May 2014 12:18:13 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: Makepkgs Looping? Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Makepkgs Looping? Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400256966 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, With all of the latest from upstream, on my f19 system, Makepkgs seems to be looping on the command below. CPU for gawk is pegged at 100%, so it's not waiting for something. I'm looking into it, but if it rings any bells with anyone, please have a look. The invocation was: Makepkgs -verbose -clean Thanks, Dave -------------------------------------------------------- + /usr/bin/gawk --posix ' BEGIN { while( getline < "cfg_files") cfg[$0]=1; while( getline < "gui_files") gui[$0]=1; while( getline < "docs_files") doc[$0]=1; while( getline < "libs_files") lib[$0]=1; while( getline < "devel_files") dev[$0]=1; while( getline < "webapi_files") webapi[$0]=1; while( getline < "manager_files") manager[$0]=1; while( getline < "testsuite_files") testsuite[$0]=1; while( getline < "pmda_infiniband_files") pmda_infiniband[$0]=1; while( getline < "import_sar2pcp_files") import_sar2pcp[$0]=1; while( getline < "import_iostat2pcp_files") import_iostat2pcp[$0]=1; while( getline < "import_sheet2pcp_files") import_sheet2pcp[$0]=1; while( getline < "import_mrtg2pcp_files") import_mrtg2pcp[$0]=1; while( getline < "import_collectl2pcp_files") import_collectl2pcp[$0]=1; while( getline < "import_collectl2pcp_files") import_collectl2pcp[$0]=1; while( getline < "conf_files") conf[nconf++]=$0; } { if (cfg[$NF]) f="cfg_files.rpm"; else if (gui[$NF]) f="gui_files.rpm"; else if (doc[$NF]) f="docs_files.rpm"; else if (lib[$NF]) f="libs_files.rpm"; else if (dev[$NF]) f="devel_files.rpm"; else if (webapi[$NF]) f="webapi_files.rpm"; else if (manager[$NF]) f="manager_files.rpm"; else if (testsuite[$NF]) f="testsuite_files.rpm"; else if (pmda_infiniband[$NF]) f="pmda_infiniband_files.rpm"; else if (import_sar2pcp[$NF]) f="import_sar2pcp_files.rpm"; else if (import_iostat2pcp[$NF]) f="import_iostat2pcp_files.rpm"; else if (import_sheet2pcp[$NF]) f="import_sheet2pcp_files.rpm"; else if (import_mrtg2pcp[$NF]) f="import_mrtg2pcp_files.rpm"; else if (import_collectl2pcp[$NF]) f="import_collectl2pcp_files.rpm"; else f="base_files.rpm" } $1 == "d" { printf ("%%dir %%attr(%s,%s,%s) %s\n", $2, $3, $4, $5) >> f } $1 == "f" && $6 ~ "etc/pcp.conf" { printf ("%%config ") >> f; } $1 == "f" { for (i=0; i < nconf; i++) { if ($6 ~ conf[i]) { printf ("%%config(noreplace) ") >> f; break; } } if (match ($6, "/usr/share/man") || match ($6, "/usr/share/doc/pcp-3.9.5")) { printf ("%%doc ") >> f; } printf ("%%attr(%s,%s,%s) %s\n", $2, $3, $4, $6) >> f } $1 == "l" { print "%attr(0777,root,root)", $3 >> f }' From fche@redhat.com Fri May 16 19:01:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 737617F3F for ; Fri, 16 May 2014 19:01:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3B441304043 for ; Fri, 16 May 2014 17:01:16 -0700 (PDT) X-ASG-Debug-ID: 1400284874-04bdf056b619150001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id JkhVa1fLyoA7STyv for ; Fri, 16 May 2014 17:01:15 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4H01EU2001666 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 16 May 2014 20:01:14 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4H01DCD015649 for ; Fri, 16 May 2014 20:01:14 -0400 Received: by fche.csb (Postfix, from userid 2569) id 44CEE58393; Fri, 16 May 2014 20:01:13 -0400 (EDT) To: PCP Mailing List Subject: Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> X-ASG-Orig-Subj: Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements From: fche@redhat.com (Frank Ch. Eigler) Date: Fri, 16 May 2014 20:01:13 -0400 In-Reply-To: <5373AAA7.70004@redhat.com> (Dave Brolley's message of "Wed, 14 May 2014 13:40:55 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400284875 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - While hacking on pmwebd extensions, it occurred to me that we could offer archive discovery capabilities within the pmDiscoverServices() function. This could be handy for interactive users to populate file browsers or live web popups, and possibly for tools too. It could look like this: pmDiscoverServices("archive", "...specs...", & urls); /* where urls[] might return file:///PATH/FOO.meta or /PATH/FOO.meta */ /* find all .meta files under pwd */ pmDiscoverServices("archive", "", & urls); pmDiscoverServices("archive", "basedir=.", & urls); /* equivalently */ Going wild with possible options: - search multiple directories "basedir=/PATH,basedir=/PATH2" - filter for archive-label matching given hostname ",loghost=BAR.BAZ" - filter for archive-label covering all given TIME(s) ",logtime=TIME,logtime=TIME" - filter for archive metadata including metric ",metric=PMNS" - limit directory recursion ",maxdepth=NN" - limit time ",timeout=NN" - FChE From nscott@redhat.com Fri May 16 19:22:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id BA7827F3F for ; Fri, 16 May 2014 19:22:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8DBFD8F804B for ; Fri, 16 May 2014 17:22:59 -0700 (PDT) X-ASG-Debug-ID: 1400286174-04cbb006db1a570001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 58N6KozI9OEj7bNq for ; Fri, 16 May 2014 17:22:55 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4H0Msnb003094; Fri, 16 May 2014 20:22:54 -0400 Date: Fri, 16 May 2014 20:22:54 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <2138946642.9336468.1400286174604.JavaMail.zimbra@redhat.com> In-Reply-To: <53763A45.6010403@redhat.com> References: <53763A45.6010403@redhat.com> Subject: Re: [pcp] Makepkgs Looping? MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Makepkgs Looping? Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - GC27 (Linux)/8.0.6_GA_5922) Thread-Topic: Makepkgs Looping? Thread-Index: xoCGu+HrE3UQ84SWkl1A3jiBTCdyVA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1400286175 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5871 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > Hi, > > With all of the latest from upstream, on my f19 system, Makepkgs seems > to be looping on the command below. CPU for gawk is pegged at 100%, so > it's not waiting for something. I'm looking into it, but if it rings any > bells with anyone, please have a look. > > The invocation was: Makepkgs -verbose -clean I'm not seeing this here - the biggest recent change is the pcp-gui and pcp-doc package additions here of course, so they're likely culprits. Do you have Qt devel packages installed? (should work either way, but I am running with those installed - might be the key difference). cheers. -- Nathan From fche@redhat.com Sun May 18 18:39:23 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id ABFD17F3F for ; Sun, 18 May 2014 18:39:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8AD8F8F804B for ; Sun, 18 May 2014 16:39:23 -0700 (PDT) X-ASG-Debug-ID: 1400456359-04cb6c5d0ab4540001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id joZVgbZ8KN3qBZKk for ; Sun, 18 May 2014 16:39:19 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4INdIfI015206 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 18 May 2014 19:39:18 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4INdIA5025337 for ; Sun, 18 May 2014 19:39:18 -0400 Received: by fche.csb (Postfix, from userid 2569) id 5BFDF585D8; Sun, 18 May 2014 19:39:17 -0400 (EDT) Date: Sun, 18 May 2014 19:39:17 -0400 From: "Frank Ch. Eigler" To: pcp developers Subject: pmdasystemd build/install fix Message-ID: <20140518233917.GI3519@redhat.com> X-ASG-Orig-Subj: pmdasystemd build/install fix Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400456359 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - Please review & merge if desired. commit de5b0f2582c8d9ac7eafe52259248fca41beb65b (HEAD, dev) Author: Frank Ch. Eigler Date: Sun May 18 19:20:19 2014 -0400 systemd pmda: install $(CMDTARGET) Commit 8d0b3db3832 in release 3.9.4 removed pmda .so build all right, but also accidentally removed the installation of the pmdasystemd executable. Put that back. The qa/652 test correctly asserts the existence of the pmda binary; perhaps leftovers a previous build gave a false-positive result. diff --git a/src/pmdas/systemd/GNUmakefile b/src/pmdas/systemd/GNUmakefile index 90bc61609485..9805c1dc25cd 100644 --- a/src/pmdas/systemd/GNUmakefile +++ b/src/pmdas/systemd/GNUmakefile @@ -40,6 +40,7 @@ install: default $(INSTALL) -m 755 Install Remove $(PMDADIR) $(INSTALL) -m 644 $(DFILES) root help pmns $(PMDADIR) $(INSTALL) -m 644 domain.h $(PMDADIR)/domain.h + $(INSTALL) -m 755 $(CMDTARGET) $(PMDADIR)/$(CMDTARGET) else build-me: install: From nscott@redhat.com Sun May 18 22:37:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id B25457F3F for ; Sun, 18 May 2014 22:37:20 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 82B1F8F8033 for ; Sun, 18 May 2014 20:37:17 -0700 (PDT) X-ASG-Debug-ID: 1400470632-04bdf056b5b55a0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id KbzCd00XeTEV0zGc for ; Sun, 18 May 2014 20:37:12 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4J3bBVu007220; Sun, 18 May 2014 23:37:11 -0400 Date: Sun, 18 May 2014 23:37:11 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: pcp developers Message-ID: <315040894.9573829.1400470631841.JavaMail.zimbra@redhat.com> In-Reply-To: <20140518233917.GI3519@redhat.com> References: <20140518233917.GI3519@redhat.com> Subject: Re: [pcp] pmdasystemd build/install fix MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmdasystemd build/install fix Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmdasystemd build/install fix Thread-Index: CZQ6PSmgeg9E0dk/RoSoB6k4tXOsuw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400470632 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5924 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > Hi - > > Please review & merge if desired. > I would if I could ... but I'm struggling to find it from: > commit de5b0f2582c8d9ac7eafe52259248fca41beb65b (HEAD, dev) Has it been pushed? I assume it should be on sourceware.org in one of the pcpfans dev branches, but after a pull... git log de5b0f2582c8d9ac7eafe52259248fca41beb65b fatal: bad object de5b0f2582c8d9ac7eafe52259248fca41beb65b cheers. -- Nathan From nscott@redhat.com Sun May 18 22:43:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 7726F7F3F for ; Sun, 18 May 2014 22:43:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 62C868F8033 for ; Sun, 18 May 2014 20:43:36 -0700 (PDT) X-ASG-Debug-ID: 1400471015-04cb6c5d0abfb70001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id sxQwbGOD8oaqNbXb for ; Sun, 18 May 2014 20:43:35 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4J3hYEp019661; Sun, 18 May 2014 23:43:34 -0400 Date: Sun, 18 May 2014 23:43:34 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <625669506.9574346.1400471014883.JavaMail.zimbra@redhat.com> In-Reply-To: <2138946642.9336468.1400286174604.JavaMail.zimbra@redhat.com> References: <53763A45.6010403@redhat.com> <2138946642.9336468.1400286174604.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Makepkgs Looping? MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Makepkgs Looping? Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Makepkgs Looping? Thread-Index: xoCGu+HrE3UQ84SWkl1A3jiBTCdyVCS0kJju X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1400471015 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5923 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > ----- Original Message ----- > > Hi, > > > > With all of the latest from upstream, on my f19 system, Makepkgs seems > > to be looping on the command below. CPU for gawk is pegged at 100%, so > > it's not waiting for something. I'm looking into it, but if it rings any > > bells with anyone, please have a look. > > > > The invocation was: Makepkgs -verbose -clean > > I'm not seeing this here - the biggest recent change is the pcp-gui and > pcp-doc package additions here of course, so they're likely culprits. > Do you have Qt devel packages installed? (should work either way, but I > am running with those installed - might be the key difference). > I think this is fixed now by commit 97d698ab - let me know how it goes? cheers. -- Nathan From nscott@redhat.com Sun May 18 22:45:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E808D7F3F for ; Sun, 18 May 2014 22:45:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id C7A168F8033 for ; Sun, 18 May 2014 20:45:07 -0700 (PDT) X-ASG-Debug-ID: 1400471102-04cbb006dcb6350001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id A0bad7WJkNARW0X8 for ; Sun, 18 May 2014 20:45:02 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4J3j2jZ023522 for ; Sun, 18 May 2014 23:45:02 -0400 Date: Sun, 18 May 2014 23:45:02 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <71721302.9574464.1400471102323.JavaMail.zimbra@redhat.com> In-Reply-To: <2072500648.9574403.1400471057965.JavaMail.zimbra@redhat.com> Subject: pcp updates: Makepkgs without Qt MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: Makepkgs without Qt Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: Makepkgs without Qt Thread-Index: g/z2uOwZ6ngdvU7Nmfp2eEcXarIwng== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1400471102 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5924 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev build/rpm/pcp.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 97d698ab33c0da41bba1dbc3f66a7f6f7536e256 Author: Nathan Scott Date: Mon May 19 13:41:30 2014 +1000 Ensure gui_files created in Makepkgs spec file, else badness results Dave has observed the awk invocation spinning infinitely in Makepkgs. I think this is a result of the conditional Qt building, where awk is asked to read from a file that doesn't exist. Fix this via the same mechanism used by other conditional packages - simply touch the file, unconditionally. From nscott@redhat.com Mon May 19 01:05:39 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id C71337F3F for ; Mon, 19 May 2014 01:05:39 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5448AAC003 for ; Sun, 18 May 2014 23:05:38 -0700 (PDT) X-ASG-Debug-ID: 1400479532-04cbb006dcbd3b0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id GYBbxsDFMgEVnvHl for ; Sun, 18 May 2014 23:05:33 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4J65Wa2032278 for ; Mon, 19 May 2014 02:05:32 -0400 Date: Mon, 19 May 2014 02:05:32 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <786808961.9598412.1400479532209.JavaMail.zimbra@redhat.com> In-Reply-To: <1739871549.9597901.1400479482024.JavaMail.zimbra@redhat.com> Subject: pcp updates: scox fixes, qa, pmlogcheck fix, more qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: scox fixes, qa, pmlogcheck fix, more qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: scox fixes, qa, pmlogcheck fix, more qa Thread-Index: XV0Yw8EBrbrI3Ie6+btYmpYfgRrLHA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400479533 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5926 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/701 | 26 ++++++++++++ qa/701.out | 2 qa/722 | 4 - qa/979 | 21 ++++++++++ qa/979.out | 2 qa/980 | 21 ++++++++++ qa/980.out | 2 qa/group | 3 + qa/src/GNUlocaldefs | 2 qa/src/pmatop-log.0 |binary qa/src/pmatop-log.index |binary qa/src/pmatop-log.meta |binary qa/src/test_pmcc.python | 19 ++++----- src/pmlogsummary/pmlogcheck.c | 7 ++- src/pmlogsummary/pmlogsummary.c | 2 src/python/pcp/pmcc.py | 82 +++++++++++++++++++++++----------------- 17 files changed, 145 insertions(+), 48 deletions(-) commit f23b0aaebe92567a9d60e33ee897f037058a12b0 Author: Nathan Scott Date: Mon May 19 16:03:26 2014 +1000 Add QA tests for basic pmcc checkout in live and archive modes Tests 979 and 980 are added to verify python script functionality using the pmcc module. Renamed the pmatop test archive to not use the test name (722) that it was created for, and then reuse that archive as it has all the metrics used by the test_pmcc script. commit 5a0d0d22038197f83eca6e9f665532c363cfc899 Author: Stan Cox Date: Mon May 19 15:40:13 2014 +1000 Initial series of fixes and comments for pmcc.py module Changes that reach basic, advertised functional state for the pmcc (convenience classes) python module. Updates to the earlier test python code also. commit 3d193685cffdf27b6ba964c03b35e274cceb1392 Author: Nathan Scott Date: Mon May 19 15:30:14 2014 +1000 Fix pmlogcheck bad memory access sigsegv on some logs If an archive contains a metric which initially has an error recorded for it (no value) but later on good data arrives, and that metric is a singleton (PM_INDOM_NULL) then pmlogcheck will fail to handle it correctly. This is because no space to hold the previous value for any fetch is allocated during the initial error-containing sample, and subsequently an assumption is made that we did allocate that space. Metrics with instances were handled correctly all along, this only affects single-valued metrics. Test 701 is added to exercise the fix. An audit of the existing QA archives found the ace_v2 archive contains the problematic pattern, and without the fix produces: 701: line 21: Segmentation fault pmlogcheck src/ace_v2 This resolves Fedora BZ #1077432. commit 80bbd7a2f8ed2e8a5aef9da63cd02d57041d9dd3 Author: Nathan Scott Date: Mon May 19 14:15:42 2014 +1000 When usage message requested do not check for archive in pmlog{check,summary} From nscott@redhat.com Mon May 19 03:16:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 733187F4E for ; Mon, 19 May 2014 03:16:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C7E6DAC006 for ; Mon, 19 May 2014 01:16:39 -0700 (PDT) X-ASG-Debug-ID: 1400487393-04cbb006dac4450001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id VcSKEPOLCGGr43KT for ; Mon, 19 May 2014 01:16:33 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4J8GXNN023864; Mon, 19 May 2014 04:16:33 -0400 Date: Mon, 19 May 2014 04:16:33 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> In-Reply-To: <5373D0D2.5090902@redhat.com> References: <5373D0D2.5090902@redhat.com> Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Thread-Index: ix1Gl7wVmB3yJv+KJsLGKrSAZplLqw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400487393 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5929 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > Hi, > > The commits below have been pushed to my brolley/dev branch in the > pcpfans repository. They collectively represent an implementation of an > active probing mode for __pmDiscoverServices() / pmfind. > ... > I am soliciting review of the code and the user interface. All comments > and suggestions are welcome. > Looking good! diff --git a/configure.in b/configure.in index 7248293..0a32cfd 100644 --- a/configure.in +++ b/configure.in @@ -1559,6 +1559,12 @@ __thread int x;], [], AC_TRY_COMPILE([#include ], [pthread_barrier_t mybarrier;], AC_DEFINE(HAVE_PTHREAD_BARRIER_T) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) + + dnl Check if sem_t is defined in semephore.h + AC_MSG_CHECKING([for sem_t in semephore.h]) typo: semephore.h -> semaphore.h + AC_TRY_COMPILE([#include ], [sem_t mysem;], + AC_DEFINE(HAVE_SEM_T) AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) fi fi diff --git a/src/include/pcp/impl.h b/src/include/pcp/impl.h index edffa31..727390a 100644 --- a/src/include/pcp/impl.h +++ b/src/include/pcp/impl.h @@ -628,9 +628,11 @@ extern int __pmSockAddrIsLoopBack(const __pmSockAddr *); extern int __pmSockAddrIsInet(const __pmSockAddr *); extern int __pmSockAddrIsIPv6(const __pmSockAddr *); extern int __pmSockAddrIsUnix(const __pmSockAddr *); -extern char * __pmSockAddrToString(__pmSockAddr *); +extern char * __pmSockAddrToString(const __pmSockAddr *); extern __pmSockAddr *__pmStringToSockAddr(const char *); extern __pmSockAddr *__pmLoopBackAddress(int); +extern __pmSockAddr *__pmSockAddrFirstSubnetAddr(const __pmSockAddr *, int); +extern __pmSockAddr *__pmSockAddrNextSubnetAddr(__pmSockAddr *, int); Hmm, do these really need to be exposed outside libpcp? (on review, it would seem not - and theres no exports file change, so they definitely should not be exposed up here in impl.h, right?) diff --git a/src/libpcp/src/discovery.c b/src/libpcp/src/discovery.c index d620311..094c91f 100644 --- a/src/libpcp/src/discovery.c +++ b/src/libpcp/src/discovery.c @@ -108,7 +118,7 @@ __pmAddDiscoveredService(__pmServiceInfo *info, int numUrls, char ***urls) __pmNotifyErr(LOG_ERR, "__pmAddDiscoveredService: Unsupported service: '%s'", info->spec); - return EOPNOTSUPP; + return -EOPNOTSUPP; } /* Whoops. QA test time? (we must have no/few error path tests, I guess? would this be difficult to add? I'm guessing not - via "pmfind -s"?) diff --git a/src/libpcp/src/probe.c b/src/libpcp/src/probe.c new file mode 100644 index 0000000..8147b2e --- /dev/null +++ b/src/libpcp/src/probe.c +[...] +static void +attemptComplete (void) (space oddity - several in this file) + +/* Attempt a connection on the given address and port. Return 0, if successful. */ +static void * +attemptConnection (void *arg) +{ + int s; + int flags; + int sts; + struct timeval canwait = { 1, 000000 }; Hard-coding - use TIMEOUT_DEFAULT? &| __pmDefaultRequestTimeout or some other (new) env var customisable timeout, perhaps? + /* + * Create a socket. There may be a limit on open fds. If we get EAGAIN, then + * wait 0.1 seconds and try again. We must have a limit in case something goes wrong. + * Make it 5 seconds (50 * 100,000 usecs). + */ + for (attempt = 0; attempt < 50; ++attempt) { + if (__pmSockAddrIsInet(context->address)) + s = __pmCreateSocket(); + else /* address family already checked */ + s = __pmCreateIPv6Socket(); + if (s != -EAGAIN) + break; + usleep(100000); (hard-code ... more comments on this shortly, below) + /* Attempt to connect. If flags comaes back as less than zero, then the type: comaes -> comes + +/* Dispatch a connection attempt, on its own thread, if supported. */ +static void +dispatchConnection ( (space oddity) + const char *service, + const __pmSockAddr *address, + int port, + int *numUrls, + char ***urls +) +{ +#if IS_MULTI_THREAD + pthread_t thread; +#endif + connectionContext *context; + int rc; "sts" please, you're hacking PCP this week. ;) + int attempt; + + /* We need a separate connection context for each potential thread. */ + context = malloc(sizeof(*context)); + if (context == NULL) { + __pmNoMem("__pmProbeDiscoverServices: unable to allocate connection context", + sizeof(*context), PM_FATAL_ERR); + } + context->service = service; + context->port = port; + context->numUrls = numUrls; + context->urls = urls; + context->address = __pmSockAddrDup(address); This seems to be a second Dup, and we leak address, if I'm not mistaken? (when allocated from __pmSockAddrFirstSubnetAddr -> probeForServices?) + if (context->address == NULL) { + char *addrString = __pmSockAddrToString(address); + __pmNotifyErr(LOG_ERR, "__pmProbeDiscoverServices: unable to copy socket address %s", + addrString); + free(addrString); + attemptComplete(); + return; + } + + /* + * Attempt the connection. Since we're not passing in attributes for the (possible) + * new thread, the only error that can occur is EAGAIN. Sleep for 0.1 seconds + * before trying again. We must have a limit in case something goes wrong. Make it + * 5 seconds (50 * 100,000 usecs). + * + * Respect the requested maximum number of threads. + */ + SEM_WAIT(&threadsAvailable); + for (attempt = 0; attempt < 50; ++attempt) { Hard-coded limits. + /* Attempt the connection on a new thread. */ + rc = THREAD_START(&thread, &attr, attemptConnection, context); + if (rc != EAGAIN) + break; + + /* Wait before trying again. */ + usleep(100000); + } Hmm, more hard-coding. usleep is not portable - go for pmtimevalSleep perhaps? The above hard-coding could be broken via env var / setting for discovery timeout, and then split that time up into chunks (e.g. divide by 100000usec, if thats a good time) + else if (pmDebug & DBG_TRACE_DISCOVERY) { + if (attempt > 0) { + __pmNotifyErr(LOG_INFO, "Waited for %d attempts to create a thread\n", + attempt); + } (loving the diagnostics!) +} + +static int +probeForServices ( (space oddity) + /* The service is either a service name (e.g. pmcd) or a port number. */ + if (strcmp(service, "pmcd") == 0) { + if ((env = getenv("PMCD_PORT")) != NULL) { + port = strtol(env, &end, 0); + if (*end != '\0' || port < 0) { + __pmNotifyErr(LOG_WARNING, + "__pmProbeDiscoverServices: ignored bad PMCD_PORT = '%s'\n", + env); + port = SERVER_PORT; + } + } + else + port = SERVER_PORT; + } + else { + port = strtol(service, &end, 0); + if (*end != '\0') { + __pmNotifyErr(LOG_ERR, "__pmProbeDiscoverServices: service '%s; is not valid", + service); + return 0; It worries me a little we only have one service here, tends to hide bugs that will mean only one will ever work - I'd love to see pmproxy (PROXY_PORT) and pmwebd (PMWEBD_PORT) added into this mix ASAP to make sure it always supports >1 service as well as >1 mechanism. Going back a bit, the probe does a socket connect/close doesn't it? So, all we'd need here is some other strcmp/port mappings for those other two - is that right? (similarly, the Avahi extension would be relatively straight forward, no? I think we should just go right ahead and do it, unless there's something big & onerous I'm missing there?) + } + __pmSockAddrSetPort(netAddress, port); + + /* + * We have a network address, a subnet and a port. Iterate over the addresses in the subnet, (long comment line - generally 80 cols is used as defacto std) + * Since the connection attempts may be on separate threads, + * we need a counter to be incremented by each thread as they end so that + * we know when all of the threads have ended. + * IPv6 has 128 bits, so it is possible that the number of addresses could + * exceed the range of the native integer types or of a semaphore. However, + * a __pmSockAddr can be used for this purpose, since it can represent all + * of the addresses to be probed. Use the subnet iteration API to initialize + * and increment this counter. When the last thread has been processed, this + * pointer will be freed by the API and become NULL. Cunning. + addressesProcessed = __pmSockAddrFirstSubnetAddr(netAddress, maskBits); + + /* Dispatch the connection attempts. */ + prevNumUrls = numUrls; + for (address = __pmSockAddrFirstSubnetAddr(netAddress, maskBits); + address != NULL; + address = __pmSockAddrNextSubnetAddr(address, maskBits)) { + dispatchConnection (service, address, port, &numUrls, urls); (extra whitespace, and "address" use here looks questionable wrt leaking as mentioned above) +/* + * Parse the mechanism string for options. The first option will be of the form + * + * probe=/ + * + * Subesquent options, if any, will be separated by commas. Currently supported: typo: subesquent -> subsequent. + * maxThreads= -- specifies a hard limit on the number of active threads. + */ + static int + parseOptions(const char *mechanism) Hmm - these options are specific to the individual discovery mechanisms aren't they? Shouldn't we be calling out to discovery-specific parsing mechanisms here? + /* Parse any remaining options. */ + option = end; + if (*option == '\0') + return 0; /* no options */ + + sts = 0; + /* Examine the option. */ + if (strncmp(option, "maxThreads=", 11) == 0) { just "threads"? + option += 11; (change that if so -> either way, sizeof("maxThreads") will be better than simply 11) + option = end; + /* + * Make sure the value is positive. Large values are ok. They have the + * effect of "no fixed limit". However, there is an actual limit to be + * observed. sem_init(3) says that it is SEM_VALUE_MAX. However, on f19, + * where SEM_VALUE_MAX is 0xffffffff, values higher than 0x7fffffff cause *cough* - sounds like a glibc bug? + * the semaphore to block on the first sem_wait. + */ + if (longVal > 0x7fffffff) { How about using something like "max(SEM_VALUE_MAX, 0x7fffffff)" here, to be sure to be sure? Either way, those numbers are insanely high - maybe just set a crazy but smaller thread count limit anyway - like 1024? (ie who would use *that* many threads, anyway!?) +int +__pmProbeDiscoverServices(const char *service, const char *mechanism, int numUrls, char ***urls) +{ + int sts; + + /* Interpret the mechanism string. */ + sts = parseOptions(mechanism); + if (sts != 0) + return 0; + + /* Everything checks out. Now do the actual probing. */ + numUrls = probeForServices (service, netAddress, maskBits, numUrls, urls); (whitespace oddity) @@ -2252,3 +2252,80 @@ __pmSockAddrToString(__pmSockAddr *addr) } return buf; } + +__pmSockAddr * +__pmSockAddrFirstSubnetAddr(const __pmSockAddr *netAddr, int maskBits) +{ + __pmSockAddr *addr; + + /* Make a copy of the net address for iteration purposes. */ + addr = __pmSockAddrDup(netAddr); (this allocation ultimately seems to lead to one or two potential memory leaks down the track ... but perhaps I'm missing something subtle there) diff --git a/src/pmfind/pmfind.c b/src/pmfind/pmfind.c index 0c55709..5e59c50 100644 --- a/src/pmfind/pmfind.c +++ b/src/pmfind/pmfind.c @@ -22,7 +22,7 @@ static char *mechanism; static pmLongOptions longopts[] = { PMAPI_OPTIONS_HEADER("Discovery options"), PMOPT_DEBUG, - { "mechanism", 1, 'm', "NAME", "set the discovery method to use [avahi|...|all]" }, + { "mechanism", 1, 'm', "NAME", "set the discovery method to use [avahi|probe=|all]" }, { "service", 1, 's', "NAME", "discover local services [pmcd|...]" }, PMAPI_OPTIONS_HEADER("Reporting options"), { "quiet", 0, 'q', 0, "quiet mode, do not write to stdout" }, This is a very neat feature - thanks Dave! (and Frank for the original suggestion, of course!) cheers. -- Nathan From fche@redhat.com Mon May 19 06:02:46 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 636447F4E for ; Mon, 19 May 2014 06:02:46 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 44342304064 for ; Mon, 19 May 2014 04:02:43 -0700 (PDT) X-ASG-Debug-ID: 1400497358-04bdf056b7d1db0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id wulKkH7MVtFRddYo for ; Mon, 19 May 2014 04:02:39 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4JB2c7c002751 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 19 May 2014 07:02:38 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4JB2bX8018166; Mon, 19 May 2014 07:02:37 -0400 Received: by fche.csb (Postfix, from userid 2569) id 270A4585D8; Mon, 19 May 2014 07:02:37 -0400 (EDT) Date: Mon, 19 May 2014 07:02:37 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: pcp developers Subject: Re: [pcp] pmdasystemd build/install fix Message-ID: <20140519110237.GJ3519@redhat.com> X-ASG-Orig-Subj: Re: [pcp] pmdasystemd build/install fix References: <20140518233917.GI3519@redhat.com> <315040894.9573829.1400470631841.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <315040894.9573829.1400470631841.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400497358 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Nathan - > I would if I could ... but I'm struggling to find it from: > > commit de5b0f2582c8d9ac7eafe52259248fca41beb65b (HEAD, dev) I didn't happen to push it, but all 1.0 lines of the patch were lovingly ensconced in the original email (for git apply). :-) - FChE From fche@redhat.com Mon May 19 16:57:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 387447F4E for ; Mon, 19 May 2014 16:57:11 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1B755304075 for ; Mon, 19 May 2014 14:57:08 -0700 (PDT) X-ASG-Debug-ID: 1400536623-04cbb006da1196a0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id xVyYV5i1aHCE0FTE for ; Mon, 19 May 2014 14:57:04 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4JLv3PX012039 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 19 May 2014 17:57:03 -0400 Received: from fche.csb (vpn-54-210.rdu2.redhat.com [10.10.54.210]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4JLv3Ch030576; Mon, 19 May 2014 17:57:03 -0400 Received: by fche.csb (Postfix, from userid 2569) id AFB17585D8; Mon, 19 May 2014 17:57:02 -0400 (EDT) To: Dave Brolley Cc: PCP Mailing List Subject: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> X-ASG-Orig-Subj: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 19 May 2014 17:57:02 -0400 In-Reply-To: <5373D0D2.5090902@redhat.com> (Dave Brolley's message of "Wed, 14 May 2014 16:23:46 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400536624 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi, Dave - > The commits below have been pushed to my brolley/dev branch in the > pcpfans repository. They collectively represent an implementation of > an active probing mode for __pmDiscoverServices() / pmfind. Thank you, great start. > [...] In order that the probing be completed in a reasonable amount > of time, each connection is attempted on its own thread (on > platforms that support pthreads). [...] The way you did this appears to work, but a few things could simplify it a lot: Instead of creating one brand new thread per connection poll, consider creating a persistent pool. One shared struct context for all the threads could do: struct context { struct timeval timeout_expiry; __pmSockAddr *last_address; __pmSockAddr *next_address; pthread_mutex next_address_lock; char ***urls; /* etc., for collecting outputs */ pthread_mutex urls_lock; }; Each thread could have a main function consisting of: while (! timeout) { lock (next_address_lock); if (next-address == NULL) { /* search was completed by someone else */ unlock (next_address_lock); break; } save next-address for self, next_address = __pmSockAddrNextSubnetAddr (next_address ...); /* might become NULL */ unlock (next_address_lock); attemptConnection on saved address; /* IMHO, don't even bother retry-loop; let TCP do that. */ if (successful) { lock(urls); __pmAddDiscoveredService(urls); unlock(urls); } } The idea would be that the threads would keep contending over the next-address and for the url, as long as there's time available, and the search is not yet finished. This would make the dispatchConnection() function largely moot. No stuff either. The probeForServices() function could instead initialize the single context struct, create the thread-pool, and just call the thread work function itself in a loop until that exits (i.e., main thread can race with the worker threads). Then it can pthread_join() all the worker threads for perfection in cleanup, and then return the collected urls from the context. This logic would work even if threading is compiled out, or if some of the threads are couldn't be started (so no need to retry them either). - FChE From nscott@redhat.com Tue May 20 02:48:28 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0A5547F6C for ; Tue, 20 May 2014 02:48:28 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id A83CBAC008 for ; Tue, 20 May 2014 00:48:24 -0700 (PDT) X-ASG-Debug-ID: 1400572098-04bdf056b613e1b0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id AXIWICql4U0705VC for ; Tue, 20 May 2014 00:48:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4K7mHjA031058 for ; Tue, 20 May 2014 03:48:18 -0400 Date: Tue, 20 May 2014 03:48:17 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1032354754.10715963.1400572097784.JavaMail.zimbra@redhat.com> In-Reply-To: <22073306.10715158.1400571893414.JavaMail.zimbra@redhat.com> Subject: pcp updates: systemd fix, signal fixes, pmchart long options, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: systemd fix, signal fixes, pmchart long options, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: systemd fix, signal fixes, pmchart long options, qa Thread-Index: Vm6ronsqiGesp9W2M86R0r3CXGleFQ== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1400572098 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5955 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev GNUmakefile | 8 build/rpm/fedora.spec | 2 qa/1001 | 1 qa/1002 | 1 qa/1003 | 1 qa/1004 | 1 qa/1005 | 1 qa/1006 | 1 qa/1007 | 1 qa/102.out | 4 qa/133.out | 1 qa/304.out | 1 qa/354.out | 2 qa/374 | 6 qa/381.out | 1 qa/538.out | 1 qa/common.filter | 2 qa/common.test | 1 qa/group | 2 src/pmcd/src/pmcd.c | 56 +++--- src/pmcd/src/pmcd.h | 1 src/pmchart/main.cpp | 379 ++++++++++++++--------------------------- src/pmchart/main.h | 1 src/pmchart/timecontrol.cpp | 3 src/pmdas/systemd/GNUmakefile | 1 src/pmie/pmie_check.sh | 4 src/pmie/rc_pmie | 10 - src/pmie/src/dstruct.c | 7 src/pmie/src/dstruct.h | 4 src/pmie/src/pmie.c | 24 +- src/pmlogger/pmlogger_check.sh | 6 src/pmlogger/rc_pmlogger | 1 src/pmlogger/src/logger.h | 1 src/pmlogger/src/pmlogger.c | 14 - src/pmlogger/src/ports.c | 46 +--- src/pmproxy/pmproxy.c | 16 + src/pmquery/pmquery.cpp | 11 - 37 files changed, 256 insertions(+), 367 deletions(-) commit 53419bef43c16f13274bb85364d84192631659b0 Author: Nathan Scott Date: Tue May 20 17:42:49 2014 +1000 Tweak settings in pmquery application for neater output Two changes here - make the default window size larger for the common case of GUI tools generating a usage message; and similarly, make the default font used fixed-width else we end up with garbled, difficult-to-read output. Also, when multi-line, scrolled output is produced, scroll back up to the start of the text, don't start with with an offset at the end - the user will always want to read from the start of the message. commit 2d810bdd597bce18d8b822f9ff38ee8ca145e3ec Author: Nathan Scott Date: Tue May 20 17:36:49 2014 +1000 Long option support for pmchart commit fc44068f8c50514522a00abb3dce8a0290e7d447 Author: Nathan Scott Date: Tue May 20 17:33:47 2014 +1000 Fix daemon signal handlers to not make use of unsafe functions It is unsafe to make certain library calls from signal handlers, and in several daemons we do this for several different reasons. Firstly, some daemons trap sigsegv and sigbus to attempt to get a stacktrace in their log files. This should be deferred to any system daemons that do this, so we now do that - by default. In certain situations those daemons may not be running or platforms may not have such daemons - thus there are situations where we may still want to attempt to generate a stackdump in a last-ditch attempt at diagnostics. Thus, these remain as a debug option via DBG_TRACE_DESPERATE for those occassions. Similarly, most daemons printed diagnostics showing which signal# they received before exiting, which is also unsafe - again, move these to desperate-level diagnostics, off-by-default. A third case was pmie, which rotated log files on receipt of USR1. This is reworked to be deferred to outside of the signal handler. The fourth and final case was pmlogger handling of volume switches via HUP - this has been similarly reworked such that its deferred to outside of the signal handler. This resolves Red Hat BZ #847343. commit 0dcb2e77cff4319636f2b6de30d2668b5c50c4c2 Author: Nathan Scott Date: Tue May 20 17:24:15 2014 +1000 Ensure GUI tests source common.config, else xdpinfo check notruns commit 41ed8d119a30d9a741b8f163c2016239cbda6812 Author: Nathan Scott Date: Tue May 20 17:23:32 2014 +1000 Handle additional modern distros having /var/run on tmpfs At some point along the way, Fedora and RHEL began using a non persistent filesystem to back /var/run, and so we should not be installing files there permanently. Now handled the same way we tackled this on other platforms with similar setups - since the scripts can already create the necessary paths themselves, on the fly, let 'em do so. While auditing this, found a couple of cases of needless setting of a RUNDIR variable - in the pmlogger and pmie rc scripts. Also while auditing this, found a case of open coded pcp:pcp use in a chmod, instead of using the $PCP_USER:$PCP_GROUP variables as all the other scripts do. This resolves Fedora BZ #656659. commit 81785d8808739c0108a4162b36c9945e428a4046 Author: Nathan Scott Date: Tue May 20 13:45:34 2014 +1000 Add X server access notrun checks to each of the pmchart tests commit 280ef4be6a9c8a44f811d99f0723f1d9448f1f0d Author: Nathan Scott Date: Tue May 20 13:43:49 2014 +1000 Mark test qa/233 retired - an IRIX Rebuild script test commit 5ea3169ca30b27d1fcda583ab7c4f5aa43648e82 Author: Frank Ch. Eigler Date: Tue May 20 13:37:00 2014 +1000 systemd pmda: install $(CMDTARGET) Commit 8d0b3db3832 in release 3.9.4 removed pmda .so build all right, but also accidentally removed the installation of the pmdasystemd executable. Put that back. The qa/652 test correctly asserts the existence of the pmda binary; perhaps leftovers a previous build gave a false-positive result. From michele@acksyn.org Wed May 21 03:30:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E9A767F3F for ; Wed, 21 May 2014 03:30:21 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id C600230408E for ; Wed, 21 May 2014 01:30:21 -0700 (PDT) X-ASG-Debug-ID: 1400661017-04cb6c5d0b1ba910001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id igLDodyj7wdqrZsc for ; Wed, 21 May 2014 01:30:17 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 9C04527A5C; Wed, 21 May 2014 04:30:16 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= x-mailer:message-id:date:date:subject:subject:from:from:received :received; s=2010; t=1400661016; bh=mdLRe4asGNqbVKGMIJxQ/hrN3zmH BAtC5lxoNCVVcOk=; b=jcQA5kqluwbnHjtEdlrC9otAJcU5Fwb1L1a461vD7WzF nwroJR3PSVUQuli1XkzSddU+drQfQZ1t2d/Opt1+yndqPOEOsZBxbSNiJbkIwzfo XyLaUWFmg/mlUQLbSPYfx/flGlXNAbSAZ/8odak/KPVUt3sL/Fx6+AvOK3Bd1LQ= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id jW7pAoirA7L0; Wed, 21 May 2014 04:30:16 -0400 (EDT) Received: from localhost (nat-pool-fab-t.redhat.com [209.132.186.28]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id B181825DCD; Wed, 21 May 2014 04:30:15 -0400 (EDT) From: Michele Baldessari To: pcp@oss.sgi.com Cc: Michele Baldessari Subject: [PATCH] Make pmlogextract not crash with unknown arguments Date: Wed, 21 May 2014 09:30:06 +0100 X-ASG-Orig-Subj: [PATCH] Make pmlogextract not crash with unknown arguments Message-Id: <1400661006-22980-1-git-send-email-michele@acksyn.org> X-Mailer: git-send-email 1.9.0 X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400661017 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.5984 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature pmlogextract with unknown arguments segfaults: $ gdb --args pmlogextract --help Segmentation fault (core dumped) (gdb) bt #0 __strncmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:209 #1 0x00007ffff7da818f in pmgetopt_r (argc=argc@entry=2, argv=argv@entry=0x7fffffffdbb8, d=d@entry=0x60d2e0 ) at getopt.c:1101 #2 0x0000000000405389 in parseargs (argc=argc@entry=2, argv=argv@entry=0x7fffffffdbb8) at pmlogextract.c:1222 #3 0x0000000000402a05 in main (argc=2, argv=0x7fffffffdbb8) at pmlogextract.c:1635 at getopt.c:1101 Make sure we signal the end of the options list to pmgetopt via PMAPI_OPTIONS_END so that it won't segfault any longer: ./src/pmlogextract/pmlogextract --help pmlogextract: unrecognized option '--help' Usage: pmlogextract [options] input-archive output-archive ... Signed-off-by: Michele Baldessari --- src/pmlogextract/pmlogextract.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pmlogextract/pmlogextract.c b/src/pmlogextract/pmlogextract.c index f0513180eaa9..7c202925f3e2 100644 --- a/src/pmlogextract/pmlogextract.c +++ b/src/pmlogextract/pmlogextract.c @@ -40,7 +40,8 @@ static pmLongOptions longopts[] = { { "", 1, 'v', "SAMPLES", "switch log volumes after this many samples" }, { "", 0, 'w', 0, "ignore day/month/year" }, PMOPT_TIMEZONE, - PMOPT_HOSTZONE + PMOPT_HOSTZONE, + PMAPI_OPTIONS_END }; static pmOptions opts = { -- 1.9.0 From brolley@redhat.com Wed May 21 09:11:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 7FB337F4E for ; Wed, 21 May 2014 09:11:17 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 17F7CAC00C for ; Wed, 21 May 2014 07:11:16 -0700 (PDT) X-ASG-Debug-ID: 1400681472-04bdf056b71d9910001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 4EzClGYbakhWnvL2 for ; Wed, 21 May 2014 07:11:12 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4LEBBTc003623 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 21 May 2014 10:11:12 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4LEBA3G014650; Wed, 21 May 2014 10:11:11 -0400 Message-ID: <537CB486.8040304@redhat.com> Date: Wed, 21 May 2014 10:13:26 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Mailing List Subject: Re: [pcp] Makepkgs Looping? References: <53763A45.6010403@redhat.com> <2138946642.9336468.1400286174604.JavaMail.zimbra@redhat.com> <625669506.9574346.1400471014883.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Makepkgs Looping? In-Reply-To: <625669506.9574346.1400471014883.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400681472 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/18/2014 11:43 PM, Nathan Scott wrote: > Hi Dave, > > ----- Original Message ----- >> ----- Original Message ----- >>> Hi, >>> >>> With all of the latest from upstream, on my f19 system, Makepkgs seems >>> to be looping on the command below. CPU for gawk is pegged at 100%, so >>> it's not waiting for something. I'm looking into it, but if it rings any >>> bells with anyone, please have a look. >>> >>> The invocation was: Makepkgs -verbose -clean >> I'm not seeing this here - the biggest recent change is the pcp-gui and >> pcp-doc package additions here of course, so they're likely culprits. >> Do you have Qt devel packages installed? (should work either way, but I >> am running with those installed - might be the key difference). >> > I think this is fixed now by commit 97d698ab - let me know how it goes? > Sorry -- forgot to let you know that this is indeed fixed now. Thanks, Dave From brolley@redhat.com Wed May 21 10:32:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 077B17F4E for ; Wed, 21 May 2014 10:32:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id C1EBF304081 for ; Wed, 21 May 2014 08:32:02 -0700 (PDT) X-ASG-Debug-ID: 1400686321-04bdf056b71e3510001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id kHuaTnKbU5uQFSJu for ; Wed, 21 May 2014 08:32:01 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4LFW0fc012036 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 21 May 2014 11:32:00 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4LFVxbY029597 for ; Wed, 21 May 2014 11:32:00 -0400 Message-ID: <537CC777.3040900@redhat.com> Date: Wed, 21 May 2014 11:34:15 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <5373D0D2.5090902@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400686321 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Thanks for the reviews and suggestions. I'm in the process of going though Nathan's comments and Frank's suggestion for an alternate implementation. I will be responding shortly. Dave From nscott@redhat.com Wed May 21 18:03:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 02D1329DF8 for ; Wed, 21 May 2014 18:03:48 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 716E0AC003 for ; Wed, 21 May 2014 16:03:44 -0700 (PDT) X-ASG-Debug-ID: 1400713418-04cb6c5d0a20c660001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 5pirfAkv7eE32nNf for ; Wed, 21 May 2014 16:03:38 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4LN3bW6023359 for ; Wed, 21 May 2014 19:03:38 -0400 Date: Wed, 21 May 2014 19:03:37 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1992721716.12238242.1400713417892.JavaMail.zimbra@redhat.com> In-Reply-To: <9889064.12238182.1400713396743.JavaMail.zimbra@redhat.com> Subject: pcp updates: misc long options, signals MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: misc long options, signals Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: misc long options, signals Thread-Index: q1EMU4IXC0y1bDgXYRAzvlZlKWvRwQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1400713418 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev src/libpcp/src/p_result.c | 8 - src/pmcd/src/pmcd.c | 2 src/pmchart/main.cpp | 24 +++ src/pmie/src/dstruct.c | 5 src/pmie/src/dstruct.h | 8 - src/pmie/src/pmie.c | 257 +++++++++++++++------------------------- src/pmlogextract/pmlogextract.c | 1 src/pmlogger/src/logger.h | 1 src/pmlogger/src/pmlogger.c | 9 - src/pmlogger/src/ports.c | 21 ++- src/pmproxy/pmproxy.c | 4 11 files changed, 153 insertions(+), 187 deletions(-) commit 9ea158acec58d5b8edccb8c30239a547956042c8 Author: Michele Baldessari Date: Thu May 22 08:52:14 2014 +1000 pmlogextract: add missing long option array termination pmlogextract with unknown arguments segfaults: $ gdb --args pmlogextract --help Segmentation fault (core dumped) (gdb) bt #0 __strncmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:209 #1 0x00007ffff7da818f in pmgetopt_r (argc=argc@entry=2, argv=argv@entry=0x7fffffffdbb8, d=d@entry=0x60d2e0 ) at getopt.c:1101 #2 0x0000000000405389 in parseargs (argc=argc@entry=2, argv=argv@entry=0x7fffffffdbb8) at pmlogextract.c:1222 #3 0x0000000000402a05 in main (argc=2, argv=0x7fffffffdbb8) at pmlogextract.c:1635 at getopt.c:1101 Make sure we signal the end of the options list to pmgetopt via PMAPI_OPTIONS_END so that it won't segfault any longer: ./src/pmlogextract/pmlogextract --help pmlogextract: unrecognized option '--help' Usage: pmlogextract [options] input-archive output-archive ... Signed-off-by: Michele Baldessari commit 744075943739f77f5d3a5a1c179daf778191fa48 Author: Nathan Scott Date: Wed May 21 17:22:38 2014 +1000 Long option support for pmie commit 3988c4bc4e7376add818e631587ec13ced7f8490 Author: Nathan Scott Date: Wed May 21 17:17:03 2014 +1000 Remove remaining non-signal-safe exit/abort calls in daemons Frank spotted a few remaining calls to exit(3) on inappropriate paths, audit once more and convert those to _exit and call any safe cleanup routines by-hand (cannot rely on atexit in a signal handler). Similarly, some abort calls still remained in places they should not. Introduce a pattern of exiting with the signal number received for the "unexpected" class of signal handlers to aid diagnosis. Daemons return code is always zero or one today, hopefully this will prove to be a generally useful diagnostic addition - it is signal-safe too ;) commit e6447de134fa8d3dcf03dd845095c5bf75748dc9 Author: Nathan Scott Date: Wed May 21 16:34:47 2014 +1000 Not all standard options are used by pmchart (esp -g) commit dcfe2116114a8051aca0d380d10adea1f536ede7 Author: Nathan Scott Date: Wed May 21 11:31:32 2014 +1000 Fix compilation warning from libpcp diagnostics (use-before-init) From nscott@redhat.com Wed May 21 18:05:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A972729DF8 for ; Wed, 21 May 2014 18:05:34 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id A2A4B304075 for ; Wed, 21 May 2014 16:05:31 -0700 (PDT) X-ASG-Debug-ID: 1400713529-04cb6c5d0d20c870001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 2t4qVMJaEMjh5ofs for ; Wed, 21 May 2014 16:05:30 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4LN5Rot022667; Wed, 21 May 2014 19:05:27 -0400 Date: Wed, 21 May 2014 19:05:27 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <543504046.12238479.1400713527825.JavaMail.zimbra@redhat.com> In-Reply-To: <1400661006-22980-1-git-send-email-michele@acksyn.org> References: <1400661006-22980-1-git-send-email-michele@acksyn.org> Subject: Re: [pcp] [PATCH] Make pmlogextract not crash with unknown arguments MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] [PATCH] Make pmlogextract not crash with unknown arguments Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Make pmlogextract not crash with unknown arguments Thread-Index: V5kYsE7doaFbujmHoE903DovJdXoGg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400713530 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > [...] > Make sure we signal the end of the options list to pmgetopt via > PMAPI_OPTIONS_END > so that it won't segfault any longer: Thanks! I've audited the rest of the tree, looks like pmlogextract was the only missing case. cheers. -- Nathan From nscott@redhat.com Thu May 22 04:22:00 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 5A63B7F3F for ; Thu, 22 May 2014 04:22:00 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5D70C8F8035 for ; Thu, 22 May 2014 02:21:57 -0700 (PDT) X-ASG-Debug-ID: 1400750512-04cbb006dc221eb0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id w7MHqNrX2ehznzzB for ; Thu, 22 May 2014 02:21:52 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4M9LqHO011148; Thu, 22 May 2014 05:21:52 -0400 Date: Thu, 22 May 2014 05:21:51 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> In-Reply-To: <537CC777.3040900@redhat.com> References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Thread-Index: t6Jm5SZIsrBeUqEsGCHeAEo90Mfy/A== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1400750512 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6022 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > Thanks for the reviews and suggestions. I'm in the process of going > though Nathan's comments and Frank's suggestion for an alternate > implementation. I will be responding shortly. No worries. I followed through on my suggestion to add more than just one service to the set, so we can start to iron out issues there and to be sure the interfaces (& command) "fit" more than one OK ... could you review latest dev, which adds pmproxy & pmwebd advertising, and tweaks pmfind a bit? - that would be awesome, thanks. Also, I noticed avahi-browse seems to report resolved names. Not sure if its manually doing reverse lookups, or if the Avahi API has the name hidden away somewhere - be good to check what its doing before manually resolving though, might be easier than we thought. cheers. -- Nathan From nscott@redhat.com Thu May 22 04:25:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B1C757F3F for ; Thu, 22 May 2014 04:25:36 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9CE4A30407B for ; Thu, 22 May 2014 02:25:36 -0700 (PDT) X-ASG-Debug-ID: 1400750730-04cb6c5d0a234490001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id vpLBOi9rCzClTJ5r for ; Thu, 22 May 2014 02:25:31 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4M9PUmA011381 for ; Thu, 22 May 2014 05:25:30 -0400 Date: Thu, 22 May 2014 05:25:30 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: PCP Mailing List Message-ID: <62857263.12527805.1400750730728.JavaMail.zimbra@redhat.com> In-Reply-To: <2106755141.12526795.1400750647311.JavaMail.zimbra@redhat.com> Subject: pcp updates: pmproxy/pmwebd service discovery MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: pmproxy/pmwebd service discovery Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: pmproxy/pmwebd service discovery Thread-Index: Js55/3PEOwQZ0nh2pxUhFppvcVXCmw== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1400750730 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6021 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/713 | 1 qa/724 | 2 - qa/724.out | 2 + qa/727 | 23 ++++++++++++++ qa/727.out | 3 + qa/775 | 3 + qa/775.out | 4 ++ qa/840 | 25 +++------------ qa/840.out | 1 qa/946 | 3 + qa/946.out | 4 ++ qa/950 | 23 ++++++++++++++ qa/950.out | 3 + qa/GNUmakefile | 2 - qa/common.avahi | 43 ++++++++++++++++++++++++++ qa/group | 2 + src/include/pcp/impl.h | 4 +- src/include/pcp/pmapi.h | 4 +- src/libpcp/src/avahi.c | 40 ++++++++++++++++--------- src/libpcp/src/discovery.c | 34 ++++++--------------- src/libpcp/src/internal.h | 1 src/pmfind/pmfind.c | 64 +++++++++++++++++++++++++--------------- src/pmlogextract/pmlogextract.c | 2 - src/pmproxy/pmproxy.c | 1 src/pmwebapi/main.c | 7 ++++ 25 files changed, 215 insertions(+), 86 deletions(-) commit be5f8a8555d2eb5a5a14e7cd3a806dd45a79efdb Author: Nathan Scott Date: Thu May 22 19:18:38 2014 +1000 Additional services for automatic discovery Add pmproxy and pmwebd to the set of services which are advertised via Avahi. Update pmfind to enable searching on these, by default search for all known services. Tests 727 and 950 are added to exercise that each daemon is indeed advertising via avahi; common code from these two tests and 840 (pmcd) is now in common.avahi. commit 7ace9d04641e51a6f17b3361c427456030d32973 Author: Nathan Scott Date: Thu May 22 11:07:57 2014 +1000 Add missing initialisation of signal var in qa/713 Resulted in a leftover pmproxy process still running at test end. commit 85adc194d1436d1e0c30855a392736bd3de2f0f0 Author: Nathan Scott Date: Thu May 22 11:06:23 2014 +1000 Build fix, missing comma in logextract, cut+paste fail From nscott@redhat.com Thu May 22 04:53:25 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AB8C87F3F for ; Thu, 22 May 2014 04:53:25 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 85B0E304075 for ; Thu, 22 May 2014 02:53:25 -0700 (PDT) X-ASG-Debug-ID: 1400752403-04cb6c5d0d2367a0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id Uz0TLOmXLeoGfwgJ for ; Thu, 22 May 2014 02:53:24 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4M9rNiQ021002; Thu, 22 May 2014 05:53:23 -0400 Date: Thu, 22 May 2014 05:53:23 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , Dave Brolley Cc: PCP Mailing List Message-ID: <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> In-Reply-To: References: <5373AAA7.70004@redhat.com> Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Thread-Index: 3KaBUKosylgseAcyjd185Tgds8mTNw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1400752404 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6022 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > Hi - > > While hacking on pmwebd extensions, it occurred to me that we could > offer archive discovery capabilities within the pmDiscoverServices() > function. This could be handy for interactive users to populate file > browsers or live web popups, and possibly for tools too. I like the general idea of finding archives (which the unified context mode will need), but not via pmDiscoverServices - new API(s) would make more sense IMO. pmfind could still make a good front-end (using new APIs in addition to the existing), but archives are not services - and the needs differ, as becomes clear from the examples (esp. the filtering ones, below). > [...] ",basedir=xxx" I have some security reservations about allowing remote users to poke at a far away system via pmwebd to determine whether arbitrary files exist or not (based on return codes or response time) - it would have to be limited to a set of well-known locations (eg /var/log/{pmlogger,pmmgr}). And its not clear raw archive paths should be exposed at all via the web API, a unified context with multiple archive support seems cleaner. > - filter for archive-label matching given hostname > ",loghost=BAR.BAZ" > - filter for archive-label covering all given TIME(s) > ",logtime=TIME,logtime=TIME" > - filter for archive metadata including metric > ",metric=PMNS" This could be an arbitrarily complex filtering language - sql-like even, so forcing everything through the already-poorly-specified "mechanism" parameter in an API for service discovery is not going to fly - we should start afresh, and make the archive API clean (& suitable internally for unified context mode too, of course). > - limit directory recursion > ",maxdepth=NN" > - limit time > ",timeout=NN" > With a fixed set of locations, these last examples become unnecessary (although the streaming concept Dave talked about, via callbacks, I'm a big fan of - for archives too). Hmm, above suggests we should've thought of an "options" parameter to pmDiscoverServices(3). If we end up needing to revisit the existing services API/ABI, Dave, we should definitely split "options" out from "mechanism" in any new variant. Ah - we haven't added any of that in yet (the flags-smushed-in-with-mechanism bit) have we? ... hmmm. We should probably split that apart right away. cheers. -- Nathan From fche@redhat.com Thu May 22 08:53:18 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id A35887F3F for ; Thu, 22 May 2014 08:53:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 151F4AC002 for ; Thu, 22 May 2014 06:53:14 -0700 (PDT) X-ASG-Debug-ID: 1400766790-04cbb006d923d860001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id bzl9rfdLeZhzf1HR for ; Thu, 22 May 2014 06:53:11 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MDr9I8019706 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 09:53:10 -0400 Received: from fche.csb (vpn-60-186.rdu2.redhat.com [10.10.60.186]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MDr8O7008675; Thu, 22 May 2014 09:53:09 -0400 Received: by fche.csb (Postfix, from userid 2569) id 56FBD585EF; Thu, 22 May 2014 09:53:08 -0400 (EDT) Date: Thu, 22 May 2014 09:53:08 -0400 From: "Frank Ch. Eigler" To: Nathan Scott Cc: Dave Brolley , PCP Mailing List Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Message-ID: <20140522135308.GB3460@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.4.2.2i X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400766790 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - > [...] I like the general idea of finding archives (which the > unified context mode will need), but not via pmDiscoverServices - > new API(s) would make more sense IMO. Yes, perhaps. > > [...] ",basedir=xxx" > > I have some security reservations about allowing remote users to poke at > a far away system via pmwebd to determine whether arbitrary files exist > or not (based on return codes or response time) - it would have to be > limited to a set of well-known locations (eg /var/log/{pmlogger,pmmgr}). > This concern is reasonable but misplaced. The proposed archive-discovery facility is a pure libpcp client-side one, just like the pmcd-discovery one. Neither would be intended or safe for full direct exposure to remote users. (In the pmwebd case, I imagined pmwebd using it internally, to search the sysadmin-configured archive-ACL directory (pmwebd -A dir).) See also http://oss.sgi.com/bugzilla/show_bug.cgi?id=941 and http://oss.sgi.com/bugzilla/show_bug.cgi?id=1052. > And its not clear raw archive paths should be exposed at all via the > web API, a unified context with multiple archive support seems > cleaner. There'll be always a need to pinpoint individual archive files, not only unified forms (once that feature arrives) -- or are you thinking about removing pmNewContext (PM_CONTEXT_ARCHIVE, "filename.meta")? > > - filter for archive-label matching given hostname > > ",loghost=BAR.BAZ" > > - filter for archive-label covering all given TIME(s) > > ",logtime=TIME,logtime=TIME" > > - filter for archive metadata including metric > > ",metric=PMNS" > > This could be an arbitrarily complex filtering language [...] Yes, it's tempting to overdesign. I think expressing these in the discovery api would only add value if it could evaluate such predicates more efficiently than the client could. In the case of a simple archive enumeration, and those predicates, that's probably not the case, so these were just flights of fancy. Forget I ever wrote them. I already have. What were we talking about again? > > - limit directory recursion > > ",maxdepth=NN" > > - limit time > > ",timeout=NN" > With a fixed set of locations, these last examples become unnecessary [...] These on the other hand do impact the search mechanics, and would make some sense as discovery parameters. It's not hard to imagine having a centralized archive of thousands of hosts, maybe on slower fileservers, where we don't want the search to be too long. > Hmm, above suggests we should've thought of an "options" parameter > to pmDiscoverServices(3). [...] One benefit of keeping options textual and similar is for their direct transposition to a user interface like a config file or a pmfind command line argument. Sure, one could create some enum tuple widget like ... __pmOptions (?), but then it needs to just hop between ascii or multiple flags elsewhere anyway, with much more complexity. (Or did you simply imagine adding another 'char* options' parameter to the discover api?) - FChE From brolley@redhat.com Thu May 22 09:16:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id E1C437F3F for ; Thu, 22 May 2014 09:16:09 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id BEA688F8035 for ; Thu, 22 May 2014 07:16:04 -0700 (PDT) X-ASG-Debug-ID: 1400768160-04cb6c5d0b2526e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id CH0CJbxFaUkudnXn for ; Thu, 22 May 2014 07:16:00 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MEFxg0031052 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 10:16:00 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MEFvB0013818; Thu, 22 May 2014 10:15:58 -0400 Message-ID: <537E0726.7050604@redhat.com> Date: Thu, 22 May 2014 10:18:14 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400768160 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 05:21 AM, Nathan Scott wrote: > Hi Dave, > > ----- Original Message ----- >> Thanks for the reviews and suggestions. I'm in the process of going >> though Nathan's comments and Frank's suggestion for an alternate >> implementation. I will be responding shortly. > No worries. I followed through on my suggestion to add more than just > one service to the set, so we can start to iron out issues there and to > be sure the interfaces (& command) "fit" more than one OK ... could you > review latest dev, which adds pmproxy & pmwebd advertising, and tweaks > pmfind a bit? - that would be awesome, thanks. Great! I'll have a look. > > Also, I noticed avahi-browse seems to report resolved names. Not sure > if its manually doing reverse lookups, or if the Avahi API has the name > hidden away somewhere - be good to check what its doing before manually > resolving though, might be easier than we thought. Yeah, the host name is provided as part of the avahi_browser API. We used that in systemtap. For active probing, we will have no choice but to do the lookup ourselves. Dave From brolley@redhat.com Thu May 22 10:45:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 59BEC7F3F for ; Thu, 22 May 2014 10:45:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 44D14304081 for ; Thu, 22 May 2014 08:45:16 -0700 (PDT) X-ASG-Debug-ID: 1400773514-04cbb006d92479e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id yXsejl42ILUnCVsp for ; Thu, 22 May 2014 08:45:15 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MFjEiC012937 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 11:45:14 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MFjD0P026864; Thu, 22 May 2014 11:45:13 -0400 Message-ID: <537E1C12.4050207@redhat.com> Date: Thu, 22 May 2014 11:47:30 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400773515 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 05:21 AM, Nathan Scott wrote: > Hi Dave, > > ----- Original Message ----- >> Thanks for the reviews and suggestions. I'm in the process of going >> though Nathan's comments and Frank's suggestion for an alternate >> implementation. I will be responding shortly. > No worries. I followed through on my suggestion to add more than just > one service to the set, so we can start to iron out issues there and to > be sure the interfaces (& command) "fit" more than one OK ... could you > review latest dev, which adds pmproxy & pmwebd advertising, and tweaks > pmfind a bit? - that would be awesome, thanks. > I had a look. The diversification into additional services was handled as I had planned when originally designing the API. The only problem I saw, and it was an existing problem, is that __pmAvahiDiscoverServices does not handle a NULL pointer passed in for 'service'. This is the indication to discover all supported services and it is used by pmfind when "all" is specified. I need to fix the same issue in __pmProbeDiscoverServices() Dave From brolley@redhat.com Thu May 22 10:53:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 52CFF7F3F for ; Thu, 22 May 2014 10:53:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3034B30407F for ; Thu, 22 May 2014 08:53:09 -0700 (PDT) X-ASG-Debug-ID: 1400773984-04bdf056b8261b60001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id v2XMfH4CsWT2yzEY for ; Thu, 22 May 2014 08:53:05 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MFr4Nm017421 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 11:53:04 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MFr3PY008288; Thu, 22 May 2014 11:53:03 -0400 Message-ID: <537E1DE8.6080402@redhat.com> Date: Thu, 22 May 2014 11:55:20 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: "Frank Ch. Eigler" , Nathan Scott CC: PCP Mailing List Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> <20140522135308.GB3460@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements In-Reply-To: <20140522135308.GB3460@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400773985 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 09:53 AM, Frank Ch. Eigler wrote: >> Hmm, above suggests we should've thought of an "options" parameter >> to pmDiscoverServices(3). [...] > One benefit of keeping options textual and similar is for their direct > transposition to a user interface like a config file or a pmfind > command line argument. Sure, one could create some enum tuple widget > like ... __pmOptions (?), but then it needs to just hop between ascii > or multiple flags elsewhere anyway, with much more complexity. (Or > did you simply imagine adding another 'char* options' parameter to > the discover api?) > I also like the idea of textual options. It makes it easy to extend the API without changing the ABI. Some options would be global, like the proposed timeout while others would be mechanism-specific, like the currently proposed maxThreads for active probing (although this could conceivably also be a global option). I like the idea of the mechanism-specific options remaining with the mechanism string. I would not object to an additional global options string. I had thought about it but thought that it was too late to add it. Dave From scox@redhat.com Thu May 22 14:01:24 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EB21F7F3F for ; Thu, 22 May 2014 14:01:23 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 96102AC006 for ; Thu, 22 May 2014 12:01:23 -0700 (PDT) X-ASG-Debug-ID: 1400785277-04cb6c5d0b26a7f0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 5Yp53bPWz0aBOP2F for ; Thu, 22 May 2014 12:01:18 -0700 (PDT) X-Barracuda-Envelope-From: scox@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJ1HSc013666 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 15:01:17 -0400 Received: from [10.13.129.207] (dhcp129-207.rdu.redhat.com [10.13.129.207]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJ1Gjg023646 for ; Thu, 22 May 2014 15:01:17 -0400 Message-ID: <537E497C.8020106@redhat.com> Date: Thu, 22 May 2014 15:01:16 -0400 From: Stan Cox User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Subject: PCP Updates: pmcollectl record mode fails with sub-second intervals Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: pmcollectl record mode fails with sub-second intervals Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400785277 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Improve pmcollectl and pmatop log writing. * pmatop.py (record): Parse the log duration arg. Sleep with pmtimevalSleep. (main): Get the host name. Parse the interval arg and use the result. * pmcollectl.py (record): Parse the log duration arg. Sleep with pmtimevalSleep. main): Allow -iN. Parse the interval arg and use the result. * 709: Check it. * 722: Check it. ssh://sourceware.org/git/pcpfans.git scox/dev commit 551df147760 From brolley@redhat.com Thu May 22 14:29:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A30CC7F3F for ; Thu, 22 May 2014 14:29:53 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5B53030408E for ; Thu, 22 May 2014 12:29:53 -0700 (PDT) X-ASG-Debug-ID: 1400786988-04bdf056b6272f90001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id gtn4Tx2dkydemxwh for ; Thu, 22 May 2014 12:29:48 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJTmW2024601 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 15:29:48 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJTlLq018605; Thu, 22 May 2014 15:29:47 -0400 Message-ID: <537E50B4.1090905@redhat.com> Date: Thu, 22 May 2014 15:32:04 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Mailing List Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400786988 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/19/2014 04:16 AM, Nathan Scott wrote: > diff --git a/configure.in b/configure.in > index 7248293..0a32cfd 100644 > --- a/configure.in > +++ b/configure.in > @@ -1559,6 +1559,12 @@ __thread int x;], [], > AC_TRY_COMPILE([#include ], [pthread_barrier_t mybarrier;], > AC_DEFINE(HAVE_PTHREAD_BARRIER_T) AC_MSG_RESULT(yes), > AC_MSG_RESULT(no)) > + > + dnl Check if sem_t is defined in semephore.h > + AC_MSG_CHECKING([for sem_t in semephore.h]) > > typo: semephore.h -> semaphore.h Fixed. > diff --git a/src/include/pcp/impl.h b/src/include/pcp/impl.h > index edffa31..727390a 100644 > --- a/src/include/pcp/impl.h > +++ b/src/include/pcp/impl.h > @@ -628,9 +628,11 @@ extern int __pmSockAddrIsLoopBack(const __pmSockAddr *); > extern int __pmSockAddrIsInet(const __pmSockAddr *); > extern int __pmSockAddrIsIPv6(const __pmSockAddr *); > extern int __pmSockAddrIsUnix(const __pmSockAddr *); > -extern char * __pmSockAddrToString(__pmSockAddr *); > +extern char * __pmSockAddrToString(const __pmSockAddr *); > extern __pmSockAddr *__pmStringToSockAddr(const char *); > extern __pmSockAddr *__pmLoopBackAddress(int); > +extern __pmSockAddr *__pmSockAddrFirstSubnetAddr(const __pmSockAddr *, int); > +extern __pmSockAddr *__pmSockAddrNextSubnetAddr(__pmSockAddr *, int); > > > Hmm, do these really need to be exposed outside libpcp? (on review, it > would seem not - and theres no exports file change, so they definitely > should not be exposed up here in impl.h, right?) This function was already here and exposed. I just changed the parameter to be 'const'. That's why there is no exports file change (it's already there). It may not be used externally yet, but I think it's only a matter of time, since it is, IMO, a generally useful function. If we remove it now, I believe that we will only end up re-adding it in the future. > > > diff --git a/src/libpcp/src/discovery.c b/src/libpcp/src/discovery.c > index d620311..094c91f 100644 > --- a/src/libpcp/src/discovery.c > +++ b/src/libpcp/src/discovery.c > @@ -108,7 +118,7 @@ __pmAddDiscoveredService(__pmServiceInfo *info, int numUrls, char ***urls) > __pmNotifyErr(LOG_ERR, > "__pmAddDiscoveredService: Unsupported service: '%s'", > info->spec); > - return EOPNOTSUPP; > + return -EOPNOTSUPP; > } > > /* > > > Whoops. QA test time? (we must have no/few error path tests, I guess? > would this be difficult to add? I'm guessing not - via "pmfind -s"?) There is qa coverage for this in test 724. What happened here is that the API (internal) changed so that the new number of urls is returned on success (was 0), so we could no longer return a positive error code on failure (probably should not been anyway). However this code gets removed by your change to enable additional services, since the protocol now gets passed in. > diff --git a/src/libpcp/src/probe.c b/src/libpcp/src/probe.c > new file mode 100644 > index 0000000..8147b2e > --- /dev/null > +++ b/src/libpcp/src/probe.c > +[...] > +static void > +attemptComplete (void) > > (space oddity - several in this file) > > + > +/* Attempt a connection on the given address and port. Return 0, if successful. */ > +static void * > +attemptConnection (void *arg) > +{ > + int s; > + int flags; > + int sts; > + struct timeval canwait = { 1, 000000 }; > > Hard-coding - use TIMEOUT_DEFAULT? &| __pmDefaultRequestTimeout or some > other (new) env var customisable timeout, perhaps? Yeah. I was experimenting with different timeouts for probing large subnets. I've changed it to use __pmConnectTimeout() for now. > + /* Attempt to connect. If flags comaes back as less than zero, then the > > type: comaes -> comes Fixed. > + > +/* Dispatch a connection attempt, on its own thread, if supported. */ > +static void > +dispatchConnection ( > > (space oddity) Fixed. > + const char *service, > + const __pmSockAddr *address, > + int port, > + int *numUrls, > + char ***urls > +) > +{ > +#if IS_MULTI_THREAD > + pthread_t thread; > +#endif > + connectionContext *context; > + int rc; > > "sts" please, you're hacking PCP this week. ;) Done. > + int attempt; > + > + /* We need a separate connection context for each potential thread. */ > + context = malloc(sizeof(*context)); > + if (context == NULL) { > + __pmNoMem("__pmProbeDiscoverServices: unable to allocate connection context", > + sizeof(*context), PM_FATAL_ERR); > + } > + context->service = service; > + context->port = port; > + context->numUrls = numUrls; > + context->urls = urls; > + context->address = __pmSockAddrDup(address); > > This seems to be a second Dup, and we leak address, if I'm not mistaken? > (when allocated from __pmSockAddrFirstSubnetAddr -> probeForServices?) No leak here. Each thread needs its own copy of the address it is probing and frees it when the thread ends. The subnet iteration API reuses the same __pmSockAddr and frees it when the iteration reaches the end. > + if (context->address == NULL) { > + char *addrString = __pmSockAddrToString(address); > + __pmNotifyErr(LOG_ERR, "__pmProbeDiscoverServices: unable to copy socket address %s", > + addrString); > + free(addrString); > + attemptComplete(); > + return; > + } > + > + /* > + * Attempt the connection. Since we're not passing in attributes for the (possible) > + * new thread, the only error that can occur is EAGAIN. Sleep for 0.1 seconds > + * before trying again. We must have a limit in case something goes wrong. Make it > + * 5 seconds (50 * 100,000 usecs). > + * > + * Respect the requested maximum number of threads. > + */ > + SEM_WAIT(&threadsAvailable); > + for (attempt = 0; attempt < 50; ++attempt) { > > Hard-coded limits. > > + /* Attempt the connection on a new thread. */ > + rc = THREAD_START(&thread, &attr, attemptConnection, context); > + if (rc != EAGAIN) > + break; > + > + /* Wait before trying again. */ > + usleep(100000); > + } > > Hmm, more hard-coding. usleep is not portable - go for pmtimevalSleep perhaps? > > The above hard-coding could be broken via env var / setting for discovery > timeout, and then split that time up into chunks (e.g. divide by 100000usec, > if thats a good time) Understood regarding usleep. The code now uses __pmtimevalSleep(). Regarding reconfigurability, This is really just a control against infinite looping, in case something goes horribly wrong. I'm not so sure that this is something the user needs/wants to be able to configure. This particular timeout could be made obsolete by the proposed overall timeout or by Frank's proposed alternative algorithm. > +} > + > +static int > +probeForServices ( > > (space oddity) Fixed. > + /* The service is either a service name (e.g. pmcd) or a port number. */ > + if (strcmp(service, "pmcd") == 0) { > + if ((env = getenv("PMCD_PORT")) != NULL) { > + port = strtol(env, &end, 0); > + if (*end != '\0' || port < 0) { > + __pmNotifyErr(LOG_WARNING, > + "__pmProbeDiscoverServices: ignored bad PMCD_PORT = '%s'\n", > + env); > + port = SERVER_PORT; > + } > + } > + else > + port = SERVER_PORT; > + } > + else { > + port = strtol(service, &end, 0); > + if (*end != '\0') { > + __pmNotifyErr(LOG_ERR, "__pmProbeDiscoverServices: service '%s; is not valid", > + service); > + return 0; > > It worries me a little we only have one service here, tends to hide > bugs that will mean only one will ever work - I'd love to see pmproxy > (PROXY_PORT) and pmwebd (PMWEBD_PORT) added into this mix ASAP to > make sure it always supports >1 service as well as >1 mechanism. > > Going back a bit, the probe does a socket connect/close doesn't it? > So, all we'd need here is some other strcmp/port mappings for those > other two - is that right? > > (similarly, the Avahi extension would be relatively straight forward, > no? I think we should just go right ahead and do it, unless there's > something big & onerous I'm missing there?) Thanks for doing this part. > + } > + __pmSockAddrSetPort(netAddress, port); > + > + /* > + * We have a network address, a subnet and a port. Iterate over the addresses in the subnet, > > (long comment line - generally 80 cols is used as defacto std) Fixed. > + addressesProcessed = __pmSockAddrFirstSubnetAddr(netAddress, maskBits); > + > + /* Dispatch the connection attempts. */ > + prevNumUrls = numUrls; > + for (address = __pmSockAddrFirstSubnetAddr(netAddress, maskBits); > + address != NULL; > + address = __pmSockAddrNextSubnetAddr(address, maskBits)) { > + dispatchConnection (service, address, port, &numUrls, urls); > > (extra whitespace, and "address" use here looks questionable wrt leaking > as mentioned above) Whitespace fixed. No leak here. See the existing comment above this loop. > +/* > + * Parse the mechanism string for options. The first option will be of the form > + * > + * probe=/ > + * > + * Subesquent options, if any, will be separated by commas. Currently supported: > > typo: subesquent -> subsequent. > > + * maxThreads= -- specifies a hard limit on the number of active threads. > + */ > + static int > + parseOptions(const char *mechanism) > > Hmm - these options are specific to the individual discovery mechanisms > aren't they? Shouldn't we be calling out to discovery-specific parsing > mechanisms here? This entire source file is specific to the probing mechanism. > + /* Parse any remaining options. */ > + option = end; > + if (*option == '\0') > + return 0; /* no options */ > + > + sts = 0; > > + /* Examine the option. */ > + if (strncmp(option, "maxThreads=", 11) == 0) { > > just "threads"? It really is a maximum. Fewer threads may end up being used if the subnet is small enough or if the threads finish quickly enough. > + option += 11; > > (change that if so -> either way, sizeof("maxThreads") will be better than > simply 11) Fixed. > + option = end; > + /* > + * Make sure the value is positive. Large values are ok. They have the > + * effect of "no fixed limit". However, there is an actual limit to be > + * observed. sem_init(3) says that it is SEM_VALUE_MAX. However, on f19, > + * where SEM_VALUE_MAX is 0xffffffff, values higher than 0x7fffffff cause > > *cough* - sounds like a glibc bug? Yeah -- I'll put together a test case and submit a report. > + * the semaphore to block on the first sem_wait. > + */ > + if (longVal > 0x7fffffff) { > > How about using something like "max(SEM_VALUE_MAX, 0x7fffffff)" here, > to be sure to be sure? > > Either way, those numbers are insanely high - maybe just set a crazy but > smaller thread count limit anyway - like 1024? (ie who would use *that* > many threads, anyway!?) Yeah, the actual limit will end up being FD_SETSIZE (which is 1024 on my system), since that's the max number of open fds we can manage. I've fixed this code to set the limit to max(SEM_VALUE_MAX, FD_SET_SIZE). > > +int > +__pmProbeDiscoverServices(const char *service, const char *mechanism, int numUrls, char ***urls) > +{ > + int sts; > + > + /* Interpret the mechanism string. */ > + sts = parseOptions(mechanism); > + if (sts != 0) > + return 0; > + > + /* Everything checks out. Now do the actual probing. */ > + numUrls = probeForServices (service, netAddress, maskBits, numUrls, urls); > > (whitespace oddity) Fixed. > @@ -2252,3 +2252,80 @@ __pmSockAddrToString(__pmSockAddr *addr) > } > return buf; > } > + > +__pmSockAddr * > +__pmSockAddrFirstSubnetAddr(const __pmSockAddr *netAddr, int maskBits) > +{ > + __pmSockAddr *addr; > + > + /* Make a copy of the net address for iteration purposes. */ > + addr = __pmSockAddrDup(netAddr); > > (this allocation ultimately seems to lead to one or two potential > memory leaks down the track ... but perhaps I'm missing something > subtle there) No memory leak here -- as discussed in earlier comments. Thanks for the review! Let me know what you think about the items I've left open. Dave From brolley@redhat.com Thu May 22 14:31:50 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 181477F3F for ; Thu, 22 May 2014 14:31:50 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 9E236AC004 for ; Thu, 22 May 2014 12:31:49 -0700 (PDT) X-ASG-Debug-ID: 1400787108-04cb6c5d0b26ca20001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id iDn8I79olYiGh1oJ for ; Thu, 22 May 2014 12:31:48 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJVmS2025896 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 15:31:48 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MJVlWF015944; Thu, 22 May 2014 15:31:47 -0400 Message-ID: <537E512C.7080200@redhat.com> Date: Thu, 22 May 2014 15:34:04 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> <537E1C12.4050207@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <537E1C12.4050207@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400787108 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 11:47 AM, Dave Brolley wrote: > > The only problem I saw, and it was an existing problem, is that > __pmAvahiDiscoverServices does not handle a NULL pointer passed in for > 'service'. This is the indication to discover all supported services > and it is used by pmfind when "all" is specified. Disregard that. I see now where pmfind loops over all the known services when "all" is specified. Dave From brolley@redhat.com Thu May 22 15:05:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EE7127F3F for ; Thu, 22 May 2014 15:05:32 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C1AC6304090 for ; Thu, 22 May 2014 13:05:29 -0700 (PDT) X-ASG-Debug-ID: 1400789125-04cbb006d925aa50001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Xqm2INa0KHAKSElm for ; Thu, 22 May 2014 13:05:25 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MK5Pto028863 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 16:05:25 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MK5ORC016518; Thu, 22 May 2014 16:05:24 -0400 Message-ID: <537E590D.8070204@redhat.com> Date: Thu, 22 May 2014 16:07:41 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Mailing List Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400789125 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 commit 4bb7a3da430545d03ee34fbc2ec764e19301e89f Author: Dave Brolley Date: Thu May 22 14:48:34 2014 -0400 Active service probing rework based on comments from nathans. From brolley@redhat.com Thu May 22 15:09:16 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9A1017F3F for ; Thu, 22 May 2014 15:09:16 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 6C44430407B for ; Thu, 22 May 2014 13:09:16 -0700 (PDT) X-ASG-Debug-ID: 1400789355-04bdf056b8275d10001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id vJksG9FX0PCoj2Xu for ; Thu, 22 May 2014 13:09:15 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4MK9FRZ008129 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 16:09:15 -0400 Received: from [10.15.16.200] ([10.15.16.200]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MK9EhC017922; Thu, 22 May 2014 16:09:14 -0400 Message-ID: <537E59F3.7070308@redhat.com> Date: Thu, 22 May 2014 16:11:31 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind In-Reply-To: <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400789355 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 05:21 AM, Nathan Scott wrote: > No worries. I followed through on my suggestion to add more than just > one service to the set, so we can start to iron out issues there and to > be sure the interfaces (& command) "fit" more than one OK ... could you > review latest dev, which adds pmproxy & pmwebd advertising, and tweaks > pmfind a bit? - that would be awesome, thanks. > I pulled in this work and added the support for the active probing mechanism. As part of this, I'm seeing some duplicate code in various parts of PCP for extracting port numbers from environment variables. I'm going to take a shot at consolidating this into a new libpcp API. Dave ------------------------------------------------ commit db06f51eb56683cf6720f9f00c518b494bb1aba5 Author: Dave Brolley Date: Thu May 22 15:39:36 2014 -0400 Service discovery via active probing for pmproxy and pmwebd. From fche@redhat.com Thu May 22 16:04:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 872E17F3F for ; Thu, 22 May 2014 16:04:19 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6A79C8F8037 for ; Thu, 22 May 2014 14:04:16 -0700 (PDT) X-ASG-Debug-ID: 1400792654-04bdf056b7279ce0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Ipgy6KgKleUFnXSp for ; Thu, 22 May 2014 14:04:14 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4ML4ExY032527 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 May 2014 17:04:14 -0400 Received: from fche.csb (vpn-60-186.rdu2.redhat.com [10.10.60.186]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4ML4Den003561; Thu, 22 May 2014 17:04:14 -0400 Received: by fche.csb (Postfix, from userid 2569) id 19BC6585EF; Thu, 22 May 2014 17:04:13 -0400 (EDT) To: Dave Brolley Cc: Nathan Scott , pcp@oss.sgi.com Subject: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> <537E59F3.7070308@redhat.com> X-ASG-Orig-Subj: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind From: fche@redhat.com (Frank Ch. Eigler) Date: Thu, 22 May 2014 17:04:12 -0400 In-Reply-To: <537E59F3.7070308@redhat.com> (Dave Brolley's message of "Thu, 22 May 2014 16:11:31 -0400") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1400792654 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 brolley wrote: > [...] As part of this, I'm seeing some duplicate code in various > parts of PCP for extracting port numbers from environment > variables. I'm going to take a shot at consolidating this into a new > libpcp API. For what it's worth, I am a little uneasy at the sheer number of general utility functions that have collected in the PCP API (in the forms of exported symbols in the .so's) that are unrelated to the core pcp mission of documented or even exampled PMAPI. Perhaps we should take a closer look at the idea in [1], wherein we'd gradually build up libpcputil .a (not .so) type utility libraries for reuse by in-tree tools, but specifically not documented/available for use by out-of-tree PMAPI programs. We could throw the impl.h etc. kitchen sink in there, and not worry about ABI or API stability. [1] http://oss.sgi.com/pipermail/pcp/2014-April/004751.html - FChE From nscott@redhat.com Thu May 22 18:14:21 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 6AF9C7F3F for ; Thu, 22 May 2014 18:14:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id BF21FAC002 for ; Thu, 22 May 2014 16:14:17 -0700 (PDT) X-ASG-Debug-ID: 1400800452-04cbb006db265fd0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id WMFETokLFNV4Qyfx for ; Thu, 22 May 2014 16:14:13 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MNECM6012711; Thu, 22 May 2014 19:14:12 -0400 Date: Thu, 22 May 2014 19:14:12 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <20584096.13033641.1400800452223.JavaMail.zimbra@redhat.com> In-Reply-To: <537E1DE8.6080402@redhat.com> References: <5373AAA7.70004@redhat.com> <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> <20140522135308.GB3460@redhat.com> <537E1DE8.6080402@redhat.com> Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Thread-Index: wPTt88T1tnYFshk5+LLUevqV+jeceg== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400800452 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6039 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, ----- Original Message ----- > On 05/22/2014 09:53 AM, Frank Ch. Eigler wrote: > >> Hmm, above suggests we should've thought of an "options" parameter > >> to pmDiscoverServices(3). [...] > > One benefit of keeping options textual and similar is for their direct Oh yes, "options" would definitely remain a char* comma-separated string, as nature intended. :) Point was, its a distinct thing to the mechanism, so the API is not clean by combining the two. A bit like mount(2) options and the fs type ... both of which are char* in the Linux syscall API. > It makes it easy to extend the > API without changing the ABI. Some options would be global, like the > proposed timeout while others would be mechanism-specific, like the > currently proposed maxThreads for active probing (although this could > conceivably also be a global option). > I like the idea of the mechanism-specific options remaining with the > mechanism string. I would not object to an additional global options > string. I had thought about it but thought that it was too late to add it. There is a way to have our cake and eat it too - I have come across option parsing APIs that behave as follows: - comma-separated options string comes in across the interface; - high level code does an initial pass over it, picking out global options & adding those to global structures (__pmServerPresence and/or __pmServiceInfo in our case, I guess); - any global options found are overwritten with commas (heh!) - the (still valid, but now without globals) options string is then passed through to lower level code, which deals with the remaining options. How about we do something like that? We need to think about adding that callback API (and the existing "get everything" could possibly be a special case of that new API, for back-compat - not sure), but now does seem a good time to make any additions (before introducing an overloaded "mechanism" parameter). cheers. -- Nathan From nscott@redhat.com Thu May 22 18:44:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9245B7F3F for ; Thu, 22 May 2014 18:44:31 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0832AAC002 for ; Thu, 22 May 2014 16:44:30 -0700 (PDT) X-ASG-Debug-ID: 1400802268-04bdf056b7282b00001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id yRior9jASA0GxB4C for ; Thu, 22 May 2014 16:44:28 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MNiSnp017970; Thu, 22 May 2014 19:44:28 -0400 Date: Thu, 22 May 2014 19:44:28 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" , Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1336484608.13037424.1400802268454.JavaMail.zimbra@redhat.com> In-Reply-To: References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> <537E59F3.7070308@redhat.com> Subject: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind MIME-Version: 1.0 X-ASG-Orig-Subj: Re: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Thread-Index: 8v2AAdhJu6mHmCJOmT+OhjJY6TYL5Q== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400802268 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6040 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > brolley wrote: > > > [...] As part of this, I'm seeing some duplicate code in various > > parts of PCP for extracting port numbers from environment > > variables. I'm going to take a shot at consolidating this into a new > > libpcp API. Go right ahead Dave - I have something similarly small pending, FWIW, and its the status quo for sharing code until a workable alternative exists (if ever). > For what it's worth, I am a little uneasy at the sheer number of > general utility functions that have collected in the PCP API (in the > forms of exported symbols in the .so's) that are unrelated to the core > pcp mission of documented or even exampled PMAPI. That mission statement is ... where? This is all very subjective of course. When I suggested things like discovery live off in a separate library noone was interested - *shrug*. I expect the status quo will prevail because... > Perhaps we should take a closer look at the idea in [1], wherein we'd > gradually build up libpcputil .a (not .so) type utility libraries for > reuse by in-tree tools, but specifically not documented/available for > use by out-of-tree PMAPI programs. We could throw the impl.h > etc. kitchen sink in there, and not worry about ABI or API stability. I think this lands in the "good idea in theory, unworkable in practice" category. But, try it out & see how it goes - I'll assert up-front that its impossible to remove *all* double-underscore symbols from the .so - what will end up happening is the new .a will become a .so ... and then there's just no point. Heh, well, we'd have two problems then. :) If/when the time comes, the more practical approach will be to give up on our current, noble (and so far successful AFAIK) attempts to keep the double-underscore-prefixed routines API/ABI compatible. I think most real-world users of libpcp would accept that the double-underscore means "internal, do not rely on this" already. Should cases arise (I can't think of any) where an internal interface is needed by non-server, non- log-reader/writer (pmlog*, etc), non-internal-only tools, then it should be promoted to pmapi.h or pmda.h and a pm-prefixed variant added. cheers. -- Nathan From nscott@redhat.com Thu May 22 18:52:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 841CC7F3F for ; Thu, 22 May 2014 18:52:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 0ABC7AC004 for ; Thu, 22 May 2014 16:52:42 -0700 (PDT) X-ASG-Debug-ID: 1400802761-04bdf056b52831b0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 2vRarLB3b5O3c6Kr for ; Thu, 22 May 2014 16:52:41 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4MNqfw1030932; Thu, 22 May 2014 19:52:41 -0400 Date: Thu, 22 May 2014 19:52:41 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <694093615.13037889.1400802761569.JavaMail.zimbra@redhat.com> In-Reply-To: <537E50B4.1090905@redhat.com> References: <5373D0D2.5090902@redhat.com> <1264071097.9700484.1400487393003.JavaMail.zimbra@redhat.com> <537E50B4.1090905@redhat.com> Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Thread-Index: y3WmpbHP0ZAF/NWUVcMrsDU1NUyL9A== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1400802761 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6040 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > On 05/19/2014 04:16 AM, Nathan Scott wrote: > > [...] > > (this allocation ultimately seems to lead to one or two potential > > memory leaks down the track ... but perhaps I'm missing something > > subtle there) > No memory leak here -- as discussed in earlier comments. > > Thanks for the review! Let me know what you think about the items I've > left open. > Those explanations all seem fine to me - thanks for following up & lemme know once all tested and ready to merge - I guess the sooner the better, to dodge any more git-merge conflicts. :) If you can think of a way to test that subtle memory alloc/freeing is correct (perhaps a _run_valgrind test on pmfind?) that would be super-mega-awesome. cheers. -- Nathan From nscott@redhat.com Thu May 22 19:05:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 0EA077F3F for ; Thu, 22 May 2014 19:05:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id E8A688F8035 for ; Thu, 22 May 2014 17:05:50 -0700 (PDT) X-ASG-Debug-ID: 1400803549-04cbb006dc268af0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id GXdMWoKdSYQbGlJ2 for ; Thu, 22 May 2014 17:05:49 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4N05nYe022727; Thu, 22 May 2014 20:05:49 -0400 Date: Thu, 22 May 2014 20:05:49 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <488837379.13040452.1400803549004.JavaMail.zimbra@redhat.com> In-Reply-To: <537E1C12.4050207@redhat.com> References: <5373D0D2.5090902@redhat.com> <537CC777.3040900@redhat.com> <399575684.12526040.1400750511921.JavaMail.zimbra@redhat.com> <537E1C12.4050207@redhat.com> Subject: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: PCP Updates: Active Probing for __pmDiscoverServices() / pmfind Thread-Index: 4zuEEN/dOReT0fuC7qalbSeJnLg3xA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400803549 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6040 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > On 05/22/2014 05:21 AM, Nathan Scott wrote: > > ----- Original Message ----- > >> Thanks for the reviews and suggestions. I'm in the process of going > >> though Nathan's comments and Frank's suggestion for an alternate > >> implementation. I will be responding shortly. > > No worries. I followed through on my suggestion to add more than just > > one service to the set, so we can start to iron out issues there and to > > be sure the interfaces (& command) "fit" more than one OK ... could you > > review latest dev, which adds pmproxy & pmwebd advertising, and tweaks > > pmfind a bit? - that would be awesome, thanks. > > > I had a look. The diversification into additional services was handled > as I had planned when originally designing the API. > > The only problem I saw, and it was an existing problem, is that > __pmAvahiDiscoverServices does not handle a NULL pointer passed in for > 'service'. This is the indication to discover all supported services and > it is used by pmfind when "all" is specified. *nod* ... the only other half-issue-kinda-maybe thing was that there is no way to enumerate the services - have to be hard-coded into pmfind for when it runs in "everything" mode. I think that's OK though, really - we don't often add services so in practice it should be just fine. cheers. -- Nathan From nscott@redhat.com Fri May 23 00:19:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id EE0B67F3F for ; Fri, 23 May 2014 00:19:07 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C7E5B304043 for ; Thu, 22 May 2014 22:19:04 -0700 (PDT) X-ASG-Debug-ID: 1400822337-04cbb006dc2778a0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id HDsAkpkDsjr3WB8g for ; Thu, 22 May 2014 22:18:57 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4N5Iui5017093 for ; Fri, 23 May 2014 01:18:57 -0400 Date: Fri, 23 May 2014 01:18:56 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1536363482.13088867.1400822336748.JavaMail.zimbra@redhat.com> In-Reply-To: <1206097450.13083278.1400820443326.JavaMail.zimbra@redhat.com> Subject: pcp updates: scox merge, pmcd.services, qa MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: scox merge, pmcd.services, qa Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: scox merge, pmcd.services, qa Thread-Index: MaJSJDplQVpm4VHObc6Se8iRDZG4aw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1400822337 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/366.out | 1 qa/507 | 3 qa/709 | 12 +-- qa/722 | 7 +- qa/722.out | 1 qa/common.filter | 1 src/include/pcp/impl.h | 2 src/libpcp/src/auxserver.c | 38 ++++++++++++ src/libpcp/src/exports | 6 + src/libpcp/src/util.c | 54 +++++++++++++++++ src/libpcp/src/win32.c | 6 + src/pcp/pcp.sh | 7 +- src/pmatop/pmatop.py | 45 ++++++-------- src/pmcd/src/pmcd.c | 87 ---------------------------- src/pmchart/main.cpp | 2 src/pmcollectl/pmcollectl.py | 42 ++++++------- src/pmdas/pmcd/help | 4 + src/pmdas/pmcd/root_pmcd | 3 src/pmdas/pmcd/src/pmcd.c | 123 +++++++++++++++++++++++++++++++++++----- src/pmfind/pmfind.c | 10 +-- src/pmie/src/pmie.c | 29 --------- src/pmlogconf/tools/pcp-summary | 1 src/pmmgr/pmmgr.cxx | 4 + src/pmproxy/pmproxy.c | 2 src/pmwebapi/main.c | 1 25 files changed, 302 insertions(+), 189 deletions(-) commit fcce8fd46a2a5b092b06b3f8fe2079d65fbcc4c5 Author: Nathan Scott Date: Fri May 23 14:43:06 2014 +1000 Further sub-second recording changes for pmcollectl Found a couple more spots where we were chopping off the fractional portion of the sampling interval, and problematic recording resulted. With this and Stans earlier changes, qa/709 now runs in ~15sec elapsed, a handy four-fold speedbump. commit 2ba521e01a954041c2fb7a642360bdad1a9b5edd Merge: 28c5ef0 6dd921d Author: Nathan Scott Date: Fri May 23 14:40:05 2014 +1000 Merge branch 'scox/dev' of ../pcpfans into scox-merge Conflicts: qa/709 (Resolved by taking mostly latest qa/709 from dev) commit 6dd921d659da5222239601bdfe66b94866bd708b Merge: cf157c7 c53efaa Author: Nathan Scott Date: Fri May 23 13:55:25 2014 +1000 Merge branch 'scox/dev' of git://sourceware.org/git/pcpfans into scox/dev commit 28c5ef01edb73b710af7b78129acd5efe448451b Author: Nathan Scott Date: Fri May 23 13:54:23 2014 +1000 Fix pmchart test 1006, failing to produce accurate timestamps commit bd5633383c2ee57011719fc5f1b334ae286f45bc Author: Nathan Scott Date: Fri May 23 13:51:47 2014 +1000 Take care with pmfind exit code, with multiple services Was causing a failure on test 724. There's other lurking issues in this test (and the other avahi tests), in that they fail if services are active elsewhere on the network - not sure how best we can tackle that, except to say not to test on such a network for now. :( commit 1362154654f6a7f1fceeed5132b5607800d2c904 Author: Nathan Scott Date: Fri May 23 13:49:09 2014 +1000 Add a pmcd.services metric reflecting PCP daemon usage After finding a need to quickly know which PCP services are active on a host, on a number of occassions now, I've finally cracked up and added a pmcd.services metric that reflect this state. A line that looks alot like: services: pmcd pmmgr pmproxy pmwebd is added to pcp(1) output as well, using this metric when it is available (else, output is as it was before). This is implemented in a portable way by ensuring daemons all manage pidfiles the same way pmcd does ($PCP_RUN_DIR), so a helper function is added to libpcp for each server to make use of. While there, pulled the open-coded stackdump functions from pmcd and pmie into a shared spot also since this is more generally useful (they were inconsistent too, with the pmie variant being relatively incomplete). A small improvement is added to the common pidfile code in that an atexit handler is now registered to cleanup, which pmcd was lacking (ala the log footer writer). In addition the pidfiles are made readonly after initial creation. commit c53efaa185ba48a2eb3462d12e4dd54f7f60440e Author: Stan Cox Date: Thu May 22 13:45:47 2014 -0400 Setup command line during initialization. * pmatop.py (addstr): Optionally clear to end of line. (_AtopPrint.init): Setup command_line. commit 551df147760d08fc8950d6939aafa92fb9c3922b Author: Stan Cox Date: Wed May 21 22:39:57 2014 -0400 Improve pmcollectl and pmatop log writing. * pmatop.py (record): Parse the log duration arg. Sleep with pmtimevalSleep. (main): Get the host name. Parse the interval arg and use the result. * pmcollectl.py (record): Parse the log duration arg. Sleep with pmtimevalSleep. (main): Allow -iN. Parse the interval arg and use the result. * 709: Check it. * 722: Check it. From ahedges@uaex.edu Fri May 23 04:34:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=EMAIL_URI_PHISH,SUBJ_ALL_CAPS, TVD_PH_SEC autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id AB5AD7F3F for ; Fri, 23 May 2014 04:34:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 9AC078F8033 for ; Fri, 23 May 2014 02:34:12 -0700 (PDT) X-ASG-Debug-ID: 1400837646-04cbb006dc287940001-S8gJnT Received: from zmail.goiania.go.gov.br (correio.agmg.goiania.go.gov.br [200.199.226.132]) by cuda.sgi.com with ESMTP id NF5HacHxnuDWAYxw for ; Fri, 23 May 2014 02:34:06 -0700 (PDT) X-Barracuda-Envelope-From: ahedges@uaex.edu X-Barracuda-Apparent-Source-IP: 200.199.226.132 Received: from localhost (localhost.localdomain [127.0.0.1]) by zmail.goiania.go.gov.br (Postfix) with ESMTP id E50E55F6B5B; Fri, 23 May 2014 06:33:55 -0300 (BRT) X-Virus-Scanned: amavisd-new at zmail.goiania.go.gov.br Received: from zmail.goiania.go.gov.br ([127.0.0.1]) by localhost (zmail.goiania.go.gov.br [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WWLx2vX9508w; Fri, 23 May 2014 06:33:55 -0300 (BRT) Received: from [10.11.240.113] (unknown [41.203.67.149]) by zmail.goiania.go.gov.br (Postfix) with ESMTPSA id 705165F6B49; Fri, 23 May 2014 06:33:40 -0300 (BRT) Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: SECURE YOUR E-MAIL To: Recipients X-ASG-Orig-Subj: SECURE YOUR E-MAIL From: SECURE WEBMAIL Date: Fri, 23 May 2014 10:33:24 +0100 Reply-To: no-reply@zmail.goiania.go.gov.br Message-Id: <20140523093341.705165F6B49@zmail.goiania.go.gov.br> X-Barracuda-Connect: correio.agmg.goiania.go.gov.br[200.199.226.132] X-Barracuda-Start-Time: 1400837646 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.13 X-Barracuda-Spam-Status: No, SCORE=2.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH, SUBJ_ALL_CAPS, SUBJ_ALL_CAPS_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6051 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 SUBJ_ALL_CAPS Subject is all capitals 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address 1.62 SUBJ_ALL_CAPS_2 SUBJ_ALL_CAPS_2 Attention Mail User An attempt was made to connect your account from a new computer. For your account security, click the link below and fill accurate details to protect your email account. Copy or Click here: http://webmail-secure.yolasite.com Note:Failure to do this will lead to de-activation or restriction of your webmail Account. Webmaster(c)2014=20 From ahedges@uaex.edu Fri May 23 23:43:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=EMAIL_URI_PHISH,SUBJ_ALL_CAPS, TVD_PH_SEC autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 757C97F3F for ; Fri, 23 May 2014 23:43:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5C9D08F8039 for ; Fri, 23 May 2014 21:43:01 -0700 (PDT) X-ASG-Debug-ID: 1400906575-04bdf0599f3fd00001-S8gJnT Received: from zmail.goiania.go.gov.br (correio.amob.goiania.go.gov.br [200.199.226.132]) by cuda.sgi.com with ESMTP id Z1eJUDA4fr71IRjB for ; Fri, 23 May 2014 21:42:55 -0700 (PDT) X-Barracuda-Envelope-From: ahedges@uaex.edu X-Barracuda-Apparent-Source-IP: 200.199.226.132 Received: from localhost (localhost.localdomain [127.0.0.1]) by zmail.goiania.go.gov.br (Postfix) with ESMTP id C9C1E5F6B5A; Sat, 24 May 2014 01:42:54 -0300 (BRT) X-Virus-Scanned: amavisd-new at zmail.goiania.go.gov.br Received: from zmail.goiania.go.gov.br ([127.0.0.1]) by localhost (zmail.goiania.go.gov.br [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id USguUwi2uNSk; Sat, 24 May 2014 01:42:54 -0300 (BRT) Received: from [10.18.0.18] (unknown [108.61.90.171]) by zmail.goiania.go.gov.br (Postfix) with ESMTPSA id 5D4C95F6B15; Sat, 24 May 2014 01:42:44 -0300 (BRT) Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Description: Mail message body Subject: SECURE YOUR E-MAIL To: Recipients X-ASG-Orig-Subj: SECURE YOUR E-MAIL From: SYSTEM UPDATE Date: Sat, 24 May 2014 05:42:29 +0100 Reply-To: no-reply@zmail.goiania.go.gov.br Message-Id: <20140524044245.5D4C95F6B15@zmail.goiania.go.gov.br> X-Barracuda-Connect: correio.amob.goiania.go.gov.br[200.199.226.132] X-Barracuda-Start-Time: 1400906575 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 2.13 X-Barracuda-Spam-Status: No, SCORE=2.13 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH, SUBJ_ALL_CAPS, SUBJ_ALL_CAPS_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 SUBJ_ALL_CAPS Subject is all capitals 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address 1.62 SUBJ_ALL_CAPS_2 SUBJ_ALL_CAPS_2 Attention Mail User An attempt was made to connect your account from a new computer. For your account security, click the link below and fill accurate details to protect your email account. Copy or Click here: http://webmailsecure.site-pages.com/ Note:Failure to do this will lead to de-activation or restriction of your webmail Account. Webmaster(c)2014=20 From michele@acksyn.org Sat May 24 05:08:33 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 9F50D7F3F for ; Sat, 24 May 2014 05:08:33 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 85C77304032 for ; Sat, 24 May 2014 03:08:30 -0700 (PDT) X-ASG-Debug-ID: 1400926105-04cbb02a0f4c600001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id GAG4xSduIh50KExV for ; Sat, 24 May 2014 03:08:26 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 2A8E427AE7 for ; Sat, 24 May 2014 06:08:24 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:content-disposition:content-type:content-type :mime-version:message-id:subject:subject:from:from:date:date :received:received; s=2010; t=1400926101; bh=ldwMusGimdgXVF8xsVf gf1alTP7JWqJrvpzxg+cbqq8=; b=deajeCzYhVtTAJfkgR6b2s7oPQtBxzi0tUe ofMv/HDQ+Rd1JiRxIMu0k6NZtT6UVLeSAQO1LulXUA5WAjlwu/9wFi1QxCJQ6V4t yG+JD0z8gHWOihRVKBeZcNUpC4O/xG6l2JcQXDIoQGrN6ljPrxDzjZOw7MI1q92h q6wdKUEM= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id AeMZhlnWYROJ for ; Sat, 24 May 2014 06:08:21 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 16F4127A72 for ; Sat, 24 May 2014 06:08:21 -0400 (EDT) Date: Sat, 24 May 2014 11:08:20 +0100 From: Michele Baldessari To: pcp@oss.sgi.com Subject: Small python segfault fix when printing empty units structs Message-ID: <20140524100820.GC24332@marquez.int.rhx> X-ASG-Orig-Subj: Small python segfault fix when printing empty units structs MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400926105 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6076 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi all, on https://github.com/mbaldessari/pcp/tree/fix-python-pmunitsstr you can find a small fix for a segfault I stumbled upon while using the python bindings. Do let me know if this way of sending patches is ok ;) regards, Michele commit a01a5c131d047b98b5aa0bd9917614ce69f7d764 Author: Michele Baldessari Date: Sat May 24 11:00:55 2014 +0100 Python - Fix segfault when printing empy units The following example: """ import pcp.pmapi from pcp.pmapi import c_api fname = '20140506.0' context = pcp.pmapi.pmContext(c_api.PM_CONTEXT_ARCHIVE, fname) pmids = context.pmLookupName(['proc.nprocs']) descs = context.pmLookupDescs(pmids[0]) print 'Segfault: %s' % descs[0].contents.units """ will segfault: pmUnitsStr_r (pu=0x0, buf=buf@entry=0x3d2e66f9c0 "", buflen=buflen@entry=60) at units.c:177 177 if (pu->dimSpace) { Make sure we wrap pmUnitsStr in order to catch these and correctly return an empty string -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From michele@acksyn.org Sat May 24 16:55:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B945129DF8 for ; Sat, 24 May 2014 16:55:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 558FAAC002 for ; Sat, 24 May 2014 14:55:56 -0700 (PDT) X-ASG-Debug-ID: 1400968550-04bdf059a07c520001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id O6CfuVSUcVg10DBG for ; Sat, 24 May 2014 14:55:51 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 2A34727AF5 for ; Sat, 24 May 2014 17:55:50 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:content-disposition:content-type:content-type :mime-version:message-id:subject:subject:from:from:date:date :received:received; s=2010; t=1400968549; bh=LrznwM8SBuKgEd/Z4oR +jHLv8cZKATXBbbgnDHyZ1Fw=; b=Tp5BLYW3yrYzyEfLfbSlk16KuB8X1xJg5g7 zxzhwDZ5QY9y97jH8JU1z6Gw4nunUEbfP/D5ewdPNBQ+WY/fuC/QEYty8L8Tu9Pu v91IaPsdO2efqDulAQ/cEdQgt9kmuVzGspyRRth1iSx6620bakvHvJNq3MNWpx0Q MNssCSBQ= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id ymjDIiToK3ov for ; Sat, 24 May 2014 17:55:49 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 5E522251BD for ; Sat, 24 May 2014 17:55:49 -0400 (EDT) Date: Sat, 24 May 2014 22:55:49 +0100 From: Michele Baldessari To: pcp@oss.sgi.com Subject: pcpstats Message-ID: <20140524215548.GA13540@marquez.int.rhx> X-ASG-Orig-Subj: pcpstats MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1400968550 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6088 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi all, sometime ago I co-wrote a tool that created a pdf report of all the metrics contained in a sar file [1]. I've now done the same for PCP archives: https://github.com/mbaldessari/pcpstats It's still in its very early stages and the code is littered with FIXMEs, but it does create half-decent pdf [2] files already, so I thought I'd share this. Feedback or suggestions are welcome. cheers, Michele [1] https://github.com/mbaldessari/sarstats [2] http://acksyn.org/software/pcpstats/output.pdf -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From fche@redhat.com Sun May 25 09:12:45 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 2857C7F3F for ; Sun, 25 May 2014 09:12:45 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 15217304043 for ; Sun, 25 May 2014 07:12:41 -0700 (PDT) X-ASG-Debug-ID: 1401027157-04cb6c22b6a9180001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id BHXVAjFqB2ATHSDV for ; Sun, 25 May 2014 07:12:37 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4PECajB002583 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 25 May 2014 10:12:36 -0400 Received: from fche.csb (vpn-60-186.rdu2.redhat.com [10.10.60.186]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4PECZuJ026108 for ; Sun, 25 May 2014 10:12:36 -0400 Received: by fche.csb (Postfix, from userid 2569) id 650C058109; Sun, 25 May 2014 10:12:35 -0400 (EDT) To: pcp@oss.sgi.com Subject: pmprintf & pmconfirm References: <1206097450.13083278.1400820443326.JavaMail.zimbra@redhat.com> <1536363482.13088867.1400822336748.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: pmprintf & pmconfirm From: fche@redhat.com (Frank Ch. Eigler) Date: Sun, 25 May 2014 10:12:35 -0400 In-Reply-To: <1536363482.13088867.1400822336748.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Fri, 23 May 2014 01:18:56 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401027157 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Hi - On IRC, nathans & scox were talking about recent pmatop/pmcollectl changes now causing pmconfirm dialogs popping up, hanging qa. I took a glance at related code and got wondering. What led to the creation of pmprintf() / pmflush(), and the desire to turn some error conditions detected in the library into a suspension of the program (and interruption of the user) for some interactive dialogs? (I'm not aware of any other general purpose library that does this.) pcpintro makes the PCP_STDERR=DISPLAY setting sound like it's for startup errors only (related to how pure X/desktop apps may lack a usable stderr), but pmprintf/pmflush() are used in non-startup contexts too. By the way, why is __pmNotifyErr disconnected from pmprintf()? - FChE From nscott@redhat.com Sun May 25 20:31:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 9A7987F3F for ; Sun, 25 May 2014 20:31:54 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 2080BAC001 for ; Sun, 25 May 2014 18:31:51 -0700 (PDT) X-ASG-Debug-ID: 1401067906-04cbb02a12c7ea0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id Uk63vw7vGfrxdUM4 for ; Sun, 25 May 2014 18:31:46 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4Q0v9WC013258; Sun, 25 May 2014 20:57:10 -0400 Date: Sun, 25 May 2014 20:57:09 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <657152753.14513193.1401065829755.JavaMail.zimbra@redhat.com> In-Reply-To: <20140524100820.GC24332@marquez.int.rhx> References: <20140524100820.GC24332@marquez.int.rhx> Subject: Re: [pcp] Small python segfault fix when printing empty units structs MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Small python segfault fix when printing empty units structs Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Small python segfault fix when printing empty units structs Thread-Index: K1TyIa8Js1+CJU4rl5A9dFfSNklcgA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401067906 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6121 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, ----- Original Message ----- > Hi all, > > on https://github.com/mbaldessari/pcp/tree/fix-python-pmunitsstr > you can find a small fix for a segfault I stumbled upon while using > the python bindings. > > Do let me know if this way of sending patches is ok ;) > Yep, no problem at all. I converted those test cases into automated tests using the following recipe (see qa/README for chapter & verse): $ cd qa [look in qa/src for an archive with proc.nprocs -> bug_v2.0] $ ./new [insert cases here - qa/729 auto-created, add to "python" group] $ sh 729 QA output created by 729 Exercising units string 729: line 42: 18190 Segmentation fault python $tmp.units Exercising interval parsing 729: line 44: 18195 Segmentation fault python $tmp.parse [install Michele's fixes here] $ sh 729 QA output created by 729 Exercising units string Completed safely Exercising interval parsing Completed safely $ sh 729 > 729.out $ git add 729 729.out group [commit] $ ./check -g python [0%] 553 1s ... [5%] 702 6s ... [11%] 707 6s ... [17%] 708 0s ... [23%] 709 15s ... [29%] 710 0s ... [35%] 717 27s ... [41%] 718 11s ... [47%] 722 13s ... [52%] 729 [58%] 737 0s ... [64%] 739 1s ... [70%] 741 0s ... [76%] 742 1s ... [82%] 743 0s ... [88%] 979 1s ... [94%] 991 1s ... Passed all 17 tests ./qa/new just generates a template test case for you, its safe to run anytime - doesn't commit anything or otherwise muck with your tree, other than automatically inserting the new test number into the qa/group file ready for committing later. cheers. -- Nathan From nscott@redhat.com Mon May 26 01:21:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0CEB37F3F for ; Mon, 26 May 2014 01:21:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 78A07AC003 for ; Sun, 25 May 2014 23:21:35 -0700 (PDT) X-ASG-Debug-ID: 1401085289-04cbb02a0fd3e10001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id r02EixCxBjr0IKaj for ; Sun, 25 May 2014 23:21:30 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4Q6LRNx021563; Mon, 26 May 2014 02:21:27 -0400 Date: Mon, 26 May 2014 02:21:27 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> In-Reply-To: <20140524215548.GA13540@marquez.int.rhx> References: <20140524215548.GA13540@marquez.int.rhx> Subject: Re: [pcp] pcpstats MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcpstats Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcpstats Thread-Index: xNtk9llub6fJJE3X61uf+jSrjnu9Cw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401085290 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6126 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, ----- Original Message ----- > Hi all, > > sometime ago I co-wrote a tool that created a pdf report of > all the metrics contained in a sar file [1]. I've now done > the same for PCP archives: > https://github.com/mbaldessari/pcpstats Neat idea! > It's still in its very early stages and the code is littered > with FIXMEs, but it does create half-decent pdf [2] files already, > so I thought I'd share this. > > Feedback or suggestions are welcome. Sure - some initial thoughts: - There's a comment somewhere about generating a table for string metrics like filesys.mountdir - sounds a good plan, you might also be able to cluster together within the table metrics that share an indom (pmDesc.indom) - I think the SKIP_GRAPHS array might more generically be described as "all metrics with pmDesc.type == PM_TYPE_STRING or pmDesc.sem == PM_SEM_DISCRETE"? (then, no need to hard-code a list of names that will get out-of-date) - Values of counter semantics metrics (PM_SEM_COUNTER) are commonly reported after rate conversion (requires successive samples, and the value plotted is the value-delta divided by the time-delta), so that MB/sec, or utilizations, are reported instead of raw values. - Consider using pmOptions class for command line processing - it'll automate some stuff for you (and add common, missing options - $TZ handling, interval, #samples, -A/-O/-S/-T - parsing them the same way all the other PCP tools do. e.g. the start/end parsing here uses dateutil.parser.parse whereas PCP tools use libpcp magic which allows several alternative types of syntax (absolute times, relative times, and recently free-form times like "yesterday, 10am"). Its also all done below the option-processing API, so you don't have to manually handle it. - The options stuff also ties into context creation, so you can take your pmOptions object and pass it to pmapi.ctx.fromOptions() and you get back a pmContext class all correctly setup and ready to go (it'll open the archive(s) passed in). - There is a plan to add a mode to libpcp on archive context creation where it will open a directory (like code here wishes to) and produce a context which sources data from all archives in that directory. When that work is tackled, it may simplify the mode you have here (planned?) where it scans a directory for pcp archives. - More future work that might help (less distant though :) - there's a current effort underway to make the Convenience Class python module work and take on alot more of the effort that python client tools are still having to do (as you've found here). Things like converting counters to rates, improved caching (pmDesc, indoms/inst names, etc, etc), things like that. ... pmAtomValue -> python type conversions too, the sorts of things you needed to do in PcpArchive.get_values() ... any things you've discovered in your hacking so far as "nice to have" from such a module, please point 'em out (and feel free to help scox & I out with hacking in that module too :) - this is "pcp.pmcc" in the tree at src/python/pcp/pmcc.py). cheers. -- Nathan From fche@redhat.com Mon May 26 13:14:22 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id AA00B7F4E for ; Mon, 26 May 2014 13:14:22 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 8C95A304032 for ; Mon, 26 May 2014 11:14:19 -0700 (PDT) X-ASG-Debug-ID: 1401128055-04cb6c22b5118340001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id B2CuGxAurIPijUXL for ; Mon, 26 May 2014 11:14:15 -0700 (PDT) X-Barracuda-Envelope-From: fche@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4QIECCw014989 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 26 May 2014 14:14:12 -0400 Received: from fche.csb (vpn-60-186.rdu2.redhat.com [10.10.60.186]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4QIEBLo018540; Mon, 26 May 2014 14:14:11 -0400 Received: by fche.csb (Postfix, from userid 2569) id A55FD5817C; Mon, 26 May 2014 14:14:10 -0400 (EDT) To: Michele Baldessari , pcp@oss.sgi.com Subject: Re: pcpstats References: <20140524215548.GA13540@marquez.int.rhx> <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: pcpstats From: fche@redhat.com (Frank Ch. Eigler) Date: Mon, 26 May 2014 14:14:10 -0400 In-Reply-To: <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> (Nathan Scott's message of "Mon, 26 May 2014 02:21:27 -0400 (EDT)") Message-ID: User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401128055 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 nathans wrote: > [...] >> https://github.com/mbaldessari/pcpstats > Neat idea! Yes. Before too long, imagine a web-interactive version of almost exactly that. > [...] - Values of counter semantics metrics (PM_SEM_COUNTER) are > commonly reported after rate conversion (requires successive > samples, and the value plotted is the value-delta divided by the > time-delta), so that MB/sec, or utilizations, are reported instead > of raw values. [...] Given that this comes up for multiple applications in multiple languages, have you considered including this functionality within libpcp proper? - FChE From brolley@redhat.com Mon May 26 15:21:04 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 0D9B07F4E for ; Mon, 26 May 2014 15:21:04 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id B69B9AC002 for ; Mon, 26 May 2014 13:21:03 -0700 (PDT) X-ASG-Debug-ID: 1401135659-04bdf0599f12ab90001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id trl2GGNkCrsnqW8z for ; Mon, 26 May 2014 13:20:59 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4QKKxO4014953 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 26 May 2014 16:20:59 -0400 Received: from [10.10.54.13] (vpn-54-13.rdu2.redhat.com [10.10.54.13]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4QKKwxP008583; Mon, 26 May 2014 16:20:58 -0400 Message-ID: <5383A2B5.2010400@redhat.com> Date: Mon, 26 May 2014 16:23:17 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: PCP Mailing List Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements References: <5373AAA7.70004@redhat.com> <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> <20140522135308.GB3460@redhat.com> <537E1DE8.6080402@redhat.com> <20584096.13033641.1400800452223.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements In-Reply-To: <20584096.13033641.1400800452223.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401135659 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/22/2014 07:14 PM, Nathan Scott wrote: > There is a way to have our cake and eat it too - I have come across > option parsing APIs that behave as follows: > > - comma-separated options string comes in across the interface; > - high level code does an initial pass over it, picking out global > options & adding those to global structures (__pmServerPresence > and/or __pmServiceInfo in our case, I guess); > - any global options found are overwritten with commas (heh!) > - the (still valid, but now without globals) options string is then > passed through to lower level code, which deals with the remaining > options. > > How about we do something like that? I'm still not sure that this applies to our situation. In our case we have an overall API (global options) and multiple "mechanisms" which could each have their own options. Removing the global options from the string is fine, but then each mechanism has to not only identify their own local options, but also tolerate the local options of the other mechanisms. This would presumably be done by ignoring them. We would then have to make a final pass in order to diagnose the remaining erroneous options. Seems a bit cumbersome, does it not? The only advantage I can see to lumping all of the options into one string is the chance that two or more mechanisms might share the same option, but that can be covered by having a common function to handle any common option. Another way to simplify this might be to allow only one mechanisms at a time. The main API (__pmDiscoverServices) currently loops serially over multiple mechanisms, but perhaps this convenience is not necessary. Dave From chandana@desilva.id.au Mon May 26 15:35:34 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3D6E07F4E for ; Mon, 26 May 2014 15:35:34 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1E152304032 for ; Mon, 26 May 2014 13:35:30 -0700 (PDT) X-ASG-Debug-ID: 1401136525-04cbb02a1211f220001-S8gJnT Received: from mho-01-ewr.mailhop.org (mho-03-ewr.mailhop.org [204.13.248.66]) by cuda.sgi.com with ESMTP id aZfKCUXIwtuCJp5y (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 26 May 2014 13:35:26 -0700 (PDT) X-Barracuda-Envelope-From: chandana@desilva.id.au X-Barracuda-Apparent-Source-IP: 204.13.248.66 Received: from ec2-54-252-74-219.ap-southeast-2.compute.amazonaws.com ([54.252.74.219] helo=mail.desilva.id.au) by mho-01-ewr.mailhop.org with esmtpa (Exim 4.72) (envelope-from ) id 1Wp1cD-000DYg-EF; Mon, 26 May 2014 20:35:25 +0000 Received: from [192.168.1.135] (d211-31-205-134.sun802.vic.optusnet.com.au [211.31.205.134]) by mail.desilva.id.au (Postfix) with ESMTPSA id 5018F2475C; Mon, 26 May 2014 20:35:22 +0000 (UTC) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 54.252.74.219 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX19D59yD58V0kzUixw/mDNkt1TVxSsM3ul8= Message-ID: <5383A589.9080006@desilva.id.au> Date: Tue, 27 May 2014 06:35:21 +1000 From: Chandana De Silva Reply-To: chandana@desilva.id.au User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com, Keith Owens Subject: Postfix PMDA Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: Postfix PMDA Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mho-03-ewr.mailhop.org[204.13.248.66] X-Barracuda-Start-Time: 1401136526 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6140 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hello All, The Postfix PMDA uses qshape(1) to gather postfix queue stats, by reading files the various postfix queue directories. The problem is that all of the postfix queues are only readable by the postfix user (or root). Since the postfix pmda (by default) is run under the user pcp, it cannot gather the necessary stats. I suspect that the postfix pmda worked correctly when pcp ran as root. Is there anyway we can make the postfix (or any) pmda run as root ? Chandana From jhanson@sgi.com Mon May 26 16:39:39 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id F03B57F4E for ; Mon, 26 May 2014 16:39:39 -0500 (CDT) Received: from xmail.sgi.com (pv-excas1-dc21.corp.sgi.com [137.38.106.7]) by relay2.corp.sgi.com (Postfix) with ESMTP id 7B3F0304039; Mon, 26 May 2014 14:39:36 -0700 (PDT) Received: from carenath.corp.sgi.com (134.15.95.84) by xmail.sgi.com (137.38.106.6) with Microsoft SMTP Server (TLS) id 14.3.181.6; Mon, 26 May 2014 16:39:35 -0500 Message-ID: <5383B496.8020900@sgi.com> Date: Mon, 26 May 2014 17:39:34 -0400 From: Jeff Hanson User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: , , Keith Owens Subject: Re: [pcp] Postfix PMDA References: <5383A589.9080006@desilva.id.au> In-Reply-To: <5383A589.9080006@desilva.id.au> X-Enigmail-Version: 1.6 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Originating-IP: [134.15.95.84] On 05/26/2014 04:35 PM, Chandana De Silva wrote: > Hello All, > > The Postfix PMDA uses qshape(1) to gather postfix queue stats, by reading files the various postfix queue directories. > > The problem is that all of the postfix queues are only readable by the postfix user (or root). > > Since the postfix pmda (by default) is run under the user pcp, it cannot gather the necessary stats. > > I suspect that the postfix pmda worked correctly when pcp ran as root. > > Is there anyway we can make the postfix (or any) pmda run as root ? > Can you construct an entry in /etc/suoders.d/postfixpmda (or similar) that allows the pcp user to gather the values and have this install as part of the pmda? -- ----------------------------------------------------------------------- Jeff Hanson - jhanson@sgi.com - Field Technical Analyst You can choose a ready guide in some celestial voice. If you choose not to decide, you still have made a choice. You can choose from phantom fears and kindness that can kill; I will choose a path that's clear I will choose freewill. - Lee/Lifeson/Peart From chandana@desilva.id.au Mon May 26 17:21:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id B6FA47F4E for ; Mon, 26 May 2014 17:21:06 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5EB9BAC003 for ; Mon, 26 May 2014 15:21:03 -0700 (PDT) X-ASG-Debug-ID: 1401142860-04bdf059a1132f40001-S8gJnT Received: from mho-02-ewr.mailhop.org (mho-02-ewr.mailhop.org [204.13.248.72]) by cuda.sgi.com with ESMTP id fS9AisdK0TCKtitA (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO); Mon, 26 May 2014 15:21:01 -0700 (PDT) X-Barracuda-Envelope-From: chandana@desilva.id.au X-Barracuda-Apparent-Source-IP: 204.13.248.72 Received: from ec2-54-252-74-219.ap-southeast-2.compute.amazonaws.com ([54.252.74.219] helo=mail.desilva.id.au) by mho-02-ewr.mailhop.org with esmtpa (Exim 4.72) (envelope-from ) id 1Wp3GO-000NfI-GV; Mon, 26 May 2014 22:21:00 +0000 Received: from [192.168.19.22] (mail.messagemedia.com.au [175.45.83.34]) by mail.desilva.id.au (Postfix) with ESMTPSA id 27B53208D1; Mon, 26 May 2014 22:20:57 +0000 (UTC) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 54.252.74.219 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX1/qUO4wOAwdXuTYW/t+CnYU7JPxQHK/5+U= Message-ID: <5383BE48.40108@desilva.id.au> Date: Tue, 27 May 2014 08:20:56 +1000 From: Chandana De Silva Reply-To: chandana@desilva.id.au User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Jeff Hanson , pcp@oss.sgi.com, Keith Owens Subject: Re: [pcp] Postfix PMDA References: <5383A589.9080006@desilva.id.au> <5383B496.8020900@sgi.com> X-ASG-Orig-Subj: Re: [pcp] Postfix PMDA In-Reply-To: <5383B496.8020900@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mho-02-ewr.mailhop.org[204.13.248.72] X-Barracuda-Start-Time: 1401142861 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6142 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Jeff, This is what we have done. Just wondering of there was a better way. Thank for the reply. Regards Chandana On 27/05/14 07:39, Jeff Hanson wrote: > Can you construct an entry in /etc/suoders.d/postfixpmda (or similar) that > allows the pcp user to gather the values and have this install as part of the pmda? From nscott@redhat.com Mon May 26 17:39:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 891F97F4E for ; Mon, 26 May 2014 17:39:19 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 21123AC003 for ; Mon, 26 May 2014 15:39:18 -0700 (PDT) X-ASG-Debug-ID: 1401143953-04cb6c22b712bff0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id GQ5mMmUVU6QXIAb3 for ; Mon, 26 May 2014 15:39:13 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4QMd8fC004146; Mon, 26 May 2014 18:39:08 -0400 Date: Mon, 26 May 2014 18:39:08 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: chandana@desilva.id.au Cc: pcp@oss.sgi.com, Keith Owens Message-ID: <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> In-Reply-To: <5383A589.9080006@desilva.id.au> References: <5383A589.9080006@desilva.id.au> Subject: Re: [pcp] Postfix PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Postfix PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Postfix PMDA Thread-Index: kNXOwK3gNFsZE7n0yWmmhCxLH267rA== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401143953 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6141 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Hi Chandana, ----- Original Message ----- > Hello All, > > The Postfix PMDA uses qshape(1) to gather postfix queue stats, by > reading files the various postfix queue directories. > > The problem is that all of the postfix queues are only readable by the > postfix user (or root). > > Since the postfix pmda (by default) is run under the user pcp, it cannot > gather the necessary stats. > > I suspect that the postfix pmda worked correctly when pcp ran as root. > > Is there anyway we can make the postfix (or any) pmda run as root ? > All daemon PMDAs start out their life as root, and explicitly switch to some less privileged user; sounds like we need the following patch, can you try it and let me know if it works for you? diff --git a/src/pmdas/postfix/pmdapostfix.pl b/src/pmdas/postfix/pmdapostfix.pl index e6720ec..acce254 100644 --- a/src/pmdas/postfix/pmdapostfix.pl +++ b/src/pmdas/postfix/pmdapostfix.pl @@ -211,7 +211,7 @@ $pmda->add_indom($postfix_sent_indom, \@postfix_sent_dom, '', ''); $pmda->add_indom($postfix_received_indom, \@postfix_received_dom, '', ''); $pmda->add_tail($logfile, \&postfix_log_parser, 0); $pmda->set_fetch_callback(\&postfix_fetch_callback); -$pmda->set_user('pcp'); +$pmda->set_user('postfix'); $pmda->run; =pod cheers. -- Nathan From nscott@redhat.com Mon May 26 17:54:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 76D897F4E for ; Mon, 26 May 2014 17:54:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 64F55304039 for ; Mon, 26 May 2014 15:54:14 -0700 (PDT) X-ASG-Debug-ID: 1401144852-04cb6c22b612ce90001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id AYANNsZG0vfh4hQw for ; Mon, 26 May 2014 15:54:12 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4QMsBjc017185; Mon, 26 May 2014 18:54:11 -0400 Date: Mon, 26 May 2014 18:54:11 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: PCP Mailing List Message-ID: <483220040.15171835.1401144851929.JavaMail.zimbra@redhat.com> In-Reply-To: <5383A2B5.2010400@redhat.com> References: <5373AAA7.70004@redhat.com> <833772793.12546717.1400752403543.JavaMail.zimbra@redhat.com> <20140522135308.GB3460@redhat.com> <537E1DE8.6080402@redhat.com> <20584096.13033641.1400800452223.JavaMail.zimbra@redhat.com> <5383A2B5.2010400@redhat.com> Subject: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Archive discovery, was Re: __pmDiscoverServices()/pmfind Enhancements Thread-Index: BsWUtfRzZOvcxRzHZGHFFXEDILdEdA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401144852 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6142 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > On 05/22/2014 07:14 PM, Nathan Scott wrote: > > There is a way to have our cake and eat it too - I have come across > > option parsing APIs that behave as follows: > > > > - comma-separated options string comes in across the interface; > > - high level code does an initial pass over it, picking out global > > options & adding those to global structures (__pmServerPresence > > and/or __pmServiceInfo in our case, I guess); > > - any global options found are overwritten with commas (heh!) > > - the (still valid, but now without globals) options string is then > > passed through to lower level code, which deals with the remaining > > options. > > > > How about we do something like that? > I'm still not sure that this applies to our situation. In our case we > have an overall API (global options) and multiple "mechanisms" which > could each have their own options. Removing the global options from the > string is fine, but then each mechanism has to not only identify their > own local options, but also tolerate the local options of the other > mechanisms. This would presumably be done by ignoring them. We would > then have to make a final pass in order to diagnose the remaining > erroneous options. Seems a bit cumbersome, does it not? Heh, indeed. I was thinking more of the case like "timeout" where we could implement this independently to any of the mechanisms, and which would apply to all mechanisms. But yeah, as soon as we go for a mode of passing all options to all of the mechanisms, it falls down. > The only advantage I can see to lumping all of the options into one > string is the chance that two or more mechanisms might share the same > option, but that can be covered by having a common function to handle > any common option. Yep. That way, however, every mechanism has to know about every global option, so whenever a new one comes along, the mechanism-specific code for each mechanism would need to be updated (incl data structures and so on). *shrug* ... perhaps there wont be many mechanisms though, and this might be a non-issue. > Another way to simplify this might be to allow only one mechanisms at a > time. The main API (__pmDiscoverServices) currently loops serially over > multiple mechanisms, but perhaps this convenience is not necessary. Right. Or, mechanisms could just silently ignore options they don't know anything about - wouldn't need any sneaky-comma-overwriting then, but clarity in error handling would probably be reduced. Anyway, all food for thought - not clear there is one stand-out best/ideal way to go here. cheers. -- Nathan From chandana@desilva.id.au Mon May 26 18:44:52 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 0AC567F4E for ; Mon, 26 May 2014 18:44:52 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id D5F48304039 for ; Mon, 26 May 2014 16:44:51 -0700 (PDT) X-ASG-Debug-ID: 1401147886-04bdf059a1137dc0001-S8gJnT Received: from mho-01-ewr.mailhop.org (mho-03-ewr.mailhop.org [204.13.248.66]) by cuda.sgi.com with ESMTP id 2M6i9FiXTlcaJB7s (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Mon, 26 May 2014 16:44:46 -0700 (PDT) X-Barracuda-Envelope-From: chandana@desilva.id.au X-Barracuda-Apparent-Source-IP: 204.13.248.66 Received: from ec2-54-252-74-219.ap-southeast-2.compute.amazonaws.com ([54.252.74.219] helo=mail.desilva.id.au) by mho-01-ewr.mailhop.org with esmtpa (Exim 4.72) (envelope-from ) id 1Wp4ZR-000ChB-Qw; Mon, 26 May 2014 23:44:46 +0000 Received: from [192.168.19.22] (mail.messagemedia.com.au [175.45.83.34]) by mail.desilva.id.au (Postfix) with ESMTPSA id D3CFA208D1; Mon, 26 May 2014 23:44:42 +0000 (UTC) X-Mail-Handler: Dyn Standard SMTP by Dyn X-Originating-IP: 54.252.74.219 X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/sendlabs/outbound_abuse.html for abuse reporting information) X-MHO-User: U2FsdGVkX1/2+CM2ThXHAYcfEvSs/atQGcz1ppVDzSg= Message-ID: <5383D1EA.3050901@desilva.id.au> Date: Tue, 27 May 2014 09:44:42 +1000 From: Chandana De Silva Reply-To: chandana@desilva.id.au User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com, Keith Owens Subject: Re: [pcp] Postfix PMDA References: <5383A589.9080006@desilva.id.au> <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Postfix PMDA In-Reply-To: <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mho-03-ewr.mailhop.org[204.13.248.66] X-Barracuda-Start-Time: 1401147886 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- will do. Thanks On 27/05/14 08:39, Nathan Scott wrote: > All daemon PMDAs start out their life as root, and explicitly switch to > some less privileged user; sounds like we need the following patch, can > you try it and let me know if it works for you? From nscott@redhat.com Mon May 26 18:52:12 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 572687F4E for ; Mon, 26 May 2014 18:52:12 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 1EC4E304039 for ; Mon, 26 May 2014 16:52:12 -0700 (PDT) X-ASG-Debug-ID: 1401148329-04bdf059a11383a0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id ZjyNZz5gRyCNkdQ5 for ; Mon, 26 May 2014 16:52:10 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4QNq7vw004666; Mon, 26 May 2014 19:52:07 -0400 Date: Mon, 26 May 2014 19:52:07 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Frank Ch. Eigler" Cc: Michele Baldessari , pcp@oss.sgi.com Message-ID: <363037034.15189981.1401148327796.JavaMail.zimbra@redhat.com> In-Reply-To: References: <20140524215548.GA13540@marquez.int.rhx> <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] pcpstats MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcpstats Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcpstats Thread-Index: WjJmzVGGcsRriQmIrPVGKf2utqRmNQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401148330 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > > nathans wrote: > > [...] > >> https://github.com/mbaldessari/pcpstats > > Neat idea! > > Yes. Before too long, imagine a web-interactive version of almost > exactly that. > Stop, stop - you're making Marko drool all over his keyboard. > > [...] - Values of counter semantics metrics (PM_SEM_COUNTER) are > > commonly reported after rate conversion (requires successive > > samples, and the value plotted is the value-delta divided by the > > time-delta), so that MB/sec, or utilizations, are reported instead > > of raw values. [...] > > Given that this comes up for multiple applications in multiple > languages, have you considered including this functionality within > libpcp proper? Yeah, anything is up for consideration. Difficulty lies in how to tackle this; the PMAPI is a bit low-level for this, needs a higher level API. Other difficulties include mapping C constructs to the object-oriented things, and the mismatch there (helper functions in the C API not enough for this sort of thing; new, relatively complex data structures would be needed). Then the fact that a pmResult will contain both counter & non-counter metrics, and for every sample we need a value for each, even when its initially "no value yet" for counters awaiting a second sample, so ultimately it'll end up in multiple passes over either the pmResult structure or some other data structure. And if its some other data structure, which it probably would be, thats often ideally a language-specific high-level data structure like a hash, accessed with language primitives, not via a special helper API. Its a non-trivial problem. pcp.pmcc solves a large portion of it already, and can be made object-oriented & pythonic in ways direct C APIs cannot - then there's the ~50 C tools in pcp that have not wanted such an API to date (its *too* high-level for many tools). *shrug*, so its not clear libpcp is a good spot - maybe a new lib above libpcp, but even then ... which tools is it targeting? The C++ tools use libpcp_qmc already for this purpose, so are not likely to use it (unless it could be plugged into that, under the covers - although that's all object-oriented C++ code as well and uses Qt classes/data structures). In the past, higher level APIs haven't really taken off (like optfetch in libpcp ... used by only a few tools, and that's been there forever). But, as always, experiment and have a crack if you'd like, of course - I'd recommend a library layering on the functionality above libpcp. I also recommend picking some real, existing tools that would suit to make use of it and converting them, rather than a "build it and they will come" model, cos if they don't, it's a maintenance load forever (case in point - libpcp_trace, which really needs a brain transplant and then some actual users). cheers. -- Nathan From keith.owens@messagemedia.com.au Mon May 26 19:31:48 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 677C17F4E for ; Mon, 26 May 2014 19:31:48 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4E9DD304039 for ; Mon, 26 May 2014 17:31:47 -0700 (PDT) X-ASG-Debug-ID: 1401150700-04cbb02a1212da70001-S8gJnT Received: from remote.messagemedia.com.au (mail.messagemedia.com.au [175.45.83.34]) by cuda.sgi.com with ESMTP id PsocNQ7kQvfGoFQB (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 26 May 2014 17:31:42 -0700 (PDT) X-Barracuda-Envelope-From: keith.owens@messagemedia.com.au X-Barracuda-Apparent-Source-IP: 175.45.83.34 Received: from [192.168.19.154] (192.168.19.154) by MM-SVR-RDC1.messagemedia.local (192.168.19.3) with Microsoft SMTP Server id 8.3.342.0; Tue, 27 May 2014 10:31:39 +1000 Message-ID: <5383DCEB.1070904@messagemedia.com.au> Date: Tue, 27 May 2014 10:31:39 +1000 From: Keith Owens User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott , "chandana@desilva.id.au" CC: "pcp@oss.sgi.com" Subject: Re: [pcp] Postfix PMDA References: <5383A589.9080006@desilva.id.au> <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: [pcp] Postfix PMDA In-Reply-To: <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-Product-Ver: SMEX-10.1.0.2244-7.000.1014-20716.007 X-TM-AS-Result: No--16.265900-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-Barracuda-Connect: mail.messagemedia.com.au[175.45.83.34] X-Barracuda-Start-Time: 1401150701 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DOMAIN_4U2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6144 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DOMAIN_4U2 URI: Domain name containing a "4u" variant Thanks Nathan, that works fine. (yes, that Keith Owens) On 27/05/14 08:39, Nathan Scott wrote:https://svn.m4u.com.au/repos/neo/platform/puppet/branches/PLAT-302 > Hi Chandana, > > ----- Original Message ----- >> Hello All,https://svn.m4u.com.au/repos/neo/platform/puppet/branches/PLAT-302 >> >> The Postfix PMDA uses qshape(1) to gather postfix queue stats, by >> reading files the various postfix queue directories. >> >> The problem is that all of the postfix queues are only readable by the >> postfix user (or root). >> >> Since the postfix pmda (by default) is run under the user pcp, it cannot >> gather the necessary stats. >> >> I suspect that the postfix pmda worked correctly when pcp ran as root. >> >> Is there anyway we can make the postfix (or any) pmda run as root ? >> > All daemon PMDAs start out their life as root, and explicitly switch to > some less privileged user; sounds like we need the following patch, can > you try it and let me know if it works for you? > > diff --git a/src/pmdas/postfix/pmdapostfix.pl b/src/pmdas/postfix/pmdapostfix.pl > index e6720ec..acce254 100644 > --- a/src/pmdas/postfix/pmdapostfix.pl > +++ b/src/pmdas/postfix/pmdapostfix.pl > @@ -211,7 +211,7 @@ $pmda->add_indom($postfix_sent_indom, \@postfix_sent_dom, '', ''); > $pmda->add_indom($postfix_received_indom, \@postfix_received_dom, '', ''); > $pmda->add_tail($logfile, \&postfix_log_parser, 0); > $pmda->set_fetch_callback(\&postfix_fetch_callback); > -$pmda->set_user('pcp'); > +$pmda->set_user('postfix'); > $pmda->run; > > =pod > > > cheers. > > -- > Nathan From nscott@redhat.com Mon May 26 19:36:07 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 91F8B7F50 for ; Mon, 26 May 2014 19:36:07 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7C7288F8054 for ; Mon, 26 May 2014 17:36:04 -0700 (PDT) X-ASG-Debug-ID: 1401150962-04bdf0599e13adb0001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 1vQoTnj3ffpZEG2a for ; Mon, 26 May 2014 17:36:02 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4R0Zr9B003621; Mon, 26 May 2014 20:35:54 -0400 Date: Mon, 26 May 2014 20:35:53 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Keith Owens , chandana@desilva.id.au Cc: pcp@oss.sgi.com Message-ID: <933783291.15204993.1401150953756.JavaMail.zimbra@redhat.com> In-Reply-To: <5383DCEB.1070904@messagemedia.com.au> References: <5383A589.9080006@desilva.id.au> <1388655205.15167122.1401143948270.JavaMail.zimbra@redhat.com> <5383DCEB.1070904@messagemedia.com.au> Subject: Re: [pcp] Postfix PMDA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Postfix PMDA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Postfix PMDA Thread-Index: vw4m1NmIWCeodJgB5He+/MPwF+qxFw== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401150962 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6144 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Keith, ----- Original Message ----- > Thanks Nathan, that works fine. > Thanks guys, fix will make its way out in pcp-3.9.5, ETA mid-June. > (yes, that Keith Owens) Heh, someone else claimed kaos@messagemedia already? ;) cheers. -- Nathan From nscott@redhat.com Mon May 26 21:49:44 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 48A997F4E for ; Mon, 26 May 2014 21:49:44 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id C7B3CAC002 for ; Mon, 26 May 2014 19:49:43 -0700 (PDT) X-ASG-Debug-ID: 1401158980-04cbb02a11134ee0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id ct7dFZRveMdzRKKD for ; Mon, 26 May 2014 19:49:40 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4R2nerQ022804 for ; Mon, 26 May 2014 22:49:40 -0400 Date: Mon, 26 May 2014 22:49:40 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <933107220.15262168.1401158980175.JavaMail.zimbra@redhat.com> In-Reply-To: <283587955.15261395.1401158843861.JavaMail.zimbra@redhat.com> Subject: pcp updates: python, pmdapostfix, michele merge MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: python, pmdapostfix, michele merge Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: python, pmdapostfix, michele merge Thread-Index: qPOqYwigiRIwl8PQ0I1epssVFfOThQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401158980 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6146 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev qa/729 | 48 +++++++++++++++++++++++++++++++++++++++ qa/729.out | 5 ++++ qa/group | 1 src/pmcollectl/pmcollectl.py | 16 +++++++------ src/pmdas/pmcd/src/pmcd.c | 2 - src/pmdas/postfix/pmdapostfix.pl | 4 +-- src/python/pcp/pmapi.py | 7 ++++- src/python/pcp/pmcc.py | 14 +++++++---- 8 files changed, 80 insertions(+), 17 deletions(-) commit b361623aaa15998f15f27096c731478ef06b2246 Author: Nathan Scott Date: Tue May 27 12:45:56 2014 +1000 Small pcp.pmcc module fixups, esp for archive mode operation Remove unused imports from pcp.pmcc and ensure we call archive variant of indom lookup API. This moves us a little closer to passing test qa/980 - much work remains, however. commit edc074f1c46e8f3e2bc78a22a6410de2af09f8f7 Author: Nathan Scott Date: Tue May 27 12:39:33 2014 +1000 pmcollectl: fix sub-second recording mode QA anomaly A misunderstanding on my part on how the odd-looking +1sec to all pmcollectl recordings was supposed to do something useful, resulted in pmlogger popping up those pesky GUI-mode record dialogs after pmcollectl recording. Fix this in a way that will remove them for good while also allowing short recording sessions to work. commit 88ad1739e3e4129000a8730ee6ecbafd0cdaf367 Author: Nathan Scott Date: Tue May 27 10:50:28 2014 +1000 postfix pmda: run as the postfix user, not the pcp user The Postfix PMDA uses qshape(1) to gather postfix queue stats, by reading files the various postfix queue directories. All of the postfix queues are only readable by the postfix user or root. Initial problem report and testing brought to you by the good folks at messagemedia.com.au. commit 592f2520ff7b984a907afc91f090edb2cab5c8ec Author: Nathan Scott Date: Mon May 26 10:41:47 2014 +1000 Automate manual test cases from recent python API fixes commit 7c8fbda3c4a64720df7d8ace71e8e2e6843ce574 Author: Michele Baldessari Date: Sat May 24 22:05:29 2014 +0100 Fix python pmParseInterval failure segfault The following testcase segfaults because errmsg is NULL: """ import pcp.pmapi context = pcp.pmapi.pmContext(target='local:') print(context.pmParseInterval('')) """ Program received signal SIGSEGV, Segmentation fault. 0x0000003d2e43182d in parseError (spec=spec@entry=0x3d2e4591c6 "", point=point@entry=0x3d2e4591c6 "", msg=msg@entry=0x3d2e45b166 "Null or empty specification", rslt=rslt@entry=0x0) at rtime.c:202 202 if ((*rslt = malloc(need)) == NULL) (gdb) bt Make pmParseInterval parameters the same as pmParseMetricSpec() commit 41142f633ffe8c9d75226b15bca8d99faa10dc39 Author: Michele Baldessari Date: Sat May 24 11:00:55 2014 +0100 Python - Fix segfault when printing empty units The following example: """ import pcp.pmapi from pcp.pmapi import c_api fname = '20140506.0' context = pcp.pmapi.pmContext(c_api.PM_CONTEXT_ARCHIVE, fname) pmids = context.pmLookupName(['proc.nprocs']) descs = context.pmLookupDescs(pmids[0]) print 'Segfault: %s' % descs[0].contents.units """ will segfault: pmUnitsStr_r (pu=0x0, buf=buf@entry=0x3d2e66f9c0 "", buflen=buflen@entry=60) at units.c:177 177 if (pu->dimSpace) { Make sure we wrap pmUnitsStr in order to catch these and correctly return an empty string commit c8bf7a1afda58129dbe0747b5f86da7dadd43269 Author: Nathan Scott Date: Sat May 24 11:48:55 2014 +1000 Fix pmdapmcd off-by-one preventing 3 or more pmcd.services From nscott@redhat.com Tue May 27 00:36:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 811557F4E for ; Tue, 27 May 2014 00:36:54 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 13D76AC004 for ; Mon, 26 May 2014 22:36:53 -0700 (PDT) X-ASG-Debug-ID: 1401169008-04cb6c22b61424b0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id BPs94fHGg3wcd4iK for ; Mon, 26 May 2014 22:36:48 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4R5akkr016574; Tue, 27 May 2014 01:36:46 -0400 Date: Tue, 27 May 2014 01:36:46 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <672876172.15341316.1401169006360.JavaMail.zimbra@redhat.com> In-Reply-To: <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> References: <20140524215548.GA13540@marquez.int.rhx> <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] pcpstats MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pcpstats Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcpstats Thread-Index: xNtk9llub6fJJE3X61uf+jSrjnu9C7n35cO+ X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401169008 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6148 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, Two more thoughts :) Given this last topic I mentioned ... ----- Original Message ----- > [...] > - More future work that might help (less distant though :) - there's > a current effort underway to make the Convenience Class python module > work and take on alot more of the effort that python client tools are > still having to do (as you've found here). Things like converting > counters to rates, improved caching (pmDesc, indoms/inst names, etc, > etc), things like that. ... pmAtomValue -> python type conversions > too, the sorts of things you needed to do in PcpArchive.get_values() > ... any things you've discovered in your hacking so far as "nice to > have" from such a module, please point 'em out (and feel free to help > scox & I out with hacking in that module too :) - this is "pcp.pmcc" > in the tree at src/python/pcp/pmcc.py). > - would it make sense to include the pcpstats code in the pcp tree & release it along with all the other tools? (as these API advances happen we could be immediately updating this code as well then). The license you've chosen is a direct match for PCPs, and I'm a big fan of driving API evolution from the needs of actual tools using the code ... so I'd be all for direct inclusion if you'd like to go that route. - "pcpstats" seems a fairly generic name, could I suggest "pcp2pdf" as a more specific, catchy handle? - oh, 3rd & 4th points too, sorry - there's loads of archives to test with in the PCP tree below qa/src (you've started a tests/pcp-files directory with similar goals I see); also, there's a handy PMDA in PCP that might help your testing efforts; pmdasample has metrics of every conceivable flavour (types, units, semantics, lots of insts, fast-changing-insts, etc, etc). cheers. -- Nathan From debbugs@buxtehude.debian.org Tue May 27 01:45:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E77F97F4E for ; Tue, 27 May 2014 01:45:14 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 80607AC006 for ; Mon, 26 May 2014 23:45:11 -0700 (PDT) X-ASG-Debug-ID: 1401173109-04cb6c22b8145bb0001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id BZunbqDyZ4RIWBhz (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Mon, 26 May 2014 23:45:09 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WpB8E-0002i4-F4; Tue, 27 May 2014 06:45:06 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#749462: pcp-gui-testsuite: not installable in sid Reply-To: Ralf Treinen , 749462@bugs.debian.org X-ASG-Orig-Subj: Bug#749462: pcp-gui-testsuite: not installable in sid Resent-From: Ralf Treinen Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: PCP Development Team X-Loop: owner@bugs.debian.org Resent-Date: Tue, 27 May 2014 06:45:01 +0000 Resent-Message-ID: X-Debian-PR-Message: report 749462 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Keywords: X-Debian-PR-Source: pcp-gui Received: via spool by submit@bugs.debian.org id=B.14011728589715 (code B); Tue, 27 May 2014 06:45:01 +0000 Received: (at submit) by bugs.debian.org; 27 May 2014 06:40:58 +0000 Received: from mo18.mail-out.ovh.net ([178.32.228.18]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1WpB4E-0002WT-Ek for submit@bugs.debian.org; Tue, 27 May 2014 06:40:58 +0000 Received: from 23.mail-out.ovh.net (23.mail-out.ovh.net [91.121.28.222]) by mo18.mail-out.ovh.net (Postfix) with SMTP id 180B5FF84F5 for ; Tue, 27 May 2014 08:40:57 +0200 (CEST) Received: (qmail 30519 invoked by uid 503); 27 May 2014 04:47:36 -0000 Received: from 10-85-190-109.dsl.ovh.fr (HELO seneca.home.net) (109.190.85.10) by 23.mail-out.ovh.net with SMTP; 27 May 2014 04:47:36 -0000 Received: from rt by seneca.home.net with local (Exim 4.82) (envelope-from ) id 1WpB4C-0006KU-M6 for submit@bugs.debian.org; Tue, 27 May 2014 08:40:56 +0200 Date: Tue, 27 May 2014 08:40:56 +0200 From: Ralf Treinen To: submit@bugs.debian.org X-Ovh-Mailout: 178.32.228.18 (mo18.mail-out.ovh.net) Message-ID: <20140527064056.GA27942@free.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Ovh-Tracer-Id: 1794684453506874797 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeejvddrheelucetufdoteggodetrfcurfhrohhfihhlvgemucfqggfjnecuuegrihhlohhuthemuceftddtnecu Delivered-To: submit@bugs.debian.org Resent-Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401173109 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6149 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Package: pcp-gui-testsuite Version: 1.5.13 Severity: serious User: treinen@debian.org Usertags: edos-outdated Hi, pcp-gui-testsuite is no longer installable in sid as it depends on pcp-gui (= 1.5.13). Since pcp-gui moved into the pcp source package we have pcp-gui version 3.9.4 in sid. Shouldn't the pcp-gui-testsuite package be removed from sid (or rather the whole pcp-gui source package)? -Ralf. From debbugs@buxtehude.debian.org Tue May 27 02:15:12 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 192957F4E for ; Tue, 27 May 2014 02:15:12 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 047978F8037 for ; Tue, 27 May 2014 00:15:08 -0700 (PDT) X-ASG-Debug-ID: 1401174907-04cb6c22b6147960001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 3GFpd4PYXuDzqDxR (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 27 May 2014 00:15:07 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WpBbE-0006IN-KO; Tue, 27 May 2014 07:15:04 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#749462: [pcp] Bug#749462: pcp-gui-testsuite: not installable in sid Reply-To: Nathan Scott , 749462@bugs.debian.org X-ASG-Orig-Subj: Bug#749462: [pcp] Bug#749462: pcp-gui-testsuite: not installable in sid Resent-From: Nathan Scott Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: PCP Development Team X-Loop: owner@bugs.debian.org Resent-Date: Tue, 27 May 2014 07:15:01 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 749462 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Keywords: X-Debian-PR-Source: pcp-gui Received: via spool by 749462-submit@bugs.debian.org id=B749462.140117478723189 (code B ref 749462); Tue, 27 May 2014 07:15:01 +0000 Received: (at 749462) by bugs.debian.org; 27 May 2014 07:13:07 +0000 Received: from mx5-phx2.redhat.com ([209.132.183.37]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1WpBZK-00061a-Tg for 749462@bugs.debian.org; Tue, 27 May 2014 07:13:07 +0000 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4R7D4nO004545; Tue, 27 May 2014 03:13:04 -0400 Date: Tue, 27 May 2014 03:13:04 -0400 (EDT) From: Nathan Scott To: Ralf Treinen , 749462@bugs.debian.org Message-ID: <1198769894.15405158.1401174784123.JavaMail.zimbra@redhat.com> In-Reply-To: <20140527064056.GA27942@free.fr> References: <20140527064056.GA27942@free.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Bug#749462: pcp-gui-testsuite: not installable in sid Thread-Index: LRsECpsikE/UG83Lt5Dd/M6nhN1dGw== Resent-Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401174907 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6150 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ralf, ----- Original Message ----- > Package: pcp-gui-testsuite > Version: 1.5.13 > Severity: serious > User: treinen@debian.org > Usertags: edos-outdated > > Hi, > > pcp-gui-testsuite is no longer installable in sid as it depends on > pcp-gui (= 1.5.13). Since pcp-gui moved into the pcp source package > we have pcp-gui version 3.9.4 in sid. Shouldn't the pcp-gui-testsuite > package be removed from sid (or rather the whole pcp-gui source package)? Yep, the whole pcp-gui source package should be removed - just looking into how to do that. thanks. -- Nathan From debbugs@buxtehude.debian.org Tue May 27 04:15:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id F24F57F4E for ; Tue, 27 May 2014 04:15:12 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id DB5B18F8040 for ; Tue, 27 May 2014 02:15:12 -0700 (PDT) X-ASG-Debug-ID: 1401182107-04cbb02a11149f30001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id A3kDi7VzqRZVRzwR (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 27 May 2014 02:15:08 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WpDTN-0002wG-23; Tue, 27 May 2014 09:15:05 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#749462: [pcp] Bug#749462: pcp-gui-testsuite: not installable in sid Reply-To: Ralf Treinen , 749462@bugs.debian.org X-ASG-Orig-Subj: Bug#749462: [pcp] Bug#749462: pcp-gui-testsuite: not installable in sid Resent-From: Ralf Treinen Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: PCP Development Team X-Loop: owner@bugs.debian.org Resent-Date: Tue, 27 May 2014 09:15:01 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 749462 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Keywords: X-Debian-PR-Source: pcp-gui Received: via spool by 749462-submit@bugs.debian.org id=B749462.140118201710959 (code B ref 749462); Tue, 27 May 2014 09:15:01 +0000 Received: (at 749462) by bugs.debian.org; 27 May 2014 09:13:37 +0000 Received: from korolev.univ-paris7.fr ([194.254.61.138]) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1WpDRw-0002qF-4Z for 749462@bugs.debian.org; Tue, 27 May 2014 09:13:36 +0000 Received: from mailhub.math.univ-paris-diderot.fr (mailhub.math.univ-paris-diderot.fr [81.194.30.253]) by korolev.univ-paris7.fr (8.14.4/8.14.4/relay1/46573) with ESMTP id s4R8KdA7019976; Tue, 27 May 2014 10:20:39 +0200 Received: from mailhub.math.univ-paris-diderot.fr (localhost [127.0.0.1]) by mailhub.math.univ-paris-diderot.fr (Postfix) with ESMTP id AC33112726B; Tue, 27 May 2014 10:20:39 +0200 (CEST) X-Virus-Scanned: amavisd-new at math.univ-paris-diderot.fr Received: from mailhub.math.univ-paris-diderot.fr ([127.0.0.1]) by mailhub.math.univ-paris-diderot.fr (mailhub.math.univ-paris-diderot.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id h36mQC-yW-qN; Tue, 27 May 2014 10:20:38 +0200 (CEST) Received: from vanadium.pps.jussieu.fr (unknown [172.23.36.39]) (Authenticated sender: treinen) by mailhub.math.univ-paris-diderot.fr (Postfix) with ESMTPSA id 574CD12726A; Tue, 27 May 2014 10:20:38 +0200 (CEST) Date: Tue, 27 May 2014 10:20:37 +0200 From: Ralf Treinen To: Nathan Scott Cc: 749462@bugs.debian.org Message-ID: <20140527082037.GA14378@vanadium.pps.jussieu.fr> References: <20140527064056.GA27942@free.fr> <1198769894.15405158.1401174784123.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1198769894.15405158.1401174784123.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.7 (korolev.univ-paris7.fr [194.254.61.138]); Tue, 27 May 2014 10:20:39 +0200 (CEST) X-Miltered: at korolev with ID 53844AD7.003 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Enveloppe: 53844AD7.003 from mailhub.math.univ-paris-diderot.fr/mailhub.math.univ-paris-diderot.fr/null/mailhub.math.univ-paris-diderot.fr/ X-j-chkmail-Score: MSGID : 53844AD7.003 on korolev.univ-paris7.fr : j-chkmail score : . : R=. U=. O=. B=0.000 -> S=0.000 X-j-chkmail-Status: Ham X-Greylist: delayed 3170 seconds by postgrey-1.34 at buxtehude; Tue, 27 May 2014 09:13:35 UTC Resent-Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401182108 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6152 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi Nathan, On Tue, May 27, 2014 at 03:13:04AM -0400, Nathan Scott wrote: > > we have pcp-gui version 3.9.4 in sid. Shouldn't the pcp-gui-testsuite > > package be removed from sid (or rather the whole pcp-gui source package)? > > Yep, the whole pcp-gui source package should be removed - just looking > into how to do that. it ususally should happen automatically, but it probably didn't in this case since pcp-gui-testsuite isn't provided by the pcp source package. See [1] for how to request removals. -Ralf. [1] https://wiki.debian.org/ftpmaster_Removals -- Ralf Treinen Laboratoire Preuves, Programmes et Systèmes Université Paris Diderot, Paris, France. http://www.pps.univ-paris-diderot.fr/~treinen/ From michele@acksyn.org Tue May 27 04:59:40 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 125577F4E for ; Tue, 27 May 2014 04:59:40 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 08F828F8040 for ; Tue, 27 May 2014 02:59:39 -0700 (PDT) X-ASG-Debug-ID: 1401184777-04cb6c22b6154eb0001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id KmGY6Mdgp0N6EpI2 for ; Tue, 27 May 2014 02:59:37 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id B92FC27B3F; Tue, 27 May 2014 05:59:36 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1401184776; bh=jl6tvR9Sdf0FYRNtjne+SxOrcCzXKDSFJUovcqh6H84=; b=X81j14Z8tlYs KnaLpUdln6NHuR6A4XMkP85uFEway9PUKhrjPcAUoJouurCGfgbfol/WMgBDSASC QN0F8XIxNkm+3dKwlyHiN9EdiSBrUU7WJQu03sRlF71RvlwzF35hnWZra3jDyzj6 3SEvwk8QiC0feryCuQbrZbg2KC+u3P8= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id vPNXQMk17Dmj; Tue, 27 May 2014 05:59:36 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 1072427B3D; Tue, 27 May 2014 05:59:36 -0400 (EDT) Date: Tue, 27 May 2014 10:59:35 +0100 From: Michele Baldessari To: "Frank Ch. Eigler" Cc: pcp@oss.sgi.com Subject: Re: pcpstats Message-ID: <20140527095935.GA4384@marquez.int.rhx> X-ASG-Orig-Subj: Re: pcpstats References: <20140524215548.GA13540@marquez.int.rhx> <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401184777 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6153 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Frank, On Mon, May 26, 2014 at 02:14:10PM -0400, Frank Ch. Eigler wrote: > > [...] > >> https://github.com/mbaldessari/pcpstats > > Neat idea! > > Yes. Before too long, imagine a web-interactive version of almost > exactly that. Yep, taking a look at your graphite work is on my TODO ;) It's exciting stuff. In the long term I'd love pcp to be integrated with the Cockpit project [1], so that admins have a single interface to manage their servers with. But I have not investigated the technicalities involved at all, so not yet sure how feasible it'd be. cheers, Michele [1] http://cockpit-project.org/ -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From michele@acksyn.org Tue May 27 05:11:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 178F47F4E for ; Tue, 27 May 2014 05:11:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0E6C6304032 for ; Tue, 27 May 2014 03:11:34 -0700 (PDT) X-ASG-Debug-ID: 1401185492-04cbb02a1214e690001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id l9HHjKAvAfWP4oqQ for ; Tue, 27 May 2014 03:11:33 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id AA3AA27B3F; Tue, 27 May 2014 06:11:32 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1401185492; bh=0uWxyK/EaREfK9osqz2PBsd3tm4ejwnfX1M+PpWwO9E=; b=lQB0Me8O/GDd dE6Ggx/TQ7jY35Wg7H3PlNDK1U94bx5l3/7hcso+9Q0Kf4eYiDJ3GjyjB9UYNUhv NEFWXWqVPozuJJqoRF4tXnnGPEUXfbnBB3lBvPicJuRP+5DqLBpc6tA6ZvMU+xeV 3n44KaHfhMJdJJu0pNHQIcq3mVyQW1s= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id uPjmLI3TQ5Ln; Tue, 27 May 2014 06:11:32 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id A8CD627B3D; Tue, 27 May 2014 06:11:31 -0400 (EDT) Date: Tue, 27 May 2014 11:11:31 +0100 From: Michele Baldessari To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: [pcp] pcpstats Message-ID: <20140527101131.GB4384@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] pcpstats References: <20140524215548.GA13540@marquez.int.rhx> <1951313532.14634422.1401085287050.JavaMail.zimbra@redhat.com> <672876172.15341316.1401169006360.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <672876172.15341316.1401169006360.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401185492 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6153 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Nathan, On Tue, May 27, 2014 at 01:36:46AM -0400, Nathan Scott wrote: > Hi Michele, > > Two more thoughts :) Given this last topic I mentioned ... Thanks for all your feedback, precious as usual. I've started tackling some of your previous points and added the other ones to the TODO. > ----- Original Message ----- > > [...] > > - More future work that might help (less distant though :) - there's > > a current effort underway to make the Convenience Class python module > > work and take on alot more of the effort that python client tools are > > still having to do (as you've found here). Things like converting > > counters to rates, improved caching (pmDesc, indoms/inst names, etc, > > etc), things like that. ... pmAtomValue -> python type conversions > > too, the sorts of things you needed to do in PcpArchive.get_values() > > ... any things you've discovered in your hacking so far as "nice to > > have" from such a module, please point 'em out (and feel free to help > > scox & I out with hacking in that module too :) - this is "pcp.pmcc" > > in the tree at src/python/pcp/pmcc.py). > > > > - would it make sense to include the pcpstats code in the pcp tree & > release it along with all the other tools? (as these API advances > happen we could be immediately updating this code as well then). The > license you've chosen is a direct match for PCPs, and I'm a big fan > of driving API evolution from the needs of actual tools using the > code ... so I'd be all for direct inclusion if you'd like to go that > route. Sure thing, works for me. Anything that helps PCP's adoption I'm happy with ;) I fully agree with the API evolution thought. Give me a week or two to clean up the code and then we can work on putting it into the main tree. > - "pcpstats" seems a fairly generic name, could I suggest "pcp2pdf" > as a more specific, catchy handle? Indeed, makes sense ;) > - oh, 3rd & 4th points too, sorry - there's loads of archives to test > with in the PCP tree below qa/src (you've started a tests/pcp-files > directory with similar goals I see); also, there's a handy PMDA in > PCP that might help your testing efforts; pmdasample has metrics of > every conceivable flavour (types, units, semantics, lots of insts, > fast-changing-insts, etc, etc). Ack, I'll clean up the remaining most embarassing parts of the code, and work on a branch that can be merged into pcp proper. I'll make sure that I move the test suite to the qa folder using the existing archives. You can then take a look and we adjust anything that needs fixing before merging it. cheers, Michele ps. I might take a bit longer as I have some work-related trips coming up. -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From michele@acksyn.org Tue May 27 17:30:54 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 328E67F4E for ; Tue, 27 May 2014 17:30:54 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id CF748AC003 for ; Tue, 27 May 2014 15:30:53 -0700 (PDT) X-ASG-Debug-ID: 1401229847-04bdf0599e1ac080001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id YuyOjhCkLqbBCu6c for ; Tue, 27 May 2014 15:30:48 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 99E1E27B54 for ; Tue, 27 May 2014 18:30:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:content-disposition:content-type:content-type :mime-version:message-id:subject:subject:from:from:date:date :received:received; s=2010; t=1401229845; bh=XaefUyOwwLVJj7GbjD4 eRRiuW9RPfXstxa96Kwd2BEE=; b=cwC0bUilZRZQhg+7WFrF7Lr+9CJ4rCQDglQ ZstAX0MFVznibzPJDeXrYbM2rap4T0EiexakLsLuWITXnvwv6n1kdU49u1eIA8ca irvua5owZadKOrqyz37EhztLQwrOGQviEwNJEEm8mzbIQELkp+PkrICX3Nckvodm Is/Trh68= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 6QfiIwRFg5ME for ; Tue, 27 May 2014 18:30:45 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 7CB7E21150 for ; Tue, 27 May 2014 18:30:45 -0400 (EDT) Date: Tue, 27 May 2014 23:30:45 +0100 From: Michele Baldessari To: pcp@oss.sgi.com Subject: python pmExtractValue segfault Message-ID: <20140527223044.GC4384@marquez.int.rhx> X-ASG-Orig-Subj: python pmExtractValue segfault MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="M9NhX3UHpAaciwkO" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401229847 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6170 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature --M9NhX3UHpAaciwkO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Nathan and all, I've attached a simple script that given an archive file, walks through each metric and does a pmFetch()/pmSetMode(c_api.PM_MODE_FORW, start, 0) loop. The goal of the function is to return data in the following form: return = {} return[metric1] = {'indom1': [(ts0, ts1, .., tsN), (v0, v1, .., vN)], .... 'indomN': [(ts0, ts1, .., tsN), (v0, v1, .., vN)]} return[metric2] = {'indom1': [(ts0, ts1, .., tsX), (v0, v1, .., vX)], .... 'indomN': [(ts0, ts1, .., tsX), (v0, v1, .., vX)]} When I run the script against this archive [1] I end up segfaulting: Program received signal SIGSEGV, Segmentation fault. 0x0000003d2e4213d4 in pmExtractValue (valfmt=1, ival=, itype=3, oval=0x75df40, otype=3) at units.c:794 794 if (ival->value.pval->vlen != PM_VAL_HDR_SIZE + sizeof(__uint64_t) || The crash is due because pmExtractValue() segfaults when the indom list changes. While I am fixing this by using using contents.get_numval() to loop over all the values with pmExtractValue() [as opposed to using the length of the instances returned by pmGetInDomArchive()], I was wondering if there is a better way in general to achieve my goal here (retrieve all values/indoms for all metrics for all timestamps). Maybe it makes sense to make pmExtractValue fail gracefully in any case? Cheers, Michele [1] https://github.com/mbaldessari/pcpstats/blob/master/tests/pcp-files/server1.internal/20140510.08.47.0 -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D --M9NhX3UHpAaciwkO Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="fetch-indom2.py" from datetime import datetime from pcp import pmapi import cpmapi as c_api import sys def get_values(ctx, metrics): '''Given a list of metrics, it returns a dictionary of dictionaries in the following form: return[metric1] = {'indom1': [(ts0, ts1, .., tsN), (v0, v1, .., vN)], .... 'indomN': [(ts0, ts1, .., tsN), (v0, v1, .., vN)]} return[metric2] = {'indom1': [(ts0, ts1, .., tsX), (v0, v1, .., vX)], .... 'indomN': [(ts0, ts1, .., tsX), (v0, v1, .., vX)]} (ts0, .., tsN) are timestamps in datetime format and (v0, .., vN) are the actual values. If a metric has no indom use 0 as its key.''' start = context.pmGetArchiveLabel().start data = {} for metric in metrics: # For each metric start at the beginning of the file context.pmSetMode(c_api.PM_MODE_FORW, start, 0) #print("{0} metric, {1} pmids, {2} descs".format(metric, len(pmid), len(desc))) data[metric] = {} indoms = {} while 1: # Keep fetching data until pmFetch errors out pmid = context.pmLookupName(metric) # Moved both these in the while loop but no change desc = context.pmLookupDescs(pmid) # they used to be in the for metrics loop try: result = context.pmFetch(pmid) except pmapi.pmErr, error: # Exit if we are at the end of the file or if the record is corrupted # Signal any other issues if error.args[0] in [c_api.PM_ERR_EOL, c_api.PM_ERR_LOGREC]: break raise error time_val = result.contents.timestamp ts = datetime.fromtimestamp(time_val.tv_sec + time_val.tv_usec * 10**-6) for m in range(len(desc)): count = result.contents.get_numval(m) if count == 0: continue try: (insts, nodes) = context.pmGetInDomArchive(desc[m]) except pmapi.pmErr, error: if error.args[0] not in [c_api.PM_ERR_INDOM]: raise error insts = [0] nodes = [0] except Exception, error: raise error # BUG? Do not use range(len(insts)) because if the indoms change during # the pmFetch() loop pmExtractValue() will segfault # using range(count) fixes the segfault for inst in range(len(insts)): mtype = desc[m].contents.type value = context.pmExtractValue( result.contents.get_valfmt(m), result.contents.get_vlist(m, inst), mtype, mtype) node = nodes[inst] if mtype == c_api.PM_TYPE_STRING: tmp = value.cp elif mtype in [c_api.PM_TYPE_U64, c_api.PM_TYPE_64, c_api.PM_TYPE_U32, c_api.PM_TYPE_32]: tmp = value.ull elif mtype == c_api.PM_TYPE_FLOAT: tmp = value.f elif mtype == c_api.PM_TYPE_DOUBLE: tmp = value.d else: raise Exception("Metric has type: %s[%s]" % ( metric, mtype)) if node not in indoms: indoms[node] = [[ts,], [tmp,]] else: indoms[node][0].append(ts) indoms[node][1].append(tmp) context.pmFreeResult(result) data[metric] = indoms return data pmns = {} def traverse(metric): pmns[metric] = None context = pmapi.pmContext(c_api.PM_CONTEXT_ARCHIVE, sys.argv[1]) context.pmTraversePMNS('', traverse) metrics = sorted(pmns.keys()) ret = get_values(context, metrics) # verify that len(timestamps) == len(values) for every indom in every metric for metric in sorted(ret): indoms = ret[metric] for indom in indoms: (ts, values) = indoms[indom] if len(ts) != len(values): raise Exception('{0}[{1}]: {2} - {3}'.format(metric, indom, ts, values)) print('{0}[{1}] ok'.format(metric, indom)) # Look at one metric metric = 'network.interface.out.bytes' print print('Metric: {0}'.format(metric)) indoms = ret[metric] for i in indoms: print('Indom {0} has values: {1}'.format(i, len(indoms[i][1]))) --M9NhX3UHpAaciwkO-- From nscott@redhat.com Tue May 27 20:08:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id AF2E27F4E for ; Tue, 27 May 2014 20:08:43 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id 4E151AC002 for ; Tue, 27 May 2014 18:08:40 -0700 (PDT) X-ASG-Debug-ID: 1401239315-04bdf0599f1ba3a0001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id RdApQ82phGxyADZJ for ; Tue, 27 May 2014 18:08:35 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4S18X5i004335; Tue, 27 May 2014 21:08:33 -0400 Date: Tue, 27 May 2014 21:08:32 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> In-Reply-To: <20140527223044.GC4384@marquez.int.rhx> References: <20140527223044.GC4384@marquez.int.rhx> Subject: Re: [pcp] python pmExtractValue segfault MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: python pmExtractValue segfault Thread-Index: cedzZbc34KW1Huz3RaQ7RJ2xJb9DfA== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401239315 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6173 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, ----- Original Message ----- > Hi Nathan and all, > > I've attached a simple script that given an archive file, walks through > each metric and does a pmFetch()/pmSetMode(c_api.PM_MODE_FORW, start, 0) > loop. The goal of the function is to return data in the following form: > return = {} > return[metric1] = {'indom1': [(ts0, ts1, .., tsN), (v0, v1, .., vN)], > .... > 'indomN': [(ts0, ts1, .., tsN), (v0, v1, .., vN)]} > return[metric2] = {'indom1': [(ts0, ts1, .., tsX), (v0, v1, .., vX)], > .... > 'indomN': [(ts0, ts1, .., tsX), (v0, v1, .., vX)]} > > When I run the script against this archive [1] I end up segfaulting: > Program received signal SIGSEGV, Segmentation fault. > 0x0000003d2e4213d4 in pmExtractValue (valfmt=1, ival=, > itype=3, oval=0x75df40, otype=3) at units.c:794 > 794 if (ival->value.pval->vlen != PM_VAL_HDR_SIZE + > sizeof(__uint64_t) || > > The crash is due because pmExtractValue() segfaults when the indom list > changes. While I am fixing this by using using contents.get_numval() > to loop over all the values with pmExtractValue() [as opposed to using > the length of the instances returned by pmGetInDomArchive()], I was Sounds right - the latter is the union of instances across the archive, and thats not necessarily the same thing as the instances that will be returned in an individual fetch pmResult at any one sample. > wondering if there is a better way in general to achieve my goal here > (retrieve all values/indoms for all metrics for all timestamps). This class of problem sounds suited to solving using the same model that pmlogsummary uses. It performs sequential result scanning via pmFetchArchive(3), with a single pmSetMode at the start to set the initial archive offset. As it passes through the pmResult structures, it constructs a data structure alot like the one you describe above (written in C though). It uses a hash of all PMIDs (key == PMID, value == "struct aveData") wherein each PMID hash value contains a list of all instances that grows dynamically as the archive is scanned and new instances found. Then at the end of scanning the archive, the now in-memory PMID hash is walked, final calculations are done, and a report printed out. In the end, it doesn't use pmGetInDom[Archive] at all, but instead uses pmNameInDom(3). > Maybe it makes sense to make pmExtractValue fail gracefully in any case? I'm not sure it can be handled there; its passed a pointer deep into the result structure and it doesn't have enough state to know whether its being fed bogus data (i.e. it doesn't get to see the rest of the pmResult, so its can't really take steps to defend itself). cheers. -- Nathan From debbugs@buxtehude.debian.org Tue May 27 20:57:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 796597F47 for ; Tue, 27 May 2014 20:57:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 652AA8F8087 for ; Tue, 27 May 2014 18:57:13 -0700 (PDT) X-ASG-Debug-ID: 1401242228-04cb6c22b51b5530001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 8zbQQVS14gWO9qaE (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 27 May 2014 18:57:08 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WpT73-0007hM-Al; Wed, 28 May 2014 01:57:05 +0000 X-Loop: owner@bugs.debian.org Subject: Bug#749462: [pcp] Bug#749462: Bug#749462: pcp-gui-testsuite: not installable in sid Reply-To: Nathan Scott , 749462@bugs.debian.org X-ASG-Orig-Subj: Bug#749462: [pcp] Bug#749462: Bug#749462: pcp-gui-testsuite: not installable in sid Resent-From: Nathan Scott Resent-To: debian-bugs-dist@lists.debian.org Resent-Cc: PCP Development Team X-Loop: owner@bugs.debian.org Resent-Date: Wed, 28 May 2014 01:57:02 +0000 Resent-Message-ID: X-Debian-PR-Message: followup 749462 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Keywords: X-Debian-PR-Source: pcp-gui Received: via spool by 749462-submit@bugs.debian.org id=B749462.140124212728788 (code B ref 749462); Wed, 28 May 2014 01:57:02 +0000 Received: (at 749462) by bugs.debian.org; 28 May 2014 01:55:27 +0000 Received: from mx3-phx2.redhat.com ([209.132.183.24]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1WpT5S-0007U7-Pf for 749462@bugs.debian.org; Wed, 28 May 2014 01:55:27 +0000 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4S1tO3m010466; Tue, 27 May 2014 21:55:25 -0400 Date: Tue, 27 May 2014 21:55:24 -0400 (EDT) From: Nathan Scott To: Ralf Treinen , 749462@bugs.debian.org Message-ID: <359844832.16116286.1401242124894.JavaMail.zimbra@redhat.com> In-Reply-To: <20140527082037.GA14378@vanadium.pps.jussieu.fr> References: <20140527064056.GA27942@free.fr> <1198769894.15405158.1401174784123.JavaMail.zimbra@redhat.com> <20140527082037.GA14378@vanadium.pps.jussieu.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Bug#749462: Bug#749462: pcp-gui-testsuite: not installable in sid Thread-Index: LpcgYd4Y1nWSZR4U2wjW6YMSwcIWqA== Resent-Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401242228 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6174 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > [...] > it ususally should happen automatically, but it probably didn't in this case > since pcp-gui-testsuite isn't provided by the pcp source package. > > See [1] for how to request removals. > Thanks Ralf, bug #749556 has been opened for the ftpmasters. -- Nathan From nscott@redhat.com Tue May 27 22:45:14 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8D0077F4E for ; Tue, 27 May 2014 22:45:14 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id 65F528F8087 for ; Tue, 27 May 2014 20:45:11 -0700 (PDT) X-ASG-Debug-ID: 1401248706-04bdf059a11c4e00001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id 8NrDsGdQqU7LX0GU for ; Tue, 27 May 2014 20:45:06 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4S3j5AX013800; Tue, 27 May 2014 23:45:05 -0400 Date: Tue, 27 May 2014 23:45:05 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> In-Reply-To: <1263610041.16136006.1401248400290.JavaMail.zimbra@redhat.com> Subject: Service advertising versus QA MIME-Version: 1.0 X-ASG-Orig-Subj: Service advertising versus QA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Service advertising versus QA Thread-Index: qLkWsNei9PDdSJgvwDxp+lIx4dHoXw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401248706 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6175 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Dave, I'm seeing QA failures resulting from services on remote machines being discovered by pmfind in tests 775 and 946. Should we have a mode (global option?) of requesting discovery of local services only? Or should we more aggressively filter these? thanks. -- Nathan From Clement.Georges@univ-littoral.fr Wed May 28 01:25:17 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 446A57F55 for ; Wed, 28 May 2014 01:25:17 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 2EB50304043 for ; Tue, 27 May 2014 23:25:14 -0700 (PDT) X-ASG-Debug-ID: 1401258307-04cb6c22b71c7510001-S8gJnT Received: from ambre.univ-littoral.fr (ambre.univ-littoral.fr [195.220.130.2]) by cuda.sgi.com with ESMTP id XhuYCiUbL6F5tnd2 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Tue, 27 May 2014 23:25:09 -0700 (PDT) X-Barracuda-Envelope-From: Clement.Georges@univ-littoral.fr X-Barracuda-Apparent-Source-IP: 195.220.130.2 Received: from opale.univ-littoral.fr (opale.univ-littoral.fr [195.220.130.13]) by ambre.univ-littoral.fr (8.14.5/8.14.5) with ESMTP id s4S6Ljj3026338 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 28 May 2014 08:21:47 +0200 Received: from localhost (buzz.univ-littoral.fr [195.220.130.11]) by opale.univ-littoral.fr (8.14.4/8.14.4) with ESMTP id s4S6BNmW005197; Wed, 28 May 2014 08:11:25 +0200 Received: from 41.203.67.138 ([41.203.67.138]) by www.opale.univ-littoral.fr (Horde Framework) with HTTP; Wed, 28 May 2014 08:21:41 +0200 Message-ID: <20140528082141.195233fvjx0qau0w@www.opale.univ-littoral.fr> Date: Wed, 28 May 2014 08:21:41 +0200 From: Clement Georges To: undisclosed-recipients:; Subject: mettre =?iso-8859-1?b?w6A=?= niveau votre compte de messagerie MIME-Version: 1.0 X-ASG-Orig-Subj: mettre =?iso-8859-1?b?w6A=?= niveau votre compte de messagerie Content-Type: text/plain; charset=ISO-8859-1; DelSp="Yes"; format="flowed" Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Dynamic Internet Messaging Program (DIMP) H3 (1.1.8) X-Originating-IP: 41.203.67.138 X-ULCO-MailScanner: Found to be clean, Found to be clean X-Greylist: Sender DNS name whitelisted, not delayed by milter-greylist-4.4.1 (ambre.univ-littoral.fr [195.220.130.2]); Wed, 28 May 2014 08:21:47 +0200 (CEST) X-ULCO-MailScanner-Information: Please contact the ISP for more information X-ULCO-MailScanner-ID: s4S6Ljj3026338 X-ULCO-MailScanner-From: clement.georges@univ-littoral.fr X-Barracuda-Connect: ambre.univ-littoral.fr[195.220.130.2] X-Barracuda-Start-Time: 1401258308 X-Barracuda-Encrypted: AES256-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6178 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Vous ne serez pas en mesure envoyer ou de recevoir de nouveaux messages jusqu'à ' à ce que vous mettez à niveau votre quota de courriel. Copiez le lien ci-dessous et remplissez le formulaire pour mettre à niveau votre compte. https://www.FormStack.com/Forms/?1755379-Pd5eD1cXJv Administrateur système 192.168.0.1 From michele@acksyn.org Wed May 28 09:44:42 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id DA2AA7F60 for ; Wed, 28 May 2014 09:44:42 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id DD889304059 for ; Wed, 28 May 2014 07:44:39 -0700 (PDT) X-ASG-Debug-ID: 1401288274-04cb6c22b61f7eb0001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id tWSOEOv04tFmwQT0 for ; Wed, 28 May 2014 07:44:35 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 561F227B76; Wed, 28 May 2014 10:44:34 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1401288273; bh=GP8gypB3imphFc2u1fdkYGoaeYHKIIYJnB7rK/8cNgM=; b=j2X5Z1jk9IgN F1kGVCMTX8LLVfID3gDzEtZJvAMcv7Drkon/3Jvo+0JBhPfUB5Bli3zC0STvJYEd OZiDthPhLpHXeLg5ZRY3tdjOsAuilExCDpfOSYnfT7Ld8/P1gC0PAnmYr6zuo8Cq BnSncPlAZ1dXKBt8qnnvAjbYxQWY+3w= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Ddp7l5D_D8Ws; Wed, 28 May 2014 10:44:33 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 7335A27B65; Wed, 28 May 2014 10:44:33 -0400 (EDT) Date: Wed, 28 May 2014 15:44:33 +0100 From: Michele Baldessari To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: [pcp] python pmExtractValue segfault Message-ID: <20140528144433.GD4384@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401288274 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6182 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Nathan, On Tue, May 27, 2014 at 09:08:32PM -0400, Nathan Scott wrote: > > wondering if there is a better way in general to achieve my goal here > > (retrieve all values/indoms for all metrics for all timestamps). > > This class of problem sounds suited to solving using the same model > that pmlogsummary uses. It performs sequential result scanning via > pmFetchArchive(3), with a single pmSetMode at the start to set the > initial archive offset. > > As it passes through the pmResult structures, it constructs a data > structure alot like the one you describe above (written in C though). > It uses a hash of all PMIDs (key == PMID, value == "struct aveData") > wherein each PMID hash value contains a list of all instances that > grows dynamically as the archive is scanned and new instances found. > > Then at the end of scanning the archive, the now in-memory PMID hash > is walked, final calculations are done, and a report printed out. In > the end, it doesn't use pmGetInDom[Archive] at all, but instead uses > pmNameInDom(3). thanks for the hints. I've now switched to using pmFetchArchive (how did I not notice this function before is beyond me) and pmNameInDomArchive. So now the pseudo code is something like the following: while true: result = ctx.pmFetchArchive() for i in range(result.contents.numpmid): pmid = result.contents.get_pmid(i) desc = context.pmLookupDesc(pmid) count = result.contents.get_numval(i) if count <= 1: # No indoms are present ...extract value... else: for j in range(count): inst = result.contents.get_inst(i, j) indom_name = context.pmNameInDomArchive(desc, inst) ...extract data.. Since pmNameInDomArchive was quite high up in my profiling I cached it in a dictionary so that indom_cache[(i, j)] = indom_name. This way I only look it up when the metric appears the first time, and I shave off 40% of the time needed to parse this (the rest is dominated by python casts and by pmExtractValue calls, for which there are less obvious ways to improve). Is this a safe thing to do? Am I guaranteed that the mapping (i, j)->indom_name will stay the same in an archive? Somehow I assume that is not the case (pmcd restart with new PMDA, etc.), but maybe I'll get lucky ;) cheers, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From brolley@redhat.com Wed May 28 10:54:58 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id E02847F62 for ; Wed, 28 May 2014 10:54:58 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id EB2A0304064 for ; Wed, 28 May 2014 08:54:58 -0700 (PDT) X-ASG-Debug-ID: 1401292494-04cbb02a111fe290001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id DDmudecbw3VCV0m1 for ; Wed, 28 May 2014 08:54:55 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4SFsrIq024769 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 28 May 2014 11:54:54 -0400 Received: from [10.10.62.210] (vpn-62-210.rdu2.redhat.com [10.10.62.210]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4SFsqRt005623; Wed, 28 May 2014 11:54:53 -0400 Message-ID: <5386075A.70505@redhat.com> Date: Wed, 28 May 2014 11:57:14 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: Service advertising versus QA References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: Service advertising versus QA In-Reply-To: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401292494 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/27/2014 11:45 PM, Nathan Scott wrote: > Hi Dave, > > I'm seeing QA failures resulting from services on remote machines > being discovered by pmfind in tests 775 and 946. Should we have > a mode (global option?) of requesting discovery of local services > only? Or should we more aggressively filter these? > Hey Nathan, Finding remote services is what pmfind is all about, so I think that this is a good thing (tm). I think that the tests should be able to tolerate randomly discovered services on other machines. I ran into the same problem when working up a test for the new active probing. The solution ended up being more aggressive filtering. I'll have a look at these tests from the same point of view. Dave From brolley@redhat.com Wed May 28 13:39:01 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 368CD7F63 for ; Wed, 28 May 2014 13:39:01 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id D154AAC006 for ; Wed, 28 May 2014 11:39:00 -0700 (PDT) X-ASG-Debug-ID: 1401302336-04bdf0599e220f10001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id sdpABOHaW0aCKxCx for ; Wed, 28 May 2014 11:38:56 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIct9C022374 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 28 May 2014 14:38:56 -0400 Received: from [10.10.62.210] (vpn-62-210.rdu2.redhat.com [10.10.62.210]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIcs6k014460 for ; Wed, 28 May 2014 14:38:55 -0400 Message-ID: <53862DCC.20306@redhat.com> Date: Wed, 28 May 2014 14:41:16 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: __pmDiscoverServices()/pmfind Active Probing Tests and man Pages Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: __pmDiscoverServices()/pmfind Active Probing Tests and man Pages Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401302336 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Pushed to the brolley/dev branch of pcpfans: - man page updates for active probing - new qa tests for pmfind using active probing - make existing pmfind tests tolerant of PCP services running on remote hosts --------------------------------------------------------------------------------- commit 5bbfbb265c716af86a3b7f4b6df1af93b3ccbcc1 Author: Dave Brolley Date: Wed May 28 14:02:12 2014 -0400 Make pmfind qa tests tolerant of PCP services on other hosts on the network. - Filter out hits on all services - break test 776 into inet and ipv6 variants. New test 766 is inet and 776 is now ipv6. Only test one active interface. commit 619dca0925928751656990546e60d033e6071f43 Author: Dave Brolley Date: Tue May 27 15:38:51 2014 -0400 Updated man pages for pmfind(1) and pmdiscoverservices(3). commit 7ebb599a5f64b17bb3c3ce1be9bcd10aa026565b Author: Dave Brolley Date: Tue May 27 15:37:52 2014 -0400 Was searching for 'ifconfig' but not using the results of the search. D'uhh. commit 1cb149c4eb96afa993ea8487814e2bdd1b8cb061 Author: Dave Brolley Date: Tue May 27 15:12:23 2014 -0400 qa test 776: Allow for running pmproxy and pmwebd services. commit ae66495fb9b4742645ac5dd3dc56dc781ddac8c2 Author: Dave Brolley Date: Tue May 27 14:32:25 2014 -0400 New qa test 776: Tests -m probe=.... for pmfind. From brolley@redhat.com Wed May 28 13:40:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=3.0 required=5.0 tests=TVD_SUBJ_NUM_OBFU_MINFP autolearn=no version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8B2E67F63 for ; Wed, 28 May 2014 13:40:38 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 853188F8035 for ; Wed, 28 May 2014 11:40:35 -0700 (PDT) X-ASG-Debug-ID: 1401302431-04cb6c22b8214ff0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id RvQKCqUu4CcknUXN for ; Wed, 28 May 2014 11:40:31 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIeUhh028564 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 28 May 2014 14:40:30 -0400 Received: from [10.10.62.210] (vpn-62-210.rdu2.redhat.com [10.10.62.210]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIeUwY016255 for ; Wed, 28 May 2014 14:40:30 -0400 Message-ID: <53862E2C.4000706@redhat.com> Date: Wed, 28 May 2014 14:42:52 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Over-indexing bug in __pmFirstIpv6SubnetAddr Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: Over-indexing bug in __pmFirstIpv6SubnetAddr Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401302431 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 When the number of mask bits was 128, the code would erroneously index beyond the last byte of the address. Pushed to the brolley/dev branch of pcpfans ---------------------------------------------------------------------------------------------- commit 8d0520fddfb2089da7e3a2573c1933428df10c82 Author: Dave Brolley Date: Tue May 27 15:12:56 2014 -0400 __pmFirstIpv6SubnetAddr: Do not over index the address bytes. From brolley@redhat.com Wed May 28 13:42:38 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B66F57F50 for ; Wed, 28 May 2014 13:42:38 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id B1F7D304059 for ; Wed, 28 May 2014 11:42:38 -0700 (PDT) X-ASG-Debug-ID: 1401302557-04cbb02a12212620001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id rgkqiJtNtZLA2HCE for ; Wed, 28 May 2014 11:42:37 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIgavu024723 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 28 May 2014 14:42:37 -0400 Received: from [10.10.62.210] (vpn-62-210.rdu2.redhat.com [10.10.62.210]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4SIgZ37005250 for ; Wed, 28 May 2014 14:42:36 -0400 Message-ID: <53862EA9.3080601@redhat.com> Date: Wed, 28 May 2014 14:44:57 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: PCP Mailing List Subject: PCP Updates: Consolidate Code for Obtaining Port Numbers From the Environment and From Strings Content-Type: text/plain; charset=ISO-8859-1; format=flowed X-ASG-Orig-Subj: PCP Updates: Consolidate Code for Obtaining Port Numbers From the Environment and From Strings Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401302557 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 There was a lot of duplicated code dedicated to this. I've consolidated it into the new internal APIs described below. Pushed to the brolley/dev branch of pcpfans. -------------------------------------------------------------------------------------------------------------- commit 57736b9013bee5e2bbe3e9e7d68dfc1327589e60 Author: Dave Brolley Date: Mon May 26 10:15:13 2014 -0400 Use the new *AddPorts() APIs throughout as appropriate. commit 746504515ced5fc1557f946c71287bac4cce9ef6 Author: Dave Brolley Date: Fri May 23 14:11:30 2014 -0400 New internal API functions for collecting server port numbers. - extern int __pmServiceAddPorts(const char *, int **, int) _PCP_HIDDEN; determines port numbers for the named service. - extern int __pmPMCDAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmcd using the PMCD_PORT environment variable. - extern int __pmProxyAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmproxy using the PMPROXY_PORT environment variable. - extern int __pmWebdAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmwebd using the new PMWEBD_PORT environment variable. - extern int __pmAddPorts(const char *, int **, int) _PCP_HIDDEN; parses the given string of comma-separated port numbers. pmfind now uses these APIs to obtain the default port numbers for its supported services (all of the above). With this change, pmfind now supports multiple port numbers for a service when using the "probe" mechanism. From jeffpc@josefsipek.net Wed May 28 18:41:06 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EEFED7F5E for ; Wed, 28 May 2014 18:41:06 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id D93A38F8035 for ; Wed, 28 May 2014 16:41:03 -0700 (PDT) X-ASG-Debug-ID: 1401320462-04cbb050fc13b70001-S8gJnT Received: from josefsipek.net (josefsipek.net [64.9.206.49]) by cuda.sgi.com with ESMTP id fu7QrL3JX8LAVQPg for ; Wed, 28 May 2014 16:41:02 -0700 (PDT) X-Barracuda-Envelope-From: jeffpc@josefsipek.net X-Barracuda-Apparent-Source-IP: 64.9.206.49 Received: from meili.valhalla.31bits.net (c-98-209-117-250.hsd1.mi.comcast.net [98.209.117.250]) by josefsipek.net (Postfix) with ESMTPSA id 1E9A655654; Wed, 28 May 2014 19:41:02 -0400 (EDT) Date: Wed, 28 May 2014 19:40:59 -0400 From: Josef 'Jeff' Sipek To: Ken McDonell Cc: PCP Mailing List Subject: Re: [pcp] Dropping machines from my QA farm Message-ID: <20140528234058.GB1494@meili.valhalla.31bits.net> X-ASG-Orig-Subj: Re: [pcp] Dropping machines from my QA farm References: <53392E47.8060204@internode.on.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <53392E47.8060204@internode.on.net> User-Agent: Mutt/1.5.22 (2013-10-16) X-Barracuda-Connect: josefsipek.net[64.9.206.49] X-Barracuda-Start-Time: 1401320462 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6196 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- On Mon, Mar 31, 2014 at 07:58:47PM +1100, Ken McDonell wrote: > I intend to drop the following platforms from my QA Farm unless a reader on > this list can point to someone with a pulse who cares about them ... > > - opensolaris - never worked well and now no longer boots on my vm > - openindiana - after 4 hrs and 2 complete re-installs I cannot get it to > boot in my lifetime Whimper. Does this mean no more PCP packages for OI? (Yes, I'm replying way too late.) Jeff. -- Intellectuals solve problems; geniuses prevent them - Albert Einstein From nscott@redhat.com Wed May 28 18:49:20 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 8F0727F60 for ; Wed, 28 May 2014 18:49:20 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id 7683F8F8040 for ; Wed, 28 May 2014 16:49:19 -0700 (PDT) X-ASG-Debug-ID: 1401320958-04cb6c22b622e6a0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id NH6MDzbASFAZihY5 for ; Wed, 28 May 2014 16:49:18 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4SNn2DZ024489; Wed, 28 May 2014 19:49:02 -0400 Date: Wed, 28 May 2014 19:49:02 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: "Josef 'Jeff' Sipek" Cc: Ken McDonell , PCP Mailing List Message-ID: <1908562100.16842666.1401320942492.JavaMail.zimbra@redhat.com> In-Reply-To: <20140528234058.GB1494@meili.valhalla.31bits.net> References: <53392E47.8060204@internode.on.net> <20140528234058.GB1494@meili.valhalla.31bits.net> Subject: Re: [pcp] Dropping machines from my QA farm MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Dropping machines from my QA farm Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Dropping machines from my QA farm Thread-Index: Tvro+g6dPRsfMlENkSPYaUt0q5UqPg== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401320958 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6196 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header ----- Original Message ----- > On Mon, Mar 31, 2014 at 07:58:47PM +1100, Ken McDonell wrote: > > I intend to drop the following platforms from my QA Farm unless a reader on > > this list can point to someone with a pulse who cares about them ... > > > > - opensolaris - never worked well and now no longer boots on my vm > > - openindiana - after 4 hrs and 2 complete re-installs I cannot get it to > > boot in my lifetime > > Whimper. Does this mean no more PCP packages for OI? (Yes, I'm replying > way too late.) > I'm still building 'em & running latest bits on my OI machine here. /me checks - yeah, pcp-3.9.4 was built & is in the download area. I have not tried a Qt-enabled OI build though, so no gui bits there. cheers. -- Nathan From nscott@redhat.com Wed May 28 19:03:09 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 5833F7F60 for ; Wed, 28 May 2014 19:03:09 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C9353AC003 for ; Wed, 28 May 2014 17:03:08 -0700 (PDT) X-ASG-Debug-ID: 1401321783-04bdf059a023c6a0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id kxFPiueGRSa1DEYS for ; Wed, 28 May 2014 17:03:04 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4T033ld026258; Wed, 28 May 2014 20:03:03 -0400 Date: Wed, 28 May 2014 20:03:03 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> In-Reply-To: <5386075A.70505@redhat.com> References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> <5386075A.70505@redhat.com> Subject: Re: Service advertising versus QA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Service advertising versus QA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Service advertising versus QA Thread-Index: eTEf55iO4SJYcTbA0FEFdwKfVVKvwQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401321784 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6197 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ----- Original Message ----- > On 05/27/2014 11:45 PM, Nathan Scott wrote: > > Hi Dave, > > > > I'm seeing QA failures resulting from services on remote machines > > being discovered by pmfind in tests 775 and 946. Should we have > > a mode (global option?) of requesting discovery of local services > > only? Or should we more aggressively filter these? > > > Hey Nathan, > > Finding remote services is what pmfind is all about, so I think that > this is a good thing (tm). Heh, yep. > I think that the tests should be able to > tolerate randomly discovered services on other machines. I ran into the > same problem when working up a test for the new active probing. The > solution ended up being more aggressive filtering. I'll have a look at > these tests from the same point of view. OK, sounds good. In my case here, with the Avahi tests there's remote IP addresses in the output, so the qa/common.filter _host_to_ipaddr() function might prove handy - I guess we could pick out the local host IP that way, and discard all others? ( aaand that function looks like it needs some IPv6 love :] ). cheers. -- Nathan From nscott@redhat.com Wed May 28 20:16:11 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 12EC47F63 for ; Wed, 28 May 2014 20:16:11 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id DFF598F8068 for ; Wed, 28 May 2014 18:16:07 -0700 (PDT) X-ASG-Debug-ID: 1401326166-04cb6c22b7233e00001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id 0IYabbw4ZGTNVGyN for ; Wed, 28 May 2014 18:16:06 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4T1G3vq031124; Wed, 28 May 2014 21:16:03 -0400 Date: Wed, 28 May 2014 21:16:03 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> In-Reply-To: <20140528144433.GD4384@marquez.int.rhx> References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> <20140528144433.GD4384@marquez.int.rhx> Subject: Re: [pcp] python pmExtractValue segfault MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.12] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: python pmExtractValue segfault Thread-Index: 999pcL/DhxFN8WDK3Cnz0WWjcw2WJg== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401326166 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6197 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > Since pmNameInDomArchive was quite high up in my profiling > I cached it in a dictionary so that indom_cache[(i, j)] = indom_name. Nice. If we look to begin merging these APIs, pcp.pmcc has a MetricCache class, with by-name, by-PMID, and by-indom dictionaries, with the latter providing the same optimisation you're describing here. > This way I only look it up when the metric appears the first time, and > I shave off 40% of the time needed to parse this (the rest is dominated > by python casts and by pmExtractValue calls, for which there are less > obvious ways to improve). Is this a safe thing to do? Am I guaranteed > that the mapping (i, j)->indom_name will stay the same in an archive? > > Somehow I assume that is not the case (pmcd restart with new PMDA, etc.), > but maybe I'll get lucky ;) Heh, yes and no. PMDAs are required to make all efforts possible to ensure that the instance-ID-to-name mapping is stable. There's even a series of APIs available - pmdaCache(3) - to allow them to persist across PMDA restarted (even across reboots). However, there's always the corner cases. One example is per-process metrics - these use PIDs as the instance ID, which of course can be reused by the kernel and spring up afresh with a different process behind them at some later time. So, in general this is a good optimisation - but there are some cases (exceptional cases, definitely not the norm) where PMDAs are unable to come to the party. There are a number of tools that do insist on the stable mapping (or assume it), so its not a terrible thing on the part of your tool if you choose to keep this optimisation. cheers. -- Nathan From mgoodwin@redhat.com Thu May 29 02:47:28 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id E56167F72 for ; Thu, 29 May 2014 02:47:27 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 68367AC002 for ; Thu, 29 May 2014 00:47:24 -0700 (PDT) X-ASG-Debug-ID: 1401349642-04cb6c22b524a8b0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id NJFQqR8D32kUx3yH for ; Thu, 29 May 2014 00:47:23 -0700 (PDT) X-Barracuda-Envelope-From: mgoodwin@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4T7lMrF017787 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 29 May 2014 03:47:22 -0400 Received: from [10.64.50.2] (vpn1-50-2.bne.redhat.com [10.64.50.2]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4T7lKHJ016266 for ; Thu, 29 May 2014 03:47:21 -0400 Message-ID: <5386E607.2020007@redhat.com> Date: Thu, 29 May 2014 17:47:19 +1000 From: Mark Goodwin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: pcp Subject: pmcc.py bug? Content-Type: multipart/mixed; boundary="------------050605000301030204060603" X-ASG-Orig-Subj: pmcc.py bug? X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401349642 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 This is a multi-part message in MIME format. --------------050605000301030204060603 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit pmcc doesn't seem to update it's metric values after each fetch beyond the first, but I may be calling it incorrectly. Here's a simple program demonstrating the issue, and a simple patch to pmcc.py that fixes it (but introduces a memory leak?). So is this a bug or am I not using pmcc correctly? Thanks for any help ... Mark. --------------050605000301030204060603 Content-Type: text/x-python; name="test-counters-pmcc.py" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="test-counters-pmcc.py" #!/usr/bin/python import sys import time from pcp import pmapi from pcp import pmcc IDLE = "kernel.percpu.cpu.idle" METRICS = [ IDLE ] def curvals(group, name): return dict(map(lambda x: (x[1], x[2]), group[name].netValues)) def instlist(group, name): return sorted(dict(map(lambda x: (x[1], x[2]), group[name].netValues)).keys()) def report(g): c_idle = curvals(g, IDLE) for inst in instlist(g, IDLE): print inst, c_idle[inst] print if __name__ == '__main__': try: mgm = pmcc.MetricGroupManager() mgm["cpu"] = METRICS for i in range(10): mgm["cpu"].mgFetch() report(mgm["cpu"]) time.sleep(2) except pmapi.pmErr, error: print "Error: ", error.message() except KeyboardInterrupt: pass --------------050605000301030204060603 Content-Type: text/x-patch; name="pmcc.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pmcc.patch" diff --git a/src/python/pcp/pmcc.py b/src/python/pcp/pmcc.py index 02107ac..e5d5572 100644 --- a/src/python/pcp/pmcc.py +++ b/src/python/pcp/pmcc.py @@ -127,14 +127,12 @@ class Metric(object): def _R_netPrevValues(self): if not self._prevvset: return None - if type(self._netPrevValues) == type(None): - self._netPrevValues = self.computeValues(self._prevvset) + self._netPrevValues = self.computeValues(self._prevvset) return self._netPrevValues def _R_netValues(self): if not self._vset: return None - if type(self._netValues) == type(None): - self._netValues = self.computeValues(self._vset) + self._netValues = self.computeValues(self._vset) return self._netValues def _W_values(self, values): --------------050605000301030204060603-- From brolley@redhat.com Thu May 29 09:05:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CCFB97F6B for ; Thu, 29 May 2014 09:05:59 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id C94D7304059 for ; Thu, 29 May 2014 07:05:56 -0700 (PDT) X-ASG-Debug-ID: 1401372352-04cbb050fd4f9f0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id Wzn1lWQJSTLccGrM for ; Thu, 29 May 2014 07:05:52 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4TE5qOg016817 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 29 May 2014 10:05:52 -0400 Received: from [10.15.16.139] (dhcp-10-15-16-139.yyz.redhat.com [10.15.16.139]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4TE5odD022881; Thu, 29 May 2014 10:05:51 -0400 Message-ID: <53873F4B.8030208@redhat.com> Date: Thu, 29 May 2014 10:08:11 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: Service advertising versus QA References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> <5386075A.70505@redhat.com> <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: Service advertising versus QA In-Reply-To: <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401372352 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/28/2014 08:03 PM, Nathan Scott wrote: >> I think that the tests should be able to >> tolerate randomly discovered services on other machines. I ran into the >> same problem when working up a test for the new active probing. The >> solution ended up being more aggressive filtering. I'll have a look at >> these tests from the same point of view. > OK, sounds good. In my case here, with the Avahi tests there's remote > IP addresses in the output, so the qa/common.filter _host_to_ipaddr() > function might prove handy - I guess we could pick out the local host > IP that way, and discard all others? ( aaand that function looks like > it needs some IPv6 love :] ). > Since: - there could be an indeterminate number of remote services discovered - the host machine could have more than one active network interface - pmproxy and/or pmwebd services may or may not be running on the local machine at the time of the test I went the route of filtering out the urls completely and relying on the headers (e.g. "Discovered pmcd servers") and the exit code from pmfind for indication that results were found. Dave From brolley@redhat.com Thu May 29 10:55:58 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 08B667F77 for ; Thu, 29 May 2014 10:55:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id D16588F8050 for ; Thu, 29 May 2014 08:55:54 -0700 (PDT) X-ASG-Debug-ID: 1401378950-04bdf0599e2899e0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id 5uI0iV06O3yX6Phi for ; Thu, 29 May 2014 08:55:50 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4TFtnK1013157 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 29 May 2014 11:55:50 -0400 Received: from [10.15.16.139] (dhcp-10-15-16-139.yyz.redhat.com [10.15.16.139]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4TFtmQw000904 for ; Thu, 29 May 2014 11:55:48 -0400 Message-ID: <53875911.4090103@redhat.com> Date: Thu, 29 May 2014 11:58:09 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: pcp@oss.sgi.com Subject: Re: [pcp] PCP Updates: Consolidate Code for Obtaining Port Numbers From the Environment and From Strings References: <53862EA9.3080601@redhat.com> X-ASG-Orig-Subj: Re: [pcp] PCP Updates: Consolidate Code for Obtaining Port Numbers From the Environment and From Strings In-Reply-To: <53862EA9.3080601@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401378950 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 Some rework of the internal __pm*AddPorts() API functions based on irc comments from fche. In addition to the items addressed below, Frank was concerned about these functions (via __pmAddPorts) using __pmNoMem and not returning for memory allocation errors. He would prefer that -ENOMEM be returned, leaving the ultimate decision of whether to terminate up to the app. I left this as-is for now. Leaving things as they are accomplishes my goal of consolidating this code while leaving the behaviour of the callers unaffected. Also, this is an allocation of an additional 4 bytes. If it fails, it is unlikely that any app will be able to continue anyway. Frank also wondered about the layering of the API functions. __pmServiceAddPorts() is useful for applications like pmfind that don't directly know or care to know which service they are contacting. The __pmAddPorts() variants are for the actual clients or servers to use, since they know exactly who they are or who they are dealing with. They also encapsulate the source of the port information (i.e. environment variables). Finally __pmAddPorts() is the work horse used by all of the above. Pushed to the brolley/dev branch of pcpfans. Dave --------------------------------------------------------------------------------------- commit 83f5777e4f713b8614f549987d4fd25085c6910a Author: Dave Brolley Date: Thu May 29 11:44:20 2014 -0400 Some rework of the internal __pm*AddPorts() API functions. - Commented on the caller's responsibility for freeing (re)allocated memory. - Eliminated two obsolete static 'first_time' flags. From michele@acksyn.org Thu May 29 16:14:31 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 93F687F77 for ; Thu, 29 May 2014 16:14:31 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id 17657AC005 for ; Thu, 29 May 2014 14:14:27 -0700 (PDT) X-ASG-Debug-ID: 1401398062-04cb6c22b8294ef0001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id 0i68riHmI5A7E4Eu for ; Thu, 29 May 2014 14:14:22 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id ED1F527C10; Thu, 29 May 2014 17:14:21 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1401398061; bh=ok8DHMN4bly/7aJ9X6ygcRSdzpa/ql0j+HV2im0pEYk=; b=CoPdF5gDoTcl bleXbYyAgQStzN02uBY1cZYq8m/76bXAbCKVNNFYc3fe3x2RM+ryrykh/DUCDKuN ZmjOuuK7DooD0cV8DtWVTCSsmxiK4Ts1xJwPs4LLDyo+SGf/Gnof3+LulWUJH2XB /ngd9pF64nmQzlypY2N5WyITsP04Zqk= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id yU6Bo9yrcb11; Thu, 29 May 2014 17:14:21 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id AD64527B65; Thu, 29 May 2014 17:14:20 -0400 (EDT) Date: Thu, 29 May 2014 22:14:19 +0100 From: Michele Baldessari To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: [pcp] python pmExtractValue segfault Message-ID: <20140529211419.GA29113@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> <20140528144433.GD4384@marquez.int.rhx> <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401398062 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6221 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Nathan, On Wed, May 28, 2014 at 09:16:03PM -0400, Nathan Scott wrote: > > Since pmNameInDomArchive was quite high up in my profiling > > I cached it in a dictionary so that indom_cache[(i, j)] = indom_name. > > Nice. If we look to begin merging these APIs, pcp.pmcc has a MetricCache > class, with by-name, by-PMID, and by-indom dictionaries, with the latter > providing the same optimisation you're describing here. > > > This way I only look it up when the metric appears the first time, and > > I shave off 40% of the time needed to parse this (the rest is dominated > > by python casts and by pmExtractValue calls, for which there are less > > obvious ways to improve). Is this a safe thing to do? Am I guaranteed > > that the mapping (i, j)->indom_name will stay the same in an archive? > > > > Somehow I assume that is not the case (pmcd restart with new PMDA, etc.), > > but maybe I'll get lucky ;) > > Heh, yes and no. PMDAs are required to make all efforts possible to > ensure that the instance-ID-to-name mapping is stable. There's even > a series of APIs available - pmdaCache(3) - to allow them to persist > across PMDA restarted (even across reboots). > > However, there's always the corner cases. One example is per-process > metrics - these use PIDs as the instance ID, which of course can be > reused by the kernel and spring up afresh with a different process > behind them at some later time. > > So, in general this is a good optimisation - but there are some cases > (exceptional cases, definitely not the norm) where PMDAs are unable to > come to the party. There are a number of tools that do insist on the > stable mapping (or assume it), so its not a terrible thing on the part > of your tool if you choose to keep this optimisation. ah, I see. Thanks for taking the time to explain this to me. It makes sence.I think I'll take correctness at all costs over speed in this case. Right now this is where I am at with the output: http://acksyn.org/software/pcp2pdf/output.pdf More or less it covers what I had in mind. I'll now work on a pcp branch and make sure I use or extend the pmcc class as needed, move to pmOptions and add the appropriate qa tests. I'll ping you to take a look once it's ready, if that's okay. Thanks and regards, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From kenj@internode.on.net Thu May 29 19:20:39 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=HTML_MESSAGE autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 3DD9329DFF for ; Thu, 29 May 2014 19:20:39 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay3.corp.sgi.com (Postfix) with ESMTP id AD0E0AC001 for ; Thu, 29 May 2014 17:20:35 -0700 (PDT) X-ASG-Debug-ID: 1401409228-04cb6c22b82a3090001-S8gJnT Received: from ipmail06.adl2.internode.on.net (ipmail06.adl2.internode.on.net [150.101.137.129]) by cuda.sgi.com with ESMTP id 9nLen9C7OyD6uG9G for ; Thu, 29 May 2014 17:20:29 -0700 (PDT) X-Barracuda-Envelope-From: kenj@internode.on.net X-Barracuda-Apparent-Source-IP: 150.101.137.129 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhYuAJfNh1O1HRvAPGdsb2JhbAANTIcchDe7EAMCARmBBgMBAQEBOIJaAQEBBCNLCwwECwQNBAEBASoCAgJBDAgGARK6CXelGReOUgcGgm+BSwSwaA Received: from 192-27-29-181.fibertel.com.ar (HELO [10.0.34.137]) ([181.29.27.192]) by ipmail06.adl2.internode.on.net with ESMTP; 30 May 2014 09:50:26 +0930 Date: Fri, 30 May 2014 10:20:21 +1000 From: Ken McDonell To: Josef 'Jeff' Sipek ,Nathan Scott Cc: PCP Mailing List Message-ID: <1e1efd44-4756-408d-b53f-5d86bec2a7ff.maildroid@localhost> In-Reply-To: <1908562100.16842666.1401320942492.JavaMail.zimbra@redhat.com> References: <53392E47.8060204@internode.on.net> <20140528234058.GB1494@meili.valhalla.31bits.net> <1908562100.16842666.1401320942492.JavaMail.zimbra@redhat.com> Subject: Re: [pcp] Dropping machines from my QA farm MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Dropping machines from my QA farm Content-Type: multipart/alternative; boundary="----=_Part_2_1100849968.1401409222059" X-Barracuda-Connect: ipmail06.adl2.internode.on.net[150.101.137.129] X-Barracuda-Start-Time: 1401409229 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message ------=_Part_2_1100849968.1401409222059 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 TmF0aGFuLCB3aGF0J3MgeW91ciBWTSBjb25maWcgZm9yIHRoZSBPSSBpbnN0YWxsLiAgSWYgSSBj b3VsZCBnZXQgdGhlIFZNIHRvIGJvb3QgSSdkIGJlIGhhcHB5IHRvIGNvbnRpbnVlIHRlc3Rpbmcu CgoKCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCkZyb206IE5hdGhhbiBTY290dCA8bmF0aGFu c0ByZWRoYXQuY29tPgpUbzogSm9zZWYgJ0plZmYnIFNpcGVrIDxqZWZmcGNAam9zZWZzaXBlay5u ZXQ+CkNjOiBLZW4gTWNEb25lbGwgPGtlbmpAaW50ZXJub2RlLm9uLm5ldD4sIFBDUCBNYWlsaW5n IExpc3QgPHBjcEBvc3Muc2dpLmNvbT4KU2VudDogVGh1LCAyOSBNYXkgMjAxNCA5OjQ5ClN1Ympl Y3Q6IFJlOiBbcGNwXSBEcm9wcGluZyBtYWNoaW5lcyBmcm9tIG15IFFBIGZhcm0KCgoKLS0tLS0g T3JpZ2luYWwgTWVzc2FnZSAtLS0tLQo+IE9uIE1vbiwgTWFyIDMxLCAyMDE0IGF0IDA3OjU4OjQ3 UE0gKzExMDAsIEtlbiBNY0RvbmVsbCB3cm90ZToKPiA+IEkgaW50ZW5kIHRvIGRyb3AgdGhlIGZv bGxvd2luZyBwbGF0Zm9ybXMgZnJvbSBteSBRQSBGYXJtIHVubGVzcyBhIHJlYWRlciBvbgo+ID4g dGhpcyBsaXN0IGNhbiBwb2ludCB0byBzb21lb25lIHdpdGggYSBwdWxzZSB3aG8gY2FyZXMgYWJv dXQgdGhlbSAuLi4KPiA+IAo+ID4gLSBvcGVuc29sYXJpcyAtIG5ldmVyIHdvcmtlZCB3ZWxsIGFu ZCBub3cgbm8gbG9uZ2VyIGJvb3RzIG9uIG15IHZtCj4gPiAtIG9wZW5pbmRpYW5hIC0gYWZ0ZXIg NCBocnMgYW5kIDIgY29tcGxldGUgcmUtaW5zdGFsbHMgSSBjYW5ub3QgZ2V0IGl0IHRvCj4gPiBi b290IGluIG15IGxpZmV0aW1lCj4gCj4gV2hpbXBlci4gIERvZXMgdGhpcyBtZWFuIG5vIG1vcmUg UENQIHBhY2thZ2VzIGZvciBPST8gIChZZXMsIEknbSByZXBseWluZwo+IHdheSB0b28gbGF0ZS4p Cj4gCgpJJ20gc3RpbGwgYnVpbGRpbmcgJ2VtICYgcnVubmluZyBsYXRlc3QgYml0cyBvbiBteSBP SSBtYWNoaW5lIGhlcmUuCi9tZSBjaGVja3MgLSB5ZWFoLCBwY3AtMy45LjQgd2FzIGJ1aWx0ICYg aXMgaW4gdGhlIGRvd25sb2FkIGFyZWEuICBJCmhhdmUgbm90IHRyaWVkIGEgUXQtZW5hYmxlZCBP SSBidWlsZCB0aG91Z2gsIHNvIG5vIGd1aSBiaXRzIHRoZXJlLgoKY2hlZXJzLgoKLS0KTmF0aGFu Cg== ------=_Part_2_1100849968.1401409222059 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PGRpdj5OYXRoYW4sIHdoYXQncyB5b3VyIFZNIGNvbmZpZyBmb3IgdGhlIE9JIGluc3RhbGwuJm5i c3A7IElmIEkgY291bGQgZ2V0IHRoZSBWTSB0byBib290IEknZCBiZSBoYXBweSB0byBjb250aW51 ZSB0ZXN0aW5nLjxici8+Cjxici8+CiA8YnIvPjxici8+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS08YnIvPkZyb206IE5hdGhhbiBTY290dCAmbHQ7bmF0aGFuc0ByZWRoYXQuY29tJmd0Ozxici8+ VG86IEpvc2VmICYjMDM5O0plZmYmIzAzOTsgU2lwZWsgJmx0O2plZmZwY0Bqb3NlZnNpcGVrLm5l dCZndDs8YnIvPkNjOiBLZW4gTWNEb25lbGwgJmx0O2tlbmpAaW50ZXJub2RlLm9uLm5ldCZndDss IFBDUCBNYWlsaW5nIExpc3QgJmx0O3BjcEBvc3Muc2dpLmNvbSZndDs8YnIvPlNlbnQ6IFRodSwg MjkgTWF5IDIwMTQgOTo0OTxici8+U3ViamVjdDogUmU6IFtwY3BdIERyb3BwaW5nIG1hY2hpbmVz IGZyb20gbXkgUUEgZmFybTxici8+PGJyLz48L2Rpdj4mIzEzOzxici8+CiYjMTM7PGJyLz4KLS0t LS0gT3JpZ2luYWwgTWVzc2FnZSAtLS0tLSYjMTM7PGJyLz4KJmd0OyBPbiBNb24sIE1hciAzMSwg MjAxNCBhdCAwNzo1ODo0N1BNICsxMTAwLCBLZW4gTWNEb25lbGwgd3JvdGU6JiMxMzs8YnIvPgom Z3Q7ICZndDsgSSBpbnRlbmQgdG8gZHJvcCB0aGUgZm9sbG93aW5nIHBsYXRmb3JtcyBmcm9tIG15 IFFBIEZhcm0gdW5sZXNzIGEgcmVhZGVyIG9uJiMxMzs8YnIvPgomZ3Q7ICZndDsgdGhpcyBsaXN0 IGNhbiBwb2ludCB0byBzb21lb25lIHdpdGggYSBwdWxzZSB3aG8gY2FyZXMgYWJvdXQgdGhlbSAu Li4mIzEzOzxici8+CiZndDsgJmd0OyAmIzEzOzxici8+CiZndDsgJmd0OyAtIG9wZW5zb2xhcmlz IC0gbmV2ZXIgd29ya2VkIHdlbGwgYW5kIG5vdyBubyBsb25nZXIgYm9vdHMgb24gbXkgdm0mIzEz Ozxici8+CiZndDsgJmd0OyAtIG9wZW5pbmRpYW5hIC0gYWZ0ZXIgNCBocnMgYW5kIDIgY29tcGxl dGUgcmUtaW5zdGFsbHMgSSBjYW5ub3QgZ2V0IGl0IHRvJiMxMzs8YnIvPgomZ3Q7ICZndDsgYm9v dCBpbiBteSBsaWZldGltZSYjMTM7PGJyLz4KJmd0OyAmIzEzOzxici8+CiZndDsgV2hpbXBlci4m bmJzcDsgRG9lcyB0aGlzIG1lYW4gbm8gbW9yZSBQQ1AgcGFja2FnZXMgZm9yIE9JPyZuYnNwOyAo WWVzLCBJJ20gcmVwbHlpbmcmIzEzOzxici8+CiZndDsgd2F5IHRvbyBsYXRlLikmIzEzOzxici8+ CiZndDsgJiMxMzs8YnIvPgomIzEzOzxici8+CkknbSBzdGlsbCBidWlsZGluZyAnZW0gJmFtcDsg cnVubmluZyBsYXRlc3QgYml0cyBvbiBteSBPSSBtYWNoaW5lIGhlcmUuJiMxMzs8YnIvPgovbWUg Y2hlY2tzIC0geWVhaCwgcGNwLTMuOS40IHdhcyBidWlsdCAmYW1wOyBpcyBpbiB0aGUgZG93bmxv YWQgYXJlYS4mbmJzcDsgSSYjMTM7PGJyLz4KaGF2ZSBub3QgdHJpZWQgYSBRdC1lbmFibGVkIE9J IGJ1aWxkIHRob3VnaCwgc28gbm8gZ3VpIGJpdHMgdGhlcmUuJiMxMzs8YnIvPgomIzEzOzxici8+ CmNoZWVycy4mIzEzOzxici8+CiYjMTM7PGJyLz4KLS0mIzEzOzxici8+Ck5hdGhhbiYjMTM7PGJy Lz4K ------=_Part_2_1100849968.1401409222059-- From nscott@redhat.com Thu May 29 19:40:53 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id EEA037F6D for ; Thu, 29 May 2014 19:40:52 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id 7FD93AC003 for ; Thu, 29 May 2014 17:40:52 -0700 (PDT) X-ASG-Debug-ID: 1401410449-04cbb050fd8e330001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id 8HsTGcuknj8BVQKu for ; Thu, 29 May 2014 17:40:50 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4U0emBq012801; Thu, 29 May 2014 20:40:48 -0400 Date: Thu, 29 May 2014 20:40:48 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <1918492899.17482214.1401410448076.JavaMail.zimbra@redhat.com> In-Reply-To: <20140529211419.GA29113@marquez.int.rhx> References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> <20140528144433.GD4384@marquez.int.rhx> <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> <20140529211419.GA29113@marquez.int.rhx> Subject: Re: [pcp] python pmExtractValue segfault MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: python pmExtractValue segfault Thread-Index: 7Ex3U9vkAnMNwMCdp4JuoYxlmlfDQA== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401410450 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Michele, ----- Original Message ----- > [...] > Right now this is where I am at with the output: > http://acksyn.org/software/pcp2pdf/output.pdf Very nice! You could bottle that up and sell it, your fortune awaits. ;) Maybe an OpenStack PCP log upload service, pdf generation on the backend, 5c a pop and wait for the millions to roll in? Throw in some annoying use of AdWords, and you'll be retiring in no time. :) > More or less it covers what I had in mind. I'll now work on a pcp branch > and make sure I use or extend the pmcc class as needed, move to > pmOptions and add the appropriate qa tests. I'll ping you to take a look > once it's ready, if that's okay. Sure thing, sounds perfect. cheers. -- Nathan From nscott@redhat.com Thu May 29 19:45:13 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id EC3E07F72 for ; Thu, 29 May 2014 19:45:13 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay1.corp.sgi.com (Postfix) with ESMTP id CC1B38F8049 for ; Thu, 29 May 2014 17:45:13 -0700 (PDT) X-ASG-Debug-ID: 1401410711-04cb6c22b52a4c10001-S8gJnT Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by cuda.sgi.com with ESMTP id exYOZu6qxjPut9Ql for ; Thu, 29 May 2014 17:45:12 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.24 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4U0jBJ4015071; Thu, 29 May 2014 20:45:11 -0400 Date: Thu, 29 May 2014 20:45:11 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Mark Goodwin Cc: pcp Message-ID: <1882262967.17482874.1401410711577.JavaMail.zimbra@redhat.com> In-Reply-To: <5386E607.2020007@redhat.com> References: <5386E607.2020007@redhat.com> Subject: Re: [pcp] pmcc.py bug? MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] pmcc.py bug? Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pmcc.py bug? Thread-Index: Emjy5twpwf5BsODV6Du9Lt0dD3KqeQ== X-Barracuda-Connect: mx3-phx2.redhat.com[209.132.183.24] X-Barracuda-Start-Time: 1401410711 X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain Hi Mark, ----- Original Message ----- > pmcc doesn't seem to update it's metric values after each fetch beyond > the first, but I may be calling it incorrectly. Here's a simple program > demonstrating the issue, and a simple patch to pmcc.py that fixes it > (but introduces a memory leak?). So is this a bug or am I not using pmcc > correctly? Thanks for any help ... Mark. Sorry, got distracted yesterday - I'm seeing similar things, will dig into it some today. In happy news, I found the pmOptions stuff Just Works (tm) with pmcc cos MetricCache sub-classes pmContext - I'll post a new QA script soon that shows an example use case. cheers. -- Nathan From nscott@redhat.com Thu May 29 20:05:58 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 2B2ED7F76 for ; Thu, 29 May 2014 20:05:58 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay3.corp.sgi.com (Postfix) with ESMTP id C7772AC003 for ; Thu, 29 May 2014 18:05:54 -0700 (PDT) X-ASG-Debug-ID: 1401411949-04bdf0599e2c7380001-S8gJnT Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by cuda.sgi.com with ESMTP id MwZDvYHEJFgDQqXF for ; Thu, 29 May 2014 18:05:50 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.39 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4U15YWD017710; Thu, 29 May 2014 21:05:34 -0400 Date: Thu, 29 May 2014 21:05:33 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Ken McDonell Cc: "Josef 'Jeff' Sipek" , PCP Mailing List Message-ID: <2097678294.17486130.1401411933970.JavaMail.zimbra@redhat.com> In-Reply-To: <1e1efd44-4756-408d-b53f-5d86bec2a7ff.maildroid@localhost> References: <53392E47.8060204@internode.on.net> <20140528234058.GB1494@meili.valhalla.31bits.net> <1908562100.16842666.1401320942492.JavaMail.zimbra@redhat.com> <1e1efd44-4756-408d-b53f-5d86bec2a7ff.maildroid@localhost> Subject: Re: [pcp] Dropping machines from my QA farm MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] Dropping machines from my QA farm Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Dropping machines from my QA farm Thread-Index: 9HvFzMqxRKV/kMkJKXoeFZeUBuKwXw== X-Barracuda-Connect: mx6-phx2.redhat.com[209.132.183.39] X-Barracuda-Start-Time: 1401411950 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6227 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Hi Ken, ----- Original Message ----- > Nathan, what's your VM config for the OI install. If I could get the VM to > boot I'd be happy to continue testing. I'm using oi-dev-151a8-live-x86.iso downloaded from the OI site several months back, as a guest on a vanilla RHEL6 KVM setup. Not sure there was much beyond that I can remember doing specially - using gcc, not the Solaris compiler ... that was it I think. Rest was just pkgadd for flex, yacc and other basic tool chain needs, and Makepkgs for the win. cheers. ps: TallPaul wanted to know if you found Paddington Bear and if you could make your latest WIP pmview available somewhere please that would be great. -- Nathan From nscott@redhat.com Fri May 30 02:14:59 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 1718B7F47 for ; Fri, 30 May 2014 02:14:59 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay1.corp.sgi.com (Postfix) with ESMTP id B8B048F8037 for ; Fri, 30 May 2014 00:14:55 -0700 (PDT) X-ASG-Debug-ID: 1401434086-04bdf059a02dd1e0001-S8gJnT Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by cuda.sgi.com with ESMTP id sGbZ6h8RB2wT2hES for ; Fri, 30 May 2014 00:14:47 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.37 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4U7EkUF013004 for ; Fri, 30 May 2014 03:14:46 -0400 Date: Fri, 30 May 2014 03:14:46 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: pcp@oss.sgi.com Message-ID: <1846491209.17574108.1401434086122.JavaMail.zimbra@redhat.com> In-Reply-To: <853844053.17573382.1401433965429.JavaMail.zimbra@redhat.com> Subject: pcp updates: discovery (dave), python (stan & self.), misc coverity & other fixes MIME-Version: 1.0 X-ASG-Orig-Subj: pcp updates: discovery (dave), python (stan & self.), misc coverity & other fixes Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: pcp updates: discovery (dave), python (stan & self.), misc coverity & other fixes Thread-Index: Gxnwe8tvqKiEih7WS3BeK0RUtGT1pw== X-Barracuda-Connect: mx5-phx2.redhat.com[209.132.183.37] X-Barracuda-Start-Time: 1401434086 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6233 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... Changes committed to git://git.performancecopilot.org/pcp.git dev build/rpm/fedora.spec | 7=20 config.mingw | 8=20 configure | 213 +++-- configure.in | 197 +++-- debian/changelog | 2=20 man/man1/pmfind.1 | 32=20 man/man3/pmdiscoverservices.3 | 35=20 qa/722 | 50 - qa/766 | 88 ++ qa/766.out | 13=20 qa/775 | 16=20 qa/775.out | 8=20 qa/776 | 244 ++++-- qa/776.out | 61 - qa/946 | 16=20 qa/946.out | 8=20 qa/group | 2=20 src/include/pcp/config.h.in | 1=20 src/include/pcp/impl.h | 4=20 src/libpcp/src/GNUmakefile | 4=20 src/libpcp/src/auxconnect.c | 213 ++++- src/libpcp/src/auxserver.c | 196 ++++- src/libpcp/src/avahi.c | 4=20 src/libpcp/src/check-statics | 21=20 src/libpcp/src/connect.c | 61 - src/libpcp/src/discovery.c | 82 +- src/libpcp/src/internal.h | 13=20 src/libpcp/src/logconnect.c | 2=20 src/libpcp/src/probe.c | 1134 ++++++++++++++++++++++---= ----- src/libpcp/src/probe.h | 19=20 src/libpcp/src/secureconnect.c | 183 +++- src/libpcp_fault/src/GNUmakefile | 4=20 src/libpcp_qwt/src/qwt_picker_machine.cpp | 1=20 src/libpcp_qwt/src/qwt_plot_histogram.cpp | 5=20 src/pmatop/pmatop.py | 86 +- src/pmchart/main.cpp | 9=20 src/pmcollectl/pmcollectl.py | 16=20 src/pmfind/pmfind.c | 2=20 src/pmns/stdpmid.pcp | 2=20 src/pmtime/main.cpp | 9=20 src/python/pcp/pmapi.py | 61 + src/python/pcp/pmcc.py | 10=20 src/python/pmapi.c | 3=20 43 files changed, 2234 insertions(+), 911 deletions(-) commit e63315b9331f367789fe271c9806de0ff70ede9c Author: Nathan Scott Date: Fri May 30 17:07:45 2014 +1000 Discovery tests - deterministic output with remote advertisers commit 66c74314672df80b6d525d0928fef0796d7a2fc2 Author: Nathan Scott Date: Fri May 30 17:06:31 2014 +1000 Check for null return on a libpcp strdup, fail it consistently commit 510a11dc7a1199eeab48c57ff1efef6583961407 Author: Nathan Scott Date: Fri May 30 17:05:55 2014 +1000 Fix a little typo on the pmfind(1) man page commit bbc566873e3a10984e3cae9d436599cc44da9edd Merge: 2b8663d 83f5777 Author: Nathan Scott Date: Fri May 30 13:53:11 2014 +1000 Merge branch 'brolley/dev' of ../pcpfans into brolley-merge commit 2b8663d2e1138353b8496d7696907e3887b83859 Merge: d8a42b1 bc7942e Author: Nathan Scott Date: Fri May 30 13:49:17 2014 +1000 Merge branch 'scox/dev' of ../pcpfans into scox-merge commit d8a42b1f8fad0188d5e743e4efff62e441ad62cc Author: Nathan Scott Date: Fri May 30 13:43:26 2014 +1000 Fix a couple of memory leaks in the python C wrapper =20 Coverity scanning found a couple of pmapi.c memleaks in the python C wrapper, trivially fixed. Overdue for some python API valgrind testing, added to the eternal to-do list. commit 9543d27f7fc4fb6261975ae1452bb2fc334be3c0 Author: Nathan Scott Date: Fri May 30 13:37:55 2014 +1000 Fix a potential uninitialised sts return code in libpcp =20 Coverity scanning found a path where __pmConnectLogger could end up passing an uninitialised sts variable back to the caller. commit b18f98882b676ade463f125baf52c7f7f4646247 Author: Nathan Scott Date: Fri May 30 13:34:06 2014 +1000 Reserve domain numbers for planned papi and perf PMDAs commit ff200a6d4920e67cd0a08148b4b79eaf926e1d1b Author: Nathan Scott Date: Fri May 30 13:31:19 2014 +1000 Add a missed break statement in Qwt picker events commit 9d114ccbbe6d6af01c843e00e4cec6f27d0c39e8 Author: Nathan Scott Date: Fri May 30 13:29:43 2014 +1000 Fix a couple of potential putenv on null pointers =20 Coverity scanning found a couple of places (pmtime/pmchart) where a null pointer from a failed strdup might be putenv'd - ensure we do not do that. commit ec8c7d74ba8ffeb7ec27249f95e7395db1dd56b0 Author: Nathan Scott Date: Fri May 30 13:21:35 2014 +1000 Merge back a couple of spec changes from other build trees =20 Ensure all of the tutorial pieces end up in the pcp-doc package where nature intended (not pcp-libs-devel), switch Qt builds on (accidently off somehow) and point the finger at Dave for 3.9.5 RPM packaging (after earlier discussion). commit bc7942ed10d5190866bfb2a5b2fbe630edfa5d6a Author: Stan Cox Date: Thu May 29 21:36:51 2014 -0400 Handle curses errors gracefully. =20 * pmatop.py (main): Handle curses.error commit 51b06c27e9fde381a6b907859101c6d36bce1614 Author: Stan Cox Date: Thu May 29 21:35:09 2014 -0400 Revert to Fix pmatop now in terms of sub-second recording commit 83f5777e4f713b8614f549987d4fd25085c6910a Author: Dave Brolley Date: Thu May 29 11:44:20 2014 -0400 Some rework of the internal __pm*AddPorts() API functions. =20 - Commented on the caller's responsibility for freeing (re)allocated memory. - Eliminated two obsolete static 'first_time' flags. commit 0f68018d06fe9cd574cad13a4731ea9f8fb58b55 Author: Nathan Scott Date: Thu May 29 16:47:14 2014 +1000 Dodge compiler-generated signed overflow bullet from Qwt =20 Avoid a possible signed integer overflow in : /usr/include/QtCore/qvector.h: In member function =E2=80=98void QwtPlot= Histogram::flushPolygon(QPainter*, double, QPolygonF&) const=E2=80=99: /usr/include/QtCore/qvector.h:330: warning: assuming signed overflow do= es not occur when assuming that (X - c) <=3D X is always true =20 Looks like Qwt 6.1 has reworked this area significantly, and the error will also be resolved on our next upgrade - but in the interim, fix it locally. commit 150d62bc4bdae3f6562bb922b48553efa63d6873 Merge: 1b08023 bcc9eb6 Author: Stan Cox Date: Wed May 28 22:42:45 2014 -0400 Merge branch 'dev' into scox/dev =20 Conflicts: =09src/pmatop/pmatop.py commit 63a9214beef64aed9bc58f185f592fdf346e0466 Merge: 5bbfbb2 bcc9eb6 Author: Dave Brolley Date: Wed May 28 14:07:08 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit 5bbfbb265c716af86a3b7f4b6df1af93b3ccbcc1 Author: Dave Brolley Date: Wed May 28 14:02:12 2014 -0400 Make pmfind qa tests tolerant of PCP services on other hosts on the net= work. =20 - Filter out hits on all services - break test 776 into inet and ipv6 variants. New test 766 is inet and 776 is now ipv6. Only test one active interface. commit bcc9eb6c99519ce9ac4d60a6ae37ce82418e49e3 Author: Nathan Scott Date: Wed May 28 17:57:06 2014 +1000 Fix pmatop now in terms of sub-second recording =20 pmatop contains some duplicated code from pmcollectl (or vice-versa) related to archive recording - also contains the same bugs fixed recently in pmcollect wrt recording for less than a second. Make the code the same again, and make a note to refactor this into the convenience classes soon also. =20 This code, and pmcollectl, now make use of the new timeval method for sleeping, and both are simpler as a result. =20 Update qa/722 to make use of very short sampling intervals to exercise this change (and complete more quickly too). commit cc4ea9639afd060930aaaaa50e6e9664f9b113e2 Author: Nathan Scott Date: Wed May 28 17:51:13 2014 +1000 Improvements in python timeval/metricspec error handling =20 Currently the python API has static methods on the pmContext class allowing timeval and metricspec creation via the PMAPI pmParseTimeInterval and pmParseMetricSpec interfaces. We've slightly botched the error handling however, and these calls return a tuple with (result,errstr). This is not a sensible strategy, since the introduction of pmErr exceptions. =20 So, make the most of it and provide a better interface that callers can use via new methods on the existing timeval and MetricSpec classes. The old, compat code simply calls the new methods, and (continues to) returns an empty string for the success case. We also tack the error message onto the exception for improved error handling, which was overlooked last time through. =20 Existing tests exercise the compat case, and pmcollectl and pmatop will be updated to use the new class methods. commit 08e57c9aae3dc1b825fa1eb73e0252992bf727cc Author: Nathan Scott Date: Wed May 28 10:04:16 2014 +1000 Initial steps in MinGW64 cross-compilation from Fedora 20 commit 1b080237d105642d16bcd9537e021fcab035eb00 Author: Stan Cox Date: Tue May 27 17:01:16 2014 -0400 Convert scale of extracted metric values. =20 * pmcc.py (computeValues): Call pmConvScale on extracted value. commit 619dca0925928751656990546e60d033e6071f43 Author: Dave Brolley Date: Tue May 27 15:38:51 2014 -0400 Updated man pages for pmfind(1) and pmdiscoverservices(3). commit 7ebb599a5f64b17bb3c3ce1be9bcd10aa026565b Author: Dave Brolley Date: Tue May 27 15:37:52 2014 -0400 Was searching for 'ifconfig' but not using the results of the search. =20 D'uhh. commit 8d0520fddfb2089da7e3a2573c1933428df10c82 Author: Dave Brolley Date: Tue May 27 15:12:56 2014 -0400 __pmFirstIpv6SubnetAddr: Do not over index the address bytes. commit 1cb149c4eb96afa993ea8487814e2bdd1b8cb061 Author: Dave Brolley Date: Tue May 27 15:12:23 2014 -0400 qa test 776: Allow for running pmproxy and pmwebd services. commit ae66495fb9b4742645ac5dd3dc56dc781ddac8c2 Author: Dave Brolley Date: Tue May 27 14:32:25 2014 -0400 New qa test 776: Tests -m probe=3D.... for pmfind. commit 77377f219088da3ff75c254806613830e9545ee8 Author: Stan Cox Date: Tue May 27 10:50:55 2014 -0400 Handle curses problems gracefully. =20 * pmatop.py (main): Catch curses.error. (record): Mimic pmcollectl recording behavior. commit a3866d20d78b77ccc960565f94366825b15db25c Merge: 57736b9 592f252 Author: Dave Brolley Date: Mon May 26 10:16:06 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit 57736b9013bee5e2bbe3e9e7d68dfc1327589e60 Author: Dave Brolley Date: Mon May 26 10:15:13 2014 -0400 Use the new *AddPorts() APIs throughout as appropriate. commit 746504515ced5fc1557f946c71287bac4cce9ef6 Author: Dave Brolley Date: Fri May 23 14:11:30 2014 -0400 New internal API functions for collecting server port numbers. =20 - extern int __pmServiceAddPorts(const char *, int **, int) _PCP_HIDDEN= ; determines port numbers for the named service. =20 - extern int __pmPMCDAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmcd using the PMCD_PORT environment variable. =20 - extern int __pmProxyAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmproxy using the PMPROXY_PORT environment variable. =20 - extern int __pmWebdAddPorts(int **, int) _PCP_HIDDEN; determines port numbers for pmwebd using the new PMWEBD_PORT environment variable. =20 - extern int __pmAddPorts(const char *, int **, int) _PCP_HIDDEN; parses the given string of comma-separated port numbers. =20 pmfind now uses these APIs to obtain the default port numbers for its supported services (all of the above). With this change, pmfind now supports multiple port numbers for a service when using the "probe" mechanism. commit db06f51eb56683cf6720f9f00c518b494bb1aba5 Author: Dave Brolley Date: Thu May 22 15:39:36 2014 -0400 Service discovery via active probing for pmproxy and pmwebd. commit 4bb7a3da430545d03ee34fbc2ec764e19301e89f Author: Dave Brolley Date: Thu May 22 14:48:34 2014 -0400 Active service probing rework based on comments from nathans. commit ec362bf1a289f12d32461466e216db9a024c5f43 Merge: 556ed04 be5f8a8 Author: Dave Brolley Date: Thu May 22 11:16:29 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev =20 Conflicts: =09src/libpcp/src/avahi.c =09src/libpcp/src/discovery.c =09src/pmfind/pmfind.c commit 556ed040eec1a7650abf422162f1a1e51096b13e Merge: 95afe9e 53419be Author: Dave Brolley Date: Tue May 20 14:02:59 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit 95afe9e669087d3eefb9f6c93dd19690225b44c3 Merge: 010dcd3 22da97f Author: Dave Brolley Date: Fri May 16 11:09:47 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit 010dcd3ba8ef7f10dcc0e1763cb30424cf7f63ca Merge: d4e3baa 57a6755 Author: Dave Brolley Date: Wed May 14 15:37:28 2014 -0400 Merge remote-tracking branch 'origin/dev' into brolley/dev commit d4e3baa39437d6f00ef6871dc05e376e3a35c256 Author: Dave Brolley Date: Tue May 13 17:19:57 2014 -0400 Add a configure check for the presence of sem_t in . commit 5cb6494ef28bc084bd49d8c5c8192e8ac8f264dd Author: Dave Brolley Date: Tue May 13 16:59:01 2014 -0400 Use a __pmSockAddr to count the number of active probing threads as the= y finish. commit 56113a27a1ff372feb35b1580a5c1d764621ade4 Author: Dave Brolley Date: Tue May 13 16:27:37 2014 -0400 Set a small stack size for each active probing worker thread. =20 THREAD_STACK_MIN appears to be sufficient. commit 0ac32a160d472c20d058426c96a04ed3249ea7eb Author: Dave Brolley Date: Tue May 13 15:56:20 2014 -0400 Implement a max threads control for active service probing. =20 Implemented as part of the mechanism string for use by API users as well as by pmfind(1). commit d39843cf6dbf338745aebb6421c7e7c36ef44f6c Author: Dave Brolley Date: Mon May 12 14:41:59 2014 -0400 Native (non-NSPR) implementation of service probing. =20 Consolidates common code between the native and NSPR implementation. commit da42ecfddf37b1283a8aa04f55ee3aef1a9710d2 Author: Dave Brolley Date: Mon May 12 13:05:46 2014 -0400 Fix concurrency problem in active probing. =20 The size of the results list was not always guarded. commit f1950eb25df22ba7cc2f3d32a4f27d2e04f4d21b Author: Dave Brolley Date: Mon May 12 11:27:23 2014 -0400 For active probing, reduce the timeout for a conneciton in progress. =20 From 5 seconds to 1 second. commit d22f8abba9262c75d458c26919fcd814d96e8edd Author: Dave Brolley Date: Mon May 12 11:09:08 2014 -0400 Add some tracing for active probing. =20 Tracing mesages generated when fd and thread limits reached. commit 4a64f4e67420ec38d463b5bf8b0955e76149090b Author: Dave Brolley Date: Mon May 12 11:04:36 2014 -0400 Threaded probing for PCP services. =20 Active probing now done on a separate trhead for each address. commit 696ea39bdcccb377060dfdba4f1eb7ce8b792a7c Author: Dave Brolley Date: Tue May 6 17:02:51 2014 -0400 __pmSockAddrToString() should (and now does) take (const __pmSockAddr *= ). commit 8fb4a0c73702e4663517f78259202503e0eedf23 Author: Dave Brolley Date: Tue May 6 16:32:27 2014 -0400 __pmAddDiscoveredService() should return negative error codes. =20 So that they can be distinguished from the updated number of urls. All callers updated. commit 83f6b0c44c8eeb9d1217ad2fa4556f3254518792 Author: Dave Brolley Date: Tue May 6 14:52:44 2014 -0400 pmfind: Finalize iteration API for subnet addresses. commit 7cab926e462e13967b178a5953e5824df8a37326 Author: Dave Brolley Date: Mon May 5 15:41:47 2014 -0400 New source files for active service probing. commit e685accd03273bd8e0180313d80d159670136448 Author: Dave Brolley Date: Mon May 5 15:37:04 2014 -0400 Initial framework for PCP service discovery via active probing. From michele@acksyn.org Fri May 30 02:16:36 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 74B1A7F47 for ; Fri, 30 May 2014 02:16:36 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4E12A304051 for ; Fri, 30 May 2014 00:16:36 -0700 (PDT) X-ASG-Debug-ID: 1401434192-04cbb050fda6d10001-S8gJnT Received: from palahniuk.acksyn.org (palahniuk.acksyn.org [5.9.7.26]) by cuda.sgi.com with ESMTP id KGpLfKJuxzloeJMB for ; Fri, 30 May 2014 00:16:34 -0700 (PDT) X-Barracuda-Envelope-From: michele@acksyn.org X-Barracuda-Apparent-Source-IP: 5.9.7.26 Received: from localhost (localhost [127.0.0.1]) by palahniuk.acksyn.org (Postfix) with ESMTP id 8CCB727C25; Fri, 30 May 2014 03:16:31 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=acksyn.org; h= user-agent:in-reply-to:content-disposition:content-type :content-type:mime-version:references:message-id:subject:subject :from:from:date:date:received:received; s=2010; t=1401434190; bh=exHA2ep6zrLxeLBY1j1Z4m387/HjXO9b+aWY82JBrQ8=; b=kIrDD8kMq7gN 0dGe0MfPO2kiCxFlcvHWiCwGlhvCMQIy7of3KZJKRIcO+x/3w+hMdd51kszY5QsF RNt9zt/x6pyLqyG19rTo7UjB5QRTwTDYZSps3LRaBUNAoG4BqA4m0pdDsL4jhKuB Q828Z5qTLP84KlckazeG6HuujncHZ6k= Received: from palahniuk.acksyn.org ([127.0.0.1]) by localhost (mail.acksyn.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 7k7ovX1Pkajh; Fri, 30 May 2014 03:16:30 -0400 (EDT) Received: from localhost (97e50ded.skybroadband.com [151.229.13.237]) by palahniuk.acksyn.org (Postfix) with ESMTPSA id 8CA0B27C1F; Fri, 30 May 2014 03:16:30 -0400 (EDT) Date: Fri, 30 May 2014 08:16:30 +0100 From: Michele Baldessari To: Nathan Scott Cc: pcp@oss.sgi.com Subject: Re: [pcp] python pmExtractValue segfault Message-ID: <20140530071629.GB29113@marquez.int.rhx> X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> <20140528144433.GD4384@marquez.int.rhx> <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> <20140529211419.GA29113@marquez.int.rhx> <1918492899.17482214.1401410448076.JavaMail.zimbra@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1918492899.17482214.1401410448076.JavaMail.zimbra@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) X-Barracuda-Connect: palahniuk.acksyn.org[5.9.7.26] X-Barracuda-Start-Time: 1401434194 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6233 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature Hi Nathan, On Thu, May 29, 2014 at 08:40:48PM -0400, Nathan Scott wrote: > > [...] > > Right now this is where I am at with the output: > > http://acksyn.org/software/pcp2pdf/output.pdf > > Very nice! You could bottle that up and sell it, your fortune awaits. ;) > Maybe an OpenStack PCP log upload service, pdf generation on the backend, > 5c a pop and wait for the millions to roll in? Throw in some annoying use > of AdWords, and you'll be retiring in no time. :) ROTFL. Excellent plan, let me quit my day job right now ;) > > More or less it covers what I had in mind. I'll now work on a pcp branch > > and make sure I use or extend the pmcc class as needed, move to > > pmOptions and add the appropriate qa tests. I'll ping you to take a look > > once it's ready, if that's okay. > > Sure thing, sounds perfect. I was chatting with Marko about the minimum python version, as I was requiring python 2.7 (dictionary comprehensions, timedelta.total_seconds(), etc.). What's the general minimum python version I can assume to be installed? 2.6 (i.e. RHEL 6) or is 2.7 fine? cheers, Michele -- Michele Baldessari C2A5 9DA3 9961 4FFB E01B D0BC DDD4 DCCB 7515 5C6D From nscott@redhat.com Fri May 30 02:23:43 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 527CC7F47 for ; Fri, 30 May 2014 02:23:43 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 2811D8F8037 for ; Fri, 30 May 2014 00:23:43 -0700 (PDT) X-ASG-Debug-ID: 1401434621-04cbb050fda76c0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id fM1ZD1JHLPnFuU3d for ; Fri, 30 May 2014 00:23:42 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4U7NfpS007465; Fri, 30 May 2014 03:23:41 -0400 Date: Fri, 30 May 2014 03:23:41 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Dave Brolley Cc: pcp@oss.sgi.com Message-ID: <1086317405.17579957.1401434621463.JavaMail.zimbra@redhat.com> In-Reply-To: <53873F4B.8030208@redhat.com> References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> <5386075A.70505@redhat.com> <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> <53873F4B.8030208@redhat.com> Subject: Re: Service advertising versus QA MIME-Version: 1.0 X-ASG-Orig-Subj: Re: Service advertising versus QA Content-Type: multipart/mixed; boundary="----=_Part_17579954_625884139.1401434621460" X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: Service advertising versus QA Thread-Index: 8hUz320HhnM443u2qj0g5cR+UFrMxQ== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401434621 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.03 X-Barracuda-Spam-Status: No, SCORE=0.03 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6233 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain ------=_Part_17579954_625884139.1401434621460 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit ----- Original Message ----- > On 05/28/2014 08:03 PM, Nathan Scott wrote: > >> I think that the tests should be able to > >> tolerate randomly discovered services on other machines. I ran into the > >> same problem when working up a test for the new active probing. The > >> solution ended up being more aggressive filtering. I'll have a look at > >> these tests from the same point of view. > > OK, sounds good. In my case here, with the Avahi tests there's remote > > IP addresses in the output, so the qa/common.filter _host_to_ipaddr() > > function might prove handy - I guess we could pick out the local host > > IP that way, and discard all others? ( aaand that function looks like > > it needs some IPv6 love :] ). > > > Since: > > - there could be an indeterminate number of remote services discovered > - the host machine could have more than one active network interface > - pmproxy and/or pmwebd services may or may not be running on the local > machine at the time of the test > > I went the route of filtering out the urls completely and relying on the > headers (e.g. "Discovered pmcd servers") and the exit code from pmfind > for indication that results were found. Cool - it was still failing for me though. :) Pls double check my changes to 775 and 946 (deterministic output for both the case where there are and are not remote pmproxy/pmwebd services found). Its merged in dev now - I do see failures on the new tests (766 & 776), I think these are ifconfig output differences between our text boxen? Can we use pminfo/pmprobe on network.interface.{inet_addr,ipv6_addr} instead, to get platform independence? Else we'll need updated filtering - I'll send through my ifconfig output here privately if you prefer that route. Thanks Dave, rest looks good to me. I'll leave it to you to followup in subsequent commits on those other algorithmic suggestions Frank made, or not, as you see fit. Ohhhh ... wait, one other thought. With pmfind in "--all" mode - i.e. probing freakin' anything and everything using every method available - that means we keep re-probing found services, right? Should we instead stop the probing loop, based on mechanism, as soon as *some* mechanism finds *something*/*anything*? Otherwise we repeat ourselves(?), and as more and more mechanisms come along, pmfind is going to get more and more expensive...? cheers. -- Nathan ------=_Part_17579954_625884139.1401434621460 Content-Type: application/octet-stream; name=776.out.bad Content-Disposition: attachment; filename=776.out.bad Content-Transfer-Encoding: base64 UUEgb3V0cHV0IGNyZWF0ZWQgYnkgNzc2Ci1tIHByb2JlPUlQVjZfQUREUi8xMjgKW0ZyaSBNYXkg MzAgMTU6NTE6MzZdIHBtZmluZCgyMTc0MikgRXJyb3I6IF9fcG1Qcm9iZURpc2NvdmVyU2Vydmlj ZXM6IEFkZHJlc3MgJ2FkZHI6JScgaXMgbm90IHZhbGlkCltGcmkgTWF5IDMwIDE1OjUxOjM2XSBw bWZpbmQoMjE3NDIpIEVycm9yOiBfX3BtUHJvYmVEaXNjb3ZlclNlcnZpY2VzOiBBZGRyZXNzICdh ZGRyOiUnIGlzIG5vdCB2YWxpZApbRnJpIE1heSAzMCAxNTo1MTozNl0gcG1maW5kKDIxNzQyKSBF cnJvcjogX19wbVByb2JlRGlzY292ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjolJyBpcyBub3Qg dmFsaWQKTm8gcG1jZCBzZXJ2ZXJzIGRpc2NvdmVyZWQKRXhpdCBzdGF0dXM6IDAKLXMgcG1jZCAt bSBwcm9iZT1JUFY2X0FERFIvMTI3CltGcmkgTWF5IDMwIDE1OjUxOjM2XSBwbWZpbmQoMjE3NDcp IEVycm9yOiBfX3BtUHJvYmVEaXNjb3ZlclNlcnZpY2VzOiBBZGRyZXNzICdhZGRyOiUnIGlzIG5v dCB2YWxpZApObyBwbWNkIHNlcnZlcnMgZGlzY292ZXJlZApFeGl0IHN0YXR1czogMAotcSAtbSBw cm9iZT1JUFY2X0FERFIvMTI2CltGcmkgTWF5IDMwIDE1OjUxOjM2XSBwbWZpbmQoMjE3NTIpIEVy cm9yOiBfX3BtUHJvYmVEaXNjb3ZlclNlcnZpY2VzOiBBZGRyZXNzICdhZGRyOiUnIGlzIG5vdCB2 YWxpZApbRnJpIE1heSAzMCAxNTo1MTozNl0gcG1maW5kKDIxNzUyKSBFcnJvcjogX19wbVByb2Jl RGlzY292ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjolJyBpcyBub3QgdmFsaWQKW0ZyaSBNYXkg MzAgMTU6NTE6MzZdIHBtZmluZCgyMTc1MikgRXJyb3I6IF9fcG1Qcm9iZURpc2NvdmVyU2Vydmlj ZXM6IEFkZHJlc3MgJ2FkZHI6JScgaXMgbm90IHZhbGlkCkV4aXQgc3RhdHVzOiAwCi1xIC1zIHBt Y2QgLW0gcHJvYmU9SVBWNl9BRERSLzEyNQpbRnJpIE1heSAzMCAxNTo1MTozNl0gcG1maW5kKDIx NzU3KSBFcnJvcjogX19wbVByb2JlRGlzY292ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjolJyBp cyBub3QgdmFsaWQKRXhpdCBzdGF0dXM6IDAKLXEgLXMgcG1jZCAtbSBwcm9iZT1JUFY2X0FERFIv MTI0LG1heFRocmVhZHM9OApbRnJpIE1heSAzMCAxNTo1MTozNl0gcG1maW5kKDIxNzYyKSBFcnJv cjogX19wbVByb2JlRGlzY292ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjolJyBpcyBub3QgdmFs aWQKRXhpdCBzdGF0dXM6IDAK ------=_Part_17579954_625884139.1401434621460 Content-Type: application/octet-stream; name=766.out.bad Content-Disposition: attachment; filename=766.out.bad Content-Transfer-Encoding: base64 UUEgb3V0cHV0IGNyZWF0ZWQgYnkgNzY2Ci1tIHByb2JlPUlORVRfQUREUi8zMgpbRnJpIE1heSAz MCAxNTo1MToyN10gcG1maW5kKDIxNDg5KSBFcnJvcjogX19wbVByb2JlRGlzY292ZXJTZXJ2aWNl czogQWRkcmVzcyAnYWRkcjoxOTIuMTY4LjAuMTA4JyBpcyBub3QgdmFsaWQKW0ZyaSBNYXkgMzAg MTU6NTE6MjddIHBtZmluZCgyMTQ4OSkgRXJyb3I6IF9fcG1Qcm9iZURpc2NvdmVyU2VydmljZXM6 IEFkZHJlc3MgJ2FkZHI6MTkyLjE2OC4wLjEwOCcgaXMgbm90IHZhbGlkCltGcmkgTWF5IDMwIDE1 OjUxOjI3XSBwbWZpbmQoMjE0ODkpIEVycm9yOiBfX3BtUHJvYmVEaXNjb3ZlclNlcnZpY2VzOiBB ZGRyZXNzICdhZGRyOjE5Mi4xNjguMC4xMDgnIGlzIG5vdCB2YWxpZApObyBwbWNkIHNlcnZlcnMg ZGlzY292ZXJlZApFeGl0IHN0YXR1czogMAotcyBwbWNkIC1tIHByb2JlPUlORVRfQUREUi8zMQpb RnJpIE1heSAzMCAxNTo1MToyN10gcG1maW5kKDIxNDk0KSBFcnJvcjogX19wbVByb2JlRGlzY292 ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjoxOTIuMTY4LjAuMTA4JyBpcyBub3QgdmFsaWQKTm8g cG1jZCBzZXJ2ZXJzIGRpc2NvdmVyZWQKRXhpdCBzdGF0dXM6IDAKLXEgLW0gcHJvYmU9SU5FVF9B RERSLzMwCltGcmkgTWF5IDMwIDE1OjUxOjI3XSBwbWZpbmQoMjE0OTkpIEVycm9yOiBfX3BtUHJv YmVEaXNjb3ZlclNlcnZpY2VzOiBBZGRyZXNzICdhZGRyOjE5Mi4xNjguMC4xMDgnIGlzIG5vdCB2 YWxpZApbRnJpIE1heSAzMCAxNTo1MToyN10gcG1maW5kKDIxNDk5KSBFcnJvcjogX19wbVByb2Jl RGlzY292ZXJTZXJ2aWNlczogQWRkcmVzcyAnYWRkcjoxOTIuMTY4LjAuMTA4JyBpcyBub3QgdmFs aWQKW0ZyaSBNYXkgMzAgMTU6NTE6MjddIHBtZmluZCgyMTQ5OSkgRXJyb3I6IF9fcG1Qcm9iZURp c2NvdmVyU2VydmljZXM6IEFkZHJlc3MgJ2FkZHI6MTkyLjE2OC4wLjEwOCcgaXMgbm90IHZhbGlk CkV4aXQgc3RhdHVzOiAwCi1xIC1zIHBtY2QgLW0gcHJvYmU9SU5FVF9BRERSLzI5CltGcmkgTWF5 IDMwIDE1OjUxOjI3XSBwbWZpbmQoMjE1MDQpIEVycm9yOiBfX3BtUHJvYmVEaXNjb3ZlclNlcnZp Y2VzOiBBZGRyZXNzICdhZGRyOjE5Mi4xNjguMC4xMDgnIGlzIG5vdCB2YWxpZApFeGl0IHN0YXR1 czogMAotcSAtcyBwbWNkIC1tIHByb2JlPUlORVRfQUREUi8yOCxtYXhUaHJlYWRzPTgKW0ZyaSBN YXkgMzAgMTU6NTE6MjddIHBtZmluZCgyMTUwOSkgRXJyb3I6IF9fcG1Qcm9iZURpc2NvdmVyU2Vy dmljZXM6IEFkZHJlc3MgJ2FkZHI6MTkyLjE2OC4wLjEwOCcgaXMgbm90IHZhbGlkCkV4aXQgc3Rh dHVzOiAwCg== ------=_Part_17579954_625884139.1401434621460-- From nscott@redhat.com Fri May 30 02:28:32 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 3582F7F47 for ; Fri, 30 May 2014 02:28:32 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id E2E5D304043 for ; Fri, 30 May 2014 00:28:31 -0700 (PDT) X-ASG-Debug-ID: 1401434909-04bdf059a12de5e0001-S8gJnT Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by cuda.sgi.com with ESMTP id jNzqkdJ8UAHgbIO0 for ; Fri, 30 May 2014 00:28:30 -0700 (PDT) X-Barracuda-Envelope-From: nscott@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.25 Received: from zmail20.collab.prod.int.phx2.redhat.com (zmail20.collab.prod.int.phx2.redhat.com [10.5.83.23]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s4U7SRHO008157; Fri, 30 May 2014 03:28:27 -0400 Date: Fri, 30 May 2014 03:28:27 -0400 (EDT) From: Nathan Scott Reply-To: Nathan Scott To: Michele Baldessari Cc: pcp@oss.sgi.com Message-ID: <349224593.17582659.1401434907658.JavaMail.zimbra@redhat.com> In-Reply-To: <20140530071629.GB29113@marquez.int.rhx> References: <20140527223044.GC4384@marquez.int.rhx> <1135934547.16110444.1401239312938.JavaMail.zimbra@redhat.com> <20140528144433.GD4384@marquez.int.rhx> <827869715.16856930.1401326163702.JavaMail.zimbra@redhat.com> <20140529211419.GA29113@marquez.int.rhx> <1918492899.17482214.1401410448076.JavaMail.zimbra@redhat.com> <20140530071629.GB29113@marquez.int.rhx> Subject: Re: [pcp] python pmExtractValue segfault MIME-Version: 1.0 X-ASG-Orig-Subj: Re: [pcp] python pmExtractValue segfault Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.6_GA_5922 (ZimbraWebClient - FF17 (Linux)/8.0.6_GA_5922) Thread-Topic: python pmExtractValue segfault Thread-Index: Da4tezsJVhQ92Qs/hIfn1HWX+dV8Bw== X-Barracuda-Connect: mx4-phx2.redhat.com[209.132.183.25] X-Barracuda-Start-Time: 1401434910 X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.02 X-Barracuda-Spam-Status: No, SCORE=0.02 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=THREAD_INDEX, THREAD_TOPIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6233 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 THREAD_INDEX thread-index: AcO7Y8iR61tzADqsRmmc5wNiFHEOig== 0.01 THREAD_TOPIC Thread-Topic: ...(Japanese Subject)... ----- Original Message ----- > [...] > I was chatting with Marko about the minimum python version, as I was > requiring python 2.7 (dictionary comprehensions, timedelta.total_seconds(), > etc.). What's the general minimum python version I can assume to be > installed? 2.6 (i.e. RHEL 6) or is 2.7 fine? Its very much preferred if we can make everything work for RHEL 6 too. :) FWIW, pcp.pmapi has a timeval class which might suit for timedelta (feel free to add to it as needed). timevals are used extensively throughout libpcp and hence the pcp python wrapper. cheers. -- Nathan From envelope@ftp-master.debian.org Fri May 30 08:26:26 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id A5D107F3F for ; Fri, 30 May 2014 08:26:26 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 67128304059 for ; Fri, 30 May 2014 06:26:26 -0700 (PDT) X-ASG-Debug-ID: 1401456383-04bdf059a13024f0001-S8gJnT Received: from picconi.debian.org (picconi.debian.org [5.153.231.3]) by cuda.sgi.com with ESMTP id OmKEsrrhPLpFgQKi (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 30 May 2014 06:26:24 -0700 (PDT) X-Barracuda-Envelope-From: envelope@ftp-master.debian.org X-Barracuda-Apparent-Source-IP: 5.153.231.3 Received: from mailly.debian.org ([2001:41b8:202:deb:6564:a62:52c3:4b72]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=mailly.debian.org,EMAIL=hostmaster@mailly.debian.org (verified) by picconi.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpC-00038Q-FI for pcp-gui@packages.debian.org; Fri, 30 May 2014 13:26:22 +0000 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by mailly.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpB-0007zP-92; Fri, 30 May 2014 13:26:21 +0000 Received: from kitterman by franck.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMp8-0001Uf-KL; Fri, 30 May 2014 13:26:18 +0000 From: Debian FTP Masters To: 749556-close@bugs.debian.org X-DAK: dak rm Cc: pcp-gui@packages.debian.org, pcp-gui@packages.qa.debian.org X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: Bug#749556: Removed package(s) from unstable Message-Id: X-ASG-Orig-Subj: Bug#749556: Removed package(s) from unstable Sender: Scott Kitterman Date: Fri, 30 May 2014 13:26:18 +0000 Delivered-To: pcp-gui@packages.debian.org X-Barracuda-Connect: picconi.debian.org[5.153.231.3] X-Barracuda-Start-Time: 1401456384 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.157.11:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6239 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header We believe that the bug you reported is now fixed; the following package(s) have been removed from unstable: pcp-doc | 1.5.13 | all pcp-gui | 1.5.13 | source pcp-gui-testsuite | 1.5.13 | amd64, armel, armhf, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, s390x, sparc ------------------- Reason ------------------- NVIU; Superceded by pcp-3.9.4 which has a pcp-gui subpackage ---------------------------------------------- Note that the package(s) have simply been removed from the tag database and may (or may not) still be in the pool; this is not a bug. The package(s) will be physically removed automatically when no suite references them (and in the case of source, when no binary references it). Please also remember that the changes have been done on the master archive and will not propagate to any mirrors until the next dinstall run at the earliest. Packages are usually not removed from testing by hand. Testing tracks unstable and will automatically remove packages which were removed from unstable when removing them from testing causes no dependency problems. The release team can force a removal from testing if it is really needed, please contact them if this should be the case. We try to close bugs which have been reported against this package automatically. But please check all old bugs, if they were closed correctly or should have been re-assigned to another package. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to 749556@bugs.debian.org. The full log for this bug can be viewed at https://bugs.debian.org/749556 This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain) From envelope@ftp-master.debian.org Fri May 30 08:26:30 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 546037F50 for ; Fri, 30 May 2014 08:26:30 -0500 (CDT) Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by relay2.corp.sgi.com (Postfix) with ESMTP id 36FA8304059 for ; Fri, 30 May 2014 06:26:30 -0700 (PDT) X-ASG-Debug-ID: 1401456388-04cb6c22b52e0b00001-S8gJnT Received: from picconi.debian.org (picconi.debian.org [5.153.231.3]) by cuda.sgi.com with ESMTP id we8eDRxPkA7xdLpp (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 30 May 2014 06:26:29 -0700 (PDT) X-Barracuda-Envelope-From: envelope@ftp-master.debian.org X-Barracuda-Apparent-Source-IP: 5.153.231.3 Received: from muffat.debian.org ([2607:f8f0:610:4000:6564:a62:ce0c:1392]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=muffat.debian.org,EMAIL=hostmaster@muffat.debian.org (verified) by picconi.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpI-00038x-8w for pcp-gui@packages.debian.org; Fri, 30 May 2014 13:26:28 +0000 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0006dI-EO; Fri, 30 May 2014 13:26:26 +0000 Received: from kitterman by franck.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpF-0001Ul-1r; Fri, 30 May 2014 13:26:25 +0000 From: Debian FTP Masters To: 618169-done@bugs.debian.org,749462-done@bugs.debian.org,749492-done@bugs.debian.org, X-DAK: dak rm Cc: pcp-gui@packages.debian.org, pcp-gui@packages.qa.debian.org X-Filler: 42 X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: Bug#749556: Removed package(s) from unstable Message-Id: X-ASG-Orig-Subj: Bug#749556: Removed package(s) from unstable Sender: Scott Kitterman Date: Fri, 30 May 2014 13:26:25 +0000 Delivered-To: pcp-gui@packages.debian.org X-Barracuda-Connect: picconi.debian.org[5.153.231.3] X-Barracuda-Start-Time: 1401456389 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.15:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_MISMATCH_TO X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6239 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC0_MISMATCH_TO Envelope rcpt doesn't match header Version: 1.5.13+rm Dear submitter, as the package pcp-gui has just been removed from the Debian archive unstable we hereby close the associated bug reports. We are sorry that we couldn't deal with your issue properly. For details on the removal, please see https://bugs.debian.org/749556 The version of this package that was in Debian prior to this removal can still be found using http://snapshot.debian.org/. This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain) From debbugs@buxtehude.debian.org Fri May 30 08:27:15 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 33C9A7F47 for ; Fri, 30 May 2014 08:27:15 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id 14CA9304059 for ; Fri, 30 May 2014 06:27:14 -0700 (PDT) X-ASG-Debug-ID: 1401456430-04cbb050faca620001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id UcsdySmHo7I71rWK (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 30 May 2014 06:27:11 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpt-00060r-LE; Fri, 30 May 2014 13:27:05 +0000 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: owner@bugs.debian.org From: owner@bugs.debian.org (Debian Bug Tracking System) To: Debian FTP Masters Subject: Bug#618169: marked as done (pcp-gui: FTBFS: ui_pmchart.h:30:30: fatal error: qassistantclient.h: No such file or directory) Message-ID: X-ASG-Orig-Subj: Bug#618169: marked as done (pcp-gui: FTBFS: ui_pmchart.h:30:30: fatal error: qassistantclient.h: No such file or directory) References: <20110313174416.GA10405@xanadu.blop.info> X-Debian-PR-Message: closed 618169 X-Debian-PR-Package: src:pcp-gui X-Debian-PR-Keywords: sid wheezy jessie X-Debian-PR-Source: pcp-gui Date: Fri, 30 May 2014 13:27:05 +0000 Content-Type: multipart/mixed; boundary="----------=_1401456425-23102-0" Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401456431 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.40 X-Barracuda-Spam-Status: No, SCORE=0.40 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests=BSF_SC0_SA085b X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6239 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.40 BSF_SC0_SA085b Custom Rule SA085b This is a multi-part message in MIME format... ------------=_1401456425-23102-0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Your message dated Fri, 30 May 2014 13:26:25 +0000 with message-id and subject line Bug#749556: Removed package(s) from unstable has caused the Debian Bug report #618169, regarding pcp-gui: FTBFS: ui_pmchart.h:30:30: fatal error: qassistantclient= .h: No such file or directory to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) --=20 618169: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D618169 Debian Bug Tracking System Contact owner@bugs.debian.org with problems ------------=_1401456425-23102-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by bugs.debian.org; 13 Mar 2011 17:49:14 +0000 X-Spam-Checker-Version: SpamAssassin 3.2.5-bugs.debian.org_2005_01_02 (2008-06-10) on busoni.debian.org X-Spam-Level: X-Spam-Bayes: score:0.0000 Tokens: new, 443; hammy, 151; neutral, 159; spammy, 0. spammytokens: hammytokens:0.000-+--Usertags, 0.000-+--H*F:U*lucas, 0.000-+--H*rp:U*lucas, 0.000-+--U*debian-qa, 0.000-+--debian-qa@lists.debian.org X-Spam-Status: No, score=-1.5 required=4.0 tests=BAYES_00,NUMONLY,URIBL_CNKR autolearn=no version=3.2.5-bugs.debian.org_2005_01_02 Return-path: Received: from xanadu.blop.info ([178.79.145.134]) by busoni.debian.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1PypPl-0004Ah-R7 for submit@bugs.debian.org; Sun, 13 Mar 2011 17:49:14 +0000 Received: from localhost ([127.0.0.1] helo=xanadu.blop.info) by xanadu.blop.info with smtp (Exim 4.72) (envelope-from ) id 1PypPk-0005Uj-0z for submit@bugs.debian.org; Sun, 13 Mar 2011 18:49:12 +0100 Received: (nullmailer pid 10412 invoked by uid 1000); Sun, 13 Mar 2011 17:44:16 -0000 Date: Sun, 13 Mar 2011 18:44:16 +0100 From: Lucas Nussbaum To: submit@bugs.debian.org Subject: pcp-gui: FTBFS: ui_pmchart.h:30:30: fatal error: qassistantclient.h: No such file or directory Message-ID: <20110313174416.GA10405@xanadu.blop.info> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable User-Agent: Mutt/1.5.21 (2010-09-15) Delivered-To: submit@bugs.debian.org Source: pcp-gui Version: 1.5.0 Severity: serious Tags: wheezy sid User: debian-qa@lists.debian.org Usertags: qa-ftbfs-20110313 qa-ftbfs Justification: FTBFS on amd64 Hi, During a rebuild of all packages in sid, your package failed to build on amd64. Relevant part: > make[2]: Entering directory `/build/user-pcp-gui_1.5.0-amd64-RzDUDj/pcp-g= ui-1.5.0/src' > =3D=3D=3D include =3D=3D=3D > make[3]: Nothing to be done for `default'. > =3D=3D=3D libqmc =3D=3D=3D > /usr/bin/qmake-qt4 && /usr/bin/make -f Makefile > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_context.o qmc_context.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_desc.o qmc_desc.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_group.o qmc_group.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_indom.o qmc_indom.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_metric.o qmc_metric.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB = -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCor= e -I/usr/include/qt4 -I. -I. -o qmc_source.o qmc_source.cpp > rm -f libqmc.a > ar cqs libqmc.a qmc_context.o qmc_desc.o qmc_group.o qmc_indom.o qmc_metr= ic.o qmc_source.o > =3D=3D=3D libqwt =3D=3D=3D > /usr/bin/qmake-qt4 && /usr/bin/make -f Makefile > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_abstr= act_scale_draw.o qwt_abstract_scale_draw.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_clipp= er.o qwt_clipper.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_color= _map.o qwt_color_map.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_doubl= e_interval.o qwt_double_interval.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_doubl= e_rect.o qwt_double_rect.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_dyngr= id_layout.o qwt_dyngrid_layout.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_layou= t_metrics.o qwt_layout_metrics.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_math.= o qwt_math.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_paint= _buffer.o qwt_paint_buffer.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_panne= r.o qwt_panner.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_paint= er.o qwt_painter.cpp > qwt_painter.cpp:496:2: warning: #warning clipping ignores painter transfo= rmations > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_picke= r.o qwt_picker.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_rect.= o qwt_rect.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_round= _scale_draw.o qwt_round_scale_draw.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_scale= _div.o qwt_scale_div.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_scale= _draw.o qwt_scale_draw.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_scale= _map.o qwt_scale_map.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_splin= e.o qwt_spline.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_text_= engine.o qwt_text_engine.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_text_= label.o qwt_text_label.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_text.= o qwt_text.cpp > qwt_text.cpp:549:2: warning: #warning Too small text size, when printing = in high resolution > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_event= _pattern.o qwt_event_pattern.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_picke= r_machine.o qwt_picker_machine.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_scale= _engine.o qwt_scale_engine.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_symbo= l.o qwt_symbol.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_curve= _fitter.o qwt_curve_fitter.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_data.= o qwt_data.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_inter= val_data.o qwt_interval_data.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_legen= d.o qwt_legend.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_legen= d_item.o qwt_legend_item.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot.= o qwt_plot.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= print.o qwt_plot_print.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= xml.o qwt_plot_xml.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= axis.o qwt_plot_axis.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= curve.o qwt_plot_curve.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= dict.o qwt_plot_dict.cpp > qwt_plot_dict.cpp:35:2: warning: #warning binary search missing > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= grid.o qwt_plot_grid.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= item.o qwt_plot_item.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= spectrogram.o qwt_plot_spectrogram.cpp > qwt_plot_spectrogram.cpp:505:2: warning: #warning Better invert the for l= oops above > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= magnifier.o qwt_plot_magnifier.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= marker.o qwt_plot_marker.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= layout.o qwt_plot_layout.cpp > qwt_plot_layout.cpp:1153:2: warning: #warning Layout code needs to be reo= rganized > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= printfilter.o qwt_plot_printfilter.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= canvas.o qwt_plot_canvas.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= panner.o qwt_plot_panner.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= rasteritem.o qwt_plot_rasteritem.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= picker.o qwt_plot_picker.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_plot_= zoomer.o qwt_plot_zoomer.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_raste= r_data.o qwt_raster_data.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_scale= _widget.o qwt_scale_widget.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_abstr= act_slider.o qwt_abstract_slider.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_abstr= act_scale.o qwt_abstract_scale.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_analo= g_clock.o qwt_analog_clock.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_compa= ss.o qwt_compass.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_compa= ss_rose.o qwt_compass_rose.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_dial.= o qwt_dial.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_dial_= needle.o qwt_dial_needle.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_doubl= e_range.o qwt_double_range.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_slide= r.o qwt_slider.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_therm= o.o qwt_thermo.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o qwt_wheel= =2Eo qwt_wheel.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_dyngrid_layout.h -o moc_qwt_dyngrid_= layout.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_d= yngrid_layout.o moc_qwt_dyngrid_layout.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_magnifier.h -o moc_qwt_magnifier.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_m= agnifier.o moc_qwt_magnifier.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_panner.h -o moc_qwt_panner.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= anner.o moc_qwt_panner.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_picker.h -o moc_qwt_picker.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= icker.o moc_qwt_picker.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_text_label.h -o moc_qwt_text_label.c= pp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_t= ext_label.o moc_qwt_text_label.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_legend.h -o moc_qwt_legend.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_l= egend.o moc_qwt_legend.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_legend_item.h -o moc_qwt_legend_item= =2Ecpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_l= egend_item.o moc_qwt_legend_item.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot.h -o moc_qwt_plot.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot.o moc_qwt_plot.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot_magnifier.h -o moc_qwt_plot_mag= nifier.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot_magnifier.o moc_qwt_plot_magnifier.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot_canvas.h -o moc_qwt_plot_canvas= =2Ecpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot_canvas.o moc_qwt_plot_canvas.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot_panner.h -o moc_qwt_plot_panner= =2Ecpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot_panner.o moc_qwt_plot_panner.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot_picker.h -o moc_qwt_plot_picker= =2Ecpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot_picker.o moc_qwt_plot_picker.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_plot_zoomer.h -o moc_qwt_plot_zoomer= =2Ecpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_p= lot_zoomer.o moc_qwt_plot_zoomer.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_scale_widget.h -o moc_qwt_scale_widg= et.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_s= cale_widget.o moc_qwt_scale_widget.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_abstract_slider.h -o moc_qwt_abstrac= t_slider.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_a= bstract_slider.o moc_qwt_abstract_slider.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_analog_clock.h -o moc_qwt_analog_clo= ck.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_a= nalog_clock.o moc_qwt_analog_clock.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_compass.h -o moc_qwt_compass.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_c= ompass.o moc_qwt_compass.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_dial.h -o moc_qwt_dial.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_d= ial.o moc_qwt_dial.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_slider.h -o moc_qwt_slider.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_s= lider.o moc_qwt_slider.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_thermo.h -o moc_qwt_thermo.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_t= hermo.o moc_qwt_thermo.cpp > /usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/= usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/includ= e/qt4/QtGui -I/usr/include/qt4 -I. qwt_wheel.h -o moc_qwt_wheel.cpp > g++ -c -pipe -O2 -Wall -W -fPIC -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -= DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/incl= ude/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o moc_qwt_w= heel.o moc_qwt_wheel.cpp > rm -f libqwt.a > ar cqs libqwt.a qwt_abstract_scale_draw.o qwt_clipper.o qwt_color_map.o q= wt_double_interval.o qwt_double_rect.o qwt_dyngrid_layout.o qwt_layout_metr= ics.o qwt_math.o qwt_paint_buffer.o qwt_panner.o qwt_painter.o qwt_picker.o= qwt_rect.o qwt_round_scale_draw.o qwt_scale_div.o qwt_scale_draw.o qwt_sca= le_map.o qwt_spline.o qwt_text_engine.o qwt_text_label.o qwt_text.o qwt_eve= nt_pattern.o qwt_picker_machine.o qwt_scale_engine.o qwt_symbol.o qwt_curve= _fitter.o qwt_data.o qwt_interval_data.o qwt_legend.o qwt_legend_item.o qwt= _plot.o qwt_plot_print.o qwt_plot_xml.o qwt_plot_axis.o qwt_plot_curve.o qw= t_plot_dict.o qwt_plot_grid.o qwt_plot_item.o qwt_plot_spectrogram.o qwt_pl= ot_magnifier.o qwt_plot_marker.o qwt_plot_layout.o qwt_plot_printfilter.o q= wt_plot_canvas.o qwt_plot_panner.o qwt_plot_rasteritem.o qwt_plot_picker.o = qwt_plot_zoomer.o qwt_raster_data.o qwt_scale_widget.o qwt_abstract_slider.= o qwt_abstract_scale.o qwt_analog_clock.o qwt_compass.o qwt_compass_rose.o = qwt_dial.o qwt_dial_needle.o qwt_double_range.o qwt_slider.o qwt_thermo.o q= wt_wheel.o moc_qwt_dyngrid_layout.o moc_qwt_magnifier.o moc_qwt_panner.o mo= c_qwt_picker.o moc_qwt_text_label.o moc_qwt_legend.o moc_qwt_legend_item.o = moc_qwt_plot.o moc_qwt_plot_magnifier.o moc_qwt_plot_canvas.o moc_qwt_plot_= panner.o moc_qwt_plot_picker.o moc_qwt_plot_zoomer.o moc_qwt_scale_widget.o= moc_qwt_abstract_slider.o moc_qwt_analog_clock.o moc_qwt_compass.o moc_qwt= _dial.o moc_qwt_slider.o moc_qwt_thermo.o moc_qwt_wheel.o > =3D=3D=3D chart =3D=3D=3D > =3D=3D=3D views =3D=3D=3D > make[4]: Nothing to be done for `default'. > /usr/bin/qmake-qt4 && /usr/bin/make -f Makefile > /usr/bin/uic-qt4 aboutdialog.ui -o ui_aboutdialog.h > /usr/bin/uic-qt4 chartdialog.ui -o ui_chartdialog.h > /usr/bin/uic-qt4 console.ui -o ui_console.h > /usr/bin/uic-qt4 exportdialog.ui -o ui_exportdialog.h > /usr/bin/uic-qt4 hostdialog.ui -o ui_hostdialog.h > /usr/bin/uic-qt4 infodialog.ui -o ui_infodialog.h > /usr/bin/uic-qt4 tabdialog.ui -o ui_tabdialog.h > /usr/bin/uic-qt4 recorddialog.ui -o ui_recorddialog.h > /usr/bin/uic-qt4 settingsdialog.ui -o ui_settingsdialog.h > /usr/bin/uic-qt4 pmchart.ui -o ui_pmchart.h > /usr/bin/uic-qt4 openviewdialog.ui -o ui_openviewdialog.h > /usr/bin/uic-qt4 samplesdialog.ui -o ui_samplesdialog.h > /usr/bin/uic-qt4 saveviewdialog.ui -o ui_saveviewdialog.h > /usr/bin/uic-qt4 searchdialog.ui -o ui_searchdialog.h > /usr/bin/uic-qt4 seealsodialog.ui -o ui_seealsodialog.h > g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NE= TWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. = -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/Q= tGui -I/usr/include/qt4 -I../include -I../libqmc -I../libqwt -I. -I. -o con= sole.o console.cpp > In file included from pmchart.h:17:0, > from console.h:19, > from console.cpp:15: > ui_pmchart.h:30:30: fatal error: qassistantclient.h: No such file or dire= ctory > compilation terminated. > make[4]: *** [console.o] Error 1 The full build log is available from: http://people.debian.org/~lucas/logs/2011/03/13/pcp-gui_1.5.0_lsid64.bui= ldlog A list of current common problems and possible solutions is available at=20 http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute! About the archive rebuild: The rebuild was done on about 50 AMD64 nodes of the Grid'5000 platform, using a clean chroot. Internet was not accessible from the build systems. --=20 | Lucas Nussbaum | lucas@lucas-nussbaum.net http://www.lucas-nussbaum.net/ | | jabber: lucas@nussbaum.fr GPG: 1024D/023B3F4F | ------------=_1401456425-23102-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 618169-done) by bugs.debian.org; 30 May 2014 13:26:27 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2-bugs.debian.org_2005_01_02 (2011-06-06) on buxtehude.debian.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER, RCVD_IN_DNSWL_MED,T_RP_MATCHES_RCVD,VERSION autolearn=ham version=3.3.2-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 11; hammy, 115; neutral, 37; spammy, 0. spammytokens: hammytokens:0.000-+--HX-Debian:DAK, 0.000-+--H*rp:D*ftp-master.debian.org, 0.000-+--H*MI:franck, 0.000-+--H*m:franck, 0.000-+--Hx-spam-relays-external:sk:franck. Return-path: Received: from muffat.debian.org ([206.12.19.146]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=muffat.debian.org,EMAIL=hostmaster@muffat.debian.org (verified) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0005xm-Vn; Fri, 30 May 2014 13:26:26 +0000 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0006dI-EO; Fri, 30 May 2014 13:26:26 +0000 Received: from kitterman by franck.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpF-0001Ul-1r; Fri, 30 May 2014 13:26:25 +0000 From: Debian FTP Masters To: 618169-done@bugs.debian.org,749462-done@bugs.debian.org,749492-done@bugs.debian.org, X-DAK: dak rm Cc: pcp-gui@packages.debian.org, pcp-gui@packages.qa.debian.org X-Filler: 42 X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: Bug#749556: Removed package(s) from unstable Message-Id: Sender: Scott Kitterman Date: Fri, 30 May 2014 13:26:25 +0000 Version: 1.5.13+rm Dear submitter, as the package pcp-gui has just been removed from the Debian archive unstable we hereby close the associated bug reports. We are sorry that we couldn't deal with your issue properly. For details on the removal, please see https://bugs.debian.org/749556 The version of this package that was in Debian prior to this removal can still be found using http://snapshot.debian.org/. This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain) ------------=_1401456425-23102-0-- From debbugs@buxtehude.debian.org Fri May 30 08:27:18 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (Postfix) with ESMTP id 308237F47 for ; Fri, 30 May 2014 08:27:18 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay3.corp.sgi.com (Postfix) with ESMTP id B25CEAC003 for ; Fri, 30 May 2014 06:27:14 -0700 (PDT) X-ASG-Debug-ID: 1401456432-04cbb050faca640001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id INemSOMGxjlWW3wn (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 30 May 2014 06:27:13 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpx-00061K-BV; Fri, 30 May 2014 13:27:09 +0000 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: owner@bugs.debian.org From: owner@bugs.debian.org (Debian Bug Tracking System) To: Debian FTP Masters Subject: Bug#749462: marked as done (pcp-gui-testsuite: not installable in sid) Message-ID: X-ASG-Orig-Subj: Bug#749462: marked as done (pcp-gui-testsuite: not installable in sid) References: <20140527064056.GA27942@free.fr> X-Debian-PR-Message: closed 749462 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Source: pcp-gui Date: Fri, 30 May 2014 13:27:09 +0000 Content-Type: multipart/mixed; boundary="----------=_1401456429-23125-0" Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401456433 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6239 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is a multi-part message in MIME format... ------------=_1401456429-23125-0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Your message dated Fri, 30 May 2014 13:26:25 +0000 with message-id and subject line Bug#749556: Removed package(s) from unstable has caused the Debian Bug report #749462, regarding pcp-gui-testsuite: not installable in sid to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) --=20 749462: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D749462 Debian Bug Tracking System Contact owner@bugs.debian.org with problems ------------=_1401456429-23125-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by bugs.debian.org; 27 May 2014 06:40:58 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2-bugs.debian.org_2005_01_02 (2011-06-06) on buxtehude.debian.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=4.0 tests=BAYES_00,FREEMAIL_FROM, HAS_PACKAGE,RCVD_IN_DNSWL_NONE,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.3.2-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 8; hammy, 93; neutral, 26; spammy, 0. spammytokens: hammytokens:0.000-+--Usertags, 0.000-+--H*u:2014-03-12, 0.000-+--H*u:1.5.23, 0.000-+--H*UA:1.5.23, 0.000-+--H*UA:2014-03-12 Return-path: Received: from mo18.mail-out.ovh.net ([178.32.228.18]) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1WpB4E-0002WT-Ek for submit@bugs.debian.org; Tue, 27 May 2014 06:40:58 +0000 Received: from 23.mail-out.ovh.net (23.mail-out.ovh.net [91.121.28.222]) by mo18.mail-out.ovh.net (Postfix) with SMTP id 180B5FF84F5 for ; Tue, 27 May 2014 08:40:57 +0200 (CEST) Received: (qmail 30519 invoked by uid 503); 27 May 2014 04:47:36 -0000 Received: from 10-85-190-109.dsl.ovh.fr (HELO seneca.home.net) (109.190.85.10) by 23.mail-out.ovh.net with SMTP; 27 May 2014 04:47:36 -0000 Received: from rt by seneca.home.net with local (Exim 4.82) (envelope-from ) id 1WpB4C-0006KU-M6 for submit@bugs.debian.org; Tue, 27 May 2014 08:40:56 +0200 Date: Tue, 27 May 2014 08:40:56 +0200 From: Ralf Treinen To: submit@bugs.debian.org X-Ovh-Mailout: 178.32.228.18 (mo18.mail-out.ovh.net) Subject: pcp-gui-testsuite: not installable in sid Message-ID: <20140527064056.GA27942@free.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Ovh-Tracer-Id: 1794684453506874797 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeejvddrheelucetufdoteggodetrfcurfhrohhfihhlvgemucfqggfjnecuuegrihhlohhuthemuceftddtnecu Delivered-To: submit@bugs.debian.org Package: pcp-gui-testsuite Version: 1.5.13 Severity: serious User: treinen@debian.org Usertags: edos-outdated Hi, pcp-gui-testsuite is no longer installable in sid as it depends on pcp-gui (= 1.5.13). Since pcp-gui moved into the pcp source package we have pcp-gui version 3.9.4 in sid. Shouldn't the pcp-gui-testsuite package be removed from sid (or rather the whole pcp-gui source package)? -Ralf. ------------=_1401456429-23125-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 749462-done) by bugs.debian.org; 30 May 2014 13:26:27 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2-bugs.debian.org_2005_01_02 (2011-06-06) on buxtehude.debian.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER, RCVD_IN_DNSWL_MED,T_RP_MATCHES_RCVD,VERSION autolearn=unavailable version=3.3.2-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 0; hammy, 126; neutral, 37; spammy, 0. spammytokens: hammytokens:0.000-+--HX-Debian:DAK, 0.000-+--H*rp:D*ftp-master.debian.org, 0.000-+--H*MI:franck, 0.000-+--H*m:franck, 0.000-+--Hx-spam-relays-external:sk:franck. Return-path: Received: from muffat.debian.org ([206.12.19.146]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=muffat.debian.org,EMAIL=hostmaster@muffat.debian.org (verified) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0005xm-Vn; Fri, 30 May 2014 13:26:26 +0000 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0006dI-EO; Fri, 30 May 2014 13:26:26 +0000 Received: from kitterman by franck.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpF-0001Ul-1r; Fri, 30 May 2014 13:26:25 +0000 From: Debian FTP Masters To: 618169-done@bugs.debian.org,749462-done@bugs.debian.org,749492-done@bugs.debian.org, X-DAK: dak rm Cc: pcp-gui@packages.debian.org, pcp-gui@packages.qa.debian.org X-Filler: 42 X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: Bug#749556: Removed package(s) from unstable Message-Id: Sender: Scott Kitterman Date: Fri, 30 May 2014 13:26:25 +0000 X-CrossAssassin-Score: 2 Version: 1.5.13+rm Dear submitter, as the package pcp-gui has just been removed from the Debian archive unstable we hereby close the associated bug reports. We are sorry that we couldn't deal with your issue properly. For details on the removal, please see https://bugs.debian.org/749556 The version of this package that was in Debian prior to this removal can still be found using http://snapshot.debian.org/. This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain) ------------=_1401456429-23125-0-- From debbugs@buxtehude.debian.org Fri May 30 08:27:19 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 371617F47 for ; Fri, 30 May 2014 08:27:19 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 140718F8068 for ; Fri, 30 May 2014 06:27:19 -0700 (PDT) X-ASG-Debug-ID: 1401456437-04cbb050faca650001-S8gJnT Received: from buxtehude.debian.org (buxtehude.debian.org [140.211.166.26]) by cuda.sgi.com with ESMTP id 6nV3xLN0BkmZXS4Q (version=TLSv1 cipher=AES128-SHA bits=128 verify=NO) for ; Fri, 30 May 2014 06:27:17 -0700 (PDT) X-Barracuda-Envelope-From: debbugs@buxtehude.debian.org X-Barracuda-Apparent-Source-IP: 140.211.166.26 Received: from debbugs by buxtehude.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMq1-000622-In; Fri, 30 May 2014 13:27:13 +0000 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: owner@bugs.debian.org From: owner@bugs.debian.org (Debian Bug Tracking System) To: Debian FTP Masters Subject: Bug#749492: marked as done (pcp-gui-testsuite: uninstallable in sid) Message-ID: X-ASG-Orig-Subj: Bug#749492: marked as done (pcp-gui-testsuite: uninstallable in sid) References: <20140527114542.62966.24950.reportbug@sid.kfreebsd-amd64.pyro.eu.org> X-Debian-PR-Message: closed 749492 X-Debian-PR-Package: pcp-gui-testsuite X-Debian-PR-Keywords: jessie sid X-Debian-PR-Source: pcp-gui Date: Fri, 30 May 2014 13:27:13 +0000 Content-Type: multipart/mixed; boundary="----------=_1401456433-23156-0" Sender: Debian BTS X-Barracuda-Connect: buxtehude.debian.org[140.211.166.26] X-Barracuda-Start-Time: 1401456437 X-Barracuda-Encrypted: AES128-SHA X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.7 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.6239 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- This is a multi-part message in MIME format... ------------=_1401456433-23156-0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Your message dated Fri, 30 May 2014 13:26:25 +0000 with message-id and subject line Bug#749556: Removed package(s) from unstable has caused the Debian Bug report #749492, regarding pcp-gui-testsuite: uninstallable in sid to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) --=20 749492: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D749492 Debian Bug Tracking System Contact owner@bugs.debian.org with problems ------------=_1401456433-23156-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by bugs.debian.org; 27 May 2014 11:45:44 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2-bugs.debian.org_2005_01_02 (2011-06-06) on buxtehude.debian.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=4.0 tests=BAYES_00,DKIM_ADSP_DISCARD, FOURLA,HAS_PACKAGE,RCVD_IN_DNSWL_MED,SPF_PASS,XMAILER_REPORTBUG,X_DEBBUGS_CC autolearn=ham version=3.3.2-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 5; hammy, 150; neutral, 62; spammy, 1. spammytokens:0.958-+--H*r:bugs.debian.org hammytokens:0.000-+--H*x:6.4.4, 0.000-+--H*UA:6.4.4, 0.000-+--H*M:reportbug, 0.000-+--H*MI:reportbug, 0.000-+--H*x:reportbug Return-path: Received: from guisborough-1.rcc.uk.cluster.ok24.net ([217.155.40.118] helo=sid.kfreebsd-amd64.pyro.eu.org) by buxtehude.debian.org with esmtp (Exim 4.80) (envelope-from ) id 1WpFpA-00034R-1f for submit@bugs.debian.org; Tue, 27 May 2014 11:45:44 +0000 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Steven Chamberlain To: Debian Bug Tracking System Subject: pcp-gui-testsuite: uninstallable in sid Message-ID: <20140527114542.62966.24950.reportbug@sid.kfreebsd-amd64.pyro.eu.org> X-Mailer: reportbug 6.4.4 Date: Tue, 27 May 2014 12:45:42 +0100 X-Debbugs-Cc: steven@pyro.eu.org Delivered-To: submit@bugs.debian.org Package: pcp-gui-testsuite Version: 1.5.13 Severity: serious Tags: jessie sid Hi, pcp-gui-testsuite cannot be installed in sid because of a wrongly versioned dependency on pcp-gui: root@sid:~# apt-get install pcp-gui-testsuite Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: pcp-gui-testsuite : Depends: pcp-gui (= 1.5.13) but it is not going to be installed E: Unable to correct problems, you have held broken packages. Note that src:pcp-gui version 1.5.13 builds a binary package pcp-gui with version 3.9.4: root@sid:~# apt-cache madison pcp-gui pcp-gui | 3.9.4 | http://http.debian.net/debian/ sid/main kfreebsd-amd64 Packages pcp | 3.9.4 | http://http.debian.net/debian/ sid/main Sources pcp-gui | 1.5.13 | http://http.debian.net/debian/ sid/main Sources Thanks. -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable'), (500, 'stable') Architecture: kfreebsd-amd64 (x86_64) Kernel: kFreeBSD 9.0-2-amd64-xenhvm Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash ------------=_1401456433-23156-0 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 749492-done) by bugs.debian.org; 30 May 2014 13:26:27 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2-bugs.debian.org_2005_01_02 (2011-06-06) on buxtehude.debian.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER, RCVD_IN_DNSWL_MED,T_RP_MATCHES_RCVD,VERSION autolearn=unavailable version=3.3.2-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 0; hammy, 126; neutral, 37; spammy, 0. spammytokens: hammytokens:0.000-+--HX-Debian:DAK, 0.000-+--H*rp:D*ftp-master.debian.org, 0.000-+--H*MI:franck, 0.000-+--H*m:franck, 0.000-+--Hx-spam-relays-external:sk:franck. Return-path: Received: from muffat.debian.org ([206.12.19.146]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=muffat.debian.org,EMAIL=hostmaster@muffat.debian.org (verified) by buxtehude.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0005xm-Vn; Fri, 30 May 2014 13:26:26 +0000 Received: from franck.debian.org ([138.16.160.12]) from C=NA,ST=NA,L=Ankh Morpork,O=Debian SMTP,OU=Debian SMTP CA,CN=franck.debian.org,EMAIL=hostmaster@franck.debian.org (verified) by muffat.debian.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1WqMpG-0006dI-EO; Fri, 30 May 2014 13:26:26 +0000 Received: from kitterman by franck.debian.org with local (Exim 4.80) (envelope-from ) id 1WqMpF-0001Ul-1r; Fri, 30 May 2014 13:26:25 +0000 From: Debian FTP Masters To: 618169-done@bugs.debian.org,749462-done@bugs.debian.org,749492-done@bugs.debian.org, X-DAK: dak rm Cc: pcp-gui@packages.debian.org, pcp-gui@packages.qa.debian.org X-Filler: 42 X-Debian: DAK MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: Bug#749556: Removed package(s) from unstable Message-Id: Sender: Scott Kitterman Date: Fri, 30 May 2014 13:26:25 +0000 X-CrossAssassin-Score: 3 Version: 1.5.13+rm Dear submitter, as the package pcp-gui has just been removed from the Debian archive unstable we hereby close the associated bug reports. We are sorry that we couldn't deal with your issue properly. For details on the removal, please see https://bugs.debian.org/749556 The version of this package that was in Debian prior to this removal can still be found using http://snapshot.debian.org/. This message was generated automatically; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org. Debian distribution maintenance software pp. Scott Kitterman (the ftpmaster behind the curtain) ------------=_1401456433-23156-0-- From brolley@redhat.com Fri May 30 14:20:42 2014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.1 X-Original-To: pcp@oss.sgi.com Delivered-To: pcp@oss.sgi.com Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id C2F047F55 for ; Fri, 30 May 2014 14:20:42 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay2.corp.sgi.com (Postfix) with ESMTP id A39EB30404E for ; Fri, 30 May 2014 12:20:39 -0700 (PDT) X-ASG-Debug-ID: 1401477635-04cbb050fcf09c0001-S8gJnT Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id uolUABTr5Xu3mBxt for ; Fri, 30 May 2014 12:20:35 -0700 (PDT) X-Barracuda-Envelope-From: brolley@redhat.com X-Barracuda-Apparent-Source-IP: 209.132.183.28 X-ASG-Whitelist: Client Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4UJKY2N016606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 30 May 2014 15:20:35 -0400 Received: from [10.10.56.102] (vpn-56-102.rdu2.redhat.com [10.10.56.102]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s4UJKXwW031772; Fri, 30 May 2014 15:20:34 -0400 Message-ID: <5388DA90.5000803@redhat.com> Date: Fri, 30 May 2014 15:22:56 -0400 From: Dave Brolley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Nathan Scott CC: pcp@oss.sgi.com Subject: Re: Service advertising versus QA References: <410753304.16136418.1401248705845.JavaMail.zimbra@redhat.com> <5386075A.70505@redhat.com> <1726157269.16845669.1401321783766.JavaMail.zimbra@redhat.com> <53873F4B.8030208@redhat.com> <1086317405.17579957.1401434621463.JavaMail.zimbra@redhat.com> X-ASG-Orig-Subj: Re: Service advertising versus QA In-Reply-To: <1086317405.17579957.1401434621463.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Barracuda-Connect: mx1.redhat.com[209.132.183.28] X-Barracuda-Start-Time: 1401477635 X-Barracuda-URL: http://192.48.176.25:80/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at sgi.com X-Barracuda-BRTS-Status: 1 On 05/30/2014 03:23 AM, Nathan Scott wrote: > Cool - it was still failing for me though. :) Pls double check my changes > to 775 and 946 (deterministic output for both the case where there are and > are not remote pmproxy/pmwebd services found). > > Its merged in dev now - I do see failures on the new tests (766 & 776), I > think these are ifconfig output differences between our text boxen? Can > we use pminfo/pmprobe on network.interface.{inet_addr,ipv6_addr} instead, > to get platform independence? Else we'll need updated filtering - I'll > send through my ifconfig output here privately if you prefer that route. Your changes to 775 and 946 look good. So good that I stole them for 766 and 776 :-) I also changed 766 and 776 to use pminfo in order to obtain the address of an active interface. Pushed to brolley/dev on pcpfans as commit d7ed4e206d21c81a6d3b5627efceb02b94df94b5 Author: Dave Brolley Date: Fri May 30 15:09:55 2014 -0400 Make qa tests 766 and 776 (pmfind with active probing) more robust. - Stole Nathan's deterministic output fix from tests 775 and 946 - Use pminfo to obtain the address of an active interface instead of ifconfig (also Nathan's suggestion). > Ohhhh ... wait, one other thought. With pmfind in "--all" mode - i.e. > probing freakin' anything and everything using every method available - > that means we keep re-probing found services, right? Should we instead > stop the probing loop, based on mechanism, as soon as *some* mechanism > finds *something*/*anything*? Otherwise we repeat ourselves(?), and as > more and more mechanisms come along, pmfind is going to get more and > more expensive...? I can see this being a global option and a companion to the pending timeout option. There are probably users who want any result and would be satisfied with the first one (the qa tests themselves could benefit from this) and others who want the full results. The also-pending callback will be another way for users to consume the output as it is discovered. Combining all of these will certainly yield a wide range of ways to use the API and the tool. With respect to repeating ourselves, each mechanism may indeed discover some of the same services, but there could also be some disjointness. The overall url collector filters out any duplicates.. Dave Dave