From 9156b9edfe43a075354030c02cece12ea770fb81 Mon Sep 17 00:00:00 2001
From: Jan Waller <jwa@informatik.uni-kiel.de>
Date: Wed, 4 Jun 2014 17:52:17 +0200
Subject: [PATCH] Meta Monitoring Challenges

---
 frameworks/Kieker/Benchmark (Kicker).launch   |   4 +-
 frameworks/Kieker/bin/meta-monitoring.sh      |   7 +-
 frameworks/Kieker/lib/kicker-1.10_aspectj.jar | Bin 2854953 -> 2854986 bytes
 .../MonitoredClassManualInstrumentation.java  | 100 ++++++++++++++++++
 4 files changed, 106 insertions(+), 5 deletions(-)
 create mode 100644 frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java

diff --git a/frameworks/Kieker/Benchmark (Kicker).launch b/frameworks/Kieker/Benchmark (Kicker).launch
index 8cc8070..53456d0 100644
--- a/frameworks/Kieker/Benchmark (Kicker).launch	
+++ b/frameworks/Kieker/Benchmark (Kicker).launch	
@@ -8,7 +8,7 @@
 </listAttribute>
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000 -o tmp/test.txt -q"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar&#13;&#10;-Dkicker.monitoring.debug=true&#13;&#10;-Dkicker.monitoring.skipDefaultAOPConfiguration=true"/>
 </launchConfiguration>
diff --git a/frameworks/Kieker/bin/meta-monitoring.sh b/frameworks/Kieker/bin/meta-monitoring.sh
index 9b97957..479096b 100644
--- a/frameworks/Kieker/bin/meta-monitoring.sh
+++ b/frameworks/Kieker/bin/meta-monitoring.sh
@@ -7,11 +7,11 @@ RESULTSDIR="${BASEDIR}results/"
 
 THREADS=1            ## 1
 RECURSIONDEPTH=10    ## 10
-TOTALCALLS=10000     ## 10000
+TOTALCALLS=1000      ## 2000000
 METHODTIME=500000    ## 500000
 
 #MOREPARAMS="--quickstart"
-MOREPARAMS="${MOREPARAMS} -r kieker.Logger"
+MOREPARAMS="${MOREPARAMS} -r kieker.Logger -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"
 
 echo "Removing and recreating '$RESULTSDIR'"
 (rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR}
@@ -28,6 +28,7 @@ JAVAAGENT="-javaagent:lib/kicker-1.10_aspectj.jar"
 
 JAVAARGS="${JAVAARGS} -Dkieker.monitoring.writer.filesystem.AsyncFsWriter.customStoragePath=${RESULTSDIR}"
 JAVAARGS="${JAVAARGS} -Dkicker.monitoring.writer.filesystem.AsyncBinaryFsWriter.customStoragePath=${RESULTSDIR}"
+JAVAARGS="${JAVAARGS} -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true"
 
 ## Write configuration
 uname -a >${RESULTSDIR}configuration.txt
