From 596e7c047dde2a04d9deb20b99f0312b9e762141 Mon Sep 17 00:00:00 2001 From: Stavros Kanarakis Date: Thu, 4 Apr 2019 13:55:13 +0300 Subject: [PATCH] Documentation stubs for BBS-ep Change-Id: Id32f23c1cd74cb6209f1ab6babba47c716e17400 Issue-ID: DCAEGEN2-1393 Signed-off-by: Stavros Kanarakis --- .../sections/apis/swagger-bbs-event-processor.yaml | 164 +++++++++++++++++++++ docs/sections/images/bbs-ep-cpe-authentication.png | Bin 0 -> 38084 bytes docs/sections/images/bbs-ep-pnf-relocation.png | Bin 0 -> 36978 bytes .../bbs-event-processor/development_info.rst | 30 ++++ .../services/bbs-event-processor/functionality.rst | 13 ++ .../services/bbs-event-processor/index.rst | 36 +++++ .../services/bbs-event-processor/installation.rst | 64 ++++++++ docs/sections/services/serviceindex.rst | 3 +- 8 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 docs/sections/apis/swagger-bbs-event-processor.yaml create mode 100644 docs/sections/images/bbs-ep-cpe-authentication.png create mode 100644 docs/sections/images/bbs-ep-pnf-relocation.png create mode 100644 docs/sections/services/bbs-event-processor/development_info.rst create mode 100644 docs/sections/services/bbs-event-processor/functionality.rst create mode 100644 docs/sections/services/bbs-event-processor/index.rst create mode 100644 docs/sections/services/bbs-event-processor/installation.rst diff --git a/docs/sections/apis/swagger-bbs-event-processor.yaml b/docs/sections/apis/swagger-bbs-event-processor.yaml new file mode 100644 index 00000000..d1fa002d --- /dev/null +++ b/docs/sections/apis/swagger-bbs-event-processor.yaml @@ -0,0 +1,164 @@ +--- +swagger: '2.0' +info: + description: This page lists bbs-event-processor REST API details + version: '1.0' + title: BBS Event Processor +host: localhost:32100 +basePath: "/" +tags: +- name: bbs-event-processor-controller + description: Manage bbs-event-processor microService +paths: + "/cancel-tasks": + post: + tags: + - bbs-event-processor-controller + summary: Returns result of request to cancel running microservice tasks + operationId: cancelTasksUsingPOST + consumes: + - application/json + produces: + - "*/*" + responses: + '200': + description: Tasks were successfully cancelled + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '201': + description: Created + '401': + description: Not authorized to view the resource + '403': + description: Resource access is forbidden + '404': + description: Resource is not found + '406': + description: Cancellation failed. Check logs + "/heartbeat": + get: + tags: + - bbs-event-processor-controller + summary: Returns liveness of bbs-event-processor microService + operationId: handleHeartBeatUsingGET + produces: + - "*/*" + responses: + '200': + description: bbs-event-processor microService is alive + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '401': + description: Not authorized to view the resource + '403': + description: Resource access is forbidden + '404': + description: Resource is not found + "/logging/{level}": + post: + tags: + - bbs-event-processor-controller + summary: Returns result of request to change application logging level + operationId: changeLoggingLevelUsingPOST + consumes: + - application/json + produces: + - "*/*" + parameters: + - name: level + in: path + description: level + required: true + type: string + responses: + '200': + description: Application logging level was successfully changed + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '201': + description: Created + '401': + description: Unauthorized + '403': + description: Forbidden + '404': + description: Not Found + '406': + description: Application logging level change failure. Check logs + "/poll-cpe-authentication-events": + post: + tags: + - bbs-event-processor-controller + summary: Returns result of request submission. CPE authentication polling will + occur asynchronously + operationId: handleCpeAuthenticationRestCallUsingPOST + consumes: + - application/json + produces: + - "*/*" + responses: + '200': + description: CPE authentication task submitted successfully + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '201': + description: Created + '401': + description: Not authorized to view the resource + '403': + description: Resource access is forbidden + '404': + description: Resource is not found + "/poll-reregistration-events": + post: + tags: + - bbs-event-processor-controller + summary: Returns result of request submission. PNF re-registration polling will + occur asynchronously + operationId: handleReRegistrationRestCallUsingPOST + consumes: + - application/json + produces: + - "*/*" + responses: + '200': + description: Polling Re-registration events task submitted successfully + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '201': + description: Created + '401': + description: Not authorized to view the resource + '403': + description: Resource access is forbidden + '404': + description: Resource is not found + "/start-tasks": + post: + tags: + - bbs-event-processor-controller + summary: Returns result of request to start microservice tasks + operationId: reScheduleTasksUsingPOST + consumes: + - application/json + produces: + - "*/*" + responses: + '200': + description: Tasks were successfully started + schema: + "$ref": "#/definitions/Mono«ResponseEntity«string»»" + '201': + description: Created + '401': + description: Not authorized to view the resource + '403': + description: Resource access is forbidden + '404': + description: Resource is not found + '406': + description: Task initiation failed. Check logs +definitions: + Mono«ResponseEntity«string»»: + type: object + title: Mono«ResponseEntity«string»» diff --git a/docs/sections/images/bbs-ep-cpe-authentication.png b/docs/sections/images/bbs-ep-cpe-authentication.png new file mode 100644 index 0000000000000000000000000000000000000000..91eff9d5b7dfb0f29722f397ffea33856f0c38cc GIT binary patch literal 38084 zcmdqJby$>L*Eb9*5=tW>0@5JeJqVHt39Z@$C>%+a#5V`- zQDSHX*RBu!CgKZW<^3j_g+8TjcBT5UpxtZ6vJZE!e>F1X_!V#9H$Mw8Fx;QkVb37Q zg(gO~`xDQhx0*NOJQj<>*PJ}h?;^8t2-uyR zk`ky@Z3lw0?gp+N)+sFchc|YYd^m*B5%S}(9J#b;$v?8)lx>`Il-4vGsbmX}fBIBL zh^&434%D3&V|@Z)q5JKN#)Oqpj4w5f8X@8&N9aJw4o5Ch;1{QD`ckKI%a-SQiq%cnRGW!6FiDG5%35UX$1snT~-P7VecV(}SxJDLkjdj~{S z@~Pp>bvv)=LO@lO_Yz;4+G2cS>!9fTc;vZjgllgHeU<#~pGU_MXz{_z=B;xb{k z#RcPUpHv^D^D}s)l|i4&w(af0C zEXxO_vsprr>(qQ69U%D+r*>+|;&iI23lDp-IrgVgx|~L0JGaah<0mRi1TuJvVtp^R?Jd5<@Cu4^bB6J(kjQ4%rj+`E*G~#7Rw?&v-Mv4tT*n1%uB8t&t zY;d0%T`N}^WSbuObbeB!_uj%c!gHn%Sr;iL#U;$IK$(w)ax984j~4QuHQSx?*Ll&_ z3CLVNJs^i{FNy~~nj%0jGq(uJ28Av^bJ`_UVY!>a_7v)q*>fG1nl&DI9;J@&rGk@C zTy-{f;InkygRz$OWv^sh=I-kr!Tve|S+i<7s*ZT-JmW|0ZD~q4Z+S}No%-1b zLlL3-R5bM7#Zg%6PbGR0bC6WpUGik*&xClXwu=Ry{JBnI|R{<$Lc3!3UhiNrt%~%jgxMQ z&XRnVAYeB__`+y&c;+^_MIgSseCZf?W@1;J`n(gPmT9ey5B-y!uiw@_;HAs!NjEYn zZJ_7B_krA5Pw#ZKz%-#c8E-TN@7v>uvwM<{2GdWxilOQbP+ztuE4e5A_uu~PEat;I zaV_yOUhK@}--`P~DR`)Qj>fWBLqku%Mwjq-!qj#xU+^p5ki9A+f#W34DYm*P)Uql;-*VIp^(O(hMlIP`z?g-XOUI-hB=LMuGeYc#PR6*qvn9Y2HKNp7_TRPQ4eL-XEVV4qT zKKi!89K)X9#FapG9YLbX2^}SqY*TPg`1g4Ss}CimURh>l2*qty%|@PL`A#v5813I8 z69!h;sk3G~VVg6bOAK14JYN{!31g%Te!G>N+~!l$gEcv9yR2@8k!{c^(eh}hsT}b= zP5xb|7>jmr3b|7<1Zq3D2KjPOkd*-sb zM6{Un(VHUPbzaV23;d-KrYjD)=P{c#qM8qm+}NEdFItv(!lEK{ znO>AiN6hkje%0ySJ!4E`NH*JysWubq&T^x^f6&f3v>p6vf^(w;rcnM>&@J>1IV?SE zBEVu;a!^>Jnz?J9Ph5N4)|GiKtJwa-D)V*a&V``=;!lqp&L|x=_G#RW-26O@)ftpJDP*tr9yazETm;W}&Qa&klEHLw<~`5iu`jL@*l`#G zXkZkQLYOAm`zU?5S6RC^myL(XJXsrEZYEFe0Z%mzzm|ypDltQ!91kU2(^ak`2)<7* zRo~!=Y-lbL+@Oeg2wKZz^{&J9lnAu#r4=Pbem|>)Gn*6i**$A*cuZq_ny}hhpQG+W zVbwn~8?N)?^Yo8vEaF4!oqpABWZ~zBGchv=*Bm__zD?tW9A6`rhp zza3efQ=6(kI%cPndex@lTPMU7;lE_cg(&}g??T?+_(8m`i5N>&D0`dW#6tuBz7~Q~ zjvRD$g4pMajMNFw@!RX67@hb11@7Ms>N~xr?aQx&*TK#6>IOD;_u!lFtMbhA297p{ z*IG7qhjBuzbk8tR#X=acA@2xnm8Kh)b%h@ zqx8KtVl!(PjDR&xgfWwTHw1>0s%`LBfmv&sRL}dSUTBRCMpnB&d2!f;@4#|GsFF_A zoC_`vy)J;7Jeg7gJd}P4(K}dUUaGq0F~hKNW>6+3VOF zqiHW!mOn5%WF6TP3ExR0D_iPh+}@;YZa9@}Y9iJg9QDJMFbBP`*=O?VhXfU0TMK(E z;+*`v!FD^wHSCCaH8JN&cDrB`<*3MFV$$_o!$^@px?{TbiZjE~al zK2H2m9{BCPdwLNxHgi5iYn(cyKf6Ms4KAKS31T_o!H?D?8^Qp2 z4=xL@lIlFj^rlH(yc(BXpvp?M+^7x79m+kjlSM9$ECuP%Jf`nvB<{J4nN?^n(n*%1wx|0@2$+_w>*15@&sxzP11 zm(PUwh8MRyS7W6?^Z=_BtbEe4o#^&wr8?TcdktfOD!F%Z&J+E?Jjj2NYvQXwB<>_tkobY_5r0sH`fNrqRO@6Yt1}#cTYj!Nn&I zK*CR@OWw$@_L3jr3wCV}>K?Ac}wH)x#gwK7xgAMH3g4*>#L(D+K zwd5ih*Y5L{xr$~nY^DoT@X@dTao6X{kL2eo44kTH11O+gqWch9SjT-(JIZ2acr1MX z=m}7TWksx7KNw8XsUzpW&8*0Bx8GAPVAiiwKn~OzD3oitm(M;J(U>;n`y z@7RY4#>Wx-vRnXGh7@yYRMf2+IZnM{s$jQVZz&J58>&m;DjNln>j$G$FO&0mpf;^T z?IO7N2y^|-u>49dJJYy}l{`CcF|v{t+`^j@2}!BvGG!3z*sJCkW7<+=P4y)ik@>?% zaGv6-3wXHB5$774O*MY|Daums;j*qAu5Y~ZKztVT2Affc%uXlmO1!0uZxe`ml~*V` zYKi2pIbeN{tegN@`UU59o*4CyJ0%XBs_3=>q0Qmwh;gVcovSn7hr0pgOAHnYtgu7< zz2`r7C|SyXuBv~I0N17JtZgJgQsUc&V!)}5EdenD6Myz`Nr7nuKev$ny;GRPP*hm- zhq@q;Z?|~rwa4RzK8n=U&A#c9iGRq*M%$=OI2PYi1<9)`=2fp5)jdqsGCLM4Z&>B? zMn>SywPv|{?YnL94Ao_fm<)rG{@N)?PV7LsIvJ1o0p}Bt565AE^OPrOxC=fc4r_O} z!GC3HBr(kMj?sP7H0~K$z8p?4AbIU4slSK{ zF?f+Z!kNZ2CPi_hPsjLO#@oQRuC!CRs7tQeSo~ELaKk z)_YMfg-QPgbyN7t{(!udaWgy}`mul46UadW?O9hf<#8+xo3e6+mD+gVF$4KIPBN@}n= z?tAoQL-$5u=(e}Od@faH<+*a9X>BM1*KcnMBZ(i;Fto>eajn#2nU1h<%kSRL1-aHkb4xj3P^z1t|#0QaU5d0{I_qf4d!?)S?av!4k> z1zfPU+6XyN9BlaJ+qGV}?Wfmvl<-+xnhHzAG~YA0tDBpC^W}Jpr)J3&AdJ92!YF}C z{M?A6N2?~pI}5>kn<_rc@?w1|HI(&|l*o}Ub3$j^f0Qj4*k&vG1qR{A2zRST>vA=5a>0k>KTYc?@{VHepr(R*;>$ zIt~$KhV=-xm446GA1QtYRhka|W+69?E7!_*4yxFw`R&KF62uqh6q+>0cDTdp>lVR{ zvergICRmBAH-Y7P&!4B(Zq=Sy#Dne`OncSNFQV1m>)v1fG%2jj9xdjg9d4o8zcY$u zocG$itWSf^08)LSOlg$9YUduj%=daecsxrY%k2%V$sDLYA(wrbFPrZ{@(%rfNtP(+ zVzkwC*o;3DaXIO=FRrIO&uXRl$e(S8J`IwWO3l7=q;r3d?@L0@I!*MsQ^B&ECetwF z-M5}aJ~MULJC5O-CH8FFwJ%!1Whg_5z-w%dj1vO+IG<`*PJx3UZwlC zD&YwSRn97)7L*@f%OydsofcGFj`bgL3PxORY&M4JbI$xDX3JP7{3`X}x5|Kk2XVr1 zw1^sKwkx@ExS7DQ7DDVB=K}@jE00=R^K%A4ROmY+04_Iu3pv<5qn1usc7V`<$~3E5 zT_J&vC5?z;`ZPU^BA#svxDs7YhPIJs>}c|sB0$~7 zQcP)7cS#P;x8w3-qub7*?|r{%>C{-zH2tA#{@xV02E@H%|Ja8kf?n)*Bm~b3(r2Es zQdNSix@@=diBAxYKz2o zHg;_G+y+WHa&^NNy5Vus7v9BZ0T7jr*f+y(+!xH=->00OvhtqL3+|h@SrQ67u+!_mPxwbzT*T)e z{qPLHM+M%##oUhH&~g&aD6+#DoKc{SgG{l$uN~jEu`b$)85WJWDf_f56zE9(qCbE# zXPxVvqZ{J#KTgw=EfF#jE#4$6d2UMbez;6ai9U`g@^jmib$P@p;uUMO?g3xTTVB9B zgA$+Q%h6SQ9&kZ%wfrM0$HHtsl@52o+dn+dhdV;H`LF4$SIj2bKK69`zH!7-XyU4y zG)q3K6lbRKdJqU0s*FLC@lE|zRa4Y%V}{RQtBHzQS9#o^I_+T)c{|;I%-EPlrx~~z z$VEPwdH2De)pWu?eu_-T5oAq`Y4v1)b#3uz*0}V+S58XnqLln9koM<5@f70Ypa{f_ zd$tz_gy`8+!4qSnU^-3 zsCw)b+&Qa3&bkv|=z{Hx3cX~Rh#IdgwXfC^9G7VQovE(huKu}Q9s;+wZu1PvJ!SJD zZm=KgeXh0%?q9^jcCeRh3g?7@3y(~8H?Mggh{O%bNvKHNi1itamakR+pf0*SkfxOa zS$<*h#F=c5=w~=i;7$O~1JtAvti%Caj*fk=CC3F!C%FdH#XcrPL;U}qqrMiz4I~P; zb1v7)C4^n=6plEbkyPQgv;V!(bwKEUgzQ}mdOqT}QTGl@NGV=X&)(Z?ac^Eb`)U?< zJl#+PDmoT9g;>HXfb1mSE5QBWPHZKfudDMnV5*l5g6yqR@_LVdCV2RWu4<6N=O$t0 zpkw!tG<1XE1}X8z%@6Ckub)Ay@#Ru(nT+B`cmk+S;oJn*Ziby`iUoJgdEtg4t#mxn*Fg9B2< z*K`_t`vu@ZrlWq1+77OXxa3!)J@dOhz@it&shF~RVXx^beYjuWmTLF@NrBf!b%i14 zDW{kxN^&4fZyxi_JN$TK#)uKGmH{i84ol;AOm{3;qnSYx8Zfi1WIO8LfWQ>tV^rv4@|7P@Lp3tHr2yf)Ypjm+p-gc%8Z& zU0?A^rB=c>NFEhZqX#}i4@2QF@4tPi9>g)+2_U3KT@R|CR6ytk*IQKi^Uh<_0d+fd zv+{ElR_E)HB5JR(BSrWEl4I|8uKf=neD(UlZ1I05q? zUU#nz4JYomW(fincA-0_$MhlOu|l58*yA|&L^jn1L8`bnM&`Bb^b3>;vfl1>WX1@M znmsqay^%NKHTk&mV0|K>5V=DOFosHi6$U@O2BBxztvLe4JCX07Q+K6R?9c21TeYgy zhd_zluUYB?Wd`j2QwHrf$emw6nFdsA#J>Bd_REO_jJQ5pQ-d5{num-wG)=cfQ3y~R z`kfQ+PYYm{0R`kj8rl+M%tkU4!y0c9>__wyjwA+(>)Q%XBPRij_Cwg^QDfNlA}%TV ztE=>i{E+SDw#=d|cOLzg6T;rxQYqpHfsOW`D!i%V!F}3PvHJkL_aF)v!tOPWa}OX6 zWc0KQ>u1t{FeNw9XUK3d;pU}7R9z2i{Qs)!>0xLNm%SY*taHwihG0&SJ9#bb1RVt+ zbPPDibl^^aE~!uo(%SzFx%2$S;K`#HU9HBY%Kd)-GT5=0iZK9*uG2(>&jsEAun@`H z(;;q%1EUE8a109C=&7#fsvkD^y>|M3u0y?Kr)}~$Y6rlWW-($j z{%J9;47zg4;~i$1J-W=GofrKml{H7~tq`LDcuoik)UbYk9_aq8R~f*2I=J*^KHl}A z37ZqZngE%g0wcrrJ!#O#g{>JBgan*Y=Fd~(1u7--;kgSQ(yt;=AQ42I3v?M=5YPbX zz@lK{MkHsf45FD`6+dFDP9vC`gt8W;su+yzX%9gho*!{OX9woSy+OswSOy2+=uoI* zn`^MzaXUJ{yDrJx!99^aT{6^1_F}P!2Q-IjAAJ9XvxpRsN~IT_?=CxHXFWE)(Oc|M z5zP@|u^8Ii%*M;o5J65B_-mlwVaSm4c^6eo{$?JR(WG?*%3YMk98(9o%>4)KF3GgG{)h#F;^C3f2_Rj2(A_GV;EroGq7el*~t zFs|lm(IL<6`t?FuqF*OXz#T!WB8}8=yk07r7;}6)@NFu(Cfwc7@`y$I4(O3Gfcdgd zleBzktJ|L`yt3F9jy(KA6h!{-%I8S_g_*#fiTVo$6n-AoX~*sb$E0+JwS6Skgt~{+ zEdL5+%b)hS55zesSrZ}OpGGu-JD^Z!$RbV`P<=~d(N0PuE1Ukbu}vJzQOF2VH^qfd zsUoL9?3Th|%2WZu4m!L2C%+EZP-r;gPKy!o)1#31T3z$OxkH}w{@MLX;vF&fyS5TE*>>X;^}sX0 zm={82ZIceI#7G-PL%&hMha}0#er_mW-5QP&#>y~y5U0NUKv($0l;h(bq2oW}Y$ppt zDQ3N%->DAu=cDJpNk#ztX;oa20C!H?Nq_i+<1!Jd^Dut_`|~H1ZGE#bD4h>RE9gOt z>QZRl2s{yY#JHHdxmR}{R0^~*0MiILmoP6gyI^IHq;5m?J1)mhje*92M`a#Gqh1+4 zP|pqi*!%DHL{wFD)u~Da;Kv~YnULB}pslj7JV^@xDbUpbnm;>K9i?A0DY?E%Kmp+7 zSBd6!3xIHNyB}~~IvL(JZmwbWS8S*bj&DsVE|3SI5Rlu>%S_?j{CD110C;x*U{Cxs zmuSI8Gz-f$wEY|k5JkbArSQ|49+cKW!3b80u;yp9ts#8o{RX{BJi^Ya5$jn5(pX*S zDN!b>AZ(u1E&Ur&64@r9h6CIoSz5r`@A6Z1Wk85xyOa6MGgw~oKDlB5@CfPQn1|iW zv;~l>E&Yxp9^+U<*AQ45>wxR;>?~Qy&A$Ue|33q~VO}GAv>8@}E9=a(&@=qM^eI;M zZm#z-S#TPTzuBXc+tSQm?YfJcD+0_1=FwBcgQbHg$jN`XH(u!WS)ZRA{M_@wzkBzt z9%(p%v_jON3qt@xF+>Cvr561>7!n`46+@FyL7etFSl+42VD07q@ehsXKt}nTY8mme z0wr=iul4Dn1azeT98O2MPivuCR(ytN-gVtW4M5*95B_t1seoLCXbLdYxl)1S z#B!uciFzIs6r}q8eUYc~e9hR%h=GMgXO9sf9mixh{A8r=WW=jdX<>F3I8)kqaFfQ{ zw^^m71OfsAXmVoXg@w;ZNJ)+6>OJqgk`K|@??nTQiH5ohgE+b)1_q1H%A!+B;zke4 z`qMAAC!?lD*d9d{?jg=u8v<3h3+O}o5zE~?M5Xe=ng%+9l>ca*6+>B3`v?ZcbyapK=ZD zn0N%nVL71O#!Sv&8up!XMT)y!^X}>n`irI8wYLUJGz$?d-6-iy1fV|ue4y>HeQ8?l zZn#LB9L9_he};Y%pfnL%40C$}sy^|7PWNR0sPJms$8EaDwUoa1YYi4*WIZo$x7*%I zUyh;_Ljf#EG9ClhF~K_e_1k|SSnP_XI4(Q*n)+VC?$R^3b4WxvuGH_Uzm-Ap<$;SL*{}O5 z+8BalT3b=~+_qhijKa2$@0fE#?er8SZ|f`6PM*M69)!0EXGI-kLWnwL96(pb)ZNU) zKU6_0(t;?v<3e$_nhD|k_+Uky+5~k(j+FmB?YSFjnvfwdE!#80Q1wt~B@SDM1-5t) zj^g=!&Pf27p&+)7dfn{O^uBvi;|*Pk!`+zsS2t^jwD!G$D|ZuZl?%^|iy+fk^2A}J zlL_h2mOEQO$U}7IT2`3SuNO#?@cGubJ1=K`DS^~m;aATL-iz|afa`#$;(S9z9s2gg z6XrXtuD;j+VMT!O{;hEgPb7eq*KGFFPm0irjjGPYYL|p#bkvRB8PyzwWV!LHav00a zTQXX^`F5<&D+Vok{E`z1Hsv|ytH4Bis5A2Q@Z&BeYe{aaDhQL1qV}W0>6_8L(FbK- zP@x08tEwt(yW@-DZ+^=+)8953X3rzHI`YNkrr%zqMAq`N7wtM1x~hVbe+42~?>B}6 z=OV0_hY-1}l|X8|YA@9&Or%uMty59@4O!bpU%y8`JkLW%^=xv`7oH3$Y<$mLaXz2% z4koL#qJBfE-V>wa{yOCQbT7nn(_;SatdPc5MYZptsA9G6QY{Y$xV!3mesKJJZ1LA8 zNE2zIZusdvS=1S`mW%D!IWJetZhPByo7Xy-p8HtXM-NuY{g%M4JROyYpFC=2K}n7QYW8)5Q59qr0ViX+ za;vV^p$|#1_I8dRsN51Nz#m3v*-pFsk6?m^DBX1hZ7(|?`Lrf)(H%f25Hv(WR(RYl3qjm1uOz=?*vcpt8Q-Bbx{=|7(LAc!p#s^7l>xc9&6R z4R@ddce7e%i^y{%)KLNM_B0;M%vTk^VDqvg;&bI-CSIo$Dvjwj;rM}>Odv=o+MQ(sk(>wnC*-kijx{m|t*d+U-NUt)aeTmxPGxaQ zH8q`xMU!WPEFYgtso3AkEktPY1MA#EHZZ@XTbY!=6x+5hUc(OT#^f38q7>64e{YK% zJYV&3s6_~mMnATJ$ERi}ZAu9!$B*(2%U6F!o(%O5Z?@Lf@4;DNOk!mrI9>H$sRI!d zI9~|B-%F3>UaILlmMXC*=*_$QNf=L>NcVdy@&g|3yY#uIpca}d11rh6-+SNnF*3Yo z9e5FhYA-zzgZo>|K@sVMyQ=!uMdB()+3k&v9(Vk%TDQielg?|^Zmi0EUZ-;}15|NW zhNB=>=|8xY5YF_Eo+w`T80D1Xg0g2n9^H7oym_LvC1-p|y~9%6CQ2-3Qdc#jyi?F9 zd%{Y^0-KCEEI66NdZ{iaN~sn@Abf?0KP{419{p{;<~r*|$<`~c-7fFAS)?fY&c4Tb`qF1 zk(Gc`QP!}-QULqG5E5N;%USSivw-Cm6+AAS@F)%Qw#{>`Vh%6Ix`{C6)N*c5HZ!Y--`7~{# z+tTFhbUgV4o?huv0}X$Zub81kK9LXrBS|LKc_T-a#Wx9?nnr?BeiKBhC~8HRJO&Ak z7ZPgEJLFIWj!M$IFYmc*@n2C*QaQ-%jkJQI=5=x?-f48Deug}bO3|(_rdCsqd3nWK zG>~lSp&>w9J=v=CocQ-URn-qbItJvOS%rl!Rd)j%)a>ok-N1>1J@6eW$K~2YwXeB09!DcT2;b>mTI*2PnT|Gq zCCZcC((hx(Fgf$3BU2}XWxjieDGH6#;#m?himpNILo;yvqxh7|lM zCq?x0wwzf(uxvS~1o)JSw%s(zy>p7*XoBlM-O{nNlXKclm z1-9YVn$x?X*Q3>abmP>UgW$8|-wf}4Bc@mD`Wo~iw1OU1;9h49cD4q4p31#^BXqeg zM;Uj=;-vN@1so}}8Tfmbmn@40`St5p87Zlca<7?`lAd}AJ>?|Gi2+XwJt^Rt=Y6l) z&1y_$FU8$-Z?s0t#JSS)rAboNt+8()*){RALNQTph;h&u4$9%nK`spGq~E z`}FXF{~PhIqgcVK3nd?Vd8CV(?%e4x?PoAkekQ~W6Jtc|Km#a^c>9- z7ZrKwAy*l*p3=mJj*t67ZH~0?j z62}IaZbOH>DHnx#Tw2bOm*2IS#JXX^SUOF}{-(0C^xG(A+_3c}Elwx*>FGbtYO1HR zA3Z$2WG0x;cEW4xnZR;5 zFaEjm5=(Jd+Tu*4&(5Wskt3krJhaASL-7c4L{ZXgM#6xG=M&!ularp|1OZtk`Brtt z?h4F|ILl+v;{k0U?`6v$@>>7g-LO(@)J89Xjo32PUybKS^iiw+Y^04MzDp)AGrCw= zw{o~~+(RY2W2Z%ZwKr7Ka(0@>;T9Z3quSHj2hV5wLszevf8@s%SIdIxp!Cb)mdrQv|x}fKJ#M%IQN!qYHjTsMK^e||9 zO8260{Nb`1eEj0SI#|Gp1zdUD(1D1VuW?$%31IpI^&ZpO z6_rkAa9thIU%mfiwm|8=yn^^IhiywjC^B$E zN%92XHDXi+0hBIIf5=dyLjSw;Ap=a@@xgzY_=@z~+iAC1&Oa3r$b=X*?SEBBGNh`|js$8bQS_Pt--?J^hf^gEY!u-e&Ky$R){PO~4R`UsiLW1VDnDtr zMv*Q-arn2wG{1^*PCC_l2<_z%Vm z5-{CkKwH_7wJ7sa2@M4cpfrp^NnmJA6Wyo^dogQn;cB&j zX$E9YY|n|qos6P(hH(;Lga`~wYwjU9GMNHd>lzidmCDvw~B zhc@P0H3zWaIZzLLGSCEkxiz|!=1BPFLO+!2#jiL^$(Xhdcb4oCzsYG zM*wEJf8e3xq85Vl4~W{PgnCFIhRUEMC22l?{+tyqt?>^!O8OHxHf&nAkd7r57M2fL zEG+Eo%jHdNCl8TEtNyy05fn6-s zqP>`!hrpg0|GPS%?cs%j+^aQB20tpKM@wP|PL^n4} zFR!gRAF1E@Z?smiqu%pS709vxbPp}NBQhoB@f?y9TRisFeKAex-ZC4SGOKtNobD{S zl0>N+URnl^hq$BBz#6kNxrWONBwh#%DBN3A+sFX#so_f&ElFPxPudZoneh zKXy}V5ub%|G^9q$OgcnsqNE$sT84K*0gI=j7;;A~o-yb3jaN5|1$Ln&40@0BqzKXU zIOd@s5x_AQ?D^MP6A!5Rl~*_G8F}F=0AIaF@n18#WI%C76f2#~w1z=fg^*G?hJZ*Y zfirI$n0yX>z#4>&O}4GM5+FcFVZ#7TiYtQ{ogLLR*Ue&MbNtsh3hM46p%z;HcjEsg z1D}8c9T^+5(i;|v1&jeWZO?b?(mAN_Wh~x{2O|w4vGU5xi2?%yfm95gdrG0OuuxS? zE5!3~6`P%k)(F*UT}DA$TJ-**9ZQ`91M&bA4CIk$vT6=%Y3^D1`B=ssQL^IHWV$la zP*kt2>rpoxbqpB*CMzo|t4e|aObEFnuw;pthko<&Ia1n7z>a02KUplx)(x&iX4 zB#gTlm)!Da{HAHfL{fFFPGqKQK$uqH4^|%16U(c17PUC ztBruJCM^Rc3k+pKDEODhxZOb`nBeZ>fpAz@7|P2iq>%CWV<9pC{Ja3<<#L*ui9jo7 zQAG28zj5itQ=^g*!yB;G&{1^-!PO@J$n4cq!H664uYEV9z8Mf~>%+#t;Xnn;ITz#zE2Lk+nv4s z)@-2^K|ZJM8x+tDF4bgxQG_tI;qb!3bysSlvAe?C-1Q~!Hoqig*0gPbo3msC-$eM! z!Bg6FDk`cUPAfQ~qM|Gr44-uBxS`oxjgcIF$M#y99+FiNY;FC`8^Sr4BtG3X9Zm{J zRyP)W;~pw}L*1sU354cNQ1*lQ_U{iMB!G_vAXot>Z(48TBLsvYx=T4dbiN~^bv3{H zVrd88umlm3U7pP8{aJp{=2ZV(=o*pmJX#iHeWaeHV_f1~i(vt)I9 zJNcucVO7c9;E8WaWY4~sO@337zxqK#cfJzrxY@UpB}75n%6MxAgdcQK;A$h!$ar*u zJ?LZY!Tjmvh!-b(dCTsCT6>SHL)E@J?o zKYTZchf)&=7SV1U&O@dcB|fi{>d`?7=tXc;hXC3U2Lqo5~~Kb`fD zwEU)TWP*8L{9vd}#xuP?=C>=h?(6n_U0DUI3xGEP57lYqK*<@ioqWRn_}T`iHeNok zCzEXBHMQ*3xA~5A%Yo3jBj_jg+e2$*{0qi6jWs5Rwom&q=wQh%&(>p>9ow6Q72lCo z2)gxHAO*Sw(7S-uhFj3!z*iX-=(Bt~?}pw0kpb5=yD13+G7B8!yJ%tw8z!H zu<;K>i}ZixAW%c8$nJMzF~yes1uV0solh5FudLzEbp3;L0@(9gV|WpQ>JK;ugkMA( z^>NHUywu%E&U=ykQNXyd%kw$*0s5`Jg+H*PHdArB`prCXmRs;Kt%Gm8l6AQBU;vI# zRDder-6~pyE)}I{b(@>uj=QJJbnuFwe>x_v-6hF%-#`f--160h{tl&Ir(Ek@Uf^`! z{Fp(~zPC&BZvmGO=$b+afaW|9cDjfrQM1ZT^Q&o!I%a}V7EyNiLiBSo${!vcABPu< zN{9Sq&g7#$3Y0I;Jid0SB)u#OzM~l~+5TaRYXpa^%Vs!B96E;CEvrdI+xk~`ysh>q zVUisH6VIo-@rhpPyFpCCd*x6$=r9<#;)y(^=1U1zy)E8;E{ieR5ZZ-;n z*T}5+^%0!EXMEAgX~FaIAdnhOLU?UqZ=y)te?5`rq`n`EcI@^fjfig{_nd6NOE){N zRDb0giXxv74y;ctTd!rQVy~BaFiGnF4%95tctXD9*iRY4%e z=g?Z9SeJWfW7E-oAW85vU2u8$Ip-)$#}hOR)KNO zhrnC87lYq=W7R=EE>k}NIzUKz8(o7BJPIw=md0X%@isr^dCI=H@#6y%1E2PNS&7SJ zI+$8KD-H?08e_V%%fhrp{S~d$qU8(F@SH==4P>$3od8;NMybo^` zCECoC9)*+tk~iD5aClD?8Ii!sQV_*>{Q>AQCpC=|+IyUq-01!~dU@Z;Qs%XAMUoZk zio~302?DF?aEx-C*>L~}rYqfs;856_N?NVOpiMC-v^wCI%_QF>|^1`Df@Gt(+nYB;^YZ&UT z>Y<_o*N8Es2uDjMFzCfCg({}DU!wtc4Y6(;6iR)o`sW8OO3(XRdAno4?ivePo41F}o&)02P!WM#eBEkNv#XCGV~b=l&v zNhfqSeKcV!hNeHsLUf3)g2R@<;4xx0qwqNQ-E4g5hVF0WM%QjL~T$f07k@9{jUe-bsYcmE%rzN>01#nBtY6{S11_3u& z=2t=#>W)^Xxmo(Xb4`d+F}=P1b*o+hvF<1o`WTQ4S}Zq1HlQc-GF)va-}|SK|L@;e zUVWf(N-0Z6jK{|}u-yx9dKL~&xdVmQW3SK|nVuva^J;&lc|cYfVSKdS8~av=O#FMS z8ZcxGWEKBIxsb3#PTZS5mnHHj&!ufC- z7|gC8-UFPoie{s{gt_^mM4>5HPWM_({<+w<^dJo&IuXqqR&tsN)9x-^5o=zp2Jt~Sp{KNfC)8mQL8B}Lq{*&YCRl_d{%aL z8Q^^YU@0zRxsu0ck|uUv@_1b0+HrVRT6bepSm$Chq~>bsHo3T&{#QwEG-1yHcOJO_A3 z{rL-7Wo2BP2M^RVG@#AR%_P{mlGiXtEzjPo7_bjN&=XtHsF+zlSGlqt_Leh6g{$Me z@vkk@a2l$&)Gg-&H|kEQ%sCYq8BgDFy?OIyZkHSieF&Jyy;?cw+-Ulf9VMzro3G>& zJ9=MKK)A&i$`ar0m~u!4OZg0&p)p8}&j7{L8x9w?3h`K#;{xYj#gKHb1;{2#t_rsR zdvOJ*^3xrPWTvA2irfP#Unci(5_m2igmX0i*DJS87F zQi%(;slJQoT0>t^yPUp3;sV8L?#SJ^_q#P~)H8lJS4kqyOhB)LF#JHovXxvG`|IXe z!t?Qvb>NGt^tt)@`Q#FhiW6myXE&mB4mWIt5v-E#Gmi4*6)HOVT6%iB0MHlnP!xc( zCEH^AhIi@YKx}}4sH$cV=3^5xh0I7mdis)5uYmu!^!NV)qzVmyx zVK>q(SrOdXp}exd-^UCs#0z|v29u~D%iU)wN)OYH5)MwuuIuKaRk*G1on@S#@-wP$l0o>UJ(H@bUx3sKmSNMO?I5YK7^WggCtAh zlhVh9Iw5)e9(u(V;q9%2U*|Ni_@QkB$NoAmK@|R0S331ANJHsJsqZDVJcJ^35@vu&mz<1>m?P_2;`U9Lzq8@Lf@l- zHH@1eBhv6CBVc(Y^0PO|3w)HfdFB;Tr?uuj_lC#kS){NckssfbcThvOE1kP?l^>4? z{WM`Bz*w4Jc8PHM!I?CFeT>^5a(Q2!=9ZMj7skoS`TO`_l~@ax@&bch8A5Y012Uc9 zeLSe()+f~q?$uua$Pve|CJFFf!~6HgKi-}?{Jb_)%>GszJ#b|uWY`)hnB*%${UZT3 zSRR4ixNS=l3?$RfhOLzw8Nr(f+E5-3xm|Zp$;GF%jGRcT{`2%qdu-fTFveFZcxh~4 z_s5J#xfTS~SHq8Bnz*b^X@Xw&TWUXw%W<8K3OpnEjUX+r_oXc%vgO*)PDSg?pm}Jb*cR_Br{ucZy)F zV1f9g10Rj6dPdrv?2lcBK7IpEaL8+U5Bq=C>GMp7AS+s^`ZppCKbl1-@L~Tr5|(&D zb;Vr{J;2Od>zm0D4H=JC1b)PmOouDwnj3p7*{M9GYv$0!;FKrx4=_-eB)a}lH_?!6 zh#9fxSI0JIkfGv)L!J6yHv-=WP{LvF9_FJT7r*-u*hX|c)eU19&%m8aPvjRGS0-56 zb#?W4Y#39w!OIxmjFRHp7)X;9Z5VFr4!d#jtxynt?^Du`i~s>mGJ2`c|2W{} zL-_`81(tW=MA$JG&UAjxoYS5DewI>c9QykPcUG`K=>1LP*CjySuit7FcjqEFy zM_hL4CfI@Mn`bQy`5vF>bk#qnmijY^erkHOwHkpuQvzf?k;;(px{+lZ$G7sj>h$R1$s*?TD@CwctX-tds;iRrR*gWKkmUBK z9YGZ~z(oyO6m*2pu_(wd$CYNiY#2Gd0V&^ESSHr86~p>V%psV0Xh_(g6(p=LTeFqj zedEdVrh6IYV#;K}8znI5@24auW7gN#&&|!<)FMjy$jl*WfJSYb!)ILW@5%WzHCnX5 zmoE!Rbh)1BBxU(T3Gd-@4}CYUoeUHTkc)jhzTQaQ_}zR+jQEq^kBE7UJoF@Zs<&m} zFDK#9Tf0+KB_Kr=9T`!63(~H00<2);`k@RJ^a!PcPPBwS@@;$LF@2EKcmH=$!6kNa#0soRsDL0`NlD8p$dNwsRKE;>3A! zR?Xt~0NrBJsnoQ=7sb;^bMwB9K0t5->G2DlHFFz=z^joElFn2CpKbWTjr~3@-yG7A zD=o&wyIWmQH13%y6RExvE)&TjZf?#DIoeY05Wm6vI{F5cG|+UNTq#_Od2U{EBlWm< zbrK}kNm=gw?>9)ue#Y~AA>b~gi@n+TJ;pg2MK_>AN1Wg(UFqCscjm6kY3_m|V@2${A(8o{X zw9mZDJFZ@082_4GwH-ajS9HGJ(1lQdxcRy;rh;SNsB#bHF3dRetb#wFr3W?J9t;;B5qNr2Qb_FbhClCP& zy02U-Q)ZYZm9L+IypARd$wD8E_-R&c;e0feN%N1D^?h6)}F@i9@!BrfNkQSQ}$8!IuUyK zFOq z0dnN8e9o`H>*$M8bm)=o_WK@Be&# zE%93ru9l8xT8Q&tR(@oJ)|d#oxE6r0&SphP+vM=N1vb<;aNdGKG*!SWX>8EyZ@ZS^ zF^|E}P@VW2(g}b&xK8w{NSAmjv+-hSq+Oc3-2Fm8|GaV8-RN-@BKb`pkV0I&dKDB*gHQ`Uu#u}( zNYI)L4P^otX*|A+b`r111?&1G-K5sE*Q;kPeihOrHyDMgom!A@UpO#1v{V9=w6;b6 z6f*_Sf$jo7YXXh9^_^)X?C$Gm zg7d26R^{b|;GgJIiP9nrujwdzXo-j;5ux6(kUs#1(@;NcbEh7dNgE zgexFrto@+Is;{vQ#Xs7p`VDy2Kbk$kc{6i__eH7lL*d?74agt}M@!7ulXQ-WIggf^ zmQJLY(O@&coO5vF`e1J+x~sHZq}G7YFcr`F5_}yU5`6rUL_8YAe6P5qr89$7pyA#i zOIJZmB-1P7Al{KstR#|c%htWx>bkatIF_;pc|zdanVGiS_%7T0)%vU7e@9z4QRovW zJ>#t|lg{{kx@wRPbLYvXhMDo)Ql9y0DD9c;X4q1g0P=)SbGg^K?Bj0|gM%+Lh_9Z>K4Me9R_s>Hb1jbb~k2a_Pj`FY@d}xYht>5AK?V& z=1jY&h{y$S$bjLu(ggzWgoNXW`EDV6%xPtLgLr9%zPF6D2ViuGcN-aHdrz6890yWh z1jHnyq)+7J{Aak1AX?~CDhd=rAY>Z!!glZR z$$oQHx5AfZSw)&62>DQz=T;~_P+_$j4Gt;$QWtyJ2Yb9lt$W|olsa3D^)LJQ`bz52 zr241-s>(fs7D89&#ZwB1g0(|YSrEbudik89B)09NEXq`>Tw^5(b3pL+U;L5mn2@vx zmwRoqTp3bkFqz87zr`56=pU9;oYb*q?SHGjIk>3puSQ4&C8xMWOHzk+n(5ub7EoL;PshODbdGi+ppNVY0Mw+|#d6r3GlTPN*f zaLTBKD!J({d6I0f575Iq|2e4<{=69JW`$z{L_s?>)LB{+H9GYQF~DHwhBBsxziW+x z=)!$I{gKrUNYE@;H!&%ajDIWbv3em&LooMf4%O_}YRq4X8J2A}RrNBgcE+V#DR(UU{eQQxj9(rN|DK8lGE(e;EkwK>@DegV9cIVM;Ov$u9Nka@%JZ4e`==Jjro@u^2;=Uj%qZx|2C7^ zCR0Wl+Qm!G|Hdw^8Z@x&m4v`TS6-U_pFYGv3 zObLXCC~`uvr8&$M^*we3GiTGepA#hmOR8YVorhN>yr^2)9%l$+w~tG!e9ik4WfJ~C z{$EDPZ!F9RlTEnSeV0Kl{)g6P<+ua4GJFKGzXwo-u)c2Bz?>?g)LW)%uf@boGR9Lj z_E%*idR`qvi7#`$`j`2lmfqSj(zF_aorAR0F_!f@p?5Tifz z-yNl_IJO2WHc5UTY`JZdaJvv*bL%7(f4ojb;*1lUJqebOYitxTJ|L8!9IEwI;f%T}qGzEd$BZ^d|7t*!!jaHhu3Ps5om(NE5;s ztSTk3os1}Zu?XCEA%FXa(N<%UByfFdVH`=c=a(d_n0V(?rVLOI0hOEqkhG*h^GiD5 z`_Gp)l^EoLSgQ(R%yxr>Sy@5pzRcl;)D%)SV&CaK6=^?}VBku~f@$31ssFg}K>EE) zN%S&LQ;)a96n_z@lo`P15lVS6u}W>_;i@^BY*ke8&87!Uz>fqrg;dLfz2w|iOUA)2 zep?6`$Cuw;WI+4|VV9*OWLYj%Y;VgjuOE^pR}XIR7<>)=dpE&nfJ=Sza}?SrIrNZR z56tAHFT6P5?K3qTb}RiCc3N{DC}Wm9CW|*y-qx--d^Pi)#7mdSy@f(6DXqT?(W98vrL`!kFtjn zD!1Kc^j3o!a}^>bB^4vCwe?F=GF6H9WPVH-9*iQnme#|*oiQx7mF#dO7oiamuBjGA zHO=2Xre9pa9s!LtWYdBd4M|R^$O=$iqa_POR}%qzGU}1;MNoGfZ#Vi0)IkG?_BOiy z2p^{zholaQjvbK=cMF_{aIF&*41g@j{uy~r?kxw7yDZ&rj7P#fG70x?eAS{n!QB|vGDe8=hk zPW^*sh*)d;ksjBG6(&1Q89cj1Nd2_wfeVPWy!AU%q(1Co9j&QI7rrR9$#|=%`|&R8 zsZ*f@fjqe9Nbc=MO@VVh$~q_q(F0wg*bRN&K&xZH_WS5(tT#jk*ooeqqRAN*S(CsfaH&mqe?fG&|j@|Rs#yZvgx8M%q?u1Vl?&RWd z;T8{VWv3VVG9S2D*XUjn`}OTCj^y3jB;u#Txf{s5l!Ro@6x%Q@l*m?S7rh>$%(v&; zZ~%7?hszQ#+X;;LfyzF2-;1@y@#iIe#o&ryKz!AbJ=Hb-GtE;I6ZFAyw91|rhwaJ~ z%T9%U^F#E(ES3+jiy|d0jkjIKpZs{FZ49dZb`L`pUoRgtg*V)OekSmzImO`ZJdP|+ zN8*B0@x@fEp{6uHr>yt=WMAYu!#j+#Ti681jRsK*k*RHlnfvnFV#^U#93yYO<=-cq zX6=>Rg0S1Y3LV+wHMiKjH!(l5@*j5{H80+gPyv@7{Vk^z1K#s_<4(|tl3-h2Ma=GT zI$!wP0K0OG^qv zl||A%{`#_o4L5_RV)qc4{cA>&f#COr3mFdj%Zqj{otWlgv zPT0pU!snGf7=C-?9oO+R?%0|3Vw4mwQ=j?vq2t570!Qf}|1rI1v?C~RU54wT8tHr? zOJMd`yaoZ3XYi}88{I+fMcgsXEf1X{?A0w2i3q>k*E4cYZ%~|is3&m^YXd9MwBj}@ zRMsZb%1881eH*z0{0>vg8LCiCBOB z$ZAwsG&eDuA0wzyeOWUsm%vr`;LP_u8BPQUAt+rE*3i(1*a&WIGQOQ`!GP$>zrV++ zQ51_NS)VCuq&JctA`4#U^;3IxptskPgv03NSfz8qN|7|Ek=?E78uGB)!KKomZ8Mt? zNWAgjjO$@a5U6~~E#!=3??OgjjoC&Gu}H?)8r!uauJ0A>Gm}JAodxu1&--AR5d(uW zkHLbHo>xdi-~SXOX?TFX^(y)h&vBIA>Hdp~Go{0 zd_TW8O3?Yp&Ha3UyC@L1d?aE`Q~5!t}Dg5X8n?;i}69vl+)4?#BKu={0~jnDcr*|*cXg3r;+@dcQL|rbY_?q ztP41NN&_$X6n?M~y>SdKk6JwFe6*j?QRVN>ST@G%gz@8tc(pAjWuGXwUws~^({CQL z*yd-h^x7bKdgdFvnXutL&A)kP@O!3~V{pbL6BJV7yGLHKJGOK5*+Q}M_FXhWO9G`W z-lW)UZF(9K5=WyIgPc<4wu%ZP9$CauG(%t0bdtQBo}p2w$?AWlCX6v_!AeJr5HREX z?4b{D3%EFHYpYeibPHUR_5UKNY>{uCOi*jl(=_!%eEF#%Ux|4YU%89Ffe{7#`IzV) zF7=tu6QgyPuMgX>p~#n%FoheA-enNC6xUy{ONV2^J5Y;c`WfnJE`F&-6{IFy46*N< z036B(qlRa!f(yD5KJNoqRIeqkv!{z0?_e;=-_mHEU0bBu7NzV(AT{vfCypc3qsQtg zgv?8I(6-@A6y^dSXzz+*3p_HqZL+6_<&RlyFg}cP=OF=QFC{hsL7oEPqzCSpaYvPW z{Qk)HB&=-V=p$>LX~urK4B{spB2&KJT*&I~&cVK$(Jrd^p}!0Rjp8jxEpBb|%LXR) zLp5F6tpoiUgWgs0V?T$%ij%SUoO=f!wKllmmLE8oV6~~C^ODeYa|}+aJR;?Y*~|lZM57R^;8w|^)VMXzHB&4ZYYlv) zVxXypN2)DDDs^U!u_gv6|G25kVREe2p;u!Z#H;bj9qID&-sP$ZV+f`>-eFFI(`BQ_ zN9J-@;nm2_V;B9$-^pzxSNZp435!H`ztCK-hKkVUXG7Y!xshi=rsZ*=!Ts zj9w>|ADcfkmEKg6mZE(KYZw;M65sW!5^26_1LlQS+fVIlqg!RI0-I?@cyb?(UBw|DaV z8Rg5cDjQu#rW%@mr=^9|8fSK`=zAj5k@e+M52z1sScH*UaJ0X}h8Lz#?3%p7Ow=-z zVKa={!xap-xYStPcVo~jc~xU5tX(8sHcm~>y2xplVSDa-xJKyLFr|=Y9Jns`;BHQd zU)gxN5FsD#+a7o1Z+|%&52OnBJ%3_Ia->7v>K2~1C}YEFf+@c{QoZx$A!osbD59T{ zdPz^rLL!u;*+s^?u+>D5zk)aG)oYqI6PspUh40958G0atkhHHeQooFIjI-FEtQy5X zUo9#k{)p@}_gYhvd39IG{jXX8(vNV@#~7h?^GdQRiL~ZGjnXxA;`2;3#xCbyH4G@p zhUL;)g0I}6K0XY8f78^gB-{O!7OngL@lEDNY81W0&g;BLCFv)-Dd|y^uo=Xum>xAV zYWXl^=)oIaEM!ex7J9uDvIb>Qx)FD)gnAI4=Ap+ zj*Z=O-N}~+tAqlk#JFHZH?*Pr?AADk(5cbA=OcN;kak?N7K=I>N21=GT-_Salzt6fYn;?55YVCBCh*n5sELX>xh{7^ zDqLqW+gbe?K4i1&RBh?8OEPQ&<88-9BwJs88AIL(KE{Ya8WzDj$m|B4}zCp#k9*4#gy#lI!oj{>ZGS+SY!CteE4-Sfi}P=lXXRE*-mceXP=pWGO+=;j!fNv}f{4O+Ok z_QJ0p;*RI9oO!(k76*p3*W+ET3nRxR9rLShJA-p!#mP2HnXf0wyo&zRP)H8fMeU#sHUqzf=X7hLkluT8H zx<;%G*qkjfIksaZ+3g%!=F~7T#oYoZj%571z`YWA)c|Oj6|ep-?xpll9cA}4#kqSH z{Es%HDPTq=4f(&jRx(CicgyyKBB$Uqu*c`J3H2)?Qg+TVLCb&$Qfmz1@IVe74Iq!M z8bQb*c%C_IwZ;?khj|Zs4p2jj2d}#hna1 zgU8KKgCHsOw5z<^mzZ`P?zX7Z{%Eo6dtnSxX#U8HqfXauUh?=q=+F-VI$3GwbgYUF z@On{~Fx6S9!(H2rS66l}EQZ;nt(mwNf6n}9?1{n~77L#-4i#!#Q^-pGv%Wc>?Waa9 zJd@LwX807dMskaqp~djef_jx_Bg58%h^ag^a*o$Kp-IEH|E%RS8Eu~ovU(-yW)%;l zbl>-sbRzNHHmK-Y*RLxWg0@;dpHjm*m2X2Bq*eb={PA=oLQjt&^))t}=$5iO^6*S1 zzf~hsqh3fe@B_D4PxRLa7?G81eJu4x125YZVG7NC zEWZW0lK6YdE@`+6od=#eH{$k#f5BaZX8E% zyBK$_Y>6&EpgyQE{wi0|=)9vteyOW^l@mMO&GmrnB)Xey($1oPiSCbFQV`}0v=K^- z&#h|_YM&AL?QbJlVEaawCr4SgxU4@oPm;C*yLSG-Hd9bmGV;T^e|fBW*G|u=4Q|p~ z2>&CYAaF1W3^p$->r zq)^~CIcFzr5qQF3(n*;9$BG{C_sOt*3sd4HC4xxy@C!1tmp|?TfrFs4`Q`fRb_fMx zMBMNFov6LGn-JxAdA#WHY=^&X!d{aZEvjh~1F#A+KFXI#R#`k7HmgPLz(+@U@CSyt z2T5*6HR8gXm)Bj5+F+E|&LSAU+=WyAH39$ceq1dXr``9YI@qpeIE-2|x!l`&U|bF7 zuAQu%WiQ1PS{iJrmPO!0L|0+ls|8RJ2;mT6q5nSdAE8bu_n?hUrE zqMmXyL9D;mQhjR~5upr2iO4@T`S(_SXOBhy`FO+Nbma|G!jx2G{|H&Qr1R7sSMdL_ zy(f|?q7@fH_RrWNJ)i+_(YoD{t#982x=s04bs_i&WGykqEC-$NnYA=-B@VG+oti5mF z&eSFyQ*ChM>1KtI*=Jg4;OMBHqf@m~%J9gZl9G6=;^Agdr8T5qIV>WkYCAq|))D#S z)oDuO^Wi?ALs2DPM9Csv9NsQbYU)gmP*64&R11YvKi6BKdUizH z&!0ZC4(wc9^-BoKTB;4#LlkDtQA+xdP}8EuSQGqs|A%hT7vl5jHpXq=Bg%(6;s!R2 zoovKvzFKa1$X)dgva1}H zS0lM1)$Q+DWdd^E-x5kE+{S!%eS&Iav>jS%D1mhWr~rS^N)D=uY=e}*QtY{>2!U<# z_#1VQuNDUnpV%3WXhdX>Fso^ghUji_ew^#*&9h{5QSJ5rG4FcaSA99J3wVfgOda~AD#df>knbE{bL^Yb@0T3Ka^ zhHOW~9uQy0azRV?tjERd=Q2jd#`T*54tvv);GgK2n2_gL)1@ZD7Nj>0L5la|`hFE; z3IB5GNKRW@+irwSR6>GLFJWQg_>Wxl{1Z1apota z-}(n9lz?}alY=pi#ZT%TZ-4ipE#%k9wr(K(#_qbln!0*OV<35%#Z`qnXWbM88=l1j zU95v|ORT1SVEgk3EAWy;zN@C9XRfA))Gy0!Wms49nI~1=MYkIpa~)I;J4?|5j$7UV z9|zApx9uHO+ez=Gs1cDX;*ug-=UV{ix)0PvpXv5XQGxDEJ@n+03kJWvm!2wNeNIkf zIp3LC8hV+;ZVzGgOY zK-1-{QZU!VvlIrSp|)6E=w9%(DYO6*qtAAfJkXL3w6q)ntp1Wd>pt)(rf)<; zF#M}CAm;tn9o0pDDl7Rx^gx5>qu&RkPkP6>_1<_Q`GNLqqE8!&2XXHOH>Ome$MHBD z2Z-b`mgE$htTbR=81rmKV)~lqw*#6;K`Ucs&a3dqlRamq5uaCNMVe3in*Cy&~Oa;kz zu)d7gPO1dhJ{ZzM88|GyTEkn9D4L>ggt%Fp>3>1Rrj5+3fn$mYb<|!xzaFL5^h4H2 z$YzxLiP1td5@uIND4c95_L!5){&ue-4C{-Q8u`7%rChAzKu5LjPvM2Br>iJY{&M5e zdPC3ek(C{jx0{Z#n|$qGfwZ(kQ)wm-CUf>UwS8fD7hhT23qFV;6Sy`{-+RIgyg%yr z&A_4KZ=0XNubBxUi?XLCEgT;bII!37?4Y2?xrKk?#`f1}*)fKLud7l3LEKkfx%A86 zUa-e+wHK0~_?|AaZw?ro&n3*h%}A5xeS^s%e)J8cmy$STqU=)^(m8vt1Bh9*)3IHE zL-r+R)#S$fm71dec+&L4q^Vp9`K^0NZbZY1lo7K$gX-T`f~G7`X*>b~VICfr``UxR z-@F0>HY2#gkpuw)ep#0Tv$%Tt*Q9{KC&J?8C7(ZkuE{M5{!ZzdFSfX%VCI+Qmu14m z4(kMqG`->H&j8H|#~xdbsfC`by!`yhQW9ZvwjA~xBk6>_<@hooA`2;c2YCn>zL~O z>^G#Y^`<%GGPdHvdt*#@@`!AR{Kn_zo`QHYnF>`DYGQg#fzIPHlCnW;cG7gmbfI`K zYArg`&HZ?sl)`+i^k~aNsRmI}8MU4MHQg0OPS`u@7gNpoz2rMXtlQW_gZ1H#Q0h7Q zJIIBF%;93oT3ZfJi{WC5tgNh@*bChfpE(k)Ux&-xSG|i5QML<8sW-`{BX<|X|D3)S zy+41Q0&$p}&~&rksGsH%GNBm&WW|8L&tMOlm`GYQx&*EaN@w+0jo`kVxaE>5*eWLN zdbk1o=`PzZrX?R?m_%#Uv8N|$(bdp1=!KNMPd&lc_A6*_sq(c1gsyi`qKU(FvI^;v z_QiQYhy^Cm9x^yo0Dhc~Pph*KA-72XbQTEWxvHw6rKRG^NZD*D?*-J#NN9b%xSE#M zG?BogG^Lz%S;625@>Vof{f*<%jJQA#{kwzS{#WHj^1pXSBQavsvTKcJZiH}}nN+y^ z(q25GxGlIzV&5M1=^i)Cvs`Db+fn5~YVw1*dS7BIdwcqLd1HIgz*&b(`9jGO%SliB z1nzQ*%&z&S@o|c49hf-MWhL}oV$yZdCH?Dt*x4kFEykZ$&7gBPh4a(RcVQb-pEOIX z#8-w(I7Z1`BNXhb=DJn_j3AB0+A|;r$SWx5)`3Ntsxvb&HMO*~JgSrHd_B?8(ea2g z_sf^2nwpQB$k3#MzRpgi@0NvYYkRMGtfOa2R)9nMh?r9z=C{20D*5Qk9t`OOB~{JU zETP20!pgx5P0cXhC1P-$=^DdfES>4vugZ1XQ7^r5>w9~X8Kmo(@-g0Zj9-&3GhLZY zPLwszEt~l_)sEX`pR81E^JuR?-TiWHP~MJle1LEt(u0<8n`@ej?GjPE2Uk`w#Pu`{ zHSeqH*C4R(dw{<51e1)D3p}K^AmVfMHa9VZgYT%4sOFn$?h<`Y{`FUf_N3r(W%qz5 zSQjveK3Rraa%DGoLh<>o-oJ#QkTN`JTBn~AO17t|>A_q`w2f=u&|}HP2lKfp3~nU7 zr<^8LZM5&yb{OY){ds>q@`aw}eG}Lpen_1(@1rg-F_1+MoUJI694ykjpu?l~bt54X z)gx@U^CfT-3L}w6-#=>-;>foi9Nht>lRlZ72fL6Ve9u7hIwg!WhU{!GLo(IcoW0@l zG1n27%6;bn+0CZ5emc?tw83vxsP33SNmOg`AtTk>r zxD3sfysQK!06-Q_=2MXwN(<&RB)qfZ+~jSLQ}D}L$A;s_5S$Ljm;&ZjG1G;c1Xitx zlevwk((Bzet9H6cQ$=hz+rk-Bj5GmRlcUQJ+&DK|k)dRgcK0>jsAXL6qf;(bwtf7Q zrVw}JCEHVm-e2>}dH_pPC_0sOab5A?Yjvnw@6eQ960qg;l8@(O44!KAQ8PL$T2s5pd`dVS69hz*u-i?xr<4}lEejK{;g_v@ zPAT!}X=anx7~^EFoLWyjpmc3KpZb|Cns6cxpyalumXybjHkDu0ep%bXyG&|or-WZo zf|yit_lt1H*++KpQDXPYQ^nJd7?TUsRIumtZ%#*jR8!0sjSatbx9HR;vGp|L1>C_| z^C|xr9q2fAyeqiiw5KqdkjSnLea30qr-7EX>^C9zeHYLiVu0wdCvYv}{m7|E{Q@nY zan~RS+ybm-f8GZyWAL)&EQs%_Os!8g0xu#4EItv#4Wp$v^V+yF2~s~214F^xqUd2H zi<5(IS9pf^5PlU>7kI{GMmgbai!Efjp>B?!$+aWLcYCfskxNX!*9*n5tc$n+_&M z;ylPt;`r^*Fh_JW3BWffV2p(Pn+^put)qFb??<0#6DQGu)&D2o0f`QPQt)dK>{5u4 z_UNA@w$KPKDI3*ZL8t(d5P2h|Z1E`9tNaRvaQk1d3uxQi2U}?=En?Cr)5t3?r>UJY zxzv%IZ8)iNnDgcChprP+42*64pN=IE4vYD3raQ5mtiY|4iKA(9BCZZw@ZXI$+^DIO!>Tvan{+~@ zD|$D3k-gr6No~ca$1$#^&UPb{7Ix`Yi&^^7V~6A=_U2ISv3-ddAxIb+2Xrkz!W5UY zsQ}<$^vSNmPuJb2$7{zz(-UQO)4i&VIc1v3_z-k*CrT$0?|jnwW@AQDr^RelC}>Y( zj2G`J(X)5$WBc;jPT&gUUPt695VrEszpgm*9P(K}17J_gRKcJP4i6I3GZz5>H3bl{ zY4C-XU44VDW{;O(5^nq@+bw{iHShK2lv{0@%~HHi((D01Tf}CzmXYwohCc-7+5;;M z8bXsSP)5RIhjTK0T6v0hRL@x)8Qx!balGbQWdoT*1BPYC?_+})|K?_<(C)-5)|b8| z9kAbAZ?{^y660U}hc*Bsg<8l*PY|2c2}uP#^=3|AFxBxJo;mkZwfvG&pnK!I!`$bn zr1CWWWG(n`ugkS$CCUHC-`&S7R+jHP8Gq{?wrhK9CElz};)QS42BQm5aJ;cq z9_sRdC!yO3!BsMy2kO)4;~)DwN4%P&LL83;?3wFlN4T%Q6+%h8~Q z0Ac{&ALPKUaRamJA}(kwWBRzJcKvVD5!c@2#l80-@$r7iuO9^aN4gZOjM$zhZ9(^8 zdEZ&T+^;mhGtQA?{%JM#9)wEBs~<^SfAZ*(3!H82;o|BYe2BC8^@_tEuk?jr`^FZN zU_#xVe@}>n1Ag39h1Yhjn0-gE6(pNoCYS)*f9?0S`nmuQ0cj%() z)kE{ZLF4C7p?lgM#{u}`9BZTah@C)`>(%Ii0@jKLFw@3A7M)VCMq4<2v*E6v^O(SR*HvpuJsnn(@-Pb19bV(zwhev)2!&r3>9;eRl?LG++r0?; zLBS0!eSU@^V%&!_?a-ZV_+-L6RtW5h&}0yje@DqZ30gLb3(t@*BZSbA{IT6o_BT9N zN52vZ5prW=0d0Lz9vl#jyr1KUaLZQi##z30?O|eRqV{(*PLjobP^ipU|q12y#*2dPV&8*VBA^{Y?bG$aeQFq zf4xA#b_4QFbTWtyjz-0a$Ma#V+T{;mjCEv+M!LEpH}LSZxH0K3jfW;B`L3x|*4B!u zy?F6<1os8lO2Dg=pCY;}M{pBwqECHTYK-^z;sd}_Ko7lx`@gc4C_L;=v%AfCYTQq?*aM1|k z+xMcP>A^y?&gFMh=x%z~6Rr~3UxZe5dLoOLZ$f04Ym7@k<~7~me>W%g1DHzcZDQio z9@7$wD>u!Ij3fX|I=#QW_?aSXO-@;#+QNXDURY7V%)!CI&d>i4{PW?a^e$7z7qymAuGs3JJN6CEz2|JK z2LuEd*xEh=<4=!PIOW8;0b0}O95!M0I%~{|4IfC`nx1SaOitAMPBX}uR%b4^EQ07v9^N9NtJ_34`A}| zlarHm8`ag+g28(R$6rDfNf*G+AjPkafiP;LQ-&2EB9oyljLU@`;y!-J=BG4D*u^_T0O$s1V^^NcVvOhS4)O$hoAI>Y^<3&& zn_)6$l}$s}xph;*k}|O27!8j(IH;7Bl|TIA1@UZgQpB@`$P-VB#R5m6R~B*JP4jA{ zXH%z(@ma%p$pkDhScd63x+AVHR;w*V2r$bqraJN40aOXLs(bg;sT!#em@c^U=4-F zY?YT}%-?dXQ(#svM?PV?PeH;d5Jc6M+$D7Ce zyT;gFu<;*P;h_3XV|mGg!|ZPDkGnX(C?o(1=rJ$dP&-KoW0|8i=U>_`?pl#}RZ{Ls>qO@^(2%~9 z#&Zby-qesMu(r( zv>Dr!9gRPJ4aXYeHzjYVQk{dy92F4}KgEFytE0`NnH;kG3v8|W&<~#R$Nn)RxHxdO zp`TLVuxSG_;Ja+^z-*;*`aaM>d1utqs>zj^9o{g6&|wTun<` zs5O2x?6DNu@BCuR1U0wAwu$5CwT6?(X{fbHa{Ho+sRRBM4j@7kvjFNq-O0zV0yD)T>in2q7SzPn#BN($)M(Ubyzmw4B!O`+|5h8QVq$uk!8hYaL zsW_*o3Oa$(^+7fjsVMJWm*_Y+z*>2SWd&RXy&T&j>^4e_#D_5n6h$f_%q1GjqeIMMq%hKK(`X8u!706FozoyAWw~#lzhH@`LsINZCdM9W)+q zgD5o{eSQs&t#cMxuJVYWu&f$EO zrk&ys9N>;R(MeXc>l@^0-NV8}q2S(Ob6`#x{qIYF^$eCuC)JrZ&a<$u2zq8N*F}C_ z|jIoLdsph5Ji>z>>wNQI(L)17pQ?!)ZWsX`Pvx|HEP2{bVfSe4cPq6Xl? z?HW1^V~FcUa{2Z^k=4B0=!506jFYRc^x=uiCVWGu=p@os-~;vvxrDU*laJkav>4!z Nl(@WD&XboP{||(CiMId% literal 0 HcmV?d00001 diff --git a/docs/sections/images/bbs-ep-pnf-relocation.png b/docs/sections/images/bbs-ep-pnf-relocation.png new file mode 100644 index 0000000000000000000000000000000000000000..76e0f72a487776bc53c8fb7e3d3f52018e2c56ff GIT binary patch literal 36978 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
?NqAGTpy2v03v(uOeqWb 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 TqiK!@{!>y=lP{3H|KxuGfoL6m literal 0 HcmV?d00001 diff --git a/docs/sections/services/bbs-event-processor/development_info.rst b/docs/sections/services/bbs-event-processor/development_info.rst new file mode 100644 index 00000000..4f4b4b1b --- /dev/null +++ b/docs/sections/services/bbs-event-processor/development_info.rst @@ -0,0 +1,30 @@ +Compiling BBS-EP +================ + +BBS-ep is a sub-project of dcaegen2/services (inside components directory). +To build just the BBS-ep component, run the following maven command from within **components/bbs-event-processor** directory +`mvn clean install` + + +API Endpoints +============= + +Running with dev-mode of BBS-EP + - Heartbeat: **GET http://:8100/heartbeat** + - Start Polling for events: **POST http://:8100/start-tasks** + - Stop Polling for events: **POST http://:8100/cancel-tasks** + - Execute just one polling for PNF re-registration internal events: **POST http://:8100/poll-reregistration-events** + - Execute just one polling for CPE authentication events: **POST http://:8100/poll-cpe-authentication-events** + - Change application logging level: **POST http://:8100/logging/{level}** + +More detailed API specifications can be found in :doc:`../../apis/swagger-bbs-event-processor`. + +Maven GroupId: +============== + +org.onap.dcaegen2.services.components + +Maven Parent ArtifactId: +======================== + +org.onap.oparen:oparent:1.2.3 \ No newline at end of file diff --git a/docs/sections/services/bbs-event-processor/functionality.rst b/docs/sections/services/bbs-event-processor/functionality.rst new file mode 100644 index 00000000..8ddf18d2 --- /dev/null +++ b/docs/sections/services/bbs-event-processor/functionality.rst @@ -0,0 +1,13 @@ +Functionality +============= + +PNF re-registration processing logic + +.. image:: ../../images/bbs-ep-pnf-relocation.png + +CPE authentication processing logic + +.. image:: ../../images/bbs-ep-cpe-authentication.png + +For more details about the exact flows and where BBS-EP fits in the overall BBS use case flows, visit +* https://wiki.onap.org/display/DW/BBS+Notifications \ No newline at end of file diff --git a/docs/sections/services/bbs-event-processor/index.rst b/docs/sections/services/bbs-event-processor/index.rst new file mode 100644 index 00000000..6d54474d --- /dev/null +++ b/docs/sections/services/bbs-event-processor/index.rst @@ -0,0 +1,36 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +===================================== +BBS-EP (BBS use case event processor) +===================================== + +:Date: 2019-04-11 + +.. contents:: + :depth: 3 +.. + +Overview +======== + +BBE-ep is responsible for handling two types of events for the BBS use case. + +First are PNF re-registration internal events published by PRH. BBS-ep must process these internal events to understand if they +actually constitute ONT(CPE) relocation events. In the relocation case, it publishes an event towards unauthenticated.DCAE_CL_OUTPUT +DMaaP topic to trigger further Policy actions related to BBS use case. + +Second type of events are CPE authentication events originally published by the Edge SDN M&C component of BBS use case architecture. +Through RestConf-Collector or VES-Collector, these events are consumed by BBS-ep and they are forwared towards unauthenticated.DCAE_CL_OUTPUT +DMaaP topic to trigger further Policy actions related to BBS use case. + +BBE-ep periodically polls for the two events. Polling interval is configurable and can be changed dynamically from Consul. Its implementation +is based on Reactive Streams (Reactor library), so it is fully asynchronous and non-blocking. + + +.. toctree:: + :maxdepth: 1 + + ./installation + ./functionality + ./development_info diff --git a/docs/sections/services/bbs-event-processor/installation.rst b/docs/sections/services/bbs-event-processor/installation.rst new file mode 100644 index 00000000..5c00c0d3 --- /dev/null +++ b/docs/sections/services/bbs-event-processor/installation.rst @@ -0,0 +1,64 @@ +Installation +============ + +BBS-ep is delivered as a Spring-Boot application ready to be deployed in Docker (via docker-compose). + +The following docker-compose-yaml file shows a default configuration. The file can be run using `docker compose up` command: + +.. code-block:: yaml + +version: '3' +services: + bbs-event-processor: + image: onap/org.onap.dcaegen2.services.components.bbs-event-processor:latest + container_name: bbs-event-processor + hostname: bbs-event-processor + ports: + - 32100:8100 + environment: + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPHOSTNAME: 10.133.115.190 + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPPORTNUMBER: 30227 + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPTOPICNAME: /events/unauthenticated.PNF_UPDATE + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_CONSUMERGROUP: foo + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_CONSUMERID: bar + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPHOSTNAME: 10.133.115.190 + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPPORTNUMBER: 30227 + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPTOPICNAME: /events/unauthenticated.CPE_AUTHENTICATION + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_CONSUMERGROUP: foo + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_CONSUMERID: bar + CONFIGS_DMAAP_PRODUCER_DMAAPHOSTNAME: 10.133.115.190 + CONFIGS_DMAAP_PRODUCER_DMAAPPORTNUMBER: 30227 + CONFIGS_DMAAP_PRODUCER_DMAAPTOPICNAME: /events/unauthenticated.DCAE_CL_OUTPUT + CONFIGS_AAI_CLIENT_AAIHOST: 10.133.115.190 + CONFIGS_AAI_CLIENT_AAIPORT: 30233 + CONFIGS_APPLICATION_PIPELINESPOLLINGINTERVALSEC: 30 + CONFIGS_APPLICATION_PIPELINESTIMEOUTSEC: 15 + CONFIGS_APPLICATION_RE-REGISTRATION_POLICYSCOPE: policyScope + CONFIGS_APPLICATION_RE-REGISTRATION_CLCONTROLNAME: controName + CONFIGS_APPLICATION_CPE-AUTHENTICATION_POLICYSCOPE: policyScope + CONFIGS_APPLICATION_CPE-AUTHENTICATION_CLCONTROLNAME: controlName + LOGGING_LEVEL_ORG_ONAP_BBS: TRACE + +For Dublin release, it will be a DCAE component that can dynamically be deployed via Cloudify blueprint installation. +Steps to deploy are shown below + +- Transfer blueprint component file in DCAE bootstrap POD under /blueprints directory. Blueprint can be found in + https://gerrit.onap.org/r/gitweb?p=dcaegen2/services.git;a=blob_plain;f=components/bbs-event-processor/dpo/blueprints/k8s-bbs-event-processor.yaml-template;hb=refs/heads/master +- Transfer blueprint component inputs file in DCAE bootstrap POD under / directory. Blueprint inputs file can be found in + https://gerrit.onap.org/r/gitweb?p=dcaegen2/services.git;a=blob_plain;f=components/bbs-event-processor/dpo/blueprints/bbs-event-processor-input.yaml;h=36e69cf64bee3b46ee2e1b95f1a16380b7046482;hb=refs/heads/master +- Enter the Bootstrap POD +- Validate blueprint + cfy blueprints validate /blueprints/k8s-bbs-event-processor.yaml-template +- Upload validated blueprint + cfy blueprints upload -b bbs-ep /blueprints/k8s-bbs-event-processor.yaml-template +- Create deployment + cfy deployments create -b bbs-ep -i /bbs-event-processor-input.yaml bbs-ep +- Deploy blueprint + cfy executions start -d bbs-ep install + +To undeploy BBS-ep, steps are shown below + +- Validate blueprint by running command + cfy uninstall bbs-ep +- Validate blueprint by running command + cfy blueprints delete bbs-ep \ No newline at end of file diff --git a/docs/sections/services/serviceindex.rst b/docs/sections/services/serviceindex.rst index 7c87f5c4..268c91bb 100644 --- a/docs/sections/services/serviceindex.rst +++ b/docs/sections/services/serviceindex.rst @@ -17,4 +17,5 @@ Service components under DCAE ./prh/index.rst ./dfc/index.rst ./heartbeat-ms/index.rst - ./pm-mapper/index.rst \ No newline at end of file + ./pm-mapper/index.rst + ./bbs-event-processor/index.rst -- 2.16.6