This commit is contained in:
nbougalis
2020-05-06 06:59:28 +00:00
parent a569e0f56e
commit 755b13a414
3523 changed files with 69315 additions and 79715 deletions

View File

@@ -149,148 +149,147 @@ $(function() {
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> = 0ms;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> = 0ms;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">mLastUpdate</a> = now;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// VFALCO TODO don&#39;t return from the middle...</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// do exponential decay</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> David:</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> &quot;Imagine if you add 10 to something every second. And you</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> also reduce it by 1/4 every second. It will &quot;idle&quot; at 40,</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> correponding to 10 counts per second.&quot;</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">mLastUpdate</a> += 1s;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> -= ((<a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> + 3) / 4);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> -= ((<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> + 3) / 4);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> -= (<a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / 4);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> -= (<a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / 4);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; } <span class="keywordflow">while</span> (<a class="code" href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">mLastUpdate</a> &lt; now);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8"> 104</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8">LoadMonitor::addLoadSample</a>(<a class="code" href="classripple_1_1LoadEvent.html">LoadEvent</a> <span class="keyword">const</span>&amp; s)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">using namespace </span><a class="codeRef" href="http://en.cppreference.com/w/namespacestd_1_1chrono.html">std::chrono</a>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> total = s.<a class="code" href="classripple_1_1LoadEvent.html#a77fe563d65b3545d3621f60b5937dc79">runTime</a>() + s.<a class="code" href="classripple_1_1LoadEvent.html#a5c86ec124a65d109e1a1c469f6bef792">waitTime</a>();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// Don&#39;t include &quot;jitter&quot; as part of the latency</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> latency = total &lt; 2ms ? 0ms : date::round&lt;milliseconds&gt;(total);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (latency &gt; 500ms)</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> mj = (latency &gt; 1s) ? <a class="code" href="classripple_1_1LoadMonitor.html#a133de75df7397da02784a580db94fe78">j_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>() : <a class="code" href="classripple_1_1LoadMonitor.html#a133de75df7397da02784a580db94fe78">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>();</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; JLOG(mj) &lt;&lt; <span class="stringliteral">&quot;Job: &quot;</span> &lt;&lt; s.<a class="code" href="classripple_1_1LoadEvent.html#a5b73c808b14fd4de13510e4126037801">name</a>()</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; &lt;&lt; <span class="stringliteral">&quot; run: &quot;</span> &lt;&lt; date::round&lt;milliseconds&gt;(s.<a class="code" href="classripple_1_1LoadEvent.html#a77fe563d65b3545d3621f60b5937dc79">runTime</a>()).count()</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ms&quot;</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; &lt;&lt; <span class="stringliteral">&quot; wait: &quot;</span> &lt;&lt; date::round&lt;milliseconds&gt;(s.<a class="code" href="classripple_1_1LoadEvent.html#a5c86ec124a65d109e1a1c469f6bef792">waitTime</a>()).count()</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ms&quot;</span>;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">addSamples</a>(1, latency);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment">/* Add multiple samples</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> @param count The number of samples to add</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> @param latencyMS The total number of milliseconds</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0"> 130</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">LoadMonitor::addSamples</a>(<span class="keywordtype">int</span> count, <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> latency)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;{</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> += count;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> += count;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> += latency;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> += latency;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> latencyPeak = <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * latency * 4 / count;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> &lt; latencyPeak)</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> = latencyPeak;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de"> 147</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de">LoadMonitor::setTargetLatency</a>(</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> avg,</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> pk)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a> = avg;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a> = pk;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;}</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5"> 156</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">LoadMonitor::isOverTarget</a>(</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> avg,</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> peak)</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;{</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a> &gt; 0ms &amp;&amp; (peak &gt; <a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a>)) ||</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; (<a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a> &gt; 0ms &amp;&amp; (avg &gt; <a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a>));</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa"> 166</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa">LoadMonitor::isOver</a>()</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;{</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> == 0)</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">isOverTarget</a>(</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4),</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4));</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;}</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html">LoadMonitor::Stats</a></div>
<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae"> 181</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae">LoadMonitor::getStats</a>()</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;{</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html">Stats</a> stats;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a324a5fc97f0e230b15b5a4f66c9cead5">count</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> / 4;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> == 0)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a> = 0ms;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a> = 0ms;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ad66013a90da20496431ea45a15707f7a">isOverloaded</a> = <a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">isOverTarget</a>(stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a>, stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a>);</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> stats;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// do exponential decay</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> David:</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> &quot;Imagine if you add 10 to something every second. And you</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> also reduce it by 1/4 every second. It will &quot;idle&quot; at 40,</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> correponding to 10 counts per second.&quot;</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">mLastUpdate</a> += 1s;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> -= ((<a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> + 3) / 4);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> -= ((<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> + 3) / 4);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> -= (<a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / 4);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> -= (<a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / 4);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; } <span class="keywordflow">while</span> (<a class="code" href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">mLastUpdate</a> &lt; now);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;}</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8"> 103</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8">LoadMonitor::addLoadSample</a>(<a class="code" href="classripple_1_1LoadEvent.html">LoadEvent</a> <span class="keyword">const</span>&amp; s)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;{</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">using namespace </span><a class="codeRef" href="http://en.cppreference.com/w/namespacestd_1_1chrono.html">std::chrono</a>;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> total = s.<a class="code" href="classripple_1_1LoadEvent.html#a77fe563d65b3545d3621f60b5937dc79">runTime</a>() + s.<a class="code" href="classripple_1_1LoadEvent.html#a5c86ec124a65d109e1a1c469f6bef792">waitTime</a>();</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// Don&#39;t include &quot;jitter&quot; as part of the latency</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> latency = total &lt; 2ms ? 0ms : date::round&lt;milliseconds&gt;(total);</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (latency &gt; 500ms)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">auto</span> mj = (latency &gt; 1s) ? <a class="code" href="classripple_1_1LoadMonitor.html#a133de75df7397da02784a580db94fe78">j_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>() : <a class="code" href="classripple_1_1LoadMonitor.html#a133de75df7397da02784a580db94fe78">j_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>();</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; JLOG(mj) &lt;&lt; <span class="stringliteral">&quot;Job: &quot;</span> &lt;&lt; s.<a class="code" href="classripple_1_1LoadEvent.html#a5b73c808b14fd4de13510e4126037801">name</a>()</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; &lt;&lt; <span class="stringliteral">&quot; run: &quot;</span> &lt;&lt; date::round&lt;milliseconds&gt;(s.<a class="code" href="classripple_1_1LoadEvent.html#a77fe563d65b3545d3621f60b5937dc79">runTime</a>()).count()</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ms&quot;</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; &lt;&lt; <span class="stringliteral">&quot; wait: &quot;</span> &lt;&lt; date::round&lt;milliseconds&gt;(s.<a class="code" href="classripple_1_1LoadEvent.html#a5c86ec124a65d109e1a1c469f6bef792">waitTime</a>()).count()</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ms&quot;</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">addSamples</a>(1, latency);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;}</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment">/* Add multiple samples</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> @param count The number of samples to add</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> @param latencyMS The total number of milliseconds</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0"> 129</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">LoadMonitor::addSamples</a>(<span class="keywordtype">int</span> count, <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> latency)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> += count;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> += count;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> += latency;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> += latency;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> latencyPeak = <a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * latency * 4 / count;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> &lt; latencyPeak)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> = latencyPeak;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de"> 146</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de">LoadMonitor::setTargetLatency</a>(</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> avg,</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> pk)</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;{</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a> = avg;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a> = pk;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;}</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5"> 155</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">LoadMonitor::isOverTarget</a>(</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> avg,</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a> peak)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a> &gt; 0ms &amp;&amp; (peak &gt; <a class="code" href="classripple_1_1LoadMonitor.html#ad5f71bfb73704d5b725ae6b8b93c46f3">mTargetLatencyPk</a>)) ||</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; (<a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a> &gt; 0ms &amp;&amp; (avg &gt; <a class="code" href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">mTargetLatencyAvg</a>));</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa"> 165</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa">LoadMonitor::isOver</a>()</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> == 0)</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">isOverTarget</a>(</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4),</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4));</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html">LoadMonitor::Stats</a></div>
<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae"> 180</a></span>&#160;<a class="code" href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae">LoadMonitor::getStats</a>()</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html">Stats</a> stats;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(<a class="code" href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">mutex_</a>);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classripple_1_1LoadMonitor.html#afcec995204526bb7450681a1a055a7b2">update</a>();</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a324a5fc97f0e230b15b5a4f66c9cead5">count</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">mCounts</a> / 4;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> == 0)</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a> = 0ms;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a> = 0ms;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">mLatencyMSAvg</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a> = <a class="code" href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">mLatencyMSPeak</a> / (<a class="code" href="classripple_1_1LoadMonitor.html#ae7e3bd39770353db4011d271293b2a7e">mLatencyEvents</a> * 4);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ad66013a90da20496431ea45a15707f7a">isOverloaded</a> = <a class="code" href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">isOverTarget</a>(stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">latencyAvg</a>, stats.<a class="code" href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">latencyPeak</a>);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> stats;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a7b82ac7cfd946a5abea92bc433fe10fa"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa">ripple::LoadMonitor::isOver</a></div><div class="ttdeci">bool isOver()</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00166">LoadMonitor.cpp:166</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a7b82ac7cfd946a5abea92bc433fe10fa"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a7b82ac7cfd946a5abea92bc433fe10fa">ripple::LoadMonitor::isOver</a></div><div class="ttdeci">bool isOver()</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00165">LoadMonitor.cpp:165</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a133de75df7397da02784a580db94fe78"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a133de75df7397da02784a580db94fe78">ripple::LoadMonitor::j_</a></div><div class="ttdeci">const beast::Journal j_</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00085">LoadMonitor.h:85</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a6cabc692242c9c9ae90305ba7a8b13ae"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae">ripple::LoadMonitor::getStats</a></div><div class="ttdeci">Stats getStats()</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00181">LoadMonitor.cpp:181</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a6cabc692242c9c9ae90305ba7a8b13ae"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a6cabc692242c9c9ae90305ba7a8b13ae">ripple::LoadMonitor::getStats</a></div><div class="ttdeci">Stats getStats()</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00180">LoadMonitor.cpp:180</a></div></div>
<div class="ttc" id="aduration_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a></div></div>
<div class="ttc" id="astructripple_1_1LoadMonitor_1_1Stats_html_a324a5fc97f0e230b15b5a4f66c9cead5"><div class="ttname"><a href="structripple_1_1LoadMonitor_1_1Stats.html#a324a5fc97f0e230b15b5a4f66c9cead5">ripple::LoadMonitor::Stats::count</a></div><div class="ttdeci">std::uint64_t count</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00060">LoadMonitor.h:60</a></div></div>
<div class="ttc" id="astructripple_1_1LoadMonitor_1_1Stats_html_ad66013a90da20496431ea45a15707f7a"><div class="ttname"><a href="structripple_1_1LoadMonitor_1_1Stats.html#ad66013a90da20496431ea45a15707f7a">ripple::LoadMonitor::Stats::isOverloaded</a></div><div class="ttdeci">bool isOverloaded</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00063">LoadMonitor.h:63</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_ad8fefe3e8ad583e1ed1bf02094ac3d8f"><div class="ttname"><a href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">beast::Journal::warn</a></div><div class="ttdeci">Stream warn() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00327">Journal.h:327</a></div></div>
<div class="ttc" id="alock_guard_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1UptimeClock_html"><div class="ttname"><a href="classripple_1_1UptimeClock.html">ripple::UptimeClock</a></div><div class="ttdoc">Tracks program uptime to seconds precision.</div><div class="ttdef"><b>Definition:</b> <a href="UptimeClock_8h_source.html#l00037">UptimeClock.h:37</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a4fba7cc5d86f2f3f7b739d51ab58b6d0"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">ripple::LoadMonitor::addSamples</a></div><div class="ttdeci">void addSamples(int count, std::chrono::milliseconds latency)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00130">LoadMonitor.cpp:130</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a4fba7cc5d86f2f3f7b739d51ab58b6d0"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a4fba7cc5d86f2f3f7b739d51ab58b6d0">ripple::LoadMonitor::addSamples</a></div><div class="ttdeci">void addSamples(int count, std::chrono::milliseconds latency)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00129">LoadMonitor.cpp:129</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a83802fa87957a5dbec814e56d63041c9"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a83802fa87957a5dbec814e56d63041c9">ripple::LoadMonitor::mTargetLatencyAvg</a></div><div class="ttdeci">std::chrono::milliseconds mTargetLatencyAvg</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00082">LoadMonitor.h:82</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_aeabcafcea9e565af1960a1f9b12b946d"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#aeabcafcea9e565af1960a1f9b12b946d">ripple::LoadMonitor::mLastUpdate</a></div><div class="ttdeci">UptimeClock::time_point mLastUpdate</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00084">LoadMonitor.h:84</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_acffbaf7b71e54ec99992f6405bb797b5"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">ripple::LoadMonitor::isOverTarget</a></div><div class="ttdeci">bool isOverTarget(std::chrono::milliseconds avg, std::chrono::milliseconds peak)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00156">LoadMonitor.cpp:156</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_acffbaf7b71e54ec99992f6405bb797b5"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#acffbaf7b71e54ec99992f6405bb797b5">ripple::LoadMonitor::isOverTarget</a></div><div class="ttdeci">bool isOverTarget(std::chrono::milliseconds avg, std::chrono::milliseconds peak)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00155">LoadMonitor.cpp:155</a></div></div>
<div class="ttc" id="astructripple_1_1LoadMonitor_1_1Stats_html"><div class="ttname"><a href="structripple_1_1LoadMonitor_1_1Stats.html">ripple::LoadMonitor::Stats</a></div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00056">LoadMonitor.h:56</a></div></div>
<div class="ttc" id="aclassripple_1_1UptimeClock_html_ae854244a4dcf8de363337e93d5a04444"><div class="ttname"><a href="classripple_1_1UptimeClock.html#ae854244a4dcf8de363337e93d5a04444">ripple::UptimeClock::now</a></div><div class="ttdeci">static time_point now()</div><div class="ttdef"><b>Definition:</b> <a href="UptimeClock_8cpp_source.html#l00063">UptimeClock.cpp:63</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_ab5dcc5c29ad22aef80c0a1ecb7312b8c"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#ab5dcc5c29ad22aef80c0a1ecb7312b8c">ripple::LoadMonitor::mutex_</a></div><div class="ttdeci">std::mutex mutex_</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00076">LoadMonitor.h:76</a></div></div>
@@ -302,7 +301,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LoadEvent_html_a5b73c808b14fd4de13510e4126037801"><div class="ttname"><a href="classripple_1_1LoadEvent.html#a5b73c808b14fd4de13510e4126037801">ripple::LoadEvent::name</a></div><div class="ttdeci">std::string const &amp; name() const</div><div class="ttdef"><b>Definition:</b> <a href="LoadEvent_8cpp_source.html#l00047">LoadEvent.cpp:47</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadEvent_html_a77fe563d65b3545d3621f60b5937dc79"><div class="ttname"><a href="classripple_1_1LoadEvent.html#a77fe563d65b3545d3621f60b5937dc79">ripple::LoadEvent::runTime</a></div><div class="ttdeci">std::chrono::steady_clock::duration runTime() const</div><div class="ttdef"><b>Definition:</b> <a href="LoadEvent_8cpp_source.html#l00059">LoadEvent.cpp:59</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a332eab65a9fc011fd29d9a97acf9eee7"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a332eab65a9fc011fd29d9a97acf9eee7">ripple::LoadMonitor::LoadMonitor</a></div><div class="ttdeci">LoadMonitor(beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00046">LoadMonitor.cpp:46</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a43bd93f4382c736dcfd0c6128e04b5de"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de">ripple::LoadMonitor::setTargetLatency</a></div><div class="ttdeci">void setTargetLatency(std::chrono::milliseconds avg, std::chrono::milliseconds pk)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00147">LoadMonitor.cpp:147</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a43bd93f4382c736dcfd0c6128e04b5de"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a43bd93f4382c736dcfd0c6128e04b5de">ripple::LoadMonitor::setTargetLatency</a></div><div class="ttdeci">void setTargetLatency(std::chrono::milliseconds avg, std::chrono::milliseconds pk)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00146">LoadMonitor.cpp:146</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a5daa0839e8dc4eaae5a7e4d1cb73cd35"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a5daa0839e8dc4eaae5a7e4d1cb73cd35">ripple::LoadMonitor::mLatencyMSAvg</a></div><div class="ttdeci">std::chrono::milliseconds mLatencyMSAvg</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00080">LoadMonitor.h:80</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition:</b> <a href="RCLCensorshipDetector_8h_source.html#l00029">RCLCensorshipDetector.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a8510929c85fd00f42d7439828fb6b250"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a8510929c85fd00f42d7439828fb6b250">ripple::LoadMonitor::mLatencyMSPeak</a></div><div class="ttdeci">std::chrono::milliseconds mLatencyMSPeak</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00081">LoadMonitor.h:81</a></div></div>
@@ -312,7 +311,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a75caa65ce5add23630cdb42282cb5498"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a75caa65ce5add23630cdb42282cb5498">ripple::LoadMonitor::mCounts</a></div><div class="ttdeci">std::uint64_t mCounts</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00078">LoadMonitor.h:78</a></div></div>
<div class="ttc" id="astructripple_1_1LoadMonitor_1_1Stats_html_a7f5eb24f04a33081174ddc390ecad1c0"><div class="ttname"><a href="structripple_1_1LoadMonitor_1_1Stats.html#a7f5eb24f04a33081174ddc390ecad1c0">ripple::LoadMonitor::Stats::latencyAvg</a></div><div class="ttdeci">std::chrono::milliseconds latencyAvg</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00061">LoadMonitor.h:61</a></div></div>
<div class="ttc" id="astructripple_1_1LoadMonitor_1_1Stats_html_ae735cc84c8cd17199c2978cc6ba84807"><div class="ttname"><a href="structripple_1_1LoadMonitor_1_1Stats.html#ae735cc84c8cd17199c2978cc6ba84807">ripple::LoadMonitor::Stats::latencyPeak</a></div><div class="ttdeci">std::chrono::milliseconds latencyPeak</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8h_source.html#l00062">LoadMonitor.h:62</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a79166931243de3e2e686f55ba47df1f8"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8">ripple::LoadMonitor::addLoadSample</a></div><div class="ttdeci">void addLoadSample(LoadEvent const &amp;sample)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00104">LoadMonitor.cpp:104</a></div></div>
<div class="ttc" id="aclassripple_1_1LoadMonitor_html_a79166931243de3e2e686f55ba47df1f8"><div class="ttname"><a href="classripple_1_1LoadMonitor.html#a79166931243de3e2e686f55ba47df1f8">ripple::LoadMonitor::addLoadSample</a></div><div class="ttdeci">void addLoadSample(LoadEvent const &amp;sample)</div><div class="ttdef"><b>Definition:</b> <a href="LoadMonitor_8cpp_source.html#l00103">LoadMonitor.cpp:103</a></div></div>
<div class="ttc" id="anamespacestd_1_1chrono_html"><div class="ttname"><a href="http://en.cppreference.com/w/namespacestd_1_1chrono.html">std::chrono</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>