1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
3
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>EventAggregator</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
4
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
6
<!-- Generated by Natural Docs, version 1.52 -->
7
<!-- http://www.naturaldocs.org -->
9
<!-- saved from url=(0026)http://www.naturaldocs.org -->
14
<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="EventAggregator"></a>EventAggregator</h1><div class=CBody><p>EventAggregator aggregates event values and calculates basic statistics.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#EventAggregator" >EventAggregator</a></td><td class=SDescription>EventAggregator aggregates event values and calculates basic statistics.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#EventAggregator.Variables" >Variables</a></td><td class=SDescription></td></tr><tr class="SVariable SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.@buck_vals" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">@buck_vals</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#EventAggregator.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.new" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">new</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.reset_aggregated_data" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">reset_aggregated_data</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.aggregate" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">aggregate</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator._make_unrolled_loops" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">_make_unrolled_loops</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.results" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">results</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.set_results" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">set_results</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.stats" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">stats</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.attributes" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">attributes</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.set_attribute_types" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">set_attribute_types</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.type_for" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">type_for</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.make_handler" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">make_handler</a></td><td class=SDescription>Make an attribute handler subroutine for <a href="#EventAggregator.aggregate" class=LFunction id=link13 onMouseOver="ShowTip(event, 'tt4', 'link13')" onMouseOut="HideTip('tt4')">aggregate()</a>. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.bucket_idx" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">bucket_idx</a></td><td class=SDescription>Return the bucket number for the given value. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.bucket_value" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">bucket_value</a></td><td class=SDescription>Return the value corresponding to the given bucket. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#EventAggregator.Variables" >Variables</a></td><td class=SDescription></td></tr><tr class="SVariable SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.@buck_tens" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">@buck_tens</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#EventAggregator.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.buckets_of" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">buckets_of</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.calculate_statistical_metrics" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')">calculate_statistical_metrics</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator._calc_metrics" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')">_calc_metrics</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.metrics" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')">metrics</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.top_events" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')">top_events</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.add_new_attributes" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')">add_new_attributes</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.get_attributes" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')">get_attributes</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.events_processed" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')">events_processed</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator.make_alt_attrib" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')">make_alt_attrib</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.merge" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')">merge</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator._add_attrib_vals" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')">_add_attrib_vals</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator._deep_copy_attribs" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')">_deep_copy_attribs</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator._deep_copy_attrib_vals" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')">_deep_copy_attrib_vals</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator.calculate_apdex" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')">calculate_apdex</a></td><td class=SDescription>Calculate the Apdex score for the given T and response times. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#EventAggregator._get_value" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')">_get_value</a></td><td class=SDescription>Get the value of the attribute (or one of its alternatives) from the event. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#EventAggregator._d" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">_d</a></td><td class=SDescription></td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
16
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.Variables"></a>Variables</h3></div></div>
18
<div class="CVariable"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.@buck_vals"></a>@buck_vals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">my @buck_vals</td></tr></table></blockquote></div></div></div>
20
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.Functions"></a>Functions</h3></div></div>
22
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.new"></a>new</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub new</td></tr></table></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>groupby</td><td class=CDLDescription>Attribute to group/aggregate classes by.</td></tr><tr><td class=CDLEntry>worst</td><td class=CDLDescription>Attribute which defines the worst event in a class. Samples of the worst attribute are saved.</td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>attributes</td><td class=CDLDescription>Hashref of attributes to aggregate. Keys are attribute names used in the EventAggregator object and values are attribute names used to get values from events. Multiple attrib names in the arrayref specify alternate attrib names in the event. Example: Fruit => [‘apple’, ‘orange’]. An attrib called “Fruit” will be created using the event’s “apple” value or, if that attrib doesn’t exist, its “orange” value. If this option isn’t specified, then then all attributes# are auto-detected and aggregated.</td></tr><tr><td class=CDLEntry>ignore_attributes</td><td class=CDLDescription>Arrayref of auto-detected attributes to ignore. This does not apply to the attributes specified with the optional attributes option above.</td></tr><tr><td class=CDLEntry>unroll_limit</td><td class=CDLDescription>If this many events have been processed and some handlers haven’t been generated yet (due to lack of sample data), unroll the loop anyway. (default 1000)</td></tr><tr><td class=CDLEntry>attrib_limit</td><td class=CDLDescription>Sanity limit for attribute values. If the value exceeds the limit, use the last-seen for this class; if none, then 0.</td></tr><tr><td class=CDLEntry>type_for</td><td class=CDLDescription>Hashref of attribute=>type pairs. See $type in <a href="#EventAggregator.make_handler" class=LFunction id=link33 onMouseOver="ShowTip(event, 'tt12', 'link33')" onMouseOut="HideTip('tt12')">make_handler()</a> for the list of types.</td></tr></table><h4 class=CHeading>Returns</h4><p>EventAggregator object</p></div></div></div>
24
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.reset_aggregated_data"></a>reset_aggregated_data</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub reset_aggregated_data</td></tr></table></blockquote></div></div></div>
26
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.aggregate"></a>aggregate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub aggregate</td></tr></table></blockquote></div></div></div>
28
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._make_unrolled_loops"></a>_make_unrolled_loops</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _make_unrolled_loops</td></tr></table></blockquote></div></div></div>
30
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.results"></a>results</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub results</td></tr></table></blockquote></div></div></div>
32
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.set_results"></a>set_results</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub set_results</td></tr></table></blockquote></div></div></div>
34
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.stats"></a>stats</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub stats</td></tr></table></blockquote></div></div></div>
36
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.attributes"></a>attributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub attributes</td></tr></table></blockquote></div></div></div>
38
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.set_attribute_types"></a>set_attribute_types</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub set_attribute_types</td></tr></table></blockquote></div></div></div>
40
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.type_for"></a>type_for</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub type_for</td></tr></table></blockquote></div></div></div>
42
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.make_handler"></a>make_handler</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub make_handler</td></tr></table></blockquote><p>Make an attribute handler subroutine for <a href="#EventAggregator.aggregate" class=LFunction id=link34 onMouseOver="ShowTip(event, 'tt4', 'link34')" onMouseOut="HideTip('tt4')">aggregate()</a>. Each attribute needs a handler to keep trach of the min and max values, worst sample, etc. Handlers differ depending on the type of attribute (num, bool or string).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>event</td><td class=CDLDescription>Event hashref</td></tr><tr><td class=CDLEntry>attribute</td><td class=CDLDescription>Attribute name</td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>alternates</td><td class=CDLDescription>Arrayref of alternate names for the attribute</td></tr><tr><td class=CDLEntry>worst</td><td class=CDLDescription>Keep a sample of the attribute’s worst value (default no)</td></tr></table><h4 class=CHeading>Returns</h4><p>A subroutine that can aggregate the attribute.</p></div></div></div>
44
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.bucket_idx"></a>bucket_idx</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub bucket_idx</td></tr></table></blockquote><p>Return the bucket number for the given value. Buck numbers are zero-indexed, so although there are 1,000 buckets (NUM_BUCK), 999 is the greatest idx.</p><p>Notice that this sub is not a class method, so either call it from inside this module like bucket_idx() or outside this module like EventAggregator::bucket_idx().</p><p>The bucketed list works this way: each range of values from MIN_BUCK in increments of BUCK_SIZE (that is 5%) we consider a bucket. We keep NUM_BUCK buckets. The upper end of the range is more than 1.5e15 so it should be big enough for almost anything. The buckets are accessed by log base BUCK_SIZE, so floor(log(N)/log(BUCK_SIZE)). The smallest bucket’s index is -284. We shift all values up 284 so we have values from 0 to 999 that can be used as array indexes. A value that falls into a bucket simply increments the array entry. We do NOT use POSIX::floor() because it is too expensive.</p><p>This eliminates the need to keep and sort all values to calculate median, standard deviation, 95th percentile, etc. So memory usage is bounded by the number of distinct aggregated values, not the number of events.</p><p>TODO: could export this by default to avoid having to specific packge::.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>$val</td><td class=CDLDescription>Numeric value to bucketize</td></tr></table><h4 class=CHeading>Returns</h4><p>Bucket number (0 to NUM_BUCK-1) for the value</p></div></div></div>
46
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.bucket_value"></a>bucket_value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub bucket_value</td></tr></table></blockquote><p>Return the value corresponding to the given bucket. The value of each bucket is the first value that it covers. So the value of bucket 1 is 0.000001000 because it covers [0.000001000, 0.000001050).</p><p>Notice that this sub is not a class method, so either call it from inside this module like bucket_idx() or outside this module like EventAggregator::bucket_value().</p><p>TODO: could export this by default to avoid having to specific packge::.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>$bucket</td><td class=CDLDescription>Bucket number (0 to NUM_BUCK-1)</td></tr></table><h4 class=CHeading>Returns</h4><p>Numeric value corresponding to the bucket</p></div></div></div>
48
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.Variables"></a>Variables</h3></div></div>
50
<div class="CVariable"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.@buck_tens"></a>@buck_tens</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">my @buck_tens</td></tr></table></blockquote></div></div></div>
52
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.Functions"></a>Functions</h3></div></div>
54
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.buckets_of"></a>buckets_of</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub buckets_of</td></tr></table></blockquote></div></div></div>
56
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.calculate_statistical_metrics"></a>calculate_statistical_metrics</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_statistical_metrics</td></tr></table></blockquote></div></div></div>
58
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._calc_metrics"></a>_calc_metrics</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _calc_metrics</td></tr></table></blockquote></div></div></div>
60
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.metrics"></a>metrics</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub metrics</td></tr></table></blockquote></div></div></div>
62
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.top_events"></a>top_events</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub top_events</td></tr></table></blockquote></div></div></div>
64
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.add_new_attributes"></a>add_new_attributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub add_new_attributes</td></tr></table></blockquote></div></div></div>
66
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.get_attributes"></a>get_attributes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_attributes</td></tr></table></blockquote></div></div></div>
68
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.events_processed"></a>events_processed</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub events_processed</td></tr></table></blockquote></div></div></div>
70
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.make_alt_attrib"></a>make_alt_attrib</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub make_alt_attrib</td></tr></table></blockquote></div></div></div>
72
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.merge"></a>merge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub merge</td></tr></table></blockquote></div></div></div>
74
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._add_attrib_vals"></a>_add_attrib_vals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _add_attrib_vals</td></tr></table></blockquote></div></div></div>
76
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._deep_copy_attribs"></a>_deep_copy_attribs</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _deep_copy_attribs</td></tr></table></blockquote></div></div></div>
78
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._deep_copy_attrib_vals"></a>_deep_copy_attrib_vals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _deep_copy_attrib_vals</td></tr></table></blockquote></div></div></div>
80
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator.calculate_apdex"></a>calculate_apdex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_apdex</td></tr></table></blockquote><p>Calculate the Apdex score for the given T and response times. <a href="http://www.apdex.org/documents/ApdexTechnicalSpecificationV11_000.pdf" class=LURL target=_top>http://www.apdex.org<wbr>/documents<wbr>/ApdexTechnicalSpecificationV11_000.pdf</a></p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>t</td><td class=CDLDescription>Target threshold</td></tr><tr><td class=CDLEntry>samples</td><td class=CDLDescription>Hashref with bucketized response time values, i.e. { bucket_number => n_responses, }</td></tr></table><h4 class=CHeading>Returns</h4><p>Apdex score</p></div></div></div>
82
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._get_value"></a>_get_value</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _get_value</td></tr></table></blockquote><p>Get the value of the attribute (or one of its alternatives) from the event. Undef is a valid value. If the attrib or none of its alternatives exist in the event, then this sub dies.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>%args</td><td class=CDLDescription>Arguments</td></tr></table><h4 class=CHeading>Required Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>event</td><td class=CDLDescription>Event hashref</td></tr><tr><td class=CDLEntry>attribute</td><td class=CDLDescription>Attribute name</td></tr></table><h4 class=CHeading>Optional Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>alternates</td><td class=CDLDescription>Arrayref of alternate attribute names</td></tr></table><h4 class=CHeading>Returns</h4><p>Value of attribute in the event, possibly undef</p></div></div></div>
84
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="EventAggregator._d"></a>_d</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _d</td></tr></table></blockquote></div></div></div>
89
<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
92
<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Modules</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="Advisor-pm.html">Advisor</a></div></div><div class=MEntry><div class=MFile><a href="AdvisorRules-pm.html">AdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="BinaryLogParser-pm.html">BinaryLogParser</a></div></div><div class=MEntry><div class=MFile><a href="ChangeHandler-pm.html">ChangeHandler</a></div></div><div class=MEntry><div class=MFile><a href="CompareQueryTimes-pm.html">CompareQueryTimes</a></div></div><div class=MEntry><div class=MFile><a href="CompareResults-pm.html">CompareResults</a></div></div><div class=MEntry><div class=MFile><a href="CompareTableStructs-pm.html">CompareTableStructs</a></div></div><div class=MEntry><div class=MFile><a href="CompareWarnings-pm.html">CompareWarnings</a></div></div><div class=MEntry><div class=MFile><a href="CopyRowsInsertSelect-pm.html">CopyRowsInsertSelect</a></div></div><div class=MEntry><div class=MFile><a href="Daemon-pm.html">Daemon</a></div></div><div class=MEntry><div class=MFile><a href="DSNParser-pm.html">DSNParser</a></div></div><div class=MEntry><div class=MFile><a href="DuplicateKeyFinder-pm.html">DuplicateKeyFinder</a></div></div><div class=MEntry><div class=MFile id=MSelected>EventAggregator</div></div><div class=MEntry><div class=MFile><a href="EventTimeline-pm.html">EventTimeline</a></div></div><div class=MEntry><div class=MFile><a href="ExecutionThrottler-pm.html">ExecutionThrottler</a></div></div><div class=MEntry><div class=MFile><a href="ExplainAnalyzer-pm.html">ExplainAnalyzer</a></div></div><div class=MEntry><div class=MFile><a href="FileIterator-pm.html">FileIterator</a></div></div><div class=MEntry><div class=MFile><a href="ForeignKeyIterator-pm.html">ForeignKeyIterator</a></div></div><div class=MEntry><div class=MFile><a href="GeneralLogParser-pm.html">GeneralLogParser</a></div></div><div class=MEntry><div class=MFile><a href="HTTPProtocolParser-pm.html">HTTPProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="IndexUsage-pm.html">IndexUsage</a></div></div><div class=MEntry><div class=MFile><a href="InnoDBStatusParser-pm.html">InnoDBStatusParser</a></div></div><div class=MEntry><div class=MFile><a href="KeySize-pm.html">KeySize</a></div></div><div class=MEntry><div class=MFile><a href="LogSplitter-pm.html">LogSplitter</a></div></div><div class=MEntry><div class=MFile><a href="MaatkitTest-pm.html">MaatkitTest</a></div></div><div class=MEntry><div class=MFile><a href="MasterSlave-pm.html">MasterSlave</a></div></div><div class=MEntry><div class=MFile><a href="MemcachedEvent-pm.html">MemcachedEvent</a></div></div><div class=MEntry><div class=MFile><a href="MemcachedProtocolParser-pm.html">MemcachedProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="MockSth-pm.html">MockSth</a></div></div><div class=MEntry><div class=MFile><a href="MockSync-pm.html">MockSync</a></div></div><div class=MEntry><div class=MFile><a href="MockSyncStream-pm.html">MockSyncStream</a></div></div><div class=MEntry><div class=MFile><a href="MySQLConfig-pm.html">MySQLConfig</a></div></div><div class=MEntry><div class=MFile><a href="MySQLConfigComparer-pm.html">MySQLConfigComparer</a></div></div><div class=MEntry><div class=MFile><a href="MySQLDump-pm.html">MySQLDump</a></div></div><div class=MEntry><div class=MFile><a href="MySQLProtocolParser-pm.html">MySQLProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="OptionParser-pm.html">OptionParser</a></div></div><div class=MEntry><div class=MFile><a href="OSCCaptureSync-pm.html">OSCCaptureSync</a></div></div><div class=MEntry><div class=MFile><a href="Outfile-pm.html">Outfile</a></div></div><div class=MEntry><div class=MFile><a href="PgLogParser-pm.html">PgLogParser</a></div></div><div class=MEntry><div class=MFile><a href="Pipeline-pm.html">Pipeline</a></div></div><div class=MEntry><div class=MFile><a href="PodParser-pm.html">PodParser</a></div></div><div class=MEntry><div class=MFile><a href="Processlist-pm.html">Processlist</a></div></div><div class=MEntry><div class=MFile><a href="ProcesslistAggregator-pm.html">ProcesslistAggregator</a></div></div><div class=MEntry><div class=MFile><a href="Progress-pm.html">Progress</a></div></div><div class=MEntry><div class=MFile><a href="ProtocolParser-pm.html">ProtocolParser</a></div></div><div class=MEntry><div class=MFile><a href="QueryAdvisorRules-pm.html">QueryAdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="QueryParser-pm.html">QueryParser</a></div></div><div class=MEntry><div class=MFile><a href="QueryReportFormatter-pm.html">QueryReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="QueryReview-pm.html">QueryReview</a></div></div><div class=MEntry><div class=MFile><a href="QueryRewriter-pm.html">QueryRewriter</a></div></div><div class=MEntry><div class=MFile><a href="Quoter-pm.html">Quoter</a></div></div><div class=MEntry><div class=MFile><a href="ReportFormatter-pm.html">ReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="Retry-pm.html">Retry</a></div></div><div class=MEntry><div class=MFile><a href="RowDiff-pm.html">RowDiff</a></div></div><div class=MEntry><div class=MFile><a href="Runtime-pm.html">Runtime</a></div></div><div class=MEntry><div class=MFile><a href="Sandbox-pm.html">Sandbox</a></div></div><div class=MEntry><div class=MFile><a href="Schema-pm.html">Schema</a></div></div><div class=MEntry><div class=MFile><a href="SchemaIterator-pm.html">SchemaIterator</a></div></div><div class=MEntry><div class=MFile><a href="SimpleTCPDumpParser-pm.html">SimpleTCPDumpParser</a></div></div><div class=MEntry><div class=MFile><a href="SlowLogParser-pm.html">SlowLogParser</a></div></div><div class=MEntry><div class=MFile><a href="SlowLogWriter-pm.html">SlowLogWriter</a></div></div><div class=MEntry><div class=MFile><a href="SQLParser-pm.html">SQLParser</a></div></div><div class=MEntry><div class=MFile><a href="SysLogParser-pm.html">SysLogParser</a></div></div><div class=MEntry><div class=MFile><a href="TableChecksum-pm.html">TableChecksum</a></div></div><div class=MEntry><div class=MFile><a href="TableChunker-pm.html">TableChunker</a></div></div><div class=MEntry><div class=MFile><a href="TableNibbler-pm.html">TableNibbler</a></div></div><div class=MEntry><div class=MFile><a href="TableParser-pm.html">TableParser</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncChunk-pm.html">TableSyncChunk</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncer-pm.html">TableSyncer</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncGroupBy-pm.html">TableSyncGroupBy</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncNibble-pm.html">TableSyncNibble</a></div></div><div class=MEntry><div class=MFile><a href="TableSyncStream-pm.html">TableSyncStream</a></div></div><div class=MEntry><div class=MFile><a href="TableUsage-pm.html">TableUsage</a></div></div><div class=MEntry><div class=MFile><a href="TcpdumpParser-pm.html">TcpdumpParser</a></div></div><div class=MEntry><div class=MFile><a href="TCPRequestAggregator-pm.html">TCPRequestAggregator</a></div></div><div class=MEntry><div class=MFile><a href="TextResultSetParser-pm.html">TextResultSetParser</a></div></div><div class=MEntry><div class=MFile><a href="TimeSeriesTrender-pm.html">TimeSeriesTrender</a></div></div><div class=MEntry><div class=MFile><a href="Transformers-pm.html">Transformers</a></div></div><div class=MEntry><div class=MFile><a href="UpgradeReportFormatter-pm.html">UpgradeReportFormatter</a></div></div><div class=MEntry><div class=MFile><a href="VariableAdvisorRules-pm.html">VariableAdvisorRules</a></div></div><div class=MEntry><div class=MFile><a href="VersionParser-pm.html">VersionParser</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Tools</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../tools/pt-archiver-pm.html">pt_archiver</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-config-diff-pm.html">pt_config_diff</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-deadlock-logger-pm.html">pt_deadlock_logger</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-duplicate-key-checker-pm.html">pt_duplicate_key_checker</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-fifo-split-pm.html">pt_fifo_split</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-find-pm.html">pt_find</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-fk-error-logger-pm.html">pt_fk_error_logger</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-heartbeat-pm.html">pt_heartbeat</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-index-usage-pm.html">pt_index_usage</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-kill-pm.html">pt_kill</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-log-player-pm.html">pt_log_player</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-online-schema-change-pm.html">pt_online_schema_change</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-profile-compact-pm.html">pt_profile_compact</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-advisor-pm.html">pt_query_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-digest-pm.html">pt_query_digest</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-query-profiler-pm.html">pt_query_profiler</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-schema-advisor-pm.html">pt_schema_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-show-grants-pm.html">pt_show_grants</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-delay-pm.html">pt_slave_delay</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-find-pm.html">pt_slave_find</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-slave-restart-pm.html">pt_slave_restart</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-checksum-pm.html">pt_table_checksum</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-sync-pm.html">pt_table_sync</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-table-usage-pm.html">pt_table_usage</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-tcp-model-pm.html">pt_tcp_model</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-trend-pm.html">pt_trend</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-upgrade-pm.html">pt_upgrade</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-variable-advisor-pm.html">pt_variable_advisor</a></div></div><div class=MEntry><div class=MFile><a href="../tools/pt-visual-explain-pm.html">pt_visual_explain</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Index</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Variables.html">Variables</a></div></div></div></div></div><script type="text/javascript"><!--
93
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
94
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Functions">Functions</option><option value="Variables">Variables</option></select></div><script language=JavaScript><!--
95
HideAllBut([1], 4);// --></script></div><!--Menu-->
99
<!--START_ND_TOOLTIPS-->
100
<div class=CToolTip id="tt1"><div class=CVariable><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">my @buck_vals</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub new</td></tr></table></blockquote></div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub reset_aggregated_data</td></tr></table></blockquote></div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub aggregate</td></tr></table></blockquote></div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _make_unrolled_loops</td></tr></table></blockquote></div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub results</td></tr></table></blockquote></div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub set_results</td></tr></table></blockquote></div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub stats</td></tr></table></blockquote></div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub attributes</td></tr></table></blockquote></div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub set_attribute_types</td></tr></table></blockquote></div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub type_for</td></tr></table></blockquote></div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub make_handler</td></tr></table></blockquote>Make an attribute handler subroutine for aggregate(). </div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub bucket_idx</td></tr></table></blockquote>Return the bucket number for the given value. </div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub bucket_value</td></tr></table></blockquote>Return the value corresponding to the given bucket. </div></div><div class=CToolTip id="tt15"><div class=CVariable><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">my @buck_tens</td></tr></table></blockquote></div></div><div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub buckets_of</td></tr></table></blockquote></div></div><div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_statistical_metrics</td></tr></table></blockquote></div></div><div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _calc_metrics</td></tr></table></blockquote></div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub metrics</td></tr></table></blockquote></div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub top_events</td></tr></table></blockquote></div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub add_new_attributes</td></tr></table></blockquote></div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub get_attributes</td></tr></table></blockquote></div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub events_processed</td></tr></table></blockquote></div></div><div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub make_alt_attrib</td></tr></table></blockquote></div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub merge</td></tr></table></blockquote></div></div><div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _add_attrib_vals</td></tr></table></blockquote></div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _deep_copy_attribs</td></tr></table></blockquote></div></div><div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _deep_copy_attrib_vals</td></tr></table></blockquote></div></div><div class=CToolTip id="tt29"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub calculate_apdex</td></tr></table></blockquote>Calculate the Apdex score for the given T and response times. </div></div><div class=CToolTip id="tt30"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _get_value</td></tr></table></blockquote>Get the value of the attribute (or one of its alternatives) from the event. </div></div><div class=CToolTip id="tt31"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">sub _d</td></tr></table></blockquote></div></div><!--END_ND_TOOLTIPS-->
105
<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
108
<script language=JavaScript><!--
109
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
b'\\ No newline at end of file'