@@ -51,5 +52,5 @@ sync
 mv ${BASEDIR}kieker.log ${RESULTSDIR}kieker.log
 
 [ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
-zip -jqr ${BASEDIR}results.zip ${RESULTSDIR}*
+zip -qr ${BASEDIR}results.zip ${RESULTSDIR}*
 [ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
diff --git a/frameworks/Kieker/lib/kicker-1.10_aspectj.jar b/frameworks/Kieker/lib/kicker-1.10_aspectj.jar
index 3f5391c91089e8aa680a3a95e75e3878e9b6e2f3..9b85c0009a8b4d13b90a49fbe602ba67bb9e790a 100644
GIT binary patch
delta 18807
zcmZvE2Urxz*0$3l8HP0EG-SG45R5B|h_1Nm6~TxR5OYLbGXmx;=qg815p{LVVpddy
z)io=qYffNTvtn8^{BL)Sy~FqX_ql!LyyvY`r%s(ZU0vOCH|1?toxzncT{WGXuAW|V
zy3usw=_b=nr<+YTpKdYTa=O(XO>~p=CsU9AoLp-6pq{!$jbCkQ)WCmhv}@TZD!6q_
zbnT=ODIw#B4LuSc*Zx+hO<Ks&`=>fa&E4JlmWA-kj6aX>QQ5V;m7Ddv=dC5j7Y?QD
z?_XA}suw(C*VeXCYsX9;ckl7*cm4}*-FV$=^@sF3E7c7fnKz!Y;?U(0G{9zh+}|HM
zCal|-e(iP3i=R8!D87F4ThQG8yIn+!WtY|k?Hk!Ct*~l*)#pm}y5(hkN9^c$A@{}J
z@VXB(H%2{b5O>Mlq}c4&e~+a!vh6TF&$9Wz6NCRfwm#v^nyD3!fA+8QNBWS3=YG>B
zZ|nPZ#i3m_{>&PmQ5il*`?Oy4GXJqFPdz9Lo$ctoGSa$Vn^oyPs-06Noj;J4_#(8%
zne_Ur>ea~|9TpwXDf{B!<-h#4)NaSamN!~VwcdEvE_?IEphfF;36}HzJkn*0=FYqO
z3pxjQq~#o5TCY5FWxHXEuePjpwS1RT(eT>q`qVvrx68r5`af+EX4A%ef#WeB&Ef&^
z-J0jvZQ1jnWUp)Dm3GHEonLk)F8%ABh}G+s6{wz%j_}Dp@Z@xjl;LqF`cEo)RTO`I
zMzE^2)}?IHe7iG$W#>63)PCkMa{EPRS1*$T&4ze2zY^Cuu3^dLpFh>9v;F+_;;3@Z
z8~gjml=pHjNG!jbGpLWa!0B?mBTIfCowH_7(@$HI#+?|ozA$g^#zS=qKTO;8VE>hX
zB`4FJmc+I1<-b#PqHgX6w^REZJKgxyHRYc6Z^z0m6QYOJy^{0gh1pH@9(T+2$*Cz1
z-=5hz?5b~e(bmYTr;^*$3bES1*!bdzEngd+cwV#Zs<t1kQe2Lm8JnRy`#<&6h_Vea
zgQGtzUMsHe-eNdcaN<MhlDUfq?;m{oQT`<F+<u$Nml}UdUpRJapN+#SS~~Sl+qc|!
z>p0(G&BjHnbsG2LPUz9W6W3|4O*5Nu@BG=R+Y8qn>fUU3*S_0!{ITKppB8>GZqT}5
z_wZkzyuLhp;nRdk`4gV)pa1**F4nWmk~+BmZ8P5eYgqf@?930bo<4aCM&~}_|I8|U
z`t;3A$0)BZLUiwwD)p>Mt!DLZ**JRQ0{eC!PW!s%o7apezJ6twQDNlGjhn`F)-9UN
zuZU4~y!5u_oaBIasXrxeiEdQzXwg5BJ-3Yc{e~w0hOgDqsGW-~PF`!3{5|99?O`LD
zo;h%OR23h;%4*PoPyS`rvnEGsa7q8#;IhSKhsz$97MBAqM_f+0oN>9}a>eC_%N>^o
zE>B!uxOBL@arxl##pQ>~A6EdbKwLrlCr9$z`)aB$XlnF3A8PEM891{>295ZgZ=%Yj
zt-teWTt+Ny`<?fo*6aCrRd-sup6_RJp@XKzh*1M5BUAJsaRXmRRYAQs@V!*7<oyTl
zNS8M7F{-xG--A?Bq<`G9OEu<{{|DgW|Kzfc8Vjnuk&odlJJF*3ydR03G)`0?A=|n#
zMCLTw#1G~&dl?`Hdui;cO@UxVx-Gm3eci-|bNdGx5c+TC`*Guj8zA2#q~9n5By*I;
zjwWyBwbX7aucPZ*cvo)81Or0h1dXFY2<H;g4RmwT;lbIhaP`YH2A6K*?MR%CG4<RA
zc-CA6PEpmSsO@|Xw``Gu+0p4m8XJnu=j&7a4&H@(w%kDHmZQ-~X6n)N9q?+wDg#~N
zD)fwYG2ELx2HULB_%c7g<|7bowlnzdPTq{-rwR5{co;#-+r_(6&Q9Kw+qPFB^ifTt
zs9pSW?(aew%ihiR<$n81`rDu8?dAt?b|;zOvWM@@JuhKG?jAmYE4wTS0p!1z@51qA
zOlVW4v8B9iK~|J_0G*!N3x^*6Bk5{U=svy^_wx%T40(Y_9odIrq*XAa(SE**st0B5
z=Vx(IpBOgq69Vz^Am-@R0nE{%FB*-;54RraKN+|#d||wj1AI4bcO?^UR%)#1OcH!Z
zImkzGJ2_GvLHG9#^8LAXMojqC$l9JxO+g09!P$NY)(Z*{>%nG>z#Zb_xmH$87;a^4
zN2wS2|JdPNA6rFdOqsUUW|E)vsM}!}d1G&&^VC|K)4chtt0>js>?8bq?tku#QE-Is
z&V_q0p?M+t^lr?AQ-#o^MlvDxC^Yw5Fv09+YYS<<^)ViP6cd|~&(|b}BHmTChC++@
zX<Y3XiR?!)G1d<Bst9p5?#K}Tj@DY@PavjQe`3^M<E=GxpqRJhG~F1Xw70bpy)MRN
z?d+`}_LTZ3j4bKTkcvN%4%>z)f;pufLmJc>&5$q0_+DK9MNF7{9NgfgieOF_e_^_4
z6+>2?z)0vXbhq?(1<{b#2@Ltu76lp19ofl*;FE~V`Xfx(b`m`eDPltCDYS_$X2R=Z
zn3Lhf)*keHG<uLLMd?Y5*z`1}sPve^vZm5|KT3&Am?sf3&NIU5^9a|y(-`}R3k+F!
z!P<s~6roAV8RQptnZeEOS)0<mGZ;tZH3KB+EXL}6k0E7e`9#$hiaN(n<t(2uOnhc-
zMNe#{bUnlSQowmE(c`a~Zt!`2AZPlH37^jMJ-D_`RD6SXr9>wiYs$L$BPCrfAPKf#
zK+`!93c-y2h_JDxgI@ymsj{pDEkjFqohp*zO86<9XRJi_p?^y-zMgtvLM%)Voe$H^
zF7tu3r4-SK@63o#OA+qecqSZ*w~?1c4EMeVLtb6vN2vx-(j`7qb%EYo;<LCR$xIcJ
zZevPW$u`EUa2H)h=xoy!ofE4X@+`&vjjAy#gXy;ajgn+HiwU)7*=T6XBjj%U6>#eR
zrog6Dcm+l2+A;+(qR-1P`W43zS=nsWb;M}aRVlnH4Okbh@;y24H4@@W?XU4&xen_k
zA(*aQ!(<-a!-V+j$hvJunNWTmiI#p$5<+Ou4HT|$D!Rch=8lv~SOZEc;q6(k{4Mla
zbQ8VW-eG*rExt3C_J~>P?<u&l8npWsM)a(b!S1)wTX{`V-QmN?%E;D~ZUp}rN0Zw~
z;;|;S8Y{z6I4AoKKa;B?NKHa$-yQUkR7VnmDf}*sg*RcsvAf8}EYuZA)Ak<5p4&_k
z0;uGklwYlAXBi(v!&})}u>v`~jE_=Xqx>>{HkS}5QGKabIp0UMiHgek>0E4gDlSKT
z9d#d}qn?uBORw(p$=raxieO1oA3&`h#E{Adn5#8IC1XBRIMmjSRz5@q{x5|gnn$?f
zyN*)SX4Gtytud8c!Nli3#OUumLQalZ!3ZAzz?sIB@edNZbUnjfuD7+PrZYt=D*6XG
zJoGX6wYD+c=Ev}4If{wY`M#aDPSoTHI#1ujknK<SB;1E=o??ymD<s>e7|#BuC~kqp
zOlVnb>&&vX^d;_by`N#;p8v^oN1h?N&5kpn_i<Ybdi()SgQKH~&*8+uznJdebG{F^
z;Up89y?{qOZb|*SQpzn`8_KG{@+*CT$Oq7rmuOt)C3a6q(%)HJ)O|g(f;XZb_igPc
zT<XNN0=)6B&`H0C3c-$wUSV2e9w~?`HFdZ1qLkMd^VY}JVax0ar2MxR3Obyt`;`e<
z?|5r6dxNx!|89V!ez&!z(7h;zaxg;Q!iRHj;KRO31J=z-M8f?oAEPc;*-?1~5^U*P
zzN@;qkzR6o$M;e@ndqg}@Az(NZ*#rm`yR{=R<aaGzrW`@sXMvaQPM+OPa5uO=S>;g
zesmx6fe%+3x!aM--L9uJL@gD*hevMz@~-NUo-*DVV|1n39|0ed;0As&96=-e?2M(r
zYb9m4dV{F%qe!%qCq%||bm1c!eXgZfntkF2sETOhCltOadiaS?QU}+Et5J4tl>C|R
zqPA+Fm#%%res~B)ec>mmA4SQaH<f+Cv_7WVU-_}zzOiKc9c827D?f;H9nXZHzM<eg
zpTvaC-}rv2>tyqtAFVE&Y)5Y<+qqKScbND<ufOxN)Od1aV0@09JvC7aT53{>f!?fy
z&vt9|%AmD&9u!iA*$CdOhn83IgVdc0nY7ePNK!3bIz`A(C!VpRMJMfosFq6Tr20lv
zR6?rS>y5tEDwSYK0i4j4Gx^LsEHSgUCcn?<{EIDbwX{eGq$ix<%1!uYpbt<BeL1Tt
zhOAZ#1JuQ4_LRX1-gH-LfB2-_)P!Qyf{upO6kOF$tz?2u^23$k4}o(k`)ng&yt=cq
zJ;gcO`_XD6Ax3@6MV35CV+_}hyHT8#;6SOyLJapoFBrMoYpJvy;xpL<1~WzpCM1{$
zF5C`Z#y;u`N96l!UX)-;X(mD=F3exjdC*l8SQ@MsvIFcrDA80vNe^IZAoZx$c9iQM
zO<l4b1!HPr28Unp3dxU_n+d(R&7y*M&^^)KkxDvY@mFt~YL2$wLKLPuh1Rw=rjVyn
z<~zdqNDV?|VF6Zj1Y`A%_+jcl!a|7<(o`Xs&;<*j8~0j98d9PqhEa*VftApZLYvv!
z(*%EnNVZ+yN^n(qQ>>M+iVKdGC=F=!6Fgn~upZ8>Xd}T6l%)}da!cAOf)gETi)fyI
zF4Z*2*-%?)UajFvvv!OX+s@vd&IeZ`ypjl|o#>*S;7B?fp$B)kGZW5t#_XMH57%T%
zw`@RM)kV^Ikk(e{!liX(LPa-wBU&gS*Sjf*1!?RsfvtKmB%v1q+4TO8Kw8_wx4m{4
zY!sE+2@^QyJ`|-DJZX@<(330d%Y@}m1Q%&6f#f#8zWR+ggqmrE@tkImWZscVwMcfq
z!A$s{gV2Xd7^)w0ro9QBbHKWaBX37E@k(Wid`BUPdzq#PR#e{!6Z0v<0NE}fkEa?S
zfzCpI?$%6(#Ae!CQob`dpXVANK`uaC78oFT64ESFLF~!P6~ReZq#%}*<qFQs-wY5_
zHz1>y8Xy@GvXl&vPZCnF+yF^&M<`C^7$6_rg+%T}u7X(51P`GTmvlryOz63X(4BKC
zW=Ky@p&xhmBokhpL>eSI2-<8f0k_~1hJG!vx1!!&7{pJ1Go-B!WvavrE#F*GkVG!%
zHih{KPIO!cZVy?&vhs%Tn=D{%ErTqniMQY*uisnVNVBW5DvW}Bgx*~2UCBZirQWqS
zqXDMK#|%GY&%Zv%o>H>)6&7&4%Nb>ExxEdghX0^A_<?eYLj8ofT;xNEBG5m6s8)L)
zG2!MT@Ui-0xT=371dn+Aw5Ie@LLwg<AiW>k+flm^7}f=$?>_?I<esP13Fb5=PzWb6
z5IX1g2D%}E7=?`=#nlr0C?g1K_xff0PeuR|yIBy}vryCYx<TB5T8dyocWY^#DTIeR
z%|Z>}qP<!Z%IAf6F1Wq{Jhzo#PLTrOnvD!#p^;WYlLF!V1s={Di-^it@)m`a+;7b#
zUNCvK5iBS*T5C?B!9RHQYk~JO#nuwCx#uW45-+%|V5{(AxL0u$R$K5VO$V(V>)~uL
zl4M^;39dyK&Z6Vz9krHH=wi6wE(Y+m5FuW*3<XxmRP~{v+QJMjB8fTOGfC^JSkuwL
zP=rX8%yhbBt(L69U~N!81+k<BVMyphgBg-r2ZM>|AZSQe2eF7ArohQu6^^T#qMka|
zg^7?6OvumBTCg<Csw*_-2I}F&`pD>ab%kE4Jrq|Dr9+F8EvYdSHuS0<ZYwleL56b9
zV-&%XUe-s+pE%Y48PGuJraDW-4TK4*VA|Obv)`wo5ThC){k?#zn8>(r#*S<zX>F+J
zFz#+rDbH>wxXO#8ZK}5V(M<1DgGOno7>1b#R_YHv-w2`GGTDH0b}~4FBJ_qSD;x>2
zNn-io;7uAEy0@q2jZh8NW+;e{w5VdZk5d%Hj+~}yt*BChf5G9LzNrNbZHxlGW4ZzI
zq%lh7hZziMzW|v#xCv$}YJq}S)A;-!cZP+Hu~V>#5OjF74T}(laK=j+@AeX{8HwJ=
zzq1jTq!!iSrb1uUEXrz%ESgRd--A{XLKtMsHVA<<J`#hxu}sprQ+^~IIJ|-xKC?pW
z&UPucnj#v5nt{mWGM!DX)`cv5*-pV*^2?6SJqgmN8e~TagH^-uzwU(MU`z|5VDeTT
zsiFios*J*l&t1m^S)JY-*^-B&7fGGc0vna8=4kL{lY%6weCc8fVLDf9JHtl(j2l$c
z4klFmEDYqr@~ONf*450G$fTE4)>4?ljoc$)KD2NT76zt6OWRvv6z8KcigkOL4&}m%
zVts$;{?`h+FZ-AdHKRB8eLoW{f5Cd;53(*J55gilw24Npp8f@`0t#eZc58T}JH&XF
z!Gak@9zqanw?P+$tx*An9yZXSxFm49aFisCU1q1%!UE#kpjy6c1FLTf6&;?N+9EE?
zaMmQTceKSOIf-olC#0)FXc7CzwjHMV@o~oZeq8Gz&0Y-m`w3dq9@BwhWJ*8Bz{+SG
zt13ug48|6JMnZh4aeHhC@+qsmFq7MIj$uc;q5MUriu%n~SuDbs9t-#8;gCvl26f4X
z8rL=;gme9HTqWryT|ls;yCku8acDQSgz4mZ)K+cK4hMn~p<}550R^j%su|^V5Yjo#
zCGzelq;LV3rGK^bM@QVj$6Te0ow3*P>V(1mp%-R!LYWzMUD9|_m899I7lwC6=;l#r
zXCXs1nc}(#Q@M`!8L#L)ia=EtkeADdAC2w`GrOKDYFn!8iml+0XVnoCdi@OJ%<Tc6
zyy6j`oADS%`xpNomNBjGjg>63hIIpL!W)I<NQK=nJrmz5hzG@X2a@?tL44?OcWiAo
zyjPGYsoxlG_`eELmzwoNtAU>tB#7?x#6r9MRYANdwHN046<zEl5VyZdQ8?1--l%fl
z)bu71QB8b-^5U9+Or39LfaD|~@_WrC#FJbT(f@0`Frm3%O@r$>AZL;hj-mv8jlPnI
z+vX>#NEGIAz|qi)Rwki7;ZeO0Fn>2@tf`xW6@`q$;fcIkzn6?~zU+fQeXGp~fyt<w
z5%rj`Eg8H0te=>$Biunlt@@%kW``??51maG>QPWXn3&X5fvspnKg6iyXNEla*};i9
ztm%(+y0R5r?2nEI_ZRx9x>0F=tcM5fY2+X{T{!^7&N|is2k!$g?y6V?9?X60s0fxc
zydF4m5OxfN%@@6y&U_GT&Zd+>LK-)IAnRT;SQwycLt_VHhdyBl6%E09%^KohLf;3Y
zi*~~pGH8g<S@ky^9U_e4zNRp&{ZM2>v(ZfWQxbZPVM6_3SlC&qlHf+0hhea$+p>oX
zW7HMf9BAh*2QRYNjzMo9j)&I1`7)%#QNDwt1l6NKBk<(AcbAOUWzb6ra@nhI&8G;-
z>dE_M$&<FF2%Xen1rDUT?%+f13mou-A{}hYlX!O|VmW#wT2DEwXRJQ#;9Q*%t{zyZ
zS4NByl2x^6%_w1>T6<g%);V6yX4+^WT)q1*z4FdzVW4{UDZMoKS4a)c>7|dq3d7XS
zC3?wvtbnJoF+xwZ_R@b)AN8!u|4Bx)Vk{;JCtc(4d~bAJ)`U>%YYZrKEQ<c!aY*J3
z^m&{xPK9Y5FN{(*dG0{@RSs@sGZFXVAd?^mHujJS@H73Dp^_#DJ=8^S|AYFe_f*MJ
z2sN_C;y@eJkcr6H-5gz<jP1vTw+^PX7SHfZ*LD(gqrI8#TPpTr3%nhjDR&aGWx9_6
zoa^IgOP;BKANd==RsN2a^xWvjBHNaV{OlW~5E41J+DzbUJK9j&IQRq(9!)1>+$X7Y
zvhXXnt|_B*OG6&qjdmo}B1bJ<PD46bw~{3X(zSAQA?rD4o{)j&Gt=d*^O|&Fmbyk)
zJ*QcQ&`mvb<bRS8?aRO>_$^sa!42(l2H8x(jl3cQp5Ucf3|BstA(c}dE$Hm7AnByX
zgl<nk2NR|u$GDlYEggBzbabTN(}a52(*S48*259ggc0gG3-nUSG--+#$x?HPt);x_
zn6l#EWXPK;rwjenFSGS@GjhbvM$gjGwHdHHc!gd$a|L`%|Hw?}D1IiCJ#zKRak-d^
zo9RE4Hznn{JiYQso}&|m%tGucHpq|{<<7#28njE69LZv~kf<&==SUYXI=a!E*+MUM
z$$44wq&Dd&7h7jbIaA`Ou{J!Ie_5jEq|L!BUAZVrVbaTE9P-RTCbymoH}e11v(EhO
zXvYSyc`jn$cwLW&UdO<mcM-J&Tt}_vq0!}AdgaSon1{@H@cr05*;@ztFc0TyEAQ*2
zZTB%aoQG>^^?X>p@(c~1Azk0kM;r6!ddc&-qZxH8M|{9?CEXX^m~s}Nqt7q(jFJUd
zHx92I$@aA)YRp2kc7G#F?sRye5U(EkPS4DE=V(riGLbAJKV)a&Xm4|-RR2EV?+NO*
zU-YbmFOK%|(}bKrky#kott@o7;k%w-vq(r(EuoQ%@R0LfMa6l7L-t}EBeYP<e^bSL
zp(dp-#*ToD43I5GPG(fO7`=BjHGl{FhNGZG76!=m-;n1mDQt-_lIvhEDeyXG3EIup
z3pP3@8`@^?q@mMGg%B#u!3KHaQmp;2UW}c;R2aY|hcY3yu2W5Fn2q+U43T}IPPTN;
z6f>T+77JwrVVuvhVWe?g)=o#l98OhVG2%~+zXaMFu>F>SJ-(qraHT&QIyupTN<2l#
zHdil00kLna5NyeKIRbvJDMQ9C$MMInEtufd(aD;Ob8x5PqYaRD(N6C4(+b>quI8Xh
zbfY&p!cwk%+v*exN^9$6NvBp|kcZnD=*rqT`O&R(<d|+b#<zSWJZ=@o2qh~KU-OO%
zyERqhqMsY9z;VXAMJepoxxy08t1A<Z=3=vX4KErc4gA&6z||N|ZM>(;!w%riYHagI
z;?<la%-iE+L2WZ|XOJUdy%xQ%M?2LHD#{ZkbE6+p@fvKc`>eqR%;uRS%;svmVc_t!
zLNb^5k;>NzJbhb>{Lp=2!sK<>_P(XEb=W0bOsAv`*k`5vj-Ah$DT-i8HtVrfTQ!X#
zbJt_DI(i8c<}Y#9(8oV8%$6JAOcf<=z}abKj--vGrhf>dxx*_Zp($xw1=&-|A1DUm
zMnvSVt<1vRt<IJ-GzV!T>()aDGesMP$?8<jg^IU2dr+@UxY1U)>m@S}7Y#K!fE8@L
z1yL{+U8)x&H_?R_HFWW%0h@&`>V=_tX~Y&}_0!F$Z;ti;gZiqMHk2ivs<vRI*Wcwr
zVY^&{rShbYwf$D~vU4kZzK%2Z-I%LT(WNFm--@HGZLSO{^K><#)2^;=(u<lHZkf9R
zThhPVFsWxf6+|aJspxInY=`ZF?Xdmcn-MCuW6NuW<0`2mn6;o_KiE#&0kcPNQl-Fm
z0$k1Ln*^W0dAkCS%ty*k#wnH_F{c;#*nvN$sGWFT^}s2pUSUKHGvROLPFRo*EERaz
zF6`)L;S_PVAkwxguJXGtJa+7ctM$Rc5{})C?0S8ZQH=H=Ar{?c!n{3rY`%Pt2`+oF
zAOjyTq1^+#&^odgy$yUWAp$krhrm>QkOVCCeb|&X_{M~`-(2zDD-BVK-7iE*h0yi@
zINSCkTlbR90bv}s*^FUF&D^w95c#7-#2$o~&q3x&EfoTG`Ui0?GTYh!*=+6RMi&mk
z9e-N|wxpj6;8UY`hO|G7Q>@*QLHLYBDruF6Vf%XlY}e{$Kxp61&6X_Ue@v;&nt2E;
z(}4=hnraPnb7gt{pDmZeVC^5Iu!eGLhbV#-oxXxMWk1+>*xkZ(B}cHeOyA;WN%1@i
zk=)<%Bd}DpRUvfaQuj0A=R!PG?K#GTqlI{CnSPoH%TL3j#G{Bn${B`iyXs~`H;<yh
z|IQmA!d}F_q7Z{$U4(9yT~%}~sWMV@$Sy*GiYbQb{xwAvOuu&i;r`iT)NS=mrgOgO
zhWYpt-3Hg7k;esxr4jDzdn)<<So;|Ixv6%qe$w_*EmP^c8ZSQGj-hduDMK=jp-M*E
zF(J>?9fu}ov5%9@bUu!3okl6gQJCHQC5j`}@<$!PHbP5V|3XjEe}S@_lK#RTFi>EW
z%D<4ddqSBo=>)dui>dsCkjkahVc3|H$fmV*DejaIL|;#0d2OKBQ$hx(?ZXI9PN9TO
zNR|W#nv?8qLlZme-}j}QL9d%mBUt16GX2fdSTd9PF=1XmcXR4_1_OLJi6QSN{cu=r
zsyU0Md>Ye5p2ar7ZVD3$&f<aX@eJB|6~p{A!`(@m94(DFCxqj~)BC*OOp&wTip}px
z)x`5C#Kz|__&1U&gL^ugHT*K$9lL+&om<&?EWHPF7~JTBbc!^W3HcWgpxyJx`zmf1
z^-JLFOIh%vO_C5iU()!IM=73~`!8g|j#6PFw>+B(?Jq*Jo%BKu2KaJ|y9H(ZjcI9L
ziU2jbgi(g(D1->|?5+<W^xpLR65eC}lB?()@f{Bq?(EGB*>(kvUC4GfrLxO#XxkP8
z_}LbBjnq>NSAV+!oOwxTObOS}_pmGIJARj<8-;Tm-Blrz;|itWk5C1Y_cd(Q8l9l9
zJIMTkYq${{KFx$W*HM10&M{%5B<#USszmd=0m11K6PDaSo9HV{NW9{1!p>lIHxcrh
z*Yypq1D<mej@sU0$fuhyvHuPehTnp)yNn6v%fNkpOB&PzhO~d+Zb^5XQ5P%jV5)O&
zV^H1k7DjUA%59;$DxE^_;NW}HGYRvgJ9iMjv9H+#x4w(KnpVMtzwV+k?|H+7$a|9T
zj%8d0=V3=@?xA5BN8XQ+>p(<GEQ22#YbuB<-75np!k!`R>^-chi6v5VSUKv#JZA<M
zmgBb5E`$le_mOV>!z96zw%&)mJX!D}w+EngsV8Z4wDbXJB@LPItf5DJn*0y;BIyq?
z*rad<r-pktQd!uKeQCl&wA<g*qxuWYGo*VYjNx{)V?CxkMu|P&&Z7ZUJVM{|@bXe}
z<Oi&!h-soL$)-%Fd1&b9KY}IaHcesK(zkz56@H?)#{xbNo6Qu{XM4Dj`x6)pKf;i?
zPlQ3-*CHlpi=oEKi{W~oVo2;o4-5K3Le~9<IFk4bhsJql6^<hveTG@7U7{d?G~y>b
z&X+yI%&&cpU^Kj_=<u!83s}_rtsow>>;>AZuPTTmg}y|IE52rcR9y3LGT4D;y+$0Z
zUcvU`8!{{VCft{|#<J@1z5f&9FSPTOFrPc{L9uB;w?BAjrSlF{J0mLpjs(g-3&hme
z6W=nt#!NP?KnFPPVY)C6Ga6rkz3eb214Q!{2NNc5u&W*D{D0vE&Yt+{?hQIv?p9rw
z$oY90APe8(HnQH^04enLv?4J9g)sCTR;6<-1D*SOxVqsTx*QTx9UjD;Zp4t4?}ZLr
zrC!j4<HMYdZIJWg2ju+iXvR6($J3a0OHV;qq^7j$1HQnpZ)>3YJ4W=Rl^+o5uzwMW
z9eos?{y|yRZGaASy!c<F@ZtfC((WUQdfYHYaHek`u?V^G4Eg*CFAnE_!U$$eRFDbW
z>S;{aF%6Doen#A`8X_;Id3vzBiueV?*on6v(xl03=&Whc7wiSQ9At3+gPyijV2uds
zz9SK%zrxGcl=Ky6;ntTJ#p{x%Gdl^`^c91Q{su}FC4B?s^L<9KzT;^`Ro{@H?k^cq
z>!qg)YZP3Cor(NfDDA$W;q2Z>grVI3<bOTM>yxJ`4SRzwl)DF7=%~07u{8c9k!6x6
zK5oX;Ko`!v`o`c{RWRgbL~GQdj>3(+tSP~radb=LMOO|_Ym#c|60sj=t7WuWS}!|h
zDwad5Bo%o19!z()iI*v@SBVMS6W#y`;l!TYu_g+Fy@}+C-2O9%_BC5bI&ado@N#3i
zDkIpQp%z_L$0$!NPT_8}VU!PTyu1u3R1?k1J4!k)`q~lA<q^ouy^WxIn9OvQ$zHYw
zx;2t+(RfMcNw<u|-dtL$BA8RMvDlrnm?0zCW}*r8%=9v+SH@yru1RJ!RPV1~3V)w1
z^Qyk1`@ZZyuE%mOD@xO0+~8sgmj9>H<an9TlYg-<kj<Phg>PPKf9U&j(>KX~)2dBg
zczbFt)}!-gpwJNp=O6LX(X!cS9%~6NdYD7^v54txiV+et!2{Gevb7TZ$=^ckq%tLy
zr5HwAEX2;7*(IjPvk)z4R!hN2-lD=(IM?WkqB3XIHc=x6(g#b-OBmT$iL<%6ZyDvN
zmDq!`tx0d}5Kx^ZLI%Wye$j~CxY>B!p}?m!2)2)d0n*M|jOR3721tmP&RKfX$c`gz
zY%wZl8;ojcfJE}59RWHYDGBP4An2-xJVH<?_@q<N*)m?JEt<!LNID(GHqlwp1Y1mI
z{U!>cUmxwXAZ+QV(@=t)Xvr0JWP}BFVjtBgs<0E&RVyjQUd&KUq&N0rHWxUGM%u%t
zjao60J2^(8ds5jLode6Z3zEH&4(L5JgXzA{(`o6bgV>3CI8Q<FencznSRKVEPP0&f
z9jM7dofExu#017HVsH;9aj)tK**c30INb_{g*xN>`K&WMsIx{v%&D6@?%*R_Fq6dx
z7<}`9&Qf}|z?Rtsj+wc_v4R4oYvGDze)}*JPPt+QtSV%}zCxWHjW9;;rg@;%Y&Wzz
zaFpr(bQ1@0D~g!V)?GviyUv93?uc-myG+O^*VUx<cUf5KQLYC}3@BH0@-*qqdw4?E
z^C{DH^%RG4HgA}~zrlRU3w(~J=uWz2I5Q0L0^8y<BlvyR$;Cx~@{s9;q4%m}x~E?7
z?WPGO`C@{G=)@$h%7O_mbm9=MiIxfDypf;%J(!U0;q5FXklvoZFGe5bgANmX8DWwS
z?6eA&1RYgEz^?)leZ@4cdtC|RDXp%zm0X!g=P&v)m)rQk!s`YS!Jn)fdRt2S04;6t
zgSVAw^d=Cc&^6uLf}XTO&uAAVJ$uNodnVvae<V+hOa<|#R^RZoYvTa4Kfjp4PZz^%
zn;88Pf=Wkte5t-xa*1&Z$lF@}b%DI{Wo~>RTwIgK^hfew>r^>zf=vRD=~tjrJ*0|2
ztc6fY2@-$fIvk{tL1F~WJ?QNyJ+a4dPKP9<3B?@pHfG~z5BWTNoP1K!`A|<m?8RxW
zNpbKZue;tRRQsB@2b<t@0Up;8;l-5O283Tlq@~eahP)P0bNak8P)~d1?M=7lBWiiI
z5Vi7u4RmI~xC<SxNsDS@{_oWEaiUmfWORNoJR&y<#%sI~B=c6CB<Lu(wy2>iIv<z+
z?yUVofj<fI(NI+gs>9bHg^9FpFA0;m2HmK*E^Nhi^YLY4L91}pue2sqoW*%fV%pYW
zSgehvNrDfZ4-*G)TjodtPYHF9fQj>%fOq<?^d$_vcFjSrp>@&g;2fq~nB!wkE9+wn
zAm~@a=N&%P=h!k|B4^@taa=uguR2Ic^-=jP>f<i(9G@A9bGfinlH;Ca-as72tuJRn
zVYyEzyU*s=NAF)7U?#dfR&>@>X)L;CH-ajyAygNzV4_3^D)R6$qXP}GX4i=Z$YIgf
zM~;QuBIhTxs2y&g|0UelS)LB)!#SUp2CBv_eeudm+LmY<OOC|)YAC-E!k~#`EYCRD
zmfsY~1U?+b-MTWJ*cEmKfBkzcS-$~#)i^2+M>N*;X0(LHVt;OZG81k$MxHe8$AtDx
zMEqcBFcV6fV6o3!rU+JaE*-}(=}j<4E7R~Q+rm6Z!`b32I10b0ERDc2XrmV*nxYos
zlOI`A)D(7J>V;;J;#ltQJf?Y(=gUibPkhz7mLUmieSK+RGazq&XUNxPVqfVHI!au@
zC2f>2AM$FB(w%vL30n{N3X&0=ZZyR$xJ`3}&A0_deSo}Mh%31+S0o<3S#KeZ=Kj4S
z37%wq*Vl<|MI+3)KVu3yl}WG%4K4F^qwgPZYm%2QblAYQgsm(}YKgmFF;<_%t8n!*
zCtb8ShI{n2I$}baZ@!LnH%4DXvs=T2bt_ELp_=&W=11E*HT~?RLw2pKUoPqI8yo0v
zx5C12<zRp${33ScuDdFT6TSEaVY=+5AU5>X%@3<f`W#tuUp9TTHB8_3G$5I_LAtKd
zDTp;$L}5k`w?Q1v21>9e71s9CP)@X;8%4H7C+lk~u$G3jL)5Oc#TtK3HvhxUU<f`V
z5_47l6xvRl!)ZIx&KS{+gpT-u!jpDr-KMjI_)?D;EW%vMj}cS3r8stqK`^$>^>b#w
zbxLV3?FE)HxU@Zne~=Wxh+<-~cWaevfSi<&&v^z&vp68T*BKzC>-<cpC=O1H*kAz9
z-{5CUy*gnWJ>oDu<2oQl?>90+eh1`M`W8j7rHxxKSMeQT<oyl>Hm0*3;p33q24-7#
z!Y%j9UIV106H5M?!v;ufXRHj%qUwkdg%tTY=zsC%D4J$>ML`Ydg1mb|QC+ZLcDhnj
zKh&GpuK0CFSr=?FBRv(QKexIb6L!?Y!S~&+@br&x1u>@9@wkE3?P7ow#KZR;{TOnz
zpFcj9?}k=YBN$?xf^TY$N{HE5hPaINccF;xKzzn4h%NPNhs-(O9hq}3mBF4pP+L4^
zFd=w`zq|ZJj(n#D59jzj5bM@6nclr8ZUnPuOM)Ba^@R1KdcmR>YDV&6N#jkKy`agH
z1s~Ea^*15Y-ngBpmr80G@u0E<Y>)5shVdOa3T#3TSNl8BvmAs){$+!_s(UBE-=fvk
zS+WIu6ue!6n^L4vfC+gFMTUg*hS!@CVfgbdrc)=0$=uhyOxTbFPsII9i0&hf<JKHt
z!uLMVL>Dk2y}%#OGRYXnh{FtN+864PN11T9FSb&Rs98U8J@?{I35%d3!w}o1{o$+0
z6$$aC#KEEw<@LudpzT!yB=m;A1%(X2ZPfZkb=Yv!u%x5U12B%zI|i)Mfuc1f-to7g
zrUMYcg#$tOdapVmnag=#fb<vy57s<1K<*C0GjPy93X;s7dCG*8A)+O{9gGHBpDV}^
z?#^39Fv))B?<|EHAHIL6hT5<Y936@fXpCseSR_gQ1Ak+3ABMYBSCi_9R$}ARHCqF?
z-f(dQhgUsv)1u+x1nIf!hhR$sMxa6eS_a61S^-v6H5k*b8;NiUDTv1AFg+nGz?~+i
zz)zP5hRDvmN<ldt5Lq2@WUk9b&X0tV=5dS=9~WRpTgU2e4y>0pqd+L?tPt=?&L{+I
zNmqt!?izqC*=Y3pHJ%|hzv4cZH5yr%+e1MTRSjw6ui`ZBWirFmebE&@$iiXQ7?f7~
z{tR9?MjWJ4Q^r{Ap<D(8;1^X-u^B%y24d1!(Gx$(f@&hyVYo#1r@d*&Lixs8B(<>l
ziXUvB9uc6SlyTUU+#VsZ@B{sESgzMnSPw5#0vzPm4f3ilo$#aC!I5Y-Vmz9i8_Ae9
z69P;rZ#)X_!%+rEQ8r$f;JZ;*`mgcu2?$cq7=>j)`4dpXYK>J84aJUyxeKY7z2@W4
zsr<b3csx2ypNLMsj8~{yX^Wx1$Cpk-dW~MB=*%c|5_Uw-mdZ$Wb^y-1CL#FF#3=cx
zBGw88;NzxP{o}@kNk4j<0H?Wg%M|8NZv6^HaHRH=k#OU7F{EfR%J|FOieN;I({M6S
zyhq<44fVmOfC<6rsH#u(LVh|DdBPE<$vhI^NIf&);MAiGd3`d#j}9LVuw=hnik*fd
z3~>tlx^Yq=gt9L%WZenqaO_k*MO@AWTv8~G^!gmeUN{vlce=*l+S71@8}=^~(6b56
z{TCeht*%^JZ%#unhkuj^4wUv0IxHsqm~}dQNSO{FEKJFJA#|%}pe}5i4%>Yl43G?m
zKu21!7;iY_Cc|f-NjFD@Fo>(?#00OI*u3*zOvs&uCzn=Uf!0(s6M=Z=Z2)hbhcvn{
z8;g0^EExN#g`ykBHTs1KwPs@`&bML0oi>4<@=x#O>_tobrn|kQ!jHM;;K8|N2gd8%
zArPCUIp|ND%+&tLIQ0FTtAD5UdOrFbG#7n78N>7|=86NkfbmRln}<+NTEc|+O9DNl
z|E~ot$*ul@&z#vZN#{zQ%L40B?0oc-i+5*w1h2Vs0*$3dzZmZ18V2896R4Fx){z|_
zwg8TI#Je-8#lX#h2$1y93|L1-z&Pu}l5V)F0c9-|C#hDGWu};bUsIH3VtNLC3`7;m
U6q~EQN<c^B`u_&v|F`1*0S-J=f&c&j

delta 19131
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
R%I=6nCo|=TK>SB3{ttMobix1t

diff --git a/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java b/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java
new file mode 100644
index 0000000..bf02cb6
--- /dev/null
+++ b/frameworks/Kieker/src/mooBench/monitoredApplication/MonitoredClassManualInstrumentation.java
@@ -0,0 +1,100 @@
+/***************************************************************************
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+package mooBench.monitoredApplication;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+import kieker.common.record.flow.trace.TraceMetadata;
+import kieker.common.record.flow.trace.operation.AfterOperationEvent;
+import kieker.common.record.flow.trace.operation.AfterOperationFailedEvent;
+import kieker.common.record.flow.trace.operation.BeforeOperationEvent;
+import kieker.monitoring.core.controller.IMonitoringController;
+import kieker.monitoring.core.controller.MonitoringController;
+import kieker.monitoring.core.registry.TraceRegistry;
+import kieker.monitoring.timer.ITimeSource;
+
+/**
+ * @author Jan Waller
+ */
+public final class MonitoredClassManualInstrumentation implements MonitoredClass {
+
+	private static final IMonitoringController CTRLINST = MonitoringController.getInstance();
+	private static final ITimeSource TIME = CTRLINST.getTimeSource();
+	private static final TraceRegistry TRACEREGISTRY = TraceRegistry.INSTANCE;
+
+	final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+
+	/**
+	 * Default constructor.
+	 */
+	public MonitoredClassManualInstrumentation() {
+		// empty default constructor
+	}
+
+	public final long monitoredMethod(final long methodTime, final int recDepth) {
+		if (!CTRLINST.isMonitoringEnabled()) {
+			return this.monitoredMethod_actual(methodTime, recDepth);
+		}
+		final String signature = "public final long mooBench.monitoredApplication.MonitoredClassThreaded.monitoredMethod(long, int)";
+		if (!CTRLINST.isProbeActivated(signature)) {
+			return this.monitoredMethod_actual(methodTime, recDepth);
+		}
+		// common fields
+		TraceMetadata trace = TRACEREGISTRY.getTrace();
+		final boolean newTrace = trace == null;
+		if (newTrace) {
+			trace = TRACEREGISTRY.registerTrace();
+			CTRLINST.newMonitoringRecord(trace);
+		}
+		final long traceId = trace.getTraceId();
+		final String clazz = this.getClass().getName();
+		// measure before execution
+		CTRLINST.newMonitoringRecord(new BeforeOperationEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz));
+		// execution of the called method
+		final Object retval;
+		try {
+			retval = this.monitoredMethod_actual(methodTime, recDepth);
+		} catch (final Throwable th) { // NOPMD NOCS (catch throw might ok here)
+			// measure after failed execution
+			CTRLINST.newMonitoringRecord(new AfterOperationFailedEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz,
+					th.toString()));
+			throw new RuntimeException(th);
+		} finally {
+			if (newTrace) { // close the trace
+				TRACEREGISTRY.unregisterTrace();
+			}
+		}
+		// measure after successful execution
+		CTRLINST.newMonitoringRecord(new AfterOperationEvent(TIME.getTime(), traceId, trace.getNextOrderId(), signature, clazz));
+		return (Long) retval;
+	}
+
+	public final long monitoredMethod_actual(final long methodTime, final int recDepth) {
+		if (recDepth > 1) {
+			return this.monitoredMethod(methodTime, recDepth - 1);
+		} else {
+			final long exitTime = this.threadMXBean.getCurrentThreadUserTime() + methodTime;
+			long currentTime;
+			do {
+				currentTime = this.threadMXBean.getCurrentThreadUserTime();
+			} while (currentTime < exitTime);
+			return currentTime;
+		}
+	}
+
+}
-- 
GitLab