From 53faba3907a4e60218a4e46f27215547b87aad8e Mon Sep 17 00:00:00 2001 From: junhuih Date: Fri, 18 Aug 2017 16:42:54 -0700 Subject: [PATCH 1/6] rebuild layout --- .gitignore | 1 + README.md | 9 +- doc/logo.jpg | Bin 0 -> 68617 bytes doc/test.java | 45 + doc/test.js | 5035 +++++++++++++++++ docker/app/start.sh | 2 +- pom.xml | 6 +- .../{kmonitor => kmanager}/KafkaMonitor.java | 4 +- .../alert/DaemonThreadFactory.java | 2 +- .../alert/KafkaNodeListener.java | 4 +- .../alert/TaskContent.java | 2 +- .../alert/TaskHandler.java | 12 +- .../alert/TaskManager.java | 4 +- .../alert/WorkerThreadFactory.java | 2 +- .../common/ChainedComparator.java | 2 +- .../common/Constants.java | 2 +- .../config/AppConfig.java | 26 +- .../config/DataSourceConfig.java | 2 +- .../config/ElasticsearchConfig.java | 2 +- .../config/MailServerConfig.java | 2 +- .../config/ZookeeperConfig.java | 2 +- .../controller/AlertController.java | 12 +- .../controller/ClusterController.java | 26 + .../controller/GroupController.java | 29 +- .../controller/JMXMetricController.java | 132 + .../controller/QueryController.java | 10 +- .../controller/SettingController.java | 8 +- .../controller/TopicController.java | 12 +- .../filter/IsSystemReadyFilter.java | 6 +- .../core/OffsetGetter.java | 18 +- .../core/ZKOffsetGetter.java | 10 +- .../core/db/ElasticsearchOffsetDB.java | 31 +- .../core/db/OffsetDB.java | 8 +- .../email/EmailSender.java | 4 +- .../email/Template.java | 2 +- .../initialize/GenerateKafkaInfoTask.java | 4 +- .../initialize/Initializer.java | 6 +- .../initialize/SystemManager.java | 141 +- .../jmx/FormatedMeterMetric.java | 4 +- .../jmx/JMXExecutor.java | 2 +- .../{kmonitor => kmanager}/jmx/KafkaJMX.java | 2 +- .../jmx/KafkaMetrics.java | 6 +- .../jmx/MeterMetric.java | 12 +- .../jmx/MetricDataCollector.java | 2 +- .../jmx/ObjectNameHolder.java | 2 +- .../jmx/ObjectNameManager.java | 14 +- .../jmx/metrics/MetricType1.java | 2 +- .../jmx/metrics/MetricType2.java | 2 +- .../jmx/metrics/MetricType3.java | 2 +- .../jmx/metrics/MetricType4.java | 2 +- .../jmx/metrics/OperatingSystem.java | 2 +- .../model/BrokerInfo.java | 33 +- .../model/ConsumerDetail.java | 2 +- .../model/ElasticsearchAssistEntity.java | 54 + .../model/KafkaInfo.java | 2 +- .../{kmonitor => kmanager}/model/Node.java | 2 +- .../model/OffsetHistory.java | 2 +- .../model/OffsetHistoryQueryParams.java | 2 +- .../model/OffsetInfo.java | 2 +- .../model/OffsetPoints.java | 2 +- .../chickling/kmanager/model/OffsetStat.java | 62 + .../model/TopicAndConsumersDetails.java | 2 +- .../model/TopicDetails.java | 2 +- .../model/ZkDataAndStat.java | 2 +- .../utils/CommonUtils.java | 4 +- .../utils/MetricUtils.java | 2 +- .../{kmonitor => kmanager}/utils/ZKUtils.java | 36 +- .../utils/elasticsearch/Ielasticsearch.java | 6 +- .../javaapi/ElasticsearchJavaUtil.java | 12 +- .../restapi/ElasticsearchRESTUtil.java | 261 +- .../restapi/ScrollSearchTemplate.java | 141 + .../controller/ClusterController.java | 22 - .../controller/JMXMetricController.java | 241 - .../kmonitor/model/GroupTopicPartition.java | 44 - .../model/MessageValueStructAndVersion.java | 47 - .../kmonitor/model/TopicAndGroup.java | 32 - .../restapi/ScrollSearchTemplate.java | 46 - src/main/resources/static/chart.html | 145 + src/main/resources/static/chartTopic.html | 222 + src/main/resources/static/images/logo.ico | Bin 0 -> 167562 bytes src/main/resources/static/images/logo.jpg | Bin 0 -> 68617 bytes src/main/resources/static/images/logo2.ico | Bin 0 -> 163297 bytes src/main/resources/static/images/logo2.jpg | Bin 0 -> 23249 bytes src/main/resources/static/images/logo3.png | Bin 0 -> 36562 bytes src/main/resources/static/index.html | 51 +- src/main/resources/static/scripts/app.js | 285 +- .../resources/static/scripts/controllers.js | 859 ++- .../resources/static/scripts/directives.js | 2 +- src/main/resources/static/style.css | 14 +- .../static/views/activetopics-viz.html | 6 +- src/main/resources/static/views/alerts.html | 2 +- src/main/resources/static/views/broker.html | 4 +- .../resources/static/views/cluster-viz.html | 202 +- src/main/resources/static/views/group.html | 6 +- .../resources/static/views/grouplist.html | 4 +- src/main/resources/static/views/setting.html | 62 +- .../static/views/topic-consumers.html | 104 +- .../resources/static/views/topic-detail.html | 97 - src/main/resources/static/views/topic.html | 59 +- .../resources/static/views/topiclist.html | 4 +- .../test/CollectionTest.java | 4 +- .../test/DateFormatTests.java | 2 +- .../test/EsSearchTest.java | 4 +- .../{kmonitor => kmanager}/test/JMXTest.java | 21 +- .../{kmonitor => kmanager}/test/JSONTest.java | 2 +- .../test/ObjectNameManagerTest.java | 8 +- .../test/SaveJMXMetricsToES.java | 21 +- .../test/ScheduleTest.java | 2 +- 108 files changed, 7100 insertions(+), 1834 deletions(-) create mode 100644 doc/logo.jpg create mode 100644 doc/test.java create mode 100644 doc/test.js rename src/main/java/com/chickling/{kmonitor => kmanager}/KafkaMonitor.java (83%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/DaemonThreadFactory.java (92%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/KafkaNodeListener.java (92%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/TaskContent.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/TaskHandler.java (91%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/TaskManager.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/alert/WorkerThreadFactory.java (94%) rename src/main/java/com/chickling/{kmonitor => kmanager}/common/ChainedComparator.java (93%) rename src/main/java/com/chickling/{kmonitor => kmanager}/common/Constants.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/config/AppConfig.java (91%) rename src/main/java/com/chickling/{kmonitor => kmanager}/config/DataSourceConfig.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/config/ElasticsearchConfig.java (95%) rename src/main/java/com/chickling/{kmonitor => kmanager}/config/MailServerConfig.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/config/ZookeeperConfig.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/AlertController.java (81%) create mode 100644 src/main/java/com/chickling/kmanager/controller/ClusterController.java rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/GroupController.java (55%) create mode 100644 src/main/java/com/chickling/kmanager/controller/JMXMetricController.java rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/QueryController.java (74%) rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/SettingController.java (85%) rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/TopicController.java (86%) rename src/main/java/com/chickling/{kmonitor => kmanager}/controller/filter/IsSystemReadyFilter.java (88%) rename src/main/java/com/chickling/{kmonitor => kmanager}/core/OffsetGetter.java (95%) rename src/main/java/com/chickling/{kmonitor => kmanager}/core/ZKOffsetGetter.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/core/db/ElasticsearchOffsetDB.java (77%) rename src/main/java/com/chickling/{kmonitor => kmanager}/core/db/OffsetDB.java (65%) rename src/main/java/com/chickling/{kmonitor => kmanager}/email/EmailSender.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/email/Template.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/initialize/GenerateKafkaInfoTask.java (91%) rename src/main/java/com/chickling/{kmonitor => kmanager}/initialize/Initializer.java (89%) rename src/main/java/com/chickling/{kmonitor => kmanager}/initialize/SystemManager.java (57%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/FormatedMeterMetric.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/JMXExecutor.java (85%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/KafkaJMX.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/KafkaMetrics.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/MeterMetric.java (85%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/MetricDataCollector.java (72%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/ObjectNameHolder.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/ObjectNameManager.java (94%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/metrics/MetricType1.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/metrics/MetricType2.java (92%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/metrics/MetricType3.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/metrics/MetricType4.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/jmx/metrics/OperatingSystem.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/BrokerInfo.java (57%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/ConsumerDetail.java (90%) create mode 100644 src/main/java/com/chickling/kmanager/model/ElasticsearchAssistEntity.java rename src/main/java/com/chickling/{kmonitor => kmanager}/model/KafkaInfo.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/Node.java (94%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/OffsetHistory.java (95%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/OffsetHistoryQueryParams.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/OffsetInfo.java (98%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/OffsetPoints.java (97%) create mode 100644 src/main/java/com/chickling/kmanager/model/OffsetStat.java rename src/main/java/com/chickling/{kmonitor => kmanager}/model/TopicAndConsumersDetails.java (95%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/TopicDetails.java (91%) rename src/main/java/com/chickling/{kmonitor => kmanager}/model/ZkDataAndStat.java (94%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/CommonUtils.java (94%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/MetricUtils.java (96%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/ZKUtils.java (87%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/elasticsearch/Ielasticsearch.java (73%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java (97%) rename src/main/java/com/chickling/{kmonitor => kmanager}/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java (53%) create mode 100644 src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ScrollSearchTemplate.java delete mode 100644 src/main/java/com/chickling/kmonitor/controller/ClusterController.java delete mode 100644 src/main/java/com/chickling/kmonitor/controller/JMXMetricController.java delete mode 100644 src/main/java/com/chickling/kmonitor/model/GroupTopicPartition.java delete mode 100644 src/main/java/com/chickling/kmonitor/model/MessageValueStructAndVersion.java delete mode 100644 src/main/java/com/chickling/kmonitor/model/TopicAndGroup.java delete mode 100644 src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ScrollSearchTemplate.java create mode 100644 src/main/resources/static/chart.html create mode 100644 src/main/resources/static/chartTopic.html create mode 100644 src/main/resources/static/images/logo.ico create mode 100644 src/main/resources/static/images/logo.jpg create mode 100644 src/main/resources/static/images/logo2.ico create mode 100644 src/main/resources/static/images/logo2.jpg create mode 100644 src/main/resources/static/images/logo3.png delete mode 100644 src/main/resources/static/views/topic-detail.html rename src/test/java/com/chickling/{kmonitor => kmanager}/test/CollectionTest.java (92%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/DateFormatTests.java (91%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/EsSearchTest.java (92%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/JMXTest.java (93%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/JSONTest.java (96%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/ObjectNameManagerTest.java (72%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/SaveJMXMetricsToES.java (88%) rename src/test/java/com/chickling/{kmonitor => kmanager}/test/ScheduleTest.java (94%) diff --git a/.gitignore b/.gitignore index 8dd908a..d44784c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +.vscode/ .classpath .springBeans .cache-main diff --git a/README.md b/README.md index de70cfe..57c8ba2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -# KMonitor +# KManager + +[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) +[![GitHub release](https://img.shields.io/github/release/chickling/kmanager.svg)](https://github.com/chickling/kmanager/wiki/Downloads) Tool for monitor kafka customer consumer based information, include near realtime offset/lag monitor. @@ -47,11 +50,11 @@ or download the official latest version jar file through `release` tab. Then, you can use below command to run: -`java -jar ChicklingKmonitor.jar` +`java -jar ChicklingKManager.jar` Or, give it a different port rather than default(8099): -`java -jar ChicklingKmonitor.jar --server.port=8080` +`java -jar ChicklingKManager.jar --server.port=8080` Extra setting will be set within setting page: diff --git a/doc/logo.jpg b/doc/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5f81d9200110054040458a886f1ef78bbdf3b60 GIT binary patch literal 68617 zcmb@t2|QH)zdt@D38AbZrb3dfvXwAxwj`-EA?8z(WnvOCS>{xVkc3c*$(}SOd)X#? zl4Q?_S){TIGnR2OGiQFM@BQ8H{XQQ5&%KX(|M!P;aK<^_%j@-gJ)f`FYlL5gbi}6P zHug4%HEY%&{(?UdLIy(58t-=nfpBz0>_#9E8{pUWBG$q`Nx+8+d?0MEdwT~4`{F_n z!coN0KllExKK?x9fAxSrHw)h*Hg8yKy(Uj&%?`xc&1*z9uMxH)kO;&Y(SLjPpMn4R zShH4So#=Y84dN1#@E=rdLabdQBC>X!h^Xkgb?~cE@au?mn?+@}?>)R;&iSI)jv)Dc zx07==XdEePQaIhq)-<|w{f@YVqS6*+6|J4xyL5INo0yvIKVW|Jn6-_qo&E7MXI;*r z&%3&LUG~1>ZM-wFV*b&n5fY zd2NR0wRYV)k#%B!=Cx*R*q@1SUMISJ?|Rw8&SDpX_Z41!jq6BxwC zHmPp|GdS1|f-LCAUTLlda2)N#$Y7?FVT<~fUj2=6>#k3m50wS`UA*e^HeJ>I{P*V$ zVPVFK>7DwYdXEVa$>SPAM0A`GK~J<&7@Vtgbm9(vDJ5V1s#k#zrmwK%Ce*ff_VB~O z=w{T0(C+oW@sqEsbnk7w{NRBQu@hk55Mu>%beSmDa3R#`Nb*-iiU|=uC=tAoTNOKB zC)B%ehA2zei4W{)qf#DJ>9<`RF1=cBSb~pe3D=yhaQBrAV5&y#A03}j-^O!VAbHwo z?9DPSFFL--U#jih;=!thl%R4a$1zrvp;xZ_nfU8C4;NBRw~^o+im90d?id!R;~;De z3nN5)Hb?^FG@uPtLWJ!zAtIB-Lkkg$3FL*M+&9obE1-qsuLt;V$QRWYc*DPu(`7=$ zW=)_;k@9O1SoEOy3lUII=vTZpB)v(9xMLo9Xej54vEeALiL2CK>7NRYGI}~>VlsC> zMPB+nt_dcwJDRiAYEIouE;X@B*A#p&(D+@#&-#_eJF|I6K48j3h^V1_u)G`5HIMlY zyfuvBJ1}~b@qi7-=dOuBu8p9`QGe$58jNUdR2{q;+9NYlYm*~!;j4eGX+=R#Xpw(r z0INREvS2yw6Srnht;5FB2U}Rf>?|Q-{Vl=}O%}%w=2=6nRH*9Z3})j}Ppl93E*Mov z6O_);np6g3A6V$p0oAX*HP`LF_|@VPP>g--A0?(SYe%a~^88iWi5tz(tNdZgSYpJM z@Q)3<296KcVk7JiT1JF=+FDF>YOAq^M(+^-!T^Ttf&{h6vtCR|@&-a5rpl=W6WeI= zrmCu8AX5D5>dM3Vs6scIP3qUKS9m4H=LF`w;#BVHxZT|Abe>I3M4i3t+}P#n(8m-= zB8ztdtl=Jn7dQeM#8l#Lod^OK8N)3)9k=JT`cIOjQzwv0GvTP)7KWugg|jKTZ;hpb zTe&LVIG#4EVQGJ{iZ%RZuFHU{_~=%Z`S|5ApEmVfL!nNa@u{tD1>73)%<9|yjVr!6>7{gO)K#coy|S0_{NjeL$;3n8M_9?7;QuUgRf!#FBMh(uw8H#BHsH55nUo*ZR;DC zAzPjfp$lL;Bfq9{2h&%(xSoQ1NF~yJXsO#WG|IL)+@>fr51j6>H%K-u38Nb-xcXWd z)%5SkJ|8e=A|9euQT;Ac5*wGB?VATwl<obS?A2?HhJLbwXUDm|(jgDj`Mx=val`TPAI%HQaVIWTkO}Eh zI*23vbfpfRt7wPR39}}rdw|0CenrUy?|vdv`*w(-QbYWxN5$AEDG$5;+u@M;piN0# zPcyAAMQv2qXPzC%&D-zFtC{p$Mh_Yf)h!KtEUc z$Q*vi*JAfG=I>pFXiO&+@Mo(ECdOiKuA8##hRK0Y(xo4L&0l+h^h~SEI`^l~&H3u< zr?@}OjpMx%BK9YN2SvE=z%&k$JJSzbE*z?ol!+E1Du}o1l}T>kY5Cgn{?MK{l$?c` z50iyycS~o!nHe_qR2rV=nM|n#PM51cT4H~vvU0N!aX$q`PrxkQr2H2GY5GiHsvd^k*vEH78WF+0QI2ib1QR9MtvYtJ!^SJFIdS?Fr1-1zhv4cQ> z5W)5pV+C+_3K1QsO3bVydB*Kw6}#sIcmwctilxGTK%HapHvK*rcJB{a=BIpxW_@!T*TAS$MCiBD7d(XHVYU!ag=VSJ<+c(mz)<$bAbLb+NPkI7 zKG@N=I-W##lANiSs?&_0lM=bWv5cv)Kqoh5O`bpKZ$}OP7CrUx_~ysiy$Pu`mrLP= zy_6cDH8?u2%yR~s&I0soN?FolPxqZwN|+h~I6) zzcK%NXxtjl(aJnmH(6wFo15~O*j;RmdZ)JgZa_)eDs>1pnDc*Up??#QDIc@rF@I}v zfBOX94A&jrgZoe`vHEq*5T<;ErOobVj@K0W&6G@A$@Q5WBq2M_ncIiNRk>5v;9qqe z=43TKm0xJV1-*30(a);-^u_&xqx_<^st}PF5RPu5CBQ+xaZTiDHnJVKo2@gzSK??e z$Z?fqMet~A=81W!p{$ZAC7s|6X)breYD1YNU#F=q)UKi#6_4&88O843zItA8?>yDL zd(j{~!)bDvZMw(4cObHL1$4*74ZOVOqCN+GT6wv5L{99fY@;4X< zq**G&atk$n?}EJ*9`WS8hz%9Kt9;=1pT( z-dSQhO`5Pj(zy5R2cFVrj&>^$V7bDyINMw5-hfpe`V{kYwjrA-9;WZ7xuT8aFDVDypWqb@JG2R zf>#6;z9olrk3^cwqdWKv*N0B9_6@BXXSaKtc~6lJ!6@Nt9F>L^Y(p>CP)+K_sCF4Q zX0$3^7r@wkcAo0fMk%B5;}h`_0hL_yx26`Vz4KdsQd*M?gn^tNOO#NOb9p)h>=r#VdS5Yxa&o!>R@V zGc;cs>geS*Wa97?7pjkT86bOS&Iu8xD0P|GlCG}ef^6o^%jvFaV^0>n_9ktd*kFD9 z`i0@N-=`bWjFFd3Rh5rV$cpdcnS1@-XB85k2=Dj5W#2u`a5|0 zM*xn7$vyuuz*ZI_7Fsa>m6G^RELQ$sD583^<>U%^0X5?A{|xp7Ss3OSb{G?8t+-nl z`Fb%9k)a(QiW249fmmjMZd>Cf&d$_>EwH>;wf=aaS^iO8w*f9Z_1P`inxE5aN$#*uH3J`I5^qD0tMyfo-vB9)2qhf!YW!}p^MIfTX!XI zsVWJZ8?XEJ!yiElS)=F^7;uMJJ8IOSEn7`cfx4`(INXj=;#<;7aO?OU;IY+$!VD6g z*V3r=HglpG_Ogw&dDJO%w%(Un^0L0RCtJWR_A+S5b@df#@w0kY)Kxe`Y3p9$%Z@@4 z7mGYEeEkMASyBR??yP#sNSg(`DT%cO&&;@+zDLbeTd^_D25p|ZToRxOE6~E z%laC+YwFy~>EPqC>E-r2pUq#X#Ff@Igk32s*;V3dT#f3Gfz)D!2+`d_ME*_a8xf2n zs>3n(R^H!VCUY%v%b<@%LIetC_qTEz>Y%g0LnQy83?$(qMA$6~-k~^hR+g}8UE{VY z!pFP!(9p%<*+#`k<31J3ONNrunQeD~%l_&{!;$v7p5V)08MWiLy#ro=funXqrIY3* zl%;3Z3cvaaRQ4q9*R`=+4rp-4mEfTDG5b%OsRR4*>THe5JQeg-O9{ zc=mTF>@&a!hH3MTKI1f!%1mNOGE^g`#O@JxL7xet9NRXcG@fjeVyo!(fNB`MH0ISt zkfrP;XB7X+-qpMGd)83a85{h{59d`v6Cz%FD?HQ|car<~eNx$G>bU91k{`)s+1=f9 z_T|}Y4X^uu^>A8XK6()b#^aPJb)ZHY+Tqhdf&SX{w^wxq4=*S0uuVtXO(eR0PqEo> zKVH(Pu1w<9EAcCr5QvmR~170$+RFK@!6RH$#?D|(NM)y?zUxT4i;h$`GrP|BhP5g~2FBT$tM&LEs)jvv^ zwEaB`w7h|TE5Ixzp+-|-mo%Dyr?^Mq=oxsYuL4chmF}vEPOgI6r~nUb$I7ExLpjCJ zMaj*R2I|-q*`;A)WQO$KmwONWEp?;e~vp?|(PL31))h?TK1ZhqX0oEmJ4zp+r zd0aWJHavbe{t-~X!M2=(a|MZ3>QDzw#5fDEdB)60r1;9*w~_^2C$`j^2nv+AjR|z8 zSkK**=niw*gDS^;s$iu~V5Ct1!(FxN;RI$_Z=0`1y%6Du5hIKd*(U)6XxrSlj!k5R z@%Bx5DzP!K#)ca}?D2#N+uQjGj$bSe7E*svO^K>qrS(Z_*+id!t4SIa~TuEo%JYQeYqtRtt8eW-V=Q@^jh|4m_IsSde8AGNp8fU=^vzc~HJd)=&~As%H1KE}b)bpLBdU@LP4~ zrKb7Jzk@Io`h*j>L*}0V3H*NnlJo~4g^2%)kc59Cr0#!#kUtdi;P9%x^_^0q z`mjmjdJcg#o>)9S6{fL&%JKpGxYhI$q2&wum)Yzh40U1fo}>}F(5D>PUfd7h*ozTc zlls(O;ll}J3%?h%qqu#a^a7X2TVUGg{!Ce7HboVvc=I56WAYxfhpzLz@WAKuK0cwf z*em2Hz@aqv!E=wHpMz#JwgV2-iOISd>=gtPR<5A>a^{dv47yB^4w+7;U;TBhJK*J1 zws>9t{0{B83$EXK)T+yb?z@OK4Ol3Z>KB%T`d|;Lh7B&=uToP%pJHP= z<=R<4g$Qrh4~Z3UO6L;xk74s`D2%TF`!spgmdNUanZ{Gjyb$q30`<37g$S>YyZ$3) zyx`9Nc7_hR{V#&Ucn4p#1776o;BELk3Px}=CS+LZwfZ$I9Zp}@(JzzinA@*g$Rm+@ zpkKamcq^O%F-celeHgItDFsu`HE^7J4MQ8&ejGi_9;;3!d3+2-15>8)<1uT~#9uw{ zd!EtKeK~FLS^3y#KnN?!KF!tMts( zKTLNFpKwgxF=+fDv_w0m-@VT}O*6(4b9g|su&ThM^~|W$k>;=8nk>{W8_u0YW9eisv3AEd>8R4-kB!5Frf*fIDeGp9O5mPW)p%NdW&nny2pU>Gg5Sly%zgM){53 zQ_vM?+#?y<53pxZpblD~(Zl@?Q?C=?iV*Qh6#2JTfwD!Q50R1fORu#`ENWk<_&DWL zOYTbAM3t5>;(QAxbeKiMBj zWB%Yl;&2K`bWcCo;A$X>o=vO%lt?KP82vC^1MJ-c3<6jylOF&kqi>PQ+2u@r6~F81bt4kqYMgy~@Wo z_OD;`u+m7B;Y&opYLkt5HB zIE>*Al~;d>Gz-YbqOWJU&{iFD$Sc-0@$OAs8wO}5z zC)NU;XRncI5(q=;jl40jDIIm!F3Msk(nc2&I_G_ENdgyC~&Uwnt$-J-b3 z>(?LTg%qe>T{RwhwMrt9Z=Bt|-*d=s$p?gK%-`}P`TvAIK^>3L+FTdZZQjNpVCQ3kq!` z6k|;~VoCM7-uUfAnAZFifhVH|%$mk!zgUPckP@I=b7r`ol_DD*Ym5@dV;$o1Q}oRa zv41?p=KZ2Z;&d%a)5Alvs%kABe(u_0@ToPmx7XvzReg(nDfcFI+%r#)jb2U}!7fHL zke>he+1Pbi-q||jkpiC!8ykT_FSFVX5C0-xldW{eO6NO2* z1+jF;wfkRJ_1ss=yqGEJ;nRwH?eBKuDV-$etfZp3@(62Q-4Fm=%t;jUgzlE`Cn@y# z8Qutro=043+-Xo0W!}%-$(9n3Qjhb&1;FPeQDTdk-ga^%Q9AtEP(zxfO# z5huo1(B__g#ze%OW&r;Hoh;R{8v{nW)o!>kN_`n4Dp;Out3=h4wc$O_0-BCD zt^=A3C|7Ws312YED{j{4K^%mg`(Bux#VP6^*fh3RsnQsW1y_^9m z#AeBQ!{<(cs?92&svE7q=z_9zV<<+79uk#z{*NQHQIxZi2#=6_j6;K2B|hnW zqcM9ZC*Tzbw0X)687`>-wgXouU0Gyf!5PPF>cSA-+d33q;AwkcD_YAM0YqTfwn*?G z09VuC62L*A>C~Jmx_2_A=Lj24@%a_GDGnJAJ?`-H5+Wp1tt%evEV!upd&f$L$_3q* zhf+NJ&6i2jHp7wv2yfd4DZ()z#@J8=)MzzFC0J-M6ZiGIvFGC=Q7_&7YYnOjFvoUQ zQu;$x4`@}_R%e@vYR20rf2>w>wFTvemwI6eC=FZVZ7WT9JB%WMJpM*-ew6z* zDTXE+DauKJ*#lU>u4$`9CRwS0D@WdN%%b@h8704}^yOMr)Qco~e1MB#;=4cmI_|LX z&cSEycQgCuwivv~lxO`yrj)76eYcp4pEWFv}mRQ)(?!qw46V4TE zV*JiB-jQDfV>VyW?Q>dquOQdssBOmS-esBPd=NV^FT+0v2GeEYtz^^PlO*`|Z1laz zD8|#D=lgE*Q4?wsEv;_G{hIrFWV?1gdpT;6Airo++NxQ;OWH>=K1Syn`Hvl7vd=nvJaD{gQy=spB z-3FTl4OmDa-$8P{04ZQO3hGyAdJ5E`I4z4Nc^v*ze(~@M91+%Ef;%wmD04l)%9JjM zBhMX$Ho`YQPX@-|O4@uMI_;Ja5m6vS1fiA&x~E}Eg)tQ9Aiv#{cgENS!RJGw_+gef zXN7^AeaA*Komgu)MXlWIO`tcsq`9^zq284=_Wa3fRO!u(;kSZf~SO00`(c-D$T{o~{ZhF(l()S~f-AKMd5hM}8iH0N!cxZglL`|z? zi2%ufQcY+vkQm?4tlTj_az7Y`3+ZsGi2r6bLTh#VF)(D|`f3M`GWauD0cyi~%VRQ@ z{vAEgSh`G%5V5II7oXAthmnnuGECZiPhHA3S1`DVpgtJsKss4?Ea8*mLEEbO+D)1% z?d9K$vFqHM(vNxiip1wqUQlk)*jHg&*PUo2;$9Wa&J^&s_s=oonM1fl$h6Nw&UmQb z#yg(wH{?g2F4KLn&f4+;S|j|*n!2PC6GPDG86?q`mxYLUWVvn9 zGO*tFVR6I+F~)f`(vJN>Z{fvdt1apCZs)68uNXPy9o=v*`sw98rn+ZddNOJB`8HDEq(`rq+BHQ7q8 z+cTB(yi;^?lU*i~l|9s4(xMSqK?pz}MS;8J;8YsrqMFAV+&u#zo^1R6E_Wud4k=YC%pDSTk z!fxozwN@DI?K0ZidF7J*pNM2J%u7OpxZ$K{z$cUdcCv3i)-o_n4}@|svo~Qxho$Rd zf7o$h?K;~oL|pC>oXSR!IW2Gk`VV!3J>3MZK?ATum-|33oe*ceF|8%g1|eeVD7i8U z^F68)28QZjQQ$d-uLet5o!ubp;aAMq!$Jg_#@dVdHHGFRGyaqN+I8ntWWLkR?X`4;l8?f*O$n&vG z8C5XVx$#}f95cWHGvL#hq7k%BM)O>p-i;e0lGW64d5N4u$f=|7qNYIu75rU-TUK(= zXLHjW%ZKlHj(p7GvP;cl!_j&XcIwI4^TSIsPi}u38urxW7~c75K)~#4^ZNd76uKCK zaJH6*4+0D?O|mF@#y{A434uyb2F-4S258VTZj)GifOiPral+Q#IBBgb&32=w+8YY> zQY8nOIIrladd#3p@09JU>1(m(?j%H%Eo@QnxS|P-aO%40oQ17Yo8eZPKd>IoO;IGV zem+cG-0AasImlMsQJY1>NG*2h#|4wB#&;gMqplpwE~``q$87Vo`TZm(+!99+kD@;Z z$~yRR6AW$!o5%G4bs2z2LE?*=f%w8(9UyWd(nv-IQB37!P5ksjNknmIA0Jmuf5r_KgjTnZKziyOK{ir9C z3*8GED))A5S#SS*d*<}?r4_S`(~hCRdKF!oiNF4Bwb1k;zJeqq^<8impyzw44_h2X z-U%U&@VJQ)2WW@DF*e1zyw8ny#_qD>IT*g{wJ%qPqY{>4v&QBMHh;x7+j~x#xO%LU zB`o(ILNX>{jV})S*$qM;jqNCtR7-hpNOfxVIX*C`HE1C>;i27K$40gGh(D#OIw|1I zT=(XBP(K`LdpT8czbZfitR|MYxnI~F3!bJ>J0J-Ly!=fdya}RCf>b`5eYC@zKrD*1 z`@$mg9oUAKS4gHg{<;pDm5mdYTgi(MrAKv>jM*RfBL9+sq>2S~rNAXaP-ngw8-+Uu^?=SiJ4YN_iFw^ASgkZ`ou_Vn zqJ=V3_jkd@vK9sr<`-9JA3rvFQ7ykoe5f!=`ngb98Q`{ZcyNgn?D&*brKaj!Hh9%w z$Bl<}hQ_=nrK~H7Ut(+@`Z^Cjjyb(%-R48c`EKh-7*5vB3-WddNR*2`BN%Qx@4CNv zMjPsmC!BzYD|P0>HZPw0>s&36_+nr1J5s%?_iOhG4_@+i0@HWdqBbu4;}m)l^w^wdI|$i+d+cl-;j;(bfvho{)!@OmH63kS zKaE1bK?Nx}j`iG<>YUJOwS^-c4G0n^oMNH9mF127OG3mJxT|)-fKfiAM>5f!@u?no z9qK6QQeOMEf4LiZ=1r!97uQn0KtXdtvp^}&(Zl4&lYYN3-yY`T5!iiAA!&E~g1$p5 zvBt19%ZrgRZmroU-3v+LeOjRX=}lM8rGJUEuH&rSuiQU(`IfOmxYd?&TMhBXRz_s1 z;L;z6FNcR}_?1S_h(`I4M`oJRAyE)RcaLc83wd1MFlacBTXq;(w#0f4SCLLekeu9y zs~S#D|KK?f;7TsAcsUN+Sabh9=@WTV|$5P{kh!EUYpC(hJ6y;LSi0*rpOGnbxr3KF##lh>e z52wrQYSAr3X{zzW?g!mLnobre=5bmnwkb|o)LT|B|CLgZ7x%;a{E>3W!wBx&zRiy1 zwz6-;;tG9{RZ7wG^{9y{y}XNR!)?I538xC8YrV_b{RSpIqSNDBZmFxxMM-cO33lEl z(353;GSDs@lJ67+YXSxn`2Xh4Byip&=jmxUwUO!*9=r0 zbc$0PYOC41J8mLR^U%E!`IqsgyN8!WFl`-tWs_phF5X7MAoW;kg&!AFrDuMRRK5Ny z*#vnnTk;Oqd)wuzR&(z=R`y$}leYXsQ7!-RU;jPr@n3ycfOJt++V4?HP!~{%X(x{S z>er-NO^w&52h=n^3ZW z#=c&AslQg|a;#EIebx2f^g~DU;TFFGr9HX3J8^kV7yZHjTxeTjbC=wP>&8Wnbvhn9 z3$P_KK68bYQI!qdIz7pCvpfQ_7_!S$k9`e3gPUp07-I%P#08Gn{ZL2L(Jz%AyN9r> zGv|jwv2U*$cN;pESKAvH8ZJwY-q+V-{gwFR?c2=#mu$jZP_xTC6~5jOBno{%mJ^!{ zWfL1Uz=J$fI0xWLE(P=3YuG$S>^;8LtE7En+2VVn@=uyI&&x&q8hKQVdPaHkldlR( zfptFw(S&V&6h*!Wov0e=0g@O~jCyu#k`UpG-0Vv*AK=TqY})fS)|H)o?*-nei6Gt= zX&tcd=uRRth~Zjqn^!NfYEV*SQR5iI^K-u4>?G5(J2CiV=dS4#ba*4Fk*ZlUYUtNU%fgd|{DIQId~SXeglMyD7xse?110_-#`fG<&bEHX@x0bHK(z`9g| zz>CNo&$xGoB2gQ2^;JDMVGsCz6F{t$+F;d&M=^~9k$dwaQ5>z(^kIoJjx`+567Ff$ zGj*@`nl#)~K3hdCkB=}NOXH`{e|c$}Z65{2&h5Mhb2~erNpqR3ew04axFgc@OUTW6 zuZjfbxjHts^%^L%QnBIm+~qe!XHIv)BR$QOh@N$$zc>A`@7t49voiC((Sq&N3O@u4 zW-7HLDT2WrgmoN3MgR$PZ&%+uq-SxMLEbc_l+ZW|ClBC0vu9FA`u^JBN-9b=D`{^v z-8PYeC4ATWa~b8Yx#Q|pAj5~FRd1c^ zJ6T~_nq|^QQ;YPi|GWD)4Xo_$sOXS#-RAxAx9#vV*oy zZPa{WmCmk?r)C9YLha~0s;m~?wljZHIwE|ybWUesBxIz4rc034G;pQ%7TCowYesHX zHjwtJUEm+w8O=>VIYjz4+KY+x#CSc}kSD>s?%6l8{udFnt~ zPzR(tV6l71OzBG0IUWO-NM4pvz^l6BX&b9e(JO=fi0FfE~oM3ho&VRNrAC}M8Wt+4uJmI9-F$ZUlH`?7u9zb{&)5IsZXl8pLFYLDPg)(6RikIxat>V>~!#wYjvzU;M?=_yFD#uS}8E|sv9_18p5&?B34fpoFti- z{V38hi7+MS&GuJdjAb9>&JI#a1xMm{k=7|dK>$09#?LRI#|oa%S}+0(P}v6L75r!7 z{ep4^5AH_TiZXITAv=j5vw-VJ_7y|^_XKDb*7}4LO3W(s9Yz0y`Q51`7@3CzS~t(j ztkhyw;M$eriE%P}azTjbOBQ@^wpLh*-2&^)HT*2tKIz2r$3#^MJu_UXBTDW#?C3C9 zl@r?>wcE_XHtPgkWX~|=?O~(ba)NRA8mb2U{`2{ZYpu7Z=9UBL9zcBtOMz|MjH)bp zpOipB)Q8~|dhRwFMp|)fZ&fAh?V!6KWvcCFwo4t~<*+S+v~$5B>hve2QwFmPtr%VY zL5e?RWV8cQj$x^CGPpP}x#)sl;~o$-F~13Kcqab4!OY9bx+yuw!5wgeOt5}6xzHrL zAi!8OCq*@XZg(gL z*jZrNEw1lsAZn%E=SwQ%iJGTo8rAA{U5-9o=6-Do8-*_?csaw8MU8im@P#N2_>=Fz z{X!5bQkrukYXXSD$nsI%Or#XH_G;(0J!3W-S8wDN!B-* zh}6U1o^7nixvP>`MQVRmJo``|=SVpgmkS$p52)S4S4`!uh4twpyp!VqVFTa$3*7Fj zz+$bZux*(hP!>ZbZdJPA`aF)i-}o7?s)}P-S##=hEg^^TtijQMm2xodMfpv_=Ud2< zfj>m=9D!6a5Idnsv^NL5|anH2YWzU{>~Mr;?X@1W->2&?YI>M2Lw^Lqu~xE5@tbn&JaGS%+=SXr!i%y zSf*8C@h>8Rpd|U0c&ct_?ox!tL^q+=+m&UZzz{ER7aWDb~pJ?#}2Y*NmT;S+4??HafKl4}Xtm|nw~_SEI+cP}THa{KiR3ij6fH{U`H zptxHE*>LZrx6Id{Tpz)6Qb11iGlp0bE*9E2RDbKX0sl-P{(4iSdogm?hL!1Tttj-V zDB?D3%FE*j?DR+2oBnvzKM%Uq&d77158JERjhIBx2jOuF5mNQac}*tmc}$!tKGuOf zo_O`qQLUDu(JJ?6zTWSAb04+%i8zE^@0uKK(Ytp_h|s50XYkbouqP}Ch^3*ZjfC#; zt(+QG)P$rqUg;dWzvvc0A;Y&PBRF6}KfD=ER}N{!M8+}7*{}B=Pk0t^EKc^&8i8*w zW-^v%4Ky*3?6bJ|MGQ4k?G32UGxbd}E-CC{$gCqL);mi*y|K_ZR>HS=2e(WIM@&8< zn-s;q)^9>|_>(elAB2cF3fmnA>dLg$J?kPXLgPTCO9{>D_XHdLa30!vNE*Dnc3cJ_ zBh_&whcwabwgK&zVsZ2O$I>;>p!L9}g2#K?v`uol6YNQ<%I}~7P9Vns8 zPb0t;-C=-z9u=M8hUYl7QP%JydP6uWQgY1s7L2q#_lcKk?E@%I%9Fe#ab|qop46oihaB8=@4q)&!*Md zDS~G25@^4u{Vvv>v#vziRp0ed2?Dq#kN!w0r?4nIZD>?|V{`{lKHq_hg~Nog+5N6C z93#tLj;Xe_D5b)>6m(meZQRkDEnev0hdkB4?RKe1+s3}fCd)4Wlzs}(PSjQ_J$%MQ zM>{5-qEhd5GXh{H!76)GJ%%HB;q8Fol>q}vrG+6zeI;QG28YU-yk(7U8%nFwrbvt+4&_Bou+o2hmF0Whyy!>h&oFlf|gHaG*aHlfJREtb!#Ew z2HXWhvG+VDBACk%z%jr7j9Cf)KqO@;AGi*y@Tl$Wf3&y)Ulw*a4EuQZQO|z984OMb z!2^sRwQt#z4^!DI+~@t3T{pGf1&D8T!z(e}N8LMa2jqVI*+S5&)788)#IvK+rt3PI z`;g}Y-_GC1$ncdpnD>o_pbtl>B@>;%7n`6-PmjxSfP2ebcI3*eh?dpK$5cXbA%^;i zwDpaLTaV_|4d3p@X?Q2Q+!6z~I%D2a*d8*VMn|h5s3pTX_;M=TC5FtD8S!Bj78K9G zVMD_~et1t?;nT$K;g%#h|1CPm2lZ-Od#Rs%_Ey&v2vXgu&$*VKmT7tQZ>gfA#|M`^ z#GEUJj4ho`^;Sihhra7ycHGVVd2--t;F*I4dh;aBm><-T&QU$t{DjmP1)?>A@P-fP z4)06?O=yabqxNz3&lb!mW+uB= z;l<>i?ePfSGwuWUo~HyFrRvphRHZG;k5j_*j=ST4?p-!i8k_P&rVn|HdslVD*6%kC zko_@M^Jbw`PwS90Vr`=`oE7_%8T)g*EApepl)XIfXYQCdUi8X8Bfa*oKXt`nv79@^@#hb8}$XS zD89IdB2Hit=kx4_{CE8(0VhA0#ac)hXry>!0a4%7wj!rVyE3N|`*_10V-C_;L5kv{y z)vIPKL!OJ@Oi(C<#Cy!7qf zsmn=%r2ni`=5mkRbfdWd-fDW5m5DhzTCW>!E3h(w`qfqHQY_uu(7O%vOnTNv?i|$r zj(GzHgxPzO!Ove4#xC{+ppIrr?fEu_0X78pSPm>+_|~o8*4k%&J8xOh1vMyoKC0S@FK^VbLfnM%hdc1KIQ{jDrU~>q_otPZ zSoKX6DRbDbl@tkZXS;Ww@ytQ{pN~enEW$Fg`_`@AojfWN^YY*7xc^?ywG5*tbj*Q|5@F7`ry2UAzKxaxaaLx;IyZ*Hv~l`H-~%K7IvZLSOF+TAl{};xpHj! zKF-3M@nJ5Ypf(drLfiD~%Q}=nQIAiF@uoqzfkpvlYyW7VLAHi#C)96eM(yi&g&Sz< z4-~s$Rn%+pX~!zu{8c=QF6wbJsxvn4!T-2}KC;i~(V<^6`~-l0A7Eb->%f3oMTsHg z7}Tb~P)Y(&mJt{FL@a@zGVbYk^EKbhELAfsdmrdxGVq`_YOGc+=oRQ55^mEVd*D2) z%H+;8Wv~N&3w_UBpi+ovMvCx5L8XZ(RVK1|{(h!@bsYnc`xT~RSv6QW!y9#f*|hlD z#KSyDE4`#(EFWDPx+Lc|X1%p6`H*^xwfw0y7zPD1cNjiVoK z-ReD{>?dDN268Te7jhA9!&VifqLz=~*HSv9DPI>MaoEIm4Z`RE7m`O3p-$pzj>Q`1 zG(eUNY6uYp(r}mol2^3g4zrO@3Vc{oG<_zrj{^^A)k(Jr@`M4P!uFnt(|wu(VePNl zKl>EQrW~$`nQ5~!1YL^9?3oUhUQN{p`&K+TVt1+-uN2uaS!#1-O#OpxX8V5K=$m#k z_p7BWhg$o%J;t6%J3vc6HyD`dS4fTuq&PlxPEBwOLA6#K0b$o@g)9;nJ~5CS-+s7p zXU|Q=ETxtP}v4z2L-#P2Fy+?M-q4NfAHT5XnQuD7{1a*)= zjQc|~sEdQSXL2Ml2!5l6P1e1(wB>iIw<55QGy87RQ~3{I{s%Xd$xw|TaZ3(N5nBi* zeW557xY>U9prIyc#QAx${~H+AW`1r_&rR(9xXeDJ6gYpp2G1N=!nVg)9?}`8MAugO zrSu50blV{-sE4wi;%|7*N)OcHEHdU}t#S!58?N{uudO35o;!0CNYKCybE z#CxZKvEX#Oo#EBe&E9t|Z~HF7SNTPrErBFv;B|h=4;MVg@ohOpa7iqHiKHUw7t`m@ z)PwuG1qGZsM)$)-?UAJqF`ZUBe^vL^+Df%&Z01-vAGU1IDeRI}t>A}X&HoQ`?;Z~2 z+P{q}l~ha;vYm=jA!U=YnJcKRbF9DRkp9g!E$?qL9~!rt2zdTA2Va|o zuYJN1jXfhP6WDo8Ho_P}vxFESi3BzLX|_bi$WqQ02x&wa4z_qFo1g7H_bf$qZhk^U zdvJcD$;W?7WyQyPd7p%m9hN)66Ri-NYTSvyfw+1j<$ zb!-2dZy^fvDmIoVz&jDv`(}u+ABr3bem&q>>1Fn|53lGh zKOG69`z{bP{7iH89k{7r8 zW%T2GB}GU3YexL6PSC> z^CJP+JV>WSx8vSoK1k(564iah3wg~~H(e31xgee{a65EaV$~?0*rY(AzY3drvWb*O zTw~?<@y*V@z2CW!U)YGfXX|3Q>ub%K8fkm$FHsm(o+Ce<=!3o^wYPu5tP!0+*?Jvu znmyd|hk!WbA6R{BTV_EPcKem5uWjgQ8}8h`v5sE(k9nH}AH@2m8WhW=iwFznv#Blg zkoF!iUnxo%rkx}<>Wr)Tz{p-eMvZF?=2yKghh9EE{n2gIa^s~c_E=)|`_SAMgXz-P zr5BQzsj#)tD-Yl6zqQmvU~{@ z(W`UhD{$VHfx9!|KLi+)U%&hL?Nm`MgPdKCJ+5*zU*_kmWwf3UpWw?O!R`@Q?fm() z)}f5_jHCKGlGXNoS~`+HTXs9`&6KvDNY}B$jX61P+Tg&w@9^s#vB?uf9|yAoM)JHO zTW^9g7s$$Jr64I@l!ONLVf|1a1}bK#AD6}SYJNg&9p2%Wy@!>ZPY-vDy{ApvR{A#h zl?A=ty?H3}r;GQM9#i)2@$Mu1yRU{t z7KG zk&_6zB<(11Y4cu6Hw6~{1HArCU`sWfB>JHe2omK`6H5o6ef6yU9WH&>;r+Ok39ndf zOiY6^AYD1DnF^NpD6C`Y#A|)lcP)iFZ2A@J6O1z_T873Y%ImiGkY>}57}PoB%*fIg zL9M-xl^l&1W>^_$X?F=m&bi6 zKt8))o@TC_wohu;dobM58ZW7O@U3<^{Mv^SrMU;S4Gqrn@}Mjz>jsR@9xP947Tzk( zL;^xYGkP6Pkscfq`wH%-$+y=l-^KFK1%@O>PfWvxPm1xK7oj_$1=3H+LwM8G_WVMh z>@B_8Vgb+5p_?j-{Dy`(GP^zne|u@8_3Y4tTlYg2i^?s#s;_GOo@sfDcPHPEVdk*rhvA z6?K8Nm{511Cb4UIk`h~o$vyf+tF!AA=cnn=(tNmuU(u+Zo`~)Fsg?^{@qHgeXIO&__s%CoKhSkCIg66a1*e&6on&4Vxc>Kt>*0MI2(FQO9^$!819!O6Lwsq%%Up;c1 zpG{mo3!S=+%6hdnT;c|Dz;rS)0`8@;Y=}t-Tm!;KXH?8GMxiimrXp^eN>_(ZSZ5s0mo;z=sYvbP$5sc1TYuRvkUo|wAN(4 zMcvku$XCcRG*8-<;eU9-jO{f)$u)O_p5^+vjFRqB)?XVn?t46OEj0A-{JOOg{huF+pI-Bc?4M`(=@bt% zfQ#=9miqhehES~J4h5Zx@Og?y&c!}0mG}DEg&*Wo9DTF*`m0-AP<=K&Z>tzAKzyvj zlP7ZVV}wB(%i14J*NM>%2xjGS49ea@eubk{^udaOhJCa;DT-KdTx%dXZ7$s*#R(#! zYaHuFajMw8PLB`E`~38nbJOa_| zwvAQ)0OJeJ_6>p~^K9NR4(qAUqWa?g>esKyNiMackJO&0+A*{Y#2wkks&gT13)N$R zOoE~=^e5)(7r0%!1gp-G|j#EyKZ7}?hcpn@2mHvBs0#x;r4ck zKWjYxPNE(tPBf4#Yfw*VXTichxnAGH783}YaGsqU186>AV_W-UCOSIv;<21<+KK27 z>#0a7ylT|@Pr3c$=YNd3LWU?&za16_(=ChAj0A~UA-tW+uy7gI4!j>tf<_N3gp|Ys5+--1j|o6kVXPhF^bBGl*-p&k802?zm&ozRsh*+K*C|Ljk(g_vwXUT1pZFRm?6p5-hy0JG{>fE^ly|KNM;;m2>mu50O8S zpoq05d68en3*c@bj3C!jd@<`?E#;?MurfZw3X1)bOg}%YI8N3kEof01!r0(8r!DcZ zC*RbO-z0`AwNFf)^yAkV%7Ix&Gfe_U;$)ezcb1hvqrjGJR*+>6-z8slO?Zj(Ys)mq zu78f%@cwAllVdQ|GcnG4kH-WjW0CU9!l4PlJxYn8tTq7lVm$pLWefu`er5JT@LBl6|EAK7@#=pW zTwVj1|Ncn87CEe2>b!yu4k$y*1Gr$X%{*pB6HA^DQ@wcd2_P+$@t=Zx_&cEowOWAR za}wD#xJJ7mI_I!Ft9kjx?KvDj;ttgEewG?>UohX7*px~8k%o{Vj+F4s{}33+YOGub z=RN$lU%K|oC3t;cKaZf~4imP6k{{G)*Sj6!Cnkp5kTFOhWM`UtTCvvv7T$v?75>6D zptSsyZ!UDqJMhI2u|&qSDf1NGGhK?%pJzE|S(#SXs={a;{1B(?vCmuIdVQ)xg!*HZ z4oK*l)=RLy+97(|La@7ke-^$!+J@hOCITM0%VU(bYjCI&sbwTZNRmh@E} z-u4kPai=dr`zdXRcpIm=VZvd!PvM|?*e4}_^;j@LC2si^X7cJx@uL3unQ|z8BK+57 z=egE0gleby^7sEh*Fd%<^As$(>%ZshBzn+dDAhSpOD74t2|c>}oEBP~LzR7Q_n_f+ zXofv}reUyD>}D?x)gj`Ay>eCQIqt*qh3H+RpLQe;4;<{5c%^>A3Gkvp1MN?VaW1JI zRa>TvR5P<*V*MtS+9NPc%C zM{cG^B2FQ!PYVBun2jNM(tFrd(`TR&t~a44BLuxK`947b*yKEWK4S3Bab6p-Y1Vl- zcDeJB8d^hpIVWDryEOmoHA%@k@4u)(7fCZ&@HW=avWPmoW$|#1cgtME9)5=5(eIhR z`_~n@xXcm}+V`&7*>BmOw0O4KE~RB-ywfLvtM5RuXLsoTuz(FYa}dL5?(Y7$@Nr?z zX)Mmu(>>kOJ@sR2Do~T$3?->+y*%Fha4*$1@McxU3A z7{EZvi#&-@PA5<$9L71cy9q<}6Ft&+)nsR|aZvm$Y|2=+t)Bs$nOtfOG_U%O)|T8c~~kiQ8dqyafx> zOxy5{GprL98;8d-Mf6&zSI<*Vd%Y2}dVvkz?a4e;uCN%eG2LUWZqaDk}oMtvxP7YKOHcJHD$nA9FAKE)#B! z?6kZ$a@D&LMLP3Wp)UKM3U$+34Al!3T?2<-^MZ41%K;IQ7E7$qiPqkT%P@s(>0O3@ z2)I<=esSSPo&SXS@*e^_M!&4fNS!$Mw!ia(#pxKiQz)>Z5`j;mp(dd(M{JprKtmet z$MrB5TNlOh?>p0y^g~N&z>mg(v+9xOOvvy#{EVntp_cx*uxVpVmWQ;Zi|m0tWODog z#nS=`mVchzAreoz7&Oe0FK`35&5`A_*2r_Z#5OeDx~EVHQ9|5jx0EwS;<~}TIc2D} z0|ZU@BWh=z5i5(S7{aOmSojlwgvy5SnbT%YibUFpvXFLwF(X;o#Mw-mR) zil==LJc(TBG$Cd<%z-ja2s}ZPg`q^Jdm#_c%4nicF{dmp#s65bXMN!5vcnv652O^6 z)z>{yF-hmO?-E|N+On+VUUQn3L7EZdsDWyk3<7i}sV z%c1BiXvFA6xcd)*GE`i)=(djeQloHU5Y+&V3+a`#g(sAzHh&BKkqh)P#y!qQ`RXI`?l zSH63B+V&)J^2tAXAEDJEVpEQrMnBIA6j`aRGCk{O8;O+;ZJ2Go@p775Ym3yk;0h!? zW)-*yF{d>7&A;v_{f2r4qNUy;mEdd&jt93nM}vzM)qD^dY*&3g&DJngD=PO5jTzjv-uUC24NOWi(`j3I=fPbX z=0CP;+;B~BSAKARLK`L{S;0E<#QZhQ{TWOg5#dk1S^-6IFU)32H6?GR8U=oxi8^g{ zs=tk3Fywz_n~bH3m7s~M(D{swdkha$+Q#j_m;A%_FY*kf5ZFQ*n?^Z+9o_;t`wYz| z#Q{qS&msS=;{H={`YMd@eSS@Vln@&7L&ZpEA=C3tPj?*VqX^Lx#qz*3XXR`sjAJTe z+xM9sqih4_> z3h*v09>wFAN79~Y{CDN|aC92GW4@ES8SbXA&M)4nNp3_@&6-y-hhvlmuCNg?`o>Rz zCz?C1pYeyleScL_B_GwU09Z^3Z?2IORIJXdj?9x)ZFL{I8%aq#)`n@_EPk^@az>9lw|`P_nol zP6X?4)C&u&hRgUYMI;E5P_q~}KfmB~S_k3o!8U8|(hraf4-A#gPzbt04g#WFEPb*% zdGA1-1@|V;V#rWh?W>I?eI7}#j=`fQ;;u=0`1lL8x=@g~1mmPBbHUTqxr_v*n@6(d z&PlyT4Jpr2z-!yVPlSbWnw&6xcAYeqj){ghR@Yf6TUd6E*}wo*x=^2EJ4BujcOICo z8Cb3lcNthH#ggSsSDB`2d!3#46=eCiyZcYmU)#O3xAV=H*m&6PW8SD=##~j2=lDu} z<$TGRlz_>kYVuN;6OCj``}RDZBYNYnK^BWdwdABjid;p!96Py#LX~1}ie-&5Lhe*@ z8isf#C0{o4-aG!frEB`Y^KI>r_L%e64v)NV95Ji#h>$}jJ8|RR*3IiC|C*<&GH3cB;HmIRfiY z=*1Y;Em~vFNcn6laUVg&Qi+$7 zq+S2@Ac_d@1^bXUWNVcAb*;iL}CcTlxos^AU6bB zm}Vm8(d>?PibSwOO?aZF*d=g&YUGoRp%Pv-cl)-(X%`S>o>e`wP^h zo{fp>YfCwng_5T6UdwI0dSE z;XwBn->W&Kef2J&Si^c{QUp z_@tP(oM)da!TN;08arhE>3i6wROw}d5W6}YFF{X4V~81Acr|%zt=77wVB+x{)=lF4 z1Fk3!1=b`O?#n5!?#Q{HjVyy&*g1{IhA^Ur5;*^Po)udGE%9x2JYfQ{#kYD@B*982 zTFZ2x($e^FJyWu; zpNiW513EzDuPJ`1SxhuQlFtGf<_m(jn>HztupQTdW@|sGICHsjSgTFlhl$uWV|Miw z6?<<<<%zLr9c|nA1&17O^Gxq69b6kib52!q6M&-*2+e`C%6SSMEHa5;V3FRR8eZl} zGczu*yb?nr`vO+_6R8G6@EiFLxUUT=OScORBtRBgX6_v=N(-M0z=;62v~s ziPPE2EaQv3laSbiUzR2DK5>1p)j7WiM4M!QxSXL9Yc6@pn6aqfoub!}R@|~ZX;p32 zw6wx!MX7Ne+%@1ZUCk5c!dvce!rf1QqPva_N^FHFIv{?}5>(jd zNQDrw#Z9hnkz5~saj^7CdB4^Z#j{nZ3&6U#q4sgQO1O)qcV4ECYvijvhJ#ZS@OOBl zBQX_HEs5bwS_c5sU=hfQHQQoe5>kXKY|k7^Pbh4CmZ}vwI&YIVywcyPbYs-fu`M7p z05Gi1R~#YzGzD9cLu~q>pvtE_8(ve*d|pLw=jrlOavM@d0Yd$jdoFGwIXTXM|K3>Z zvX3EdvQWg7Y4tG}`8dO7$TijK*74^tDu;mo94rdB|B)pYU`L+jS81!+HtI%C5W0}- zo(~$z*4G*t@WZ?$?$kzSe%ndMV%igo!~|)eb*P z0W?#+^S63+<0v}s`hJb@J4}SwhieE@K>3PO`=7}=7~@aNIpTg{s2HAJK5aI8H(T^& z;kPi!gnZ|&h*y3x-6bI+F^}`VSJ}Vc*ER`13lG?s|D;%~Zdgj(Y@2!aOd&s;;*N>V zq%~4T1Ua_QKBjebD^ZB(NxPG?RePDX^U)BD#2;Z%?vkyiTq>IOt5?RgL#|A0y{v}B zevQ0evwA+A62xQUIZ^TvxidX^0EOZtU3wn>BRP>GZ-{`qXd?QS?1TwQD`qROlJsC~ zMU!V?bv7YiGONIO;lrqt%RySmt6ANLqyAd{LgrNsL(BE2%!B3?(e(}4vZ3NW`$sL* zT*CIvG%km!{2KX0p?^m}O4;OzcX(NyR&)YYG}&P8RsjCYFhK;Dgj@%6E^l%Dm@YnJ zc%rg=0JrfdaQN$9r4 z-qY7+%I{@|jQTnof*W`OFTZd;yKbv?<&XW#xX-bs*4vBD<@2AIpBw%0UN2%y&*0G) z5BYwFg{1N|8O~1Y3&B=sbgx#InbY8++S0s=MOp2@vcahzc9DH8=-1V$Gn^kYUVHXb zldIw_rqbRyPMCV`7Cfn-&b5U5D4U2^QIUp*{AUd)s0YnLHq&Bdv}!u;1$Ry~__*v< z5kZ=kojR=TPjs%w1EZlF}TN#~g?$5(8XT7gV)~vJ|-0XGFvKc(Q!*S_ezOLatwPKrF zwX6NG=$epX$dAUdMN;=Jf>+km6>j~SpJ=$zj~bIk_uK07@@WM{9BJjx(TUpH3+@L%9zqsL?hx3QPNP;Pi&|7 zXS^m05m)D-UB%k$N19VRwyfs9C8Vwzu`{59+u?Cv@+m^(IVGGR4gQdF3dY?y1&YEZ2NyE}kCvd8wM zT>anLKcX`Y6oouFX%e9+`zUK=E}83stKr)5?*l?GKe@$CZ4ivaNJKCHkn<13Fx2v2 zD_B-H=X(c-ld>&PUZB=@^@4(ptFr~~A#kMlei_8=bD)x_g9Uk8VA`6Q#D>LBl_aV% z6K{DeCzM^?T1KPdC0XQ7lX44vodQKizntyCDrOIVIfxuiV0=^e-=*o7o+?0_W^f&0 zDzb8AzJ+}Za95}2&Dc?G6iK|tt)CI8R$)*u7ilU`wGxufAWIbC0;0up4kfW0SQGZmU7v2X^7Em}Y`f zzf;-NRx7X5wdIuf6Q`mx_vL(eyy?Ale?0sUz$l}Tg*;dGiLlQXwT0p{zoY$t zzhVxv<1WUMZR6Ck!$c-o99qB9T;VqM^rSP_rDAa5u&{g3PxEFw_@ehy#G)Q}Em5?( zP=((Vhu7SHg~w(ol&_CUIzVee?omCN940ZuFet=pfE^gXDaBzl3Cx&?n02|!6 z9lCS*#oDBuu!FY_62k^#C#g`pnk)veOYf_Cc~{l3(98&rI@MF=XMgKJMHeb=Q3{p1 znKLmHFR+@y$>Ud1{1BrKZ4_1}$SevCig?eVD>XHB{UtnC=GLNQgtxfcj_YPI`pVb* z>y9!WdA@guGU^M09usWxPfGk4{ClP>v4Z4@*K&lRe(<;K;lFH9fInh30?PS$wgE4s zL6dzqJ@BG8N~BKEUDcn7k%i)~j>y@Exn}JwBZofEa2%X^-KVze%edKX#CI21WHUH1 z?!G8Fl#c-h-XhG_Y4L!?3Eet6GV0A1+A5yM8umkDp}vm?D;JNt|5SuR3tSIB&EWKP z$~n(Z=2xct`mLd7i9&k3W{ojo#?YBFTQcNMZO9tFN@R_%$~JoQ|Wt^>+_!CiuFRWihPLDB4xSnZJ|6DPGLpEGm~(m$kaT$5dx2+Khs_5*uQ$#AV%?I~*jSbB}i#e-JIXl-Gn z5p(}@3zUXe|2?YxCQx!n(!TFUBq5`oBIt~g`C+vt{(P#=lb&Y(Y#-O=X9Hpyc4QVa zxGaxuMy=yTuxi`g)>qc2c~!BNNgZ2JacWF8aWl2Y^FiN(7h`Op7#9JPOyBX{1IwEg zrNYvm{vhTI{#Wq3o}5tdpgc8`;Fo%?XX?Q(*+E#Y0h5V(3pn8o_b0Z%8Yuca2~shb zo||Asa|H3Z#HPBVf6|w|5M@yu>B9IwvG+{2|~pSbF&Sq?kki zqniqYg18AH75)Z)#zZ1T5NB9pp&TFP#t21 z)9Sp`f*h1;S&Tu662u{_C5zaCSdTMftV9R7oPOPhH=r*fda_)7pWLd1mwyNH_McLG(XAqiq@*_@;Z|~ zr4hqDJv=mS;AJ*&S-GpKzJKv)w(!ZIYw04(c0jkh4g?ecKhwKqEnRh7A<*D%c+ak1 z$~ab}&7)O>v_%AvHgI}P?{gXipyY^#UyJLN`b-LNO^ZtPPncCvj!`#Xz~Y97@$yh1 z3&E6%Gu(;yW&x{4X<&yJy_6Xer!PApzkk|vSgYvG$iqBN#({k1&AgUCK})|IQ6H-_ zPq#R5hleM;coMVl=31^6vB}X;%vT0`KPW<{F{jcYCMe+MfiEG0PtaZr80y0lUBaM-OLOBn^wNk1RJs< z=Hld%X-=$#itEpT=J?B#w}4h2vmi`Qo_zIBk)Wvo)XqZ+y@k* z%B)$TVXfuILo=vYg7_1EGFHM(;}qKrZ{L5qI@Ql-vOZJt0F7GB+ff0FTwJ@Y?Ft4m zBd8GiCoK7;DDQ*=^oBTnbnbJWIO|v;SxJRKT8~M%!^|4p?^8mo;(4xAg`~{Ctzvbj z-H^yw%^{Pk%Brf$%c~;0ySq30`>Uy4P8z2UQOC98xB7YSy%4{7cifHxm*XUlPuQKd zvl9>?-VfnP02_m0E*O_P~96?JWY=B7Tb6^RfjxI&3boFgeO|P|=KjPwP zjSdDy_Ph0)WZO>*`J;iml5P9GW_M3qMJ6x9Y)mD3E%b3-LuSmLJH$%$77_wn?~0kQ zRIV7}X)^VU^!ISg(^s=Ia4~xGQWyI_CLhi!@o_konRYjiO#UErgEqB>7A1nj<%$AT z$me8hHl}^?^Urf^)ciiKN{4oLkzrf`)uI^h4Otdw-Jcq6t&x0ktsELQ>K~klLG8p{ z?su$Z=))_TDrWL z>aCcaU-oy(YiyDsMCax8n!SLsTB%v;BSC0U?@yha659*4!AZNs?pkWi%V`ixDLk=c zSXh{q01F@G9(RV2Cdp^m#EwOUQAb~jJbYwdd`CFb-&g79ZdP}+YE$W)K7#R5DP10U zPD3#G#;^?en_p3yV*~~kP6n|doBxnVPooG8GkO{k+vF|V!{&~G`4!a5e5ASnE8L-@o@Q%Lw&h}3fh96>l_eYpcEK&bT4?GnR(Lq_%M5MTrp#2?* zGoL}eT=Rss5qCuxBYxSDUl20!xbeXA9!JlMjzuoJTsm7@;bfwb1Qxy_D zn63l^UFN9GU}cvIdO$1diP?$`rL|)swk>%F4+nL!9VQ&^W7V-dupgLG3Gg1j44LRT zYVU95Ji^xfU5q8@-tPPTS4Qmp84?_xfn!QP=+%f*JBu+lR$T+$o&n_g};kxLchQv zZzuYPCr6@QSGO#V=rmJbIYAYiO7@59c(sWq&+AdbhEiRZnerhY#Ev}Z9MJdBiL9KB zey|8KYT*cC&577mGOKs6`Fnv-up3aq(N70& z&$b8BYJr7&3JIOa*N^$H>inLX2({->VQ-$Xe`vUG!Yf<|y*(;8(1%_xDwJ}T9b_@cTe@NZz13mDK!djUZK;V zL)f{OMPoR$Nxv4jleC{+m0X0&prh{J4FF@m5KFP62chiKNy~+= zhqOAXYgtpbpHqKyTRd$TIRC~7zKh&U*oIez1nKgE3~UoRHhTwzVf}381UPzw>qXoW zyqW&pM=qKvm|CPS zwvM5g$h%8bj~*1_ESV;^lP~KK*-(NJ}8m|H7a7$=1nkFlEqH z{!IDnZN2%n05jr9_O$bG z!&WG~g+}gaNkHmO^;kn_Tov#iFe&O$9#K0?knvOZXNnlxT6&n)VMPyEi}RCG3xQ6*A}8l}xrbVA z9h-FY+8zI+2Dod}6nKXrKenxTgdkY3#f`jEpT4SM%-N(EEsXg0V%J+Ij)e`TeU%RS zwd-!D`iGmxNnK#DKx7#wLrT?cv2QclP_IMgxE=V!ap0OCTEf}yMoxgsbByo$|zb7l0LPS6m~ z&zqZ@st%b`n>Pf>R(7sncjo&ZrI6ckMa^2oIGn<4)K0katE; zL{hpnVNsqCtYFJBczuI-xhJMkPHu;x0o?cXcGwQVgNjwAVeudb>cZB*2MZ1DL$zZ^ z%^E3NP`;><+~&-}R%|?FU63oWXU4AW7P`> zYX7GU3ae|WM^bk2&=c<(Bym^2l(45kcDm~~F+GoD)+@KWX|v3zL7m@u z>li3urx|B-%i_He%kQ8Z9opFk1pOvUh4J1GW{Ypc|RMdd~&*T(qmwXeKa#+ zGBWEyMOE1iGN*pBiet5;Q`{Hj>RQ|o!bf~Fd_@}{^{LXyOq?s)n4RMn5FVoUyV9|t z*L6QXw6Y|R=Z0Jf6Yw3xk>-_)tez6ODM;T7+jz9GY5(VZ2V6<^#gS_EoVR5^|0 zrNnvaJ^DS{%KFcG0P&o16>}%7dS07*p0}Q#v*h9)LS$o^lt`ZVSCzVJ9Ow3GAJJDI z*hRXPVdv}9&fJeNdN+gm@{=)q8*mV+8-b0p51p&jUw06|Tg?Oo7A9s+@q!)s6Hhab z>P@|>Wcnhyue)1Jaii?lFJCB70py?OdO>jzSfcfQ)`vQNf5 zI8<%)%3$i|B=e~Odvg!`p))UT%K8&Y`Tt~$|IHl#lf(@n0l`ld?mUJeBX~QEIq~L| zKSPG`eh@Oafn3%EBT$jMP z!^$Tm!5i>CEW5d*U!0+8hFL30)N1E*jr%n{cgYc`oa0(&>`DcT-W*DLHNEgj2-2{2 z89(%?kVT2(nK81S%S^Y_aLS%t)Tnt^5TSVfP5;zhbJ${C>exLHzVV$+5>bCLtdYY~ zJZTa;X%^gVY>ScSDI+S-;L=4yT$M^{|GkNDT5M)a4%2Tl{y8c_vm=1Oz7&}t_okbP zSWR$%AYxNRgH8tcU!9Ui_B~H$sza9A7)fX^y5d#!W2t-igRe~4=-P$RH`V-E^^Zr6 z4h(aJ{+e(9Q^EAF>gZppCh%{-e&A0Ng8xH6a)M*-Z&=UTTQ~5!q&V=GcyFa63RXd@^nrOYPi``cH z=}G5Xr<+1zoeJ4Ar z>{2_tuXFzF>Bg!vQE+J*d>qBPp4_etsev>Z%TLk{&+2*YldZ+Bdd8yI*JvnNn|Vx> z00NYy(TyM58;obxwUO+DLmsQ zM81cMa%Fv(&2Y}k-a4eO=0no1icwv{?%1kkGeljv_=kY$s>(J~gQJtv&OI5|+zP)U@?8A8YQ2pSUFMa6?qe|(Wn5?mRuM=+<%SXVg zbXD3&G@!6BBuEu~k4S$+6xQEJPrfrGqfo>}<3nVYvc)KD!$+%>SRg16KbfSW7RcN< z^~f`F*oiGWE0g}D0H<<#z@$CS;47d-kX$gIz1@w5DbEf8ODim-w+eI6(1Gd3L=DTA zv~!jGxH>_i-_^diRn_$a1U*9Uv6Yqc&F9`t*F{<#_Dsi z`p2fsj+hvHAoQ1gv655z<)aF!?!3N3v1w{g9aLYpOMUEQOAyLrZvI{<6YpU2AT2W? zHMM?@KWg}Ww)|Mpt{*yAGs(pzgDM2&6)E$Rm+WqPTrxf=y+JH;v;KCo4GNp{pVv=3 z1RW3sIyBrQyExJhZ!zL}<983J^$lS}@I>}Jzw&76Wh>2gnJnC}*$;&D?eA`TD~`I~ z&bkoPMu-?*o>*hu!|(g?AUj9i#iRInL5Z4k{;68@mBP-PbHs^;J$)I}ylJ0Dl z-xHw;sTRyuh^k&jdAu<@_vQCqBGzY5^@*Qau3>7H=8v5c@`h|w7hVjx9SZF_{4YgefaMbds9c`GA2CFlZ;#`*&siX>?DQi=9zj;<^rJB)mcFcnU zzin&`9C&ChjD8^Qoz%a~#8$icgd}bUILO^FwY?)>gQBej z2pj+LJnQ(tOgSAX*pWcIj-V<}#hE;BMAJ+RO4Ydt^whr0r%tA?`b)#I&X@ zKV^qnm%rbB|F(W3dKKgF!x(g*x4hihh&gqvAoM{sdhIB7UFIt z8SxUzZO`7*r?18sGjP#!<~k3ns|JmpA9eA`o-+7+yjw&dILLwCGcOBPLj`aZL6<1o zWo$y>7Zx|D;&QB159^~?mMvhi*D7Fcuksbj9_sFIl9K%}Z|%GFgYo$@py2QS@Y8;LqCJds2QMPgdAL{n(NdRtyQb03M9RLFGcUyM8;#_i zM9klehqrX_kV15z%zTZE*Q6n3gL2@@MW67XITv~h_k^q%83Gz5MoM4js@EYe7BRVQ zAG7ujmK?CVdhi-gHO95ADPexyjaT?DWn0$q-}hp=)EhBt`h8(R_TxE!ye%7aNOOM( zyrAheR{99#JD>vU6A`M--raxR*3EIsH%8lbJF_`^R~f< zf7h_atMCBkL9bjRZBs)yE&Kw)A>J|QGTXg_xCO8s(J^kvz`dk(>sZ{z2E{toD{wrw zxmhvhEjwu2gVjYYI*vnC(`^|XDd+ZtXEQ4qHOOc!ms$~&RXIE$(@ic8WCk2*F*;-M z{yp`mv)kxw?_rYbP;|5C_0H4P#9>>$$pO-j{U90<0M6k`xkmXc$efM_BHWyWaea11 z^Sk8|by(7@u}2zLWXG1etsltPM~Sh*o~!5!9!)guX(k-V?3myB4C-%TIr-_@&6;uI zf<+WuEzJf{Lk}3FAJoOTe-(sYY&Ags_?T4yumrU*U)OSx${C@b*t~3>sc55q!a7s;B?o?{@+O#Q*M6xc_7hS@{3m9FhpG{|<_sJBpeIFwTZX_Vj)IgSl3(c-H(h z?QmkUp?J&(gW=(E>E4pVL6o>md%Lr#)WXPMd30;c;LZK@tjQERjpAU~LP#<42uL=A zFkhxBtzedFpZ{$3*fA;qQa`)-IG1LH@96P*;ZqY`m!2`?aQ^r~ZD6O?*Q9@L%X``K z*G(jLJXp&w#3o&B3ba3YewmG-=he%OrzhnCz7#d)6_7WEp0}_-2;=pU&&Le)n}< zzx)0@`rr4X`vH>&@?Ad5@i~s;{d)Jb5$@imw_LbB7$FVivuG<9`z^<-Ix=sU+*_8% z2%{}`tPX89=R}xadLZ)d!>{uHI{q$Rrs+^bH${Rc#|eh?X=sW7=K|zHt5EBZ7h!Ho zd>LlwaQ?MZhT7xwUW`^3gquLv_ZJ@;v+38YT+&RZFDqT1-3K6bz%oD{KUId@0S0>+ z{?*r5CbFeY&;KqnvBka~e9Td8T-AK#1(_uy4xh+Xb*WAL0aOuD^L-mU*@1-gqf+Yr zlE7a`W<8(WdYQGC+ek*iAQh|5#;vRH=YSJ|}UQ6Zy#z2|5wS^EMI~scr z=bdk6SzB5-`2u#trVL-?x^EybyG;K}+BF{F&6-<5nkh@E;6P!|(8+VBhWmF?P3fvd zs9xO^gg04yVWu0vIKK;v_ zj`{j^^1~!;brlPWum>}~E-ZYtjhq~v+%f93tf`WoarheO=~d1!ahy(anuv@4k+z`rWti1oMYS+(V*j7HaN#NyD*72{lCtG5V&zQ8b-F+9Jos8(&n zQRe1W^*b2!8Z#THB$Zy|%@@)aSRKP78W~*U4CfU<@ZQTmf z#@wf*Thzvjs(7jm&Iqs;qb@V{*Gv>f(>Y<&7OL%)PZh6$|4>((n)-AQzQjrSj;tVv zLJyJ57?9{Ev^#$)p~3e;DVH06iE*4rdDeq9NiNo}!^*g()=l-Hnwl$`%gSk}xhEqt zsa?muR{8wH33Dq8&f5tphTA&1_4ujGteT8;MpUO_Cz9X!N98(YgiX`hxJ_ssV;b~! zhv`JxpM8#nJCKekyf4E>nB_dY-R*ZWct0-%>^WrU zmvUbsuFo-sTT(_VYLI}V7V;|0Qb(V>*SFkA2NE$qJrm2AOC}i1F}dy@h+?jbs=4TAy;P8Mb{U zY41I0DcdHl7;+oN%Byw~)`kbQZ2CH?d~crcdn(ej_^#;`$by|IJV!Z_$@^;k{;d8&ZSuoD?wzy^h&(E?2)gwyg9ZHIgis@%n#mD6 zOC9)aNFq#>ZNhQu{g`y~!&R?F2BKB}=`+6x=dXhRkvaSEl}YBMd10B3L5?f0pIm1} z4`q8o#f#uhh@JFp%oDW9(my=SDu8AL{UcCAug^ToqkoOCd#r1FV#z#fw${bPXr^~D{`-5rfX*6rr>o67@dRY`f~c|4ld!$zLv=S5EAX-0 zuwUU0+ZgB1%>dgnW*YRGG2!ia!H7dxn|aN^6d*sc&9fwZQ8GW&Un6OqR9sbn+%cqK zVLW)1)VD5qV%uzCZyG>HFxMPb^T1}O3MzOHBc$-nXX!-bNGGfOVJl1ke?v`QyRNrJ za`|9ylPo7Nq3>{kZm!hBOK)t!wx6Q8^SB$NF`G7Klld{P)h0cl5Zs^r-(!F1kLv1b z{c3=4{maF8_Q~U!>SMq&Qt8iJG`F+tf1pb6pX=rcYk`FCpd~e`H9`_fvE)`GJV6B0 z?>r9Plk&9H$bH`9D(WiFA`tJ(}!a+H3Y zytQvq+}ZD>?hFCbU5GZFcDv6zv&en`{_|t_IVI$VH<`Vb&e0v-0PFa6Uyc#;P$pxV zwFZ@hx(7(yS@MmFBo?|!CCdXEXKC)Xd1fRX5Z4XXe+wzmcuA@Mw@L4wvfK&*9;l+rW012<+_Vme9{#IYxbc zF05zVys1G>5W^nYp|NaW<(~l(Iy}iqSG@vrG_B0S(@*YDj^7f=7~^?U5u;;=|F-*A z>2FIC(tJ=$*yZx)nr^)fvmv6Z$%grmR?hiRw4tfRpw`%v8|%V)yiZic+#%M7Whvmh zTzoELCoN4?)YVLCkh_R)9)K~k=NyJ&~yG}gCkbL6WPWs z!+Wz0#i$f|^HeI^9%tA;H1ys`;ajFOJ|^Pie1@n&l2%>cxDb99mPJqPJM3cnur=gx zs!C4j_@8s^z1(#C)HDoI%A~t^mzd`B2Aag7v$Tc=AJ0aHcjsUxRp(jpME89ZWo%MK zyh(Vl^7KJFB0_ZG=(`z{G%0)tavCtU@r^5yJXM?)lu}$-1)LHkB5?sldd5c(6FCQQP8(y4%L zlvs`v%};P)Fly`y@bW4xw(_Ssojt3OJ^&Zn7ILLPb@XGSWYnk?b7Q*b<8fee;{}x& zl9`_Jwkq4(8Qa%(HnLQ?=HB;wuLMN)Peq zA39e1jHCizp2FZ-_txM0;p-K*oXNyKVz{CO5ws!O3~H2(9C;Z4R# z4f<5lY?g!Bw7u7FcTV^aE`aL1JFVv}Le>|=en#3jJ!Wjn3e4w(q&5cl!k!_2)-KbX znyr9S;|t@fSFN^W2+VmTMWvkh+xTugJGIgQNX^xAZNdVyl4e+3t_Elz6>HVCcJs;A zWO!AD!u*e7`!J+55ZvG}}0$4=)SSL5Kw2 zL5KqO26LuLJ0`*Cu()|Sme96wJ*-q?ZPBs3{6;zbs+krSZdDU`;2>b#TL9{3Xt7Ix z)^~j<=$}&S|5RAn##OT$STnS`2v&kKzgB|8MOTaSgMnjD%4>vmt*df0ZxG5c8oBz3 zE`Z$uFr2iVdmX)!l#&JqM0t4>hMxmRqL#w?#&An#OGFI19ZrCc&HR#`6cHaeDFt@^WaXDm=|x1Cs6Qv1rm%=PqZ% zu03~jYhev%=njRbYBWydOpwyR3BlmzS%c#SHU$N*^1lBLcI{YTuMHNzh!4C2;AvN| zMX(n)+F{k(Yr;Z+WEr+&O+PIAC!Z*1`@p(PwKlJeO4pl|@*Zpw>k806pD#Duv_oKN z7!~lWJfs#epJ}&D*TB&IZ(u4aR&Egdz7k2*4Ke!JE)6b^M`aSx*`evw+)1n}?QghP zk08(MI|LwsUgWo5z0D2aa%{9x;zQh2xz9nRVN*PlikBTv><*&|EYrNBkK^ehtmgS!~eZ<^w-Z0 zwY;9Z>Xc5AQ35S9h9|`9!3!JMF)xGXL{K31k+i9nn$y;A>_Yb|4`@pjSXHC+jMJ*} zel@mLl&kyoetn&*W#hB86W}i{4Xz8xshC%h2G%Vvu8vvt2TmA`hE1Hk1pHAf(E2hm z`W_jy<<(`HBb{DRF`b6`nyL^lH(~peuds(B69Pi3CBjlOW@=@ui#5h5x8Z%RkG}6b z+-wz9KS{OTH5vX?P)AnSs3hdcW4Gn>z#f-^3m^SbE z0H|N?a2s($)n(oeEhm2Pw37yQ~>cU&VMaD{|)j$kj6P`2Q zB`o}2fm{Nqw`~Y86hp{YS0Gj6%IazTJV9fI04t$B(n+1C!%^>B3S=i;=O_vBfm*ZU z(3lA`y7s_o(#QNBr#n}!Sjp$FJ}BW($y3E39Q?^Q)(Now6~DZaF|pO0Gmv~;jGPb% zFg(4(D>(*@k>>pNi8O?!$^cI2#rQiV$F-DwXFauA4rTSB%Yu`=_&9!l2iAjJ1dmLf zn!rQ4&d9M>eiEz?+*iafE}UiF7bN9Eoomg=2-kIj*cI~+m(rFu&#f*KDbbsreSW0+ z`$e6JmDa>=!(mIyGs|}nl8C7sB*U06HpdeTDD4bl8*)^`)u=cLuYN~pj(G%4*uhcl zS3W~?^wW-gMH=8(-;Pnu4@2xkNl%ZBn_MM_9XgP=)XKUB9@G(#?@bY$uhomCd$Z4T z>;dBLP=eHo7A#s^PZy+^1xF{e%)F}fVhDcIhGF)^NY{nBfE+>e)BPXCyB?>o!ly95 zVNXyq?-50|;0zeGQB#C%ki!LHFX^x+~arq7L@p;u=NxWO&C4nEx_+}IQ)E7{E$y_>Eh|b$goRFyCdtNEOOvq_oz4o^O(b#!AM{ZQRZ+q0$dc zC{*=ED4$8x{-og^)6?#*GrUtgzxMluEj%AvyRt=@3C+##7X~UcZ)nTuEzml69jiMv z2BnD=Z5F_>; z2~Cpcnc1}Dw!eH} z!UtQ-Mot~{4h<@q7zImcY z4ey5))KB~lE4AbOuQT!gIurk|Gx7hpGx1+(cESfZqzdPVKK!Ktj(mpoGBYy5ok}?i z6?nR9ltlCNIYt%;5snSx`|)jeHG@2B0Y~MwYt@z3XHey^egAcJy5D|ca-YKjecu+| zMKZ%W1=3F835v2MuAp;IK*tK;^e~1|Cq1(l%B1GzDZxZ>h{CZ>!*M`Pi50UlT#NiL za;+}YnlU(3nYrO*8f#g7ZyT&zr|#Kegw!Bm4JP_+lMuV!tx2s2GL&%XUtX(lxmf?Z z&=_)ln9&^S{l~LMAol81h}>zNid^YL=7Jt{&R$T%_`$x}j0JgIuwgRBI(P@`Epl@8 ztNTo&IpOG#o3FMHJZx{02|r;+BH#b8BAZ33f8_Ew{$Q%mL6DUa6;$KOBTy;O@kG{5 z=DE$>Dz<9GAWSr3zuAXX!0HEn-`)B&qc~4b{?qV8Vm4VA021a8;YwxB3>J%u$`(5b zr0BzHXX`eKE zsIeHOcVFV=e0>hdIjLckbkt3~cg)rGZE3&(ftJ9(=)1^L1j7sz>{JpFQ{{*nEg(rn zMjIW1@YECY5q!f<3X4WZemTdWed~3i@P(-Uk@}Mk=AH;LtCbVeJ$;9FoC^4lYx9Td;F9hqxOYWyVS~@Cl(L1c@cWc0-8Mg9fG*6P$S|AFXbMq2<+c4jI~^ z;xNtQi;a&&k@Kiu+RZ1hm)@=BH-eC(@M)_Kt5G$(nhc@hKH~E=!o8+F86F;?8t@xh zKS-A=e079l?%x{@94Wf|<_TgjWgg9P18ORFt1opXDaPDPP|AWuQv_(n=}23~aO~C0 zb_oTl&XvR-iG_;iQ2xB8$=6(|^^i!@5O;CcS6g_2c*aFIq!q>*<`!c(h-t!@_z%2? zRn+A!ztB)ByQXS5;uJQ~^1F3$O~1h@nelH;A{ncn%$C(_kbAA3YdK+;wYF;c?fJ=f z=2xN|ydu#1ro)qkw~|M^sYVZ}QkV*QfBU4-fGLa8mIpcy_h+rNM;vQ%7{pxHm08vx z#wpi+Uh7CL=+_!EW7KTa{8Rd$mdTMdWdE+R1nPAB_qZ={Rv2yKZGZvANtED}7;O&L zO1)PW@Ox|Mx~=v1!(@-IM70ddA8fqOXtA*S@`3FbF*MAa1>t-??mU29GA`mH5yBN1 zd4QK96Te24y0yZxirHoihr1ll0FCm(bDy&VN*8Zijumw8i$Po5l71I?^(pMD>faM9 z0t*rxQ3`J-vjX3I0f9l>gH_)^g$Udc9&a*)`YT2;4xf2qSd*|*ob&TX%!S%RDzCVr zn#B8O5dqx%@2{)^6AAm8EypvO+VADJWN6| zw*rC{wd_aV3FVlisifWg9d62&2B}{=<;(EXhQja}fe)|4<@=O>(3J_xFa9Pa{8erS zUx<&ObO}yDk_e5v}mt7ilZ0&y>1igXI2b^p^)o+vSlEC@xbKbX;I%$d8h_GG!h=0){F?}vTF z)f#+`E8dmD@Um(P>k+{>Tk=#mr*xCHr!!?(uFQ(H+OaRnz~m!O5-b1x!u<}#t9`~L zXuY+0MRQ5xq|XAOwtOP%g82#mU5ZPSBev0p-wdSPcX0Tj+z?@5T{yFpKEf_F#_J$n z!a1^YY;oQQc|T5fnKl+ya|htQG}IX2JOB*sq|X^5evh z%Y@~#yj`I5_h%}80%T-Y`WzUP|D@MLZ3}P1f=9#8muCNkb=b7|8`t5%^sh1bFJJ$K z`v-aG6Zt*RmVm$Y=nL;No^=u7oyWawwCAbF*M(or0ptoR=!6T;=Gn9rTbmpY+kA)> zC#Ti(Y7kT1m>=h3lMqWoJSF^s<&-nnt!&Q!``_is0LraPV*tXt=S$j$$!-tEdS`oH z{E3Ck_M1baIpk<9+rElcK!|-48E*OEC!fSfGf$c~vj}|zPil}P5>N`LVbz#6$+X!D zjxyV#ojO(^-|8pIjJ;!Eee1@sP}G57%&zkfUMpxTr}9D-pNf3f`-j0B_X>XMGh6sb z56~b}->=Qw^{;^^lf_rGGvZrGS#kBf^!>|xN}Y#a*1q~ZDQZ^9@4hzv(mLldzWEW@ zt#_x>FkgU|bT&6zg?yJ|&M24;%4{oh*}ghmZzYJcVRYmawJ@KKZiq9{ylq2rUt5WL zC*z8Ok}YfrbgzGT`bIun;*BM37=X)H^{-#5D56AkBjn20_pF8;gp%!gmz{efgq^qs!_h|FR&*K(f)Ub zYhE5=s#i70kvvr;zfamTy=MF-fai3Hmv2ZQywMtmOJd|*#_WFbWtKgvw>T+22Iarb zK>qMVew4#IAsAkBcUN$y!2!>aiA>DUPgx>w0Xji3e@%Y{SiP%78>rBN4ZpUIzd%Hj zHn7ltU{|td^@Y99+WGLM;rMuvMN5=dhM3Gu8li(AIq61$3TWguxCH0Su%@=qNR1GI zE+W2IH#+{=aAxjfmcCW3kVV9P#k$DD`N=0!6_Kn@1O|nmsN+8%VKEr|-R%=4h%y;? ziH&5fELd!7V^y~X0fO|fPG6^CW7}SX6U_#iN-;iO_sdf)_5m4Z+=p)qQf60$@zo_u zaHd!r3}k(-1Nc9!C(&P-#B^vE8F6RffUp_;W-e_xjIakgMpe0ovnU_$4$@um_sp{% zSoTb#Atx^^dElQU;larHFPt5#KV;99li$Fa$=}@x#Bis7xHs|w@Qe@&r?6})miw5} zisT~k#CCi^5&lo$k^qTt3`(ZLu1@h<^Mvo5JgI~W;}*T=TT|L@V|wHM`u^r8_yz>C z^}BWflkacMTM03}F@_jNRFZbX#=G7p~|Gk8ygE~?es3Qd+)&{y4fWRFI=c>ZS z0R{(Y7688gQ`;r@_kZEmfLy%3oLcZ+Q9Yoee0jOqTJ*G6h}S_oyVL4zcleb4boc>c zm%+`U6apBYD7=rx*)xM{js9;r2xyxhYeMl7aiGGeAH~48WDEy)&_1B365{LUk0ICgMKwAqI;7rPt}#()JsuhkV74aCr!Pvm6=q`i55L zAV8Df$Ldcz#8zC3p39@l?_w&aSJoLExs#4Y?nFl@)Q29cxfWyDrm7UN>5zwWhA>ZY z?vN8xg{qP;{T+9LiFga_)$ufb(M~nIJJfob%;4qs7CtLL*$iJwr%vwJ`$B#Ms8G!E z8^PN00urG0jG$Q$pfR>SM6t@VVCpslRj82~L+2UlkC6A(#)JMEOPaV(X+_I_YQPoK z&7JlJd3y1SP5l+)ZDIc^vjf0zvoRfX+vYK>@v-tc%;E}eHUlv&_Xg5n7CX&602aXl z@heL+ARB(aIPQ3x5+gI7PF&1Rd_Us;>N7m(hY(*UV#(qf-u=aw5#KD&+1h8t3-%cs zo8jC?%<&P5UzfR&h}Z^N`s`v@ zaFsKIb527Y^KTK2qpHv66_iq6y_Zd>OujEAC%N6h#KtcDQDpf}{ynGL_5QxL66Ugb zLS@+-8cP}>LBuzU#EJluB;gfTpq+(lsTE5z7Iv6Ies7mo(Y*$4%1BA zkkTAiCV1>khk*~LcmWNlgnwrqBG4!j*i8G!q&_hGc=>9mde@=#5rFWUknNlcVG^F-{vV3H9w5 zyN5q6hi)E=J#_TX>5uz)5iiP@Uc7L69Bp^W=}G)syRAxT7x}g-G1Ryzh$#@Sep#4i z!NL2w9MR3&Jsh~!512JBrmrC`^Ed6^Q@B;kOQ*}f?YRQalVdXF948jSPg8cmuh*LrrVCZQ?E&$0!1JAXFqB^ z(<+g--#5eto7UsV@Jn86944Kfs=)e2lMa@chLvLzFETAZ*2@v=Gm^9X30zler=cS0 zf!T{8v*|T1#aXB_iVLCN%hrR|?<&Gn|J)?Vac3e@6d)%m`5xfy1g*qZPa2mPGgeF) zy74tISwl|02Fc#Nr8di>es0t)*wJ3>y6n3%(*_Qk*MVaxo^gR3k6>J+jHq=;*LCKo z@k9wJc|?4|TAmbkxEY4(hnFw}?s1g8OHl|Bl4==pURRgp;CA5XqWl4-(aVhCe&Zr? ze8rkneymMjkQjUoW_HtVc1&rqxWQHSr#GSX(nDK< zJxm8M{XrxY`7UCF!muU7t}NnZNq&eJ-v0SbU>twfhz~l#TJ5BkMAB!yM8&H$WO;{& zw~^DgQQ|nKS=o!v1SR|Wjvj$vGSs>AlA5H1Vm1IP7yT)4? zlqq@}MaV$3MEx-ZjS+}hR$vORXGhy%wO2&Z2M5pSAD@A}cj2A^o-&PZ25Kx8yDh9q z>2oA9`Aya;YdLhc8#=ozHZ64aR@ZyA>Z+NCw%`8V>(jFh+UP_Gud|W+ar(@>M1yU# zL|JZPTdojOyo%}<(WC6h&2;>{q8=oJd!-0FLOpJ0K5KGH@9@@5Wo`n{djlLs$Wp9P zNEI>pC^jMQpAFy*oqw7;C-C{NR8G+@CE_8K%BONNk|s~=VF{4({PxP8dQ%lID}ePzdwze+1F{PnGT_gPiR1Chsf%*cZ-Ao8D= zjSZ}=e(fE-g)h6s{))roPhC&lX|9;M!y`!9$;?w}kMH@Pd@2}7v4HpZ3sRKNWf*CPy0uH4geVwyZ z^76GKnrnpc6d9$k@Z8!aL97+)E;oyJ5Cs!$l7^ZFEKtwqmlXzxi4f0aMFh$-O>Lr3 zS48J8$J7k0g_|6%^eZu;(p1&%ge(42Q;5J1GQN2R#<F&((ocn=IXS-z~Jt1_)vzymD5yAWEW#>OoZOB&ePZPMNefhxh- ztze!mWeQ5Kv^E{-lOA*EtF(Q+s)>ttymDIafIt`VS5EIKs5wRMJ}tY)^o+=LRnP*u zAjI1V@Kyrmyixqi2mm^{hm_Ump`+M_K9j~V*@aM#^P5*t#Z=D0-#Th@_d`+YAw4hV zYtMV+QjD3dxdn=5_M>B0`fm)KEZ_~{JqeH=kg!Ox&wp_=F2@B7BE0dEZhrO*OlQh2 zUpKjQCEG){BoejwnJRZDCC5c&#-W5yv_OwE{fmdp@bA)oHR=UasPP0r;gNrSDDa!M zi^y05>vx?H(I?k+@kC6ErOwRLnU$9VBo`E3=(f_(ySZ0c(8}}*M^+j9N(?twi~WOR z$@T!PiNyrejqlD_Z>o}BPa7R+pMLq~=$CPTwIzR6$hf%Aq7-c}9%tsHxj&%{pJcgj z3m3rFnoY@5tMCMhm{wyLmB10Jrbe$c8wyxQPFp>kCbVny2VoLm-nqwQT(PFjSwS7o zs3|*rMNgtMv@Koin6{Cpwg)!2+;b9Onom<;5QUa`-{3S;fM%MAJ3CE~#S(1t9GEJJ z26km`i&?z7(kpv_mNv-n3~IU3eAbF(;?pO#XqPAfSK%rNY-aBBjuA zV&QgeML4P$b=xnRR2MRuT!1$SuC>>(f2r1UD>xcVw#7OYy=;WtKA$@%;K)78?7#$iKRr)0!;CFl)xkJG&LGoI>{mJ|! zJ4It#V?jQ`Tt82^4=mi40OX;8Vg6e*k%nOo#dHL4g)VLjL8~}l;hA}X3x;LYfl?vqm_U9?cf`&|? zR8!h15{tP8L`EJE;E^nuC#V<6G<3Xn&mPFihGAHKwoQ5^#^Fl+pc2Eaii)-jtsoxr zF2Fu;^3A9nuAh7Iq_5OwU&)R)VY=GN`$JHxBV)mtnzgQ&sv0S!(c5lA zfAe;x?t2MRz2vD}hL!AtZjmJfTcus=cmXhQ=w!&eRaLraGNoshELeYZSGnLzeo^Ec z*rE7;f;kWsil2IlsL5+53y$EfLNWlG=?00pSIq0;#SFrj)vZ~CRwSsuwrGeKY#Ab^ z@If-|(l_KahjH$usMN{!XWaqRMU3Ex+YayH^)5;INwuDJVMYij!Sg|;ElvE4;@m8& zXwrUaH!u*D?xUfU5-mR)oGNzywyBdR^PxwrC^yI3&p$=6`c;PzXmajwI$tPvJ}vRS z$0PTTSs42<^EKDa##&GNv|#fI3Q}WtGQf8^&IukS%+>LPK#;I4o(T*UM5rovfQPGI z>)Am(Y9)Ev?O}^9Po*E`z?f@A{^ldv?pcZZoz%bUv-6^nVz|3aKe1<*gw@ zbrRnD_*0hW*Joj&1?bzsjfFLX^qicS(&x9XF^N@s|44Y`k=~cyI8#?`xlo6$eX%(@ zd;XF`Z)NSbh!&7X{NnYChXIb}$`Rw_T89?+7csD~m$EP8&;w2Hr&eO>chzN#+L2zG zmSM^55?4nd_hvVkMZ98iIHqm16<|!vKJJCr7_)whD?mm_ zo^fGYM+_ij@HbMD+k$n&{z7Ymc_B8jR1=qoDKpFpPp5?p3&7snNYYnIaJskNi zuZewuiOR{NLwi1*%M`m}1<&VA;sKMXgA5(^rk?_tiy>h0tb>xiG>8_~2Pp}>-B9gnOV>2A*=6j<_0I;kp0+K@_};#G%0~+?{f#v{^LhPS z{`h%~n5UXrKXwK1EUba?ST$P~U}X6b{^XH4>IVH7pnK$th;j6xyCqW8ZB$F|*4q=M zdln-=J9D0Fnt37i;pxT+^z-=*86+xlRYd2*@=$0~9${4p%vw+doT?iA$;a6X4*!L( z7?`%Co11g2)6kEKZ#;RZHNX3o;ulEBCD(_@6`9`s(065~`4*LWw3d0kO)=c6g>Lj+ z`O}k<=Rf(bG^*J3*G#}Iht|Tz!Y#~()YaEr;nvluUPN+#jSzNuiQwmT#>OSA43(cN zwJ#kz;V3K3_xT^KM1(m--focdic|(td0Xt#=_y-r#RlFA+1)CKjAw>_P1+khRKh!i%P zI@gBSwdl5s*%_q`&gZ+KvX&-=mw6Y4*5oi3a_9si-K1l7uaD+|Cx8T2S>zd?t77VZ zkqiuPgh1M8I}>*pTv+Zm=aSBpNR@Mt6&sDko2)KzOqj|kQ9P|L^R=tl2qB!Qg^$qb z%B!X*>Q6q|!(oYhiZ6$37A-vT0Bv1^GJ1lAhGyByIA^BSTgs>+l^ky*&bi14A9G&d zNi#JPN4u1iA3HD9+kKhvEdO@ES2OD?U)C13uo-|WJ8G!kQ1^4s_`1CO)!Xc8UF0dCn6o|S zb>PzWAUqz%K*w_SSX_#_!~m-8I#ws+LamyYgCmf%h(dMdBSFf|j+33!A@P9?GZXxm z%Jf0c{xW?iBv1Zus)AWyOztpe4T)~$^g(R0lkAyvMJZWR z@tE6u?qR6kS63laWVWXSXLPeK^h2h+(&~MSVskF!;xaZe)(phuI<*-u+x^gJzrCk1 zewg3XFE#TYJJPx9Xh)f>waJUr{1*z*e3$qK{#uCs+2Zvkg%PsOT>|N*p1aZ>nU|Y# zP;4>mcHYqYqFa8Lu;-j$Zoc2j^0Rw6sXd|FGmG1A9l5jG>F%3s7IT#RtsglDM&5rR zZv}bDPLYp8DV?j{t3cig+y#>Y^nXPr@-?U;w2vqE!CcJvyRSP+-dK$W>&F+|%hOQK z)pxPYGQPB0L=>FOkZb`B>307{r22m_9gqH+5`^y{g%$N0F;xPtjF?CF_GF9TbeOVf z90_hZ;R>{%p|^|#>LYPZU?ZrB*^}d~Qg7yotj*7UCT^HwEqO)d`ta;snt9(&flEEW zEnmy~a*HJox+;C;E`F8Njrr{(4)s&%x7g_igF6{yUPuVS-YX!VyFKgVp%QPJw1d zMHa7bJ!Lnqr~YNs708Kk=v3tzNFgBmd#5w{+j6x?_gbF=%ab|w0jC5G!; z0)EAhgdcSwH`OL4$4`t;^cc3Koqr3PvtX$4b`@|d4D1T$oynb)(QI&GEny>B;)5g@ z6(+Js7S*;e>&fWv6p6E0Jl894ds!*qUB-qeF;0?@aT-&mjew2|nd|6AnQ-gZ_YK^) zVr?JbiMyCzub$rUVrm3Eu9R1w#>SkxX*9o|yAJd;vv1g-eLe?do^4=}o31P}<7@|F zC*Ic(Zu#={fF_Z$%XJdk+Hos%%aa>Kf-tt&B~Cm1jGdrjUCq$lkgHYI570mELH!IF zpjn%puDDFi>%>R%bRf&=32D^T0i4D(L1aOCd#Tu4o-JWt$jeT-8KDEmxGz3fBwn9- z@zLx6p0tiT#SX+bgW=_Yfew>f=%&;Vx+x>?9P`m})P{JjG_$>M&pdK3Zd=HK^on)F zcI<~qu@|UY&R0J8gSL#KutvenYe|>SH^yfj-@=o#b)dsI;z-_(Rwk&9DKlRf%D85H zr@@w((_>>lc)}bMvA;N`-?lo&A%KdJQnIeejhb%M8AH3ycm2WIOb720h4N>0EBz6n z`8P-razP5L-DzO3Sk{0JX_mzh07s=HIL{C8;1Tb|_58^92ym~^8Y?lJ@PNN?Nv!wl z)Xo(zhTGG5s&{IxOZ*L)^I0L@nu9#IpiPjO|Jh#Y1&Yhd?;QskUMAb7?cH@}D>wgnaY1?9 zD-%%dsZ73iTo1(2<%Kc!{QIw(0S2Y&!2e+=JIoO{`@q38{4Wox3lY))?mCL6#^hBl z+zx8&14$6CxGEotn8DU?J>j|tX{IX?iAf&rG4mw#!sX|T2m0U&n;#q}%GQqjI-(xw zfmBU7(n;(<-aF^y#%cUW%+Ly}1={b&>OM0%-4ZP7jJw9@$lO(DvjcZ|%8}y#lBMTY zKZ#s)6AvwS3AO8|=isV2^;jU;Q($CNggnKTogN~csQh9E403U&izq&$HIH7Lf4sa# zHxWX2p|%9NAPGzPq3bB7sV?!sen={ zqP8jJ7M2VY^uEXuN@s9tle!19A|<&=z9&c?`W+1b8ZwmjB1=0A}P`$Rc2$I(Udt75{9a{_F)R@!ia!b|z!kSO^Q#+cQ>-P+C-^5>%_ zySCrBzd09$nCgN_LQ{^efT6D1e5p4g^+DIb&C zuDR=CQ(Ygwi~jAk0JGOB;nbnDlh^)|I^`!Qp@4W(@`$PQVfE#uGx>+rKmN}55cw^W zp~%~n0-Y*!MQu=sDfDO4D>5$EPiZ4|;}jX&lco-o_=Vip zMmbcO8N4HCA$HG)9D5g1{xo_N^yeZOAi{xkLE=tO18g^914K(?bKcH%SQPkaU8vCV z>~uA-@U^y{idre9AYd`Yt=N#g9_3Oo=Y=u;Og9g*$HeXgB@cKpd_4RVUR z#e;*rgS|tpe_FCQaYDBGglvY_FJbP(huxu}Mdls*o{9HmXQva%aE;88#$ZxvBY*Zo zv>h6^0)30f2iJ$dPgPQCkxN^cw_2KxGpyQI|Q{LZ{<%h z(kQKm>PnpE_2?Z1-c-asOLtcEXAX)Asn_HjSubFptB*<1EGk%lEt)fiJ11dK1!E52 zn{mqOb@Kb6hf@SWV9R~tQ&r)22;ZT%KQ@ktDmL@XRnD-~wXO{nSN)pg8fWft3A9MY z75&#W=LO4p;&^s~b()on{>a#{rB44qP~V1YO^8(wI=plIk+pG{z)6Q6pzWiXf?rJ| zM8a6^cwzi{IIn*{FFE}`El&U8gBFQcw4$uewx`(cAyyS^#eWJ>6XyzefLBzIpYzqEo3*t9=+K+qkT z!jXkMcl9=9GRQ1X#$a1&VfKXfPd;gEPlt2yQ;$ot?pw`Yecrz(-=d-0OGCyO*gO2K zoXATCXS2~2NNJYL*_X+B546w}T5Y_>3NUy*Zk`Vf)2^K8uAf!WH@-rdg6 z%8Ks3zd4*BzCC@aR|_hyR5&-RF$?>oj31EC+!GTA9vG-O(gl9~i2|4Qst!l8X1d zwOc4|w&t<9Ux1bs?+B&Vbcw)JVIAU@7#)x3$`e=bu1hl7gYCM+7@X*9SJKH^PLEq5 zouVaanSYl%(KadH(68Mko8d!W>5~%4mc4_oU&rUh zN60f_&G>i;`_FN-OnZh>MizLBL26$wiM!CxnlX3R6~%uEEgo)VJ!sG~-SN8!_2REO zesNtc+KKw6E;s?CS8}CnsRbDlPKrT>Pvq?GE*YN%1qa}Quy-r#A*==@X%Q?fXjWr> zpeAJxXD@>gOLB<#!_YhR`s(d^1m+YkOSyq+nb6Sy|y(Y8oe|rWB`*g~{U$xrD_|+sN zq>=}EMV6lY$65T9Q)o#ej3UxSSd18g@#*BSz#9LVjvGovl*zS}`YXIvo2GA#kZ zErOX;l+Ma4fm)lhhEqd?GpamMrAQaU+9LNCKF$^CgB^L5KASoB`ds93b`oy)OWTVM z^(Th88Z|6elIk@7eB+Tl=KUSfkwqq@Kqnli8}VA?SXf<2yMC8U97$ywBgN}!+V(kU zr^Z){u!#_AWg;`gm1)@6*mXFDx^$!IFyvH{tkC0+Q9M5V>ArnsGzd}sII^|O8RyJ+ zgg-J~ud`K|lwgjNE8vJTdSW>N8j&9>G@e3b>Jn&5f`jE@}a^u|7p>OH;=OYZgMjQ%f}`+YIABz zZ8Qz4hFDE07W(T8VcdPzZq1*5r3CS57>-;Rp{E=y-CjmIU%L6NRbqfyq@ zJV(^MOscqtQ}aDYRY7vPD@pCg8v-ce>|SC-VbMH6HZ8}l+)o4W`~+}H%;Q!!8axKX z)ihjM$!O9^ndSX!62ys52W#VZet3Y$9Q`Z9)=)fFG+A&Bt%+;M9&-uRVT>KhJxLL$ z8toLQB5WYJDMTR=!HD;H)gm!kg~#S|@j(5 zY$w_B;tq(AcgA_8P5P9?Cv@$q>Xz9JFi-*}@>I~wy$rI}{OwRfF)kQ9Wh}3qvTvxo$R&@QxGvCiZ4^0{V=})2J-a@6!G~izDRqCyHY~1ZPmtAIju%Le&gMWQG ztb&&=kc`#8I82^;m?aWloUr8uq{u3Q?7~VW3_RytEYYobdjkC~c1Vo#TLce_OW4#7 zs|S85kU1+38>Hi9V2s-#9dhtiX2o*Z0XeN6DT+;g)#Q`B6}&D+08yWEqH)zkCN$$e(>S z{mC~1n38#$&kVL8rwPx#-R_C6X@s=`@2Qpbo;}!D+x|5}A>+OZuckrmByanMnAQt@ zYh!92X|z>f+uQg$vhUN-j!AT4d_jzochF^C53-8T(hbblm+rDvIeVFh$7qNsay8~{ zPjuGiO2P#+UZhD9i)?Xz{#|2a>Y>EwxoMmxQ+G1yiQq#i8{B#haW;XRjj?J@Zt7k4 z?z06UlIc-v<51HMN^+h6h)z~wa+RTWCWQu%ZW6~GXGE8bu7hp|h-{N+*{>1e=~rIy zXr*B=DCfLiZI(_{p$igyd-9o*UT|v3B*jXY6ibERBQviMgs;in{QqY zXdL2;&KeCByG^=rw%~A_U5O3vQ=y9A4`9*0oRj;}|9J9z*@mf;@jm;=Upp4!|7-6{ zqngULbwNc+5Rgs~gcO~KbT%Lgn5c+=h*6Zji5AjENTHxnLSjegL=;O>VnIrfPMSy) zLYqi0B2x4cgpi;pO(3BOTN2`3);;IFJI<~1-W%`SJKmr7i?9h}WM{86*PP${=J&k| z5G!CH!~GA1N5yS~%DqR7s`x`qz#Uw_x<;l;<^#aU&f$%#ZXe&~`7wlU;Oit)c6M*# zn}{t=6;K3a8T6#@lp!wGfORzw8K9EHx?eQBQP_5YH=h-c-#yZ`ePgVhcuU=_NH%P{ zr`PeDuiYJ~U7Fr?3j){K#7t)R*I{tQ&g5(hc?E{mA>!0IJt&zk!_*eA3LprG( zwb^CLG${2@`F3c>`n=k^|~t|v9YZOES011Hb72M2IU4!X@$J1sm4#fEaK;dHu3}B|pD8GtkViw{*;{ryj+ATIGmy81LTFt~k0snPYmu zDfsfbx)B$EE314Mesx${nB9Yt1Y!69;IhCf=0z%ff}eRqTuGi@%hrVs(}t`}zUC`6 zk3BF|+-^Q?*wxRuNvu~U6?D$&Zf^+lW#T1j*Fjf7SND8&{QR5$v1^S*;CvsS0u|oQ zjU*ue?HU~|DMYd4z`H^oS#Z2(4lf%*+dmXE;XH`fu`lc*@EuSUM}(Do(8Q6(xhe7? zoNn63qC(0npmiSr8|^dJLA;60L;0;ep|6LYA_p1a=J&KUtNX&od*`xi9*uk4j_&jd zpRpy_>?8$16-hB4UP+t;y29ZVi=H_P0nsp_1r-57ngI<%hAP_8E zkB9(*X@Q}o5v8R;!5N%MPVn{MERXAfkC{%}G82DPE%;N@y8$--O`_RcSrqcU*kQx& zSafCvv=WqXXf|U5L^xS-JZ*C29ACQxoy%;N*{NTa_Hoav18#;ug?beXw>Fj_HkiRT zgBRNw!CX7nm$5e9P%{O09HJF8n&=vN5BULK;~ePfC*FETbKIWazpV5)eucaAhsgJ< zt|@sWy}Np<=67sWGxDqa1G*V+vJRe5WI#_j6qh@?)-W`kqPp*H zn0;HMYx1a*U+6TDs&L8wh&KS7U>*i|raTqMLAUZmK0JlnxN!b84lO>PxY(qPSoEjHj;8anY+D?2u45E9$tg816^dB$IAOMhD!wQT3+s<_4- zIGbvE;JD&gkNZ&Foap`jG49Lkq+KnlB9NChvKf`gdvic9yOU8KT}pky#3BBGE4m1e zqTw*&nXM_MP+c3|f)6AEUtL0 zb=hfH)JxF&vshjH_foazw?9i&Wxg?cg$Oqh*@6H#ukn6IAzLAVuE|^}Jjf@t+t$+!&utS1PYh_|6NyMg-VzaOL0nIk64GjX?a25C-ZB>9!QaMDT1QUuLB#qk6YDL}?<`EyLCU6Pq-b zJ}jY)u91EupvbGXVlC}U@s0FHKX=CDj(Pj(cA&m|2WzLlM|#3}GBf`uAQ{II!u-H2 zn{eW8dgsP6SklG1ez+Xk`W_msNN)DG_WW4gOFCPZ*?K>b<9xA(nj+I#UUh!zbIb{d5JhJ1>5WXTGsB zeo_8XYngDHbdzp@`w4Q>bLKHP?JW%ALVXsxW854VL^dv1RO`JB<_U`O_c;+S)Th1I z4}Ro7T8L+{Xs0N-z~zR-eJDKbH+3V*wGkciO+t&lhP^9g-R3%=p#* zQvS;VH)@#tmKk@gyijaT7%xQeu*BOLh(x#oc#?ZMgRHJ#B+N?#X9_hF&l4(%#}n1SUczvB(?SV$V5@#i|$g0(Q;!YiP}kl zz7FD?il#Ltiy{|o!~py1pEE0+{Q42F#INtez2gr2`kRKtEdEE_5q@_oK?8cqL9|e| zqQ?#b-B)T%7opYPln>9nQZ&O9lo5X_B6+AsqbB{AvWgs92w9WGZyn96#_NmT5F=K`g+vtlu%Z5j4uuD?)@WyHB`YFNyGqk9Xo+1s3vu>8FSY^)@9AK zXzz!d*f6CTt9^bh!jUJz{n0j0E>@FP9@%VzO$MB~*?NxBt&x5?E+fso_J&t(Zr?PG z&Xg}!F`1~CVh(%nY`)m@;dAJ_g-s-03yIuA$b_ z(j5U?Lfh!s!-US=G?=kJfKnI4zKZJ5X_=dHW_<(akmYvLX78pX!oNXA3CzVi8 zZSpuKg_@YfnPIml_!IYLC|SVa?I8p*uQD5T~m`N@vY=iPKEa z$rMk*<9Lypu~=>r0tFth^2Iawr4l$fVSYl|{Ut*Gy;0i7=`rUw1Om6vd zDSLG7NoeJc^o0qc!ojL$iKsgKmc`@+p{0} z4ZoK04PUW_X)RlMEIYO)BOTPi^Q|$Pj#ZJgb!l+7?s!|xof$00UmRYbe?s%a11?H( z!4^YfL|f=Hg7dsAkl0Jft`*g58j!e>K<(}wS&|OJrZ;By!?)lNLqBR0Qlbx8&sk

w{bqNbrq~|M1`0a9Z;}e5OFw)?Fc1Atcvtd2u~YuyZ+~|J`tKKO6GxJH*TxaN z1@bNKojXE#+XiST?%n-4_r%5B~T5Wqm z<-E#=&SxXeg&|XU(<1EZH_wp&X;eB~1l zi-%#)x-)tsFterghc67;9^u4ZFs0-rI}?gv?8;ltvOcUm zf9SO(#_UsiTdEvlCMkN^gDS}~2VX6ab!bG{Dw@8T0r(+zy=6mj$NDf0!#MWP(pPVn zMh)3a?N$E8oa@& zAP#gR?f`Ujyd0)T38<`EiwBv(@q_YGU@FIa7PImFz2Z}{@WMiqX_+_h01WN&n7|Oe8T*62{34p!hLTB$jdG)cI)&!Xc|-KkObec65`cfoRB{UWwcqd`QLGvzrhgO&z z_K~2LKS|zQlk`nuB1%vWX>8Ko;AJ|*&PvwGkBhd!mP%&5Lv9&CtDR;ad2*k_>LtgC zjM%9gLO=tiUX#sLYocrRg#Y-mHwvZ@ntlWRFmKqq<$(`#I8?Bu5sd+)wujmFN;h9f zhe?QWi17!&We_n-0_RjG?GMm(XKEn?iEAaM+;ksu(wKg4KjiU>R$*5agNehdGMvty zKwnJ@dDQBi(ZSKIZc%Q^uuc3pwB+|UzSVyOod0*PJs`}G@PP+(Wt8dX={M@h^63hV z35>MN{gnF_Dc1^=+*9OQ>v^xYI_442VLzn|_*=QVOWsnQm}D)2Y9W%avaQDsoGT-Y zLjV5-q8blyP;hszlROdQPfK_?xSptiMY57HR2vFl$Zs7;AY`n?owZCB}u1-=`5KM!D{=)M63F9)=Y3qy-B zZ*$((WYBz2{z>z1Yp;Gz5ilnD_~K%M%-BIFm9M}d(##X-2GC*~LDAOfXWwp)!geUf zmmfjf^Z0GrlW0G@@HFE=htA%E*GFQ~xakK=_a+%nMvPJ1uV%*I#_K@9j5~{}095a> zpW9#xBKwFQDxEP-Rz~})4E`QMew+Agz`}S$_DjY=IQGq{T-c*4 zw~>uVB7i)MdkC0RBoNf`(%6{eeA;cgQP}N1v68ul$hfwlg4Zf|I^mOWY#-WxClAkv zd~U=Ke|t8}-=MGF83Vd0QZ1{4BzRFN;kOjRH3lyfF}sN$zy^nu1|tFt=!umFaXO&|EdT1Z+M*|I=7EnET)(s&yS1ufY&CjsQG`Q`UpOn8MmZ}Cpkx4MI1|-O zDC?f3fiftIA4G~Q{lbzGYoqadK~EjuJ87&*R-7K}$<2?)S;;NU=)0S9V2Z#bWH%jK zD)lSfN|*U5d+S21DM|^1P6yC!OYR;C7HF>J5(2rqR!;TR+woEC)-f_$mK*R^!=84( z{!n2keGgARqxhl8BcG|9Hn`Rwt!p3lAT2Ws)2B7jPjo!>S2rzQ1`|4;Naj%SSAypD z7egM*X>lfUfwcCL0N~pyD{jvOOA(q75Fz#iMrnA4=1L_smst7sFCpUKD!q4$2fY>I z#M+@lkys4!Wm$aZ-O;YV=#uGP`?Va7oR7yqUJc_ZM`Ou6iLps+Ad-XPIOI5(x~&`s zMf|Rys`|nu2jCENv)8;vZ_Fwl@^+;cUVKioUE6 zbu37$78&!_b|$-HL1wQvgOXIRUSXgf%=rQ#tW&x%7# z6>boB;;s2=O-7_w8K`@7IPL^5Zgom~|A6$pW?#sI&5FZ0T=ekeMW^J&hXBGt;&O`8 z;;BLEN4`8MyZL%x&MG5Ys`n4s9oL{OD4-7B zf9#N0@WLw4Jo3;l@a|nBZVk0yP0c<}yG`?3y8-kce1mTJ{a=T)_8xoYK*%dV@tueE zUlGd;11Z^Y9=R1UOaMW^a=ry|53#=fP!4va5v4*s0)#g=siojmNBxJPpM);_k`~=< zREi1~fvWCRfvP5rsOCyjV+J%3F>Z5W(avPIAwh{vl<=@&ks4$OEa~-5_gbPfAP-l*G_gKr!dyEvef94CUYGH@qWR5`l{0UWhS6#z zC1Ap%7lRMPJ1T($_)_%JdqY>xu!!8R)Qa>us}-NG;j!Ko(~;-OpMIiNjs!kiL;`rw z8Nvt-uB8JEw{Og(cg}KDbDYuKg=s_aQklN30arMOyqOl2ym=yLzg&jhF$eiF~A=V!d@?~InCzI{-vL`Y?|qV9qLckxEi zQ9iOM^`7=dzIihtK`b+{qepahoTV1(VGXazVKozF59Rjiq%kMelIBnKn`VR~&h>q+ z>W`W!D$*>9Njz}H>D;M|x^o#Zmp;c{uN(FrTBM!z-V`PVz`*+MknAM>yPKe@U%#vX zq`<(&i(D%MXC_Kjq{m@MioE#k$#7-wY34E17SOVywX9|}@D|&$}38oHRWwv|t%x^v#YQ7X|sik@Pn}l~Nkq!qyG?3f{6W}>)qrhq&rG+eo z^=Kd4mKB|1NNyJI`J>p@KF4LRoeAHhJhV2Y;&mC)B5d}kv+m8$q98^fWf(Jo;->Ox zjW7xNI;^o5KmWccym*R<^|Lv}sPC;ef9@ByHQkzYPZU51L|=i$J@=LSI%4%cBQ zzMmR&d^^`?ySr2T8X*Z+2?e#jlxQoYneDq)aU9ymd&=%^O3_{H5F(hB-SK#Zo_d`N zR|JH;D7|iK4~NvTcyWPtX%QAN!416pV!+gGu_NcS_sLyhqvG+Z ze65FmR~iTRXJ}=k#fF1`w`=1)^r*$!KUwZmdTL{oq0 zEXmeoLdzc@erEiwb)1qLU+?(O;PnQma#uX+FZ^aXm|OV4&);`O zf5|+7cv~HTUQ=L<4}&B(xQ#G!r-`8QC((x)(=x=^BHk^M=Lu3KFj6?z0jYeEzP}~p z5gii@05_{P+LnZ%!TK}fYxoJrvz(D%^ZM(Z^RekHv65`!a*0{2hcECt)ez4U{yT!# zO5j4#a>8+W-%`=c?85N$s%dy|!_su1`-l62+7bE;#y?-sj%}wmED7ju%~t& zGyS;gO*a4sRI0dBja=0|Yb87(?qs^nW#(h!IgIAy21Jt@v;9|#WQ-Oz#%-*Lnx%t%fOjJ*K_Fou}qCUCqOV0b4AKlp*LyJ|dU5!?* zaKB3PnI%*Jk`oL|;Lw`M61X$GU&=pVJvhkQ^~MwPo4c*s9(98xN&Snvwr)?}6PaJVa+{x)V%sZrg}wBy`u@$*#|v( zWlic|P57qJ7bX(()%$DHDqQdLA5&?^v$~Nkrw(*Aj-vbg3%*I1fbKnL-HS8iJ5*_a_u!?$jInj+JhLtMUxvES7q4rsEX(5WEs^kfiLS z?;UZA-L-efp{EiWbHDCqvNU6Zj=HXunZDcaNups+cDkl4a`W?N*H5@l{zAJttY76V z8kDa0&AqnZUm2of-8adiS7+=UD)PTcz`?4xNm+pHn-edhj)3Zado$o6li}4Zcc^jLm{h-ARYLBLDBS zwIC!@25n4E1#)h$$SFe_my9v_zBqr#9^?R=bIjOUC;bkoUx56DfND@|WYYVl>~K$Z zhsk}FePwXaHvA`d=X_VQ?yk=q=cy?E+GxDU1|%y*-y|Ft*FYTQE5p|j79}12@~XW` zLnh+uih@Xr@Zbu39>|Mag^83s#1B6U<-iBpfdehm$#wL2$VrI6NkQxL#zI)@;6I3T zA)}mWbCnF@V;=Azy@TH#N}HE_(6o{cm+y%}`{dv4+LM@{_%_H(MzNv%jLXqYqeqQa z&NzvGFcVe`fvoD8ilv{i^H9{t8jvTxWSIhUtElcUuhT?J<1A z=$Ic;=j|ik4#qx=e~xoffset\"}}" + + ",\"lag\":{\"sum_bucket\":{\"buckets_path\": \"data>lag\"}}}}}}}}}" + + ",\"query\": {\"filtered\": {\"query\": {\"query_string\": {\"analyze_wildcard\": true,\"query\": \"*\"}}" + + ",\"filter\": {\"bool\": {\"must\": [" + + "{\"query\": {\"match\": {\"_type\": {\"query\": \"kafkaoffset-e3\",\"type\": \"phrase\"}}}}, "; + if (group != null && group.length() > 0) { + query += "{\"query\": {\"match\": {\"group\": {\"query\": \"" + group + "\",\"type\": \"phrase\"}}}},"; + } + if (topic != null && topic.length() > 0) { + query += "{\"query\": {\"match\": {\"topic\": {\"query\": \"" + topic + "\",\"type\": \"phrase\"}}}},"; + } + query += "{\"range\": {\"timestamp\": {" + "\"gte\":" + (new Date().getTime() - 24 * 60 * 60000) + ",\"lte\": " + + new Date().getTime() + ",\"format\": \"epoch_millis\"}}}" + "]}}}}}"; + return query; + } +} diff --git a/doc/test.js b/doc/test.js new file mode 100644 index 0000000..2c265fe --- /dev/null +++ b/doc/test.js @@ -0,0 +1,5035 @@ +var data = + { + "took": 63, + "timed_out": false, + "_shards": { + "total": 2, + "successful": 2, + "failed": 0 + }, + "hits": { + "total": 14400, + "max_score": 0, + "hits": [] + }, + "aggregations": { + "aggs": { + "buckets": [ + { + "key": 1502780400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502782200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502784000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502785800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502787600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502789400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502791200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502793000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502794800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502796600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502798400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502800200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502802000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502803800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502805600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502807400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502809200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502811000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502812800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502814600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502816400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502818200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502820000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502821800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502823600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502825400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502827200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502829000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502830800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502832600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502834400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502836200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502838000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502839800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502841600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502843400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502845200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502847000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502848800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502850600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502852400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502854200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502856000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502857800000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502859600000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502861400000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502863200000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + }, + { + "key": 1502865000000, + "doc_count": 300, + "group": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "group_wishlist", + "doc_count": 300, + "topic": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ec_wishlist", + "doc_count": 300, + "data": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": 9, + "doc_count": 30, + "offset": { + "value": 3629697 + } + }, + { + "key": 8, + "doc_count": 30, + "offset": { + "value": 3625326 + } + }, + { + "key": 7, + "doc_count": 30, + "offset": { + "value": 3629666 + } + }, + { + "key": 6, + "doc_count": 30, + "offset": { + "value": 3629182 + } + }, + { + "key": 5, + "doc_count": 30, + "offset": { + "value": 3625964 + } + }, + { + "key": 4, + "doc_count": 30, + "offset": { + "value": 3626303 + } + }, + { + "key": 3, + "doc_count": 30, + "offset": { + "value": 3661626 + } + }, + { + "key": 2, + "doc_count": 30, + "offset": { + "value": 3631341 + } + }, + { + "key": 1, + "doc_count": 30, + "offset": { + "value": 3633018 + } + }, + { + "key": 0, + "doc_count": 30, + "offset": { + "value": 3627677 + } + } + ] + }, + "sum_partitions": { + "value": 36319800 + } + } + ] + } + } + ] + } + } + ] + } + } + }; + +var http = require("http"); + +var options = { + "method": "POST", + "hostname": "172.16.11.225", + "port": "9200", + "path": "/logx_monitor_kafka-2017-08-16/_search", + "headers": { + "content-type": "application/json" + } +}; + +var req = http.request(options, function (res) { + var chunks = []; + + res.on("data", function (chunk) { + chunks.push(chunk); + }); + + res.on("end", function () { + var body = Buffer.concat(chunks); + //console.log(body.toString()); + data = JSON.parse(body); + data = data.aggregations.aggs.buckets; + + data.forEach((item) => { + item.group.buckets.forEach(item2 => { + item2.topic.buckets.forEach(item3 => { + if (item2.key === 'botdetection_tomysql3') { + console.log('topic', item.key, item2.key, item3.key, item3.offset.value, item3.lag.value); + } + }) + }) + }) + //console.log('df', data[0]); + }); +}); + +req.write(JSON.stringify({ size: 0, + aggs: + { aggs: + { date_histogram: + { field: 'timestamp', + interval: '30m', + time_zone: 'America/Los_Angeles' }, + aggs: + { group: + { terms: { field: 'group', order: { _term: 'desc' } }, + aggs: + { topic: + { terms: { field: 'topic', order: { _term: 'desc' } }, + aggs: + { data: + { terms: { field: 'partition', order: { _term: 'desc' } }, + aggs: + { offset: { max: { field: 'offset' } }, + lag: { max: { field: 'lag' } } } }, + offset: { sum_bucket: { buckets_path: 'data>offset' } }, + lag: { sum_bucket: { buckets_path: 'data>lag' } } } } } } } } }, + query: + { filtered: + { query: { query_string: { analyze_wildcard: true, query: '*' } }, + filter: + { bool: + { must: + [ { query: { match: { _type: { query: 'kafkaoffset-e3', type: 'phrase' } } } }, + { query: { match: { topic: { query: 'EC_bot_detection', type: 'phrase' } } } } ] } } } } })); +req.end(); + diff --git a/docker/app/start.sh b/docker/app/start.sh index 73290c1..e7bf87e 100644 --- a/docker/app/start.sh +++ b/docker/app/start.sh @@ -14,4 +14,4 @@ do esac done -java $jvmopt -jar KMonitor.jar $option +java $jvmopt -jar ChilklingKManager.jar $option diff --git a/pom.xml b/pom.xml index cb36cf2..1e2f3b3 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.chickling - kmonitor + KManager 1.0.0 Kafka Monitor jar @@ -125,7 +125,7 @@ - ChicklingKmonitor + ChicklingKManager org.springframework.boot @@ -135,7 +135,7 @@ 3.0.0 package shade - com.chickling.kmonitor.KafkaMonitor + com.chickling.KManager.KafkaMonitor --> maven-compiler-plugin diff --git a/src/main/java/com/chickling/kmonitor/KafkaMonitor.java b/src/main/java/com/chickling/kmanager/KafkaMonitor.java similarity index 83% rename from src/main/java/com/chickling/kmonitor/KafkaMonitor.java rename to src/main/java/com/chickling/kmanager/KafkaMonitor.java index 3c17695..afe58a0 100644 --- a/src/main/java/com/chickling/kmonitor/KafkaMonitor.java +++ b/src/main/java/com/chickling/kmanager/KafkaMonitor.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor; +package com.chickling.kmanager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,7 +9,7 @@ * */ @SpringBootApplication -@ComponentScan("com.chickling.kmonitor.**") +@ComponentScan("com.chickling.kmanager.**") public class KafkaMonitor { public static void main(String[] args) throws Exception { SpringApplication.run(KafkaMonitor.class, args); diff --git a/src/main/java/com/chickling/kmonitor/alert/DaemonThreadFactory.java b/src/main/java/com/chickling/kmanager/alert/DaemonThreadFactory.java similarity index 92% rename from src/main/java/com/chickling/kmonitor/alert/DaemonThreadFactory.java rename to src/main/java/com/chickling/kmanager/alert/DaemonThreadFactory.java index 2867534..b12e7f2 100644 --- a/src/main/java/com/chickling/kmonitor/alert/DaemonThreadFactory.java +++ b/src/main/java/com/chickling/kmanager/alert/DaemonThreadFactory.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; import java.util.concurrent.ThreadFactory; diff --git a/src/main/java/com/chickling/kmonitor/alert/KafkaNodeListener.java b/src/main/java/com/chickling/kmanager/alert/KafkaNodeListener.java similarity index 92% rename from src/main/java/com/chickling/kmonitor/alert/KafkaNodeListener.java rename to src/main/java/com/chickling/kmanager/alert/KafkaNodeListener.java index 621b214..323ba03 100644 --- a/src/main/java/com/chickling/kmonitor/alert/KafkaNodeListener.java +++ b/src/main/java/com/chickling/kmanager/alert/KafkaNodeListener.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; import java.util.List; import java.util.concurrent.ExecutorService; @@ -8,7 +8,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.utils.ZKUtils; +import com.chickling.kmanager.utils.ZKUtils; import kafka.utils.ZkUtils; diff --git a/src/main/java/com/chickling/kmonitor/alert/TaskContent.java b/src/main/java/com/chickling/kmanager/alert/TaskContent.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/alert/TaskContent.java rename to src/main/java/com/chickling/kmanager/alert/TaskContent.java index a478c91..d3403c7 100644 --- a/src/main/java/com/chickling/kmonitor/alert/TaskContent.java +++ b/src/main/java/com/chickling/kmanager/alert/TaskContent.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/alert/TaskHandler.java b/src/main/java/com/chickling/kmanager/alert/TaskHandler.java similarity index 91% rename from src/main/java/com/chickling/kmonitor/alert/TaskHandler.java rename to src/main/java/com/chickling/kmanager/alert/TaskHandler.java index 295ba29..72768ea 100644 --- a/src/main/java/com/chickling/kmonitor/alert/TaskHandler.java +++ b/src/main/java/com/chickling/kmanager/alert/TaskHandler.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; import java.util.HashMap; import java.util.HashSet; @@ -9,11 +9,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.email.EmailSender; -import com.chickling.kmonitor.email.Template; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.KafkaInfo; -import com.chickling.kmonitor.model.OffsetInfo; +import com.chickling.kmanager.email.EmailSender; +import com.chickling.kmanager.email.Template; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.KafkaInfo; +import com.chickling.kmanager.model.OffsetInfo; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/alert/TaskManager.java b/src/main/java/com/chickling/kmanager/alert/TaskManager.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/alert/TaskManager.java rename to src/main/java/com/chickling/kmanager/alert/TaskManager.java index dd8ea56..becbbd7 100644 --- a/src/main/java/com/chickling/kmonitor/alert/TaskManager.java +++ b/src/main/java/com/chickling/kmanager/alert/TaskManager.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; import java.io.File; import java.io.IOException; @@ -14,7 +14,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.config.AppConfig; +import com.chickling.kmanager.config.AppConfig; import com.google.gson.Gson; /** diff --git a/src/main/java/com/chickling/kmonitor/alert/WorkerThreadFactory.java b/src/main/java/com/chickling/kmanager/alert/WorkerThreadFactory.java similarity index 94% rename from src/main/java/com/chickling/kmonitor/alert/WorkerThreadFactory.java rename to src/main/java/com/chickling/kmanager/alert/WorkerThreadFactory.java index b9140a0..63159b2 100644 --- a/src/main/java/com/chickling/kmonitor/alert/WorkerThreadFactory.java +++ b/src/main/java/com/chickling/kmanager/alert/WorkerThreadFactory.java @@ -1,5 +1,5 @@ -package com.chickling.kmonitor.alert; +package com.chickling.kmanager.alert; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; diff --git a/src/main/java/com/chickling/kmonitor/common/ChainedComparator.java b/src/main/java/com/chickling/kmanager/common/ChainedComparator.java similarity index 93% rename from src/main/java/com/chickling/kmonitor/common/ChainedComparator.java rename to src/main/java/com/chickling/kmanager/common/ChainedComparator.java index 6965a12..7b73a40 100644 --- a/src/main/java/com/chickling/kmonitor/common/ChainedComparator.java +++ b/src/main/java/com/chickling/kmanager/common/ChainedComparator.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.common; +package com.chickling.kmanager.common; import java.util.Arrays; import java.util.Comparator; diff --git a/src/main/java/com/chickling/kmonitor/common/Constants.java b/src/main/java/com/chickling/kmanager/common/Constants.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/common/Constants.java rename to src/main/java/com/chickling/kmanager/common/Constants.java index 0fba7c1..10bc011 100644 --- a/src/main/java/com/chickling/kmonitor/common/Constants.java +++ b/src/main/java/com/chickling/kmanager/common/Constants.java @@ -1,7 +1,7 @@ /** Copyright 2017 2017 Hulva Luva.H **/ -package com.chickling.kmonitor.common; +package com.chickling.kmanager.common; import org.apache.kafka.common.protocol.types.Field; import org.apache.kafka.common.protocol.types.Schema; diff --git a/src/main/java/com/chickling/kmonitor/config/AppConfig.java b/src/main/java/com/chickling/kmanager/config/AppConfig.java similarity index 91% rename from src/main/java/com/chickling/kmonitor/config/AppConfig.java rename to src/main/java/com/chickling/kmanager/config/AppConfig.java index d10323c..ae6c78e 100644 --- a/src/main/java/com/chickling/kmonitor/config/AppConfig.java +++ b/src/main/java/com/chickling/kmanager/config/AppConfig.java @@ -1,15 +1,14 @@ -package com.chickling.kmonitor.config; +package com.chickling.kmanager.config; /** * @author Hulva Luva.H * */ public class AppConfig { + private String clusterName; private String apiType; private String esHosts; - private String esIndex; - private String docTypeForOffset; - + private String esIndex = ""; private Integer dataCollectFrequency = 1; private String zkHosts; @@ -64,21 +63,13 @@ public void setEsHosts(String esHosts) { } public String getEsIndex() { - return esIndex; + return esIndex.toLowerCase(); } public void setEsIndex(String esIndex) { this.esIndex = esIndex; } - public String getDocTypeForOffset() { - return docTypeForOffset; - } - - public void setDocTypeForOffset(String docTypeForOffset) { - this.docTypeForOffset = docTypeForOffset; - } - public Integer getDataCollectFrequency() { return dataCollectFrequency; } @@ -183,4 +174,13 @@ public void setExcludeByLastSeen(Long excludeByLastSeen) { this.excludeByLastSeen = excludeByLastSeen; } + public void setClusterName(String clusterName){ + this.clusterName = clusterName; + } + public String getClusterName(){ + if(this.clusterName == null){ + return ""; + } + return this.clusterName; + } } diff --git a/src/main/java/com/chickling/kmonitor/config/DataSourceConfig.java b/src/main/java/com/chickling/kmanager/config/DataSourceConfig.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/config/DataSourceConfig.java rename to src/main/java/com/chickling/kmanager/config/DataSourceConfig.java index e7b2996..fd731b7 100644 --- a/src/main/java/com/chickling/kmonitor/config/DataSourceConfig.java +++ b/src/main/java/com/chickling/kmanager/config/DataSourceConfig.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.config; +package com.chickling.kmanager.config; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/config/ElasticsearchConfig.java b/src/main/java/com/chickling/kmanager/config/ElasticsearchConfig.java similarity index 95% rename from src/main/java/com/chickling/kmonitor/config/ElasticsearchConfig.java rename to src/main/java/com/chickling/kmanager/config/ElasticsearchConfig.java index d8c08ff..70cd339 100644 --- a/src/main/java/com/chickling/kmonitor/config/ElasticsearchConfig.java +++ b/src/main/java/com/chickling/kmanager/config/ElasticsearchConfig.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.config; +package com.chickling.kmanager.config; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/config/MailServerConfig.java b/src/main/java/com/chickling/kmanager/config/MailServerConfig.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/config/MailServerConfig.java rename to src/main/java/com/chickling/kmanager/config/MailServerConfig.java index 163bff6..ff78501 100644 --- a/src/main/java/com/chickling/kmonitor/config/MailServerConfig.java +++ b/src/main/java/com/chickling/kmanager/config/MailServerConfig.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.config; +package com.chickling.kmanager.config; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/config/ZookeeperConfig.java b/src/main/java/com/chickling/kmanager/config/ZookeeperConfig.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/config/ZookeeperConfig.java rename to src/main/java/com/chickling/kmanager/config/ZookeeperConfig.java index a334e8b..b97439f 100644 --- a/src/main/java/com/chickling/kmonitor/config/ZookeeperConfig.java +++ b/src/main/java/com/chickling/kmanager/config/ZookeeperConfig.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.config; +package com.chickling.kmanager.config; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/controller/AlertController.java b/src/main/java/com/chickling/kmanager/controller/AlertController.java similarity index 81% rename from src/main/java/com/chickling/kmonitor/controller/AlertController.java rename to src/main/java/com/chickling/kmanager/controller/AlertController.java index 5032703..243061c 100644 --- a/src/main/java/com/chickling/kmonitor/controller/AlertController.java +++ b/src/main/java/com/chickling/kmanager/controller/AlertController.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.controller; +package com.chickling.kmanager.controller; import java.util.HashSet; import java.util.Set; @@ -6,28 +6,30 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.chickling.kmonitor.alert.TaskContent; -import com.chickling.kmonitor.alert.TaskManager; -import com.chickling.kmonitor.initialize.SystemManager; +import com.chickling.kmanager.alert.TaskContent; +import com.chickling.kmanager.alert.TaskManager; +import com.chickling.kmanager.initialize.SystemManager; /** * @author Hulva Luva.H * */ @RestController +@CrossOrigin(origins = "*") @RequestMapping("/alerting") public class AlertController { protected static final Logger logger = LoggerFactory.getLogger(AlertController.class); @RequestMapping(value = "/tasks", method = RequestMethod.GET) public Set get() { - if(SystemManager.getConfig().getIsAlertEnabled()) { + if (SystemManager.getConfig().getIsAlertEnabled()) { return TaskManager.getTasks(); } return new HashSet(); diff --git a/src/main/java/com/chickling/kmanager/controller/ClusterController.java b/src/main/java/com/chickling/kmanager/controller/ClusterController.java new file mode 100644 index 0000000..7247b8d --- /dev/null +++ b/src/main/java/com/chickling/kmanager/controller/ClusterController.java @@ -0,0 +1,26 @@ +package com.chickling.kmanager.controller; + +import java.util.List; + +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.utils.ZKUtils; + +/** + * + * @author Hulva Luva.H + * + */ +@RestController +@CrossOrigin(origins = "*") +public class ClusterController { + + @RequestMapping(value = "/cluster", method = RequestMethod.GET) + public List getCluster() throws Exception { + return ZKUtils.getBrokers(); + } +} diff --git a/src/main/java/com/chickling/kmonitor/controller/GroupController.java b/src/main/java/com/chickling/kmanager/controller/GroupController.java similarity index 55% rename from src/main/java/com/chickling/kmonitor/controller/GroupController.java rename to src/main/java/com/chickling/kmanager/controller/GroupController.java index ccfbbef..35504f6 100644 --- a/src/main/java/com/chickling/kmonitor/controller/GroupController.java +++ b/src/main/java/com/chickling/kmanager/controller/GroupController.java @@ -1,19 +1,23 @@ -package com.chickling.kmonitor.controller; +package com.chickling.kmanager.controller; import java.util.ArrayList; import java.util.Collections; import java.util.List; - +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.KafkaInfo; -import com.chickling.kmonitor.model.OffsetHistory; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.KafkaInfo; +import com.chickling.kmanager.model.OffsetHistory; +import com.chickling.kmanager.model.OffsetStat; +import com.chickling.kmanager.utils.elasticsearch.restapi.ElasticsearchRESTUtil; /** * @@ -21,6 +25,7 @@ * */ @RestController +@CrossOrigin(origins = "*") @RequestMapping("/group") public class GroupController { private static Logger LOG = LoggerFactory.getLogger(GroupController.class); @@ -43,6 +48,20 @@ public KafkaInfo getGroupInfo(@PathVariable String group) { return kafkaInfo; } + @RequestMapping(value="/2/{group}/{topic}", method = RequestMethod.GET) + public Map> getOffsetStats(@PathVariable String group, @PathVariable String topic + , @RequestParam(value="start", defaultValue="") String start + , @RequestParam(value="end", defaultValue="") String end){ + + return ElasticsearchRESTUtil.offset(group, topic, start, end); + } + @RequestMapping(value="/2/{group}/", method = RequestMethod.GET) + public Map> getOffsetStats2(@PathVariable String group + , @RequestParam(value="start", defaultValue="") String start + , @RequestParam(value="end", defaultValue="") String end){ + + return ElasticsearchRESTUtil.offset(group, null, start, end); + } @RequestMapping(value = "/{group}/{topic}", method = RequestMethod.GET) public OffsetHistory getGroupTopicOffsetHistory(@PathVariable String group, @PathVariable String topic) { OffsetHistory offsetHistory = null; diff --git a/src/main/java/com/chickling/kmanager/controller/JMXMetricController.java b/src/main/java/com/chickling/kmanager/controller/JMXMetricController.java new file mode 100644 index 0000000..5a0726a --- /dev/null +++ b/src/main/java/com/chickling/kmanager/controller/JMXMetricController.java @@ -0,0 +1,132 @@ +package com.chickling.kmanager.controller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import javax.management.MBeanServerConnection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.chickling.kmanager.jmx.JMXExecutor; +import com.chickling.kmanager.jmx.KafkaJMX; +import com.chickling.kmanager.jmx.KafkaMetrics; +import com.chickling.kmanager.jmx.MeterMetric; +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.utils.ZKUtils; +import com.chickling.kmanager.utils.elasticsearch.restapi.ElasticsearchRESTUtil; + +/** + * + * @author Hulva Luva.H + * @since 2017-07-12 + * + */ + +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("/stats") +public class JMXMetricController { + private static Logger LOG = LoggerFactory.getLogger(JMXMetricController.class); + + @RequestMapping(value = "/trend", method = RequestMethod.GET) + public HashMap> trend(@RequestParam(value="start", defaultValue="") String start + , @RequestParam(value="end", defaultValue="") String end) { + return ElasticsearchRESTUtil.JmxTrend(start, end); + } + + @RequestMapping(value = "/topic/{topic}", method = RequestMethod.GET) + public Map> getMetricsByTopic(@PathVariable String topic) { + return getMetrics(-1, Optional.of(topic)); + } + + @RequestMapping(value = "/brokers", method = RequestMethod.GET) + public Map> getMetrics() { + return getMetrics(-1, Optional.empty()); + } + + @RequestMapping(value = "/broker/{bid}", method = RequestMethod.GET) + public Map getMetricsByBroker(@PathVariable Integer bid) { + Map> metrics = getMetrics(bid, Optional.empty()); + if(metrics.containsKey("broker" + bid)){ + return metrics.get("broker" + bid); + } + return new HashMap(); + } + private Map> getMetrics(Integer bid, Optional topic) { + Map> result = new HashMap>(); + + try { + List brokers = ZKUtils.getBrokers(); + for (BrokerInfo broker : brokers) { + if (broker.getJmxPort() <= 0) { + continue; + } + if (bid >= 0 && broker.getBid() != bid) { + continue; + } + KafkaJMX kafkaJMX = new KafkaJMX(); + kafkaJMX.doWithConnection(broker.getHost(), broker.getJmxPort(), Optional.of(""), Optional.of(""), + false, new JMXExecutor() { + @Override + public void doWithConnection(MBeanServerConnection mBeanServerConnection) { + Map item = getMetricsFromMBean(mBeanServerConnection, topic); + result.put("broker" + broker.getBid(), item); + } + }); + } + } catch (Exception e) { + LOG.error("Get jmxHosts error!" + e.getMessage()); + } + if (bid < 0) { + Map summary = new HashMap(); + result.forEach((key, itemObj) -> { + Map item = (Map) itemObj; + for (String metric : metricName) { + summary.put(metric, merge(summary.get(metric), item.get(metric))); + } + }); + result.put("summary", summary); + } + return result; + } + + String[] metricName = new String[] { "MessagesInPerSec", "BytesInPerSec", "BytesOutPerSec", "BytesRejectedPerSec", + "FailedFetchRequestsPerSec", "FailedProduceRequestsPerSec" }; + + private Map getMetricsFromMBean(MBeanServerConnection mBeanServerConnection, + Optional topic) { + Map result = new HashMap(); + KafkaMetrics metrics = new KafkaMetrics(); + for (String metric : metricName) { + if (result.containsKey(metric)) { + result.put(metric, merge(result.get(metric), metrics.getItem(mBeanServerConnection, topic, metric))); + } else { + result.put(metric, metrics.getItem(mBeanServerConnection, topic, metric)); + } + } + return result; + } + + protected MeterMetric merge(MeterMetric old, MeterMetric newOne) { + if (old == null) { + return newOne; + } + if (newOne == null) { + return new MeterMetric(); + } + return new MeterMetric(old.getCount() + newOne.getCount(), old.getMeanRate() + newOne.getMeanRate(), + old.getOneMinuteRate() + newOne.getOneMinuteRate(), + old.getFiveMinuteRate() + newOne.getFiveMinuteRate(), + old.getFifteenMinuteRate() + newOne.getFifteenMinuteRate()); + } +} diff --git a/src/main/java/com/chickling/kmonitor/controller/QueryController.java b/src/main/java/com/chickling/kmanager/controller/QueryController.java similarity index 74% rename from src/main/java/com/chickling/kmonitor/controller/QueryController.java rename to src/main/java/com/chickling/kmanager/controller/QueryController.java index 23fb16d..0c9d1bd 100644 --- a/src/main/java/com/chickling/kmonitor/controller/QueryController.java +++ b/src/main/java/com/chickling/kmanager/controller/QueryController.java @@ -1,21 +1,23 @@ -package com.chickling.kmonitor.controller; +package com.chickling.kmanager.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.OffsetHistory; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.OffsetHistory; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; /** * @author Hulva Luva.H * */ @RestController +@CrossOrigin(origins = "*") @RequestMapping("/query") public class QueryController { private static Logger LOG = LoggerFactory.getLogger(QueryController.class); diff --git a/src/main/java/com/chickling/kmonitor/controller/SettingController.java b/src/main/java/com/chickling/kmanager/controller/SettingController.java similarity index 85% rename from src/main/java/com/chickling/kmonitor/controller/SettingController.java rename to src/main/java/com/chickling/kmanager/controller/SettingController.java index b2295a1..056fcfd 100644 --- a/src/main/java/com/chickling/kmonitor/controller/SettingController.java +++ b/src/main/java/com/chickling/kmanager/controller/SettingController.java @@ -1,13 +1,14 @@ -package com.chickling.kmonitor.controller; +package com.chickling.kmanager.controller; import org.json.JSONObject; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.chickling.kmonitor.config.AppConfig; -import com.chickling.kmonitor.initialize.SystemManager; +import com.chickling.kmanager.config.AppConfig; +import com.chickling.kmanager.initialize.SystemManager; /** * @author Hulva Luva.H @@ -15,6 +16,7 @@ * */ @RestController +@CrossOrigin(origins = "*") public class SettingController { @RequestMapping(value = "/isSystemReady", method = RequestMethod.GET) public String isSystemReady() { diff --git a/src/main/java/com/chickling/kmonitor/controller/TopicController.java b/src/main/java/com/chickling/kmanager/controller/TopicController.java similarity index 86% rename from src/main/java/com/chickling/kmonitor/controller/TopicController.java rename to src/main/java/com/chickling/kmanager/controller/TopicController.java index a03a348..b22efd5 100644 --- a/src/main/java/com/chickling/kmonitor/controller/TopicController.java +++ b/src/main/java/com/chickling/kmanager/controller/TopicController.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.controller; +package com.chickling.kmanager.controller; import java.util.ArrayList; import java.util.Collections; @@ -7,21 +7,23 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.Node; -import com.chickling.kmonitor.model.TopicAndConsumersDetails; -import com.chickling.kmonitor.model.TopicDetails; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.Node; +import com.chickling.kmanager.model.TopicAndConsumersDetails; +import com.chickling.kmanager.model.TopicDetails; /** * @author Hulva Luva.H * */ @RestController +@CrossOrigin(origins = "*") public class TopicController { private static Logger LOG = LoggerFactory.getLogger(TopicController.class); diff --git a/src/main/java/com/chickling/kmonitor/controller/filter/IsSystemReadyFilter.java b/src/main/java/com/chickling/kmanager/controller/filter/IsSystemReadyFilter.java similarity index 88% rename from src/main/java/com/chickling/kmonitor/controller/filter/IsSystemReadyFilter.java rename to src/main/java/com/chickling/kmanager/controller/filter/IsSystemReadyFilter.java index 6fb78cf..bbc9049 100644 --- a/src/main/java/com/chickling/kmonitor/controller/filter/IsSystemReadyFilter.java +++ b/src/main/java/com/chickling/kmanager/controller/filter/IsSystemReadyFilter.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.controller.filter; +package com.chickling.kmanager.controller.filter; import java.io.IOException; @@ -13,7 +13,7 @@ import org.json.JSONObject; import org.springframework.stereotype.Component; -import com.chickling.kmonitor.initialize.SystemManager; +import com.chickling.kmanager.initialize.SystemManager; /** * @author Hulva Luva.H @@ -34,7 +34,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if (request instanceof HttpServletRequest) { url = ((HttpServletRequest) request).getServletPath(); } - if (!SystemManager.IS_SYSTEM_READY.get() && !url.contains("/css") && !url.contains("/fonts") + if (!SystemManager.IS_SYSTEM_READY.get() && !url.contains("/css") && !url.contains("/fonts") && !url.contains("/images") && !url.contains("/scripts") && !SystemManager.excludePath.contains(url)) { JSONObject result = new JSONObject(); result.put("isSystemReady", false); diff --git a/src/main/java/com/chickling/kmonitor/core/OffsetGetter.java b/src/main/java/com/chickling/kmanager/core/OffsetGetter.java similarity index 95% rename from src/main/java/com/chickling/kmonitor/core/OffsetGetter.java rename to src/main/java/com/chickling/kmanager/core/OffsetGetter.java index c4bb53d..ad27766 100644 --- a/src/main/java/com/chickling/kmonitor/core/OffsetGetter.java +++ b/src/main/java/com/chickling/kmanager/core/OffsetGetter.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.core; +package com.chickling.kmanager.core; import java.util.ArrayList; import java.util.Collections; @@ -17,14 +17,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.model.BrokerInfo; -import com.chickling.kmonitor.model.ConsumerDetail; -import com.chickling.kmonitor.model.KafkaInfo; -import com.chickling.kmonitor.model.Node; -import com.chickling.kmonitor.model.OffsetInfo; -import com.chickling.kmonitor.model.TopicAndConsumersDetails; -import com.chickling.kmonitor.model.TopicDetails; -import com.chickling.kmonitor.utils.ZKUtils; +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.model.ConsumerDetail; +import com.chickling.kmanager.model.KafkaInfo; +import com.chickling.kmanager.model.Node; +import com.chickling.kmanager.model.OffsetInfo; +import com.chickling.kmanager.model.TopicAndConsumersDetails; +import com.chickling.kmanager.model.TopicDetails; +import com.chickling.kmanager.utils.ZKUtils; import kafka.cluster.Broker; import kafka.cluster.EndPoint; diff --git a/src/main/java/com/chickling/kmonitor/core/ZKOffsetGetter.java b/src/main/java/com/chickling/kmanager/core/ZKOffsetGetter.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/core/ZKOffsetGetter.java rename to src/main/java/com/chickling/kmanager/core/ZKOffsetGetter.java index fe9c96e..a384cc7 100644 --- a/src/main/java/com/chickling/kmonitor/core/ZKOffsetGetter.java +++ b/src/main/java/com/chickling/kmanager/core/ZKOffsetGetter.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.core; +package com.chickling.kmanager.core; import java.util.ArrayList; import java.util.HashMap; @@ -11,10 +11,10 @@ import org.apache.zookeeper.KeeperException.NoNodeException; import org.apache.zookeeper.data.Stat; -import com.chickling.kmonitor.config.AppConfig; -import com.chickling.kmonitor.model.OffsetInfo; -import com.chickling.kmonitor.model.ZkDataAndStat; -import com.chickling.kmonitor.utils.ZKUtils; +import com.chickling.kmanager.config.AppConfig; +import com.chickling.kmanager.model.OffsetInfo; +import com.chickling.kmanager.model.ZkDataAndStat; +import com.chickling.kmanager.utils.ZKUtils; import kafka.api.PartitionOffsetRequestInfo; import kafka.common.TopicAndPartition; diff --git a/src/main/java/com/chickling/kmonitor/core/db/ElasticsearchOffsetDB.java b/src/main/java/com/chickling/kmanager/core/db/ElasticsearchOffsetDB.java similarity index 77% rename from src/main/java/com/chickling/kmonitor/core/db/ElasticsearchOffsetDB.java rename to src/main/java/com/chickling/kmanager/core/db/ElasticsearchOffsetDB.java index e16fa7a..2745396 100644 --- a/src/main/java/com/chickling/kmonitor/core/db/ElasticsearchOffsetDB.java +++ b/src/main/java/com/chickling/kmanager/core/db/ElasticsearchOffsetDB.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.core.db; +package com.chickling.kmanager.core.db; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -7,15 +7,16 @@ import org.json.JSONObject; -import com.chickling.kmonitor.config.AppConfig; -import com.chickling.kmonitor.model.OffsetHistory; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; -import com.chickling.kmonitor.model.OffsetInfo; -import com.chickling.kmonitor.model.OffsetPoints; -import com.chickling.kmonitor.utils.CommonUtils; -import com.chickling.kmonitor.utils.elasticsearch.Ielasticsearch; -import com.chickling.kmonitor.utils.elasticsearch.javaapi.ElasticsearchJavaUtil; -import com.chickling.kmonitor.utils.elasticsearch.restapi.ElasticsearchRESTUtil; +import com.chickling.kmanager.config.AppConfig; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.OffsetHistory; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.model.OffsetInfo; +import com.chickling.kmanager.model.OffsetPoints; +import com.chickling.kmanager.utils.CommonUtils; +import com.chickling.kmanager.utils.elasticsearch.Ielasticsearch; +import com.chickling.kmanager.utils.elasticsearch.javaapi.ElasticsearchJavaUtil; +import com.chickling.kmanager.utils.elasticsearch.restapi.ElasticsearchRESTUtil; /** * @author Hulva Luva.H @@ -35,7 +36,7 @@ public ElasticsearchOffsetDB(AppConfig config) { } else { esUtil = new ElasticsearchRESTUtil(config.getEsHosts()); } - setIndexAndType(config.getEsIndex(), config.getDocTypeForOffset()); + setIndexAndType(config.getEsIndex(), SystemManager.getElasticSearchOffsetType()); } public void setIndexAndType(String index, String docType) { @@ -46,8 +47,8 @@ public void setIndexAndType(String index, String docType) { /* * (non-Javadoc) * - * @see com.chickling.kmonitor.core.db.OffsetDb#insert(long, - * com.chickling.kmonitor.model.OffsetInfo) + * @see com.chickling.kmanager.core.db.OffsetDb#insert(long, + * com.chickling.kmanager.model.OffsetInfo) */ @Override public void insert(long timestamp, OffsetInfo offsetInfo) { @@ -57,7 +58,7 @@ public void insert(long timestamp, OffsetInfo offsetInfo) { /* * (non-Javadoc) * - * @see com.chickling.kmonitor.core.db.OffsetDb#batchInsert(java. util.List) + * @see com.chickling.kmanager.core.db.OffsetDb#batchInsert(java. util.List) */ @Override public void batchInsert(List offsetInfoList) { @@ -93,7 +94,7 @@ private JSONObject generateRecord(long timestamp, OffsetInfo offsetInfo) { /* * (non-Javadoc) * - * @see com.chickling.kmonitor.core.db.OffsetDb#offsetHistory() + * @see com.chickling.kmanager.core.db.OffsetDb#offsetHistory() */ @Override public OffsetHistory offsetHistory(String group, String topic) { diff --git a/src/main/java/com/chickling/kmonitor/core/db/OffsetDB.java b/src/main/java/com/chickling/kmanager/core/db/OffsetDB.java similarity index 65% rename from src/main/java/com/chickling/kmonitor/core/db/OffsetDB.java rename to src/main/java/com/chickling/kmanager/core/db/OffsetDB.java index 40d0ffb..7c25460 100644 --- a/src/main/java/com/chickling/kmonitor/core/db/OffsetDB.java +++ b/src/main/java/com/chickling/kmanager/core/db/OffsetDB.java @@ -1,10 +1,10 @@ -package com.chickling.kmonitor.core.db; +package com.chickling.kmanager.core.db; import java.util.List; -import com.chickling.kmonitor.model.OffsetHistory; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; -import com.chickling.kmonitor.model.OffsetInfo; +import com.chickling.kmanager.model.OffsetHistory; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.model.OffsetInfo; /** * diff --git a/src/main/java/com/chickling/kmonitor/email/EmailSender.java b/src/main/java/com/chickling/kmanager/email/EmailSender.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/email/EmailSender.java rename to src/main/java/com/chickling/kmanager/email/EmailSender.java index b076380..00907d4 100644 --- a/src/main/java/com/chickling/kmonitor/email/EmailSender.java +++ b/src/main/java/com/chickling/kmanager/email/EmailSender.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.email; +package com.chickling.kmanager.email; import java.util.Date; import java.util.Properties; @@ -12,7 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.config.AppConfig; +import com.chickling.kmanager.config.AppConfig; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/email/Template.java b/src/main/java/com/chickling/kmanager/email/Template.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/email/Template.java rename to src/main/java/com/chickling/kmanager/email/Template.java index 542f7ed..b5724fd 100644 --- a/src/main/java/com/chickling/kmonitor/email/Template.java +++ b/src/main/java/com/chickling/kmanager/email/Template.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.email; +package com.chickling.kmanager.email; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/initialize/GenerateKafkaInfoTask.java b/src/main/java/com/chickling/kmanager/initialize/GenerateKafkaInfoTask.java similarity index 91% rename from src/main/java/com/chickling/kmonitor/initialize/GenerateKafkaInfoTask.java rename to src/main/java/com/chickling/kmanager/initialize/GenerateKafkaInfoTask.java index 0d24b28..865300a 100644 --- a/src/main/java/com/chickling/kmonitor/initialize/GenerateKafkaInfoTask.java +++ b/src/main/java/com/chickling/kmanager/initialize/GenerateKafkaInfoTask.java @@ -1,11 +1,11 @@ -package com.chickling.kmonitor.initialize; +package com.chickling.kmanager.initialize; import java.util.ArrayList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.model.KafkaInfo; +import com.chickling.kmanager.model.KafkaInfo; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/initialize/Initializer.java b/src/main/java/com/chickling/kmanager/initialize/Initializer.java similarity index 89% rename from src/main/java/com/chickling/kmonitor/initialize/Initializer.java rename to src/main/java/com/chickling/kmanager/initialize/Initializer.java index 69076b8..b8753d1 100644 --- a/src/main/java/com/chickling/kmonitor/initialize/Initializer.java +++ b/src/main/java/com/chickling/kmanager/initialize/Initializer.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.initialize; +package com.chickling.kmanager.initialize; import java.io.File; @@ -7,8 +7,8 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; -import com.chickling.kmonitor.config.AppConfig; -import com.chickling.kmonitor.utils.CommonUtils; +import com.chickling.kmanager.config.AppConfig; +import com.chickling.kmanager.utils.CommonUtils; import com.google.gson.Gson; /** diff --git a/src/main/java/com/chickling/kmonitor/initialize/SystemManager.java b/src/main/java/com/chickling/kmanager/initialize/SystemManager.java similarity index 57% rename from src/main/java/com/chickling/kmonitor/initialize/SystemManager.java rename to src/main/java/com/chickling/kmanager/initialize/SystemManager.java index 43b10a1..50c0ad0 100644 --- a/src/main/java/com/chickling/kmonitor/initialize/SystemManager.java +++ b/src/main/java/com/chickling/kmanager/initialize/SystemManager.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.initialize; +package com.chickling.kmanager.initialize; import java.io.File; import java.io.IOException; @@ -22,24 +22,25 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.alert.TaskContent; -import com.chickling.kmonitor.alert.TaskHandler; -import com.chickling.kmonitor.alert.TaskManager; -import com.chickling.kmonitor.alert.WorkerThreadFactory; -import com.chickling.kmonitor.config.AppConfig; -import com.chickling.kmonitor.core.OffsetGetter; -import com.chickling.kmonitor.core.ZKOffsetGetter; -import com.chickling.kmonitor.core.db.ElasticsearchOffsetDB; -import com.chickling.kmonitor.core.db.OffsetDB; -import com.chickling.kmonitor.email.EmailSender; -import com.chickling.kmonitor.jmx.FormatedMeterMetric; -import com.chickling.kmonitor.jmx.JMXExecutor; -import com.chickling.kmonitor.jmx.KafkaJMX; -import com.chickling.kmonitor.jmx.KafkaMetrics; -import com.chickling.kmonitor.model.KafkaInfo; -import com.chickling.kmonitor.utils.CommonUtils; -import com.chickling.kmonitor.utils.ZKUtils; -import com.chickling.kmonitor.utils.elasticsearch.Ielasticsearch; +import com.chickling.kmanager.alert.TaskContent; +import com.chickling.kmanager.alert.TaskHandler; +import com.chickling.kmanager.alert.TaskManager; +import com.chickling.kmanager.alert.WorkerThreadFactory; +import com.chickling.kmanager.config.AppConfig; +import com.chickling.kmanager.core.OffsetGetter; +import com.chickling.kmanager.core.ZKOffsetGetter; +import com.chickling.kmanager.core.db.ElasticsearchOffsetDB; +import com.chickling.kmanager.core.db.OffsetDB; +import com.chickling.kmanager.email.EmailSender; +import com.chickling.kmanager.jmx.FormatedMeterMetric; +import com.chickling.kmanager.jmx.JMXExecutor; +import com.chickling.kmanager.jmx.KafkaJMX; +import com.chickling.kmanager.jmx.KafkaMetrics; +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.model.KafkaInfo; +import com.chickling.kmanager.utils.CommonUtils; +import com.chickling.kmanager.utils.ZKUtils; +import com.chickling.kmanager.utils.elasticsearch.Ielasticsearch; import com.google.gson.Gson; /** @@ -57,8 +58,8 @@ public class SystemManager { public static final int DEFAULT_THREAD_POOL_SIZE = Runtime.getRuntime().availableProcessors(); - private static final ExecutorService kafkaInfoCollectAndSavePool = - Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE, new WorkerThreadFactory("KafkaInfo Collector")); + private static final ExecutorService kafkaInfoCollectAndSavePool = Executors + .newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE, new WorkerThreadFactory("KafkaInfo Collector")); public static final String JMX_METRIC_ES_DOC_TYPE = "jmxMetrics"; @@ -87,11 +88,20 @@ public static AppConfig getConfig() { return config == null ? new AppConfig() : config; } + public static String getElasticSearchOffsetType() { + return "Offset-" + config.getClusterName().replaceAll("\\W", ""); + } + + public static String getElasticSearchJmxType() { + return "Jmx-" + config.getClusterName().replaceAll("\\W", ""); + } + public static synchronized void setConfig(AppConfig _config) throws Exception { config = _config; initSystem(); // TODO - IS_SYSTEM_READY.set(true);; + IS_SYSTEM_READY.set(true); + ; saveToFile(); } @@ -142,7 +152,6 @@ public void run() { } }, 0, config.getDataCollectFrequency() * 60 * 1000, TimeUnit.MILLISECONDS); - // JMX metrics data scheduler.scheduleAtFixedRate(new Runnable() { private final SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); @@ -152,57 +161,71 @@ public void run() { Date now = new Date(); JSONObject data = new JSONObject(); try { - List jmxHosts = ZKUtils.getKafkaJMXHostsFromZookeeper(); - for (String jmxHost : jmxHosts) { - String[] jmxArr = jmxHost.split(":"); - if ("-1".equals(jmxArr[2])) { - LOG.warn("JMX disabled in " + jmxHost); + List brokers = ZKUtils.getBrokers(); + for (BrokerInfo broker : brokers) { + if (broker.getJmxPort() <= 0) { + LOG.warn("JMX disabled in " + broker.getHost()); continue; } KafkaJMX kafkaJMX = new KafkaJMX(); - kafkaJMX.doWithConnection(jmxArr[1], Integer.parseInt(jmxArr[2]), Optional.of(""), Optional.of(""), false, new JMXExecutor() { - - @Override - public void doWithConnection(MBeanServerConnection mBeanServerConnection) { - KafkaMetrics metrics = new KafkaMetrics(); - JSONObject metric = null; - metric = new JSONObject(new FormatedMeterMetric(metrics.getMessagesInPerSec(mBeanServerConnection, Optional.empty()), 0)); - metric.put("broker", jmxArr[1]); - metric.put("date", sFormat.format(now)); - metric.put("timestamp", now.getTime()); - metric.put("metric", "MessagesInPerSec"); - data.put("MessagesInPerSec" + jmxArr[0], metric); - - metric = new JSONObject(new FormatedMeterMetric(metrics.getBytesInPerSec(mBeanServerConnection, Optional.empty()))); - metric.put("broker", jmxArr[1]); - metric.put("date", sFormat.format(now)); - metric.put("timestamp", now.getTime()); - metric.put("metric", "BytesInPerSec"); - data.put("BytesInPerSec" + jmxArr[0], metric); - - metric = new JSONObject(new FormatedMeterMetric(metrics.getBytesOutPerSec(mBeanServerConnection, Optional.empty()))); - metric.put("broker", jmxArr[1]); - metric.put("date", sFormat.format(now)); - metric.put("timestamp", now.getTime()); - metric.put("metric", "BytesOutPerSec"); - data.put("BytesOutPerSec" + jmxArr[0], metric); - } - }); + kafkaJMX.doWithConnection(broker.getHost(), broker.getJmxPort(), Optional.of(""), Optional.of(""), false, + new JMXExecutor() { + + @Override + public void doWithConnection(MBeanServerConnection mBeanServerConnection) { + KafkaMetrics metrics = new KafkaMetrics(); + JSONObject metric = null; + metric = new JSONObject(new FormatedMeterMetric( + metrics.getMessagesInPerSec(mBeanServerConnection, Optional.empty()), 0)); + metric.put("broker", broker.getHost()); + metric.put("date", sFormat.format(now)); + metric.put("timestamp", now.getTime()); + metric.put("metric", "MessagesInPerSec"); + data.put("MessagesInPerSec" + broker.getHost(), metric); + + metric = new JSONObject( + new FormatedMeterMetric(metrics.getBytesInPerSec(mBeanServerConnection, Optional.empty()))); + metric.put("broker", broker.getHost()); + metric.put("date", sFormat.format(now)); + metric.put("timestamp", now.getTime()); + metric.put("metric", "BytesInPerSec"); + data.put("BytesInPerSec" + broker.getHost(), metric); + + metric = new JSONObject( + new FormatedMeterMetric(metrics.getBytesOutPerSec(mBeanServerConnection, Optional.empty()))); + metric.put("broker", broker.getHost()); + metric.put("date", sFormat.format(now)); + metric.put("timestamp", now.getTime()); + metric.put("metric", "BytesOutPerSec"); + data.put("BytesOutPerSec" + broker.getHost(), metric); + } + }); } - db.getDB().bulkIndex(data, JMX_METRIC_ES_DOC_TYPE, config.getEsIndex() + "-"); + db.getDB().bulkIndex(data, SystemManager.getElasticSearchJmxType(), config.getEsIndex() + "-"); } catch (Exception e) { LOG.warn("Ops..." + e.getMessage()); } } }, 0, config.getDataCollectFrequency() * 60 * 1000, TimeUnit.MILLISECONDS); - } catch (Exception e) { + } catch ( + + Exception e) { + System.out.print(stackTraceToString(e)); // TODO IS_SYSTEM_READY.set(false); throw new RuntimeException("Init system failed! " + e.getMessage()); + } } - +public static String stackTraceToString(Throwable e) { + StringBuilder sb = new StringBuilder(); + for (StackTraceElement element : e.getStackTrace()) { + sb.append(element.toString()); + sb.append("\n"); + } + return sb.toString(); +} private static void initAlert(AppConfig config) { EmailSender.setConfig(config); TaskManager.init(config); diff --git a/src/main/java/com/chickling/kmonitor/jmx/FormatedMeterMetric.java b/src/main/java/com/chickling/kmanager/jmx/FormatedMeterMetric.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/jmx/FormatedMeterMetric.java rename to src/main/java/com/chickling/kmanager/jmx/FormatedMeterMetric.java index 4cf349e..d0a3f14 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/FormatedMeterMetric.java +++ b/src/main/java/com/chickling/kmanager/jmx/FormatedMeterMetric.java @@ -1,6 +1,6 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; -import com.chickling.kmonitor.utils.MetricUtils; +import com.chickling.kmanager.utils.MetricUtils; /** * @author Hulva Luva.H from ECBD diff --git a/src/main/java/com/chickling/kmonitor/jmx/JMXExecutor.java b/src/main/java/com/chickling/kmanager/jmx/JMXExecutor.java similarity index 85% rename from src/main/java/com/chickling/kmonitor/jmx/JMXExecutor.java rename to src/main/java/com/chickling/kmanager/jmx/JMXExecutor.java index e338a40..597028d 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/JMXExecutor.java +++ b/src/main/java/com/chickling/kmanager/jmx/JMXExecutor.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; import javax.management.MBeanServerConnection; diff --git a/src/main/java/com/chickling/kmonitor/jmx/KafkaJMX.java b/src/main/java/com/chickling/kmanager/jmx/KafkaJMX.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/jmx/KafkaJMX.java rename to src/main/java/com/chickling/kmanager/jmx/KafkaJMX.java index 56f25b5..86a483b 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/KafkaJMX.java +++ b/src/main/java/com/chickling/kmanager/jmx/KafkaJMX.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; import java.io.IOException; import java.util.HashMap; diff --git a/src/main/java/com/chickling/kmonitor/jmx/KafkaMetrics.java b/src/main/java/com/chickling/kmanager/jmx/KafkaMetrics.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/jmx/KafkaMetrics.java rename to src/main/java/com/chickling/kmanager/jmx/KafkaMetrics.java index 4d6b90d..653329e 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/KafkaMetrics.java +++ b/src/main/java/com/chickling/kmanager/jmx/KafkaMetrics.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; import java.util.List; import java.util.Optional; @@ -149,7 +149,9 @@ public class KafkaMetrics { public static final String REPLICA_FETCHER_METRICS = "kafka.server:type=replica-fetcher-metrics,broker-id={},fetcher-id={}"; public static final String SOCKET_SERVER_METRICS = "kafka.server:type=socket-server-metrics,networkProcessor={}"; - + public MeterMetric getItem(MBeanServerConnection mbsc, Optional topicName, String metricName){ + return getBrokerTopicMetrics(mbsc, metricName, topicName); + } public MeterMetric getBytesInPerSec(MBeanServerConnection mbsc, Optional topicName) { return getBrokerTopicMetrics(mbsc, "BytesInPerSec", topicName); } diff --git a/src/main/java/com/chickling/kmonitor/jmx/MeterMetric.java b/src/main/java/com/chickling/kmanager/jmx/MeterMetric.java similarity index 85% rename from src/main/java/com/chickling/kmonitor/jmx/MeterMetric.java rename to src/main/java/com/chickling/kmanager/jmx/MeterMetric.java index 1d8a194..0106328 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/MeterMetric.java +++ b/src/main/java/com/chickling/kmanager/jmx/MeterMetric.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; /** * @author Hulva Luva.H @@ -7,11 +7,11 @@ */ public class MeterMetric { - private Long count; - private Double fifteenMinuteRate; - private Double fiveMinuteRate; - private Double oneMinuteRate; - private Double meanRate; + private Long count = (long) 0; + private Double fifteenMinuteRate = (double) 0; + private Double fiveMinuteRate = (double) 0; + private Double oneMinuteRate = (double) 0; + private Double meanRate = (double) 0; public MeterMetric() { super(); diff --git a/src/main/java/com/chickling/kmonitor/jmx/MetricDataCollector.java b/src/main/java/com/chickling/kmanager/jmx/MetricDataCollector.java similarity index 72% rename from src/main/java/com/chickling/kmonitor/jmx/MetricDataCollector.java rename to src/main/java/com/chickling/kmanager/jmx/MetricDataCollector.java index 6d39f74..a2b80a7 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/MetricDataCollector.java +++ b/src/main/java/com/chickling/kmanager/jmx/MetricDataCollector.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/jmx/ObjectNameHolder.java b/src/main/java/com/chickling/kmanager/jmx/ObjectNameHolder.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/jmx/ObjectNameHolder.java rename to src/main/java/com/chickling/kmanager/jmx/ObjectNameHolder.java index 452266b..095f7f3 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/ObjectNameHolder.java +++ b/src/main/java/com/chickling/kmanager/jmx/ObjectNameHolder.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; import java.util.Map; diff --git a/src/main/java/com/chickling/kmonitor/jmx/ObjectNameManager.java b/src/main/java/com/chickling/kmanager/jmx/ObjectNameManager.java similarity index 94% rename from src/main/java/com/chickling/kmonitor/jmx/ObjectNameManager.java rename to src/main/java/com/chickling/kmanager/jmx/ObjectNameManager.java index 6aa9cb7..1711255 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/ObjectNameManager.java +++ b/src/main/java/com/chickling/kmanager/jmx/ObjectNameManager.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx; +package com.chickling.kmanager.jmx; import java.util.HashMap; import java.util.List; @@ -13,7 +13,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.utils.ZKUtils; +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.utils.ZKUtils; /** * @@ -54,13 +55,12 @@ private void initObjectNames() { if (kafkaJMX == null) { kafkaJMX = new KafkaJMX(); } - List jmxHosts = ZKUtils.getKafkaJMXHostsFromZookeeper(); - for (String jmxHost : jmxHosts) { - String[] jmxArr = jmxHost.split(":"); - if ("-1".equals(jmxArr[2])) { + List brokers = ZKUtils.getBrokers(); + for (BrokerInfo broker: brokers) { + if (broker.getJmxPort()<=0) { continue; } - kafkaJMX.doWithConnection(jmxArr[1], Integer.parseInt(jmxArr[2]), Optional.of(""), Optional.of(""), false, new JMXExecutor() { + kafkaJMX.doWithConnection(broker.getHost(), broker.getJmxPort(), Optional.of(""), Optional.of(""), false, new JMXExecutor() { @SuppressWarnings("unchecked") @Override diff --git a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType1.java b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType1.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType1.java rename to src/main/java/com/chickling/kmanager/jmx/metrics/MetricType1.java index d449a78..97bb8f7 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType1.java +++ b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType1.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx.metrics; +package com.chickling.kmanager.jmx.metrics; /** * diff --git a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType2.java b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType2.java similarity index 92% rename from src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType2.java rename to src/main/java/com/chickling/kmanager/jmx/metrics/MetricType2.java index b79511c..52e8025 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType2.java +++ b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType2.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx.metrics; +package com.chickling.kmanager.jmx.metrics; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType3.java b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType3.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType3.java rename to src/main/java/com/chickling/kmanager/jmx/metrics/MetricType3.java index 28bb06a..55397c9 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType3.java +++ b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType3.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx.metrics; +package com.chickling.kmanager.jmx.metrics; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType4.java b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType4.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType4.java rename to src/main/java/com/chickling/kmanager/jmx/metrics/MetricType4.java index 8d2acc2..0489887 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/metrics/MetricType4.java +++ b/src/main/java/com/chickling/kmanager/jmx/metrics/MetricType4.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx.metrics; +package com.chickling.kmanager.jmx.metrics; /** * @author Hulva Luva.H from ECBD diff --git a/src/main/java/com/chickling/kmonitor/jmx/metrics/OperatingSystem.java b/src/main/java/com/chickling/kmanager/jmx/metrics/OperatingSystem.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/jmx/metrics/OperatingSystem.java rename to src/main/java/com/chickling/kmanager/jmx/metrics/OperatingSystem.java index 12cb57f..2e16e60 100644 --- a/src/main/java/com/chickling/kmonitor/jmx/metrics/OperatingSystem.java +++ b/src/main/java/com/chickling/kmanager/jmx/metrics/OperatingSystem.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.jmx.metrics; +package com.chickling.kmanager.jmx.metrics; /** * diff --git a/src/main/java/com/chickling/kmonitor/model/BrokerInfo.java b/src/main/java/com/chickling/kmanager/model/BrokerInfo.java similarity index 57% rename from src/main/java/com/chickling/kmonitor/model/BrokerInfo.java rename to src/main/java/com/chickling/kmanager/model/BrokerInfo.java index 9a1bed8..38588fe 100644 --- a/src/main/java/com/chickling/kmonitor/model/BrokerInfo.java +++ b/src/main/java/com/chickling/kmanager/model/BrokerInfo.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; /** * @author Hulva Luva.H @@ -8,6 +8,13 @@ public class BrokerInfo { private int bid; private String host; private int port; + private int jmxPort; + private long timestamp; + private int version; + + public BrokerInfo() { + + } public BrokerInfo(int bid, String host, int port) { super(); @@ -45,4 +52,28 @@ public String toString() { return "BrokerInfo [bid=" + bid + ", host=" + host + ", port=" + port + "]"; } + public int getJmxPort() { + return jmxPort; + } + + public void setJmxPort(int jmx_port) { + this.jmxPort = jmx_port; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + } diff --git a/src/main/java/com/chickling/kmonitor/model/ConsumerDetail.java b/src/main/java/com/chickling/kmanager/model/ConsumerDetail.java similarity index 90% rename from src/main/java/com/chickling/kmonitor/model/ConsumerDetail.java rename to src/main/java/com/chickling/kmanager/model/ConsumerDetail.java index d604eaf..5e36b3e 100644 --- a/src/main/java/com/chickling/kmonitor/model/ConsumerDetail.java +++ b/src/main/java/com/chickling/kmanager/model/ConsumerDetail.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmanager/model/ElasticsearchAssistEntity.java b/src/main/java/com/chickling/kmanager/model/ElasticsearchAssistEntity.java new file mode 100644 index 0000000..76f779b --- /dev/null +++ b/src/main/java/com/chickling/kmanager/model/ElasticsearchAssistEntity.java @@ -0,0 +1,54 @@ +package com.chickling.kmanager.model; + +import java.util.List; +import java.util.Date; + +public class ElasticsearchAssistEntity { + private String interval; + private List indexs; + private Date start; + private Date end; + + public ElasticsearchAssistEntity() { + super(); + } + + public ElasticsearchAssistEntity(String interval, List indexs, Date start, Date end) { + super(); + this.interval = interval; + this.indexs = indexs; + this.start = start; + this.end = end; + } + + public void setInterval(String interval) { + this.interval = interval; + } + + public String getInterval() { + return this.interval; + } + + public void setIndexs(List indexs) { + this.indexs = indexs; + } + + public List getIndexs() { + return this.indexs; + } + + public void setStart(Date start){ + this.start = start; + } + + public Date getStart(){ + return this.start; + } + public void setEnd(Date end){ + this.end = end; + } + + public Date getEnd(){ + return this.end; + } +} \ No newline at end of file diff --git a/src/main/java/com/chickling/kmonitor/model/KafkaInfo.java b/src/main/java/com/chickling/kmanager/model/KafkaInfo.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/model/KafkaInfo.java rename to src/main/java/com/chickling/kmanager/model/KafkaInfo.java index aa6e91b..7a30133 100644 --- a/src/main/java/com/chickling/kmonitor/model/KafkaInfo.java +++ b/src/main/java/com/chickling/kmanager/model/KafkaInfo.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import java.util.List; diff --git a/src/main/java/com/chickling/kmonitor/model/Node.java b/src/main/java/com/chickling/kmanager/model/Node.java similarity index 94% rename from src/main/java/com/chickling/kmonitor/model/Node.java rename to src/main/java/com/chickling/kmanager/model/Node.java index e3624a3..268559e 100644 --- a/src/main/java/com/chickling/kmonitor/model/Node.java +++ b/src/main/java/com/chickling/kmanager/model/Node.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import java.util.List; diff --git a/src/main/java/com/chickling/kmonitor/model/OffsetHistory.java b/src/main/java/com/chickling/kmanager/model/OffsetHistory.java similarity index 95% rename from src/main/java/com/chickling/kmonitor/model/OffsetHistory.java rename to src/main/java/com/chickling/kmanager/model/OffsetHistory.java index 2894230..4c53d1f 100644 --- a/src/main/java/com/chickling/kmonitor/model/OffsetHistory.java +++ b/src/main/java/com/chickling/kmanager/model/OffsetHistory.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import java.util.List; diff --git a/src/main/java/com/chickling/kmonitor/model/OffsetHistoryQueryParams.java b/src/main/java/com/chickling/kmanager/model/OffsetHistoryQueryParams.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/model/OffsetHistoryQueryParams.java rename to src/main/java/com/chickling/kmanager/model/OffsetHistoryQueryParams.java index 7a76540..8d5c8bb 100644 --- a/src/main/java/com/chickling/kmonitor/model/OffsetHistoryQueryParams.java +++ b/src/main/java/com/chickling/kmanager/model/OffsetHistoryQueryParams.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/model/OffsetInfo.java b/src/main/java/com/chickling/kmanager/model/OffsetInfo.java similarity index 98% rename from src/main/java/com/chickling/kmonitor/model/OffsetInfo.java rename to src/main/java/com/chickling/kmanager/model/OffsetInfo.java index dc5acbf..2e061cb 100644 --- a/src/main/java/com/chickling/kmonitor/model/OffsetInfo.java +++ b/src/main/java/com/chickling/kmanager/model/OffsetInfo.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/model/OffsetPoints.java b/src/main/java/com/chickling/kmanager/model/OffsetPoints.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/model/OffsetPoints.java rename to src/main/java/com/chickling/kmanager/model/OffsetPoints.java index 385a978..71e4f0c 100644 --- a/src/main/java/com/chickling/kmonitor/model/OffsetPoints.java +++ b/src/main/java/com/chickling/kmanager/model/OffsetPoints.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmanager/model/OffsetStat.java b/src/main/java/com/chickling/kmanager/model/OffsetStat.java new file mode 100644 index 0000000..d659f95 --- /dev/null +++ b/src/main/java/com/chickling/kmanager/model/OffsetStat.java @@ -0,0 +1,62 @@ +package com.chickling.kmanager.model; + +public class OffsetStat { + private Long timestamp; + private String group; + private String topic; + private Long offset; + private Long lag; + + public OffsetStat() { + super(); + } + + public OffsetStat(Long timestamp, String group, String topic, Long offset, Long lag) { + super(); + this.timestamp = timestamp; + this.group = group; + this.topic = topic; + this.offset = offset; + this.lag = lag; + } + + public void setTimestamp(Long timestamp) { + this.timestamp = timestamp; + } + + public Long getTimestamp() { + return this.timestamp; + } + + public String getGroup() { + return this.group; + } + + public void setGroup(String group) { + this.group = group; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getTopic() { + return this.topic; + } + + public Long getOffset() { + return this.offset; + } + + public void setOffset(Long offset) { + this.offset = offset; + } + + public void setLag(Long lag) { + this.lag = lag; + } + + public Long getLag() { + return this.lag; + } +} \ No newline at end of file diff --git a/src/main/java/com/chickling/kmonitor/model/TopicAndConsumersDetails.java b/src/main/java/com/chickling/kmanager/model/TopicAndConsumersDetails.java similarity index 95% rename from src/main/java/com/chickling/kmonitor/model/TopicAndConsumersDetails.java rename to src/main/java/com/chickling/kmanager/model/TopicAndConsumersDetails.java index 8f7c172..97e7f15 100644 --- a/src/main/java/com/chickling/kmonitor/model/TopicAndConsumersDetails.java +++ b/src/main/java/com/chickling/kmanager/model/TopicAndConsumersDetails.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import java.util.List; diff --git a/src/main/java/com/chickling/kmonitor/model/TopicDetails.java b/src/main/java/com/chickling/kmanager/model/TopicDetails.java similarity index 91% rename from src/main/java/com/chickling/kmonitor/model/TopicDetails.java rename to src/main/java/com/chickling/kmanager/model/TopicDetails.java index f359dd6..ccd4d8d 100644 --- a/src/main/java/com/chickling/kmonitor/model/TopicDetails.java +++ b/src/main/java/com/chickling/kmanager/model/TopicDetails.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import java.util.List; diff --git a/src/main/java/com/chickling/kmonitor/model/ZkDataAndStat.java b/src/main/java/com/chickling/kmanager/model/ZkDataAndStat.java similarity index 94% rename from src/main/java/com/chickling/kmonitor/model/ZkDataAndStat.java rename to src/main/java/com/chickling/kmanager/model/ZkDataAndStat.java index 70af434..53d9e48 100644 --- a/src/main/java/com/chickling/kmonitor/model/ZkDataAndStat.java +++ b/src/main/java/com/chickling/kmanager/model/ZkDataAndStat.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.model; +package com.chickling.kmanager.model; import org.apache.zookeeper.data.Stat; diff --git a/src/main/java/com/chickling/kmonitor/utils/CommonUtils.java b/src/main/java/com/chickling/kmanager/utils/CommonUtils.java similarity index 94% rename from src/main/java/com/chickling/kmonitor/utils/CommonUtils.java rename to src/main/java/com/chickling/kmanager/utils/CommonUtils.java index 26a9a21..0e5f902 100644 --- a/src/main/java/com/chickling/kmonitor/utils/CommonUtils.java +++ b/src/main/java/com/chickling/kmanager/utils/CommonUtils.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.utils; +package com.chickling.kmanager.utils; import java.io.File; import java.net.URI; @@ -12,7 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.model.OffsetPoints; +import com.chickling.kmanager.model.OffsetPoints; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/utils/MetricUtils.java b/src/main/java/com/chickling/kmanager/utils/MetricUtils.java similarity index 96% rename from src/main/java/com/chickling/kmonitor/utils/MetricUtils.java rename to src/main/java/com/chickling/kmanager/utils/MetricUtils.java index e772445..de9fb79 100644 --- a/src/main/java/com/chickling/kmonitor/utils/MetricUtils.java +++ b/src/main/java/com/chickling/kmanager/utils/MetricUtils.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.utils; +package com.chickling.kmanager.utils; import java.math.BigDecimal; diff --git a/src/main/java/com/chickling/kmonitor/utils/ZKUtils.java b/src/main/java/com/chickling/kmanager/utils/ZKUtils.java similarity index 87% rename from src/main/java/com/chickling/kmonitor/utils/ZKUtils.java rename to src/main/java/com/chickling/kmanager/utils/ZKUtils.java index f6b65bf..fd94806 100644 --- a/src/main/java/com/chickling/kmonitor/utils/ZKUtils.java +++ b/src/main/java/com/chickling/kmanager/utils/ZKUtils.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.utils; +package com.chickling.kmanager.utils; import java.util.ArrayList; import java.util.Collections; @@ -18,7 +18,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.model.ZkDataAndStat; +import com.chickling.kmanager.model.BrokerInfo; +import com.chickling.kmanager.model.ZkDataAndStat; import kafka.cluster.Broker; import kafka.common.TopicAndPartition; @@ -166,19 +167,32 @@ public static ZkDataAndStat readDataMaybeNull(String path) { return new ZkDataAndStat(data, stat); } - public static List getKafkaJMXHostsFromZookeeper() throws Exception { - List kafkaHosts = new ArrayList(); + public static List getBrokers() throws Exception { + List kafkaHosts = new ArrayList(); List ids = getChildren("/brokers/ids"); for (String id : ids) { try { String brokerInfo = new String(readDataMaybeNull("/brokers/ids/" + id).getData()); + + BrokerInfo bi = new BrokerInfo(); + bi.setBid(Integer.parseInt(id)); JSONObject jsonObj = new JSONObject(brokerInfo); if (jsonObj.has("host")) { - if (jsonObj.has("jmx_port")) { - kafkaHosts.add( - id + ":" + jsonObj.get("host").toString() + ":" + jsonObj.get("jmx_port").toString()); - } + bi.setHost(jsonObj.get("host").toString()); + } + if (jsonObj.has("port")) { + bi.setPort(Integer.parseInt(jsonObj.get("port").toString())); + } + if (jsonObj.has("jmx_port")) { + bi.setJmxPort(Integer.parseInt(jsonObj.get("jmx_port").toString())); + } + if (jsonObj.has("version")) { + bi.setVersion(Integer.parseInt(jsonObj.get("version").toString())); + } + if (jsonObj.has("timestamp")) { + bi.setTimestamp(Long.parseLong(jsonObj.get("timestamp").toString())); } + kafkaHosts.add(bi); } catch (Exception e) { LOG.error("Zookeeper borker getting exception {}", e); } @@ -187,10 +201,12 @@ public static List getKafkaJMXHostsFromZookeeper() throws Exception { } // TODO for those invalid consumer id content, is that a concerned part? - // public static Map> getConsumersPerTopic(String + // public static Map> + // getConsumersPerTopic(String // group, // boolean excludeInternalTopics) { - // List consumers = getChildren(ZkUtils.ConsumersPath() + "/" + group + + // List consumers = getChildren(ZkUtils.ConsumersPath() + "/" + + // group + // "/ids"); // Map> consumersPerTopicMap = new // HashMap>(); diff --git a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/Ielasticsearch.java b/src/main/java/com/chickling/kmanager/utils/elasticsearch/Ielasticsearch.java similarity index 73% rename from src/main/java/com/chickling/kmonitor/utils/elasticsearch/Ielasticsearch.java rename to src/main/java/com/chickling/kmanager/utils/elasticsearch/Ielasticsearch.java index d4dc6e9..c1f079a 100644 --- a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/Ielasticsearch.java +++ b/src/main/java/com/chickling/kmanager/utils/elasticsearch/Ielasticsearch.java @@ -1,11 +1,11 @@ -package com.chickling.kmonitor.utils.elasticsearch; +package com.chickling.kmanager.utils.elasticsearch; import java.util.List; import org.json.JSONObject; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; -import com.chickling.kmonitor.model.OffsetPoints; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.model.OffsetPoints; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java b/src/main/java/com/chickling/kmanager/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java similarity index 97% rename from src/main/java/com/chickling/kmonitor/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java rename to src/main/java/com/chickling/kmanager/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java index 1f33558..9617dbd 100644 --- a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java +++ b/src/main/java/com/chickling/kmanager/utils/elasticsearch/javaapi/ElasticsearchJavaUtil.java @@ -1,4 +1,4 @@ -package com.chickling.kmonitor.utils.elasticsearch.javaapi; +package com.chickling.kmanager.utils.elasticsearch.javaapi; import java.net.InetSocketAddress; import java.text.ParseException; @@ -36,11 +36,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.chickling.kmonitor.alert.WorkerThreadFactory; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; -import com.chickling.kmonitor.model.OffsetPoints; -import com.chickling.kmonitor.utils.elasticsearch.Ielasticsearch; +import com.chickling.kmanager.alert.WorkerThreadFactory; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.model.OffsetPoints; +import com.chickling.kmanager.utils.elasticsearch.Ielasticsearch; /** * @author Hulva Luva.H diff --git a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java b/src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java similarity index 53% rename from src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java rename to src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java index 1905bb3..b142d94 100644 --- a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java +++ b/src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ElasticsearchRESTUtil.java @@ -1,12 +1,15 @@ -package com.chickling.kmonitor.utils.elasticsearch.restapi; +package com.chickling.kmanager.utils.elasticsearch.restapi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -24,11 +27,13 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -import com.chickling.kmonitor.alert.WorkerThreadFactory; -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.OffsetHistoryQueryParams; -import com.chickling.kmonitor.model.OffsetPoints; -import com.chickling.kmonitor.utils.elasticsearch.Ielasticsearch; +import com.chickling.kmanager.alert.WorkerThreadFactory; +import com.chickling.kmanager.initialize.SystemManager; +import com.chickling.kmanager.model.ElasticsearchAssistEntity; +import com.chickling.kmanager.model.OffsetHistoryQueryParams; +import com.chickling.kmanager.model.OffsetPoints; +import com.chickling.kmanager.model.OffsetStat; +import com.chickling.kmanager.utils.elasticsearch.Ielasticsearch; /** * @author Hulva Luva.H @@ -57,6 +62,11 @@ public ElasticsearchRESTUtil(String restHost) { RERST_HOST = restHost; } + public String getHost() { + String[] hosts = RERST_HOST.split("[,;]"); + return hosts[new Random().nextInt(hosts.length)]; + } + /** * GET _cluster/health * @@ -97,21 +107,23 @@ public void bulkIndex(JSONObject data, String docType, String indexPrefix) { Iterator keys = data.keys(); while (keys.hasNext()) { hasData = true; - bulkData.append("{\"index\": {\"_index\":\"" + indexPrefix + indexSufix + "\",\"_type\":\"" + docType + "\"}}").append("\n"); + bulkData.append("{\"index\": {\"_index\":\"" + indexPrefix + indexSufix + "\",\"_type\":\"" + docType + "\"}}") + .append("\n"); bulkData.append(data.getJSONObject(keys.next()).toString()).append("\n"); } if (!hasData) { return; } - ResponseEntity response = REST.exchange("http://" + RERST_HOST + "/_bulk", HttpMethod.POST, + + ResponseEntity response = REST.exchange("http://" + getHost() + "/_bulk", HttpMethod.POST, new HttpEntity(bulkData.toString(), headers), String.class); // TODO Do something with response? response.getBody(); } public List scrollsSearcher(OffsetHistoryQueryParams params, String docType, String indexPrefix) { - ExecutorService pool = - Executors.newFixedThreadPool(SystemManager.DEFAULT_THREAD_POOL_SIZE, new WorkerThreadFactory("OffsetHistoryQuery-RESTAPI")); + ExecutorService pool = Executors.newFixedThreadPool(SystemManager.DEFAULT_THREAD_POOL_SIZE, + new WorkerThreadFactory("OffsetHistoryQuery-RESTAPI")); List result = new ArrayList(); @@ -121,14 +133,15 @@ public List scrollsSearcher(OffsetHistoryQueryParams params, Strin String rangeFrom = getRangeFrom(params); - List concernedTimestamp = - dateHistogram(sFormat.parse(rangeFrom).getTime(), Long.parseLong(params.getRangeto()), params.getInterval()); + List concernedTimestamp = dateHistogram(sFormat.parse(rangeFrom).getTime(), + Long.parseLong(params.getRangeto()), params.getInterval()); List>> futureList = new ArrayList>>(); - ResponseEntity response = REST.exchange("http://" + RERST_HOST + "/" + indexNameSearch + "/" + docType + "/_search?scroll=1m", - HttpMethod.POST, new HttpEntity(ScrollSearchTemplate.getScrollSearchBody(params.getTopic(), params.getGroup(), rangeFrom, - sFormat.format(new Date(Long.parseLong(params.getRangeto())))), headers), + ResponseEntity response = REST.exchange( + "http://" + getHost() + "/" + indexNameSearch + "/" + docType + "/_search?scroll=1m", HttpMethod.POST, + new HttpEntity(ScrollSearchTemplate.getScrollSearchBody(params.getTopic(), params.getGroup(), + rangeFrom, sFormat.format(new Date(Long.parseLong(params.getRangeto())))), headers), String.class); JSONObject searchResult = null; @@ -146,8 +159,8 @@ public List scrollsSearcher(OffsetHistoryQueryParams params, Strin LOG.warn("Ops...GenerateOffsetHistoryDataset went wrong! " + e.getMessage()); } - response = REST.exchange("http://" + RERST_HOST + "/_search/scroll", HttpMethod.POST, - new HttpEntity(ScrollSearchTemplate.getScrollNextBody(searchResult.getString("_scroll_id")), headers), String.class); + response = REST.exchange("http://" + getHost() + "/_search/scroll", HttpMethod.POST, new HttpEntity( + ScrollSearchTemplate.getScrollNextBody(searchResult.getString("_scroll_id")), headers), String.class); } for (Future> future : futureList) { try { @@ -172,18 +185,18 @@ public List scrollsSearcher(OffsetHistoryQueryParams params, Strin private List dateHistogram(long from, long to, String interval) { switch (interval) { - case "1m": - return dateHistogram(from, to, 1 * 60 * 1000); - case "10m": - return dateHistogram(from, to, 10 * 60 * 1000); - case "30m": - return dateHistogram(from, to, 30 * 60 * 1000); - case "1h": - return dateHistogram(from, to, 1 * 60 * 60 * 1000); - case "1d": - return dateHistogram(from, to, 24 * 60 * 60 * 1000); - default: - return dateHistogram(from, to, 1 * 60 * 1000); + case "1m": + return dateHistogram(from, to, 1 * 60 * 1000); + case "10m": + return dateHistogram(from, to, 10 * 60 * 1000); + case "30m": + return dateHistogram(from, to, 30 * 60 * 1000); + case "1h": + return dateHistogram(from, to, 1 * 60 * 60 * 1000); + case "1d": + return dateHistogram(from, to, 24 * 60 * 60 * 1000); + default: + return dateHistogram(from, to, 1 * 60 * 1000); } } @@ -201,27 +214,27 @@ private String getRangeFrom(OffsetHistoryQueryParams params) throws ParseExcepti Calendar cal = Calendar.getInstance(); cal.setTime(new Date(Long.parseLong(params.getRangeto()))); switch (params.getRange()) { - case "1h": - cal.add(Calendar.HOUR, -1); - break; - case "8h": - cal.add(Calendar.HOUR, -8); - break; - case "16h": - cal.add(Calendar.HOUR, -16); - break; - case "1d": - cal.add(Calendar.DATE, -1); - break; - case "2d": - cal.add(Calendar.DATE, -2); - break; - case "1w": - cal.add(Calendar.WEEK_OF_MONTH, -1); - break; - default: - cal.add(Calendar.HOUR, -1); - break; + case "1h": + cal.add(Calendar.HOUR, -1); + break; + case "8h": + cal.add(Calendar.HOUR, -8); + break; + case "16h": + cal.add(Calendar.HOUR, -16); + break; + case "1d": + cal.add(Calendar.DATE, -1); + break; + case "2d": + cal.add(Calendar.DATE, -2); + break; + case "1w": + cal.add(Calendar.WEEK_OF_MONTH, -1); + break; + default: + cal.add(Calendar.HOUR, -1); + break; } return sFormat.format(cal.getTime()); } @@ -254,8 +267,8 @@ private String getRangeFrom(OffsetHistoryQueryParams params) throws ParseExcepti // } public List offsetHistory(String indexPrefix, String docType, String group, String topic) { - ExecutorService pool = - Executors.newFixedThreadPool(SystemManager.DEFAULT_THREAD_POOL_SIZE, new WorkerThreadFactory("OffsetHistoryQuery-RESTAPI")); + ExecutorService pool = Executors.newFixedThreadPool(SystemManager.DEFAULT_THREAD_POOL_SIZE, + new WorkerThreadFactory("OffsetHistoryQuery-RESTAPI")); List result = new ArrayList(); SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); @@ -273,8 +286,9 @@ public List offsetHistory(String indexPrefix, String docType, Stri ResponseEntity response = REST.exchange( - "http://" + RERST_HOST + "/" + indexNameSearch + "/" + docType + "/_search?scroll=1m", HttpMethod.POST, - new HttpEntity(ScrollSearchTemplate.getScrollSearchBody(topic, group, rangeFrom, sFormat.format(now)), headers), + "http://" + getHost() + "/" + indexNameSearch + "/" + docType + "/_search?scroll=1m", HttpMethod.POST, + new HttpEntity(ScrollSearchTemplate.getScrollSearchBody(topic, group, rangeFrom, sFormat.format(now)), + headers), String.class); JSONObject searchResult = null; @@ -292,8 +306,8 @@ public List offsetHistory(String indexPrefix, String docType, Stri LOG.warn("Ops...GenerateOffsetHistoryDataset went wrong! " + e.getMessage()); } - response = REST.exchange("http://" + RERST_HOST + "/_search/scroll", HttpMethod.POST, - new HttpEntity(ScrollSearchTemplate.getScrollNextBody(searchResult.getString("_scroll_id")), headers), String.class); + response = REST.exchange("http://" + getHost() + "/_search/scroll", HttpMethod.POST, new HttpEntity( + ScrollSearchTemplate.getScrollNextBody(searchResult.getString("_scroll_id")), headers), String.class); } for (Future> future : futureList) { try { @@ -345,8 +359,8 @@ public List call() { Long offset = source.getLong("offset"); Long logsize = source.getLong("logSize"); - datasets - .add(new OffsetPoints(source.getLong("timestamp"), source.getInt("partition"), source.getString("owner"), offset, logsize)); + datasets.add(new OffsetPoints(source.getLong("timestamp"), source.getInt("partition"), + source.getString("owner"), offset, logsize)); } } catch (Exception e) { LOG.error("GenerateOffsetHistoryDataset error! " + e.getMessage()); @@ -361,21 +375,134 @@ public void close() { } - public static String metricVizDataSearch(String metric) { - String searchResult = ""; + public static Map> offset(String group, String topic, String start, String end) { + Map> statsMap = new HashMap>(); + String indexPrefix = SystemManager.getConfig().getEsIndex(); try { - String indexNameSearch = SystemManager.getConfig().getEsIndex() + "-*"; - ResponseEntity response = REST.exchange( - "http://" + SystemManager.getConfig().getEsHosts().split(":")[0] + ":9200/" + indexNameSearch + "/" - + SystemManager.JMX_METRIC_ES_DOC_TYPE + "/_search", - HttpMethod.POST, new HttpEntity(ScrollSearchTemplate.getMetricVizSearchBody(metric), headers), String.class); + ElasticsearchAssistEntity assistEntity = ScrollSearchTemplate.getInterval(start, end); + + List indexes = new ArrayList(); + assistEntity.getIndexs().forEach(a -> { + indexes.add(indexPrefix + "-" + a); + }); + + String[] esHost = SystemManager.getConfig().getEsHosts().split("[,;]")[0].split(":"); + + String url = "http://" + esHost[0] + ":" + esHost[1] + "/" + String.join(",", indexes) + "/" + + SystemManager.getElasticSearchJmxType() + "/_search?ignore_unavailable=true&allow_no_indices=true"; + + ResponseEntity response = REST.exchange(url, HttpMethod.POST, + new HttpEntity(ScrollSearchTemplate.getOffset(group, topic, assistEntity), headers), String.class); + String searchResult = response.getBody(); + JSONObject temp = new JSONObject(searchResult); + JSONArray temp2 = temp.getJSONObject("aggregations").getJSONObject("aggs").getJSONArray("buckets"); + List stats = new ArrayList(); + temp2.forEach(obj -> { + JSONObject item = (JSONObject) obj; + JSONArray xx = item.getJSONObject("group").getJSONArray("buckets"); + for (int i = 0; i < xx.length(); i++) { + JSONObject item2 = xx.getJSONObject(i); + JSONArray xxx = item2.getJSONObject("topic").getJSONArray("buckets"); + for (int j = 0; j < xxx.length(); j++) { + JSONObject item3 = xxx.getJSONObject(j); + stats.add(new OffsetStat(item.getLong("key"), item2.get("key").toString(), item3.get("key").toString(), + item3.getJSONObject("offset").getLong("value"), item3.getJSONObject("lag").getLong("value"))); + } + } + }); + + stats.forEach(a -> { + String topicName = a.getTopic(); + if (topicName == null || topicName.length() == 0) { + topicName = "empty"; + } + if (statsMap.containsKey(topicName)) { + statsMap.get(topicName).add(a); + } else { + List arr = new ArrayList(); + arr.add(a); + statsMap.put(topicName, arr); + } + }); + + statsMap.forEach((key, val) -> { + for (int i = val.size() - 1; i > 0; i--) { + val.get(i).setOffset(val.get(i).getOffset() - val.get(i - 1).getOffset()); + } + val.remove(0); + }); + + } catch (Exception e) { + // TODO + LOG.error("Damn...", e); + } + return statsMap; + } + + public static HashMap> JmxTrend(String start, String end) { + HashMap> mappedResult = new HashMap<>(); + String indexPrefix = SystemManager.getConfig().getEsIndex(); + try { + ElasticsearchAssistEntity assistEntity = ScrollSearchTemplate.getInterval(start, end); + + List indexes = new ArrayList(); + assistEntity.getIndexs().forEach(a -> { + indexes.add(indexPrefix + "-" + a); + }); + + String[] esHost = SystemManager.getConfig().getEsHosts().split("[,;]")[0].split(":"); + + String url = "http://" + esHost[0] + ":" + esHost[1] + "/" + String.join(",", indexes) + "/" + + SystemManager.getElasticSearchJmxType() + "/_search?ignore_unavailable=true&allow_no_indices=true"; + + ResponseEntity response = REST.exchange(url, HttpMethod.POST, + new HttpEntity(ScrollSearchTemplate.JmxTrend(assistEntity), headers), String.class); + String searchResult = response.getBody(); + JSONObject temp = new JSONObject(searchResult); + JSONArray temp2 = temp.getJSONObject("aggregations").getJSONObject("aggs").getJSONArray("buckets"); + + temp2.forEach(obj -> { + JSONObject item = (JSONObject) obj; + JSONArray xx = item.getJSONObject("metrics").getJSONArray("buckets"); + for (int i = 0; i < xx.length(); i++) { + JSONObject item2 = xx.getJSONObject(i); + JSONArray xxx = item2.getJSONObject("brokers").getJSONArray("buckets"); + for (int j = 0; j < xxx.length(); j++) { + JSONObject item3 = xxx.getJSONObject(j); + String key = item2.get("key").toString().replaceAll("persec", "") + "|" + item3.get("key"); + ArrayList array = mappedResult.get(key); + if (array == null) { + array = new ArrayList(); + } + array.add(new Long[] { Long.parseLong(item.get("key").toString()), + (long) Double.parseDouble(item3.getJSONObject("offset").get("value").toString()) }); + mappedResult.put(key, array); + } + } + }); + List list = new ArrayList(mappedResult.keySet()); + java.util.Collections.sort(list); + HashMap> mappedResult2 = new HashMap<>(); + for (String key : list) { + System.out.println(key); + ArrayList item = mappedResult.get(key); + ArrayList item2 = new ArrayList<>(); + long val = 0; + for (Integer i = 0; i < item.size(); i++) { + if (i > 0) { + item2.add(new Long[] { item.get(i)[0], item.get(i)[1] - val }); + } + val = item.get(i)[1]; + } + mappedResult2.put(key, item2); + } + return mappedResult2; - searchResult = response.getBody(); } catch (Exception e) { // TODO LOG.error("Damn...", e); } - return searchResult; + return mappedResult; } } diff --git a/src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ScrollSearchTemplate.java b/src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ScrollSearchTemplate.java new file mode 100644 index 0000000..15567d8 --- /dev/null +++ b/src/main/java/com/chickling/kmanager/utils/elasticsearch/restapi/ScrollSearchTemplate.java @@ -0,0 +1,141 @@ +package com.chickling.kmanager.utils.elasticsearch.restapi; + +import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.time.Instant; +import java.time.LocalDate; +import com.chickling.kmanager.model.ElasticsearchAssistEntity; +/** + * @author Hulva Luva.H + * @since 2017-7-19 + * + */ +public class ScrollSearchTemplate { + + public static String getScrollSearchBody(String topic, String group, String from, String to) { + return "{\"size\":1000," + + + "\"sort\":[{\"timestamp\":{\"order\":\"asc\"}},{\"partition\":{\"order\":\"asc\"}}]," + + + "\"query\":{\"bool\":{" + + + "\"must\":[{\"match\":{\"topic\":\"" + topic + "\"}},{\"match\":{\"group\":\"" + group + "\"}}]," + + + "\"filter\":[{\"range\":{\"date\":{\"gte\":\"" + from + "\",\"lte\":\"" + to + + "\",\"format\":\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\"}}}]}}}"; + } + + public static String getScrollNextBody(String scrollId) { + return "{\"scroll\":\"1m\",\"scroll_id\":\"" + scrollId + "\"}"; + } + public static String getInterval(int diff) { + if (diff / 5 < 100) { + return "5m"; + } + if (diff / 10 < 100) { + return "10m"; + } + if (diff / 30 < 100) { + return "30m"; + } + if (diff / 60 < 100) { + return "1h"; + } + if (diff / (4 * 60) < 100) { + return "4h"; + } + if (diff / (8 * 60) < 100) { + return "8h"; + } + if (diff / (16 * 60) < 100) { + return "16h"; + } + return "1d"; + } + + public static ElasticsearchAssistEntity getInterval(String start, String end) { + String format = "MM/dd/yyyy HH:mm"; + + SimpleDateFormat sdf = new SimpleDateFormat(format); + + Date startDate; + try { + + startDate = sdf.parse(start + " 00:00:00"); + } catch (Exception ex) { + // yesterday + startDate = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); + } + Date endDate; + try { + endDate = sdf.parse(end + " 23:59:59"); + Date now = new Date(); + if (endDate.getTime() > now.getTime()) { + endDate = now; + } + } catch (Exception ex) { + endDate = new Date(); + } + long diff = endDate.getTime() - startDate.getTime(); + int diffmin = (int) (diff / (60 * 1000)); + + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); + LocalDate startLocalDate = LocalDate.parse(sdf2.format(startDate)); + LocalDate endLocalDate = LocalDate.parse(sdf2.format(endDate)); + + List days = new ArrayList(); + while (!startLocalDate.isAfter(endLocalDate)) { + days.add(startLocalDate.toString()); + startLocalDate = startLocalDate.plusDays(1); + } + + return new ElasticsearchAssistEntity(getInterval(diffmin), days, startDate, endDate); + } + public static String getOffset(String group, String topic, ElasticsearchAssistEntity assistEntity) { + + String query = "{\"size\": 0,\"aggs\": {\"aggs\": {\"date_histogram\": {\"field\": \"timestamp\"," + + "\"interval\": \""+ assistEntity.getInterval() +"\"" + + ",\"time_zone\": \"America/Los_Angeles\"},\"aggs\": {\"group\": {\"terms\": {\"field\": \"group\",\"order\": {\"_term\": \"desc\"}}" + + ",\"aggs\": {\"topic\": {\"terms\": {\"field\": \"topic\",\"order\": {\"_term\": \"desc\"}}" + + ",\"aggs\": {\"data\": {\"terms\": {\"field\": \"partition\",\"order\": {\"_term\": \"desc\"}}" + + ",\"aggs\": {\"offset\": {\"max\": {\"field\": \"offset\"}}, \"lag\": {\"max\": {\"field\": \"lag\"}}}}" + + ",\"offset\":{\"sum_bucket\":{\"buckets_path\": \"data>offset\"}}" + + ",\"lag\":{\"sum_bucket\":{\"buckets_path\": \"data>lag\"}}}}}}}}}" + + ",\"query\": {\"filtered\": {\"query\": {\"query_string\": {\"analyze_wildcard\": true,\"query\": \"*\"}}" + + ",\"filter\": {\"bool\": {\"must\": [" + + "{\"query\": {\"match\": {\"_type\": {\"query\": \"kafkaoffset-e3\",\"type\": \"phrase\"}}}}, "; + if (group != null && group.length() > 0) { + query += "{\"query\": {\"match\": {\"group\": {\"query\": \"" + group + "\",\"type\": \"phrase\"}}}},"; + } + if (topic != null && topic.length() > 0) { + query += "{\"query\": {\"match\": {\"topic\": {\"query\": \"" + topic + "\",\"type\": \"phrase\"}}}},"; + } + query += "{\"range\": {\"timestamp\": {" + "\"gte\":" + assistEntity.getStart().getTime() + ",\"lte\": " + + assistEntity.getEnd().getTime() + ",\"format\": \"epoch_millis\"}}}" + "]}}}}}"; + return query; + } + + public static String JmxTrend(ElasticsearchAssistEntity assistEntity) { + return "{\"size\": 0," + " \"aggs\": {" + " \"aggs\": {" + " \"date_histogram\": {" + + " \"field\": \"timestamp\"," + " \"interval\": \""+ assistEntity.getInterval() + "\"," + + " \"time_zone\": \"America/Los_Angeles\"" + " }," + " \"aggs\": {" + " \"metrics\": {" + + " \"terms\": {" + " \"field\": \"metric\"," + " \"size\": 0," + + " \"order\": {" + " \"_term\": \"desc\"" + " }" + " }," + + " \"aggs\": {" + " \"brokers\": {" + " \"terms\": {" + + " \"field\": \"broker\"," + " \"size\": 0," + " \"order\": {" + + " \"_term\": \"desc\"" + " }" + " }," + + " \"aggs\": {" + " \"offset\": {" + " \"max\": {" + + " \"field\": \"count\"" + " }" + " }" + " }" + + " }" + " }" + " }" + " }" + " }" + " }," + " \"query\": {" + + " \"filtered\": {" + " \"query\": {" + " \"query_string\": {" + + " \"analyze_wildcard\": true," + " \"query\": \"_type:jmxMetrics\"" + " }" + + " }," + " \"filter\": {" + " \"bool\": {" + " \"must\": [{" + + " \"range\": {" + " \"timestamp\": {" + " \"gte\":" + + assistEntity.getStart().getTime() + "," + " \"lte\": " + assistEntity.getEnd().getTime() + "," + + " \"format\": \"epoch_millis\"" + " }" + " }" + " }]," + + " \"must_not\": []" + " }" + " }" + " }" + " }" + "}"; + + } +} diff --git a/src/main/java/com/chickling/kmonitor/controller/ClusterController.java b/src/main/java/com/chickling/kmonitor/controller/ClusterController.java deleted file mode 100644 index 47655fc..0000000 --- a/src/main/java/com/chickling/kmonitor/controller/ClusterController.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.chickling.kmonitor.controller; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.model.Node; - -/** - * - * @author Hulva Luva.H - * - */ -@RestController -public class ClusterController { - - @RequestMapping(value = "/clusterlist", method = RequestMethod.GET) - public Node getTopicList() { - return SystemManager.og.getClusterViz(); - } -} diff --git a/src/main/java/com/chickling/kmonitor/controller/JMXMetricController.java b/src/main/java/com/chickling/kmonitor/controller/JMXMetricController.java deleted file mode 100644 index 5dc65a7..0000000 --- a/src/main/java/com/chickling/kmonitor/controller/JMXMetricController.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.chickling.kmonitor.controller; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import javax.management.MBeanServerConnection; - -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import com.chickling.kmonitor.initialize.SystemManager; -import com.chickling.kmonitor.jmx.FormatedMeterMetric; -import com.chickling.kmonitor.jmx.JMXExecutor; -import com.chickling.kmonitor.jmx.KafkaJMX; -import com.chickling.kmonitor.jmx.KafkaMetrics; -import com.chickling.kmonitor.jmx.MeterMetric; -import com.chickling.kmonitor.utils.ZKUtils; -import com.chickling.kmonitor.utils.elasticsearch.restapi.ElasticsearchRESTUtil; - -/** - * - * @author Hulva Luva.H - * @since 2017-07-12 - * - */ - -@RestController -@RequestMapping("/metrics") -public class JMXMetricController { - private static Logger LOG = LoggerFactory.getLogger(JMXMetricController.class); - - @RequestMapping(value = "/brokerTopicMetrics/brokers", method = RequestMethod.GET) - public String getBrokerTopicMetricsForBrokers() { - Map result = new HashMap(); - try { - List jmxHosts = ZKUtils.getKafkaJMXHostsFromZookeeper(); - for (String jmxHost : jmxHosts) { - String[] jmxArr = jmxHost.split(":"); - if ("-1".equals(jmxArr[2])) { - continue; - } - KafkaJMX kafkaJMX = new KafkaJMX(); - kafkaJMX.doWithConnection(jmxArr[1], Integer.parseInt(jmxArr[2]), Optional.of(""), Optional.of(""), false, new JMXExecutor() { - - @Override - public void doWithConnection(MBeanServerConnection mBeanServerConnection) { - KafkaMetrics metrics = new KafkaMetrics(); - if (result.containsKey("MessagesInPerSec")) { - result.put("MessagesInPerSec", - merge(result.get("MessagesInPerSec"), metrics.getMessagesInPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("MessagesInPerSec", metrics.getMessagesInPerSec(mBeanServerConnection, Optional.empty())); - } - - if (result.containsKey("BytesInPerSec")) { - result.put("BytesInPerSec", - merge(result.get("BytesInPerSec"), metrics.getBytesInPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("BytesInPerSec", metrics.getBytesInPerSec(mBeanServerConnection, Optional.empty())); - } - - if (result.containsKey("BytesOutPerSec")) { - result.put("BytesOutPerSec", - merge(result.get("BytesOutPerSec"), metrics.getBytesOutPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("BytesOutPerSec", metrics.getBytesOutPerSec(mBeanServerConnection, Optional.empty())); - } - - if (result.containsKey("BytesRejectedPerSec")) { - result.put("BytesRejectedPerSec", - merge(result.get("BytesRejectedPerSec"), metrics.getBytesRejectedPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("BytesRejectedPerSec", metrics.getBytesRejectedPerSec(mBeanServerConnection, Optional.empty())); - } - - if (result.containsKey("FailedFetchRequestsPerSec")) { - result.put("FailedFetchRequestsPerSec", merge(result.get("FailedFetchRequestsPerSec"), - metrics.getFailedFetchRequestsPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("FailedFetchRequestsPerSec", metrics.getFailedFetchRequestsPerSec(mBeanServerConnection, Optional.empty())); - } - - if (result.containsKey("FailedProduceRequestsPerSec")) { - result.put("FailedProduceRequestsPerSec", merge(result.get("FailedProduceRequestsPerSec"), - metrics.getFailedProduceRequestsPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("FailedProduceRequestsPerSec", metrics.getFailedProduceRequestsPerSec(mBeanServerConnection, Optional.empty())); - } - } - }); - } - } catch (Exception e) { - LOG.error("Get jmxHosts error!" + e.getMessage()); - } - JSONObject response = new JSONObject(); - Set keys = result.keySet(); - for (String key : keys) { - if ("MessagesInPerSec".equals(key)) { - response.put(key, new JSONObject(new FormatedMeterMetric(result.get(key), 0))); - } else { - response.put(key, new JSONObject(new FormatedMeterMetric(result.get(key)))); - } - } - response.put("esUrl", SystemManager.getConfig().getEsHosts().split(":")[0] + ":9200/" + SystemManager.getConfig().getEsIndex() + "-*"); - return response.toString(); - } - - protected MeterMetric merge(MeterMetric old, MeterMetric newOne) { - return new MeterMetric(old.getCount() + newOne.getCount(), old.getMeanRate() + newOne.getMeanRate(), - old.getOneMinuteRate() + newOne.getOneMinuteRate(), old.getFiveMinuteRate() + newOne.getFiveMinuteRate(), - old.getFifteenMinuteRate() + newOne.getFifteenMinuteRate()); - } - - @RequestMapping(value = "/brokerTopicMetrics/broker/{bid}", method = RequestMethod.GET) - public String getBrokerTopicMetricsForBroker(@PathVariable String bid) { - JSONObject response = new JSONObject(); - try { - List jmxHosts = ZKUtils.getKafkaJMXHostsFromZookeeper(); - for (String jmxHost : jmxHosts) { - String[] jmxArr = jmxHost.split(":"); - if (bid.equals(jmxArr[0])) { - if ("-1".equals(jmxArr[2])) { - return response.toString(); - } - KafkaJMX kafkaJMX = new KafkaJMX(); - kafkaJMX.doWithConnection(jmxArr[1], Integer.parseInt(jmxArr[2]), Optional.of(""), Optional.of(""), false, new JMXExecutor() { - - @Override - public void doWithConnection(MBeanServerConnection mBeanServerConnection) { - KafkaMetrics metrics = new KafkaMetrics(); - response.put("MessagesInPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getMessagesInPerSec(mBeanServerConnection, Optional.empty()), 0))); - response.put("BytesInPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getBytesInPerSec(mBeanServerConnection, Optional.empty())))); - response.put("BytesOutPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getBytesOutPerSec(mBeanServerConnection, Optional.empty())))); - response.put("BytesRejectedPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getBytesRejectedPerSec(mBeanServerConnection, Optional.empty())))); - response.put("FailedFetchRequestsPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getFailedFetchRequestsPerSec(mBeanServerConnection, Optional.empty())))); - response.put("FailedProduceRequestsPerSec", - new JSONObject(new FormatedMeterMetric(metrics.getFailedProduceRequestsPerSec(mBeanServerConnection, Optional.empty())))); - } - }); - } - } - } catch (Exception e) { - LOG.error("Get jmxHosts error!" + e.getMessage()); - } - return response.toString(); - } - - @RequestMapping(value = "/brokerTopicMetrics/topic/{topic}", method = RequestMethod.GET) - public String getBrokerTopicMetrics(@PathVariable String topic) { - Map result = new HashMap(); - try { - List jmxHosts = ZKUtils.getKafkaJMXHostsFromZookeeper(); - for (String jmxHost : jmxHosts) { - String[] jmxArr = jmxHost.split(":"); - if ("-1".equals(jmxArr[2])) { - continue; - } - KafkaJMX kafkaJMX = new KafkaJMX(); - kafkaJMX.doWithConnection(jmxArr[1], Integer.parseInt(jmxArr[2]), Optional.of(""), Optional.of(""), false, new JMXExecutor() { - - @Override - public void doWithConnection(MBeanServerConnection mBeanServerConnection) { - KafkaMetrics metrics = new KafkaMetrics(); - if (result.containsKey("MessagesInPerSec")) { - result.put("MessagesInPerSec", - merge(result.get("MessagesInPerSec"), metrics.getMessagesInPerSec(mBeanServerConnection, Optional.of(topic)))); - } else { - result.put("MessagesInPerSec", metrics.getMessagesInPerSec(mBeanServerConnection, Optional.of(topic))); - } - if (result.containsKey("BytesInPerSec")) { - result.put("BytesInPerSec", - merge(result.get("BytesInPerSec"), metrics.getBytesInPerSec(mBeanServerConnection, Optional.of(topic)))); - } else { - result.put("BytesInPerSec", metrics.getBytesInPerSec(mBeanServerConnection, Optional.of(topic))); - } - - if (result.containsKey("BytesOutPerSec")) { - result.put("BytesOutPerSec", - merge(result.get("BytesOutPerSec"), metrics.getBytesOutPerSec(mBeanServerConnection, Optional.of(topic)))); - } else { - result.put("BytesOutPerSec", metrics.getBytesOutPerSec(mBeanServerConnection, Optional.of(topic))); - } - - if (result.containsKey("BytesRejectedPerSec")) { - result.put("BytesRejectedPerSec", - merge(result.get("BytesRejectedPerSec"), metrics.getBytesRejectedPerSec(mBeanServerConnection, Optional.of(topic)))); - } else { - result.put("BytesRejectedPerSec", metrics.getBytesRejectedPerSec(mBeanServerConnection, Optional.of(topic))); - } - - if (result.containsKey("FailedFetchRequestsPerSec")) { - result.put("FailedFetchRequestsPerSec", merge(result.get("FailedFetchRequestsPerSec"), - metrics.getFailedFetchRequestsPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("FailedFetchRequestsPerSec", metrics.getFailedFetchRequestsPerSec(mBeanServerConnection, Optional.of(topic))); - } - if (result.containsKey("FailedProduceRequestsPerSec")) { - result.put("FailedProduceRequestsPerSec", merge(result.get("FailedProduceRequestsPerSec"), - metrics.getFailedProduceRequestsPerSec(mBeanServerConnection, Optional.empty()))); - } else { - result.put("FailedProduceRequestsPerSec", metrics.getFailedProduceRequestsPerSec(mBeanServerConnection, Optional.of(topic))); - } - } - - }); - } - } catch (Exception e) { - LOG.error("Get jmxHosts error!" + e.getMessage()); - - } - JSONObject response = new JSONObject(); - Set keys = result.keySet(); - for (String key : keys) { - if ("MessagesInPerSec".equals(key)) { - response.put(key, new JSONObject(new FormatedMeterMetric(result.get(key), 0))); - } else { - response.put(key, new JSONObject(new FormatedMeterMetric(result.get(key)))); - } - } - return response.toString(); - } - - @RequestMapping(value = "/metricviz", method = RequestMethod.POST) - public String getMetricVizData(@RequestBody String metric) { - return ElasticsearchRESTUtil.metricVizDataSearch(metric); - } -} diff --git a/src/main/java/com/chickling/kmonitor/model/GroupTopicPartition.java b/src/main/java/com/chickling/kmonitor/model/GroupTopicPartition.java deleted file mode 100644 index 54a5777..0000000 --- a/src/main/java/com/chickling/kmonitor/model/GroupTopicPartition.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.chickling.kmonitor.model; - -import kafka.common.TopicAndPartition; - -/** - * @author Hulva Luva.H - * - */ -public class GroupTopicPartition { - private String group; - private TopicAndPartition topicAndPartition; - - public GroupTopicPartition(String group, TopicAndPartition topicAndPartition) { - super(); - this.group = group; - this.topicAndPartition = topicAndPartition; - } - - public GroupTopicPartition(String group, String topic, int partition) { - this(group, new TopicAndPartition(topic, partition)); - } - - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } - - public TopicAndPartition getTopicAndPartition() { - return topicAndPartition; - } - - public void setTopicAndPartition(TopicAndPartition topicAndPartition) { - this.topicAndPartition = topicAndPartition; - } - - @Override - public String toString() { - return "GroupTopicPartition [group=" + group + ", topicAndPartition=" + topicAndPartition + "]"; - } - -} diff --git a/src/main/java/com/chickling/kmonitor/model/MessageValueStructAndVersion.java b/src/main/java/com/chickling/kmonitor/model/MessageValueStructAndVersion.java deleted file mode 100644 index 78bf138..0000000 --- a/src/main/java/com/chickling/kmonitor/model/MessageValueStructAndVersion.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - Copyright 2017 2017 Hulva Luva.H -**/ -package com.chickling.kmonitor.model; - -import org.apache.kafka.common.protocol.types.Struct; - -/** - * @author Hulva Luva.H - * - */ -public class MessageValueStructAndVersion { - private Struct struct; - private Short version; - - public MessageValueStructAndVersion() { - super(); - } - - public Struct getStruct() { - return struct; - } - - public MessageValueStructAndVersion(Struct struct, Short version) { - super(); - this.struct = struct; - this.version = version; - } - - public void setStruct(Struct struct) { - this.struct = struct; - } - - public Short getVersion() { - return version; - } - - public void setVersion(Short version) { - this.version = version; - } - - @Override - public String toString() { - return "MessageValueStructAndVersion [struct=" + struct + ", version=" + version + "]"; - } - -} diff --git a/src/main/java/com/chickling/kmonitor/model/TopicAndGroup.java b/src/main/java/com/chickling/kmonitor/model/TopicAndGroup.java deleted file mode 100644 index fa796ef..0000000 --- a/src/main/java/com/chickling/kmonitor/model/TopicAndGroup.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.chickling.kmonitor.model; - -/** - * @author Hulva Luva.H - * - */ -public class TopicAndGroup { - private String topic; - private String group; - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } - - @Override - public String toString() { - return "TopicAndGroup [topic=" + topic + ", group=" + group + "]"; - } - -} diff --git a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ScrollSearchTemplate.java b/src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ScrollSearchTemplate.java deleted file mode 100644 index 189a115..0000000 --- a/src/main/java/com/chickling/kmonitor/utils/elasticsearch/restapi/ScrollSearchTemplate.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.chickling.kmonitor.utils.elasticsearch.restapi; - -import java.util.Date; - -/** - * @author Hulva Luva.H - * @since 2017-7-19 - * - */ -public class ScrollSearchTemplate { - - public static String getScrollSearchBody(String topic, String group, String from, String to) { - return "{\"size\":1000," - - + "\"sort\":[{\"timestamp\":{\"order\":\"asc\"}},{\"partition\":{\"order\":\"asc\"}}]," - - + "\"query\":{\"bool\":{" - - + "\"must\":[{\"match\":{\"topic\":\"" + topic + "\"}},{\"match\":{\"group\":\"" + group + "\"}}]," - - + "\"filter\":[{\"range\":{\"date\":{\"gte\":\"" + from + "\",\"lte\":\"" + to - + "\",\"format\":\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\"}}}]}}}"; - } - - public static String getScrollNextBody(String scrollId) { - return "{\"scroll\":\"1m\",\"scroll_id\":\"" + scrollId + "\"}"; - } - - public static String getMetricVizSearchBody(String metric) { - return "{\"size\": 2000," - - + "\"sort\": [{\"timestamp\": {\"order\": \"desc\"}},\"broker\"]," - - + "\"query\": {\"bool\": {" - - + "\"must\": [{\"match\": { \"metric\": \"" + metric + "\" }}]," - - + "\"filter\": [{" - - + "\"range\": {\"timestamp\": {" - - + "\"gte\": " + (new Date().getTime() - 480 * 60000) + "," - - + "\"lte\": " + new Date().getTime() + "}}}]}}}"; - } -} diff --git a/src/main/resources/static/chart.html b/src/main/resources/static/chart.html new file mode 100644 index 0000000..7285971 --- /dev/null +++ b/src/main/resources/static/chart.html @@ -0,0 +1,145 @@ + + + + + + + + Kmanager chart -Chickling + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/chartTopic.html b/src/main/resources/static/chartTopic.html new file mode 100644 index 0000000..c385b67 --- /dev/null +++ b/src/main/resources/static/chartTopic.html @@ -0,0 +1,222 @@ + + + + + + + + Kmanager chart -Chickling + + + + + + + + + + + + + + + + +

+
+
+
+
+   + +
+
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/images/logo.ico b/src/main/resources/static/images/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..41a250c2e82d7566961558485c74e23e30a97665 GIT binary patch literal 167562 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/logo.jpg b/src/main/resources/static/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5f81d9200110054040458a886f1ef78bbdf3b60 GIT binary patch literal 68617 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 J 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 JwQJiP{||?F*jNAn literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/logo2.jpg b/src/main/resources/static/images/logo2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70abbab519c1c030a204ad5ffc5e403b55a66c40 GIT binary patch literal 23249 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/logo3.png b/src/main/resources/static/images/logo3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6cdb46e239e070a5a1f0d58c39404ba759d73c GIT binary patch literal 36562 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 bmwX757k9h)px;ju1bik}EsS1WagF>RDZ6b6 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index f4b3c4e..0a4ecb2 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -1,33 +1,15 @@ - + - - -KMonitor - - - - - - - - - +Kmanager-Chickling + - + @@ -38,14 +20,15 @@ + + - + -