From 268fe0e70a233d3a61b60c3714b1033bb7c1c33d Mon Sep 17 00:00:00 2001 From: jpellizzari Date: Wed, 26 Oct 2016 13:57:03 -0700 Subject: [PATCH] added compose file --- client/.gitignore | 3 +- client/package.json | 6 ++- client/test/actions/90-nodes-select.js | 5 --- client/test/perfjankie/Dockerfile | 5 --- client/test/perfjankie/data/_replicator.couch | Bin 4194 -> 0 bytes client/test/perfjankie/data/_users.couch | Bin 4194 -> 0 bytes client/test/perfjankie/data/performance.couch | Bin 106600 -> 0 bytes client/test/perfjankie/docker-compose.yml | 25 ++++++++----- client/test/perfjankie/main.js | 35 +++++++++++++----- client/test/perfjankie/out.json | 12 ------ client/test/run-jankie.sh | 5 +-- 11 files changed, 50 insertions(+), 46 deletions(-) delete mode 100644 client/test/perfjankie/Dockerfile delete mode 100755 client/test/perfjankie/data/_replicator.couch delete mode 100755 client/test/perfjankie/data/_users.couch delete mode 100755 client/test/perfjankie/data/performance.couch delete mode 100644 client/test/perfjankie/out.json diff --git a/client/.gitignore b/client/.gitignore index 1026d1331..89b01c0f4 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -1,4 +1,5 @@ node_modules build/ coverage/ -test/*png +*.png +test/perfjankie/data diff --git a/client/package.json b/client/package.json index 650e59ccb..5209154d9 100644 --- a/client/package.json +++ b/client/package.json @@ -85,7 +85,11 @@ "lint": "eslint app", "clean": "rm build/app.js", "noprobe": "../scope stop && ../scope launch --no-probe --app.window 8760h", - "loadreport": "npm run noprobe && sleep 1 && curl -X POST -H \"Content-Type: application/json\" http://$BACKEND_HOST/api/report -d" + "loadreport": "npm run noprobe && sleep 1 && curl -X POST -H \"Content-Type: application/json\" http://$BACKEND_HOST/api/report -d", + "perf:setup" : "docker-compose -f test/perfjankie/docker-compose.yml up -d", + "perf:run" : ". test/run-jankie.sh", + "perf:cleanup" : "docker-compose -f test/perfjankie/docker-compose.yml down", + "perf" : "npm run perf:setup && npm run perf:run" }, "jest": { "scriptPreprocessor": "/node_modules/babel-jest", diff --git a/client/test/actions/90-nodes-select.js b/client/test/actions/90-nodes-select.js index 0a457557c..f5e56f291 100644 --- a/client/test/actions/90-nodes-select.js +++ b/client/test/actions/90-nodes-select.js @@ -36,7 +36,6 @@ function deselectNode(browser) { module.exports = function(cfg) { - var startUrl = 'http://' + cfg.host + '/'; // cfg - The configuration object. args, from the example above. return function(browser) { @@ -103,16 +102,12 @@ module.exports = function(cfg) { debug('scenario done'); }); }) - .catch(e => { - console.error(e); - }) .fail(function(err) { debug('exception. taking screenshot', err); browser.takeScreenshot(function(err, data) { if (err) { debug(err); } else { - debugger; var base64Data = data.replace(/^data:image\/png;base64,/,""); fs.writeFile('90-nodes-select-' + cfg.run + '.png', base64Data, 'base64', function(err) { if(err) debug(err); diff --git a/client/test/perfjankie/Dockerfile b/client/test/perfjankie/Dockerfile deleted file mode 100644 index 30cbf6bc0..000000000 --- a/client/test/perfjankie/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM couchdb:1.6 - -COPY local.ini /usr/local/etc/couchdb/ - -EXPOSE 5984 diff --git a/client/test/perfjankie/data/_replicator.couch b/client/test/perfjankie/data/_replicator.couch deleted file mode 100755 index b8dbbebd04cdc2587cb8b577f711dafdc4c0e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194 zcmeHL|8EoL8Gj!8oY;f7P53L6Jqll+vO$lrERB%A`8HO-@3OY*`&L zWlasL(w+`&C`>d(wAt&+hNQ1G_lC$mTM&^8FDJTG(sZ*^*EKyTVTCJQG;)!}fap=Q zT#&cbZzp?n*_72Bp=QcONj1qXo-`7NUK2^nB5CxB9Mq`i=w2){EK01UL!N+^tO0!HizpwRk5VWsu`5r zj$oK%Wl0e?3q>jM0fgl&2?ov4lB8t`w`2_o#N&iFOr3hihsdHu-eC^=mqA#|6r>@O ziuUg(-mxHw)A!V}qJ%;?*1i!UFQALxnwLVmyl*h1v7u{YN!Ln}ZjO>-*)WN;S2j$3 z!_$b^!4p9hNk$@)OgEtu=6Z z{ceWrOO@!e=uQl*40(h=e=ofQ-j-$t_}DVU;lVyCI37jc426xqtiWhHytxv&*n>9A zwxK(7HGzQ+4q?p8#{23<1f9r6k9476kCWgvOGiZ46v>Fl)S10q*&v_Ry^DMl_C%a4 zeXY{5&XW|2vZ}5H5HR3RcwZDMuN?HyK#{M|PLv!L<~-;N%nwxZv~%kM`I0R{CdH@Nn)OBHW z%MSOd3@>q0QD9>Mp!AKj_PTBAHUMf1s@%OfI=09{ZnNc-} z4B?yWK*z;wtOk$P7-UagBefwHh*%57AGTuMqeeC6EYPk6mhl2T3z&I}wn7mqhey(? zMhgTL;!Go)lNKdI&Z$e%v}OIL!{n_33ZOU|Tmt5;7&_qD`LFOdKYGv@IX~HS!Flrf zJ9&oo$~8xCPta?9t81A{PQ7@ z@XgLjSalsyItyilvg+E^~Es|!!$=Gp#$(nN_&rtYl&A)L%m|a4+d!p&%@gD;O z+)oDz5<}_h;GV&{dZL=dVA~6-!Q}X3usH?my~hSYsCT^KWjj>UG6un~n(c-`C${^9 zwq(@y=qv~khw4u=&N!j?@HQO+YZ^mi)F7(7gCs~}tKfjPrYpime>BImAxjY|?R9n1 zZD?QKUTW8~u@><5^SuLIwSMk`Kd+#)inD0^62uJE!tX7~=$b`UjX1i%j9ubCr7zev z7KZ}razmn8!6t}G)+x*W6VwxwONtQKDt>%EaM$!GKOznzlo6_yk)1v(Oz$#|z7eIm$9B??u`3FOj|={R}F$ zIOvF@1fr$SiC`vuuy0}V!U9B&=w9z`bv)Q&53CjW;1DXhDm@>GojeYdTo`{1V&^%p z@o(AgF2!G*k7c0zFG)9Ygz$&bkBSi6kBEFm;(%z9M4X``9{;L?4;)?}J(=RBZehci zT?9;R6dqMzMsTqQFv(T*K-bki@3c)af-|g#Ioq)?zuHy z$~&;OkE6P&D@${xy0TGbSz5?h#L{^mcHJ#ks@kT{Ltr>$f8=bn>5^XOf!&BpO0i4R zwFr|oX~i6=E%0<;h8{d*@-N$NF7V;SKe>Wi^g`)xoTZoEm%B{5!V`?h(TB0L(*4>RPo>+%WYrSh?%Y&@ zIFR*WZPdBA-f1UoEpGQ=S1VELlFOaE8UG0OezjtmvuTmouMTXRYvy;Zfa3}xOeTls z_*y*d!Bes4vBKtZ5s5VRJO>B92X>Qf8^J}>iS0ZI`hJ-?VOlI7e%4OZu3IjX$m#N5 z^&H0TpTeeRPQ4}T2Z*U+=yiE;Ljr^Y2*mM%fO z(UrL7pBs2-Dr4u89HxOOE+tM} zwc%Mm&G42bgPygX?p^@0dCJ9~RB+IZh$Ra2-TZP5nOw$Lt4TTr0st8Jf?lN%Y?xhOk9Q_w#~{pneOVjM!G z7gBWaLV-z|;=VDebC-k9M4$dD+ZQ=!X$HoqyD1PskiN*Nb0_4Ll2epj2)2afCejBr zASQN-FVYri<22du#q%R0JLTu3z;_}X6*2iaSs&-*lkSQbb>7)7FV4u;p#Z{tRwN=1 zDBj+VY-2gZiyXMN1tKp}#08JzvY{w&u_a?;yU}}_kb^g<;OkIm*@G|T z!%@)M;Yj#I3O_SpPY!M5+A>{}ovqD`%juUx+!wbG?W|4FW)y2vW7PFWS=N{LM;^ri z@IxuS33)x}qEi8xJUkc?$E2!<=k3SKQ<2x;R3zVnY{)*1On3za53v)xlVbtxY2@!HNvJF-vI6q6Wsk0<87cK#9OU++W@P#z>NeB3`9U|Im z25IvX^0nF+)w9e=YI!`W6Illci=Q{La&!`Cg2_6_K5lA@LJR-wRELCoO-e>~-!6rk{6cMNY<6^h&VT~2$1F&d zLKc-$m{F_|KXD%<&?rbJDcLGtGe9^-W-Ac49(Wp*XGzwM_YO<3izd+kIA+CLly4PLX?5Xj; zBeC33Sm3OdDdwLjzK~58xVR8GcIuCx_8b0E7Kv;eBZK>+2uYkKzkjQaaV>MQ3*nLs z@(Xn8l9H}XEy~n(DIAnJYQ0pGnNpNF#zLT}Mdm1^vDw9%%#5ht?BK+6iVCOMBWdCQ z5&WNfDm*EIUbH)~NHz)CwQxh^VX4DYt>|=KevB6q{v!37V?RzUYm4lo+amH;@gjIQ zXThgL9b2#=P^Lsyq`kO+`eEq3nX&?zlQ2Wt^!>K@E3!~Ti9^Yxxc-fVo#5gtgvYnd zT6^VbL<;4?UQ*S?q|Xnwa708;sp^hu=tH?9vL=JcPf#tt9+aeuws5ACAT~8<2K+>q zEbKbL6Iw%%p@DTeYYTFU@>8^3wAray-m+ClB6GHj$;i$qNS8Sv2bsf>sm^el+??zJ z?fPJ37wLwisjc9(N9Gb?1s6|NMq&FL4LrYs`i_}PPDBz%CvP&%6}d~oToIDGH1n$? zzMLRw4Tn_(mur`l{EXbf7SZO zYOCUifE2huGcvU?YQF(T&&h}2Zy+2XP`&Eyii8D}<7U-Rc{BWdf^!g3Ncxg)ZSpm_ z>F^?$EpfK;*kMJ9AFX&R--Mid`yz6Z;-~O-2X-$0)^B!NBSg%Rs{VA_H(%Zjx%TOX z$YrPw*`+PjN}B=(s#|Op98!#`Y{^-vye0FroYD`Tj3vQthmgx2b?)Q&2Z)d$@A4QwGImr{x61 zWabQrQT<^z_@X?Md3qJ0L&fmK8cv<)CQX*J&#Q4r5c`oLv6Nf?a^WKEF0Tw!Z(Ep4mGPR%4H zigN`HX_8_|dI5ZL7j250Z>qMqFefLoz%NFvKGC}M%&DnlZ)9n^#tIcg=2+QTeWWSY z6gY*8q@7l5@9i73*UkohTV*E+d-^67W@N#W=aXGZ)y#uZS*|ueMPg^|)>oTUkd>2D zm@b=&B*M^E1xfHXNd?-J7`2D+!2WidmyzR;z0g(IxlvMTMnOuxHdh0WKxA)ZXO)(b zUr^{>+c`!(dh1_L9=?zJQXwhI&V*M1Z!1yj>{MBiz&hV)5$Oy6pKXb#_44;0m(GRj zp{^VKn*cs$?c(AkNzKWMh1c4AjpQvQ)xt+VcX180fsew=8@!e2UzAJs2xyL9L_QPt zl1~=F-$*WsMVZ<{q6?bq(gisQ>)Ljt7OzEG@{q7aL}0mG2YJzxZKw$9h4!f)i1 z01*M-*-jWFn<}+R$;r+p{UQ+oucc1H#*xklNt78f*MOgpolUl;IHRxaGfGxZkp69x zVgZ$J?<|u!2YiQ|Q@>K|;CfJuAu2GBil|rR1+wt*Mw z!d7rD2@;_KjV0$HF>zMgSZI&XnjRuSme$qAUK}N&lKR+7rBnxa4J2J^A> za^_?3!&;CLBP+doL^>i|;!}<95q(Fb-D~D-aMCsZ)SSRSc>-Af_nN$W#g~?EXN=jt zdBR1%hZD<8^*_7{rPqR&m%2Tfmn8g3(?+wB{+P2RyhwdfkrD7m_XE_)+M}JOUu)~^ zbm4aQ*Q^n6fq3saSu5bggz!%CW3&|@+#}H3 zCVw#W0_Ile1t<)>0M&yRAX+9eUcfbU40{1*s0#;{J(RbntpM^+RyOMc^kjSh)nAvJ z_Tha1>a=R;pFL;`;Le2b_HsAg0`RlcSpaXP*aGljEPzlw3*bpNspB-x0oY4B0MzBR zb_3ZDbw7*4CuVL&057YH_i;O zv>SZ2-LG}XFvbjM2eNPxV+N4@{ZlJ-1J+jE4S@H_&Z{h_k?3AFYX?xZoL7qyKcU?K zN)i$hqKq~$1HeO4&S=t2PJ01lfr8q<_|VFgtH|Tn4xk!`?(8RDZ{h}AALF`B-kWm+ z4q5)Ph;;)lJ=xNha|6WN%k=_wRmBS^Ezb*38+ZX>X9SAGepo=7dI4=synvQR8q5%J zPCy;n36T14zuKlOah6#l!0qti!}4(a)v*!qkTC*me@{zG?4~mUQuU1hM=OtQR+OFV zwl0ayStG#i_@n&8i@$Z6AYzSx*9SL6@uo{0@mVw+pB4FJ}gfeoNtUz$>h4FFpE zb-&@SmEtPc0E$5ud=mT8qI{5Ie?!-_p%XO|n$R|Y=<(pIa~9(JPUalBf;|8Q_5frS zlw&Ak0c<=puA|$G$7CL30bCtr>7{JMS^(iX3jkRyZALo)%dDD@tlR+z)HwiP5DpTU zH2{2d2Ee-j7i;=9<_&q)n zEyMN&bP$)BN`I>LuHu6pD@7*Kzw@$P#U91dDrx@)N4j2258hR&_IHa>k90%Q11}bn z>I%jG&{L-3e~4M}f1?`W|BruC{J%a~UGaa@So{y;#6P<0;;d8uxv~BA)j#;Ya>N?| zKiQ&DptPy~%mPT)SpWjCu^ea*fHL*~8dvH8bo%=}03;YSO$yFPH$nlLe4?Kp&{^gy;e*TYPNIRpGP+6oO^BGlXb_sjCd3}shO$%uf^*BhROH^g*F`RTWikH`oB>ad}L2W`u~wE zVa7=H;KyUU&erc({2-z$tN*VNZ$3c(k1p)tyw+I%pR;^%Zmd%;UjN6}+R}QFiT?Ml zhW^hKyKWn*um7LzIeNz_IhfP`ovzOuCDPOXORK8?gHGK2bfixIZy4xx?5H}L*8jv~ zJJlal>`u-AAfKQYb z?yLdu+Ursy-T+XX`s1SsbLPzDK!B^*1>ivdA=y;TfdH7@z&1bwQxf38<)-O8382^$ z*5Cd@)>bkaG`(;(b@APkZJeZ^i)xcm#*RR6@H)4mJkAlg)z0IdNQe}TT}@9FzUzM3BYlMktlXRRW7yCdShRP}7F-C(&pJ^3g9 z1ie4RQ17oQ+?kyBl+pVFwM7pXMC3@-afkbjkmul`KiMC-k^PO8zU-aR+hfht%1Iy(n&8z=TCh9->T>M>+ERxgzwzU2iG-@_1j^zNH608hC0FR!l zMUM9w_5YYr|8|aZ=4?*Useg^W`nR|8*lb1lgH0$O#$f=r=RXoCZ;E5xLH!HoNb4u> zn^%_ST|Ne&_Aar_cDx8|j&Mpg4FRYPA%Io}>R;_W7tWla0K{WP*GJ@M0j3lH_&oKy zj%%n~UWxoChf@yzl0^7=*z*|VtlBH^5jaJCO;Z3wp;UEy-qIU922h{I09Mc#fM>IN z)0D#)4`APzsMW1nwW2WqB44Vmla`hyZ^4=X&1e(gEam`s6QHb5+;RC<+Ht@b05OUs zIv5OKcZx9uu+n+8x>5>2Ew8t00Hy$hDLv{UA|;F=1sDoIm?Bk;&i;bN01W@W91LK` zt;|I_3}7B@0-%N7_D)A_Dlh>O3^4#qhq-LxBMF=2QbiKjnncxGQ#|XeYJp_P?=`g$0W3V;v z12ke0fZj;jr&D}u)(22m$N;#lTs*ZTXnm_}5>g4-W!hGvLKvFYMbFkWLkv z0osSW86c%efJhf4r7-}>FbUE~npx8rz*d*0h8RFhk8&V@U91l<#2f^0{=*>vcQHT! zyYE-m2iRup1Eg_2fB^*1-N**0t!D#Jpf3q0Us1JufB-wBBLQBDfduGGuIESq0pe@` z(mu=A00n6D|H1~SItuWXcxcWB5d7EJ0JD;i8-S4T1|Num7Q0Y0bm7$g;9GZ#?{11- z+v<8|OK}nv*heEEb|IlGsgXWn5K{%f;0E!dg(+YFcmKc0Fz8l}VIWLEg2@R;1jmDI z1>=L!2;e#otg#jTMY^};L56M2)A%_x){LpYWrNU(Z?htEv8nR|Hz?H|@*3 zJiztt{t?^YQ}drj1r=ZC9e~GF>~_upVABBg%^(1JX@G!pQjIPR zuyUV&VcVOITpB=4`b)aXnKVF)J;+cH65la`(0dt%_{V@+bw8q~R)q~MNO>-!R`)8_ z9ts*&*vo-z0kAr;L8^K__-b2rL@it_&@>{O>xTF}=^=g)>0lsZy9QZ$Jq$WR%h-v| z>e{RJ#Eu_7fgW3rwNrPV3#cwTwjPaKNu{xz4YF%xFqv)I*u_1-j8G+Mj-}ERVTA&Pvv}*5=4?wyc)kX^xh142v*||6!;;&*?vq= zfEX8Qsq=ToxN%w>6udu>u!BGb`cQ|D${Po~LS$dXeks+oNvGzFPRo+2g&1q#bXrSs z6GclVvf+Qp84?@H_M)KVpzjz3IYe=5Bx%(xW+CJ4jF38rJ6;|sV|k6|aqEygZa9S# zElV56#%IY8sYPBmxDunfi}8U|_%b7B_6DnDN|+0vr{I!I$m+@fDpx;dgDP&ro@|lt zWr+AZ#pCn#;~&g?wF@BsWYHgBa`-vH2%H=yvTB~k zDd18^Wb6JUtd0eIO5L0V>y=#?{$>PvgZZ0r$RXffZHB&?f&}D&p5^6K)-U4#@)c9u zy*ivAjQR01BFfYHzzQYB2*)RiRn7g|jP`C!t_FPET`pB!&0TUzK9y6BDI$SpBRR;oEyFeVT~?uJH48nj|)KS3-w)obcE$qEC4M5-|Qs!#agKi$JW= zF$=YELIMd1zqR!BAS?iLgeZbbf#sCe^u!4XLvuv6f6tWU#GDG*2+am~0zSkj(v)({ z5oBd66bU`yW;Coodn4o^99Jl0;|e$tB9nYe2A2>)3-wrq4gQiQ)6KF9dSQj9!(UyL z-!X*|xVVDo)4^Ax&c&WJy+t`z#euZ6T)@icKu{6-hPEn1D;MtSj##JS$P`ImYsrsd zaD=ZRnfGI(WWigrY=PEVvJX53?>Uexm`ips4;N%h43h5| z&`%a%L*XHEKK*LGS-RlJNH$rp(#rn*$7@8u_v?}cD-7X+Jh2^47I<1a8hHw)(SlLd zY_!0abrq)CND3u?XSSdP&K5Y3O`76t!Bq%aRV`cKWo#>~YW~0=TOe5uv6K;pu7Z<` z7}$b$Hgve4eI4}qe-JM4mx84*NRKSwErlr@S)j3I(ghp-9!udf+Yd+=h&s)Y7u~8b zUO?0*j@2@Q76|{9p2FvVECh$Aq=3Q@Vr1cUR@j;P!@fQ7YDv!x2Z9~L!G2IfXq8Ap zU8`?D5LU#zTBh~`oYcS0en>EHKadGXI1$(fe1zDfFg`ww5cHZ_Tf;uoNPoQ(!1_NW zF6qeW5!YLOdNH8Z$LsdF%`nyfLRSB`+ku~*^!&fkBCP)#(zZbR-|4H1kW^#=v_I)q z>-vdfo{xW@J9F`02_4q67C`e4vH(UE48GdZ*aA4Myd#}1Ysgyw9akSdeB9Uqu$);9 z3!vYpqM!(U3*hku>yj{XO zTrIKmIxio@XzX)}&8PoVZx8s4(bzkrs<+v*KVvmE`6beq*zRA`5<9?1Vs{Dfy5t*F zo0HhW1`fh?r7bv#-C@rw*qw{=q1r3)Cm!{`DA&x$P<&(uo| zlt;M&hQ&MLE)D&7Kf_%dqkhJb2qts^{R;}R4{HE;|LT35P|?W(XOgx6kS6Q2vpr`4 zkQQ<6c>^HoG#CI;rvw^DvOQZTKpOzDufPCk@&45XxAgj!;A&sEgw~zvjFz(8PK5X(tf-JAb1Cgo3j9-^eq5f+7KdF z4c$D3cL0XYzujTqpA4TdLaKWCY|m8r2qv-dyfmG604BtZ84FS)2~z6Y7!N>QJ1woR zJdu7L%j;^_I2@p~B22j<8dABR2I16l^s4|3@?+k1z}*RmQA zOaNQrQrJ7(jUjsq;e}ze9v7Af)C3mf6Da9NWhL?ntRz43D|iOq>3as*q=(pwlKn9B zzI-O_83^Y&tM-d7-;M5l!p{}+`-`Qj`*#MOk}u{a_;txH2G)Tqm{RgNtaY$&&g6Wn z8~exzOwSLaeg{$mekK~9$07Q1{eYk_&JVcLhM3tQ+Sm`+9Y?u`A3a}`#n=JY6)RJ( zI`5Jf({_Nj7~Kq5BH+A$x>f?sG6OHbqf}H)GvMAb-V1Pbv8u!jXl3tpNt*YHHv{Zg zGa%^mM=LyRNE)^3DADX7lnLt0vX}(s>BRh z+5JOiKqq3Yz>FDS`QKy)C|JM%>w9AvtA`g;H=>t6V>B z|1Gco6Vy<5Wvu^&52~U6vsc~9{6b&^EG_M*wy#6D51@|Ba0RNZla3Tqff) z05{9Y0Ms&{0Wiw{Ka+G7$nSIcf7}H~oB<*`cgZ=v000K=TooXf0Qk#(oG+gMK$p`% zQw^j3XubF_KUjtLhy!%!z$@C<@HWl=-@Z3()PB&-Ob4K%?91fGAVho6-2dsuPK)>+ z0GLIaaQ~qrqsAxJXFj(?aW`@G7CgtssR7LWQ%cpa3b=oODVTwM13m7)TxAt6G@|}h z@7~<%r=$MYdo)$B)c;egh4rZa?FP8S$IBip*p@ey*02Q%wKXX_cQQ847l-_%>ICO^ zPvqql{#5|}pWt|is0|zsAtZO{(0@u@cO-7nbYrG_hXodiLZUar{y$i-flv3B=D{(~ z0u>xw=f%;)RW#pUK#2g)PyC8*`tzN)^!mu4Vr)Z@Nm+Hcq(GJ}aSJB}cCtx;K?9Q*~008a*e2MLYIh=g} zJ%Fu@rri5>_8V1)bfz5-(tHu1(U|*udj2~3?h3W7do!3{znop#soXI)=VIU{K-bT+ z=P)4va**gi(tfX_`kbAF}@;UMucrNY+orr8KxhGQ22y78P};Z=AG2#vZ&c&-_ALKT z{nmQ%L1k0Ux%q-Znj@Z)-natLDOhZZ|Hl>U>2qBPU{6xQRkm@iyl;M_TQ}>6)#+FAmY1~ zBjO?LP#dQm;Gw`$-}qtB)CS>~TqE`W4f4LypOM!8)HXl+w%)(j>gfH)^h+0e>@(H> zwORe&KLbBGY5m`l!1{kUt^YG`(H8~LwF3Qb-LCKBOV+&>4*4kj!Bd+lKU+kz^Z#Za zH2)tnXXYqNWBq?lz3fti=Y3xPCoY(lo@=cCYr9oL|L6Ivb6cse|6g1@ICfb0GEV>Z zPwnBRr~kKARsTnfS^Tq}{@?gswr`!210Ml+b70wh&H!K|0Ff2XqXR&*0pZCm1XvZi zXv*ovF}etVZT1(sfpk5xPemyJPvaB-arp4hx)i{Q8@BVly1kuG0X&5w?21zWfkucz zk2!b8D0C?RagWruKZ{Orh(f|*`*DHQK@?g{Y@WM_M-&1WL_xWFQcG4vR0&b=Y*Bo$ zj7JolRqqddybKo=FfjnB6eg}Cxt9A%asUbDa{zG@%8dai$&NY*ARZm@=OF+-1yGl4 zq7MQ1MS<`RJtyr`w2o!~LY&oT_4(V-zQ?8j8o+zw#G_by8>RrZ_YQ^3J$6v&6u^Y= zkMJy?PXR!pMTY0>l14jyw5SK9AMl{u4OqOSAuVQ+v2@ z?7!XaakrqBKWip4zrSVGypWf_!Q>t!FD<4+4mayhh+PBC0#PzZnS;=Nf8KtgygOsY zEkM6v_FyS>bIzRkoENtSY_&Dznp6gHfanenjK}{Hhy&ESoxfK37aIq#Tl%bhLyNLf zF{A;!<COrObH)VQ(`32miR7`Tt;ZQ2^D@D{N0f zdD{{+8w4?`#lht|B(S$Y(jJlkq8Qb3+aS`ZzfIKvfStb2%E|!%^m+?l*>;hNE6M_l zpI+4DP?eJaf1Y~xR0*pz@M@4EbeLfP&Sp;XsRz?=ngGy60ee< zF;)--Xw$R0QGj&bT@b;Vfk?{2aQJ@!asZPIodtIIuL}aq=ZF8~2kaT3qW~p3Z$Z~C zfT#ZyEE>qS{kLQRz9#-O=Ps}dwkqx7hxhd#uxg+>HG^2)|GymnSKVCzra%-L9`1et ziLejhxF~jX`lsP_S`Y3p`F*1qv%!bRP1lIPhe-MWA7UsmTWA_YfQRXS6e;*y&4>i^ zW&~s(L_jCt2QB(*BGvc-(}+N-=GHhCX50W;|F@XodGyE4z51Vu>$Ucc<*4VT`d`HA z{~jeA(&a*=@*8j_C{XZ;+K4M~IMf%@nOq=3{{acZ?cHa)5TFeXD#_E6cLG%BK ztsgA-$yoni@tpOY?TqKV{_lJgXhviGZ&^|e{a-N5p zOvP@~GXQ2()c|OTppS|L0ECYK0B(NgP5itRmH?n+ed2xryc{nC1OVV>#Q;Ef$d)!b z0ASm%AzK`#&Se1rN`fo)nDjq%06r*Z{$I{6zxcQ`uF3*M`43$8!Mwp2ie_582sx5#WPe#btW+f1c|<$HI-R z|2s8r=@m}En$-VcaryC%kdSV9O#h#-#2LozVGA070%kw}J9V2kV_eI)jCl!`m-_nw znHE47hTRuvLU|ehM&b1;+7RewL42T28b7lEZb{{QD9Q2 z;vwHLjG+Uhb}-;)7XebCP+_O+&d>pIDm$k4fP9zng+No+EF5qj2A3QhV5d42(Erz! zc?}sl;P#}JGyZ-$z-U9DAsrBT0j$4x>#EWLu`i*oOh*Se(sTf&yg$1%QC1!t&}hZL zQ!}q}di5=%S6v34dS5XcAa#O#`$*YK77mb}_5a>6G0z$&3jhsxkM|AmXn<{Op^4_L zbT@zz82~K7$VyZ%O$NM&(!p|dFK3TnGQb@QP!fF@-K#j*;_bfI9hY)D0-s?zU^^Rc z@YgE`^f~!xB}WJB9rXGO+$(~21mbc)JDkVimISslE(Zjuy~TEz*y*U4{+8z20U10% zkF{TSGg&SF*(@KRW9`)hg!9X92NbBr2DB%t$_A*d+N`aki`@SKLYsiIA`U^=q&iyy zfe!FGGtR%LD`V>%Q>-3)&8^|ltu!7$Jb~r0z`e_#aK;Ya5x4{T0U1ERTt6TLV$5v` z)CUBD%MtKZ?FXDACT=<t7PvRTYj?=`xBCH6Jg>kZos%}8uw4;x^v19PvDvI)#I zvxNF1>GK2fUO2owjCzkXyKd2*9%vuch6e5Hn>6gJZEbos;3YP?2AlSX*;2JQf1Nw8 zt+R^ti}kUxj+`Y>EDEyY2>XXU<3DOzXFa`ZPgp`ZLGPQg2fu0$0{aEcxWGQ{LoiJ2 z#}1OJm4hL5eUT3AlRFe!Z~Y0bK?u2Hg9;I6p)Mcq{btrAfHC~rk`Vj@V%5I(h4voNj85v;BZo8We-KvtrO_>X1TcoERP9H} z^?DTTTFqOgtVgSTKZ)W;zca+`=e* zffPamVNOVxAq|Y{cv&6Pj1l^4lDHT^={_a~5Njp|aJ}WsPdTNpQ2q36zA!OS%mo30 zd>$G}{mq93v8h3Z{r^=70+cr96Xz#x7z66RbRZttp#5Q+mP0=G@yC zk)?`5yMCJXt#2m7EX<|u?kYaa_7(a$Av3vw-9C3lk>%zFMwpw4FFsUOX>I_*?sr2% zc6alu%I-kN){758dLAAQa*$&0cLQr5rG}C7nef0J*agVb6MkS1h<3vofS_4;4S;Y7 zd>i2U&)d?UI}*3+jbz*P$dPeEB-fqi!Itj3rpV!a%fO$Qg1sL-` zA@$!7D{GsP`c^ek|G!1*Pn=^RQfgA8B9Rrg1=_~#33tyuG^?QRxy&E>g$9EyFg0Cc z1r&hf11Nw4#1EFH6aYN>HKxG-RZ}3ryeRTe13oUNPu@_ygSk)M;4%|3&Nn1x56c5Qi$#|F`Vc z3H?vMJLa(U%(rdN`@ZbV>i=^er2j`ZjlVm>SpT03yIO1Mx8LykziUeis;!Csx2%T# z??1%jc$vQbfBsqj#K)HdX#Fp|C{2i5xND%E0WiO+^ZzDgC3TRl0ANRt)3eTeKARi= zi=mKAr*0ortZqHR4sKMQ;neNdj$U$1(QzWcsBQ<~?Q-V-R^VcTFe z7E7=J(3AjhFeU(QowaJl+Y{7|7Ps8e=njCNVRSF|WIP5K{)9l0DzyiQWwBr_g}50*Av*8KlxCx zr7-W)&tttA7XU{7Z}FN2eHXxB6omfB>3pllDp6L|X$3sXE@tQSu@53P9y35Qk2*H8APk4qss>O-6QMjOt2> ztz?);JXRMeC|H$y1 zt9s)9!Hc8k48(u6$N*aV8};Gso43?wS;c*LG#T&*#5T(9!_y}NoH8NR!Sad0aVzbk70%9_A2E?d9$vX0t`b!w)zi!D{$4#vAcWNWzh5u%X z7XD^-|2Y?IX`^)Dg#WT`8VdR|V;?|hL->TETT*!8{{`i`&_)tWNB_-E_LrDd{eimZ zKdAnDm8*V%Lz<*mVz#AUeZ^`1;+xA@)o--?Pa3C%r6tq)nTY;RQtwSmui|juLtT>f z?Go#%i2e}|(UR%+lPVGY!i}b)zm}osXIKCAtFW9;1m%1Zezsp|qWL3-!NP}tVMyj4 z@Sg_%=dZ8s^1sXq(R?QLpJycYt!S~Y7yIv9ZLwcE&1m(X*1Xuy@@3$Bsgx<|uRQwC z5B8dKvN2UFzbKoK3mT``HW2?a)qED-!~~HUv2R@?_WyliAIAt% zHA>Jy*4P#}_>EP3^us`9C)=mpd>VCI1h&AUbd7b?OZ4UgY=OJP^xCGj09+?Ew!nX# zEs$W|769wO8n-9FHG-i7;DtflTW=1PS5|%=Ev_-)`nj<)&JJ4 z{$GW+bHE?qKID7`|FZC-_5YgB=(|Ncs6hW)Tg_?gaA}C;6Nk}TXFdP*kEXe-{(nQf z_itO0PGmwnflVt3QZY5(rYIurdrxElID zFMqWtKwtm=B`A|j1YVrQ|D)3L_3{6yRh9ou17??&>E!>`RRN2?KlvTk|0jb9*GL&N z-DczeJ{8CRBgO~$=;Hs|ze}4s|F@>hg!>rf`iaMJHvKQ$BhcJ6_5kME(TnOV&36DA zW&qT3(9paGpm=!d-4h&>Z`%Rl$7iIH%S}^J&{C%R{16D_HcaX|swbPeR)n`Z0Nv=U z7jSp=?Q0jZwsKy8xSO<(&I^FlwayE8TMnwA0_o76_W~4Km-x1v9C3r8`DaU2Kh2rL zZ?&6?x7z7L3%G4Qa1VvE33Q`iiQ;PeoP*KQPuVa4v;w}m;K>mWC2^jnu7C^I3mC#D z0sONo$^ocw4xm_%3=rVrvenG?2k->06|~+0x}J*xyajn-;0ZupL6cvgZJQ9+K1SUo z5BBfHZ|6*b+Sa>|;GVBACJE3$b) zK(Ef)g4~?!0xc}==u!b7;0LwxoJsJpl_4PD z1iJ#2Wt>Uy2Mq`y>wry`oJF9Jr0S3Q9j!dJS&8KLrgd-5RRo?K5N@ZuDfT^O$HPL8KCD6faQrQ_Xi%{o7S&9us(DDCY(*6Lo z7#I=mnKtgouX_G~Cb&bU&=?E=_`hBwQE=k#tUqA)jdj<4*`1Gk!q@{4+iz=#{%_9E zRDk|F1e`U^#`0|)Sq@klno(Po2l;CvHyEi4kpEbyAACDmI>&luAB+r{eff? ze*m-p-K)w3pzJVM)=Y_=gpDJe5t1k~WUj_kz_aGnh5vgPQvrL;QUMENSGiH(c68Qi zQU?j;rJwWgzvL%dbhz5=zhQenn#Fqr0lEM`W!w(f`0v@}_dyhIcK&Ojwt$p@?0`wfbg) zg_O8u#!P@Ks>V$CcbW+a=FJ3f94Op=02fm9Ta;>i5ost8>g&pJ9BBQ2cc;boZVL|v zcVF#kIc~_G0#p4@vHE|u-|Ff0CF`5^Pk5#* zNOM2zCc z=!<`laCM;T56L(J06oE_V`nI<VaL=2Ovu3?_Q zY&Jo|ECKK_$tI|tDyA3nf*N>FQVlm3M$2-11R( zI}r349ZSH)|5i}^U!lbJA47E!O`F_4Ge6rKh+2 z9Fq)iR&0`$UiJDsmh2Sij@+Ht9(RTb@KYdXvbll&?+{{}y)G}9(fzRvt!0t{V=U+*0ABk4#!CNb_8|QS;ADV%DqIKd zAlS=f``K`SqITBpL%0u+tpbqduXB_C!U6(}{09c0G06X!?-}(^3DL(Ic}H6Od%c7} z`zl8KXPxI)0o=m&LIXr%2EbW$^oGTDTvT|R!2qtEw;#`j06r0K*TVp2z>jpv!VYhs z*AS$pN*Dki0x-(^8prpo}L<5#@765p8<`L>M6ZwMum-DlAefHjQ_ z6}|_gBof0oh0pE*kmHU$ZVy1HB0*EozfHa-H@$OFcDBUc%40L^5%fGuf@enK{F4-i zf3yD8>G3#z55PT~EaAic!1J4k{62BVD;D{tBmMKQE7AC%rlA$?VU;HOb(?gP@e}<$ z51Y3foYR5R`L}V%z8S0Y18AK;j0PbTO4abhS&Yu#)Msbt;%|L9olh^Ze2uwc^W_gMSXA|i(LTPlK(=61)PAP4dKiH z0euXC0H$-TGL)rj#1Lcs)HFLI3-uA8!QOb|1@h&3Oo zIf0rJs5ya}6R0_XniHrwftnMjIf0rJs5ya}6R0_X|D_Y4=l{#P&HQxkxQlD2ZAV$B zCoTTobp9`9=l@4rU>AutxW;S%MO~{c?cf~UM(b;f$O`8F*1=@X#;ez)`NOq@wtM7H z_ir%se{0VV+y56hy>OTD{Qq3kosT_jEcy9=r*CmBo^k)*yK2n;vpYe3p8ov*Mbl#r zS3lNp{QuXA>A8C2|7BGj|2G)~6CU08f6LInmM&T`j2r)3AKcW$X#Jmu8U9}n0SJyb z_5O;iKezvH-ST&89J0qH0OTvfp))g6BO z-{aWry;(wCxLBZRL^jt!`#ouB-+239V$k;9Zb5zMsr5u>weU)r#_yvp%=SO2y3;JX z!OHpc*m^XoX9}$c*%^&xA)-Fh70*q{PmwDIqsLI5ZG-A7t?9X8)pq~=o|dK#f*N+% zVI`d5torM$Rdd`m$n5^3r04C&$`GSubu+*E&zW>#vjaj8p(5&_sIN9vRuA_H z#9Qhw{u9qIxA?EW;o?6SzsJDl>*GPq@hsgNHvh?9k^Rp@2qRkN zk^wM**Gg3vmR|3~P2lfEAZwRFFygO!wawbZ@PJo{?5p_BeeUiaUJ|k|w9~=LzegU& zf0t*m<#cU~SN?^>oqSXl^c_Qm521dyIXqh4Ga7!p5!CBPE8cQH-t)M1x@CWAi`I*O zW|sX42lSzr{kfF4?9XB8^)4{H$FUQ9=O5p7jy@fY`!NeCOWa+tmM@_2(;|6RGQDtb zzbqpJ)q+5|LefBg_upla$8eI89xD4(zL*)juTkv2lXwmD33&G(@f{R)t`-H#zhmh7 z{jf!%3rDsy>;JN6PlmBPzGx>=dt$dI$&=XSf6!MVXA|s4=F+?Vf(TKJ+B#raEv9y3 z1bTxzLC1;IBGIKlCTKI|NJP17{$y?(6TV`KyH|%3=GOeVeRcfzqAX@g{6w*A`J34% zhxz)g1SZ^FE>)d@*gQNVBTr66C`FPY5@b<_3{TR=FAyc&aywf4Ft6yUR3@D0!jrO4-Oz0 zVhhkrXfA-TW9ju|T>xPo10^i#)8V_JY(W7Mtmr1`Yc2Uv?9>uU1ic>{5d<5}69oFJ z{^nSlCkU#z>QDXUm5IF z^uYfQ6Kp&d4-ZPiF=YuJcHgRVWYwe1Ut|l&kVfU4EjRc0>F|wpkZpI9^ zCN!vpyG8DoTNfWX^xAUz4{H>+Q^F!w;%UC7Bm8YE8X!P<|NOXHba!pK%-cEoBA#@Q zfJrw|vocT!XQ9>#mm^DD=pPaq7TO{Kbz57VNq2>V?h021628PF!NX=OMnQ6_`GlYUr%YN&s*V8IxA^jR%hbQJ6@XIz`M%G}*cJd_02)<=0f=ao zQIM-COi7PX*WMQYCz9ndHFbLx>(xzX^m2&dA%J(`?GEw~0MdxRG-Uu143g{Vp+P>k zWs^Au!0|-u;dqriZmt_^r`Aq}71V5V-Dnt|DoxVsc80syLxqbEEt18u6o3~)0R+xl zdOh*8Do_Ak3He%WjM~4}%u&i-Or(7VRXa=;+7J5f=SrQ%HMAHh)0_W~Ln3z{SeLv$ zf=bB9(&ooz7eGKZ6Y}Oh<;?%xjOPFJUO{h?CIAGQ=42gx2msdU)icHbf=-z*0Nuae z(CDS?8D;?dLKI%JcYi+}kcFNY0g!h318=1WHD&-*&%)asR*qsB0B6-fRj?Sh4d%h5 zofs@t{aRL{;JXlj1c>5EfQPRxcyT0v^uSkx#w6x76gvvF)J;iO0fzzjXRsK6(@(&J zG-fb>%^MeOJnzzgoXKDSFD8Vy=WFUa8e;&lFB%dLgT}BJfa3L$**`oOa+#@P93fTv zba`=1K7y%vcn)w#6q3gcr$_Zm8^^}OCIVQvr$x?qn`Vq!O1hk)udkWF1_-AFM>1@{ zgsiSiCFRwR*-AaqT)8_}WNe{6VC9k{mnmm@_ z2j(dbl-%%Y)v6VLJm58Mt=;Cg3_PIt`RS^)OZpBYCo%lM zUrq~mK^uV7r5TxnoAJuU0@g3nVFAR<4$0h=4r9M#5Ddu)yTI%9a(rmG2b_eRw0BG)t?f(%D(6sA?chBpm z)7u3Mfq<-6(r%lRqjK|18wJt>vS)wBFBeFZ7y|*V3X*cQ`AG%Zlo++$nuJkSVNEM7 z4}?O22~&~pjW=JIT`s`m0LNzm4vx=jd_3*M!kWO<-h|RGU5R?)ZuvmTxn(D)V>a)f(8g1W_`#mK^h4tBM%@k zaaP+{s8=X3g{uzymmmR4i9gLD0c@9crK3rBM-Lml|93;})j$FuDKF@wb-y680U99E zqFHnu*A3G5rSs>hj<0e4G-&!oV*48Y#qhW2NBl0 z;qesF3atYWkBC@-34->-Wpfj3=$!c1Pq05=fSq7|fDL1A8@%+dk2d;iBGve@*Vw@6 zqG}GgZLmBh#5d@0J<;jEZ^%vS|BK(;>^x|l_1;g{WI85a49_>!|L}ZZ?nytmy5J9R zVa<<+f7Mz@f7m7zpAM>JU4j0$dXaIy<-kYtewKPBFYHxxtUV(xepmPqG%6~7@2Ef}< z6C(HqK&q_ay5r3HKiEr`%#q@ACEnv%`MA2e7_s=)Iz5 zjJ7nc`lkTb*Q{}8_WuQv1;{>bYKuY(y#KFUffX+_Zu$rQv;n{UkJ=pO7TDVz5wQ3V zc0Jn5-BF#eXhi-AC4ch_tdivB&_J2@lqvahR@Z59b!HYhge&<^2-_C_u;P+`qoTjj zOwphAOx_8;<&P`)59+Qf__tFxfEvFt*(A2)kCFj!ok%eS|Muz4#mc=Z< z|3gO%y$6C390{^OVV&^J=a3ihv!YA>8hqWuSxy@gWKvcgt{;(U_*amzW*Yu)H|a(t z5_JFH1ZUN8pU4fM%EfBZkr+>@uEUvKfGvQIWJM+aruBbkO@!x>Ql0MHVW2yWET#py zORmIQV>#wcrnw?_2`k6^>WD9!QtRYpo9)i3wW`=$a_4SN8q ztg0XFnbK3Is!!0Wnz|BycRb(oU&Zo2Kk>pZg~Tt zuK%^r{@0sc1{f?xGA$Wu(Eo=>KeKvWzw5ue{=ev|_5U>+{Um?H<-_D`WNCXIHvrDl zZvgDu06_Fj9}-$Nhgv zf35MG)3uWRzu+yVW&c5jdYvu%x8GX1UgyjH>zS1O|BcH4(>GPO=3ikf*F%itI#d65 z-%zi^x*fSe{~z%azYoyUjnd@irf5>qwE=Q4W_yJODDZ~h`$T{vl&1NA6>Nw6dkO90 zZs{5T=ZK*J@P>}zN66_#9g!eQ>x#Sn4fg?7UiRNtDl90lQF}4XCZ|YWNp%2Fv?=Vx!Ou zpbidDjl74@2g9cu$omBI@*Zv@#iTpFOmK~y@g<^x9#cYEO%p&$Yh;(b4EtXEUu6Q& z`hTfI$`^62Zl7n!`?hd9^Yjx_{V!$pze_BB^3eK!Sx>C^57YOpUK4yUs8&z~`rjJ; zxn(o)JmyBmgPC8&ELjw~iPis)KB)hHoU*qv+F1Yp_TBK``u)C^*Z0|b;4i33xBTuUwkWb5-ILqM1#>e>kr1Q<3pj*(>ltii_MgzQ~;ZUC1f=T5Gu}N> zHe>w&g9+kJ$;}UAv)$Jc=^}u5J!mcXmb?YX}Hb?*nF9uy#P{0%J4aptR4ZFM%DP7j#z1 z4mfi1(K@ALC3XPJvtN#DzMOf|Rk-!f=c~A15`SgP0P1+Ll|3@5>0hJQy_H}s*|^jt^U&cwj1Ay`OD$T!{`3|IJOH(^4*(wK>eV9seSbP1U?jco zFU5Ebz}jt{zk61R4WM@0@48KS5#P!%Q6HIt1e$)r6iUU;*A4#~0{01KHvWNOIVX&H zx)q`2j1jOtJ%3T+|7q{a!=kG9{y8uMbC@&33@|bR$|9ghAcKwqA~Prwcm)CBy5z!< z83ctHWid5Tlw1kXl-$xZ^QtN4+Ew!wnq?W5My79ONp6|1+chpz^rpvM6C05LhBrU4Q8oQqgHd0$g|^fbOIJ zi=_KD5djNUIQT@XbD*l8k|WmO`sy>d_lAQh`=`DX^XAZd6M!}F%cJCA3GjGMEdim^ z;I+HZpiP$vFwFr+oWXK@u9F?k05~X~Gx#H%L8g7q0GI_iViwS&gfjHjj}avYX2GwG z%z~Uo-(mOY{s8>VXJ8g+{GS)=)UMYIi9@?%H$TusIX$w)|8f@phn1mk1Nu?gIRPR5 zd-N;lwgkO=%yCEy_}`^r=2xed<_D}k?Z5VN-Ku^bek}e!jL!^Ds>s99ZUpOD66mNB zig3er5pE?ODf;4K5UK_mjT2&GVEGEIU?pm2Khl)7v&R45t==fCa&$J~|4bOwK4*jf z-)sZ^H(WeaU0{y?@2)7=oN%x`C;y+F>Evey|KDpZ{O_mndW*CF6StIyRpYnxT)3Ts z{~m^ARc7%2S3B_EtotwUNGOgq&Ht@G{e&F%Fq~2T>p}S+D$}t9fbb(k)8J&Y?*DfX z4D1A8)&Hm&Se5J_)uX8aaL=0KK_^N^(&m4xkQzwR^M1@oolOPcFj8MsOoe$`NZP~4 zj_C3mU?+*9y$~7zB>^ipeIfdWNC5;phs4VO)zrCng9J5^M3%c)HYQB8aZU^Px=6p05f(JA!#4tPbgUPeYxs>asAWjj2<-h5>E8dG)#@0jc_~X z`oA_46lRt%sQ_%=*{>t9*F=D$BirHIh~2fqIc2ga3ih#PzmVaWLpm_GE# zHg~P6FKzwDzCc*4P^4{FA~X=gSV>k(c=@>Y1Bh!Z&JR1QEKbyR?=#^Y#XlHm_=@u9 zwTr?*!ln5bX#XQ`tlr7KI4o!8+;sE)Km5~;H_ZC~gcCWB|MzgR3(-sAQ$JznL?rd(~|6UaE3PE=8tQvG@Bv=1; zqR+^vWxIokTB!dM?!&O~H8|V-w>ZipgDNi37tzIk0TphAT=AdsXr^QFmAIv}cONek z0YWaj#2CD*ma^4KUsx&6`lzknfCsfyWL{omHo zsKK8F^$96r>;KN)eqXCt#9ICJ-(wq^H~Md|;#XpJl-ckr=0^V$hb#;iwl0das*Zby z?wDfg{zJ5hf3k-*ev>NrraXZrPN4j6o>lo@=X3G%_x#H7CifWLq{F|r`>PM2`+||e zI#W3hjwWLaQh#Wi?p4yg!muy`p2IAaou_MF?PKEwR6afbKg8d<$uh;pKt*n`%;)Ao=;dsyJ5h0f-MSd*6Q}eZLa<@v*^;^(6dOM@v-yD>Lu+>eJi# z1Y%Kvz62kPEo4ExyQ}n`3yC--QVsCm|owc?hEj7geR@;yK;8?3oZ<%k8C}rm(k+B zq>R<}yP0YGu5N2PsiPxuBO-c5>3c=%qjSeZ_l(Mk8WWuxrC00KIr<1Hx@RucBPvo& z#E}AUn^41^uI)Pn;`2pzAibD}^v?yP$HWNzw-V4JcR^0H{~62;A^*-lQ3toW2?C}V zb@$f%lrsvDe?%VT7QX_!{G1~H-h%+HiD|fI?2V9r7lix|;AiY1e;}QBzX&?g{}0U$^a3%*S6aaT;#Y>oean%%FXuydUW{|~+Z>%i9d-+6Q!@PBc)AA1is$Nvv6 z?0RjHknW?te22 zKv+R#e+aMB7J%=Sn-i}Pjc%7%^S_7Y#wnLrOm12L=-Mp)-zWfhP2>M#X86BdySZJP z@PD0bOp0g!6I}RTD?Tu8hAI4ScLAU~Aa){+Dk|0|Wu^>F)DESN)~%I4X7ImE>w;hT zyCNTfe_6)b^{32}|KqI%Y?W2=Ke~GLPCrxfKZFMVvL49~E@#V`;qX=s00b_EchqtY z{*zeA;A*uJIo(&1^3p@qSsyTZ+gd=nZ4dtkT801VG(q7dh6RX~L@G1%6HE2QC2{HS zINL`51(Yx0Wk~}7w1~TNsJh0RWdTG`MUK`U=>C718k)qSu*X|F0jiv!$1wd3#nV>$x`5wegEPyur@%=Ll3m`N?{l(@7ml1ow&;Vfo!L!o9 zh#yJ31k?dd1Hh~63i7>z0v13x)<<)A*+0(vMny6M?S-UtYGabA0U*P?0RWK!X^^Km znZc3)Zcn`Zk*b}Rm}!e z%o_mw`=;Ko*8mXx^PPhy_i)U>M>Q83ANcMhZZph)R(||qwpw9c0`PUKxq*~G)!Y`j z0qbD^+x-2D%fESaa;}LR@C0rkD4A4A7Uz{Za?F6uEI>oa0icZ7hy^nXAaXB$KRAHq z3hgihjo`*_(=5O}Oivbh-S$Fuqo7b^QwbShhDKYIe?jF0eqa3@=G$| zXNYhBR<4+XK)s@3fHx*DZ|_ZG`ZCOH6TpjY0I>8Ra25rb=GCc$JVtzx&yqri;! zwiNW^*oW{FAP52ZfVKfNRyxPWb0P|o0-30Km8TEj1)WdVt1R#o4 zd6r&I5|m7tphvN95wuX`CV)^j4t?ZM0q^e}Qt_Ydkq;zKKKuuh55Q6=b&+~NX6}fl zz_Q1Fd2!>|=v(`Ktv}q|B@bu{Z64*0e~9UxQ<~y$;3B6;8dXkx3w<|dAey2Pf6v*D zK>>&~o~HQIXbKDkUzk*bl|!L5JVmB`o&r9TJ6bV-hZ2P-tRG0q9mouA8_5iJnrKK} zPKn_G!7te*GvLP{{||ow{sR03_zUnC;4i>mfWH8L0saE~1^5f_7vL{odjVSiKXc`S z_hv0D_zpYzLGO!8Y8Kh*|L&~*p9*?E1s?zg|Lg81KoeF|lOa6wT_ zOj?mK2a*POdu3vgv2cj7i0}tP^Q_wimGLJ1ANBvcc|}ItneIt^x(%YG-;?_*`ziZjStd(El z3IM*ko49kOpetJdAk+E>UzxyG{}Uf!cZtz2C|Jok-jH7y!ZrXn*>C>yH){ZZd*CGp z#zT;Wu_OPaJag^$1f)FE;v-Z6+)TeZhqEOg1-1M|wgZr>0uVx^wW$i=^u_G>z}J)M zDgdSn@TSRz4U%VX>n?!KHeG;PIXFe6y z0g*X1pn61vYBlqxDwL0+K6hWD`!Bi*P*@?0o&~z5oHN9ybh0e~@Fubu^}esE03c;? zOYwh=b^Jdf7rwk(nK^}<%AcSa5mgw(#rR{w>$1?1p!vzKo8|v|n7b#YPU_Q%7Q2gm zwB1JLzqC8(8WaAPO=n zbE;UBP#{KE1)6gGmzGtfDVES(eg$S7M zBFn6mX8k5FV?+Iz#~a``SRw1LTvD=KK9n;Y$U?eXJKOJexpO${G~;-vHuzz91$Z6U zIfE3^PFw!Hnwd^d(Xahu;maId`}M7WEd>2dWGi5E{eHxBS^BuT3X$qdM#A>d+&S~N z8~gU{XAAzw{;~?UJ>3}JLv1*;^+i#SRc~M}vp*NE2l;y^R8Xp`(4QsBQCnYmPqqZV zJVnTw;~k*|9}}PS^wAe3YJ*=4#T5&}2M|Q1^5EC=j)65KM2w~IWPQ8bKP79QxJCs+J^f<8RyzAye<%p`vMk; z{0rSC5pp-uIR#Sx)iTY}sg33B{|&7G)x*6pyt*fAwXep8+KK%izjJ7jqJY!Xw=13 z{ATB%l;QuDe;QzIuc7=NA|BC~mUR96d zUiA|DI=yZ1Uss%_FB+`R@#~_~Pbx7Q3yMP$wd!AMWaR_A7Lj!SpP)Fgr>Ow2V~&XY z`C@j0s=K*|zbXQAKAYek;=;-3W*&a8K?G~!pU@R_^r{1liC_8(iCp}77CJh$kdEf7 zUT86zAE+}HqT~|e;@7e|`eX6Bpb|7A77tmD^{|%F%dL|6erT%(-u>XGlMQ|({8cjalx_;H6i`e$ zKV1$+{&jdL1nb*jq-rYE>ib&z_K+ zK(YQ=y&7*1W#pWm{<@+tTtto@({6<;W98qYP&(!0!TT+}T!k4Vp0Tdc5n%=>CoK*u z))(k=N{F=9^z{8mw%yA=n%2{=wWz1#Q}C_!s`a5a{i(I>d{JK;i~1sPRILwBsCd}8 zaYz6jgl`krNm9V<`cse3)%;oS8dztu^8^UXK%*PoUnYj$zXfed2Pku*BLERK6A$o1 z@c{S>xm<3&M32%5RE{nZKC1^(^Rwn`@*hOWPZeYoI<|kiaUZDp*?E))sQJ5}LCvqm zcjGtH0C?#z=kXIvOZJYfIB82W1asnG9Da;mhsTllc%M9ZoFL^E9*30?(|ouRMPX1< z!3y|GInm&;*BJDZXfS-09YlDA$d1epmK9#+|I=jtW>tRdkIVc5kohNvCpl)?*ZIK= z;DL${&_f;f5Yt&d(3A&!17^3;4d6l34u%;N3D1#(gm(kjGCTb5@E71Oz+ZsB0Dl4g z0{jK|3-A}67|76Sg|IW_a6pHa&{{NlHEB}Q; z+T8fxxBb^0S1=m@ibI%R8{_}tF)3d)#s7ExGBzN*a=j`3?=T(W;mx%FjgX=CzXXxKG!KKeT|xzM2}}t9xoX1&PJBZp0R5V+0t_B% zzY5UTssum;lY**wjEkVBWe0$>y$%2$dmR8h=Y}foAfY{|yN^~B`c@X&RiH}%$QOch zbJZVPR{?4xp<8bc&KMsik{GP0)ewCJ!H$bbod`HlxcD0l2Sz> z+Xa|xo&MK=_FUu4yu4SGH&a4Rym>i>s{-`Rj-RiXVNn3!hbAc#wGL+j_RVTl{@=aA z%}~R%+oKMIO9M9!L%R#82M{ljX&yt@p5h{_jza-}qA;7z;C~{|?_PKtg!!)KeE>g- z0;UsW#7dv7rE;zauyIfEFW0Z%po;+UeKM`rh%R>&_t`E$tfN&SK*Wi>Vy+I5{1zG* zN+&`a08u82@H-4ciuBm~v6ZGSK+WCzX9C&ezhnl}1gN>%ujWLf1lzstm|@!nIA~68Znjw)pfBA9DAV?IGc3!x*j(g4;^Mlad+0Ji_}PpxU4ZRT*+Mbv zx3Hc-fb@Fs1rg(zC`OKn(k91*>ZHUw!LkeR`0nVTS;nX5{be(qf?ARHM}~)|=KamA z3!7K0U=#mD1+p%bbJhj($iL=yGWkIBU4YmdZe=cB|CF`13{Z2(uxwFN8Q|NrLqP-; zo6%F*(EqV&rV0>q+&tDc^51+HAQ$=fS|PUYBrr&2Nt8iXfG?0t5P0TFD@nUf0`26! z53gSLs+WS3AjlP#1a%S*mjToys4@;-LxT)CG{JtA6;B% zG?wJa7hzIi5A(pkUrPP%sOhsqqMp7aSmF6(efLR&2rXw)u$T4Unq-^x-(ulWkWQ4) zCWT(fEt(WWpzKRcVgESWus?D?M0My2(->u#+&_E<<|8iB>)_{TPPhmMkA#O%C0`_S z$uSxXL`V!wUXv0pVYe6`43nxYHv~qA!KrX9k#QkP_fBZvJ-C%1c1Z*<@mH!EufAA<&J*!9I|AkBrin?e_ zRIdLtOo0UTCtuGQb>XcB=NtDw?e_Kh9X;}W({P>j<4!3+ZZ9{1r777j#3i%4-P6`Z*O8y_MK#23t)9SA7eEod9@2JTO9@y&t3ReHG>I3>ed;l!K4@ck^ Up(9NUR6jtp0_J$FS^fWi06-C9HUIzs diff --git a/client/test/perfjankie/docker-compose.yml b/client/test/perfjankie/docker-compose.yml index 5af6c5925..99d493473 100644 --- a/client/test/perfjankie/docker-compose.yml +++ b/client/test/perfjankie/docker-compose.yml @@ -1,22 +1,27 @@ version : '2' services: - # nginx: - # container_name: 'nginx' - # image: 'nginx' - # volumes: - # - ./nginx.conf:/etc/nginx/nginx.conf:ro - # links: - # - couchdb - # ports: - # - '5984:5984' + probe: + container_name: 'scope-perf-probe' + image: weaveworks/scope + pid: "host" + privileged: true + labels: + - "works.weave.role=system" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:rw" + command: + - "--probe.docker" + - "true" selenium: container_name: 'selenium' image: 'elgalu/selenium' + links: + - probe ports: - '4444:24444' - '5900:25900' environment: - - TZ="US/Pacific" + - TZ='US/Pacific' shm_size: 1g couchdb: container_name: 'couchdb' diff --git a/client/test/perfjankie/main.js b/client/test/perfjankie/main.js index a79e27551..4401b7240 100644 --- a/client/test/perfjankie/main.js +++ b/client/test/perfjankie/main.js @@ -1,24 +1,25 @@ var perfjankie = require('perfjankie'); -var run = process.env.COMMIT || 'commit#590f0078e79e9fb968c8b9f8e5e5ce0a96fa4825'; // A hash for the commit, displayed in the x-axis in the dashboard +var run = process.env.COMMIT || 'commit#Hash'; // A hash for the commit, displayed in the x-axis in the dashboard var time = process.env.DATE || new Date().getTime() // Used to sort the data when displaying graph. Can be the time when a commit was made var scenario = process.env.ACTIONS || '90-nodes-select'; -var host = process.env.HOST || 'localhost:4040'; +var host = process.env.HOST || 'probe:4040'; var actions = require('../actions/' + scenario)({host: host, run: run}); -debugger; +var log = (s) => { console.log(s); } + perfjankie({ /* The next set of values identify the test */ suite: 'Scope', name: scenario, // A friendly name for the URL. This is shown as component name in the dashboard time: time, run: run, - repeat: 10, // Run the tests 10 times. Default is 1 time + repeat: 5, // Run the tests 10 times. Default is 1 time /* Identifies where the data and the dashboard are saved */ couch: { - server: 'http://localhost:5984', - database: 'performance' - // updateSite: !process.env.CI, // If true, updates the couchApp that shows the dashboard. Set to false in when running Continuous integration, run this the first time using command line. + server: 'http://local.docker:5984', + database: 'performance', + updateSite: !process.env.CI, // If true, updates the couchApp that shows the dashboard. Set to false in when running Continuous integration, run this the first time using command line. // onlyUpdateSite: false // No data to upload, just update the site. Recommended to do from dev box as couchDB instance may require special access to create views. }, @@ -48,8 +49,24 @@ perfjankie({ actions: actions, selenium: { - hostname: 'local.docker', // or localhost or hub.browserstack.com + hostname: 'localhost', // or localhost or hub.browserstack.com port: 4444, - } + }, + // log: { // Expects the following methods, + // fatal: log, + // error: grunt.fail.warn.bind(grunt.fail), + // warn: grunt.log.error.bind(grunt.log), + // info: grunt.log.ok.bind(grunt.log), + // debug: grunt.verbose.writeln.bind(grunt.verbose), + // trace: grunt.log.debug.bind(grunt.log) + // } + log: [ + 'fatal', + 'error', + 'warn', + 'info', + 'debug', + 'trace' + ].reduce(n => (r, i) => { r[i] = log }, {}) }); diff --git a/client/test/perfjankie/out.json b/client/test/perfjankie/out.json deleted file mode 100644 index 5bcd4b5fe..000000000 --- a/client/test/perfjankie/out.json +++ /dev/null @@ -1,12 +0,0 @@ -[ { Error: [init({"browserName":"chrome","chromeOptions":{"perfLoggingPrefs":{"traceCategories":"toplevel,disabled-by-default-devtools.timeline.frame,blink.console,disabled-by-default-devtools.timeline,benchmark,blink.console,devtools.timeline,disabled-by-default-devtools.timeline,toplevel,disabled-by-default-devtools.timeline.frame,benchmark"},"args":["--enable-gpu-benchmarking","--enable-thread-composting"]},"loggingPrefs":{"performance":"ALL"}})] The environment you requested was unavailable. - at /Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/lib/webdriver.js:129:15 - at Request._callback (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/lib/http-utils.js:87:7) - at Request.self.callback (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:368:22) - at emitTwo (events.js:106:13) - at Request.emit (events.js:191:7) - at Request. (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:1219:14) - at emitOne (events.js:101:20) - at Request.emit (events.js:188:7) - at IncomingMessage. (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:1167:12) - at emitNone (events.js:91:20) - data: '{"state":"unknown error","sessionId":null,"hCode":501768309,"value":{"localizedMessage":"The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html","cause":null,"stackTrace":[{"fileName":"Preconditions.java","nativeMethod":false,"methodName":"checkState","className":"com.google.common.base.Preconditions","hCode":-1301733662,"lineNumber":199,"class":"java.lang.StackTraceElement"},{"fileName":"DriverService.java","nativeMethod":false,"methodName":"findExecutable","className":"org.openqa.selenium.remote.service.DriverService","hCode":-1432293605,"lineNumber":109,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"access$000","className":"org.openqa.selenium.chrome.ChromeDriverService","hCode":-1230567666,"lineNumber":32,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"findDefaultExecutable","className":"org.openqa.selenium.chrome.ChromeDriverService$Builder","hCode":-1770001534,"lineNumber":137,"class":"java.lang.StackTraceElement"},{"fileName":"DriverService.java","nativeMethod":false,"methodName":"build","className":"org.openqa.selenium.remote.service.DriverService$Builder","hCode":778286186,"lineNumber":296,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"createDefaultService","className":"org.openqa.selenium.chrome.ChromeDriverService","hCode":-1740331610,"lineNumber":88,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriver.java","nativeMethod":false,"methodName":"","className":"org.openqa.selenium.chrome.ChromeDriver","hCode":988971970,"lineNumber":142,"class":"java.lang.StackTraceElement"},{"fileName":"NativeConstructorAccessorImpl.java","nativeMethod":true,"methodName":"newInstance0","className":"sun.reflect.NativeConstructorAccessorImpl","hCode":-917798116,"lineNumber":-2,"class":"java.lang.StackTraceElement"},{"fileName":"NativeConstructorAccessorImpl.java","nativeMethod":false,"methodName":"newInstance","className":"sun.reflect.NativeConstructorAccessorImpl","hCode":-1864225098,"lineNumber":62,"class":"java.lang.StackTraceElement"},{"fileName":"DelegatingConstructorAccessorImpl.java","nativeMethod":false,"methodName":"newInstance","className":"sun.reflect.DelegatingConstructorAccessorImpl","hCode":-2122307259,"lineNumber":45,"class":"java.lang.StackTraceElement"},{"fileName":"Constructor.java","nativeMethod":false,"methodName":"newInstance","className":"java.lang.reflect.Constructor","hCode":-1319859919,"lineNumber":423,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverProvider.java","nativeMethod":false,"methodName":"callConstructor","className":"org.openqa.selenium.remote.server.DefaultDriverProvider","hCode":-2096353668,"lineNumber":103,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverProvider.java","nativeMethod":false,"methodName":"newInstance","className":"org.openqa.selenium.remote.server.DefaultDriverProvider","hCode":1201680335,"lineNumber":97,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverFactory.java","nativeMethod":false,"methodName":"newInstance","className":"org.openqa.selenium.remote.server.DefaultDriverFactory","hCode":-1365021416,"lineNumber":60,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"call","className":"org.openqa.selenium.remote.server.DefaultSession$BrowserCreator","hCode":2056168471,"lineNumber":222,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"call","className":"org.openqa.selenium.remote.server.DefaultSession$BrowserCreator","hCode":2056168458,"lineNumber":209,"class":"java.lang.StackTraceElement"},{"fileName":"FutureTask.java","nativeMethod":false,"methodName":"run","className":"java.util.concurrent.FutureTask","hCode":-820313554,"lineNumber":266,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"run","className":"org.openqa.selenium.remote.server.DefaultSession$1","hCode":-255143467,"lineNumber":176,"class":"java.lang.StackTraceElement"},{"fileName":"ThreadPoolExecutor.java","nativeMethod":false,"methodName":"runWorker","className":"java.util.concurrent.ThreadPoolExecutor","hCode":-1285150184,"lineNumber":1142,"class":"java.lang.StackTraceElement"},{"fileName":"ThreadPoolExecutor.java","nativeMethod":false,"methodName":"run","className":"java.util.concurrent.ThreadPoolExecutor$Worker","hCode":-242190645,"lineNumber":617,"class":"java.lang.StackTraceElement"},{"fileName":"Thread.java","nativeMethod":false,"methodName":"run","className":"java.lang.Thread","hCode":-82946320,"lineNumber":745,"class":"java.lang.StackTraceElement"}],"suppressed":[],"message":"The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html","hCode":1545013890,"class":"java.lang.IllegalStateException","screen":null},"class":"org.openqa.selenium.remote.Response","status":13}' } ] diff --git a/client/test/run-jankie.sh b/client/test/run-jankie.sh index 005c8444a..6fe05616f 100755 --- a/client/test/run-jankie.sh +++ b/client/test/run-jankie.sh @@ -35,6 +35,5 @@ echo "Testing $COMMIT on $DATE" # ../../scope stop # make SUDO= -C ../.. # ../../scope launch -# sleep 5 - -COMMIT="$COMMIT" DATE=$DATE HOST=$HOST DEBUG=scope* node ./perfjankie/main.js +sleep 5 +COMMIT="$COMMIT" DATE=$DATE HOST=$HOST DEBUG=scope* node test/perfjankie/main.js