From 753c86bfbefaf58930b4dbde5931df7bfc6e72f3 Mon Sep 17 00:00:00 2001 From: Alison Goryachev Date: Wed, 13 Jul 2022 08:48:32 -0400 Subject: [PATCH 01/96] [Guided onboarding] Update landing page with new solution images (#136122) --- .../__snapshots__/use_case_card.test.tsx.snap | 57 ++---------- .../guided_onboarding/use_case_card.test.tsx | 5 +- .../guided_onboarding/use_case_card.tsx | 81 ++++++------------ .../assets/solution_logos/observability.png | Bin 0 -> 23606 bytes .../solution_logos/observability_dark.png | Bin 0 -> 23642 bytes .../public/assets/solution_logos/search.png | Bin 0 -> 28198 bytes .../assets/solution_logos/search_dark.png | Bin 0 -> 28564 bytes .../public/assets/solution_logos/security.png | Bin 0 -> 26012 bytes .../assets/solution_logos/security_dark.png | Bin 0 -> 26129 bytes 9 files changed, 38 insertions(+), 105 deletions(-) create mode 100644 src/plugins/home/public/assets/solution_logos/observability.png create mode 100644 src/plugins/home/public/assets/solution_logos/observability_dark.png create mode 100644 src/plugins/home/public/assets/solution_logos/search.png create mode 100644 src/plugins/home/public/assets/solution_logos/search_dark.png create mode 100644 src/plugins/home/public/assets/solution_logos/security.png create mode 100644 src/plugins/home/public/assets/solution_logos/security_dark.png diff --git a/src/plugins/home/public/application/components/guided_onboarding/__snapshots__/use_case_card.test.tsx.snap b/src/plugins/home/public/application/components/guided_onboarding/__snapshots__/use_case_card.test.tsx.snap index 4c66056e0338c..7ace627183237 100644 --- a/src/plugins/home/public/application/components/guided_onboarding/__snapshots__/use_case_card.test.tsx.snap +++ b/src/plugins/home/public/application/components/guided_onboarding/__snapshots__/use_case_card.test.tsx.snap @@ -14,23 +14,10 @@ exports[`use case card should render use case card component for observability 1 } display="subdued" - icon={ - - } image={ -
} onClick={[Function]} @@ -63,23 +50,10 @@ exports[`use case card should render use case card component for search 1`] = ` } display="subdued" - icon={ - - } image={ -
} onClick={[Function]} @@ -112,23 +86,10 @@ exports[`use case card should render use case card component for security 1`] = } display="subdued" - icon={ - - } image={ -
} onClick={[Function]} diff --git a/src/plugins/home/public/application/components/guided_onboarding/use_case_card.test.tsx b/src/plugins/home/public/application/components/guided_onboarding/use_case_card.test.tsx index b22bd49841f2f..b899d533572c7 100644 --- a/src/plugins/home/public/application/components/guided_onboarding/use_case_card.test.tsx +++ b/src/plugins/home/public/application/components/guided_onboarding/use_case_card.test.tsx @@ -12,11 +12,14 @@ import { shallow } from 'enzyme'; import { UseCaseCard } from './use_case_card'; jest.mock('../../kibana_services', () => { - const { applicationServiceMock } = jest.requireActual('@kbn/core/public/mocks'); + const { applicationServiceMock, uiSettingsServiceMock, httpServiceMock } = + jest.requireActual('@kbn/core/public/mocks'); return { getServices: () => ({ application: applicationServiceMock.createStartContract(), trackUiMetric: jest.fn(), + uiSettings: uiSettingsServiceMock.createStartContract(), + http: httpServiceMock.createStartContract(), }), }; }); diff --git a/src/plugins/home/public/application/components/guided_onboarding/use_case_card.tsx b/src/plugins/home/public/application/components/guided_onboarding/use_case_card.tsx index 599a321052ba0..cb5d765fc66c6 100644 --- a/src/plugins/home/public/application/components/guided_onboarding/use_case_card.tsx +++ b/src/plugins/home/public/application/components/guided_onboarding/use_case_card.tsx @@ -6,16 +6,8 @@ * Side Public License, v 1. */ -import React, { useMemo } from 'react'; -import { - EuiAvatar, - EuiCard, - EuiText, - EuiTitle, - IconType, - useEuiTheme, - useIsWithinBreakpoints, -} from '@elastic/eui'; +import React from 'react'; +import { EuiCard, EuiText, EuiTitle, EuiImage } from '@elastic/eui'; import { METRIC_TYPE } from '@kbn/analytics'; import { i18n } from '@kbn/i18n'; @@ -28,9 +20,8 @@ type UseCaseConstants = { title: string; description: string; }; - icon: { - type: IconType; - name: string; + logo: { + altText: string; }; navigateOptions: { appId: string; @@ -49,10 +40,9 @@ const constants: UseCaseConstants = { 'Create a finely-tuned search experience for your websites, applications, workplace content, and more.', }), }, - icon: { - type: 'inspect', - name: i18n.translate('home.guidedOnboarding.gettingStarted.search.iconName', { - defaultMessage: 'Enterprise Search icon', + logo: { + altText: i18n.translate('home.guidedOnboarding.gettingStarted.search.iconName', { + defaultMessage: 'Enterprise Search logo', }), }, navigateOptions: { @@ -73,10 +63,9 @@ const constants: UseCaseConstants = { } ), }, - icon: { - type: 'eye', - name: i18n.translate('home.guidedOnboarding.gettingStarted.observability.iconName', { - defaultMessage: 'Observability icon', + logo: { + altText: i18n.translate('home.guidedOnboarding.gettingStarted.observability.iconName', { + defaultMessage: 'Observability logo', }), }, navigateOptions: { @@ -94,10 +83,9 @@ const constants: UseCaseConstants = { 'Protect your environment against threats by unifying SIEM, endpoint security, and cloud security in one place.', }), }, - icon: { - type: 'securitySignal', - name: i18n.translate('home.guidedOnboarding.gettingStarted.security.iconName', { - defaultMessage: 'Security icon', + logo: { + altText: i18n.translate('home.guidedOnboarding.gettingStarted.security.iconName', { + defaultMessage: 'Security logo', }), }, navigateOptions: { @@ -113,7 +101,17 @@ export interface UseCaseProps { } export const UseCaseCard = ({ useCase }: UseCaseProps) => { - const { application, trackUiMetric } = getServices(); + const { application, trackUiMetric, uiSettings, http } = getServices(); + + const isDarkTheme = uiSettings.get('theme:darkMode'); + + const getImageUrl = (imageName: UseCase) => { + const imagePath = `/plugins/home/assets/solution_logos/${imageName}${ + isDarkTheme ? '_dark' : '' + }.png`; + + return http.basePath.prepend(imagePath); + }; const onUseCaseSelection = () => { trackUiMetric(METRIC_TYPE.CLICK, `guided_onboarding__use_case__${useCase}`); @@ -136,40 +134,11 @@ export const UseCaseCard = ({ useCase }: UseCaseProps) => {

{constants[useCase].i18nTexts.description}

); - - const { euiTheme } = useEuiTheme(); - const isSmallerBreakpoint = useIsWithinBreakpoints(['xs', 's']); - const isMediumBreakpoint = useIsWithinBreakpoints(['m']); - const cardCss = useMemo(() => { - return { - backgroundColor: - useCase === 'search' - ? euiTheme.colors.warning - : useCase === 'security' - ? euiTheme.colors.accent - : euiTheme.colors.success, - // smaller screens: taller cards (250px) - // medium screens: lower cards (150px) - // larger screens: tall but not too tall cards (200px) - minHeight: isSmallerBreakpoint ? 250 : isMediumBreakpoint ? 150 : 200, - }; - }, [euiTheme, isMediumBreakpoint, isSmallerBreakpoint, useCase]); - return ( - } - image={
} + image={} title={title} description={description} // Used for FS tracking diff --git a/src/plugins/home/public/assets/solution_logos/observability.png b/src/plugins/home/public/assets/solution_logos/observability.png new file mode 100644 index 0000000000000000000000000000000000000000..b72753a98ce11f7912549b61235a1ea7a1ff419f GIT binary patch literal 23606 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%0DHkTUiNeyErV@>D(nOS&x{(@*GwZy?_ zx@(>6H{*oR?%2{aJwF?kn_Z3VaJXHE9PPN#^c0Tah5TS4)?b$2HUiQ(wgstO6-T7D-QRF2ZJ&qTR-z<83UmCdLHEZBkF;vQWC78`QTnw zYu&Suww<}@*!PB`vM@VxVhnUYF;DrSvIm#{Y^%z&SA^DH7G!!hA_ ze*iN9OUY`+F?xSM8Cf>o)%PrpBA2vrlRLB8u4iNR*lsjZT>6$7tp1tnPE1HVVTZlm zI!j!R>0NKzp8KT%ZN2^kdAJ0svO3y@w&O3H*WAo4WN+nP`T&nZW8+{PrQL_fMQDGX z2QeCu0pyZp+JoKume*OvtgaoJjJijw`Jrd^wvhrD!7f5jACh-?blon|Z=38EUw(}k z$n*lXXr1Hwq*%yHI9T7ex{~FmiLxB9$Vzxuab}PgxoXUU^UuQxws7lPFg@4;gQYNc z^{lk;zbnRNN(h%2=f^d0m?7NQ1s*^k(0cFAgW})y4UZ*q-~1lGw7qPd+AGK8LbM{! z@?X^g)2B*H1pol*c@8b&B$|mME?3Ox5T4NalnzuS08dx$^C*MW9q_%}DtFnPR5GBo zoQY~~vH!~95pEmw)=U9YIf$XqFB*E6Qo$7nz=+5R3tXnjyPrtZufObXx#8z=K|F?Li_79qr85%Sh ztB^S5-TV}@yI{LK2uCiBTyHJxyp1v5UYBvF0)v4qLuS(LgAiA(VXzTk#F(i>INtTd z&5h&U7%%T7iq!Oz38RWwMB#{y3Q@;BJc&=EsNysL5PWynD}Mob^xX|}CV0YlN{%`8 zDTxnp%ZnSZu;5&V>n#|VpK_nHDX#0oSgi1l^%CZex;oHcO&@??lt=;|jK6bv1v3kD z3H=cz_Ah$F3qB-!dkiZ!37d-K+v560ym0yy0w9>Tq-i>V@NQ1>S~Okxbi{eF$xLm{ z>U?XbKyJ@`<0A8%J_i)Z!?D^OULF5^eR``K*nM@>jxRdVj&Ron`}m;A-tTyx+e%`B zA^WX3Su;aB@R&qb%~rA}q0k(l<>j(!#Mg6kg2RWok7E<=B(uGDe?fC@1GI~G4HPF0 z#B~i$MKa`0N6GMmX-aNaYYnp?$7W7Npf2y`$nSDMl(7rA;p9a;rTVz-6}11c+B3P0 zUl_|KhHp5IG&I%hW)U9%;3-QFdR=rpRHfPW|8A_0Ge0_P*RMuf{HXO4IT@qI&z*_2 z$;Dnflz25}?z*Fu+P+4g+F|E7Iyg33hx%C_(-UrhJEvSKc2qxUJx0Y$YI@BJH0NoztJx5z9m2lD3(+Vwy>0_+ zphm1g>dkJ9#PNnmV;%kt7v!)Wc>ucNB+a18`%xr~JGD;JR?^{J=s(ET|AxA`Zzu7} zg1i3Mf5CCy8XS20J~s25D935==jJ~Vo`J6~J{{nP#QphNY}v|jP7UYV z1)j~(rP0%Lzch8RiR1uF-MLi{q^|3Adb`bCq0szt+g5!yrk7ppy z^S$Has&Ni=OHW@+s{`_sc7stTR9_z{ovNq^KGd+`pBZj!udePx-UDRHiJ#0FZ#%0U z`&LG|OIP@d@AVO2zt+Mx1KW+A(sb%F3%te_IZf@O)_s4v6 zcY9vgI91uYHvhdtwCIpg z(Q)N9ictT1tUwUoB3~ar-nn?;RHamiLlCO_j*qi37JKOug2)eu664JE zH(AroKbxr=B_zkay|>%|`>@r~@0_3Ru5kJf^sR26GmlWc*ne4x0KmR^7cXatp8kIi z@^bhD-!WtGL-%EdBsoi3MD+i&b7R|2SCtbgIB?ksS-Oi^_n)j(U7T}*Oy*icCB?1E zh_|@A{+LeylfF=YEawHdA7kSC(oJ9BD}NJ^ZY i^M9}Zi3P&OkUS$_c)gEsuVeqTH@atfw_4vh`u_lpASy8c literal 0 HcmV?d00001 diff --git a/src/plugins/home/public/assets/solution_logos/observability_dark.png b/src/plugins/home/public/assets/solution_logos/observability_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..721c88befe2dff7bf0f4c768772345674a292aca GIT binary patch literal 23642 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 VN&`Mi`TTdhzMk=&n%j<1{{`rY4VnM| literal 0 HcmV?d00001 diff --git a/src/plugins/home/public/assets/solution_logos/search.png b/src/plugins/home/public/assets/solution_logos/search.png new file mode 100644 index 0000000000000000000000000000000000000000..94d8ed4578ec5414d92aade1b03e078ec9ffb7ce GIT binary patch literal 28198 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 UodaQ7=*{uUuQe2)a+aU}2cU(h)&Kwi literal 0 HcmV?d00001 diff --git a/src/plugins/home/public/assets/solution_logos/security.png b/src/plugins/home/public/assets/solution_logos/security.png new file mode 100644 index 0000000000000000000000000000000000000000..10fea25c9db83cccf5b76ec4643ed12fd1cd999b GIT binary patch literal 26012 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 PeZG6!>{f;0qnQ5(=!0t- literal 0 HcmV?d00001 diff --git a/src/plugins/home/public/assets/solution_logos/security_dark.png b/src/plugins/home/public/assets/solution_logos/security_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a96743cc3f0d5924cbbb9c78078d34184e1e683a GIT binary patch literal 26129 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 Date: Wed, 13 Jul 2022 08:49:15 -0400 Subject: [PATCH 02/96] [Guided onboarding] Observability tour improvements (#135095) --- .../assets/onboarding_tour_step_alerts.gif | Bin 0 -> 671440 bytes .../assets/onboarding_tour_step_logs.gif | Bin 0 -> 638810 bytes .../assets/onboarding_tour_step_metrics.gif | Bin 0 -> 487681 bytes .../assets/onboarding_tour_step_traces.gif | Bin 0 -> 274497 bytes .../shared/page_template/page_template.tsx | 4 + .../public/components/shared/tour/index.ts | 2 +- .../components/shared/tour/steps_config.ts | 120 ++++++++++ .../public/components/shared/tour/tour.scss | 3 - .../public/components/shared/tour/tour.tsx | 214 ++++++------------ x-pack/test/functional/apps/infra/tour.ts | 24 +- .../page_objects/infra_home_page.ts | 2 +- 11 files changed, 207 insertions(+), 162 deletions(-) create mode 100644 x-pack/plugins/observability/public/assets/onboarding_tour_step_alerts.gif create mode 100644 x-pack/plugins/observability/public/assets/onboarding_tour_step_logs.gif create mode 100644 x-pack/plugins/observability/public/assets/onboarding_tour_step_metrics.gif create mode 100644 x-pack/plugins/observability/public/assets/onboarding_tour_step_traces.gif create mode 100644 x-pack/plugins/observability/public/components/shared/tour/steps_config.ts delete mode 100644 x-pack/plugins/observability/public/components/shared/tour/tour.scss diff --git a/x-pack/plugins/observability/public/assets/onboarding_tour_step_alerts.gif b/x-pack/plugins/observability/public/assets/onboarding_tour_step_alerts.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b81b26ccebbd8a47120fcb7a50d65672d04a64c GIT binary patch literal 671440 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
    a%!2eL3bXUO6|48sm){&7765f@^gy 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�cTNh=iakE;e*Tr9fhmRT=( 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�fdkRcI;e={dD(_@;LV2#^+LpL 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 z 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%0A$QD!KE zVd$eZW4w|qkeKbRk#E;Jg<(r;KjEu_M69OKtk)=M!IJLPkRCGeuE>-bc!KXk8yysp z?l!aT+e+yRlkO3g@9N^KGy}FET>^x&$W2>XzrS|QT`G6{WD~~gsbBy&yMlU}Lu+Hg z%27_6G3f^z+(t!CM@|XGqc!__Mq5q2N3^0E`ea(*TYGy=`#Vg>X601^pQ)nG>0*rCgqSyAuK=rBTfEw2W+HR}{y+thyPWPjKcTiKvV7qsxn z6yMu8=~?Hs<}6xi?Q`geYIoa&>uks9(6_SL=hil2{NYBgKb6UeI%e(d&5&&`Qv#Y` zUlE{*L$QR)T3QeXDa_|u`Dzb%t7Oh#1n5U+Wo9jfhbUS`h|Z>oG(ffVYvUwq^&_P- z9#I3ZjG4yR;@>|ZYM=F(MRyTv^}s|y>Hs0r#^xkOuuNY7uKcr(?xSNeT}G$#VP^|n zuPrKRGg>l>g#6ID@_^+OEbcKdl}jkK@JVgW3ZIcVbB%Vqum+Ac1POSNt)_VHvl(;m zeu>o@Zo+a2{sl$;9tVMmfzvYRx7n()^`=Pi86FunrNxe!2~8hEEv-7Qn|h+|Ac72^Qx{)+bD%s_4P- zQ)kJ*W?s`5w&53ZkjkT7H#%AJGr()uu2+}B3X(gwdqiuBctJZ?T%kV)l|@{#Kb>Q< zAhuW5?6jh$sGQKRAWD@vFZoaY!4KhVzw;J4mnoq6N)r*C3rtZd-~D!uRO-Tx3m^MK z4u6WWP-h(<$%Wfed6#f{=NA#Kk%cVJ`Sy10zKsX}A88X-e6IY_JWKwA9`6jNX|`d> zVfO(V+ZhTCxi^K5(Gr0;@9lB6~4BXM|Y2Wf)G zwBvB*-;e&3!)wTKmL^>nV5AOcQKg z9DL`RBX~BsobvcBSD=a!VOu-Nx0dcdwC9tgvJWw1jZfz=Y>8PjXNNf#homP#Xp>>% ziJH6xDNNBq)g~??lizNmffJ{jM3~F5yBu|1$ICop$VWl3R}+=T$f{%wGkcfkmlPY= z+F;@n5Bt39tjrgrr{jf+1}bDiw`mFz}8*?GSj`# ztr4%ueq`Urc~d%qK8qf}Dd|F~u>idyq5Qr*X6k~V+F2g`J08O}9z%8DTv4QvLc!y7 zo+x#n5;LDtbif0no`O4{c0YmVRNP9o!{WDgg^@hxTEdqw!zNb1l1;*rZ$1ZHKKpq+ z{{efBt9+{eCKojMQatg}t@EN0xlvgG{-@$LspEB&`E|terM%*)VdJ^y^IP$^mnq`c z<%`$Wiq~bG=k<=aS?2dL;%6GKwp4ft~on8 zUkvTMssA`F|L0=sNQ(O9@5L4}8|unCH@hdGTX*q`wT%B)r?W}Du!iW|fe4b%0k1ff z|6MP;UW)lxFY87O=$%5-E&?L22G>yj!4~qKho`fn`DeXsk9vywd!9smn-!ip)xYay z$EQ?n>AG$EHNp^LGe3pD%bg`U%kbyXz0|0UE8w zGsfFHAi1YI^aGuqY*Udmey~##g?1gLaX%%K5jMT^pM$NyK%Kd*P2W)3h7x~z8Wy{= zF@;3NRodboI=$LJa036GMFU&h5rYS!oREegr$ zM4-t*Io+zY*xAUpOvMI{>zVl>dh`3dlV>xSUe-8&FvgK*eG=yfpX1&#H1N@f9mZ_T z@94F0g%KK~QO{Gzu}{Ste6h{7=jYPc3?cCkjq-z%<{1N3r#gObi}fu-T~9g zT=hI}mO@8eI@@u!V+8rlh+TOM7e(VFDQOHsq_Zdu&9l1(3=>q<%uQG)UVA1*Xx4Y~ zBH$?>Cc_@&+;*Hq^h)>BtPp211d#UX()=C6ix&aL;|Tj-nhKUEO%+~fsO>)s1CbIg zu0Uaw(OxVjCH%^8N8e*)h@JQOy@_u2b8ZB4LqB8$hhybA&0`qluAMEFWE2RSQRYv^ z&C$kTIZ4q3{miS|D`&8#J+68sfhbR_NHZl71uY#@Wc5cM6ko0W!_4%4oET;xY&aMUN2L91oHej06jF&?s(miKkP=l+BK zX39#e5v$f{t?hW=^^~?@r1@Lsw6{ueCc|>Cs1^ELa9E^ygkko`_1uv+;l;Y=K*Y_0 z1w140i`UnR)0ulWl=}LV_;$Oh(1E_2O$-$)`>k(<+>X1S_H{q~3~$AM(g;gVK4P|7 zk$OC~juuDKFJ=yFcy7mvP>kI6Og8vn+X-h8$lqQZ-F&%z~y4TTyi z85q15ANsi!S4p+*l2TwrM^+&Hp0DmxC4XLRBw!t<4Qybzni#N zTCSpea*1%d3Udv&XLtz)yH7xNj} z*M|vHC3U~BB*-HXT*{`77%EpL>WffLM!Jcb@_b+%w!%RU1N=I0`T+nmNY&&0 zg)jS#tRgka!E&%=_@JQ&$(AbOeS{0N$d< z>>M=~#*32kLrWed-mDxlm|j-)Y1}EuIuG~tD*^@X$dU1FKFJp|Nr~YK=$5J!ncBih z;Qj|>o5%uxVTe;x>6x_U+aj(%^s?cZtoac4G49NC4jwVT!O)WU{2^JiAZ`H9T*>`Q zcvX4cY>Cp$PwH7+HBX7TVt1z!_IkyqSc}eIdS(GPtYwu=Pe~Qq+Z4-e-Rd{nJktP} z$`T|=#hWW3^mr_JZY4T{11-@G+TH4qw(l1l(zCCJ=T&3mAS>Q6o=$3Uth^!B*+^q$ zz9DxG0bRL%%?BuKkJ-B#s|*SKy&L=g1d@w}quY#s0R6;PC_aH?5aWh;BehvV1>i+O6JVBaawSlvzUHfx9 z?dh=GnNtV7I72ZX{SNWWd_@N7tUu?e5g}cH{{}m%-sJ?|4%CO{!8_U2cy<{DTo0sS z4f$U`YDV{96`Dsl+*tt7T+QSw1Hf@f_xYo7H z=*G4KxeMN^^d3Kme}KIF{|52~!L(I^*}H$2?c6m#dD`oQs)|MP7R92vB}&(2+v>pB zTyS#^?#%y2<^HQD4+BGTeSH5Aa{sd=|4%mV|Fs_f!^2Jg`Cr9&Vp{%xcH_C5tK}6{ zVCe1NtlPgqxBG+E7yaO(`|@u(Ef_=#M$m$>vws6*;Xs1fc9Qh?F@pv6LsmT5lO>MQ z62-=Ci%I_461#tPD0=4$PDZh0FtN)bWpWcQjf93T>fXnaIMRGC3XcCce zBhvpF1Pl6KlVBw##6aiLk*A z`bL58t)UB^>6&eaQ5S(pu=L4dh7rvD)X{D%^WgRyJk!k=Wja6n(|#Yx#|S@(8H2w| zy+e-LBXo<5Z{kiBbt6F_rAXw~0Pto!m8iD^FzJw8k*59e#^V$e!3M)xPHbI=`m5^ zU*&h){re&hB1!kO!lI&|f0f@BF2qDn7T9#NE&h7G<65xp42R)M6&-MNr+=5CR$e3D+khn&Xo_cTF+ZA`{^zU zZpPE+jLPnELj!%D8F*Q51=I-(V9!T?2Rn8T-$Kc5TVpnFAFSiifX+Tl((Q4VV$z0G+GdM4-I0B|N ztrO&h9tW!`YrSV-|CkBU%4@$92V)cr)oIsHR{ov{FiVJ3Up+*dsEn8mV0LQb@M)e&`dXLn^#^ z5k|qgu_V3(l;LvImR=Vm3yTlrJ-s3vzs*r$VSF>}n*@1`%|m|V)e@X$7)#lww(@5M zW?iraK&zCZc|ZLYHwXBxVvSP<&8TU}<4?5(=(&pRg0ktHwQ`$d#0Yn+ z_r}&@OcUiE&;kWe@nkY>Bl7kJ0WtYyNnp@%7i!JS5Sbhv=(6uZnv| zj@%qa%$F$x7e94hGXtj4Ut3oDTAwWC8gLvOg-vpo6urvpt4H2jQfjOC5#-H(l=83^ zBoka&9KLVpBV7pMk62lMx^L`6sk95>RoKRFWJ2V#;ftq(nWJ^d5w!!W>SflF)gFk{ z%Ta8rMvy!0)rp;7D_sX<)`xEE+Qu$H#g4ik)?q7B+7IP^f>EAn_x%qYz_BXthmno9 z4${iEq&{bBzn>7<>hB>qMEppxSf9N^JHjNHl?ipo-obZwi{~=ivz5a*G$+5uWfTeB zVc!1id=-p7-{Y^3zr~%nh(hO$Rirk&gmcl=U)*`+YLo#(1pNV>&*rPMuAjh1ZOBfc z%7D0@&OQpdM^t%d;rOaMWSS%i$%gu#M9tMehL6qYO4!V~fQWf$ThdWWK?m&Fa(Fs4 z&6+5Ko0NB?-!F|T#!WlyK3txL(zD7B*zdFA!o2Q?+i8gU_EQ6XZSIk?@t}Eg9QiH; z(IN|IeemzNB_%_tXRy?I7e(oa58|&t9Ons5heNe=AWJ`1Q#YNijCLs39zNErg`RKF zgQ;{l3!6`KM`-1EUmR7Wt!MjbvA<&`%i9{?iITTn^3OflJ$KT%=#?2#(x7Qe*4y86 z52_OT_vFU#W_tVDXZq)vaw|d$yU1A?4P~yEU3|L=3 z@Xnpi6oWyq+U>ZUzgx&MDnL$hcI`+dhM353V#lPtu3dD*ya|1bFfws#2-)7eA9ih= zX)w7?qd73w!eX6i8j0SSgz#>bv75oorf49Ubwagtm*BXPs%D~)S*o5=LDc>h@Z^*k* zFE7l)B0yQw?&3k4?6-NvULZsIyoUcDaF1JCPBh40x*Ii8a2 zbH=aTEmtG@tavM=$8`_w7E5TaS7rNK&0iemXF6YXdOp6963XQA#PJ<7C+212MU`yRM#+Q{3SH-Hv4Nt}6yHa48At`GS z9;GBT+ki*|b3iyoQ0Jt75&UP)Lt6YBTy?C#1iQd1!=QrBz-Dv@!xAgY#o%$puciQG zs=z?lIYy`^@C!n6eJ%<&Y+oBQ1pV(SJ_y)axT-4D^g+1x0cO5=({5p*A+x^0NK|1F zTzr&Y!!W2F69@gi4~CKiiKZ{Y`Gp1nxTp$nZF9{~jk!Gdl+9NCt^Ec`Vh`y{0U;{t z5ijcDEnEr^O)#JzO%ZaJ5uGLOJ%=9a#q6IoBD0|#N{S-44ZMqi-a2p zn^BCp=ZebOjQQ%!s!ttjXc(*F7pqkmYknAk-0UWAN1ibdbBj)PQexk~t*f9Ijr1)p z&t5bH*Bd7+uE;fRf+cRTFWRNaYWKS>(UGGE7%qhnH6ocnVwQlV3D4#qZ_$%5K^@Me z=`VyACxBw^FP6gn)#2* z#IBICzMN{LlZK9k#=DJkrs9w>48qpS@SmBCTWr=uGwUmsUl$@$m&XjC#tCI3pC3QpP)_Rqs zKGm`UwWUe*@Jfx^eT~6RZCwNH!bzQ)@^41QhS^=leLz!dSJUx+^ZIS`uGT+h6tEVh zwch?OGs@qaXs6;~r@;qjzi1bqNZ0KZH@|2P53fIFl$vSJsS&TBcyGTz@33U=mQ8Q~ z^aHP?1Hp2X+bIE@yh7y8yeUS9UC7T1A)eOa>lPflUgy8hc}aF(bKc@GjE`Ir`)B)x>fM! zvU2qew2|5T$Hn4V0#1ZmXV*IswLAT`JA+=kAkYEm*P%|v;dI>LW9QNN>dC0pY2E1Q zp!Vt6*(nHgt^l~`7rz)%xt#U8?&Ae-r*HE6Z$Lx0(^j`DF@NkVuD|a381J`o?m>$W zZ&$!Ra^T3?Qy;<8>F<}ug}(>jFK@fAtM;!azuppi-o}sLfHh!2%iG&6XyXpF9|$^$ z0iA$y>x+IM*bR!&;C6U|MQm*0Rh&Qp!|PpOGre*38nt$wEDjetN*jM zFUo?d!zk@>t=s4Q^JSQ>(5fV zRDGf{v-RP81*|QB7wF(4x!Ik`*Z1l0a=kyF8we4|?(lrRyExdG0D1YWfM83qeWAA{ z{-jle93R9#Q*Cfi{pR;U+3Xt`)?ZU?76jc8u(l*Ol>G0oYL*j@RC5T{mh}I1_y>no z4);Z}XukWu!Ya*ftf*d-5jd=t?*3V77sN~O)9fXJ5C3~f8pkDxBv(Im)edjrG=h$igAHx`~~P;c^?!f5A$Qi|1V4JVA|uq zm)a%&gjMiT+a8n#l_#nQDFG12ra*X4!hCF5-udseN?CSVGs@9Qiy*qmL#-tLa(r69 z_~-Dy>U?qr)|P0Oewf~G`9R2`LHCcg_OCMIWQE_nHq;7w?|4Um!f7u!9-w7Wz z!w(}-1@m9pl1zNhs%DnEe8#?iv?Uqk?Shn^di4Yme``zZM|Q`}SbS)HTR9Ywj4n@% z^MMcl|I(IN-%d$V{jDuwn_(&Fyc|=tbpPDX@LtJbPDj8(7)2q3;r?%Ji5aJEz&qW> zFEkibnEzWcwZn&cUuNZZ!X&(gx5HlEN!r&;yCn4c=7k;olhORk}}dkf*4SF^iIoL`?Q5p@bF!g2sKEO4p}7i1Y_O^GGt0z?IRhtJ{HMbdde1kyA{a$IClEC0c$&H1I{vgaOKscW3XI&J!vG0slg&^VkjW9C~6A$>xioGVm0 z3_FA=?}H}ji`g=(&W$4}dzl-TcHT|)rXi&O4t{ezX`TK~8zprGaMGvHAQO4a>@W{* zJY1SJ2g90NXv|GMChfL>n!!j^1T2uQuFIl{DwX|y%;-j(Ai-Qn1Lp)j{F5OSKxLXq zd9}>sVceByi&`j0NtY%evZqQ%(W(?m&y|8pf|_zkNe8XDN_nSJeOOBkkE5?FdRS%b z+ZKPcB?Vbn6`JknQnpL;E#Y8CNWG=rLt1Mi|JRCu8zJ1|>X2^y`|41+azmVv#eSaq zU$If;##Ay(!&>(>fU$B@&XJ{Y_xsu$lnOHmndND+`BFialFb~G<@uKT`s%0(tM4)^ z%b?}^hNiJI(=DESUt%`n&yy8){~Z1YNWWApMAzCpSw~|ne)(o8CB(ZAfvzf)1}?FKDF-{99I8mOYSecOvse( z)yCi<|7c4_H{oy=kfHmPy!AOW;I)C>xZ~BqGz44gaEX;VpH71%WVbQWH9CpztNluy zx3OD+easDvfhy(OxxrlhT;so@U0#;)5-?NgI`Cpb{%A|MYxq$uEQ%jjqKO`d6r*dR z6UvQWmZy>B_5q2FqkD|s0mEM#SORNbM40|)OR|^%JvuvR32vY`bFjALAaaczdMU#; z88`D`^nm|EN-U#kNj`X@B&N1^I#I!N% ztm+XS@ZtZX))Z~pN#qom(-a?{Qp5s2{1Y8W=krv)DzU3Fu}iBzFDDk{)mMiwm}uWP zPx(iaLwLPfLPv)$PDbCy3V4|-i5$m_nl_M#P=K{1D}Bk8_c@=F`mI`9qVk>^S{90sdwZxr;e%1{(4>qqE@$V$YF?&c&t}eKB$8w%l;!S8w0@)Ndzb&zS+EsaNxJO zeG!*|J81$#Vw;Nht&+KAaR}bVLT2@}qT_;-CAI2X#o?kC~(b_iQ zf3Nr9Al)Va0S6U2u2Vq3g{t*k zs;achRE5`LZP3%=M8~~}!0Lg>?`aDk0BE~W;q5vd^m3>maGp7F5p&pbmw(>zbf5rw z0>7v`{O!R|31Nx%l`eB&)KBf5L445G! zI6-jv5ia@>1N|1%{k|VKg)aCKAox=Q{Aru~;X{3~58uDyNKyL2==;KPxCU?m0(hDN z_!a~BLSZP-=}`y$MKuD&T?5Cc{6B>{Bc=EyD?_Pm1}Jj{sZs|C;nInO25L10>2Uc; zHw7XdI=1W!uxSLDx(2I+!gR(5=`IG_0E3Sof(%^A-im&hxrVp`0u11PP$7hP14Dc@ zyzIF`D6bvycH!Irp=M1XTniz7AYf=LZde0nXr~K}Nl7SxI>;h4$cj2F3mBHO=#~id zn%`$v0)&+`1*jv?W#Wcc0>i7h!UJ)GVNF66T*FF3!v(1WD{vz^fDtj&5e0{V^z#v& zu91U-LEVz!Tk7KdfXGSQD7r(ij8gexArj>#a=IyM^)P5wBWnLzxq;evc`<6=HTt13 zaw8-PMkV?X2-cQ(9|Ij);NVVOCC+hUo|1*qM=uU{J`o znJDlQNL=EnHT_ez<5)nqh__@3eCBp+nhDj$F{#&atmJm<(+QGcwgN+exQ7CwOY!1M z3{u=l#|?>sVX>UtA{EsMs!K^zrb)8q3CYuF^iqyY=CXRJ$=z_t-|!MyLlU4c<3E)q zJ8D{hvnx7f;ycY0Pi}J;sSvqGA1`h|@qJ2AiG_QqUtlx9+Y}J;F4lht5U*(&Ek%Y4 z08DeHrb(qH(U7H>$AM~6^HNPSr6TSS(yrLjelD35hOuws27t8-?VRa#n&}O0=}qQl z6?nlkrGT2p^qGeAHk#zV!PsWEj6pp2xS-IXrHpY+z$RCQO(_klMnJP`CMN*qtv56Z zBX0CD;{_pW9YmRdh>!|^3R+Cf;%dr_G>hNB%euhJzCLok(e$kq&(f^-1#mMSFJ+rm zhyCofxzx;t(aM2y&p}AbL2Sv{9x?%@W><&N%pYYR4P|;DWT2$w;-|$B3>%^SB$aE* zPGrf&bkD@LV4uQ9Y`aVpS;%92%46oSZHq;WGjPke&)sVJ+ABrVq>{7n6 zdq^unK`l0t&T^5>QxP*hlI2iAb6$4IJEg*XxH#WJyX9iHLlGx?atf$g`Xp~U9z&F>V%LSISVLwmA zpXJLxy_Wd`oQjsze-?!&rKbKwA1tbDDQkNw`h{LrgYREw@iTNdsY%QCTh6=omh#cG z!g$2;8Lo0ybIU%&gn{t#vgPvSmI?^?vSvxw-iN5ErGodz>5Wc-!^0KFEtNM#?i>dwVTeTJbN)00~U(@8TkAv0U z%*$Rtnl+{fIaTpBKu!(%ry9YCUo0nnYy>rAbh%s}!Ip!ycQ|E2&vkgbb?X{+H}0iw z&2Zj{b*4>q(CPmCNc9G-Raz@CACYQEuTxX6tBukFcp_?KSLz6G8thvuj^0(CNYsm` zrzl9*Se6A)fvthOKAk*`fijKY;kVbJS3Q1pf-;npT@!kGQO08ZN3NzIkLLE}#-WhL zuMwq{I8FWpZ~)$xO2mp-%WM<6DnjMTM(Ji^TsSTC#sc2f=%3Al1IPov@M?$jnlP3;kIvs z`kSucTXqlHRy;bi5nIf5_Eok z`n~?#-it(b>)z&|mJPMq$uOJ|G6MFRx8s=AtGE8Xng$@Bb`qZ2sSbWmLL_Z>qnUeb zGnXt($xF9Bs3ThKUP{g(`e{p=L1OHlrOc6=0CLvb#1}mtK9wB$`{_l z9YKpvn9UCCkzf5m&Qtn%RiAa0#4oH)QYVN?i$>-pOYWuDz)BQ-G(d&E=c{bbC(l|< zz94PBJP*^HZ-fIZFg+r&y-pTg5|&|>8Nt${J+d$L_Jo6wn7zsx{nXC=P=>{yK&=DZ zs{^*OIsSx02O@((R)a4=gU$D8GtGmMqYXT5J>Go%`t(Buk$j1={izSefJhQ^+2~x) z;X=ZZeurUYt0DNt;Z&<$sOLc+`jL)Nv^t%Uh8Ml2jFDpV_U~{*zX?aW=ts*nM{(7A z_R~zq_=ZR5hvuyEdvx?B3C9M?JBN@57G#HEPDfWf_13IL-CjCo>Bn~nhxV+-4`lU@ z=!5%t$0jny=3mC`2`8@kCbqs#-17wwj;1Y*PFxc9fpn~(zD#EEcARh#?73<(J3O4%U#Ax;vJd7I-C0FHBIU@_02tY8>G$5=~<*k z0yWw_GIu)t<8>*2c7nQzFmLPQxNQ3L6oG|XN_ykpaIZ4SR#~d;4eC*IKIL=TYh74pbKKZ-%5oLvybY4p^n7ch=4ZXSWAiFSO%bh) zTF*nh$_vGj^Db+hZWRk$`}6g;V+W5-aY&1P*7IL<7j<;!LWzvR+ZPST#<$8R5_Ol7 zGlzx87J9WN`{t*!E9P?6i90mVdS{L&%NF;B>H$u}FVesXOZo8C!1r zvYI-!n1S-!?qs4ExY9`!q>R1_=h-PHJ8OqBK1k=cce<+Ixf)!t_6vlxc0|24%{@2Z z)!v@IHZrybsS~h{vcAQzK2tH0z4Ci5WPMq8_^28UxQV(^jWVZ*(uckY`L=PRh<5Ia z_Lzfqskm~c+j$4SaTNu?MP|Cy-MBwnEo?(QW=7c-L_N6NA|c*Byxf|}K|Q}jMOt4) zIp4g6-+KQxS)#Rt9UZU^{-yb%ttcYTc5Z>y^PkRli1<;)3^t#Aw@=!)>4`%a-?n$X zA{wG*;(31!%K73D4<1#c%x|IyzU}CA?0q^%xyjj-h~7Q*@GsC^=4cy;JsVW1tby^| zFv!^0$l1|4-_x}@*fl^AiQc5?Xg_^jJAYk&d{%}a@UqD0a{#r|vW$D;WUVXcpiac@ zx$+-r+iV|A9*jO87_Sc%H0}mVPinLcSg+DVj2}k5^*%8lILRNC6K}6yBHzVs0^VBF zh!6ew4+-&(E%}a{RF8)j4p+{4hdXyF^iC^@_r*Kf>TOOMz1LXfW{d|1!-#V_-cG)r z_dGG5mf4)H+Mrzfq7BKPq-X6O92~j4%zL+==&bC2dEU1>?_M51yC&YgCfV<7J>9L` zZR%*6%iQN8+@l*i9~yH#uY|27K->34Y0W`e^hG%nM7u}78caBgTi>~1yjW*E*(Pq? z89y3szIf?ap;I{>UTvBjJcY+Rw6oqzNC*(P^A ze}0}~iCU(JM7MD*UUl6CanqB4dZKv62D+WK+pP6&24-D67T+Y(ZlE(~m{6fhJdV z@6vIfh`N8z-|~a$;ac*+%X;~X^LjC3qvyqgkL~RmIxs*Vm|+Xlt3(NlX^yzK%8b6N zs+g)Az02i&Gu`mPqJ(JnvG&zP#j!Z)`TA zH~l;Rp)K*g|1WLHxG_zC5gr$}6V&$7%z;8qkUt`k7TckGCRd**U~=|IrR3k*lKko2 zMOw$)RmUBHbLF_d*nt;3gPjw%Jeo{ex$;PAJPxYN0&Wk%kP!iFk5f0GdyVX?MIQn z2gVDtWvV*J5rI|6a*I#U%97=ttkaSdHw6X?{B$MZa)Quu2_4j4pKc~c`kO%*Bfk%q z?Aw?=G1wA+eqYa4`{|6$K~Wy|Znl|ZEpSFc8Pp?3wN^fTD-Uz$h*hRwgmNo8!C22u zCRS@yS7k#89xq`~U~#ax(YD`dgsH97iEF0A*2^hLFwD(zziSJZR6`TJ{%Z5=Ijm`C z%U7yqJR&wIt?RNDL8Slq4sH6|&R1C?qp^BUQWJ9u1|9Eae-15k=*s&d)iTyw63f!*TLXdBbM;bBDW4=M;TiZG&yp zK!(1KrpZ;#>vUhM%k}3`(fWnT#!I85pq1Uuo+vGgwws3MbCt*YXGa@e^)<`x&l1jr zR{rLM%J33d*;LnlJ<8 zose)}_y5V~rqga^_19sM5J7zwfJL3zllJm->(S6k(#Q7!pg4 z6^jMf%#x~W7>igR4}M7WkFqH+GkR+bfPFEDXDJ*fIy;*FF7%_|IfD|b%uqF{A>2#S zi!2uoMX#(k7H>tp(1N&|SXjTB>A<^fd1L zk)P5RMcP;Kg)OYx3M3jaxmNc@I7h?K&3E4vJ|u_+EJA@`VQ~c^=y`on57__#Q4u=a z@Qbl(Bb9jxhI&Pa=KIXQDXO>6_2fuaFLk)o$^xz&sBrDlJnBI8j~YA=nbsX+^` z(p!C;o|>rPsLO9Z@r@@FDFHxyD;YBtR4Ue?#KQd4&mKxM+&sC=;Rq-4ilzCiUcRp7 zThnE7L9#fc8{&FjvRF7oEw!X0z=1_I8O11Fs!dL=@z8RMm15BBfh^|F*@paT!RY@^ zcn!k=|7Oxy$hb^zvxc+jH$9{06~)Fbh6ek6ACroH|HjvG#a@nSMo;r^i?A+9SP^UD zMlsZ=+%1Q=3L1jJ?4#>=E{i>IVRZHfE!&AS^}UZEIfHPO$XzHIDPdjrASvJeaEMGrnn5c?{ zd^(7>wsXttxen%G)QVMpQJV^%_YELI(U;6No_VuB_hNWWp#07g+v<%iyF~{>7x9$L zNL?@DI&7gn@v9YIdqKj~q0lEvT^7k>vDb7wvzZs!I7Dj+)tW;b#E0wY z32p5^uG>CjG>V7=^8vTvzFhs%hRrs8g%-~h)b;N8%=V_h!XEqKh{RMORD!S*&oAPK zb=bc`B0-Jza7WxI-NQgAv?|J}NFaf+Ark$1_{ z#*Ue45gtRw_cEBO6OvI8Mp~!6={eMewFo41(Fb7PSiKC|r4q1&)8JnLOz<7ej6aT_ z)Gp+py;|rVd7dh~9Ioy?w_sg;*EbNlucPwWk`N55@i|zE@S`s`@p|zd*&dB4a-9OD zze>V4oY|l`---Enz0kF*ck|B9v?^$~!#?|7IJ939{Jy69jnw4Fk5IEV65@XOC3=e? zi8bgUK)~`-o1R#Jz%50gIf!ZaOugyY@bG?K^ZmwsgGi2&@`3VHpFajD#WS!`gUxaaLI8Rp{aP z{0Ucuhyo#3XTAhTf|Uay*1+JzT4oU6Cg-P9PI6=}3LRlOtL_wcVd@OFru6RLP@TN9 ze7LLpJJ+zp%GJx)!U3^C#0VmvF-3Zzxq}f}MI(AXKEr(Mt>>xh5gh&fQ&{LoMM%Jr zOYl^*WkeX7zL!>or*|6?F_0bC)pyB5R7=%&B>;vsl0hHcKe@ISI3jwEFNDF?S0BKy zNY228)Tl(>r%c{YM<|+K#xu4H?)^pH3P+XXg`ICVd9CR6LD~ts4pl_Qm@hXYdp;#b! zt2XaIxS3=WAy4RS{TH3=h|~1QjG-veJ`X|`dnhR#9={dCd?OMV41idIj`WI5n}1Gk zGC3=NRRWMWei7NPvYa?xz7Y#$*sqhsHmquc?^An_(wlhsg>$V6(-_^Il^`mJ0x z(!?gA+%^3K6umqfZ?N(v6lsY9l1fmC<@ke+^k5y|QNgHBt-M_C#F}H*>+ZzvmBJLv zBt)O^dF)c0)4L4wK@ zUK2pR+HakKbQ+K#+`C4=2bI>*N#0dO)H6j!CoHDd>0h2mpPe`h94A=5NFC1h=?uca zi1|@{Wh3mA`xG_vGONH-F~iV4vqQqEIF-j=&&+}{`yeY7!VJp?gj_D~rB6`i!Q=|a zXZrHOaak}6`)k&|_Gj6!YM?3QjyLhftJax+ho zuzEeB##dB_ky#xxQ5`P@3|BEz1o$M6P_{l86|spI&-wS-b3|j)#>VrecXVnP3mWY| z?P#aW<)$p0MlDT>O{xQ>(P1?Ju*QRMK1m!}XY>+c^KvR`sA3C_Nr=v{6f`Gz<|dLHpdl|R%Q#U^w@#hP`MrL}_7##UPUw51@lswh~h z!A27-of-!1TCY}qdYzuV550Fd#b-0FUOEZJQ=~sN(hGG)?iNSeC&u=4Y_D}DcBH2n z)>L`cK=S4*eeJUPokH{0GKhg|!%1uDNidaXT3YS8t7B`w#FpPqbvJa?H}^36*fGuP z=XU1$;V)H{0XqBjtJ zY6kSMYvH{^@XqrH$(!e}nwV?)$XSbyhp-V*YiP+Z%N1+CQC48ZzcEDBVs+$UqsoL7 zeyvaZ_Ez{!17Z`+M(+;m+dacKf~T#0>1ERUWU|VQF32UN(3Q)i9}Ff+V(VzrhXG7v#D;&D=HPojv&eA@~f6wu3`R{Zx=7)8-Y7LNk%wX zfQujvWX9io$vT8@1`@t}?8M)Mh9^&>C`F6Fke6_JBX^Zh?1#t*G!F^ zvuyU2Y*BUTEBAgln<8S*7(s|ocrUr56oD9w_MKo9JNK>T_tmowG}d=L?v(;5)<9la zo8H(eYJ%V2uy*`4;8<)9%7TK}^vv9x564RnLi-QogLlHSHU-vacf5SVzKGZXV3kV( zGb^;(lLDm=7vm_8;)A~?HXJ0XH33l$k{dRx*7tS_As>wp><(cyAcEu;166#3^lS?eHmx`Y(fXG7P5oZgXULrC^@T9Pm;#BYt&YoO?Ry*hw73w z#DlD4$;ohcx&99H`pVq1ci4*R@iwzZHTSt?f`LkQwj(=AeR{?!lQ&};! zqPR0zu|bnfRyiFZ3(Ydo(zBk2o7z}cVW2*b?1p;v8uJ_N+h(MteYLJ4R$t@T-FLRx zh(3p8nBHtSpYRq$J`6BiJ0Cl=x#%Dj<|kPbIC+eckF?+T$

    J0hx9bV} z;!5xArP6LDCx_CmI|Q&@{X@X_TmeUDhk;07mf-pJ0u$piC9ho66k^g zPFgWls_J)VFF!~)PO*aTwqVY+(C)z(eQm0Vuiu@pOn=Dyb{t1{{;nSSe*T(4;GPej zQ#!_;S>h&c@#6c1^9qBrQ88FpqRnb|7kGE4q3>w>;A|Ko4z`%k%{k3>STTLyH(|Qg z)PK;5xpxV9z)p0*3bB9bctHQ^;^lJBdg0RY;lVihl2qcskqT_t;0LNGxCRwV1^d|h zW!r_uxGERBemi)G7yw4v0xdrRqtyq*n4Dr49OFK^<{>A>6h9m^Cq#5jz{@M^^@&C2KLQ_K_Hz}aep z`y{M;@q&A$%Oh8z`vdHAnUB%+yn6|g2i?O{)xZtk!5uud`<0)EM2d%$%5y!=wVsQ| z#oV*t!E;CP^N#`dL@JMNCeNM_mfxHdzto(&Y&{2jUa%rOhZ;Q|v0l0wJy`}`Mi*Yj z)L(MGdrqQxP2qf=W_q1tesH{dsZj6&>UqseyeMybo+f#Lmesvh1}f)WUW?FPhA&>5 zKwg^zuPvOfzkJ+x1iW{tH1`C~s&PEFU7imVt`Ae*Hqi_hZPnH%yoolv&$HjwoPj42 zufO+$R3%~cfIE_Q&}M*-*9*qJpl9QcCzr(lRfteVeVC%{@0TRMRiRr+tPU?pdqYu- zN+As13krqdbJ|Gf?O_rPAjE(X9r7dwl18Yk{ zFc|*Pmat&a_9LruDHo5IA|BHI(Ux$~?%vTYR2x<)Mm`aWl9Rk;&%nVX1XEh1K?a_3Zp` zy7;+XSA*m9bW+sFX0h+?L={JlKhkkZ=pFfzLI^fW$L&+#rIeQHM-ad8Qmwf*j_j*| zuixE$`VUxqTta)L!aKqM6rM#L-}ll@+CH2|A=%$OLOH@jHZ&76U9s!Ql#H>j{I`tH z!pJequ~Xr;J>jn~kiv0~L*RU{o*H)ozrY<5_`xH(8TczO07>GdXiJl0I2L5iWcaf^E*6_cTpkw1SJFR@!`6)Ab(_fhAYP>HK9 znUt)hE~R)WA5BMbi@)1T2vg=Vh!x?nFwhid=&{ub+ z4u|^Is=&16y4YrB-GVSm9LRM26!xa?ooO$1#}%O!cG_iTjd}%_jkzs2y+S5xzjBi@ z*jE*6-}kwm^>3QeEEBJ&t%A-P2ZHIB2O&iQZCXx`N11+KKs`9L-5^F8#KrG>uuaQe zx7|9v$(!GZlTvNgBx9xzPYlqZu-Ukru_q&nRa=z$dm)G^`$OZD3UbWVUgw`A$#FYaJdV$IdVICiP!2hj-;LCWY8?K{8sbnn z0|+ur57z!Kv3i}!Q%0Uwd0sI5`{{eKWahJ%*iTNYK>Z^Z;Y>y=QiBq>G-1>}~ z#42Xzp}mZkZ{|*~sokm5`3T+fw+@vnMUVrztR`?!QRdff<@iEQz2lhb(2R*TpQ!|O zuNM!qjz@t#^+JUZlQ~!LZ@`99B*67lxN?&dggl_@%jOihJZQ+f6)U}8@(?j?9@6c0 zA(ubRr807wu8_Y&dzsvY@?zT@3Pv&SX38;9#c1YZ@c_@?uhWIWw{bl7Qr(Rce^sVT zn5DrS@WUd{M{1%k8wFh-H$NR7)cayUi-jQ}YC^>Rte!guM<0~X7_kX!mrOo&90?Ew z;?ZOVvo1#)(;|n{cAGukr@4)KxN2x02K$@7tH{dvD;+*R_&HClQbSVM1 zEh0U6-@hSeEa!d0_{09;rx+94+%IuBKo{Chf(C$~7xcWAH0RoCc2uE4F`H8KWB%^a z?B9;@B{qIvju1x-d${xi0U(2z5=GxWh>cDs%ltzy@0!L$O7`(OI=7GH9BXA*?DdCy zY(5F|iSM|ud|hhFItjUu>L{?As7R`>hu-^A4_62i1glB9Gp;P!#&I2`&v;Yz+$)clhDauM8x|!mzU?^62?53WdVtX2M}OGI`noV@hRI$}>Jb z<%=Oyic*r&njj9DSb+1xE4s$cd*_;T3^^)8qgEcj?ogLSTuiQ(5(SsZ*=z%N?RR+j z>g@p#B~PwJcW=`^%)o7rv-n+w8P3HC+r%8cUNhwe$r)F@`!a0=b7O@uwdn$-iWTW{ zPQRxKzx!AVt>DF;;S=(otP5sA8%Jw6sNf{iwACUqd;D_69pU4~zhg{9N$6w~>nN{o#x7->7Nj zeb0Q;T`UB?`OXgQCuDl%e2K~7dz+zt3nKr2K%S|hC(Y1`0?~_B9jIgBN@zmgcH!M z7jg?67)bTp4>^_!2X}Z(9Gzo|`uV{uo@VT*G((Sg%t=^$5fhW=z{$DeB-0J)m@;P4 z57FvU251B8Ob_r(QOz40!atddg=kNwu;TjD60h=?Xc8o=lFFrq%dPM;lDJM%hO zD(xc9z6!Z6{)H#hHq0P;Udw79St@{KX)UIFppJ(pKa}< zjW>0D0NTqx#^kHBmyTvLX+*)=Zq(=<^^JKWmiE>d6^&$UoxrMdMDp7BXW^5}g5`xH zD#GSX8pK=JOC( zn#$5r^MoAMok)SoF`bvoOoXR>Nfyh#x(VlU9|1k#ZTgwQPsN1_PlqiF?z4o|))hd7ea&3Q zj*Zc6x6C0 zz=YlY{_n2$O7o9Xe<;Szlr`A6yne zJTV?2GNu!>K{m%gZ#M(*vLOUDK{+?UStoA35iW{kgIH!Cpl?GY61Du!1`XZLWzGhB z&4M!{-1gaCE7@LD%7)p@Zl=wIoF($k*MY+jQ)wrH*N%suBtjzCnA^@qVNFB41Z;n; z-2N2Vgu?h1%bhbGvyEbuQ_KSFm*}0_XQOp$T*~R8yMA*Gh{q`0DgL8}nX2dDt%pTL zh|L;|o2eJ6n}c(hGe;W#(x8X`2!S`K2S2HY{h5Qjp@(vsL#&TMh>}H!qkjUPON8?6 z8wN3nJU%hmF0obak+{@9Bjb)q66KE9XS>0pZHDD0T=A#qihb7_085B_7m&(o-q}!)Z&lBR^ z*AmVbt|b1UP9kCE54@eCFfycIB;jmK!E?>;^d|AvRFGKAmmtfRhJ}{W))4F6=d)6j zwbfl3$dkc1INQmWtlXD9-2*)2{~Q(h1xw0=L#jkTDoS=hN>@<5va8^$q*%EvY^JZY zNFuNQTiJ}Xtiw=6a7cwtk}Z-{DX~BehgiKfMWK>ZqwxUK(LkX0x5#LLw&<>?Es4r5 zsRsC=HsXOqrjHH=sV=dR{5+`wYe5>ek+fi;Y~X=7>!A)WnUVY+$0C3jME&q*=aMn( zu%fMzgzKSc;+`%F*;7h~SA$RSerh1N{Y$0c5o`o`sC1|d`8H!cxzS1R` zRwtQ-vXRZ_zRjh`EPjy)ilHQxG5%wrwOIheW8TkK0sG5w4f!JhGIB>Fay!-{EN61* zz#@Ai6qm#zt4wka*x#2<|LJv(&i%hAG#~Dn}%R~Kmztce%`^!=UD4PhClA4+w2i7J^$D?U`6jPgl z`bQS8glL;sk^i<`aMeH7D+P|}5QeuB%LG$I6l#W)9tGSMM|}c{Gw{`;5B2!ImguGH z(61Kx5K!2V9mf{pg|!~XHSUs#o5pyiM{FJ|OA>=-ZN{_Ga*^(2D-vviPK=+vu6>i3aYbOM(So(@>D87X^Uf8(Ih1*QEx*n_0bI| zar;@Lt$E3$d2=YW6NXXfCUq@@xidpgCud35EPgj^dFQH5JH~NBu2~h`d8&~`nlg2N zpbwezaepX2-SF|S6?OY0)-Z2o9q~D@ynZSpO?B?sKrCAS<@u<(#ndg$G-SmzBJB)D z#S8)MELp`Y9qk-z#T+l~ylBM~hUFv*O$e*`_~4K#^J@rDecx}#nvb7_M_!C;^k&w+_ZAVf;R2A zQN*r-UP-PESrF{(U-y*zZRJn{t49S71Ks?+W2mydOx@2+OL8l4mh zUM_{w97s}~gwkC^UY;+~U2axhT+&@VR$g&ho{&}U>R%yq?>`P3U)b*&!jsow7S8mDugt?olNaxta?$ddMK=V&AobUta|JG@jiHU zUTZO?eRNGgl^a-9)mmg6K(m?g!=H>A1d9F(X7v|BdQkFe&>!?*xK?1m`);vnaPsS7 z6dHi**`RtcrT#I52CB~I6-ZDu^iO)2q-vNfdf1|BSSA|?4I6v2qRLjoQXC_wF5}q& z9V4X+*eiOZsA{AqdSoaDh^4BJ#UoqB%g`D?R>z{v7msQO-)h7mf8?JG=qfenN%UxG zR$p;z~v`#viC=KajSl z0JZdCwWKR55_)QJC}aM2<70qQ1$nYh{*d5h|JubB9rm?pJp4 zMCI*8_;y5ws-=vn_-1cK$?JKph$YkPg~ON+511wH>?MNmWV7rkp7bQk?j`4RrQVE& zcrT^r>}9s>t6u6A0r!du4Zn08l%DF9H6HrW8|3HtHccYP7NB&#>sTvFh$U z$gwHP|2&kRs?(_(Gk|*3z--ia0yG+Uv6@&rnz%ihY_S*~v2bJFv%LOc)n<)1WVNts zv`AvLoO;w-YQza{w7PP%$YM1sdc?G@PHcT_y>I+;$85dEYDNBJ%j9H7*z`w*N?*1S zUJBwY^v54eCo!QWJ3c2TH#X-qRwpqhLvs?FE_(-^r%$6NbL%H(YBqOsM|ZC$)VU}3 zttYoPN0%@n2c$HcCOS7jgWFM)M;?)97@H5Fvv1#{C!B#7IjBEUnyZ_I_tmhkPP4CZ zbD+UkTQe?iv;WXNib}KNUTsj3b5I$3SkrTWU$b9Wvws~cV`{T^8++tYbL16! zRG)KrR+HIMndsVc$WwC+A%G*6{3YnE*>J46fRqvn)g^|SBSEDlftn+ZkSRLvDSWIx zKJ6hPs0COojy2|xI(yItusM3Y#OJZ6baA8)wWL7h$ML<8iE*Sgy?BptWIefrPQ64~ zb0jsb`ZGCX`f;Saw&ZFMX0x^G=DHwbzPSyE3ewiZ=!mNm7O;j)(owNePW<|DlZC$;8ext7nZXBxbgy}eeIxmFv`R*t=v zM{$;ZjpB?v1+xs+I$DG&e zEanHUvccfhJKp2_m|({oIL{m(&(fXi{1o=*Vbwz1w?!xSrMLG*bDrfUk7a;*BVk8I z+;eoA4wZ|4F?-nlaZWK>$A`g0|$1Wf5zF6lLpkw{$ zUDc~@Ppb3K8o+yGZgJqmQLyH56vcaz&o+V>EkBvBUh~J{wLoIQRYvgE>eX1*D>@zs33%j;U1W~>CMnERy|k>&Sk{_hpzlOr?@7O`V=O=y#1AbIhz zJg1|e-v+4{NMeV7Y`D*jvG4fT2{H_k)QvytYR3I!HBUvI=7&hI`?Yx59>>ak;XgLT ziyu)kEl!#dFVEJe$=ogM#jF5NjN@@HcR_`ppeQJnaQ{n~1wmd2o8JR{R^fL>!lJsE zl#-H&774P9s$K*7vTgwWBDW^P1dCAoIOz8^Bv=yP<03*--VUt2aF)&Fz0C0sto>*a0^r1`3@`RUypndxL86u?_F?kx z%#_1a%TDa0bcfB9qf8G^u-)vN3FZxtHMisynt1KhlfsNb(9`0A%v3YV(#}`YvWCIb zv%;pySM%z=%hdDQ2?E@U`UT#!i-rx)Hp`lw$h6DWi%z%8_J_f=tB$wFH|uT)!u0F% z09mZj0PM`!9pKS2?rk?|l>Y4~Wf$JvIPF%u%_I*1?|xc@u)}UvX6fC2rpadYrXT%> zy2d)5PR8S~Wf#xG`X4c^r%ew4{`0mIVW#s=#1a0>Zj|xI4JWNT{$m8rRTIFmFF}Xk zZNF+N^X;+;u<3R^fCRX@ncxGw9%?vc90zdl;G8^HWD$P6UUU%x-XD(K0G}VmZ(d)} zwn1Q2yWd8pT&DcA@2A1|z)P!KC78CsDOCmFw2}R==eHp_mIaUmZA>ogw%+ib`H@+p zJWt+qVM&_>F>8?n8H975)hUEk%cn(>;$~OKsF316WM9PbLakkv8Tuiqb-k=K7?1qIMpH<6T_JC&~D5Rq5jK{04)bb z=~xg7htd0yA?tPBxbgMmr>}N=4z^{nDBI{vkmr2fH;58(uGOmG+Ml_@(xiK`p|Zfi zp#p}46KRQ4`Q%NsA`V(g83*;b%+L9Je)LmWAV6oi%3Mq|Mx+Wj0ToKBnAT?C`2r#PsMatFC*Omu(m8(M{sI{`{<{L}vORNLV3_0M`raUp~ za}vr7MWj|{Qxofplq`+a+JH;>j#X6-G#0J3%ImSFO}O*l&)M? z*0i5GF*|Q8uPn#RH;YCwyIvNqJYUvy0G~;1_Z3whR{%I&FhZ;z80BkU>~yU!NXgw0 zvYLLBntE_LSbf-^ml_1{JJ3?9ecv!{f+aNdQH$)`_aCl<1l;v8yRZfs5*b{>#&!_* zV47qtZ^B(PR|o)D!veB55q9JH-w0nCm_=`6Q_8i8tD1*fH~z$xX#OUxdmQC$WQ@%^ z-ysuK8&%k3OswNJVobxHP^YU)^};=*6T%)(`dycNWTAVqfIa1+4P5XTH|8mNnesfW z$bQ2!5yE_(6!K(BS35W2B*dACPONw0;64%O!i zs(J9+ynWcN=V2ag+qk{Aef*ysBWj(tNnPy+xKS}mq$c;(s~6cYxN zR%Vp*rd8{YREN6MG<5a!4fL~mjfUQg#`;VecTG!YErHKJ0F_mHqph9ezl>oAS05lf z1&s1KZY}=>sG2ta15o`BJ(chm9zNOi_V_P)Dq!gLKlD`K)abwUsrcM~=~Mr4r@~rR z{zFgw$DIQ9djBO({k5hNQ-I0dxFIwkHLO5_`X6ozcmhwK z`f!!rE0CF$mD^>I+pk#gcwN})Ry=oEvb$YYUS9U`QNAo(F}hvzmzZj-n|5qm*Jzpu zZaDz}WvT9e$x^+&J)fUIR%&23U~DUU8~^~Oep)g&Gr92}Q0i_MNJ$O-`Kw83rXCGw9nHoZz1N=Jte^i(JdbGp7bSI(({lyX zqz1&UC-iPc6>bN)Zl^YYp48pL^BrLH-3{3OPdR|+TENFJ;N!pGD4-qn|L+5ot5%@@ z6B*VVj+XuFEK8<~&*%Z2Wm=>4;hKLU!~d46aO6rgNB%~J=?zBzi43Q)+x?9U7ft<_ zTqV;||2Hz6Cz&DHaEeo=TBp4*YEQjXrPbk!FV$GSQf)j__;0ytAv6Iu$!ep``R=r# z?Ju+J{soQz&)G^3n5@869(TUk8T{KAeqUw)GRw5ai{mYJzo*iK!alkGHiq*B%0xR_ z8_X9=^s-`P-W<-?8twKLJJOo2HXFRaFlF5zuXlUmzN>Vmx7+|5!(3T(TBZ+&LsjNm zlO1hOSKEDIfGJ*rx073=nX-R5%lkWHS%g8Iz+?r`S@z=dbo~Tb#00LbV3_>NSq4Ui zO|rcJ92Ea|WEf1)1Rp3@QSAO(u5vxv38HNLAGwOIQdJR)`LKBJUvkyQinu(^%vaO> z|HxJQalb_WBUk;qG5jC7iX$z>M4Ln3U0``y5N?*8h#VYc`o9~)kW|P2Y79FNrxyQh z3?Ju4{ois`N#<<3S|5^nGr6I-={z!de%k-aRfB+kBEx271+(+n`^5|w^hXu{C0CVa zah;oGN~?!^pVrPRn_v7}u7c(Ctpgt7nlWHFkX{s}sEO`I;-@;^DV_NzBTME_!z zEpA6BivA^6-Hy=@!PmjyTU!9PQ*U485U{t-?=lI-Xzr(lG5?XPHW(+E0q6CZt+!3Y zksy2@^|PwR6%UJ=PPBCkx_4)~W~Rb&EX%x6+YhT2O&5=A)KX!ObDI0-S7Pu_+)sl7 zeSnLnEpI5#`%ONT@I5~)fuXuhf2sAR?PxK&mwgsCE4%q1%;mJ^@T-sk@)`fXa#fPm z>q&9gCkzIvYUk-*{18yCQg54V@@;d88C-FV)Rj2xhWg=tk~nPXR#-h(`F=azDwA=q=5Ot$q7OjaOy_RmQD$i+Z73W0dK9wOvCJ5r(Ye0e@1 zbo)RKN+nteG9b+6C+`A9yh44?oBy~U>V|x!^+CML8lbQx`|>&BjfJKSPJ~qg!FlaR zw2lLXK-PnJQ0bb{rvRxE+=>ucEk^*K18*!|kBL(5f2x25Qsx8+_Zs3&1Fz2vKsFH) z9f%GTm);!>rKtY3^DBs;gaA|Cx#$UoA^6^4Hz%^VpU#!RP=2v z;kbj|D#l0$C|8Lcin??B2{*Kt0m%p!<$AG-fTYpJM;I93z+v?Ft6#!*31;ss{-Nkm zPK^A;rJIJ#_E!LRJ{h*Ngexsdl*|1%!OOCQ>u=k*ViFz7l?REp>XXPA&EJi(DWmFC zKNC;Qep67Ih@$P!g-hwa!ly8<>up{pkj`!7F4=TN<|`WeP%5H)5F) z88dZ_vy@pgYN>1)TcAgY-Q72$?;4TqhG5FrBOwp0hnaF+y~})xJ>u320Ze(m-es)| z7V_4O{Pf1T&xW?l62yEh_Suw)x|c47!={o8Rj<#5L8qXAV9p8Fzt1H^C=vhI|K*$c zCm$7}L{hGGHnEnuz<%zS<4IyPsdc`P{h~;kZFR=?@VR9UcxB13PKvFGbN7B z7jiz7{E8@5ERtL(RevZ|ohVgq8eOOaHimT(%2bCW7i&`=%1va-)R#`@V^@Vkc{@@O zmnD~4SAlZXM49%}=u+qFLzVYOsRrR`My~ILhR=V?RVAFNkl2r=!5ROTTxF?7-Io1R z_Qot%rov2R>>s%*kCavnhHJDLuxU|QJyBuhGzN5*7prQOrhj`3R&4>36@TTb7~FMm zgeN0f)k^z+=A`;%KJLHtWpEL|(_d9SN^jgq4mFnE!+A>_plv+2W3kvHczYho8es43Wq>2e?%cMvd}OoXOvu*4Q07U=FKrKe3^msvVNpb96Ak5Rsw#~Nq)a2$;8~1bgCr*`*o~D=4DwDr+NGMvj&Q(q} zR1Qd)$|c22--58Vx`!J>wU+ggRK*3-Z1Y{ZRhsRPUzd@O{7B0HcBab3Xkk^E%A>eXnS9dNd33u3+lp(hcyo z-NXa9E8Ds_GtNp_L+W~6n)-b7%X;0{fp=Ohe@iRa`goq|`h2=_eIC-`K4i1?8Snzi zRgli!yJ9u~W7%P27oS*aNf2!mb{{lV9}H(7tY9CO?k}abUeM1zL|DGW?2eyJ-nUN{ zb&wQz^x)XbzI4yNw8K7WyFTAl{eW`Sxr#4plD5_m4gIqp|Fdsc9wl?IA5g9mXZL_L z@da@<^+xd#zzUFO_hBoL7fJS4O%70pc9k0Tmr3?541`c%4-`-hAaV%MNDee>4ulzY z(-?9nRPl1ZrPLP>bWHXUN~Sa!4s>4z%2ke>&34?y*8F|GPR_v?6n?_ZL0-$jk$~f1 zABteGU4L&-pJ3+@+-0Be=iv0^5Dl!5*kMCna&Pa0kV5BBbLh|nOa-gpzjBr6a)7p~ zYJ9U>1$0<*au{TBsLit9V^c^gR(S8QNBeS^u1Q!Ed-!N`_>4;U;IR(ku|xN8IFPFP zAP>t?)oFMR6IhC14RV`OWm^^t-BgVvfQsBN|iTRTp#-8k3l1!aw)Bzsl4V0@|^a4U$gIX=F$_s+PD3#PTbi@kGKo+M@QNl&O$_n1 zZXu^0P8(lI>yohgq7pRAkuk59vFMVqOqssI;jqS$QGa4ED8YjOz>=_EPM=5#ijB40 zXvq{D%DjBZ6o<-MeaYCy&Kz>_h{urlWs*5z8hGKCdXJqA^7`k|CF>a`*1b0CeI)Jk zgdNQluVlMA%9{*`x)^+YcOY91?u3<KyXF#DXr9T;r z0B3=sdI1I%j7Vv!08B)Msf=wPg!6QsGH0QodZFMwjPtJy&{s1cYV~58s?`W<#93so zUWA=gxY<(Z+FGQBp0~)Br{yX=SL|hLRut%394yIMR-MBKNOo8n4&zcyN)8DJqwv*F zEly4?QEugwIPjH<_M3E0wp>YIWG%iVFGx)-Embdwoi51=_0EA!Nx@Dd8V2{OE^SUN z<9&syge|Lq4YKAeb7%2QDlHpyE$<&JaXc>042ozBN$-SCDo`y0R)H5?EBXh^zCD+r zmgM)gsw9S1>~dC`_rr9+`i+kUte+MNjzlED`tIXY-G&NCI#hx;SDxcY;dSTBocg9D zQx)QPN{B$;0p%(#ZhzgXr_=Hn&cx}}O846I51fF|;-D{Q9vP$7P;E81<}k2hUeBk6 z`y4g$!I{5YYp}+^14e6T#%c)LyuP&+yh_x{LswG(#ym1sYdPC$Dqm}}N2?LIN;gma zm^A{Koa@-fz`5G$?@sIbvFili;=OyTM8bkt)55`%6{Xu6_9P)>-|G0?@?)tQyohU* z&V13sD8+F-Dn}cv%qz6t8gw;EEU9XJYO8FeY5}hGs%2i5Z;jq*Wq;nlt6YOmMxFIE zT$t4j&EY&aaGRskN_o6Wv;RBuna38@%3H z$~B5|+!{|;L#H^sfvC*yVa;a_9twUiH9G0rJKe@RKx~LCu+7uVov457gI@XbJ*3p7lyl2?n>}8sY|#*tJHWL*U;)p^2j9O+*3Za2ShPkys~c<#?`H~U zBicA<`99QpH^@Xb)P$Yum7C^L?&Ag+AM&us@O~fe{yuC|uHmma3`xUacHR};K2q>~ zgi?7VQF`D~Jr z0dJ@mH~t(qIzrR&*Ya5B`y?!G|o(SX2=1&fL3 z@QHdFy)|wPd(Cm~ma#?b$zAy21HADPhe-qO`c3ZP`E?+_Gju~Ul_N6sK;yj4H8FfX z`8Gbd4?n)jJ>Hi#HflQfev(E%LN%nBG2%XLnLhoIo~qA17^B$B?AGHBm$}Ui0racJ z%cnmr#z63=zr(e$pHo%ijgbQ;25>rNz!zufKK#ivsnKOJFtz4n-RG!err|fHnKXKM zCnhh>tpq3f*exeHGbR-@dKfmSm?9>A^2}3e%~SJCiABsO1P_U{4Kses&0^1MO!R7H z6zNoq>hZL{nt?q^1+wZc8q3U*b}aHp&uf1y3a~B^@Jz=gPPrp2SRyRP<1HC*_0GOd zY`ZU8WGs7AEQD_?KfW(NTP(+J^mu+Og<4v(W7H>SthA2LGjFWGzOPsnCFbzB{8^rX zDxE|;>8wkd4lG{9!}BrJT9Q<4MUWY+vRG@<>Y^F;ZSCl8-&pHJaPPjT_Lf|RN%R`j z0&mG!2Wej)-&pT_S}z1httm^aSF3C+daS2$!%trW2OANZrWtatfw#a6W83h(*YLBt z@NHU~uM-&6Cp2GGxcuPpyH)YVRzM9lirD)~)Hvl%$We!v;tKj$G(=AvgOjBldkWPy9R&r>^%$!j3IJ-8V0i zn9q4{C2FHLtzzk1<14{sEMQ?PPilFOWjhbC2u`hJ50oyK-9TqpEsiMg_9>-KxW_jO zruXYI&pW&KN2gEBK3lRgk2}~-^C!>JeGkOS4|+Z;FT~Di;LnmP&vz@~pE}y!A}%5) zo#w5wB}P-FBv)L^F4kl_1UFAJsS!qiFQIIhBC5G<|`sze1>edVCxd3a;m+u)A ze;d^E`EjzI=LbUJ)N{x6&GzOiQx4NohAFnsRtJ~Y>m+YmtT%CtMgzxxS z@Pq(DSSRcEkxz!|uJ=T*m#Eg`o#UMq!HoJ}81<$Ll@rU0yZu4`$WCetO=eME&CfSM6yV=TxnG2 zOY}r*O3+T^mPLLK1zxzq02Ipc%qU)#*P5Ml;ddG&erpCbGPuthBd)a#i^QxrfXe;2fZ>aN4*| zmU`8_6}a8a4v8C1#RvU8ewzB#bq|3To=KV_1t?b`S8KKVi6*HyV_$KjDG2|-Fb>rF zDTHOfEZzw#mwGLVm#`Mq1>y!y&%XxUZpH>4227zt#aYk;}gR&h>()owjz=+oWsJ0gdlpjmghGn4I9MEt!Sb;T;0 z{WMEXc&)TB(;47ElBS_fx*w${{=U5jr6HavB3F2BP!Q%JzGZQ{JWiJL@cqv`*Pm8U zwzB(uyD2_{fl~!_s0xNTxE~8Z5UkD|t-7ZjjBHjSEJ8Yk!Aa@yn~cy}{hWH<0)wKQ z9M8g#qLLOYHL(sYiiBDpL_D?WSjII;Q=-xm5w*vM61`F~wm6P{L_<=IPOO&G7B-Jt zBaIzc;q?T2AN{hrzn@{mLMc1_^col@n$vC(c;mB#P~M)C4&sJ~N-8oGW5FhHrBP%n zg3ant$K;3O3#nO|2>VXv^|)jclTL$xeyE%0i}5_;BKyJb0=51DTkbO8&Nx%eHd<<(ABJOW-KCO4rW?c`u7_m`}h=Su~~GiW{oA< zE){iemu6=vRRfEx)kCc7#$BkGuE*^^WC}6cF*tBex~sp_V96Ouj9aRETQa z{A`#EG4J`fTP^HGa?(exAK<#~-)pyvH}7J$pAn1dkeP!+#9LSh zaQ|>wj^cY$)?C8qv>XdIg+Lv-8>QPf$v6chxF$YINQ!7>d#D7Gq%n9_|Ky zdh%^#c|How96dQIMGO9r+KW9LHSXMgiIVO&(0RKj&)KK6cJYIgKf87ks8u@f!TgS} zhZYR@rfe^W6CB)6%E0pfH=IhXIkndR{d*_e*dO=i9hHrhgsc2m!VZWP$BjEaTP3wb27mlyP?zuvH z`^81Y6A@w#)zcp!Q&MQf^FU#@4as>{Buu;capH6b2=b1_?(&U!E?Nx3Z4(D1I3;4j zNYJtRup~5%=o1f0^W)V+QY6N`!T-D)GH{d#qZETcJCE-rGK%pk7T%)IItRjgon#6E zdTo=ALJ4Vo_J_;G^E8mZA6Z)v;k{cbs2@u%u^fShVj|Ba-!U5%fa@poipFu%)E07; z-AP)O#-(lC7oNI0qX#7@*y5dTm~)&j1w+F#`Cw zcRYK>q{NG(cq*A~0gdGeZPjjRvXK%DHn*l?%#xH2Bg;3dY?Gf8u0H6=^Z^j#W52NP z7UT?l{bOHTidI4-sIfH5`n9;*659OB;p&p(Ojuomf@K+T zM9@xSI=35v^~S#HDQtg4KW(LmM781rtWxN(8J)bCl=}Pb6GDm1m0)?8{GF{_%M%Pz;M9Adn2&?a<+YJ>i%Xx6J45`3C8+mU@Cxy{!f6M1&Z&Ben!(qV(pHS2 zeA!DBnBdu77mOAL;lFXdJC8-5*Cj1DD%4ngi8N#_gS~g2(x7OX@RnXA;U!Y%T;k}0 zUaktg!;7G7OCI&^V9Yi>+YpGWndZ>c^m1sG5Y@N`CHm!G6!rzdcwG?f2aOtC^bS1x z_uZCMvPP4I*ON(q*LfwnhLWF_3yP?&3qBXWy>#dgRWaihqj-m(m$@l*h7uC=3HWO! zHcSoSgjdEU|I}q{aN~;M_RbAr2~)aTsv5t=nN&R3E0pc_ihoBln=Ar^+A>U-MXq%o z(miJ6q#rrdt-+%dJ-Yxb%oN9P{Y;q+hjdBh*`BJ?|o0Lc>_x1&8!co4yr1{!ZDcy+RK-4 z&C0En7E9crsM9YLWBB(uP96^cE7uObx8u?$t{)YE4{N>rquQyb9l{M5%6-qLGbeY* z^X?0mhz+O67m*2pw3kCBZWJV)n)@es`)jaj6H3m!J+8~NrZ4c_r*K_GXI0Wve2is0 z*@Aoz27HfwJXLP&X6k`jdEAHkq^8icGoyTgXXFd7+yDiBi1yAfYJSU*CNSZ2aK#=7 z|BflRx|Kfqe$-&8U?13eej*a@%DpbPSjeKBAHK-`0pEL2NP6!DdjNR?-39`{0Q^D^ z3|4qgh#n861rIJ>*S);Ihyk-{HO<;t4eK>iYvTJJyu;caFL zCQxPM?&m;tr#XT1<(2L)0PE*Bqzw4VETl5O9S`w}(wQjy`JQD~!rno^-0 zl6~MDYMP@zHLAoEK{z>wx$y_a#gq-l zZTl%x zH54{H11HB4(yZ^0JeFy{m)(A6>%yC8S08K^n%ch?do+~2l$UxApJ+^gbpiuBHfBOmIAz=zKg$670-X{^nG)*o%4L&dkVL8SBeH02m@;Lq%B>XTeez4Lt zbL;K^(#Hfm^kgx&C>h?j9`0Z01v7oZ(skTY8jRgoETh;Wv(eAJxFXQXzqq%~XWG%^ zG=KHB;!J(pn4q#8>{SHr2+2Ts%)W=n11JN=s91sn?tjrDOi!VJ6Fqx7%yScq%w%xS zqF?kfImqGo$+56}7b3-F6_GE9A7?|TEE%8WXc(QkuSaeLH(drrI|dmCQ|M-%ge9Hh z`#r-iqCifo2${oXc2^;aP{|%KkAyFX)}e@wHE9?h*rcK45Y`+zR!OQfphTjmPynk~ z!KS38RB|q>@-czjAWn@>DeMfEahr*_463KOz__sh5;q9I5{$fB$ry4?|I-II^;dFKZ;8sxLF47@?p)wE~>P5QfjlL|};cr8;yk+<$0tZsO z*^iaqkI{LBlipt}T2(n$6;QhzCR3vQdzS1#B@!V%DxuVjNm-ml&G!CFL~Nj-u3D0Z z8nX#7NCL*AyDSr|sv*vmMjG5%yOiBf8*cgQ=v@u_VpaIIVykpk9Jm2_F_1z-T2SFv z=&;(Hu*Pq){0mPZom3-vMJ@9}?E^%)#uB!JcCD{hN$U4-gU5(?Jp}O5VaQ>=U$Qf-lEld&0Wd4pqRV`F|_!)ifu&0(r)L~H6n z^++VG7hiQ7Ve>)i3lZ(+qKJ0#hW~*`ihUxp;dgZ88O8XBkn z0;x_*2bd)L)=#Oem5L4ZSZy$?Ssc5qvkI)|0E`*@jkoh(n{_%Y>54wvejf)q$p!vp z6>6ay>Xi!`pmf_O8*P}1+vO(PvL_oc7uvAAsy_Sy+};`pftq&@+enp5$cU?7Swq1p zOHoC4Ae8l>Jh$sS=Gu#OU=cy$X$$n0!FjTGa2(YSAh!3)HOCx^3F!1tAJx7Y=@M(} z%`~jEY3>rOOEr1;1K=z54hGcI(6_&6>tL=g|JV$r4~#UbSs`IHAQDz@!Uw0!+)cs< zr|#5eKir``+@+J<=EPX!8Z>|=+d#G1*+!QeL@*R61ZVR!z~9{QlG#7rQ2AlCFZNjr z)wp7yr2i(f!Lqo`$sQmxxg#WM_)B>odv9GdF<+kbcO$Y|U%`I=fF!xE{vP^1=l1r< z!M@t$E>!6O;iHD=y;oBoG+HSSi6;>7&O5%CP%m8>tsZta4Xtq)(b= z1Re)t91wk)W+R?@qyHb)?)km$wp$l|8arvy*fyG^vD4UT8aruh+qP}nb{gBZZF9b} zz3*qOwb$N1zW>8Dk9mC0F~;XK@o6^vDYJlbHHW$3FG^@&60NE-pj)}HBI9XXdSF7Z zai~74BbA|4Dh{=_ICkoBiSD-l>a& zxgnK#FYlQpUi4!8L5RLNvg6snXF@h2W20}6A$K$d1r|%s(HK? zaT4c(>J|%zc>P-DfTf512KRRBfSI0TX%E5_~DB!$Q_o9c0NIt;7Nmp5~3D>&wMyo=G)L00^9x0x44 z{W5lxRpY#}_D@fC+}bio0BgZPQz5poZ_4(Pi}2Oyyfj_50tEJ1GRNXhqY_>A3fdKH zLANqSn_^DqT!VHNv<@moVN>EagHjG20e7;GhjNeNap4^*0EZwQd;TaZY%hC_NrzBN z2jxv09V^FRb_d0#d-W#M4SM@u+K%6y94(TVj1TQipe}_)Oq337&Asj|_#QRR9jzD~ z^^x|C5FdXESlco<8HzetOxmj@O;|;p>Q_06cR9Ll+PQT(IcPgQn>&SgTAD#U(Iaud z;yD{(JOFe7ogPq5&Y};wmfaR>H^K1;)wF!&$jr07& zr2;3kSMwK10@qwo(!8eY1<3nS48C%wmm;IaVhY{gtu{o6uVVOaj0|pdd~Sq+F1SW+ zwhnH*zr=v8Cqg}E)$0_-JL~3K@8w&Ia>58;Vbtio-RXUi?fv-N z1u$>qwrb_EcKCBC>OFSTb`$WcaPNlyq}k^l?Jr zxsvg&^L}0r@^a>Necq*U5cJpu<#EQ~b<5{fB>^}ndOg(k7&-9&E(R{MWy%c#OC^6CmaHKe)fELn9amY(qQ_+axzy+A=V7L&2+X@OCv=7n*8-5faFSo zIYtgLBB3 z*V`+ic?olR+h@wxN%e4B6Zs<$gF=WpQCG)D+DX}A<13YPB7_ZbNIXWO7yv(-H+7jL zHQD4~Cyf7@l*A*g#a=toVI@Q@)um9iP#8Rr0|U|ttviDy1TWse4q9A6!x!$W#8jdT z@o=_axVOnv(sITxT)JfJMY%u(kE4>pNbI6@0d?4zh1`MNi38<)b&2E%#cG>hL@ zS(U62tcMvruv`fh{e_fe`c)(SFk1BW-pYB?gs#S5?J3q&0#h!8;tehq!#GfJB1V)B zDClZa1aMai-7ydxOQiUa*3A-u2yZz!1uzlV2>9z8^WG>>6+57Im}`>Jfq}N($pU4R zL=0Ms)L}~HLo=qd12o&IW>xJM*c3*2(;T$Jq(<(wu623zx4oWCM5j1pXPja*9OdTTy|)4yt$}#~RUN zheUO~X!f}oTz8deuREF}e*C=+ki+Ra-1_Mm7Jjga?pFl-6_e8pwgJmt509#@84I>Y z2L-_UUBmsmyWkkQwA}4Xw!~DumJuCmj*3AT2IOhl2B}at)&}6Y6vDx*yFe+YrCV5E z5(0B*X#xX59OT>q8+$%zfRG!B@DP>27ZI|(&j&$E;wR)Zx&S6S$6osxJqwApelA7F zl@F5if?1SY^=FxzmzMfMe2XFaWjrRDx|W3C zHkb!^OBOw#7{TDCGL%rjlmy4U4$jm4O|210UOS(Z9sz}lO37CHC2R)^407Z_p2=9N zoK%qadliFYh|}~j3T1>7ODPAcYg_tHrbWmx9@rmIZ*%wdv@3zC7V|Ya+_gG)pbkFS8rx8T}Q#$8+VwdtKugn`6Ba%xfMMzk~ zNKmf(juw*$bBraL<2)>qJ3~kuAGnV@3?0*Xm(~cdCzKdnk%yR(Au8+c2{L!Bw{o0u z#&IWs1t`pC$T;wm$5QK|zUH-`-)0HlQ}9Ey&JA-y{0i-$HGEc7xrT3qzUMxDl_~8E zCO_e~PcRCoenwBWxFdWG9RSdih4c&5c#+akX!M?_Nl(CQVw5kuN`;AZWS*vwkOpI_ zoJ#$6bgUa2qqWZ)SsLI)uN6hZ`c+q!cOu->HsxSxbQ+?JN}M0ePG}*pHtZAnQl_b+ zS&_{SqHBxdYb4mW_97q9U%jam7d17z;swLIaoFg>Q3zD4qGw(_;o^*d)-qesa5w z#|?j-c?a2(LXYXk?#GBY1$5p+jQg7$s~IFy)ztH7aTg6Zif9hbRqG(0vmLs}_O*>OfIx3`lt$-;(G|}?iwBosM`2BXE+E{ zN01b6vRe*5$?y+0rZ=Z%KtP(TA&T}a#H!JAr0*Y=a*S*6-X`_n8b)g-js4Q1F6OB) zWkq5wn%M3uffd4)f`eKJxhgHwUq?RM;`~`(8DD8vYJzCzI-e=?O0%tD`|Oyjn2G3sPR0m zJ!YDM+Hv%KleGyA-@gAqX zt8u<3(qRHI{nXN{ts&;)KA@~aN-qm$`4KPfJcB35q^iwuxx%Iywe!k4-(@^W$F4i* z{laCjZTWShql=mMN|lZKfEhpyXqoJ|(R6IrCz!O0m-M`ee{^qRsCu5S+u%&Upr~oJ*sHLm8S&UHY9$X$LQN$8;>0yq1`vGnav0nf8P@YA%;Y+fi;e;areMS zpFNa>BNZ1slZ2@du**m$@3CHdk)_|)c-oVNG{9UTg2y(Hm*|(@ zF_7T}|6y4$+P?R*R9sFe|9oBRC$YgV4>BcKu`Fv6<;DVEXEL=~F_noaMg%hX#9x8~ zWSEtC>JJ4nJ^McI3DfmuQ0-K*7y)J}^=+GAvZ9EKsmD)OIB|(9$&yEp$lHH{tC!$vu#$HB@gsu!z+& zmmvp!HUGFHw=5;sKQWZNIWW7~vI3-3@lERHVz)gl!Xy8yGl!9gD z(1TTn1M<-G!RTp^+&i(z1%<+Mq)_<6NQC;xO+wr6hV;9LftARS@rjXdtPVtN#^tXg z(Vfkm>Gg|m2|=F4M72f1iG*b-F(IwHnmNUxj$7AQ#r_YJ0>o$mkP6{U8}$j&5uEvC zTgIU$07|f%BPn9aa72@JX?1P960VO=JKM#Pfy7Q6RMwHdenFPRM^XlPxrj5?|eg`N$?mWK(J zbQhM7RML)q_>d)^j&`n7tAHkkMrJOQk8jXUfS!e2oK;Jd<|djN9iNP8(GBTUELhSl zI#w)tR?PcW0L7{0#EQRiRmDmy-A@O)an{qBQWDqBGDC2hIT5;Ns?3drv`J6%rOFBf z@Jiq&+V(>CJbL9edF2r${Vr?eE-(Eaapj%}{k~G=z6||=;l;k`#er?*p&@{NsgrJP zz=HS1WMai4`{t~_;!NkAZi}A&toH111jtrZo^Q}!99SNn&|eNzUVhMDL0TP!UNGCz z94A`NCYpB_R-QbR-^Bn2l;@|g4EHmZmr9p+dYAX643BD6kCs-CzE!K86*Kr%Yvff? zyj!zOR=1p1n}!T;o>os2RZk;8MC$T=pz5QO{yDMgnV8{)+G;(MR-}=kSJV8i_2PrR z8g$m`gQ*$}C|Aicf=5{a&@TfKDVJKzzJiuot5NExQk%?&V#LU^2zjo_OIunLfEqN6ajZrPNWGzioE$!qD%_0-~0tJ;MF(ts5 zD2oKwtOj?rma&)VD-tsuFtoy9W}>KLLb9VcyrGz+TgMh=(B5U(4DHX?qGn@ebE;$W zVrCDjV~4wC7P4cJye&hlrqsUmO|A8gWab{Mn?2w>C;gwtZs$%?M19u2%(s8^KMy`Z@-GL zFxuq{o3V&y*-KQhNJdo(GO(EY+KW{&i_h+Shq~p0s%O5mmwc?}H@cJFWs*9rm1-;D ze6*9!5|@*$kf>9ad9By|)}SbKUoY(-{AwVG^i7VHCAszMD|v$g!#9~SyLPyfG;@%$yH~7a`0nQbthfFFxTF8+pzegP9_OHw)}V9Spo{UK-Rq#? zcITq>)k%U@de=ea^j>B3S_{=t52?}6=)uqqxY6gpYTS0GH+rwZ^`OsisVVtj@S{;2 z!|a#-gL+V-QSZaAMOKSZM^>YI<2Xl?G{={PdnD0DQ&~u}!v{032lL%V*3Ac78aBJt zM$myqy-QXrjAE;-O68&l>ncYZAp=OSM>|O;X9_m^LwgrlHrF3c4(g8%S(ReDJC1fv zPLob{QI9TsmmXnGW~YyyMNO7vkFKZ=@=jOsL8k7bY#umHzBJAruWWvPO@4qT|4AqB zEIYTdstM0~ACf0uKHwS4Q>-t0RUmsvm~%*)a}bzwz~e)}C62VSwS}egM&VO%-jn}q zbHpZlB;0*yopYEF9s^ucxZM-bvWmg@BUiP=mN`c;Q)oKfyXEafqdvz1`ReGZ>( z$pW~fhP5P>QG_QQWZrUQQ?%wXxCSqC5c6?Z8##p&aON_%7HD%8aKUz1G^jR&sGQ3%J#bK9ec9 zHCO?GDlXtEd~Fj~TU%SJAAoBVXvI0*m*TXxWVJ;Oa&`4`d3LpRvAK1Dy>*Uq&4zI0 zU^FKmv~@OVbR)HQi*f_ys(wEAelNEk9PZx)l%{pA)ok2D+U@<4?L$fJ!&&YFX70Nd z+=HtPgJyXnaqdG!+#?kBt*i%rV32Xj{M!%!QGCvO^+=wo9$u6onQJ(F~^DVZ{U51Y#tdEV` z_th-jHKC7PBi@5U0FP3k>tru=HOzbhJZ1Q8f>O;4Y_lA$}4x{Uap=%V#TmidW zjk+GH-tK;M$**ypaseKq_?{2lAKmz#*t(vQ_+Fd5E}7pin>y;@PG1H;iZ}T_4!eeG zJkG)V(S78hSygvH1pk$*koCTYpi(KtBY)EW{S_!z-93Fa5Q`xZPh@dH`6ZD+qv~n% z%mnvWt}-_P%2gR$E)VU;|HxGzEUsTnX7VB75ba$d|HxH~iUksbrVC~2CApZW zRtCdyRHqH@SaycvX*5m`+$knH3_;@h-*AgqcB*s;njGIC$^nX`^~Um4G8D(g=JoL`baA?D z<^;g^bbmfKaRbn2N`GACN5m;d;&+1_<3x8q!*e6|fTFEU@cLZ2MR!drneB9e(3xBI zz<-m9?nUHTL;fC*-H!D8oj9Gb1Ma6gT_3vU8}b0=FZY_x&yp^=mD7%MqmHsn zYuu7|-kRlGwO zowm$BXD082`ut1|3&${QR`WI!`=)nC`$w*F>uuJKy$29Us_d)&2NsK)H&y ztx_jN4(FGN!w1IL)RJLnFi@_-xor1aO1tcQ|9B1R{zRZ*{Tq%C7l=`5uUQY^IN{z5 zk$I)x4ATMSsuAYR^jn}@rC~KLOpsweCCP_(KPRp1aX+;xgR;@&6sdmEqS=M_IHi8* z^SGh936!h62r{2`0{Awb_F|MXpARw~-=B|E7heGmOAhfKj)@V~JdYP0N%(J9{RCNe zm%~99%a=Snupv>N zkD5r&_B=wE5Fzvnn`m!)9iq>w10vKj(Jp{dJzUYgdTgf8-}Zd-5U8+*>0M)Ea{Tit zJJ=-TVo?%eSqi9sv`8p7-Xs)-7tpG5NUE%$BsGogW6?bIHTNUNA#g2_bE!({pV%f1 zelKK786GvHzfGBzBBwS{l{V2rjb8F6|JJlDZRRjo)n=)yO zQ%%&ir6HxpG>?kYAEVeSqlphSHar$aWhsl3osA6<&Lv0 zttCJ@p^IzfD)F)Xc>Q8-p>1`T+_Bk*&Qf6)XRCtTsT)eh+7SnL8&vk`H&*7Q9~<}f z+l5mJ@%wowhQ>DX;?n?gq)nt(`z|5I^N`SlK~$3Z4r-BeoJ^)gSX25QS&++^$;Elf z=-WPfm&>?ISdt> z-=V~-<5c(XWr;w>u{v!1)P#>~Wn9a!sfe5KUkc0UzbULhFvtFX5G=HoN(|c?pnXL| zLPkvSm6U>>{4aS$Zk-QQuP8m+X=rKbVwRZwySVe#1q1}db7myFnx%ZpE0n$V#oPuLH@bowM8hhpsaK-~uQ@RgGTF z`Ci}N-T;Q~0D$|Cr3b*x$HyI@bO!Lg3IG89f7F|x0NzHve*OW0LBS!RVc`*xQPDB6 zaq$UZ-;*^aCo0?l%+uA!iySjUR_xAM< z3=TDaA08W@n4FrPnVp+oSX^4J5-MC4_uX9C+3jE3%iTWg8a=5$JD<Vp$X0zr?LcrtsM?olw;mPkV^cU9XA<7dI!0W{4D|)Kd=! zXH~07gF7fr`D%uNrjY;4&8F9(lWs`f}J!fqr1hsNP(F+!s^ zQ*)k4WLd-HlovQXi`nQlvXgm9o4?u`I*(Zo$bamR=#P`klIh^o)@mgA#TT^N`gr+C z*)Qrn$*JmmcNR!NX<5HMUhVdt(q}E3zT5*TsL8G_VsNOvTz*opmqjt3azd2^-zG+A zSWrljU<7{@e3flNM9*9hZyejBZ6F18q|5lFl?lTYqp)}+%2Fg33_&bdYS2XmXHZJhI21YTkH!kY+tVb(n6y@E;3` z_WJlR%NuAxNpa;j9b^ZSmmcN1p^qHpMQ36h=f^9V9v37VmL3D`Yr6|4gCT8w6h8PCkB6Fwzji1$FT!SB~0{-L10poVAz`Z1GSYzA=chSdfMM}vg2 zh?2%OhRFX~P^bNj5$}z(bs;Mg=5}#kH_PoJI4;j_C;3HNZ2n_Gjps{Cu$|w{%8An5 z&nYT*Bqb{uRirFvkU-6c=+rqFFB%*wJuDj+RXqG-L0J#dJ+7fdB8XSmGjP@Gxao6Q zZFob`v$M19MT6PrJgmtknm=v@bx{G1)O8s?o{x&EIx`p4cLK1k1{nZvS5=#=&!IZHe0y=1d~Sev zXM%S~F@A<8BwJA0Y|v9De#MSTpK6>;5%wHDXxp=2ea6~kD9znZ8M08+v)MKZgMM=% z(bO)ppOE+|JMhwx$rbc!~j3K6`Z;)&)onpufh$84Ega}e`% z{fa-;*hp*SuH{m~QcJ{GD1i&3BRzfZpVtWtzLA{obnYLCuR*4f`i$}!xcaH$N zpbo_bIajVDoyYR1rVj!W8 zs`YY{1RUirG%paTnab;rrV2794UZXe-lj}x6cR;yoiVNNa*aBUFi$Ft#Ec z_CFL9;2#Sr+@bcb1=as)u10IBoR@||Evm7SA)w4p`HEEaW~k@W;`bpKh-(4|!*>Vjr3RQdmtmDNNS9H@9-4sae@rC}BRK zv?)N(Ua|3kle#f?#Xpicg4Kgt8oxl7fx@z#kZD_iK+#1bTHh}PYd=D$a!E?qc&JS3 zI2UG!8hF(T>|^V={iCGPXus!%cD4e=-Bu>x7pg|gkI*Y`J6NKar5~5>G}x}dW8L8jJ%dB z^W!KmW@mR^{SwZzM%t6ujKM))8y+X5X=SS-0o7<>otiH55qlha6%vVfX-2k3Tr}|6 zgVZsE7J6F5Y2Z4hf*9iCtXCmu!Q5Fb&WMJ1}qjdu5 zBoEQCUtZ}^V6Y1bB}iyE>iUteASaDnBy?8T?-e;dV-iSrjbb4 zUXl+%h0TBuT!1qnn%dg$>^E{~Ethw1JSkSw!OvlCFSmhrupzfWwAG%zO zriia(np<~$Q|=C!>A4oSGHKaR!be}xF7dFsfB0jFK%j5kOTc%f4j#^Jgvbj>^6R8e zPpaj4RlLfyc#qVlcQTxPIQoEf`-D2*3D!~jBhh9(^W|lVRWU+xDs?@$kNBdd@&^dG zZv#R=ATM*}ioSdP?gkf*_U7FJlOTjvwT9H=H)$p#GIivJe1g;Ehmg$nhFby?t_GK~ zhJ1H|1Uy1y*ML$6`+^VHJj?rB#`{QY`QWkpv0y^@B17i%0NiktO*RESv&y?>#+qf> z_;g-DKvVj$B>TfOgIj;|!7B93oOSAphQKNI7gvF15B73b0Cx5SNL_hf)d;>91}t|6 zXeRp;B?nyh_*sb93^xQG6D-5o#KaivpGXPui;$W{hcxYp0-X?^d?`3_ z39N0_;(xKki!GB$w8YCi$Frcsi}}SGfd<&w zn#C0=?k6XxK_)omCa51L=!IAqi9)*z>*=Q?z7-}q6Z=yv6H5ZGm2rRP2+UFl@x%B5$5 zWE#n(*^olx`ey`hWyH#*=?1GEVZpYQWCjvu-KId_alkx^LqBuCEwp5{!@yrJLw~qH z-f?7KQKbhEe!97ZpAn0PEX{J<%|fxxLQ2gJ+yX%V*hgl-Yf2}I7tPtEO`%D&9e8;fDTgaPEmd*?+WXMyMEg=gn|DuqTJ5nnrIQtyok z+s)vGg`FjZ;RY^-tmKqz<;qKBU)ANyff^F9!C+mp3s6HVQfDt%=id3{sZi(pTIU+6 zky$3A9{9jk4*w7yA(vGv%&N}8S;;3g%@MRoeNaJy?k})%Rq5-4?g@d`rAE+pg%4{j znvIU`snHYiBj)8mEeIwHp)OdQDy{^{H-SZp#x99&AxUqAYvf3GXf0F}%yaOg2;zh$ zai!^#D{Y%fN3<@;az*49wRAlxPOr`?4TW{!tt0K+;BxwX5j|m_-r$!3opibq4m$83}h$jqDdBs~x+n827K97LU8beSk3duWq~-FTLOSO|Cr`T_3-d#=2`KKc=Z+_`;@#Yutb#*bxNGR+L8%J ziV4@6uijed*2?17y6A`>o<<#))>4hrR?F4qL|Sp~Qkg&n>gA^4H%e0R8rP^^?{eE( zuiif3)?SO%E}olFcKpd~UkyS*}hoohHmr)8BWs9pD5akg$`XVeHTZCa+Q9aTLwnT(*-*Db?S zUAj=svDICWpVDB%E90r)sDisoh2$WMV9{w|sjqU1PwU5Zx>rDYm_PN9o>?JE!F@`H z#VhY&m+wIVi;y#8#?b&Ee3Mc)-~j#XPL0TgxS2{!({4~{-OHNpn{-UTtijR3-)DZK zuqIKQ-V$iMR};~e5tri|>)qdd)i;OSm&V`ClU(PV!>m>QTjPyb?d*4CbkgTlk}6KJ zU*&MDk}xyQiAH1aHn^$sXK+qyFeco6bvlDS;qmhEzXNnCJmBL+%FDjI4br1kQ*vpA zq<4>3o2!mh#Fg_z8_M#BK&OQF`MeI7E5%<^D7Z*f>x>~Y(srLrH)f_=1f8`At`g|E zV~zH<32MOQo0@2xRc)%WUmvmF5+sN0mGHDEe#7!pF7V=O4@` z1u({FnZ{y&l%Pl}6b{4bof9*dO^uo{o6$As-d6h<@hVkB}EqBV)C-{a^Kmcj3}T6ikG##7amlY&X&^bMr=Ajiw- z(1&>@I3CFwc*G6Q*(={+Q{LA`5vG>L7uWg*7AxRdE!Mf>s+-P|_B1!PqzBe5qzfyU z56=@?-KH} z7pVPQgG1om2JLKo>*#~-q`cJJ79QRPcie*Vlsan1$HE_t%HBNoS=hVtK$O|WutdPO z+#EdvXy(Z67#?m3!S8@uCf>a7WTsDhp6yC~*|q21<;Guw5ZIIIFx;EkkwM&E(%HrP z*i+QnSMuCvm(iIa+7FrCQk&!La)YZz*g}`tH{{q3Q`}VE-!Ydtut3}wJRAGEzGNkH zP`|$iQ@IYkykqZq;AnX$Pe173c@W%V2+4(tq;(idzn8POA0e|npMGRauW#wOAJuu3 zjNcy@dF+k|<99I?GjX(cfAG8exX|+?)blvHv(c0OSgG>F+;hirV$@mYI8JNa(oIff z<3J?x1oPs!sq=_wz9uk1svt88a(d}q^XXxwwr({g7b@}%ZtWK8RP&hsSa;>6Gr zunlK-9_hK*baAdOdg5+=vYL5*QhEMs;=E1kd>{V;y!Q+t@gxeq=#>8QJo2JB`|_6e zqP+7G1nG3r6Cut6p4MfjQR{d{W*fpP8l2%chJN><^U53X+~E8w6aR9Sw--bEa?Ns2 z4F58P{)S-l8V~7^!t0or;T#kRxQM#n|m-{S}U2~lduI$FRP2`5%y1_SGSDgj7Q zdBP)nyarPd565B4EA1BFXi9pJXY_OHPokE^P*Zin3y&rWrXjG^hKt6mP2`EiQEOty zQdQ>20P+6NQbXA=#WJYODIcrUwPU=>bFG-gm!R<(yH~`UB0{a^r?gOB;uOM+C+H$B4jfa>U)! z*CQa#)5qU4B+)Y@88{{QKSl&W(SJq+Arb%2$w1Wj_`j7E|7$(~?5N19PRy8R#i=AK8XI%n5hPIiF?H%!z-Rgs* zxT_W)>)<3Wq8YerK5rY;s`6 zCn=Ukii{)_`nSn}^2gsM2T4y_t(l%LvW4USHaQr@05BNbVLMc^i>LF%;NUe~14^2} z{=5c>hSGUpm4oT}-`Aki8~V4(p$_;O{;hJ@9m$Yvs{C8!us-^y%E2294qvLddb>9m zl}2lF5Bqeam8zU-sp58Lv4IuwJ9Lsk>>hxNY5;y^!vpZYeIP20d>P4=6YlSqqhUC8zTSY7H-h^nN`k498{T zuwdK2@qL6@*ZJyIf)`8T^R{vJERwcF5er}r~n?iB2ivJcLzmP zA1`N3mmjZx>2&3?j-8;mO|WcSo(9SstO8TP=hdH`WxTX$jHwiu4Z0{uW;eq#Kw zb|;9Kziw0q)=gd>8_2I2X% z`@aM^_>ir0V%LxMh*e4??5wR(?aK?e4NCmKpWGx_?fm-e4%vgzhYQ=JsCM@Iv3sTcPz_f9fSicTQk!2}8_*!mrUj6w(TChWZuv>r`vj~;jZDDRqFSH3v!%8_ zeWnkMhSXz0;L_P4<4Z;5-Z0GqT_Kdjop zTqHG2E{C>14Too4EX6^s5OM#bIeCuYL!(r2nv_>&+rG5_6kn)jWd6>?K8U72NUkk4 zt|s=L+>pntb#7##QG_g5uYw|XYa~jsH9Y%@Nt9qx?J5>o`SwB%z z7WU|k0wGW3<9wOEa7J2oANUN)cm(7DVQ62cF%E9famk_Zg zSX62Ug@PK49C-Srj0?F``_#`ESrcxwMvA?vLOs_}6X`Uz>v2R+S9o3%9rOnEfuf4| z#>GStTfRr0=RYiC=^vISweMS8HllJ7VyT)4(@+{uBQQ~$JSb(@GQK$UOQtTh?S_M; z%yiU@o++h4^pJD)dBS<3F7uY#5Ekn9I9H=~I+V0AIa%XWuuMI$&dj(_s%1Jl(q2>~ zh+904Y;YmmyMS%{*oEKQB8ol)98jHe4DZ!CTReb}{R5Agve$UNJo4U{kh+GGrHP&r zAGiEhN0!EqhXos#^Ze};VI3Jwkc* z5#pBfPhNzZ91DV@Yzu)_;lN>>n9S}RYsfRp^E&nt*WMIGW0-GE*0`gY}$1(VX zeScKm#6p&s8V~$`tlec-o$IzWXxuG<03oW zT5IoJb@pl1T2;;8Fh7j(^wIC@iAFpf!1KH%d@L^1RqkjWP^9MH9?oHFG!tQ7eLsKd zP~((YGy?9y&p;j+Lpa@Pj zmv$Km?XoxScc)+sa+PV>wa+i*LTt2g<1Ns3q}1`mkea?Ch}rg0FY-co0ynhIvFrHM z$_4)6?fz3^+hLoP>n7dr2iOdEuL3W(T`9VU3FP+cMaXL>)2zo*x#Zi(*P$bZtou%A zo?|u7u*(#{%cd01VLDJh6Y6-KiF7}4Ux$3~%s@gL=ykOtZ^`h6=gC|~5 z1ls3VuS#vd4YShBFu`CI;z2jGSPQhH`l z`WH~1gJ80LOs4J6FyH@K)aXE{AwkeUFu-}i{DJpg|9RR4Jm&(QaH&_90?)R93z@yM zn|;C1Uk6+NxrhDF4eT8g3=R+cBMJW3RSdX?{e=ep`!;J}?|uEsu4y^|Y@S{NFRT7v z+))7+wS<2yYU0`HCHWso%2X>B{>!4ae$n{%qP8Zv`e#x5`_4*JCL}zwpys`;-wtEAel-V~~yKJmt(PO`f3 z(W&X-8QHLNDzpA3_p1IZYRqt%@8ljBv=_FB4NP;)-;3IRA@>0P7jsWzsPlM`_`|7V)@;r2TgGFha;4k zUX#BhPwIu9{ZH2hE{UnH{McfV2Xji)&mfy`j`0J3uD_dm281*2c#*N+9lAMvWj*cI1Z;%TpUSR0TDBe({g&RO}?_lGvMGZ~SXwx6lpl~w) z+X4933B;$&*ZAAq`_DrwBJ_??R!kV;V1vKSy?+j^KEXU<25Z2G{%?0y+5r^*+*$o= zQTuae6+ZclsNa$~EMzt~b=4HWu` z+ZYa{kE9GzHk`bhd(_t>6N)vtM;GO=cnaY`4K8I&h_go`wzJXT+|+S6aTuiI(yvD4AiVSP_yR!4V7Dca5$ABcz&qLTzeB6YlNnI8KFpEd67pE8tj_x2Q~1S8O1|}pPYj3;KdkL z;^|+!RW5$Lx6$MgyxTb5Y@w%^;qyA#2j}OeJBN;SdK4d(0+1b3UB0|>&_wY71U}$_ zKqnTwez-sbV-$F~k!b}t>GHbHO515Q3<0o7Q^8aBZP8D*JHdLp=(F=;zmTCkYh3u* zSK-6K`*?qP%k`&~4~07?`<^yJAHXbvkK{Pejr(*F_=%7JB`^9rMQ0Qe8uk`v1UVcG zr3{*Yo35$_c`s!-X$T!k)+ep(UO8>+&^LMz&_XAFI-f~Akr6)75vM-?sIOl;`LRGS z`SFMt0cLvC^uNJ+So@gEiNigJgW)L|Dt91d;hT>)2uP|q!e)jd5nF{B!3+gDm~5gG zIb{eLC|D$2u402g^+I@s3u%31iNrbcDCf}!6=d~ds~PgBD((hUmac#>_4}Qbm_%-M z0>UE+{U^c^9jxobx32_AXcX1DgmU;}ZloXZ>4};}u9Fu=@|hcw(5$R%aqC|4S^GuC zY?7~2DT04)Pq0NIR$r%i77=jni;Uwp)ubP9fN$B)x@U@Pe~*_+T;8T#bmF zK(R_IP+VuCgdYUpQp!l9S7*a_|ADC^TyB7ORz2TiFiM#=Z- zL)7T7@KQap=eBrR;GI>S;Q6=V#W9z=8X-h7Bj9_^(r%@-g@2oSgjts5;bmqi^>d3$ z^<*&8f?yWIiZdsQ8g;Y5U{;^i*Rby4T=mVZBdMTZFPN%gta#;Ozrch9{TXXiTs?vphS|pJS-NW0F?&W(wB@!XGTApJ7JAG3qIMaU-5)O9Ta#w=dPF5o{m0znMXHVp6yGT>Tc~5F{f4t#3^}Q} zFxa1$Yn@fPL#g&Sq&!v~->`zVerbm`al2n;!D4W|OFM#1bvstD0jJ$Ktp zs2Qj70HtGV#u`{IfFWgIE$L~d5VtO0Y4j+8$qTe1f~j=%(o0Dx8+10duKcU_v9N8{ zylmlZd3UGR9u~wxMcj@O?gWDlyc%k?fp5)EE*QNG@1@p*y1GG*JY(18#anIWgqVi? zRx=Lc-SqUvN5j$dZ$eyQDvq{kTn(!0OklXt4Fa8r;dU7dXdjI3F(1n2_fHbm_$C^# z!PY*Yq2^D$wgq-pw8^K6bJF7u`-x9)STSg%QsdD18nuZ)P-Yx&{{&s@10~oE^TW2F ziUc1d;k3=1`MMYG)P$25_AzZ6bbrH|G0V%s>gPl2Mti^=WPC(WPH6H0t>Kd!W8$3B zUDx69EY-|@t+YLdZr*VM$n!*A1aA6q&Mx7-oiG8ezC>l)tW{*o%B8W5%=5y@(yDF# zYRDb!hWnWp+4x%EmE(lIn5B2Z!16fTLl1}MULuDZGZtMi{y#(F-M>o#fBV?LQ4zfL zZz3BB841a23=R0Rtwn3Dz_uyFZY;yW#laSDI$Dt1n8b}oKkr+|lF3|K4p?wZRN-osyB zDA05-n7bg{P$?oVEuKCq-qkEED=#gpEUl<3Tbe7csxKecE#FeFurQ%mzNs8iu9i8V zUNEEa(_FKrOj}!9r}b3d%t=4vw|;NCLG7mD5WsM9@J~0v&eGcHuk69Dx%PeFb@8?@ z7_=X_`>U$pxIPbTD>yf$H~)kd+5c)Z#P*}U zJKKK}i}+rWcVT;RHhvY5kdzFZpc8tx{*&5Hx;szl;z|20_Ffg}(9XZVESxzj+}L=j!_E3W#s_aoki++$=}EmoIv0fc=YGz}SOxGTK&PsL~gPPn9mNQoY+BNB48B zG|6^vJe}VcovXRVcnTP*aJMzr9?!jpDzC})r%Mgi$74Vr+j6eM6&wS%_2FXMGl)v4 zozwYxzb{KDVa(0Net)LQbUj^z0_bD6r~&Zs+FKv5cPerW8#UdZ@7*?srFQK8_OZvc z++N?_K$R1`AfOV{y&?ZKti$mAay?hSy#w5WE@1emIf0UNBXcf}qS3_Yg zzq9x*4#S+XcgMR~kB2 zo}$W3%lWkWU?~eG?vTr9W{o1_zQ(zeeAg&dHaN&hN$V|ioiVsrJMuEe+39aWF!;d_95+NbcshEIR#Tj`mk0?2j=w!5DvhYJO zeRetT_i4V%NW!>TF8z)%hs9h*nBYk+1AVqon9D>K*8`%< zZyy^Dy&fOuXvIxzW$SMr8$1+h!-YJT);}3FUJRJ3+&2SD5e8|?eDd{-NTVc_y_or{ zSIPIS2NLJbP0Ly5A&$Dd(iLv|V(U*!_qC(?bgd%{%W-*|?I1{%UeMy&tw$`r>xk#` zBdQxv91p)yG|#m#hbpDZu%?9_LEDvoLKQLQjyQ-CR}8biX7zL`po>Fr zpt=zFbqpA)aO$E>H*&!CnM^r}?+|`*?&N;EG%kkNipF^a`q(xOv88&45GucAVu7>z zi2j;vQ`YZK7V$0Od*4!;Y84z%?5Ysz7+M|yqgDZC$#`h8Uso`7tbwV@ed#=1iE@ly zBZJ(d_yOM+_Cnh}VW&B4BXqo{$tVZgY%v>syQT8DGBn&v>Q9G~uByWf>2^Mtt7781 zPctc{GX+YcCb)sBGvdWJ*>KJ#;zTjBWk4TW?Zhx{&u-MR6o_bE4hf$=EewoVReYy1 z_)%rEkaV(@8zXUQ0{<{uDY=)eB>ux_KDi{ay1uc$Ow-J;g{2yjE(Lk_)N(s{)adi3hOo)u;*ihG#!z?HgB27w*l_@rQWW9smkI$_l3Rf?&s~- zuq~mEmwhR~(=yM^*m?W?{QdL&In~=eh8GyC7X+r)5%2+Z2;43f0}y2|qz5k)Oz&1l zFPKCx$a&AHew&Yt-q;J?xC?HNO7CL!=qL9OSukM~C_tSL^&cM_7&Cl@p{kqm!gKOv zP4s17a782cAtE;o<^xl~_x+*lCn)Sk>?OX^Zq zm?7D$!M~J$-aGhEGzJ$7`vOy#oQIG~nBd$88^L}rcg%Mm+mbbOV&C)W>W`1@61>a9G4?>R-ZU_{s( z1q;{Mp9$NKlSQBz`Yb<0+&$P{l1CBxHLKWG7QbcV8l7H)j zo95*y#RtE!i9#E+hE)kVQ6~R(0T1^J;bRf)r_V8nj?tKGkxDyJxIJ*W#4*&LEs2do z3WCUIQ2419W0;N2=>RIh>ll&@kKdV`V|ks;*kJV*entEF#K7go;D7!lUS!H&6l+2s z5%3KhTf`PGiB=*huJrDg9VrKC6FK5y>=kM>YEhiQXJhrnxUY+mhKuoj@$n`GzXl_NtxCkf6ahU9xi z4#vl@IVJ;r?4+a$fus{5AFZUs^u?q+6^qPZi|o&dxz5S?kI9vvQw)-li<^=sgXn}E zJrx?b8@|fj)MzH_*)n7m4!cOMNK{d7~h2nS*V)h+_E5$5u6Mk%kMR&j1@Ty<5byp&$=x z%~lBcX{Q(kGpKuHvDoCB$nVTljRo1AChl5d2? z-;NLK({HF@VyS)PtSg#ttXkmUQg9uMU^bK`vQ*%4q+*HXX8JjQ7sh+gs~{-3FeHS- z1u#_bu`ohh)u+Lk&L7KLzxmzA=BMP;S4iD~E+V0bvr#RARL)CwDK2EsEuSb##|p^A zD$YLA%4PTZnF(9uQqtI*?P}tm%H~b*ka7%~2t!#?L+O=}Tr!YcTF_TidgNUJ7iTS6 z+Ti3{U;OT4*X6^G9+h^$mHu`~@?$T<#mrhzE#EWw(NbB4^H4ew;$0?^$?8;o#a;oY zr+D;Kcv2icDN0U!kt?0-zqDxCtLmvg3wz^I3FFF@W>xX9RJJyxwV_Hr`&gmen3Mgj z5`qJ&Hog)&rLwNG@%@Oae#&p#fzu z71#?!bjvl+Uuuw9Ypk0pe6llH)cn{=YQ79qb1&EK!PSmY)H<;h`fpVTiTRPcR#8%U ziXYc%mXsQU)X6LdcHCE@h}FG>N~4C*GZA(|kqo+2^+)|*qU@mFZkPwm>WX16f4BrVZeZj45s z7DyPSrd-#8K+}ehl;(qmrqq^X3Am=Xx|&hd=33K&f|RC>gGz(tCL@l7Ei7+ewU(}w zyoAtZN3nV_xRMySma3Loefp;EFKs_uT4p%v2U=Q&x>}e*lRCsomMPmd093iXrmdmF z&6>q+ZO3|m$uHk#G83&>EBg?JG{M6)E}zm!co`_EtFVCu4Hgs z@?3i#fE%II*j*9!P5UYGd>BQv0HqY4MBqz?ku>w)Q4=^+=rb z=wSEXnlz|8^ckHrd40>aZ0##3={cWEaHa0|5$E}N@>`!;$HA>$6A;|*=@aZ`=5PMo z@3qq7t3J3W2PClu~SR3HqK1VMdT zks5v(F`O8wD;=E_*P31#Y%3kfjBoTG87;)_oOl@>`ZPAfS=z2Pw#M0fKs|8OIyT`v z!Z5&^(~o#MA$l}M z=r)m&GEw6?X+u2`f$L z7O?38s%cD#X(sb&sFg{<)XCk$ejdabL-H9N@hJiG86k;LOTDhHtr;oAS!wE7f3j{A zuG$yz>6fHgRf%!+(=N?6CsLd_w$n-H(wUvXnI@Y#qqMott#f8=lNMZcFC)_|$J6%i zb55t-df`sy8ubdN&5|w)DF;(+y7T_4-7et^a;rM-G;_)$ZFtm9J#33~)bsJ9^GT8AE4M~O^&yDcN8E>~!*IDT3# zKVD8Y)w8ZMHMknj*+z`$1((1|z zm*3j!>J-k}R$0>=PBPQbIBt#Naf#dU>sp~3(v3Fq;RfRT1;RK!0u(L69q+~kKJuX# z(j71IvDb1o{CeYY39w&b={~BTv_9CdzG^;raDgy7fw+!>MC!3c?y)sHfplnv^Z|GE zTw-4X&!$^5O+^E9r2=a=i+$>O>?uEWqn_5JKc@hIAT_$q~n>Y z;{~yAUmJN6AAv}6NB3=?ToZ8&9~pUUXEJmz2!ON;;no%!K4tkvrdZyq3e%`+;Wp;J zFCB(72D0b1b|{dJNPV`oq1O7f{2-KeH`Q@A(yiH6a)0f3Q(7E(jTa%67ODR1urVFc zSMwlH^XQv}hZ$1AC&lU#&4#kGBhZ7*lh>ZfiT%d6lMKzhqlx2Si=%?GkdW1b(2;Q$ z^^@52>bMBEp|kEAX@pwIt%>wA$~UA|%@)bGV}^($2gkLKU-sRp7C5oa;Jn@Uv!k!4g$u`{Y()XKoD5R5!gGfS0*morcd}KulUvx zuXr!wO0K9f+Upnne%bgFc>?7|SL-Uv;?DN@%*eAfto$_c zx%?a6ZRHy^yI#Aaec$DIzX1Tby4^VU@O%N0+7s+}snvQ$M|#St$Y>XTtuuU` zKd&k5cy&BS!mmKOyExyfIGaL3x&6QS*j@B0^}?yFeOm&o#*7v_iIdy^_}ICFToej_ z``C1YBVlsW`J+5+_GdeP`Pj2FO>C$>5V<08wE9akhjN87d6IcUjC%^DD*EX=OS8vH z6_{UTSFR>bRDeGA9FZg3f||j*k3D=c)9QWWr*Mou2K2GLA(2Vdl`FYij^=0$RvN8; zRO^!X=BY1U36}wV>^zlUh0+sQ0@pWTeK(WEMG6%Lt1gEI3srRE`Q|D%0D+JQ`}4g~ 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�uiAJo6Q{!o5!fYD92 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

    )qKRbPC!Y53_Pc~Q00<|*HL!~fl+ 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 literal 0 HcmV?d00001 diff --git a/x-pack/plugins/observability/public/assets/onboarding_tour_step_logs.gif b/x-pack/plugins/observability/public/assets/onboarding_tour_step_logs.gif new file mode 100644 index 0000000000000000000000000000000000000000..b3b1668e43067730235cb7e3d3568df36b3837ce GIT binary patch literal 638810 zcmV)nK%KuwNk%w1VH^Wg0{8v^|Jd+;hLeVop5o{1@9^(-eu~P^*x14R*xu-elc6Li zG4u5Glbx(+aC?@Yu*uKXkC~^0jhw#5(DnEGnxLot=$ilk|0E|af{K>z^ZVlCoT?%x zF&!r{d4i3J^VS?FHJSVTpQ*Up-s7gNwH0!+k=AtE;p+AI{Aj!HtMl&Y;h4e3&%5jV z|HvbLiI!T-#?I2&yu!@A+Uyx{s%CL}oS~`I+qufA7 z>-?szw5_we_1U(*#LacXzWBn8sQuDhuC4#cBv7oRproxLC?(wD>DJxox!CEdvbTxy z`+J2p#?e+>X58J~&*AfGaCgzy;Hj>) zm!Pl3+vb#-qa!CV9Vj!;+l>F`*3s77#mUZ@o~(>k^!fcFC@huY-7z>qDJd3~#uc}&l6}tkF||&&S2e)3NXD`}Oqg{MQw7virpo1xtWkzOkOn=3Ht* z<$sue$~orx;G3bVs;|23@BH}1BYyJC3M@(N=*Q~dnC`_(sH?A;p0S~(wWF-Mu(P|B zwY9Xm!q5HxA^!_bMO0HmK~P09E-(WD0000X`2+8xvdl` zJQglQ7;�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 z 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

    MatKcf02htPM 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

    Z13h2#VjtHHeQr*mz~w2TO9O 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

    =Ht#m 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 s`^V*uakrM-i#p!FJ>P(N76U(F}Z3?2>hB=o* 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%0A`l~up-ZEny2qP%` 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

    c#aclXk?SU6f)KaKJ_d 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 YdGu_)=ALyX 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 SF)=mKap!}wj4tijqxpaLIcC-X literal 0 HcmV?d00001 diff --git a/x-pack/plugins/observability/public/assets/onboarding_tour_step_metrics.gif b/x-pack/plugins/observability/public/assets/onboarding_tour_step_metrics.gif new file mode 100644 index 0000000000000000000000000000000000000000..9883b732b98c5c8e22c4584273025de99f9b8e66 GIT binary patch literal 487681 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

    OH7TJxC#>`x*!`ld`r6>dwW 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

    ?2E~cKmM{eCj05ERePwRSk|A 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%0DO+{0nbza0;HkuC4NT6*!6rt?a}r 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 z�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�SZJf?t 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≶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 literal 0 HcmV?d00001 diff --git a/x-pack/plugins/observability/public/assets/onboarding_tour_step_traces.gif b/x-pack/plugins/observability/public/assets/onboarding_tour_step_traces.gif new file mode 100644 index 0000000000000000000000000000000000000000..7c282e5b4eb245ba4bdf1bb819f297f97748d6c8 GIT binary patch literal 274497 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 JBH0QwVDMO)CKH!0=8@> zPtc}&(Et~(fK#vOU83om^Qkns@n*j1W1DH{i|LNZsbjCP=GSSkuD_RVUHaOj2-@t- z>m-)m(4r>*DSMX3Vp45%mZ;00bjtr5{~VLloTkOxcGw(S=^V4g9OK&@9B~jc`g{k3 zHjXN64*gy3le^_CFWzWw$p!kB#LxD0;PB zV}%xaCDD6nOlPIgJ3G{S0V!+6Vrn^OW0eUS_|JPWP;a%dDkC*|Wu#)Iy6a2b_qA1} zwchXPCDA~_gk=j`V8;LW-8*NkTO@8YVzfku#=7HXucN_61Rh!nMlapO5;ycLK=utg-TQJ?R zAL}g#?WO#wEfMHd2>&4L`}UZ{LV8Dt|HdZBdj~&fhoF0hXmf`oX8meoTOECevOD52 zddrnzm%e-Vx~h}veYebQS1e$gQGbtvWR)dnFOzm>P>+n(b5Dq5zaM{=M}MDiVvi_z z7lC144zT~%c3+7k9A02YrnFby=YYd!_E+~oDA$3i-GL^_p~uv;{?vgP;GdMjqAb&) z&E~F{&*2}RP<^}Y1C$0^pQ8!AZint8XWG3_sQGRr#{qBqUi!xtTt{CZOve!d$03`? zW@(45-kr|1$4P*th|}XVl8`uo0yh1V9R0&|l2i5LBVVSIT%S`L#?$iZB81n2()UyC z?$i4Bps?!0XT2TSj5Ch*w%<9OGk!sOZ>RkN=Y#s^!|zL@Ip^cu=Q>m8fcJCzi{i}c z{RWifcAtxm&9fBiAX2o8&G(CK640&yXkQ<6=mR>=0iAY(&No4zchHzZP?OymUCfeC z5Yv1E+9ed}6^!5&oWT`>?-f$+70P9W2-n4e{$+mlC6+;oLQa<`@B%gW znxN;JXzQ8;a!r;C5|uh7saVAnyr#8}#@V_Q3cLOWxnUu_{Q(iYWiz*fhCuVRb;d>{A0piNNEvg2lY~Iq=TnRw}nR4&ceeX4M@3nKUWNYTL z>`r+x?w;O<>U#e0#Sd#j!Yo2>^s-&^U?J6fOf2%iT5&3pUYM~|LIFXmgl%X0zLrw9nhcWZCRc0B-c8#Em_)%}#>`<#~hyubPM@q9W*{OktW#hX6P zFnB5Ueesxn&aU~E{pp2)`Q<(4rCt!+xb;}x^Rn^0SIzv~Bk%(5e!#){gXuF^0qpXKX>wYxHZq?i{K zL{F~0a6FqQ?YLXHGIyd<3UZMz(q24W)MF~JJ6K&j)2RK8XO*b6R4Ed|xL9qvwsfJ> z>Tm!k(sA9@>NLFv>Xt8D8Wf5`Gw7|dG5)L!{}O4s4s_VFkNxo_IPnF-DF!Fhe9$#p7wz2kCkXDF7&VDokLvLKbymC3saoLeog)5GKm_I}-% zzeL#Dg7`wgV*e3>L1nuVg8QQSM;L+7=}H)hBI%C^3PYn(@7uy&B>xi+oLu+vam8i% zZR?%{Vf_zP2XR~-r)zP1<0JVM1Bs>Y4|>D1hi`8tSh>%o6(9!7mP~f2FB2 zoo=LQ3zGiI&@AuGj6Bv;%5}fC-`z}5mSH=}{g`08m1CQybR1x)TS#DM>Pd10tlp{I zD)8MdI4TN&D-+~NHoU&De-16YRT7K8gE;<@AauU_C3OqOrX)<_?8 zIes+_vI^LT6)=yui?&roQ;NE7`UZ|dFS$HnFWu0H3-x;j9z ztG>tC5bK7iimdb6_m2AqJ-_(Q5JFE>jwiz)hKc48XEoc$+K=q%PY!$o zXF}>mjRCS8Hcf8mP{gGI)ZeDXC zlt{hB@wEB&wSvI5Gg_5!sRjH1wjba1aktYqwVOOQz|!z?7$$Umbr_{6k+)TVZh8GX zX%0j98Gu~UvF0bLfju-S%h_e$hxph@BPZ@kEYz)->iv-O2=uz2KJ)Q@3~4NWbKU-_ zKzs~vh^=wnbbaJ^JIpM3eAtbCv|QXzZUMTVH<03aoD>{co}NPM>wDfzv?PN;u{6A1 z*NGeu?9tB`$}O5{dm_<`!>xEjZJof_9TRqgX|Bv z)qnex+LHg9+68mp5HWKfA_!l7$>2I*IOQYShVG#h%#bvDg$3k?im44!_mo8EWEY^) z3-jmQ|Bd18R=Dkj9yBbPgJz!AM|e0b!2@UXCHqN?R)UqncQt$tiimJXOfoGG z{35z=lMqYvAkfeltcO=NA_yw@hUYFVXLb{$U}J)#mMS6m{yErw@*fquyNqhF zGGF#xA&GFC&@UL-@Si`5=xyC)b`4Y zEn%2V2LOZ-^@ogzLp3PzbO5{YRtzJr9Hm|{gSLF^6Q>hoPp?sD}W|Wz}sZ8hKlsI``DzLsH-?#E~ zu{uK}#Hy*n+LYmM4!!C?cx9#3owDH1RrSt8XD&IIGuht+i*9Y5C5erJHQL};G{7AD=xrZ3(6ohQuGx>Q&e8(Mw^)yI z)Ji~o9l}kdeUp-E;aFA4=oz|$HPY%%Bf%=CCbu*e0qXm4czt5A&ax4}HG)p$5F7p4 zLE6Gu>4)2B&D)-6EwGHh-PGuj9dLw6)=~?DB8Fqw1kHGF#kj*>eYT?6LcnVZj-r(Fz^%)JZOI4S46>=3aCg5!Jud zP3CKh^tPLzP`_dze?63E9s+o7URn#F(J`voVJ8~-@il@s6n#B&i}ml5a+?f!A<$qO zSEC2sO8yhkSkL`Pu}7JZN=;piSDVD$P+pGr>qOtT7{=UZKoy_HkKf40=AJJJeLN3S zq>2}p`fCQUoQ$ism#^T{q?%aZol5N4O2_f`#p-+=SE14V!`Q3pk$5+Q#TVZjzv}A`64E<-o}kqEBeX_i0hH4 z93=QACcxH0P52W}7FE1KOsO+fvQm^;m(^o{ln+f@?e3G@RGA zc`Jvl&n3G4NNBK$>90wc-VNKqjhLUeFtbUz3=V%|9B{UgbblRoEo|506OhRoaTgoW z-51EI==U!W_tus0IUiv%5#-z-_O}@cNMa9?8x4+CmP#q==^IlCgCN`qgx!|IFMc_E!-%b);M6h zKNcq^Jrp>cz$X2#QaZm-#CULo7Fy&iQl_kt78{M5gHqaHVD!#U2LD_pAx^jgP15&O z@-LcD4WBGe`S{mP^2*N9?ETneG1+-Xv4||*$Vr*Pbs4NA+3vg28f}?kM%jjQ+5V_} zez}pfg|QYQ^lC=A5w?PlRf`_nc-~~+NT-|vk6a+pM91L75O(zNpxkWXM0-$6@!e=2 zk^Catr>XtXP&A$@xtJMU`4O9`DeRHu#{SL)+12x@t6KSGK6yyGoctD}0ssmyWfK!4 zCcn$3aAZ^W1_9T)iZ$by zW0k^pcY_;A^4BJcNQ~2&3&Z1$a^Ul6{3wN!EWm4|BCe_;gl{H}Y^oMpDgBqE*Q8`- zg(6&+0KA?og7;9fZWFL@x+_ZwBUtYBl`r#HuG2;s`E6zjRu84K34|n{J>gNLV{P3z@F!sREB&PpQoW5h+v$TvsU307hyM* zNnf4j5g&tEoE0#c9|g`E2F*u^DGRF&@uJJ|^Q$V!EsX8|qBmVoa$1l~o|h_6k#6FU zDFSdrEyz_3$|oy}zAdnIDKo;WDmM)(@vG6uFXosq?fz;PcV6VvRg=$B(+(EZIhdp~ z<-3|()L2^-98xnpP*&+uGy1O1h^-DFQZvO7H6xZa_g-R*S|ScsH7HWo<6k(tkVn^Wl3#w#l=1A+@M=QGF|AoUSNDikA{3wP zT+{HmpC7ziz{k-H&dx{Cn{^~EcbMu7&en{v(1e6~0~My!VT*v_O~A;-S+wl=Ix_a~ z1I@%Dq}Vs0&;5v{e1#wXNY$qLpwnytqwbpLdNBIBjO|+YkS?5>Y_gt~CA-eR{rdExmS}w*_EMiTi58&T)Bi28l(mU*8 zcWIh9h~6}j-L$UKKZEBuA7Vb<*i=5#4?EDgLg%<qxn zSk(A51*~{md10>yduzv1uDk^sXl`ibEN((I8$3*HUh*6AXX?*0ZdRCXpUE3u>KP&n z{6zFIgzYvIJ~LR<)BA*Lh$69dhyGjRc6$q6|I4Q>OzPi1hgNZ7Sh0uI_o85dznPmdz+ee8q5day> zo0UuAs(q}il=P>6nW^QP?yFQ!sY<9n!UGF!O*L?bHuZEN$aIi^O3vc@?Yzex^FnE+-a8_ED})0o4CEVJFIdGio68y6GXVyyx_Q}uVV z8?+}8qz?A>9{A!>ic-zCrlM5UWX@i9LsDjJ9sXZdFtPCLskm}>I>CR ziw^6Gi#JLH_Oh77OLDBfR-fi{SyfWkl`4$Vf=(}AtZ;D8IF?Q$n5+sotYJjX8kww` zAFNuIc3PKMT4KzrtIyustrM24;WDk09?lSV&w6psVaRRLIc(lVY%AnSBb=*<;A1W3#zz3~034 z9?T*9yktY0a}gwU`QBUvX|_7t1i^%M!W!6>9bUrsOe6T7P2v7&?7ct|Oh6`G7aUOC z9lk;nj76_G4@J2C43U3T0L7Bntrmm6Fn3~_U*q~ZKolHsn6W+Y44^-_-XTw3x@;qg`x(Ha%QxtZHZ zne!fL)k#Xj8CJyk#l`vUw{ugPjOzmCF4G1h+trg=QEHBfwYh6Ce-PK}n#eZKNMhtb()?zE!EL)P z$PdpPQeWs4I^ybaq{iP1?_+--!RZ#(;}(@0=)Lun4SJe{ehN!f=5l*v<#czK47!JU zjx!IuzY0>*gf}5`&)#y+xpdEkxQ8h@rrHxYvSg}pxpIfOr*9o%>V3-aePIvtD9iO= zEA^=8@u-~ksNxK)I(n&oe5pYM*OGeHGkZ4Rc{U1qHW`2$?LC`)JzHZv+g!nIHJ%+M z;EoY+=dx$_7P$Kn+=JoON9xsI@>0#|HK_4Yl>1y9`Z9>ou?OI%NLwZ1_5F@4f8%))DHxlIuMu=(URXwpQc40eOY2 zUwUtCd2eI*>}+|hy1pzbdN0->FB!aV+4~&%`W(ml{AcT3^A2qBIiL1fTlN9+67&pug8s+F= zULQNk7bctIt8as0STxF&7T4s%Q3RZS&yTMuM&rmO6BsRTD94lNHR^4~YRM*fyv^ob zRTAUmvv^!@&QB6CXYxdF(5YT-EdYg_*5gsnSUW1IzlxNrcoylGDzsYuUYx3Z9D*8U zOHf%ipC}heEt7n=y0fKhwOItobsT|KIz9S6?%E&iw|WDhF_>)9u670^CLo|_%T$nV z^WP2SnDblK)yZg13Xs=QzE;#fe(Rv;KX+0KMe>rW7apu9z^Z?9KIopNeJjnTw*q?c z&i1`op?HH?3-$ZsiOCct6RJP;cjvw;mgsN1+^+%~>@k?KIvzl~eX$sd?|d&ehx0WW zm+$Aq2T3%e`9aOMu&w^ii&d1U~IQmV^`Y+~DrE(oBouvBQjCIownQ z5!xPfd1)x+bS0s7t0zu*1Q~Q?`RX3!WpmfuN<}&O8T6Ho96Wm;2dOW|g>Bsg3^iRZ z^k>zTF%cHE2DqM#brtUsHuaNCXN--#DbN2oG5vZ`*}Ce%P~C0>{@%Ky&H!rNC$I)J zew>(Ar=I7Wf!eRNQ7=30RvDP9VmR8q_iUJXGWR|q@Uis4qk7f$Av1Kc44_lIvJ8&C zWRkXg**mTp_-ftBIzsIE$~yWjlCQpd^+Bhu5R%aOW8!ja`PkKUF^$x6<+rXQn#EO zD@LwJ&C8Y*T^wt+h{PO=YMI{69TpwloSW`vRh;XNVB4k*|I4ZB?PFX4uEtOb1-D)6 zNBO$-`1z`*YAnU3#I;l+)jVfa9o;WyITIw{bLAr& z-jfp8?gl{F{5$VeAF5#IvqMsr|V(E6T<(r z9x5mRnmPN_wP1NbD*(RefC#)^Pbj{>-a|Hd-=0%rSKgl&F6{&l?MeipuxkAfh_<0I z@!RjIlzd))WV19=6q0@izB|6W8%Ejy7<5LQt&LRV`913qmUj@?X z=G~OL3gZRDh0r(tMs=X=Cj!+5#U<)P{MwWWV7M%iRKigVvQV75J~4=5a;txFYQtsV$8E2|6Su(oTSq|0P3Sj7M8!Z< z_Fug**h$KWODbnaCTc*g>HA-_!AQ~E@qsodX;~@%l+aQ$(bD~gYtVggjiP<}jz*^P zb7oph7It9{K1p6NIljWR50jx(QKX_}tg$$)Wniu~^r~xQqt{qvWM*eFTx)9gzv{xu z-qqUP)2{8zX|>PQH_FW?^g~+wkFofm75^7igeLy`A4~B8DgH-MeBg->Iq`qN#E1O) zkCWJjeDJRH*Vhju@vpGHqcWub0@8nXGj0$$1A%-{hW`i#aL1BW=Kp$yozoAjuyxnC zeRT676%Gzh4^Hn6{r>9`hICI=GCyd-xqRw}OSl+T`o9+8YDnZJk}M9o>EX1A{}uBco-#W0O;WDj-7>#3`|!^+#or+^pmne2JIRSVr}PaqPQip}IIqgNTdh3d|n zkz7zko{_1t^+P+@VF=c%AjwitB;IYpS2igZPUw6U^^rlG`z@BVX`;{$EY+S&4HMZ7 zLT;q}RglA`e4floJ0~V8{Uc~!{9&;F}36RJjNQBH7tT*zZhoO8@gXV6)mI#NXLm|eyZcClIZIxPQ1G}CLe+dlbv zbm;|N2ZNym2H+&1V*&_WkTNt3sqeqzuW_P(Vw2a~<>s38M>6}5b}&N3(Z)T+%Kr(D z{?HD2&L7$V*(EeTaHZ?N+QDKkaBk3TFNW{oLpzK?|5rO`KpBi`1|z zzY$bTm?q(rpjY?f{||RKJt;{DK{+ig(8pi@%%JK{f$+f{=*wz{|3^Diq=js!)Bkq# z&Mz(J=su;d9fYwAkXIqTv8emd4vc;ic1IgROSDB=LDOax7tLFZ9xKClnZF8e}ALKd3;l ztOG~|1KD#@KPoeJAUfF=*$o<7lFiNk;SO>)6D%W)x07tkHVqS8M{*4VkL0V@-@l{% zh3z5Y6@ey!M@qPZLd5q2+F$tR`%_ZBcFv-HTV|~Vo_4nyv(fm zeG-K;l?()p>(>hn6U@@v2ZgP3u0*9jY#2rq+`8i;LTFfZyBfv$U+u7YkBW?H({@0! zK6zjB#snoY7foqsUbxNnLPKu%S-+J`jTH1Ek!--k+ZF)a24!KdZy>?IZtu8$K{xNLZK{vRug+$x4)qAAMM~s{KlAWJw1w^MUfx`fzOq_0h8Hc+-j5t zFxK$hM#LFDKg613zr8&j)j-hhM*4jzU%xCuk0T-@+D0BI7zrjHrM<1&9p09}^sZym8659UY2k6sd~_O;Ya{dWb3F9LIz3v|l8F z5m6ggVB!C^5Ypetj|s($ot+9|MdaINja7=v`-ajBMb!Hlf_Z|vm;Je|OEdusJ5raB zT-^=%(-TM*(z}PGrxE5xQgY?s-xpNtU#)#vRW&{tu!EEiDJsA_Dx8DrLf~Kjl})6jfTW`U4juYFwl! zv!5Ep<|Rh2oBpu&d(_6yZ)RX4griq~Q(hBZPRS24U9b3?I?-H5pn<6~#9+2kq~&B+ zZ-i-RAYJRcctmboI)+~3HX^%ulkwPjEMMa>Z@uu{9j`qS>k{P#9=V;B3==NQ$fdyp zsIJ9fOYqc-q);1xH@S_#%VllkoCdjui&}dMu_-`yT>bWR*iq`@qNfah z3QOx12~2+)q*bVkP$7`QiUh*G2G!MW!Y!}aKH_Y8m^P~Ob&!CcMua}q$A!w7IJG^E zN|~vjpJU}v@;;9-ulivIK^@TRJZmX41z=WB9xy4EwW91Mn`56I{K$O%db(Qg!sU6$ z(UFde!Yg9r0#4^#dj_mLDb|lh9SMNbseC^*<{1c%ZWB8 zmp_rwd6`QCG!}DubAiTw(Aqz7gHyRi8Cz| z&$aECyOsfYyRXRp<4PSPtrJsrhB)msD(a4mOB*1Mz4Xloz$5<335wSlcuV6M`ZM1e zjxX%%w$Rrn_u^kRLA+j)uf>uBUorhcb=IjcT_wJ%PF=@+9DskA-;exA{F%I}(cRbE$wkTK2b- zK_Zxil5YDLrMJ_!39h9UftqVz)@M@AAzT-rtJ3r2uo`z{Qufqff_r57UkJ0#C?)VIl z$K~Mi_*#51un#(rRD2n%`FB?=$bW(u@3CNzb7e^SM$J|eA!9fA5R%7#$odZqf9)=8 zTMI{^nhWkTfO(8{6TQ^xK@cZ1z#6xIzfKhd9|iK`m9)H*m*#pZTWsOZ9(5mEUVHO} zxI^ysT}#Z*1{Xf~Fx)_Nbhpm|nSL-pCG!3oeLnseUM} zerQ0yPfvcI@%^#V{OpzxVBFB&Ly-~OD82#(iQRq?wyOSN@qA+4T<-IJ4pHRNnxYMA2RtFQ4Z;oBy9+idGHUe?-sz2YoTwIdBFrn zAx^E<&TgUcGbRZxXfYw7K2QJ49p;6@Lfpc_(!wHI!=iv;Ie$c_p~7Rh!jm+^$yrTP z(!%p+d{~%PEu=vZX;2I#MO3;>Iz+k+ zy1To_7!9MlMt66Qjg;DG5E!-RLVy2yj_0|L`|aNC#kFJC`8mIzvnJ$oSIFSHLFq}z z-)o0ShtTQi;5`rXnd#8EfY1yMmiZUhuwQCn?q69)Os>uyFh^D#-~Bcd3^d}Y+SG{D z)d)1H!@Zt|A99eKOp{=t;Un2bi_{DyDt-)}5e4iKq%#pPqu{)#FmjCX_KQfQS|pWv zDCG=cM*?u}z;X){$s!bmcup!Q9hJXsnx<#QFck&$i=to;dBhpzcJJ9tbLc!})Du%9 zy4q-QO!TT+M4m^qgsfGQ8r8X4401YBPS#eSheUEFCWz4EGmFvt+5m-_a8;qecj^I} zoPO%EA?YWv2Bv<77$a)OxY&fa5X!hOdoIGcao5;_c-|X-Hw_@bxu;`t=bK}EYiAT6 zO@fzDf={BEn~>SwJ4&(9cz<(86<1CQ}BKsZEtBmzR;) zoIFpH^`01_Hl6tyICmfpLnmfw!L!~<-T+6$%y{AJz#liLXTN377BTi#56IrE$~s%i zPRP#wg75xaIOmI5CdNKTR6paV+^yVKY*nhME~ifzm*`$DVAgLaRXg zF!*~Oja+MDr?0iF%YnIe(?O%(b0Mf7GQ)`$f>}@}vkbXN+n(Hfr=P7VdD&cK*H80w z{O&W9B~;Pcmc#PpRr98=;UB-ax_0PvD(IFgxPi(K@naJ0El8epY&b1QCN7kDoEvFY z2!|E2i*nk!J^|H31iV&?J-hD@3kHY;^li#3X z4&&r1m3+o`h3CYqeYw0iA|=<#ihr*|2+dj2or1}n!8hwn+|A59&*sPacH?={O@Og&YDEA?tBb!IbE>I!u0 zOumpff91}2=3M2Z)C4tKH73i$7O+h}7T^ zW#xkMe1c^zLD(9HPMSG6(rbM+pZ3Y4Z7QNj3?uTGxLZr&lS+mhgXCswwa{dd+^{J) z9oVC~LIw8R1a`x`))@uU#;@}!DKAUneeU$<+yR}@kYrAGR@YjWWGYfG!dcUqpBtQ1 zxS3dQOjSR~t(QpG;3-x2#H)ThsUh5~0WJc=$7w*)HMZ8KFCLaI$=jqlHCo{}+UGZ_ zt~XA}n@*E79cnfmIRn=YQ4BvaF~Q$1&YB)@-nr&t_)(-;C93X*e)Hjn`WPY>;!Pes zjQ~80M2Z6Okat(t4z%?xTAj^@PnziITZisevxLYHBJRC??`ELU%0pToZXUu*-$r2H z>d1|4`=!_Rf;5C5+-4$^CTgMTed_y?^uxJeyMeE}6yp8&g!VTsUJ5Sl$`+p$=sG@H zs3xojeX3`Mb(g9uyi-MV)DVWV(EscE^F&Xv-(uM=1M zzVDqOUWIsx)4G@tlc(BEkH~mD=qE%P$i-bJG+ZB0)=gx7_R(RO9J3kMz$EB1ux!5= zH!dW8e=px$k=#ssz#4h8QFMx=1#A~ON!l>DZZh#qtlN={ajehNQ+wLab$S+soeF4} zmi-2uZEey!&vERTw%6_=`Oy#BoX(`2ib2i{zMtAzpGg;ke@U1)qaV!Ny7?g)Zr%qk zx`3BxC#gfHOT|c)5FI~zSorJVk1fYNMkYGrW-7%HiLwZ8OGI}vLiS!?FB0+63qHtz z9Az*c7DG8`_<27s8Im{5Dp>-w}7X?yu549w8KayIvV z03j(k`~1!PE?qsRqFhbET&%}DTTp64-?$1*8MI*jT2TdY;{y5R0%egY&S0B}lhqt@ zmc4>jFyuM){EQylQhbVk4$2X5=cU?sGH;+%8tf$x zTa&~Cx#SU9@ilmW-G02wtE2)atM%Nv)d=#9ZwYO4^s58IxQ*SopvDd1<_*Z@MlvHR zl@FDngvzo)u-MpWMRhIa|dzZq4?hxTDcms_E$!_Y7YI+u?SIAaJL=4cv3x9M!Q zTWxlQZT5tr8jCjjE;rNXHV4Hwi^aFH7}3q;{&>jYR6Xq0@a5K&4tj=fE6Iwem2t~q z7rmsk-M@|YlR%eRq0mKyTVY!}a~s9tJ4b`tp*W%i-d*>Dd8_+E4L7C2 zP2Q!De&8qige82go7iyeP<4k$J%vQ~<=&}Mly*}{D&)W<<;c*w15UQ)u+=$Lvgp0@y{IVHJv%C8nMNhJcW@>YnkvI*S_mQATm%y?ed}I$zM+h|wh)x4uIK zxqzEpG@204T4R=8UjEX(yt;NsxkSCZBpiuk)>&t2xfsyBh*-E-XJDqXVm)f2IHMr^ z@4(heQZh6$Dmo@ML^>`!A`Tp%?2zR9)&~Si$$q%0|z+nGvL{o|+6PLXDw`|GE1PA1k6aDeJH2VD7S9O7n^eD@kH z|M+Pr0%Ddf+3SucICIn|HWqL&epWow2hPH^E8hQ00|V;`dUNl$0jmVHou``zJ)(*>`QmIn{pG_hywI}?!Z zb&VG{y%+^D7hkjZP6q^1PkQMG5$oWvcu9mNOa{Gc;9w2*bM?PUY-<=o!PjyJEyW?! z4?^BL*?oxMwfAv-Z&%~aINsGQw zkbI-8Ajz)uN%zWLrC|hktJHOj0b~MLs{Rd208#?T#q0t?08(-#qzVf94=D)<{SPdO zi2pY)35#Ob@dI6HO)C5P3p1!+W=~QqY7x`a%ULx>m%xoy^NkHmUnrg ziQf(T;vam0#RxrlsCb{p8dcFV_H_s(AQDN!zzxDxd-Up47{ zM{gy1vRK^PSIq1qJrBPvuMgGxAX_wmnODAQ0orIA-{@*&O$6A0+>RyaO zt$+@olR^*w(Mg5pdjdMCij6Vohx|eM=?T;yos?M2b6NUI%X0DTGxlwSoI5U)8*qKK z)E&)zjI68u0qKgD=bw9idVp+%o=p!n)E)0Ev;{LMyUAb<*2nU7hZ?VJQp}kC3sys2Xg~xS#Dv8tuT$1PAsenz2W6|f%XOl(mdslpg`uqB#KeHc) zzCT$Ez*kuR*rd{@uWV8>>3~hjgf)PQzUDe1r{1wF3Ei7!k6^(;6NAWq@s)q;qfs+`a+`^@d{8;88qh?PZuS$l(7BO^dn^TxkCMM=6p4OZBkXvMSpEl zJCkUu(m|tqemp~$M^*%eDiPMchCC`#*Kx0@NYLCM6xk&yh@&#_YyYezg~dDB&i@w5 z>>}UV#q7_s-~Ax|KYV4gtcUqQ&0eQSD|oM&FxA=RJHs)p=PWtKsY6t%z=NX?{VOTzf-U~V?x2)JV1GCEB+nF4fr9V z)l9{6%E5oVbkgN`>v-NHy4h|nlelkx;U=TX^C45gIUAf;{3c$rIF|vqQ%$3a$4DQ0 zrEd$VS2ihT*6rFX>P@lVUHZ3O9xaE8SP2s*nQgSS51Gw9UCTL!Jl$v};1`|vdZq)# zJB;Jr^=W0f=DcZo7IHEiLvf&qz7>{M*HNztJw>H@>sey=I-kt&p0wo@i!Wryr>x_z z)rB~Z4!*X=wn_*lw16fj+{kQ!5UZrDL`>f{T#`X^eiFXc$ljssNg2X?);%R5>RN2r z=dE%8v42^yV*Tn2J+DJ=TS0R-!b;$E>J3@HTH^N`p4=g6q}rVl_lSFKKE2jz(V2R+ zE>`sFdcMxe3r{-M`-?t5gXt-aIm&3^l(GsT>35V@+u7$faPJw+1?#>6Q+LU9%AK#` z8!Ig1lcZjI^qj*H-Iu|r{g6G&2h>(_Dt4h=Y8zIqp{U z+?5lE<}AzPQ4Nq)gXG3?p?@*G+<5gW?7L4DT_7iGh4+@Pgt4f(!I=%wD{hq+RM)ugA5Y#txC5qa zCTe--$AG4N%^NcuY6qo(EYaD@`t6BMa0`@Px>>(BqH+_K;t&OA7Gv&S)9lS zS^v{&Rs3giyRUV-t7Klr<9v@5N#Hax%X@|Y$TLS88+-RbVDG1BnrHb+l8h77P(||R z+u-&XGsE@-A$+~N1tq5@s%!8vuU1%S<+Ts zQGp5D-H_1ciKY$iQs=#va)euO>+aL(Zfb%^+8c19gotSzxyg^;T?@?K8cmJ)aTZe; zYAbn8tFB*!c;>e%8qD~MG_!OXU2(Rfi#2sg(d zm*8K_8Vt?IitVarT%6>e@=+cFnML~e5*j~gX2*_T#|^uo)-LW`qrbUwb=zB6QckvPPm&0pgWth1A)EGQF`vhuI&Pt~v%!J|sPrDJd=~letOTuw`9$P=(#9M& z;&K1U9Ay%~SB~CWNrxo7>P&6p3@Z&WK2M`ANQkIsco1URzsz`+P%h|}^hv9JnTZb5 zeV<$)m?&hCZn~yhCaf&RKi`1VyZUCziY^(f@9mfprcV#wJk}Ev$ulLPVWLzHn(7Dm z3TD72tQ@?iuqF)f6^Frc$Z~!0AC?cT$lWZuk2WSMeU$#UlQn~tMfL+|oipII;OI%aMZ;%J zg0tyvrK+-cfUg*d%np3*-1`!8v1z7x2A>|Rs;UlM;~E2ngxLv@)hKR%PdY=aD+%WL zUs&3hOOK+$s_WMjcbsN52QsXVDF-Z;ozKqZuTj)A+cRwGQ74V|ykn2LyKWJo)^&kzpLslwsNws*Lhx2r+I5{>a#mL54auOZgko5C>BN# zD4$?kxiyx59{UW7%^B4%Ywsu;JI<4w95-t=uKEqtuL?F9v$4-{EKUk6&upI5AGq#B zrPOb8xnm~Vzy~Ga4VzP<$3xya^-GKwAbBRcZfTu?ym>~nwmW8q4ttVV+_2SGbK+K) zcr1M^rlibtUQ3p8;wjyDR9$SlV&Bk_-XwDPmd`adr}0#=PW)(U@ZzWryYy05{H8C> zl{yZGhS&OHyDb?Z5H_t%})OZM(71h(d#?vwXyvGK0BfK4jEYR}k1 zWyFQ(g&Rr08_b$V>yrCT4%@qcO)9|>@5Ht8p%ZV3=kS!Lo4p$#nxcH+WoGa7A_42& z7w3gPWx{LXethryBN<1)G{s`#osi=#SL0J}=Ltxteor~P;_zWIaU*---TvK2rrS++l+Aj~V zNljaduB-D926s(|40ikUKtl{qLI9i8!+^lT1kYgOP{efTj(?~>M`-ODHWc71<@ZAM zsec+c_^(cfZJ*fjQid(9d-tD&9XW)H_=kmzeB)OMKRF4%Mr3m;qhCNBf$tb`^gJTC zC7f_3g51&SOG23KaS(-iB$cD(-V5CG7vZ6Pc%N19m}#QkvPV4-!h5J5#hw^dUK7QU z8^t#h^#~IsAQb(SCi*#1^aIl$9J$dVoIivx(PA_)f}AmLh+@Rme@OL2%c=waI%DKE zVpMAF6oq2n$;L{n$9_(XRm+W4t&P>f#A*}8>2Stbr3ryD)j`>gAV4RTR|_hb0Tp3DB{WH8LP-_sNmW7# z)c{|qP5KfMxu5X0k1(;dHmTh-vAD-BQ5~dLg4c%u4FrOQ)WJhE$)mE#6ElgExk)pe zpemuH*&Z;G2vUSeUX+Ejn?jZXA*i0@-bBdM3>Zz5GES7z7Z^8I6;>++G(&oVsYINiOq=yyIO`*A=7mX$N7+8lta{M5*?%S#mq%2KBVe}U(?o#vR(LOr;kKElv}Tq7=6b|2=u z2|j*MP)=ALG~6jY+6fu~%Z`=Hjib$t4@ymh=O*Rlf`#*5!l5a0c~IKCbT~AZHm|@5 znga->;JKxznPqu-g--c3dHIkSj{VHqAi}|D&E#8 zItnUG1?3$CK@Wus=3&LZiHp~Ji?Q&0e3ASpjS{p|3C5|2nosE#q`9 zcX?jU)mOIBn`hHm&L&^}=&ZaUs6sNo{Bd2G5Q*h&67bl1X|P;nj8mlCYz20`eC?#b z8Rbn&SM_k4OUn$POt?68d4Z-v3NL(TOABn@z9mq?NNFw+b{r@Edx*mQ8sU|qv{oumJH z!@PX0dp>MXrP1BFaYM7o*FKB3I_ylQAs*rc#+&t2M{o!@xq(#nZwyIbAJqae3q)FPtQF6Gi*h;EbPiC{+D>q}^s0d!Ip zt*y1~pA|e5H`@zNa6TY9bhH|ATsri@R;_gHTk_$$;7&98<}ae1Rti>z7M-s*8_l)4 z%n+T{;I8Sa)@OP5I?TH~z@488x_k;OgJoNsHT^v6yWfd|eb2k86FVIDx$U6apyf0q!5s3Z*ON8FSuKeq&JVW(?OxP2yC9MPi__#564 zuwD1)=71)mUJyBc54KbcyO{D&98aR^k}dR9u$*Ef!w#$P zPIw}x!!D*H7-sOqraQH!U+HlOr3dWAQv;K3~+13neWJimc4emZxGcrn||fOu4BN}W9NI%l?yAt8hp(T_w7A`w-V zGx5o@-3{Hsu9HK_NO%J><%+lzPFNz>`ezW@bE~d%mRrbq?fP7XIl~6TI>Y?F*t|sH z+=4k`+p?#?)wD>g`tV}@8smbEA|mU8&{$y%b1~<{yFfa(KrTLW)G*fwULaPQ11?hl zo0K=*;;qK7YAdsg9P5v~EirI>%nREx*zEMbNNR9ooCKRrMp$|FzpdlF_gC;wvQ#V|Y3Y$}ZE7E`Lct zOfMBz^cYvIwoFwUsWusKH6Z@tm&=TSgSKa@HjHcE#n*o7tVsq9jUblf2Y+em48o8r zGxY19A;09@`jiG&JOG zhrIJ$W1EN4{Qd9dH$;XG-dg`ww%${x*o-RzUP*o{h;4nrqCQ|>rp+A~g*Ql~9K|#q zYLGTsV}Gmh9|t%7*3vz)*PU|WKaxQn4__Wv(_@c4`PW_Mj~93jhV2hX=XV3GQD2ph zWD&o@ngZOEP*E>2V5MW*og;n-W|;tUcW2cvo@IQR(==AlbUr;_3V*pO zq;%xWSCznj@t|vz%X(=B;49csq&236|MH{Sq>T0D24IuY9g*2S|Kxsg#E6|HBh>xh zz&7F!U-=W*>VT6V$th{+2ANrZ1KX^p{Ev%E1j{R4REgDG1-5SirqWW~R#yC_tGnka zu*Cw2?a1hu{*adDbODgqW~yZTC$UALgOJ-hnY^Wy?QN~cFEJ;_hZnr#e-hhac%{Ye zEvvK6qJR7USy+6jKTRY|4b3%%pGq9 z2pMSK8;EIiegypgA8DTR@Yuq90?YsU|DUl}X65UPhX&o1FEbb`H+g3k2*1lZQTT_i zOqpqhh_;0x&q^&uD?D&jp9Jh$wN~5y_5ZWC5gnjbzDhVimoG^=1-zjD^3tc2WEh|7MUv8dJM;p(^Q zJGc@4?}xFuCXT5!)prsdP@Mle001=NQ~kJ5SBWhu7n*&#k>WuswC;yZ%t92%J?=vN zl^|%t8UE5ZB;M${Yh-;)KjN# z_1>@Ev|BH%{pq)YS&lu`P43-Zz?nsNb~Fg{(pu0 zjWb_fn1IRc3sO7&2DZgsdnLpN`yd;}>iYLRe+u#YW{#GaNkgu zuSlnfUm5WKr=AH{A^koun6H9TrtF*S{kBihCAvHao4AaD$4_%}*vB+VkGIcuv_I*b zt>k>ju-_)I8W7p-7u>1u$)IQwu#n}(o*YaYQwT5m#=AY=b5I@HnuW((i~nksPwCrQ z3a8k>>~>MupU$IriKnEexW*P9tkjcZ>0irkKp>%Kx7@z%4}Ym8PNPX!iBAJnwc!gtl* z_o?B|u)m%e-u06p)h{veZy^OKdIUsw*hd_v`PC~2sD!ZOYphF-ao)65FhCH+vv=@0 zl`4EJ(7&~pQ^ONv60EC`K}&N-3j9S$$>=F1?UYQHuoSP8$glfPpp;z?Pj~(Ay#GW& zAlofDnr9iHkjZkdr&~&RKQbc3fW_LkOH`OL*cE|b(!9s{>S!Z6H71ioT2@Y4sWjB8 z{=vg1rjV{0bRZy@;4qezpFbyx)vrKa=zrt*j3N)!SkGiPm+jZ@#8a+$nvVa;v|Ew* zLtJM__R|f?3OS7^C+q-%lsV~1zp2wf5>@WQo3iop)VCfbeT6@?fe{Vb!J-+K=-Gun z&k(r%17u2zscn;!+9g{mIT8KUIB^nUQ| z{h2LYF@M)O=);LmMUIRj3Zy_hjPDg5GSV!0ONV-#mFqf*cfTo5VBUBUd_PAbEBCI5 zk53-RRz#*bkBE#Il?z zV?~Cqi9n{@#2C4uEuMvirgooZ@Z5gp=vd;bT{HL+?QuTe@{s&5WRY-?j~SlbW?&xOPH8czng@$fXX z7blM&xD6D05EL+B{HCZ5FZexh6|NfbiB*NBWOu+kg~BJTc0M*fU2=AV6?SWnEMB$@{V6ONC{|oZ-$&GJ&uk=OOu+Th;yw zrQz84dP(NsPpzE?Y>p3F-#*mDbSX7{`=T2n!Wm7_quIY5+eP2R^U|^V&0I!&4*e^V zXw1O=lk&J~@TfqMkf^2I6Y#N?xDZKgcD?~y!dmy5WZTft557&@y86{ux8cJPgN*6E zy@nzrpx#em71@b`8$wO*x*_at%9GlpT`O8hTMBZgc| zPv&eZW*K%s6b<%5^Nt<-kk$CE`gK)ZyEY~_6q9l-a>DIiSNY`;n{QpNvi5NW)|>IT zd0uowUe^|0-Eq{SEdD|Z>(t(Lx%Q&^TsX4$9Hr`y8L+=RP!v6z*TkN6(Yvh$@3`(J zz2sin5ytenUmndGpl5O_)|v+0j%Qzjcf+wIoVt$7Oev?w_dL8K+)vr9vU4m$rW~$u zcpTre#WV3BptdA}dXRK`tR8D?3F@A!I@Y}ZkN-dWmM)Eq%crUDTx$I6Yv0?Gn z0)+g$CNwx~&W(cJ!Y}xqLCtS+c=l9zOTOS0TlYo_`pC!#y(Ki4PViA8qiq`tpHDonn%JC7Mjz(22kfZL3?pRZy_~53lpp#dw`!@yqDz*f4=?i zy4_YI?5;m+{P{|KX8pZWy8OKy=zwZGqT0_pA;A7!K+to)ppyWHJ-=mk{|L3fQ(M21 zc!x)izQmXWLZGxEG8)MzftgUUG>#z00H>^zKs65g+Bo&0Y(LMMpo#$EoauKjRD)sD zTv3GnpchsFHNlk*!Q=!!P8=a#G9h#hPM`flAkdIuLFdc05N*QH2EpKQnV>>IxJwXl zAs9NN<~#es(f=fLfjUg-Mc6OGkkx>&ER)c=Y4>etXam&qAU^njFmTr)94{vbqvm&} z7B)Za`5+)12y6#_dDsW|=Q?oXnR+&_`H~1pop*<{e8jp_CPuEMM%)&%3FG)lOA|%; z%7a13fQcxIB{2#m5%pfpsl+BqF~^BZC^|C24HzwWL=*kAHu{%dGyzrUW0`jpJ<*`G zXu(83p+qME*%$>=LMg|XkAgwM&tepX9F!9U?j1X>P2c*c9_wTu%SYwB`67aPBi3k! zTrXDv2^=-3#TjGbloI32Y0Td{+S)kAM=-~?>>4ww$J+(Qdj!T=sfE|y3#Y2pkfccn z!q|DMM}6zIv#L$d$&LRZ6z5+XOH&#X#TgZo>&jOXLPe99)Dx4O7^tuw&mjZ~RtG@> zW1yJ$Jfe8|nJCxz7`fcU(hawA*(8pHpoE@S?L=%+L}gM~qF>xhcoPx0r54;j10KYH z!TMeunBWS%BrIV>!Zc{yG+!wVNW%8`qh!MNg;GVRQ<3oyLSh?Yu23>ze+t@|n{s}) zX+!Rs`Q8f(rQr&j?@3ZI1rxy2c&gKuWz!ioQUL8gPEa}!d~%!lTyCTboTQC$X7I{o z9LgrVl#Lh4%aAci-zUtJ<;Xmh&3tW=DIJt449)EC&Xn!VxKA65adcAQ@=-Dik+aKU zGlQ`9X6?mgX%J^W;mH0fm(698UH=^GX<}xMr;+poo{i1UF6+#`6AAYHk+kDfuu>zSy(;#~LB#TwkGi`DESs z4a70j#7V7kG3{LLwpFPupaNKJ0c15lf;fM;H+rKws7flaso&hi7IUL zb@dC%0G0w)PhA)CTq`vSC*eh4Op#4%oGmP?Tdp`dsA$6pq~U14*;{Qz;(79Q zMme(_`oSH9xby^2Sj&t5?* zh`K7C)KLWxRgx2D(9Px*!7@LK18m#p6ny$6n%6NJDi@5_G1R z7SO}6#Re|UMg@VSh-Pz(wou3NpGQ|q02cJ^k}eN`mi}p8r-Man46IA9P5>AN@B};3 zB((_hG?LGB1oCJHleYPXbVs=KB!GLg&&z)Hm*T+Nk--gvn%$wBU8(fFJkNXSf;-uR zdR^i=G)U`<>h)(x+8!%Zms^-b=DX>G`!da|dwxLl1f1XgwOewR!`HZY2!xfV9(( zaBPxi%={pmg01}A~+)uy$y)|P@I7a#2^`RL<~93i=1#pP9`I#8<6k;@ETicr3WtiXLoj=r`KXRS#ZkWS_B03mITEr%YoIBeV=i8C< zXJYe&Ve`b01ri{!1sd^#3pd3V@8~R2xh+t;0degj1!VDDae;~jK_)WYp|ZeiwZI5j zqAyzFnOmZ5TzbT~EO0r;ce(V$Z5gS({Gw=1xN-UE+_E_1FGdh>0>LN=5J*Fk`fe{Sj9;6^%R-BKKpAG*PQxsex!iW@`~0=exrsze-Jc8N+= zLIa}ynnrYd5xV{oUAv72>|;P9KG|xsn{Ol2iZ^SpDF?D{!?>9S*&Nl`8h6{8w%VF$ z+(Hy>AuqS)$p7R24;9}EYTO*)`x4)>y~u|~g>4@)?u(>~AqK3CKJqm;e-gPUWr14;~gPn!+|h7Qo;2jcSw5=@7$`46SA z2hu5ra=M3ah7J|6hcY{d@0ot{HywT)+Rba2apql6f4QJz?XSXgq{@F}VExX^39BX5D11`6RE`Qt3AG=|XJ(y0sUY_VFpZEx_M$ zW5=C)&fzCfO(!ugF|mOE-x`zHgaH?0lCc>3os<20dyzYs)bL*+x(7K;r)0&a*-S_I z3};Z?lQ;Zl#qMVXx~Jvg*fW*lvr6TID)%$;`IFdZ&%gt}9~2$eH=Q>Q9kk4!_wSqz z^Iv#UV5Yxaykfd&D!!PWKaGBQfl$5}V!E7BzFcy@TqwqD3|*wnU$R=Azfg|cp1)k> zKkqHRoK!yh-Gn`%AQa^HdgkNn?dKo#I3zGEI5a#eIv_SKGA03(7y(X-PfknCfMi`Y z;xn`J3JQyh{#0yBtEyl4iNP8g>zl6>CK7MEI(vFw_V*2T43D%o)z(Z*{pr{u5pxUk zi|N0XSC`f{*3qb~&FJybrv1aAqwe3BF~Me^J?st+jE>3Iq``t&BNc(+rlSdO zGyb*M>MpL0iZP!mlvaG#C-=`{tE*6)rCNzxgIlcmULmsbpT*YCHJTg5tKB2Te-~RV z#(5WNeh^5#LjfF40iS3_J*IrY=N(FU!7+*vfh8JeS}IZ+W( zdC;tAeE6?yFC2{x?Gz(g6f{boiz_QI%84uQKr0WGZ{G?>*@mV6)4bn0{L{RT^+>I|T7U)@d;5p{GXh;c?e}*Fx}^9|3qKLqHU}#B!C5u` z%s6WgX2)Q)NI=pF=CoV&WZx+lYXho-M)n=da%;IPr1ZNPQ(&qy;G zGlK^Bz~b!hiN7Pwb6D)c$JoW+M~lC)K))TBX9gPlE5Ic4-v)o@hb!aJIedF2>uQGi zUmMK-Zu6hD-^R}E{vW(Y|J~jPI{JeDzsTpm97zA_=>L}k>2F8B>CX?yl>_My^7%`A z#wR8L2NFPh00+{46Q9kk?Va7dKOOz!lmF@H|6eUW%ZC132W$02eeR6|7N7ecN3XWT zKl>rvZu*2p8G`kYlg|~%R7p+`V`<1beD^_KIiB``+{e66s_$})epmj!JpmB}*)_;L z*ZSo7RX3~h=&pr&)m!Y%hD=()F7;}MmB|jL_;d-i+B%H4(eLy> zkUX7nc=t;t_O9XN&%`4AI0-@d&hg_iGIe#u6rE7Dr{i5Ick@4z^;Yu2Gfd%pzI4^9 z(*@p5_+i7xX~oL1PULm=PX>|Efpl@?2@Zy^Y1XgCIIdw6NSDfCM14Z!HBbcXXxL9KSQZZ%;jXyyTFd%R%EoFUg_r(J(L_?K%7G z`TgLGyE2(pU$3txV9CT89krZ}Wx-Y{xOPSu0j+5O-P;=y6SGsHYN~DKBd>$f$aqT;8%SgE*wHaZtRjfYi>e?@=|O za&LZkw=lvO+p+IUvfI}E98?S)Vc|4{DTj&hc4Z65+B7E|aXl`%hE3ef$nBN40x=Ya z?AHc;2g6gJy75>x^(c)!$ZePmW^|wLwAgK>LDz4$aL;Q!Yfzod=jp#ez}qtv-4Ehu zaE!C8f*9O(t%|QQ3dJR_0S)}FQ#z|vgV`Bd@*p+mH3XBe&pFlFTn@n1JppL3>P1Ta zqM8Zzx=_0|i^6l``*;a4Ji>-NV1n6cc= zy5ovHUSM~Bj8V-G5ijm3-f3K!&l$j+9f>tzFfb-%la)?NH0ed?0dn)2OfwEGr33CA z=8GkJiIclKZU^QIb>%8w1TNF*faa`k0I_xGX_?mQ^DrQXG-6NwFb zb3J43(gB8(AP@~zFr3*Z@d8?JuWx;$zP(y((S*6*>2Qe!OIl@yt zN?vT&0&5rU;1H(v*})GWC;d6%0P%5pUupvOP@*Dg9`XVfp9vMAk|cqTbwbd|B%#nZ z>~bSPT!&ySg=S)hhat4oKccC~a%H6DMx)^0qs&j&=T25+MtQD?VHkc^bcea$yIQaG8bk zuT$GfUz5lTDB~(ucZrTN$;7?AO8FtZeX-E`S=*;IxhWWY!UtFFvkp-XYh(Rk1ZN~J zLxco@Q0A*58&__IUrtkXrxm56&O8QFoa%2^zpH;ia^v8&Cz;-_Ecv-Ec`t%ltsPi8 ziB>E$Q|*H*x=oZn`jMz1rfcWh2N-ycb8fKaFX5!7Y{li5f4xmDyfKQ)9dch}tk8;z zu6tq!e%x5VR%Gm)+r~bRB2`^Y(b5E+V`OmirSiUVf$}!TC3`s> z*$BBlp~q{OP%J-c#N3JO=!Oc$5o6^Lwz?zi+eMDPY|=E{_kfKLSe3r;oGf{WDI%Y} z%>FR?8FiMA4I~x7V8g2Aqs2Ta%W9WG7}63H&n>}O-I!iVc64ak}@sBtU}C5t4NFab#;{|8hp_(qcBcT0zZ7k zLMU^;j4;1#ouXy3ZD(C``o%TvD6j|3KJ^trD0CO{2v5ZKqX;Ox{xKakn)KIq0`K+- z4&(1G`i1$M2#m{q+SBg07_HA8f;?YW^H`U2ZEKULkWW^;ylOWotmhn!-D|H!?!Z07 zRfoYBmW}T$Wk*S0?8(ad!nD)wM{?$Vxd+ibY8Rykwkb))Kz1J4_cOSu8ygeYBp?#$ z$Az}n%Fg1Z7vbW^_=n^Ds>$|qYRku&`HkO5MjsDdRG+s~>h7YFUzWYAQe*_j_dgMK zT$QML@sfF2{x~V##izSF_5eTCqKd$zI9^&eC_Zkgc0MZeKZRR_m6};j!YrzSAIU%R z$|vci?stJ-ArCYm#pgHtzOdT9@UDM~&;OSL>3=Fdql9{Y3Lun};9&af11UZu6ne6J z@*t?=p!lo!%&i^3>l*Nf(f=p;>>5A?VD6L^^r`cC?;0qV8VF(Zm6rZVK2s6|^6}E2 zf8e=G4q|E!(r@;MNBFFz9rP$3WB^G%69`<&@M=5qFi`~ALKyvjC!hKKOyz9WooJyQ zZ5R_nw0hxIe^~0<2M0HM8V&*hg;8@q= zDD);QnLoTXI1K$41rO|-8LqI|o^TtP@M;1p`XN!wdd6dHN@?!Uy6y0qrHH~N8W2~+ zKtV)iPeg}nWahVU_Eg3%{H#54!hH;k1EG;~{8nf9cD4S&QH|lSTv7A)QTC1Yi>_df za0cGRfvB_XsLkf+=VC7t1U&7~Xy8!v4dCktgW9jA&|LbM(fsJ!`*VJPSiMYLY#594{=hB?_KCV!}rCNz{fK% z>fhaa6CH`uAz3pLCIEwM7;*G`Wu@5DNXZxzgmtud!s6~-qAwB>s+JODEVQ=o6Zm&s z2>5t*5Tn)^sPbJCKk2yFAI2(t4BYq?IdvG8DFO4!pQIs>jNPB42p{|u54razu2UNu zmXcG@hat!(J28HMb+K!|=DJQ6b6!qa0EizsCwmK|j(Q8JPM+GsogwE-TZ694=q@!{5K&;k9m2Lc}}^xc*yxTjEo$|;M@zH+_DCE%;Wr} zEqLbM0wJnGb+|&obW*ACJaIu0PRqh~5LmyAPvxEdNH20z5VBGznl&!; z3(uozr3684+IEBls@|QhLRJu4#8! z#Y9=f&P|0^cmW=vbjx&n{P#D9gYaf*#ef~4&MX+X&Xl0;+Fds*&|X$^7|s z!$=#DOF9)wbi!+594lP~Medm@;QMMCscUolsuL_~OIzun%*$($m9hocRr=tyBx`fi z%iWKq$jiwg?PqQtpzC8bOgX<$gecr$HF`vCtR(uIHMM>wLT!dKC@X6 zpC-dgqgr36P?Wip;v~19si;}OR8p_<#jWuTv2$37kcM3lWNWpo6AIboYl!FRZ+lr<@-Nfz9_=0K7&7-R=%hW~6%8g#Gxel?S(}ALM;@(3AhrkM9^qXc~XcK!Waa(vv(mR#~SLA9q*LtO%rJAjTcL`&t z;UJ_+Um9cNyNWJicw!oB4a<|h?uQoZ(0+YSsrPGKfG5No87<+p{y?3Yg~!-?je&2O z&FZ_2J^ceV)~!;;MoPki-bh`737=3S2fa`G=}><-dp1Zv4w|H;d#w$AtxIGv2YqS% z*kL&&{Lrrp)8V0Gmm1j`OCq7PHVk?gh73LV!XvH(o(2hh%w>GWN5;~=(0EgZHW;Hf zLZkKiqm7=U&6%UEpi$7;Xvgzt7s*(U@K~Sz*Z}I7BYruxHYMzeorygR9tSl3lwtg{ zd!jHmE1(4nw*|+uWts&HjV(4luOEiF8lorM%knI0KQ)2_HL>*!x1;2ankK5~=-|`u zLK{@1rPNG*Iljp^*cMl!8 z@*Aj?nTE2N4i1@?uNcl9%&*a$Iy;>pN1OTDTuDRfiHTOlUJOqbHN|4!isCitx%PRT zq?X5PmSISYV6AIVe@@0=?D}z5jCBf;kJ&tOdQE!voCF%Tea^;zJ?u2rt6(5NiJ@c)qxz^^>(! zgn`zH^;Fi`^6S8~nrS9`rfs?xG?U0;nTW%OQz7U;;K4VzjF%@4QB~u_cOZ#28gN?nJix zLx%kIGucGJJH4ZBMfn06UlS22ixIPMH7 zOw15Z3`Nz83X<)ahT- zW&h|d@++C8#I*sd%0UalChpCGr|q;8gBnQ~pq*5Kdj?9&LDqj5FNe0OlG~Bf z&boL>b}=J*Hbos9PS+=rF~@jz0VcZ~Bzqqpy+n|Fp`6)t^KlmZdWM>#I~yhLRC@~S zuX$1t#p}Eze4nuIeb9K$D4X3CNhVQywp6Y3i?&lY%N96VVZPY00d@1s;sp->{dEQI z&|y}Lr+^N&kC^|@X$QSM19XKHH_`<9BZno&L9jZ3urbpFbaOwo@)=Q95Mt0oa!Pr?eh& zux%+6;LHikPo_!GYaRss2cthXADUOx5wMceyYOEZ+ex;Qp5^n4;;i-6jicD%-~U`} ze|};yhOXKywq5$(tP9OCpAn2f4Y8`!P&K%(;yo}SvSUg{{Jr?>%3)OV8Z*P5Vxc(P zD~)8z*A*-KFw14CH8^B*DD~Tt`BT>e{#aFH6c~^TKp(`C{$7023(-|9-R3dVDnIvz zlj_OmQvHbk#7PUWs;oBI^T4%h4pYq4p8P<5BuI`-ZT5vh5q;#`Dfq(cKfN<_zrG2P zswf7_RsUM(59d-XzP7JBn9RM-E4o3!QS8kT3V|#>w`{nAtX2w36E$G7`AWx=4N{f8 zj~iV9DC8;(fDNTQPo_@hG={5#se+uKJ_`rlIkr0mXSP39l}ONSq8=liJg-?-xe++o zj%9YNPU~z;W-9IR^!fy0%(+z8rKA}FkKhT{oWh(yU|!B=g|>g)4?~7O2_=QQ0ZXlx zClrUowwiN@_)wlQS0UB2bmLkwGig#g zGLlh#-=`l8)D(}K->6Ua!7w#qr|q4LN zJW0+nyANsplC=@sYHBLTqR5}k+2(HD_2A5T)iZ{cJ3knjG-+7y&W2x~*@cs)jeTa? z{=+UAn}E&<$dVXffbKoXxvzZQV*f#?w(wh6nDx;Cz~|c!5htxVx8v$--t^X;2F6+J zHYu{FbGrv#?DOi)v8PJ~S~hno;Kv)mt1(p>ppQMWVZ>$Ir??2mR=z3`?c7(ziC?QB z>`y$yC3LS3hxhuxdZlz6uE)!i0`@eG)ryvYFc3NT6+6lB+XD>YXwkiFSA1fz(-7tA z55zoR1Ma2YcxuiJitw<+uh!hTin@ULB_#oSsuZ9;B#>ENY$xpJI`QuA-u8EqEG{DVh$$|`2q<~#5L zi-bgY3NcxinevC0gzbXu9NG6QVLJOdc|Ywra-h({9)E5X3DNcKgB;AeeNzRc5c6wI)__ zKUFM|Z_1Z;MEM%8F)45zts>4yJyeXZuGvr_%EO>`BLg|u-fCM4QR+89xYs14=!g~O z+$^QJe}*l!#O|Lp4Bn5SaA6hxxRe65jW?mrT9sk&ZFm#sXk=C)=U6Z(|d+(7pq zpWxJ6(t&GXDi*4r3>}4}0&TCk!!h3SDzt$LzKZNAs9k<*1SrztBDA>}6q$~KgjbJI z+qnt0qHsDMRw~T}N2X9bqCr`}3J(#~?(?v^4jR1GuSXUJ=;b(FjL`WyZ zcl)J(LN*(yH>5XsFbzp{MP!;bSE=?$W8W zkLkUBzbcleyDkeqRovZ>8GkUYh*&(<;D<>Zujj#x@BVHiG>9~5^Sds~&6&E)UwvxI zojCRdd79N5bJ|Mg%!m@rtoQd~tz^MXL2R@6Ew9$>fd+|HT#Fe_fV)bq##a?1TENGW zNKlDWLy98ni7$~B{yPH)V4cp22D!ay8~g!~k+>cSA)^3Agf|RsQAd(peOa4`w}xHh zn|TVZV_9sYGK=*Y^Q|s*aG*w0p3n+jCxo1TQ(sW>TfKQ#J>~Fx)-Pax$;Kqy&oqiJ zZePH1SHp$BZ;r1}JsLyNyOrI#?RD{SoJzFi3+nTga7{Qn?!_*VY6j;SBFfD_b@6C9e**}S6(=}eg z84GZOm49|gWUH1(wD_=-OUAr<9oR{69n2s8AW3W4J0F=^kmuCHCEjtx zBp+I>jAHl51g5@A~y8S zn3q+t$e-_Hpp0w4t)p?askhRS@P#_^#-hY4wpA|v7dkDC_xwR*1jOe}uESZ79)Ba;$Z7ZkE(&Yr4q%iz`dph8UmlpUmIB5g! z#c~=kfN~-7DN?lfAvH_9dd?=cOEUSgvP}#+XYgK<_Yr;$B$@mXzIS1LL*yU&ozrD) z$nGc+nB>m6FoH@u+gVE zeHgtVZf;K>Mk5!~dL@Z^r}|P76Ym&Rvm1E^7t3|+?Kf*sM;Qyh{F&O6F7H4b?TAQ0 zU15t8Y&pmu*RmaY5**o`^o2-3xPc&E`r3Ps>#J)`G*68O4Iv@0*N5Q16s3=FVkUm? zhRZJX<9UynTWtuhJc0ay*TpCLwk`bkX*l7<;YKoUvV=lCv_UZqY_@ztcZ-Pu4nYhL zk(yzm!#goxb3{Z&Oy-89J?^Bmov`d1%^A651!%<+>~{p(v6oE(ki#(Rb-a_N(Un#T z-G?w689sVKLcgIDn-4-oiJv(nQ>EkLPWG_daHGSQaZv@>;gbAV2-6(CSi}XUDfhabhm4nQjTSzvFSKu0SiIC`Ym<6QxNRCdF4h0onYZ6;h|; zz@Z23s8%Li9uyNXKmrq$u&!iiSy2fEd)i8g&3*n42lwwS@p)x$tr3%wT~kSq_=TZ< z)C!gl$CvG20^;eCIL*t0XWrQ`MOviTsFq@zaF9a{mA^oxE(6@027~+4Er!Za#KL9d zLs4j8ggNZktzCiIq@syosdEs9aIzOh+eDLwZ||N*tR#%K@%w`CPN< zTQlcYGlo$UoC{4+UXu--3A!&=-GTO)h9=#t#;`(RW=5pUAZE`%Cf=->c)+7-L*YH) z=gFw+d8ezlM5}NF{kf<%h@&oIs!lYcR)HCbQm@W{9|e-06VgM`@IX|2LWEfB^;a82 zjO*t=*BGNT$gfgI#Ws+XBdb2utE1G#b~S=H8swg8zL(ekh(P|aTGzzUq{3V|DPQ~& znryBe)-h6_G5?M}z1~@`>BDH9xmB}lYOM`(sTni=$EO;io+ex35S{XtsMYG2)p}Vy z%!m`@{0zjHr^eC~`Om~yrizV8ZK$EEc^`s=sbwP!c`EV}nu+3(BA&o)5It}QGfMet zRn19lWNcH42M&=Q$SVW1ec3i6)IK-b{7tB(WTpCUhrf*8eQiqi#JHB1`g`4KYxGIW z@1rck(YK%oi&bXAvk1x{Mf8|Y9rMiXD|$6_tr*u&P06VgA|tp;xH-Vvh8JSA5aOnz z9YjIQPPMN->Shh!^`cnI@+w=?E zWeB4$W!1dDTHDSH9Bu;*JoQL0NOf&>3qH zvL4ve7&P_-Su6GQqV(>p49e@fupa` zt5_;TmAvDH!<#cl+MZiJFSn~4W>gV$W393cY}H~X_jEiDe9#+(AM2xJAum!IEy!#S zSCZ`{X;<J-C;=rO^>T;1Yo&&|`+?97 z6TC_TR{cHS4+mk-CYez2sLDpJG6%#;#~?TrtjO4LJ~(NwB@`~Kh#+zr+F*)geVTBD z2{mh4eRZ0~V8#nomkwf8QJ%@iY+_c*D{?y0e1Le2SiSyR3s z?@jlyi}Fc+`q^A&eP)I+xUu#}D)St<%OvIaK2;TP8kRA-hku?P@FNg9BTtH{B&fjYo4Dh%9==LBWRei zE|#q8?l4WauvE|+jQ4`()PySxtQTW#R%Ot@!%8+IA?p?=k)`$(T}yU)aVg26f93!KdFg#;YGJlv)8qYcd_b*<~X*MI@XRux1M}= zVT1N=+xsrMD~aaKn>hA5lsn&vu6)}7Z;v~n>z?mI#qk@zCe3;|8HldIMkKb2&E2o1 za!5}n*r1zu?fa4)`imYyBq+h&hoRYr;T?yO8;8*lK%eX=9>VAw9z`2sE|v!H{1B5? z+NCH9=lgb)FM3>PcwFp#49GqX_m+Nv&pT0=^Lvt=J7ZnkJcbm=o3l?^J5E3wCmpXR zMYbiFLtfi6GUm(n6%FQ%uRj$;;sTcriVuz!>dR5@Cp0y;XPlO2l@F3_b{|Ku*f&lI zZuT(%g5r9o^kn~EE?78so>8$3SB~x~NW#mGP`+Hqjg_^> zZtHpPNmQP1Q(SI~?lw$Za!i1!3=L1$X!}|{uXy~<;>XvCs`g*Ku(M_?#AME)CeAcF zBxK-Akv+~cZDUAML?Qz3f@vq+%imD3DG{}sjkJ2U&5+pmsYJ)l%a=) zT$r-|*0Q_zy2uhVLct21aw>k$*{*6JId)-|ns3m#YnmM&mU9WQ94H1p3cSC^d{65` z{sQ0eC|q?fYIE`-rpp`Madnbu?7~8o@{Y_fVk_ol-uv4ppU07|yIb#94DZX4sz(b| zySb{%HKXUlpE<7ozSxFvhC(ueiGNb8XiF^@Raeu5T5LH`w1u%*Y zkP=#3+0a-P-jop7(wf|!P|ecO7s=K?(BCuYKQ`1jF`1{F|qSz|>yR+1_DEKDn)bXJ3QkvV-Fx&DVd?(}hj{rl=k{;Gf0NE9&zpZp z=f4@}>)VT)`+qae|1at0|0JFNfBX%BtY!bVn|(4PeO5XoG#kPgL7)GR2>l<(I=wK7 zuA#N9t_cKztfPt{gKB@v;9ny2_>R2kvEhdKNeE;O=vytH4bIH^BSPQbDBU}%-VCB! z&%YX7JpKI_Wc{o1_8IEp1qC8PXK+c_rzA4JOq0-fOD=sgSehs84x}?&J4DUnjz%}p zs4u}Rl=r4p4Z8-s-554x$3`|G_-H(yLGFO1R63haA1@Lhp?LEVF#X}u^%v2drJ;P0 zY$MV4} z!y@2pHd1L+1?Oc?ZZWoHYNtN*C}+Lib$yGLje9pUFV%@@cI(l?R~Kd{WLLq76<$7D zXO&XXY|-XR70I03VSs$W$j zDcFlChbxHO)2NGx#*4URg)L*g6$E3b{wA1YLRKq8BhLlhFvAZbLNCL~HD+P9{OHRG z%d$uoj$gV&B@44_{!eID3?8YFK@izu_m2p@5FAy#CTGF{6R5qSq^c<|7pKiuy7%8g zv+lzwN!Ai+U!!dXEVi7#FIfBu&6XZyd;UI>OB|ktBmn~PEDzuLswW@jMe-h-)7UeW zOcW$)T3RqbvDBLL(ilRtIw{}6<)Eyj31I+$;$yQ&vNt%TWz_>Cl%>DK8Bc)C@C;(_ z3-%ydo#bx{C)B-cH=90!Hpq~Z{rSfVI&y13Omr}Sq8CkePEE3I?T5!tgi2ecfTrE# za)bOCD%ZVof52uMM5}W$R#zo%FNYr5Oo3SXdjt}i?VM6n=0K66;^;!8KOO0&Wt+95 zy8rF#*Mp<=j12CLZLzufZI7Q;U#XaZO4U97Dn6=dvI*-v+&5K$Vtdb*6-3cu`b85axxP>=$q5Lf?C_ z4Cf1yOx-RE>Yarmd@6eru#8c_>H>-=i%PX~JOH{d_3%pA)Q-?$-EX9z1MhzJp{d+g zg@4RE%urBSyx*=>$>!MACzE;D&m48W)z5;6(2Xb)&mRr}C6$lI6-^MWj_h<;)K>K( zTh(6ULFLmq=#N$hB0_(@?8CQvz8a#hdj8c@GWdMWE%f%~=2FJvv_|3uBkcE_3pp-A zw>T*>xN#%J2NPkl^LOuRyuID)6HgKQ=3ALLJD-=`-YTCTGbTH)uTZGDPza%UV9ZNj zC@zXO_=xOqoR@w)ZJ{ufa^fbr7hJ7rpW*lrQE!H0@P-sZ;05G*3_Pda54{^gR2=Hj z%DglP)A@p81_(#Nk_+Y@`@&$@Oiprq8IrcS<>iUkN5xy{#JUQP88y^buZ=;jXq}Jq zHV+!u5QT5Qx`ETw90v5fiz7o_gel=a)v7*;_J z1xEsw{HUZ#Ba|d!5VCRlXx`Ew7ZXw;mWh3RXKH~&UKo%J1uY@!+BIspJwqjSzsKYx z&-q2hKZR9Z3d0j>RF@zDqme|4dk~>stC2mm#yW^4%niv_&=_%(#DpbB2hmRABX%=4 zJ@>o-inXzS)`=7ydl%BA7HS^mEht2Y++p(j{?{}pn|&c#aTT+h1l0#?dJ*h0$>4k` zJZJ;JdpOJwR-9D%Z&>NM_*%!psEpIe*AF3%gAq7UtSkcHAtu!0NaFXKBDSDXC9|>_ z$-cy5zJ5Rfx~}^CXVttnc3HetfOdl8(REs(5N}@P=j^p`JRWxgpQNZI& znEquNm9$51J&0d_gH01)Zah!R~4gG2s6XZ0A zONQm?Yz5Veg6FG4lq-z!QRWFOcdAw@`k7qZlzI(6mDf;MnHZV%?wNi{?~!BF<5Sc% zal)x8QUf|y!=`)U@Wo>&vk#M61KN-`IXx zl=xw1wT+OGA@@dvSi@$zcy|A;a|hP`m~Qqx%{PR$H|SY18*QOzN`sw9(beFw7CuSfb`ow)-)g`xwx1d>UZ3bY?F4IielH!AWa+J^p>&uF&vA zu~4x0kkG8HFM6Pu>D7d*8S$%h{9x1Wk8FxJ$cGNGCBnN@)C(ipe;{i}Xx0NFLPxJl z9aP$fgl5P7FA+Ld^!!(bI;w!dj}zB0Wi0!v7GVH-TE{ z28{<}g1KWKKu78s|A^4h4vhJ=HM67PvZa;xs5595K0E9=@7)CG%(~At+F}!FJ?VYj zB+3E;rK<|S&sLuiGL)a9f+}4M=#BV1CMRvx;3XWT@z`5i7i=5RYuBZy_?^pTG#d*f zUrrnn^undZ?lMxmS6L+>uSD&9@g08Nd~<0-Gd$Np*Iz?@ zf8Uby3@N#;g${lT>PkDii10zt{#h*DygGgypYgoQpxQD5b5;`hzIU$_s-gYP`fCi| zTr!-l2p2Jf;zh>4E5}B+0 zdc6Z*3ASHW(h5TWhWmcmrmN@}(C)J9{jg-iujHTBLtH=CW{tD2BWn%o^|Cdl$S4YT(u2n(Fxp!#K7e1MKAm7z;VZOr@{bFg^$;1flu7E*ZaEa zZ&WAY*S){M1useRug?(3x}^~xir+V}%hN8&x*Nj;`Q8}TRRKN}Ns#xuxTe!DO+P%> zuLP-nM9qFAOaG6Ro0*5Uy!weGnL>x*og)Xm4d?0ZQq}r zAW*{Gd1UtkE3S`uP~gG0fRqJ+gA`;zeCIgcz)#vi5Hoqwf(0W3lA5f&_I=Q2f?(t3 zZ*;CW=YzOYPt!s#DYKW?wxT9PM3xlmYL8w1L@GdQ? zv$hplv#fkfEwLHDQk0xi3_s~9K7~Lt3bC1;sHS~NC^_Lbf4zRKr2Bw8 zIg+=W;bSvlTnOQ%hZJ##jFn3cHQK@+p~ww#_Du{%GI0_4)e#tr5m7TC>}IyG)Ik8b zND6va2u3gd^#V(e!v zQ zk;Edjlki{?>jIO!X2|LYBt?dketu6_)uvTsOeUd9dUQxOm&XOVFzYTScVj1i*AchY zN%@(;>=2gX=oaV6NKA~u+WbAm=Sbv}PU>8pe&`XqM=99Usv#94P$!l!O-mrHI*v*F z7E7u5Um|qE^n3xxlQlGXok;hfsKS4X&>#G~%z_c+waWg2taSk4{yIp*cM<%9TFJxj zCuMEAj#3&+Ge#g<9YV8->3Hd|%uN2wAM#oGj;T3QsSCrbOJTaJE!c?CsdG13ZjM^V z8fv>~soQDUJ(4M>N6BURSr_uu`_f3PpWhzx=0GQ=Js#1QEF0w8=P1zRygW$#fX*z& z%@}XVMb!-=sC|QYY>d2;i=&(O$%RsiA~!cTFQy?Iu2qQaF%Px~+fo3D#1e^qB@b3t z6K^G-Ej`1aAWpU!m6<6&2Me5k+TzC>?y4~tbN{J8i0F?C{X;^IRN4D=x57!W#OmLv z3S|_uW%~S&g@BJ~p9E91+_9$^wJ~lZbXKxw?utMGk zf)2Kpw06U)7RXwT;pv#^C0)H54Z|g^CT70KWcC)t0my{lQc-z#0BL>UnM+Az8OJ$c zX<1!Zq9vs>QC6&bDN~#S6+B2LSt!>E(XL!4~1QX2FWYx76ucQUqCZy zDwLCdFOUf@R}3v%sV>WkEA9|1snjLw9Vw^aD;x~37#k6&oki5sO&r%HGi4;G76kf! z%8dOGPRUccq)V}S2mahW9P{&$dBak5FCB5ggt2L*=%^K=wXEWzjIz)Lb<{HJWTdiA z*LSJaW{NNMS}^q&QT6k?geQgSn5lv{D23RM`RGs8CBIP!IcoO9s{?y;@T??YOsad_ zfeK~SNmwN&^Qd>am0d&?x#>0fJB3U_TvV&-x%0JVA8R>B8OZeN(4^}4+v?u@uH|*E z6JBK%B(C3jD3MacoOh>}^r(0JUaeGKnX+A?iXt(_p<}gG|4|R1n9%@gY!GKAx)F?F z9Bts-X)v`)7V~Ii#E!8xZnS)A%o+sR>nS-#_&bj>Ze1pQK5DE_uP+Rs@*FJ-v-EIT z#RbGS1}R2_wSj9ujm;Lj%{V(vEWxU=dMyzl%{oHO&Qt~LtCeDKH4vkY$vu{Pc_NHr zb$g4kUP#MxVQsvX(Pl`)kGb{yZl=1eV@o!-R=iR9U$hlG%q=`OZNDFZ zugFy)8EuLMDLcm?4ylM~=Jo|j5SCEOLPm8eq2?+I#rRXZ6&GzIQ^zcE!;Fpr8guLE zYDZvlyCJ1}bT}w4$mJXonvJl8`U1lIrQw%R_Ur*l7pxjAYpJgW^*47sv~{7fd=rHh zG*B!+6Yj>b{+{(42wt_Bw&>X1ZXxk(_6~s|Q>{(w`q+1Jb%ILY$3zi@1Vd!fl zp=vX;0(a@cw56wZ3rFL9I$_eYf-gHB@FY z;r=4ER)lZ;2!8D^LNcn>?KgbADMh`AZQ(y826RugEl@kGP(h=S*Gh2BR|nUpnfUMfgHgK&%7*woYUP|nHeB$mxXQ8{hBU4! zfU$j+k;6pKZSyC?_MQXZh2xXmYr2?6jsPP8O7Dt5S;G2aRbwM0-GlXO%}s0KnkPjq z`V1PU$aR_7oRQ*ZDWIc~VKgqpArNpt7)TMp7lA!ST?#$TBxgo5y!1>ljg_jz6n1n1 zR%)*h9l)DlSRLE72FgT~jIThejSlfLr_rrJXX=j!&eY&~PTp5^ZZ6mRcus8WPkPNv z{-l|TEW=?mjizfUovFx4q9Hw!9JB;YwFvcPd5*Av#u8DRp_JXRvPyWB#t0tAuk_1n ztVUOvhxmxuZ*JtIFYgJz62Jq(9ZK~)D=0#4Uv`MA(3~2e4GYmwGCDupr7UqZz2zrGx zNRDQ{p7niNueeofBi5hQJ|*EMT@Z9wOlDqO4_yqaSp1qk=`XSrTpUz-y7=4$2Kt_T z2_?lKbY6-&`{P1?w4d*lT4t(mOGOJ&XUWXST4E_T&9O0APahy(H)?bLRFKtA-LO(& zpe;GRm;#!0ZXc=iGO`=5XaMSCDJ(%m=s^Y;z5O%kL@N`fon2XLBfz;~_tmM2c1!6l zktwe(ac>c=E`X*Z3VD)IA5U>TX_sO+h`m&OMX*LCGKg|;Oa6&*Cukqwra3X;((UH7-P zi*VjsMA3u9=iN0*2B=qSY#h$ZKTrQSzC^i)k1>xAlq0^8%5Y-C(9&cgG9h|eeGu_r^XBTTXPQ8eU>Ct^V_iD@|e>N5M{uIs`a`=oaQ<>h53+XcQD(w!|L!cV|*^i=Uf=40j6hW{_T zz;hP6tJU0Jd#?<<(NwULTwFhoSdFf;)z{%vE7%IJ5m1pYE3m zyPRLQiz>H~7(jdSQ}&DdlCFn6iHC6ed$UQ>CsdB?i>rJehFl|ElL>ce$H$K_PmbQq zKz3Yx64LyXr`FCV(9fq1@KYE0bI<$dKBMOWpXVWn2)*-p?C0|Y_<4%_W#;|MoYAwv z9D(rrC-}Gp7o~egmEEPd(1r`a<*JvyG=rVDpN}qX-|$kF$9(C#*gqlvat#)3TW3XJ zwLy4(wSJ5E*TFW3GB_+8aG+?U zd;4p<wr6;6Dd=z~O1Ap?TZaNp)AkF~zLsycZjdp-BBAAvnI)su zI;iWDxxO@3(=<0mLC}MnRdkPGmIqrn0RUkV9WMTMwSU5PH{JVpC z`acZ|PyJZWeT4s?%?pra!0>-q2110BQvYm2S=l+6BH<~y{}}fnA6iU)Rc)zQ9k8Y` ztf2)|*Vf(@(AnMh-}NiCg^Q5y>_7A?(apuju^Dttg@yw=X$FhlcpSdi^{J@i&E}LqHf*q z^goz|YHh$RGV95jYD>)&ow_~cR@=%QzDO@^Q}|c-(xqNB<;JMULRkA&Jxrq*sf_ ze5GpOE&Uc>FR-~kh$dN1 z4f++*pbMo+KirPkvR;x40aJ)0Mo>i~LY9G7vjY70$nho-B6t=woSdTZg<#_ao`>Fs1CSrDG@k&t%wmgMjs$ncsC=`12qc+KtiyR8C9SbB2|n07R8*jcd#EO5HEY^JBNSv zQJX$f4KcHe(2almgu7HBTqSoi>vAD?i)4|52)^4$$r<{|7#4&0u-~MLct3$p)^>2d zXovXBIO-$x^82m|=UsZj;I{NVZ_{Kf}UV zYjmT#LxlUNUlwe|B&NeI0~wUIf?P{_@Fw2)utided}in+$`1&3uFFHW@#`ghoFW!^ z&cmp}lzPKMDXv0b?2+CjMW^YHq!77HsZW8zAUEwPZ9Vj2y#>oGs(`Fl+JoyM-mfpW z70F)aPlWFv!x9=tV8>m+U0sdFQ~8d_VHb(u;Y*L<=@pUBjWXFFpo|d_h!Qv#P7aJ6 zvZBCpV)-PES35Q2Kjk2sQnBVtvn?abQ47Y-fgPfDNg9?(|&tJ+op#XtHL zf2V>p!o#O$Nmy)GUkn0(uacR70o_NS8fUy)_n zO#|Ly%mdVl7}XPyC8+psOFw|4jz5(ii(?B@mFuiCX)(KMRQNXlj7iI7;dC@*GI7f+ zG??w|8If4kYI#4IpHOXB&NYuD@n%%?(SU1|bq+N!J*7{uUj=j9X7;PYe1Yo9fnWp4^#3e|n2G_27~@w13v$rPFd5{mN$RyfS;>9s@V}!s_g1xqhxQU-1sD z%5|`ODLc5fZP==ey1s4pIN!zmfcF1T_tsxk?*A4qEg&G>(hU-#lqjimh$ty7B_JSO z(k!~Wd(mBM(Ya^@r5mNYd))`!+r7{Eo^!`IzuYnI`V-ap^A9ZH z1VpD&y`lw42-iH00uZT+6+vnP%fxTKS8(binI`B@kV;vmg|~9iqkS~YEBHppy=(I| zj_pS|V>L`#u`()t;0M#Qi(X{_k($446s>vD$CP_GcJ8XR(s$absbkR7nmo0GCO9DR zhAWZrqwy1p9q3l7mFw{KYP$1DkuBQiR4?N9r<=~h&->XKt_R+WA}fqIg;^$J53Y%= zHH?IuYNS&utVyp}j0UAuf4KX&0fm;~q{4B&$&E#PoAY3O z+L2EYcExLC$*Du-DlOI~ORMbc(Giw9fz{w0oqH3rr{D^j3%Ny?8R$Hk|C7dzHbdd* zxA(6Ui6Av(+nyBHi|9)A?IZvqm3eIG-4S1>AJah~fJh}3$qeKjItZigUJ)!3fJu0y zL_+0%;6H8XlPcYeJ%gbN;rR96AyV&Qf95+Q>-$_+KGiSo^+LAyt?Se)8usknHvAGBEP(X4h#L z`oX}8Q0&S3JcrWX8iau`6Q0tSQW&DG+Amh&E^+rwn|^*S)W zGBJD$AX0Dk!&|P`fcceZxX@SD~Cz6_w_keqwb33xLAh*T$UmIS+!c<Eg3eU8fS@Vn8 zCoWYbG&uJ&ulGl;@{Ee~XE}GW5D2hS4{-Q(8E~nW(5eprcJ@7i%YXpLR~=*^;qRXS z8lx2gfk9#DETQ0+@=KmiOr6pqoWs$Hz^$%{(vqpBcmih_Dd&MlxZXJlxYEjbctR*+ekim`c-Bc`fiw(73?BNOHf+c!tPLRq<{Kt45w@KWya%E< zSjP_H4?j&%*>wuP1QBl5hl?(SUmye{1k%h1+#ymU^n=hFB3Nm8u`VKT3up>RBaOZV z5f)&HO^}c@L{d&gzB@u9*oZ94@TJp;VsegRNsMA^h=LFVUL1sc&5t<7bK}s6PA84x zON<820>TaSoKw;B=rKJ^G4GM0C7olW6Jz{5qh(n!xF=$iHT)gE1{W>8d3b#Iaz(&G&PfV0XA}W4jTw-DpfJk-r4(g3g zmx;;TK*i~e%AQKRL!@4W@^YhxG$f&*Ci9sYl$l}aCdSpVCRaN7L8g*Zor7IBlB;@! zpDL$3W=(-Lgxzya>77c+^K=~|OO+PnNtQ{SeTTFqhU6BB1Z?h)W~b&Mrj>f7`ijMF z5n?E9ByCKQEhj22${_8t60=z21SLjlJt04uviYHbK^%zQSU|jP_u`3YB70prr$h#7 zQUrVq`-U~OIWqlKd+KH&65(blM_cM6y-XwI%-6n|M4OqUvII1Rnd%Z*!>yU;BN-lR znL({t-9}lr4QZ*1Stkft9{F&LC+6}5YOdmmtEwU^)(__ikuhoKtg%?eSQOI#4`i)UW#qi zC%B-*w`^>)AhMbZN()UTm0qlF4O$y=+|M$3n}_+fNxDD5a$cM1v@zf)P^18xUx-i) zPmW=?Mgg4!I9@$2QYdW0w}5&z!*U}^9`ivm#3UQ@X>O8XEMVAA7nTBiRPrJq%wMfp zRO?byMx;R{5${0Qd9E0xmxk9&g3CvRZq1J#s5tqs$kf()tD6=b^kh7fG?}3bCg5dBjqlH!<)0sI<~DThLEM zJtQ+2Eo*qYwDAf|g|R=L+pzm{0j42W^5f5&!Z}Dkhtf-3f+!^kOuMsQUC=80;4K)) zRm_fyk$oG{TPTwJ$~&m0Xrk<{vVT7ub*joV8(ZObWgouMmzq4nF$dM(S)S`ZBT-b= zY=~W#t1n;bkjG=!8Azb@RzV?`vXXDuTXBqkq!0#es5BamcudflgHXLO27XfnboOhu zCdv)_(-fe5Q?0c?Wxu5G39!=KafzeYc)qlhj$|jnHeG+T21_ClpO?9y+gS59oxlMq z`;(6`E!S?F8l6qYH~grdcwAka?dM~s`KOLto_J43hYz>3R9ya8C-MD)l5}s;UTiQv z)dQ7pUGEWQ(2+RyHqZH@A1PD5wC~SqDRc}jBbH^?Z~8xVXh}ivAyn<4!SJ z&Tas!M~tn9fEw8935+zm@FLJXB^DQtkj7_fgX?23Y~*~|$TdWuC&c0Dh*mca3_+AI z-(b{7p`mF@Fp4wFOJv+7>_B|)v9X%0#izoUVmBVxhb>`kwwBiVvR4ty+pb^*$&J_? z%<4i#1M>>tOB(YEd4=i|9`+71DLu}(a3e3p;lE+^3O5UjYd1HG%DdUNimS)Xf&AZU z;Z|wm9agUujeWbk^RBXQ{gVckGr%`fOw&il{^$`+wRbW%4=!eF^(;BEcn$T^vOEqC zLn|Y~dR~zg1et~0vTnZ=skCN@gPW1Tx0zzEc|v>Uesc7B|6Z%fhRlAO{~UW@D>{Ej zYlhC9wx+`3-_@KwfEg7#T%n9o;Y+>l?L2qb++v7g0iUCkRmr}8< z_+u{d&x6>(DfEobj@z{aW?VhgySUqQ}P=bz*AF4~-GdRQt867{<%yn?q;v$Bk)=PI5eI8&q?+UFaBpX7y z%gT10Y0D?9(6^<&>3cN=Bnr<8z;ldUK|aQq>Ehch|bLz;u+lAF}p%SZ3JepOICM zOWq_+d?t?RjUgvsWVI$`O@yRx#9!z*6Big+{hBzWYwekU4yb&?f{{R%O{aW%naF{%QO%UBi_Z@$on{s-$7 z-*mox1EcyCvPUL;t42ViDu7e6yv_v}ZOa9PI-1!WY17{;Rfvk2{8l(%n(s=}h)NVy zw$!ty-+`NnO6v?hz7KU#YrJJC(#+k`v7At+#gLH86!z+xUKMm%M0C;*ye23xU(CnrD#7L935n5qrVg#Kd01fJHVjxM+7Bv8k)aW zN)G88!_Fr|>EV%p8SgDmge8a3xE;UV;|~Ga!PnY!>FvE-zK^3RzI|gY+bKNS zuZUGZ#3qQ^^PA6ZhTnXEF^>Lub#O?`}v2(sa5oCm{&sx2CDP;fss|$%drfc8t_eV zw1lfaT1CPWHn#G&a@2%l*}%xEiNcoV3}oDh>BOfKGQI%01ULGY0n9jM;T4==yItP0 z`*7)PGyfA%)X7O%D8`nt*46an5Z}|PoJ|#N)#dIkySB;Cpmqb51&p+F)^DCo zu7%Y#`h|wtC+E*(ld{#%DfHV6Uo9ZCoaEsd?}2KP7iy0kTSL@a8`a zzY-GYH#R9^EtL<}r4%@)>gp8S{T@!hJk`V`sQBFKaBdw!K(FS^?lWV{+@-zxq)gC) zj`P61zY$Sz!g$FM-46YLhV(h_9IRY3C-8|XJ&4RN*y1PX1{!CvOyJ=pg2d+B+1C#eDfKu z%^AJ72)=wg@3FmFpp3h0S@uiix18;P&NfDQ(l5U036k*)I$}OsD2b1re<$~%se-iZ zQlp~zq{8L-wl3q<)J$5Blw!`tr}V;aM^uU_BGY@}HCIdNh3DP;-_fJfh+vgH>H=6+>n>}1`*{?0P zu81wl4?tfu>|5YH0UikIY@yXoIDpFk*U0L9bhmB=FMVJ3z*m z|4!wvzLJtT#To9AKwc+w%fmrhf5Rl;1B|RrGDqJ3HKt2^qeNUAJD>ZkwGugS!(FWyug#$UbUqjio$eoXKNWJGD|W9;N_ zy6#uY<1eS`Zw8F4syoH=ayUx}PgD!LWHDQq3~#gv3K|bU(YRCj=!p@Pr%cBncT7O#lSSeSMxu}@x8sJF zs0ZbtM?B>VB<+o)*`WTeMnp{(m7PK2c^u9}cE7ORV5>d~f@=8;Jv#quL>o#}hbcMI z1}5W%yOJu|_4<=18qrh@QH-KN(ig`5c~R~BF)8aYR%$WI7%}pKvCr;d5n_OV57fRc z%XbBIsOPcr>anm_aRyU@*Zf$|o#W>9LMII4EHp^1%s@7RahmG!w-s?tf+S)M@x_So z9%Km;M$z7^6rTf4{WJn+6B3qS@Pq@zgfNZJQ-Z`F)?(Kg@i7=diDY334T(Ax(P?B6 znHvv%1(Wtolfa2m?ukkMUlWTr-baunk(&_~T_jzsCDkSp)+8qL5+ye#TD4%<){~`l zHn==`lLB*=fSS2${KD#ukVT%VhxAW9)+S4xOiZ2b_1t8M4HHbR)=1@goA8L0XxYqS zp};uTnYmXc%6uv80P7znYlq$@a`r2+Yp}_MdhHC4rZf!6BDeVVB^D%ls(v zoE4DmXRv83n|)710VjGvS|K=dGe20Ua2&Uw(Jb-AvoMc5+a8io;!=1am_)ykrfwES z(-%{Z_4=R_8n|l^Z z7fi|CZwdmT6~YUBCri%BG=4yW)`HSE3X_>3rIcO;yO3;0va)C7s>kNJ&9do&8_vZp zWhDq@x0@k1O{rZUug@?4)Kzi&F(@fAn@$1=3c< zM|02)W~J0-IfH9utg|>va2^wTUJW_%ETnQ)uk5jF4k1Mp*Ht3FR+SN~igBwd61|!a zS~99x{YviBkICmvkg8ZnwYY2ak@2MG z)riUk?@HA2YK52w<19?qDxu{sZoIbtIm>|sRPDvRf;k_p4IzaDb3d8 zL?zWJ2EoHNOl#jDVu&~k89?jYwCdw10)|&3t~^h)pq1p%dZ=DL6e=nKZI(;Tc^2kqo@Sm@)j-_XNKw_d z6)||#_yM!2F)8KBC3e)+@LN$p$CVGG5X$%aF2T?y33SNb#e)H@1k5Y)*5DvUHl&oz zkcq42p5!l9LdGq=bwkX}xzOek>1Ne}7VZ9)1E>gsMGdM&EAv+Hg>@@hNDh5ry(eJ} zvTz%<4Gd3Ld1TAHhM1s^73}{@g|hyW?IUQ$HE;Y zNzkG}y$%zvj^GN!CygXDvmMbZ?ZXHi%=Dcz`yFOWEybdpSo)nCn~2IO=Q7F%mYhnDE5dE*zh~B?aBfoJyK&A9gpHwh+ z?isXFI{Q0->yaC1RW8o?P3(DFnV_L#qETI}Rh|UcOL{$RcS(`RS|dm~5EC&Dhnkio ze@tt#i7c@T&jsuy$Bt%auP~R)M%RigAS3dn?*(8o`J~tTh9>(~m--ID`~ZMYWEx;N z{l)Fcx#RYP)s=*&6h_oEMgsJn9=f{#tc~m!l zJSu>|^T(z-=nnk&Nnt{_rgbCmi>5^)t0KkRMk$L~U;SdNxRH3AuF<8eO0Qc!tw2a_+U{5pGi zV`vkfx?(=me8loPjhC71d0%zGSUzRu-2|k0ee}Dk<&MIdk8Gtny8aI#pNj!MX{_-5 zA3y2)#!1&K^p5%^XN$Jri*budRm{&V+!2e(p%N0$v(%%A*8=TCxJ!*ZH=ZA8_*{{j zCJ}s>8rc{d>C3v?fE?{BG3<8`$Z+tQDNlA!8H74k&t@Q)-e;ToO3Vy%XV)#osHa^E z^QFgML>D^Rnw-Ih4K+dEZ4%Y7Y%T$QlHBM4kuJk+J@A{-qMLiL-7+5)2 zKd3#3I9w5VETAGryP*J3zxuBcx{37S%#3-TM>wx0NxgOOV%Q?G%@q-+EQg`fk087v zv^ZrYLHNA-841&IG$TJ9#Dv+0Ps~7@a~Z zW|k<9XeY*IA?d|E|Dr&2=1pN{tSDqs#Pa|2lYUP?@@;Kbjl5#tss8rv<4(<_anVlg zti#q$-J(DHZvBtAkGl-IR{o2R$?a9EUK5c#Fecmi*$wK90KW z!+!1_j_r;l3y!0~VQ#OSw&2N-qv1Y6L@x#+WXmT{C7cl2kbu;P-Pk?qM<+~g)GSZ_ znt*iNsbR$a@`&%TVZ7z(l<9x*ld9AQ6flW!Wbxk3IV=pK61x$A&eXlmEYFu*K4c0k zhp3Hqt%OQ(3O?8EJbd}Hs)pOSS^GM+Yc(T)Q;6Yxh*cd1K_aKiWMSPdq#mrryT4UE zVRf}rzh>pI0r{s-D)-d&cc1ht)v)kHu}FCR`_Zxz@e_8b@SD?F-7U8>tuGI5;pac% zKiyvRsb=0@ZrAPIUhVgky|~obmG(k8Ur2}FUZ3p&X8B#86oB?1Sz~BQXArMXWMiv} zenAV#Kw*|{!$iaN!rG3!pJMboH8M+$#tWlI_a6c7@tK%={Nnij=qL}gGqFsZ+KD0M z;ygJ3w1-8EVtz!7oRLd ze044*GW0rPlGcd!z)4#2u~cwy2m=zqI*j+#VU%Z%5o7-wBpic7cvSTDEYlnqrjm3R z1J*X6m+DQ%7C(%((Pm^f8S7PTw*_U+>TLI^BH^4L#%yCYmd(5!P_m9+8ubJzS z*pwqLsxmCAk;JoOhyARIGDA(hC8&kI25Ej1KI{j-;@|WO(^2I*g)-777xadAcX`zk z77)omM5CL#V%eS=(Y$vVjp>f@ugo!fr)N5rJj9(ZRMW@q-uE&CEtXA!(VQsMMYVw8 zZGpUz`J41ZRWP4T-W#}r+}jd1$pYh8*5^OX(VH&cX8FD?HtICj=&^lQ?GRD?aYsgL zPE)MDyM`Qdr%QW7NDMmvmOSelyKa2pc#H9eGM}dzy4b;zx-@(hDB2u`&kogLn97yW zgVK*41^2fbJFvz6EQWJmO$D{8R#r)2Fq7iNq^6{cWm{ z&nWe(#5zE3cA5OF{s z7-~4MOv!7~!@gS){>8$O?7>v?OX9;wcjOhC6{lW##lz^#fn=sKr#{uV(AZA{OC0Iy zeeX|gEowOoIOIOXzoD;+>KaI*PsxDcJ1`}`KJvxV6>PIjt1_dsSP{7QZa8RvUkAO| zfEU?iSZZI)OTyY$nELW7qW@ogQWuS7DBveG>3z4>)c3x9V&ufUsWSZNTb`nQm2!!B zb2;RD`QLuh<#_#2O{wGHmd@4XL@Q1$&;Z^xptzcZDb`j#g=hMFsQZ~QG%lN$t*~Rx zyoWkc>+sgR)zZ@SN_%dotFGtHPXeGlif7{^#a2T#S9AM1R0S&vdoD9q^XE*O&1V3# zhuv}h7N@@Tp5ngupVWx8trB#J&8xnX^?3hRYGhcTQ@7+Gtc<*iMyjF*yY1kE@AZ!` zD(5C>(V>MC}hGJ6~G8#X0ocHWz zLpfY%K$r7G|GIH=NU!0QckoH6>&=$l1E5a|_({qC^hsR{maYEuNk>?Qq4Q@$XU$hP zd!7#(7w;*Z1JIt^eUMV)GRg3HH&@z+yFTe%YDDYyFk!fHm7n??s#NqN?F?mILg{ie z`SuvB)Fc_wj9FiFdvfF3v~8kv<)__r8msqw*Kzo2{_6Iu^+EG~008ZQ5@L3jtrZtI zk~J~v;tzfKD>XvBKG5=luCnZAK(7=?jeKE7;JghXsJ`|Q_;QgM=n?g!=1*#5rsb9@ zR%BxDcWR_c%43;C7m4NLCNoL4nj0#*C)T7VPJ($I^A|jH4+3;FqIy^T&t4Dy^hqbb z+$a5$8u7NV_hg&&<~;waPdfk7b3Y#CecdI}VUPDUJK*L9p=Qem-4dJq^L z68|8y-d#l{F!8HzzE_|CPas`;poYzRS^Pi>#Gv%$z%9ps0bJxl0msR1_YzYkFln#{ zQgBzLKM;Uj&krU$0*Q16H%$^&Ne5T+hFIJSxiJpG%naG_48dFr$wdgIgoTJB5;RMP z48076Gl#PBSc;JREk|sA%Ml7>$-mCq|K!;JgxHy&^~^OTLJd{V%JPIO3*S^Eys3-_ zmT$Dn5_M`z0Xd?7Cr6-w905+*Zb7q$}fd!p8_{~zU{oRPp`ROwJ7SJoJC#S#k%I$iu-d~cX zTMoFaZ{Pe&wY0e%cFPdC%ZhcB>5zkOo8oaL9urg@xelid?O!tH=EWybI-s>C5fySMT~9R(wox1{l>oc`pe zv{RkEZ&ou>pZj3iJKBOfDMUQ!yv+bP;vy6L!VhLw_`OKI%6zV`rbsP@ttF^y+VC$q zQWR05755gt(3g6}!O=iwvNAf?uT~P;?Af%8K6@gn+u=*VUTdQFdZjg-_&QnfWfJHxJ*Haou z68{v$p04QrcK=n!R)fsZbwuRmV#hrSHyrFU3Ej>jUEPgK`m>{f7O~;x=9`!MPrGQ+ zEkT*=9|z7B+);=HWUx#LG!24Lnjj$U8lF?JEZsd;=4|I4*{70R}4-`L+RZa zuKWrE+wUSo{O~{3ysAr7A^|Dd=!8f>H57H#sva ztQ|*dI~0Z=?-opiCiPeh%2XFJi1XypiU|W&xdnPJ=NgA<3gy}C5fWy=Z26Gn13#ug zJ`(TGU**f}o-jP6ue2Lebv-_&e@*?^{=2r6T@Ag)!tBW;h5MZJq-=Ca?L<_D0&M(a z&-?JHkoxE7v$ktHICH_1Hx=`qGaYqw9>WypONUr#(o0VCyG~COabI{2$CwP%vxkb5 zHZVqVy>R~dLU&$vH95XHkT|F?<(MNUc^ATH$^F`l;aK+Oa;LI$w-cDRnSVxq%7oY+ z6)eeJNJMi#^y+YcfA9KeL<(Ste$#E&JekyzusNMY&Q?2Hq$d1Zj(mC%iM|(bt`o8c zrD%U~DJ139b>pK)3nRRC>;U9Qb^6V^RO>qnTDOCxPMzyx&9Ke zlga@+#~Em2c~5D`U;BlhFX720NH7W=fHdE962wnR(kNE=scB~sSHZe~1Gi7fj2sfi zLE9rrYyS_@+2mg)Te+fe1CLzjDCPvjiAxW>U*}{~Zb?f$alj3I+qm-35B-&-1ztE; z2tD0mVWfwf5eaR9w2X?aUz~O})j~p-H0NV@gk^}tgNKQ|Dzy50YAe`gJby)VLaTn-c(>T{0u}FTmZ!rAleiHthYj$nGscC%;unb{UYy@D z9(({xCX&6@efKR3-+lch9-Bg_?Qu2*BUnm8=yg~SVHOLj*(;f#*Ri!Rxm-`pIIHjm zd=G4*jXkp;y={P&I#AweS^Dp*%d) z>}@LMSc&G_LWM_#uYz5^dqxoz>k@6q6l{L4Li%1pThz_P14tCGI4FnTFB zJ^CW9GTD+t?ah_OH_o`41iz9GhR-y<>6}()ykutDuMDZ|=FQ(Aq-C>UpZT{O;f${z z`Xxu^Hi7eYr5~q59l#JBvU@n(x$()Jq8}A9P&YQa<^(sNw{K7-AF<$qyrY?KoaQg< ztk-e>%D!+h51h9ZyU+B{7m-Nn8*fgC-D&Y;10t5QF{mcs-UU4P$K(R-q-be=5(N`j z!R#S}i+K!^+e`Qhqpd7V6@hJjTvitKUF^5dMgP!*m>eDjdtl zr1^DJygK67ybWYD!uTNf?!4{j5)Xx`k-k#c{4;MexcLrx`CE=W+>&3A7)`t7;tmo; z!crDR`fqY1{*EE~>}qPns+O?P+TZ->yxkFV?~Q2451u1&WTJEX>OXRXzasykKKb!G z()yv31t&xw0g%?*S$EwpIZ`%rzZNH`?$cK^{GT%mze4P377qOhVh0{}T`unXLA*eS zefYfoA=SRBHAS;&-pfvo(u2Eso1WEr2tzYIUj+R!ghsH>MDcT|(#-U4IdYVCb-gAE zFhm3X39-iy*=2m1`bqfXW#{MAH#)G!RrO(^mQVA?|CS^7=2+h3L#8JxU124R|V~94-+OI)>$&qI-_E?rlB6&ccy6c^Q z@Wa`&+jE%G?eZIxrMCO&=Oe@Q2eEe{_Jys;vWl5>>YH75x66sU5c}TeDc!`ML`6+! z6S}th(Ljj3#Up!65#Ea2T$T$5oy`GckgJ8W)jF>AHJhMT_iabdk?t=Q0UXHaR3Kt= zh71pM0k7LUPq?EO>7+9v$db;)8co`ZX5E4~!3#KVyTsE*@o}HL!lji)q))JWs3yiW zVRFpmMLp>)0ERm|PCO;3#ipLH>3T`9~X%=`f$RCnO zYZBxY&*KOtuq;Z>*P?5pUXUqF|~g=71QPrBfLQ~ z2yFgr#N0!VU5$zv;|aY`i+$JN0p#Zm1mn0TX{Od4E+^deW$r@kB2x7B_3pY;F&{VL z9Gv4d3n-nU{l(3EKKDl22gZ8~#;F8GwVlOFk|p>wBrpoVUC=P@qpZY&Fx-QB6XGtu zn39AfO_?2a3wa183aTf@3nuOHe@S*uN|bhu!bqxPPRhARIt-vZX7Nq$O`=^-Do;%A z4R9Et@h>z>_AH2o2&RzLf9TIZk&8(2W{Gbt2)D1Z^^*ysBk?MlN~sU<+a*f9$7IiD zmih>6dm!N4=9$vBkvz76cXiKtX+yLC7F(~JJYNvErJ+`ukaFsrex8_q*^qucm41a0 znT&=dA&vA-Jp;`p13f7N6Otjvl0q=$hfAJ`&z3pkpG3R~Iuc}McFr`MOe8B5G`YwO zGxVnm642_1XLJ!@NXp9lEbH8x#l#!SeJS8{n#CIg_ojfvh$lw!PiL`AXMfBN5tV)V zSSZIlJNp$IW630TNTy2R!zQSA!ebaaTCOVh`lze$w z<_X5KIiDtT&15+ZAZnIEd`M*Zq=CA2nont6@=tAYDGME3lHA?N!C!(Nxj|BW`b0Nq zasv9ORD`hJ)PZ?|45ILaF%41UTnZAB3X&iNDboc2G&BK{6R`=VWK3&7Rz0#-l-vh6 zhzS2J#9onvqS1=ld6Ch4Sp(Y-zd(B{)&yHQ4LY>^!J+O&Mt{s0fjw0#UAPDlrkmwE{~^;>zX0En5ZE zRmHeaIqI{@+y*cIJ|T*a4<6pHPpy)p{WL5ty1UR|v*AHyA4n^1>gX;tO>q1-`KJ>V~%qjB=u8S$EiwkbZy6;ej8yM@Q zoY#l>eg-G{s==VBKAQrn-{Xcv+EC7m=ez}>x~lzZ2$^}}WA_mnD_V6C0fkUhWX{-U z2VtmUHnb;WlixoVumEqTD+wB=g8yxEMzmTLbjbE}4lv$YUOxD`da70s;`J*5@XqE*?t`1Yz5 zm$Gf#H#<77MOq_=xY5=wxo!6(k21yZ`l^jwzLD-aS5L^mn;p!EMau0%m=N9W4r#a3 zH;xv7H#4($@Vd2E8-`H^b+}BWsc&}Vi$^>lt}bBjj1=$8&Ippersxw2Cz|c7d0oos zP^vOZaf-=9;nr2E-@zS{ryWABQ`|0G9iVRkB6aB=8*Maqdqg$c{f@ldn)1=EV2>|3 z&*8_O`lue46!zTdo=CKA&smNEA(*FhyZ?ZvcM5F4pgBaC<8s+AT)szPrWm~GiIdWs z)YzLc+naXXn}LQnNA~CJ3UGdC%VM@?B>`_-6xunLPbj^Q1QDwnkM9?CcNHL%gaytxx=X) zQYRa;zK2*clif_(KA(tkXA6Em6^TEU@O%o?G!>L8omP^`^>8|6ZYl@BUAs?b&5aj6 zdLSf^Z#+Alw>(+-{+pKejGz}$P4J9w`*h<&M$+pUBbA{)s3*^c)Eu$!;hO|t_# z{j@s)lvop+ZMn~O8mo6^&6j2hKTc0uR>VKdohoTj;z*u<-|gZyk7$?_RX4Qhp1t?H zzzl0_<9Xeu;;#;r3n>ROn+kIR#S6WYv$@&}oHsh>(>(~B3rp^pD+=?doITHi7M1a5 z>f{$6C@$eyEn($M36?BfBjg@OOqba$QYq5V<}YB}&c&A_DWn#TxEHdPE~DJQyPkwC zp@)7GNLvwi9E;^xVTeR}O7(+_qIA~4eY>Wvv+=!Th$?8q ze^5Nd1KVOA|NiX;(yHTg#m%zUFz|~m{pQWygZ0wgP9v(V+KL?RS6h{7tM$!4>L!0c zJs|!%eR1OvHZGfqrCZz&qgpPvhNu2Bpce9+g%XF*p0;5I)C1S;PDmBa_2T=H=ASm*mBQ$$fPcHZ~yk|?%?ju z?ih0Ep5gr7$?e`o*j{hx3J!c9Ma@&f<^b44WgBmg9MylQ#>7V&NwOUJz|Aaw7PNqQbF3IGGmLDoo%s z=KZN}#Hk)=-{R9L4bfTp>ukFPvTTntH@s7qJ!0pDvulnW&z7?p=TjeQIG)az^LVk7 zAZpTw3+J;RS0cDb+(a&PY<|QkU3^Txuv}>sdAU4uH2ZYS|^B-VNM6Kx(1#DLIfCT3L`hw6r*%89b&} z8g8Q=Vtanm!+GBM>1NsMVy*cAdEs&{{Ti}(>I*;1+rNz1yf$mQnb^G%g%16=y|oq^ z+8w^Mr+^=da5uH!MPi}C|Ojm?98&D+EPeWbrvNABir{^}!TSy}*nq>!TMkQ$RZ zppW#AVf$xw1U~dTKvGvVk-U}$m5}0E#TP7 zb)ZoO{bGo&$ZFqzQ#yB-A34b(o}F(27^1Z^6XS~=AOd!O&4it0fFYV~DPQ;7ux;kJ zGi%IP<3~HVG}PPgVuj009z5@!^_ak(;K*i;bn8B5L>MCfAvbiT=84z_A@ZSldc> zZ)t(IUF_5?d_f^re{laAg=NtVjc=Vs`z;3xt=R)$c7%h+O>NST(t)M#K02#FrUO-+ zX;xr!Do{ug3>3(6;^<~EWEHlHTMiMhB}EBM^NU>xC+SnxeIrV2mKpJ&32Y?#if`kG zImHWLbtL@cCBP7UwWiDzfG01Y5;_!nM5yUjKg#$y0y*b z2Ka%d3rztyPcsf&SbM39dAhy0`5%R(OO%hl3rT=u%TdCU6R}iTi(SNC)c#$ay~gPI zOi}g7W#LYB(A-Fg(ZZ?*r}cPY;3L|>K6|T*tuS`3oIT@bdrjHn!GL3X3Jj7XP!yWA zPOQsu+oMqz@3*rLadUUzW+xAI;HfogLROV64!YCyITE@l0|vs1>F)9)wSmEheNvU% zm0vK5@Q?bR#G~8RKV8%A8*nWsJ{tBH7~nO1foyrq^pbhihVf6)()RCQ++ESqp&#g4 zBHMQXb<6v9O+e%F0lNgTO$Bj7@vp1Yqu=dIhEKW7wPmcVJX}^uf{?0bk_x|XQ)*># zS_U71^VHu_Ip_x~M<6F>Qj!c@sO}C^e|IpQ!HLe${5vp1UaChjt2t8D2IJXH`rNeYqNJXp3P|bsQN_1`YG`{ce6S8SS$EXeczg)dIon%@VFTa3 zPAvl$s&CsHcPFXK>N)uJ{Kd)AkHe+Yao{yroj+SWIr)8+TDxBS6QtYSx%m^M+q<0v z?or3P@Za~S+at*T=@QMBCN+1>j+r}Vx57aKX~{00G;>54f5UrgoRN1m+@8V_ErA+YJVETzU(!;_ifQ`JW z`A+gud4nOpFF`hyjg#@ar#QRdcW2-d74)J#=;5=|Ek0V~F(k>NcQ|TcmhhD@7xubR z%}S@8&AI-%GJ1%I7%CN3)T5;iP-c^Ga(%^0kM0-gH2HrnQJ)|D`x5nc(Nd(RwAl7^ zqk#B_bi}@ym*K)=YHm`+MkgB>3~whc+La!;VR)D|!Kx8*vNc)tabYMGI=$YD!P;6Y zAS}AM4!xUGYPvex2j-NNTAFXJfH|d!QgFisJUl0W$`ggybkPf)3B2fy#V643G#ay( zp|hz_uZFaIfSd`uYwP-Ks#sZ_0go;9mH{@hbe8C?y?ARd5{$=_5{;!YQ!cgjH7JZ7 ze{5M#xBwKl$1ZKambcD zGe)dNUO^tOBwYhKqP#!BkI;|fW+v?KUqqSE;Wj4p#yX<0nQB@_O~DYCw>6|GQ${er zY~eU;1ZY#br<_S$Wfd+1tVP=vh z5RCIxP1vA9V0(BFFm%qazL+YU%e#h8nfzv8f=H-vqyuCAm^J^o(Sx75Zw`NF_P z2=^6U+gRWt%{`nsgA#|h_x+iL$-bmX6@rhhT|q6zW!Qn=Ee{m3hJz7azy|!;#Ce4% zWNG}z0t9SoDb2PXT?C=5xp)q4N$S^)k(qM#kVlIwpQ&Y+v7G0J%1b%X>5idmKhv|I za$(GU^VW4BmRd$SG_BAu55-=N_9b1@5ROLh8F{tO{pZ=~TG@XK#*y!PqRVF>k-%Efg!a8~LozC= zY3?m)?0b{MAfqzE+A^iV1aHwZ(WL~$r6g&QaWY8hv&!3WAlyt6uC>#ykkr6YIjuS4VvrqJXdHn?-yg-bJrj zfuKH{McOdgMXqUsuR)nj-lFn~mkG%vLVAUKO(2$UdOy@OC!4CwKng#NC&U$tLFH0i zTo_3u0)&D|8)*uYhVev3T*K%j&ZVS)U>tX%5fKHMl)TF*oIa`8h*?CYFTgh{I^4;K zRn071hO-^fNDc_b^*&JZIEbhoV0=!T*eUbmb$sh=?n5#gKaj@b1XxVq8u?ejw@gQg zBmWAQY%2aiXN(#{9go{nS; zd${mp56wPFZV(B`#efL?FdYnhi2<=}> zC={y1_kGKIwG93`S@0%b2qROaCP@YU;nlk`AqB8`Y|+B8IZr3%I2ux3v8kV&=7cPM zEu;q5#Jxy+ZCcf4G&X;=u}J5vZ?y67q|6h$SnvDBL>u{OIcUe2jJSWYTj;bRA{6*9 z<)#YE4=X?T-fMXxijJ+fSe1cYVk!k(qLNOl!G9MmPix9UODr^?$UNXS?7G263OxNY z1G3h&t+AGtpXFvHyH7})6iP`Z#C&j2&l*Y}a@ve#j6|`WK^!ITwWQpi+s%6i8Jm0L z&;yl0cR6d!L;YlfTDfF4jOigwY;Ma~P~aa?0Nf zFDa8o-Np%3*=yZb;D#&g_0tTC|DIF2U|;Gi>}sdLsQ^jI8;m+kb{Het1m4XlNln&{ zz2y!n%Q7IDIqw$G*$Fh6jU`_LKnuV?kh44y^}P$2G}XcX!`C~1$KCkf+HKG{X&N@R z)wpqECyi~}c4OPN?TPKAv2EMQJd^wWd~wcN=lKg}%?~s4p6j*uwWC95(1^)FI;HcA z*pzToa*?MI6~y!SlJb6}AVE#DDvrjgtXvvTLJQXZmpNrz@&*(e_xqr!&bTB+Brv5ygJn?@NEk*uw ziJE}&tx7ZFY>CGyBeO2k#yq*2SPp1tysIEhHh(zh@M~8(uNqWdl#*3J>^?uM#s>~< z8mMnAO+_}=zcpJxGd3@ShGH6<#?P$W)lpgB8k;{ZQAn4|`-x<&Gvnt@P<=}sjt`%= zxW^FX?$;kDnmRVJ&vK>#>!*tr#&wdHesS#G&2tqZKyD!ers+0EGW&3}_1}T+HPJ`O zH<`qE`k88NVJDw%{RdWUqr5#@kV#x!-aPHhI+J#&lOA3a&P`J4qV`dnp2l^x>@$j@ zCV7JJr~aIGV}XFoCRNZi{kFM{8RGV$*v3aR~2Wb$e3-(cLa^1qj;>Ztb9JeZ56 zlgaJID*SVM{LZKwJg*L5`->C(>pgPk;k~(w{@u-&_qA}^ z@Bh{*tpML2m3cc)-XHXS_(I?^dh1A)e^RBmp_PD=a_WxqXbI}R>jz85|C3v!RG+6FG){>4u!Z^l!)XoB9+!P2n@E0`%R5c0>{iOZJI0laHLDfWm)- z-)aunQHh+Vuu2TV*>izp7WEnW8nsE`*DD(S_0F4E2MqF`q9trgH2hLD;(rw_QA{EB zD55b<$sdwGbV_(nF$CXZuL#hIo_Gv@$DZjc6QFufEMX}95YSkNb!K!bsE%P=!k|5{ zIdqQWj*T-MjN|8z%hQSDqr~t^iW5>L4RZDnTOt-*iqDy`mi?KapqilMnxK-B04iE) zEG1|?CFp!l1YM#GR1@>-U7wN?&0xG=j1#>+%RxLv*|qrGK+F9&NYwoN<#{pUeaO$z zHOA!#O{Y4_v*eE_X0j8ZKL$fmIVLbVm=eujHJSY|IVuE|xGO1kI522QYOr7KOG|P} zi(mYcBp-`H7HDyyC1oi;_M2mB@seMuYKrMrYE_7T4P~14ue1hLzr2t%zMM3`aFD}6 zT3tv=H%xSsSh~XJ^g$TEcFJFDQ_ux1%45UHamnc;lxTBH>60lL3^f^pOBw4h-!{Le zZ~x51vrWlfN*@yQJ#sWrkbVjBY9vr^R^_b5H;)iDM_ZqLhgyj zgfIGwSPcAfHk@h9E`>c5?8ndox?2urY7SOwjvG@B&T|d{RxS}oE{R$$nOiPJYA#i4 zE~scp_ngasmA9*8!KjwU>ITeXPtCIraOGIeJKq0TSx`}kFlK-h(g7Du1!swdu$*!| zQ_5Bo%oo7|7c0$|JkIA&MMq;VP&6xO7LsD-Ff(Ot? zdbCj( zETmnj<_4Dl<|hM^zIxwYzb z8T5o$^$AY$46FL)YazraQif|aET9^Gr5ZG}@D;n}8)prwdJVdJ4Q5&m7N7=a<>L}X zfL%+(S*ssX3MyJsq}5UZYH3z#>0W9XukhHLFuT{WoAcbqgC-X0cwXxGujl;8h287jwsJ%P^`L&GbeJUiW4#<_1C(B=f_sBX*$=0ua-WojqOOL?;|4uym|c#> zYMn@;PBk1mA^&;8&+*qswS_^J+a&K};YjSf({Q_u8nriX_p!#7q`>Qtx0(czU zn?pgDsBm*6uI1)v?3P&2ucmrSqI*knT1zUZXt~mo`O+frIqYwAbD~6Rthr(~wnE7Y zjZ<2+1t%nQO=}=Sb!{2Uu?nEs9XeyEwm1#Y@dD^lM_h!iZ4ZO-8HEK<1H>61s{u9R zql$!I+o!SHoxg$M^px3?f(_-jTW+-m=#(Xx*G7Ko_@oZT{;jQxuj3HV0UBC3f9bfy z?u>&4-`Q-B&FujDU2bRCY1Y6)ec2h}(@F5FGd8bNl&}LKhvySc7w@kw75y$Ki*H#r zZKgzB1jC*EM6K8AN;CxEU(-9g%fPYITQMbbv0m{>aa!@(dT3UA=w5pm{wZ2AYY6qS zdi1iV_eT47LG<*}x%Gg>_vk?O<-@@9k0}aD%8N)UigEQM2?ExSdi7WOq|=?zsrwbv z`zw6<@dS%CXfRM|{zswp`ayOOK?*Hlu%Lg*&S!4h&+V09bc*22S|G{;DIWnP?F&mI z2I~MoYOVU(*Mh8*`pvQeg-roP$O4^;8=X!N-M${vryqxm8i$evj|K(bwwQo{nNU!l zu=tWl!u&r}NZlXg+$N#;L1I-v(pW*#(MC#6N=m~;R(L`|Mng%>L~EW(M~+O#%t^=c zi_SKIkyo7EDdwkT;?Ml`pRM(rwWXZ(m)t`D9swxcmcHL6oIhPy$eNxS_<*T`Bwrq!@A&B)5d$kxLsy5U3q zW$kQc<7{T?lcb9Q!j0Wm4R z2#*nw|H!>VlD!R`d;+6=U6Oo@Kl0Lk8FhX$OMgx-KH8imc>zvo0f4bU_YY$AUu&Wn zA-PQ>6WyDnE*zjg_&1ISXI3X?m8ay@fl}6KK~3q!b?Lpz8PWAwWBXaN zzjM31^2;0Z@862bs)}o~%d$Gl>pIHsuPQ+!XwSFR8%H&Oo_f!O#@pdW;AGQuB1kjd zdin$?3+QP0+q=Bidvo14IM%NnIy5pjIvGE@^$2Q|PMiTJSAr*jKoAj|o?o0@TAf{K zncX~{J3X8?%a{+$S$v*eI_X)uo?jk5S$@7-Sw3A^-~K1geYCa(igQ1&Ki6%Hm~1}Y zeT2G?Z+GPr_xkKVa^1_>{{_*2M*|{9o4}*vgOdTZlhf0G)oEw13+ID@7iaGuOzr9x zBm}M*T;Xw~Ebi3{9}*1My{D&vibcFvpQ_0Aw5K2k@U%gu5| zto9_29H{a+)0@N#s4aig4^cP< zkqc@dh-_sC5d>0f2a_a%CPewgiitvL?iVx(Zn_t9!zm zY+95Z_*_z)pJ;Yml9vlIh?UeXe;CAo$Nx?2#gB5i;0XgG&?~wH@^De9%PNQP$}DQf z{;7P@VgIM{xlr5Hi;ZU0vWv9%pUUUyKb6nc)5eo?z~umS)d$(SsN;P!EpDQXx$>)j z_(F5p1%Y94*$quDc?M_V@PhoEY^?0E4^`RXsvpz1{6`srd@w=ZC+q)id>%ZPC3c@* zS&x7kpLKozc*2I;ddk!qbt z_~+Ls&x_;@OrA`VCLN+UGjjj3Z2i9mv4>TM1J@H? z?ZO4TBc#%zb=LhGVc9MyDjf#joljgKJ_GjE#<5_<&oyN5Yd2<1!EX;KILwE(yhyHF z2bn02oH(BPvt9jAx6^;Y)+CSD6Uj!j`k2ws>Ds9TGJ|1>^rd%Is4lWP#RrTj0qeV_wHxZcmK z!JuUE=1CGDsbDS%8SJzRE`NlZDdeF)5)9r0+e8H2yL$XcBy)?Wzx0rSdY%13Gh1iJusUV7aO3GC+-BbV|o5eH$IO+8~6ZImvL{`CG^0GIX<{wT-`)kT?lB7iN z1QwFq!Dj*?{S)+LGbG#kQ@h(IeJH!3{#_lGDbrkr?8VjtUgeQ#uH0FJdjni*!UP{H zqWEZp>ePIzC)rN{f+8mzgJ@J{zrS;BW1bu6bIW}O2jx`Yv{WealOJV_I~>#&ElQMx zRL9HsZyb+_e83UiY}NOR=iVmA#HGkmICuFEe|MG&ewkfR=9ChK2xr(bxbuSG@Rlt2Ea;dY@v-H z(ApnJ_z4}d!q{OR<%?5|#|0*-Hr-YFlssvN^*cB!LH+{6WE)!BS19d5ppy!eSQT&o zgxqG*3%|>`@zk1w0P4VN$9z%|^r|WKr@br$@u|Z9){bcC!}E zgH;d3Al|eIN|8|34;R3!wdtp`UYLX!d{m-ws)>L2vO`W>7Uh;_46XJR9AuA7H(mP? z;-NvQHN`h1kmyg$oC6~xx&s7LotX_+6hGitd75w;u#cz+FXNJVn)EDV%(8XdY#&#U ztL(dyGNhc_2zAxwS%Z$GJE>H)a2di)?8CgyhL+;n0kgrY->il|lrvVHg(h}XYB((h z3!iKI#E|dkes3Zw(rU<su{Uia3a8-$R9c)49>rVsR8wAz4D6WSP%%KdYhMblYLy^wp@~7tp-Pl&{ z1G!1cLVT^bs#Sd5zEW};KS>a8jfs&*5@nV) z{>kl>vMSg*fr|L`3fAkg7nL*nX=2prf&w%lsxsL+--Nf<3*&ZNzr2fdjc^M_@X4iH zz8mT*!?keG(;-36{X)0&LpUg7?TAFt1@1+-Il=u;<+BXZIUnfxPvg_H;USI}dc~pZ zW&5M?nN)fe+3Dy?K<_&G5wQlc?Tav9PJMu_&eubxswaZKzxGN%V9S`^t)r=fi0_*7 z3>2}RvM;-AEc|NIE&RHT4FpB3|KFbQw{v&khbJ8PuPEI6+1iEslDj@=Aq$kT{*Ng9 zgKYgP3V$y1e)Gi8ePjE-$<`s1&u3^2r%j*#tq{X0_Uwf6MJMvb{U1@dA62nO*`V9< zygpI0ALBm?F;j}3m_NcRg*bX!mXtXf{4tdN*!^H-}#jAuQx`ZSrhop*zSh6Ez zK89pthUT(|=2L_Q6$ce3hn5!mX*~vTCwq*_2G>%AT~>R1X$lT!H(;`XH81w)W(etO z4(VYJPg)Eqa0wqu4nM699a{{a2==Ww3{7hA$Yc+jXAd5EfDcU$TXlhm3igP>4DVx) z>@x`;c8NTE44M2VVhx_`<#FiO2-K+0GS*I2HlI38CI#Nj{RR6Xcn;)bCN7>A>nLp)er z<8VPH@$a#`AhIPEds!Sy4HI~F;MJiLALtT~5fU@j5RY>dZv>O@+ca7cBnp2D|3w+a zn_#EAn4lFBp_3B7Dw>G06mRr1QYS9abScsAXR<3OZ*CG$t&-#v;vq_z*!mddzLX^W zl;qPA=kJ=53=^OnlAsDhtlsj4t|a-%B`Go`CR!}sgEFN@G$nyDA>}Exn$n+AEUNo} z*zRXi2xaOI)zq7Uq~elPyy4V}lEfO-^a0gBX~QWQEeSa#$$;Us&zos|NvU08(Yj3O zAbI$5O9nZJa1GNp!K6BXGG6&G8PhPVv#J@%6zPkuk*iOcmnpt=FiBrw{s{cc0Bx9t zg9x5$=2dj&v1!QZQsxk57ARv4XOi5|lAg7c?)a46c9aEDi>13{Kpba6gUHs1_xe-D zooUt?=>7|nQ$U%6f|U*KmXqK7p%A+*%0^y{-FeCuX@PuENnLM_8Ni4nhfSv}%`H64 z<>$!XS;zrxk7f?Xj$wo`ABSxPCM7pQ7d@qMQ>F02<{yjZtF;!aJR}B%q%l3i>2VYq z9K$yZdDK-y3QmDrEEifW7pixKall57Uxqok6}hAqfsmGqTY*YzxCU0SAC)IVsQ<&y zVvs&;x#de1&^7<1J9fLI7{s*tP4f|jvP5A^;z1c}@#Mtg;uxni!sU{DwNf6?lk_pN znyG&wNEF^09UfX5xLh3bTnZ9}mr|6~iI+7mmvy)W)s&Wbxs-^(7IwOo54HMdrIuD; zWDY-U*S<`<*{1j>2u`? zY}FZ7)io&DW>)ohT)9UT`m7fE^!$Ohz~HLEPpTl@tFxP{zLZtNg;gVtRwJ!cBZI&e zTn&tR4My01z!v&R4L)}5XSiD8v>FoZ+Re?7(dPp5Yy=|LT1l)r2I@K{>`E1&TOE5^ z9VMWS14OpmbGTmWeo@y8a@GsE*NdLi?Gqs0h?N7LQ?|c02m^A(;40ZU8%Boe)Bp_{ zD-BvN4LaD3dYp|0>WxP3jVAv?wi=J2o9sB796)3XQ167@WIb9p+FY@URVu9>Kno`+ z=ia1c9;%eq>}K8^irpACin#fy#Rbq13#d!LZb_DCNp){YA8kr`X^dTI$)aw}Q*SMl zXf0B2Do$&SGjA+=X$@a#t>y%jO8^Yb0nK5pEg+BBNh4qs(Deeaz;5lqZtKHFqJF6t zc0n9dZ>~9Mo5XH&UjYnKx6YM;Qr7Lufc9DQwsq>ZRUkEBYo&enrM(`mV<)X6F05m3 zrDJil;~cy50MKzs-Ff!{cqr?5Ht*b*=$t!g>L027v(g3u-~QLV%O21P+tvlY+JzY2 zgoM-m4KyLD(G60FVWxLuwRPjHcH>!e51(MemwFw3LW1<@p-AtcvgrCBvh~`{tnnYP z#nINwwc5+`+KakcKSm`?;8p@u?x9Za6qD>`TJ4jjY2h4c_lD_Lko1s)FIFt?P-^Rx zU+q77Nm6fX*MjfYrx{Sy7%&d+H?bJdO&?Hu?YA5oux%T#;u_p^={9NW*IylQKkaw& z7*q)#)Z`j;d>!zW9MlaTvH-pggnIP*!^abrw{64p#kciMU=NwX4<)zd>4Xnwo(@NO z3}wL&X44EtXbcslj|51Lq)85iwRII~jMQrMm!=Qbt&TLbjntJ7yLt?Tqz~tKj8>Ho zxP^~+NRE1*j&#Bgw9t$dc#QRhx5Y?S_^s56Y78&7^^6#gdDDzIYmBYojQ=H{*u&+9N+l#Q>hdAO7six;w?mpX+ z5@WL-H107v%OS+{3TEJVE+uX=3Q_Zqw`oR%8BT;z7Tj4Vw;A?~8S&>C(YOAEwpq!w zS?P>f8QeL!vl&s^S*5p3LCx9Ou`=0+*~Uv4`eN4(hB*bzW@XR$m6SP}l{sE1*vUWn z1hxnk+zYa}EuesP4P|+(8_ z?j_5Tg^=-SdxUw>&r5%3m*U@+3cwkwPnrPr|!^}c2FzQ5+WbzHG;p>;qN`PU}%fSBUIzH-Cq{opV6mK)C@ z+R(uW++i>f@6f;F5F>e7i)XJc<1iL)H(cuo-ee={eXl-rH;!jDGjm(A(%YQcBkeuw1EqEeG4y`+{(kWZ{}PP%5<>g(%f{)J)&*?mCH%%E zC}J&9;eGMGnvOVk<8_7l{nS9qJ6h-T&Fhi?|C)&Rnne2=GVAhd)-_e3Ki6WIg(_bjx4x*?(ayJ3VAk!u z^RpNJTL|K-|Hbp7_xqvukiH&5Ad;v| zZT|9yL8CKRoZ1oyMkbZUX`b8`3jfYxwY&J2D1+0QFLG6$@$WDng<_?_()6B0GNn|k zzw*q!RQgZH^WCMH1DWh!?wKf1(kskSVhMB&qK3orB)-S12kCSLV;un{5dh3)CO-MBA7Q2X^5~{%Uu5J{{vy&R**Fg`gqPx`8&0 zha@uixz(4h4aZVgtoK*Ho2#|t2t|=;x>*{`;@o^g$7ycRUZ_$`%x_t|2U@PSnBz&U zaqbvQb_XDlYpp)oOcf^38?U!jSRaz8js}{BJWKR6I9ea9zZvQ0PkDm#YOTMz-X3w2 zJFl<5z1(lRSE+Kpxmmm}JWLn154dxE0)Msc>g|fFV!NJ|w*lc7jcD#iqIjF01H|y~ zj_2D}dfr9WRT&PTzgZ#1Hwoq|L6i_88==q6W@G%b-yCd&vCQlL(m+$r+KS*I_#xLu zKfX-$BL1Y2t3EYBK^7uQQ-~3wSc;h@%jqSNBpgtLy;vtF< zv>SToe;rOC+Yzkkr^q9LO=mo@6M_T9T5n|d#=-3+`Qb=uWm*{^fWLd0=QNnaV*J#E zrNzba>!i`O1>-5X>fvwYWd-_w(+WtiuvAK=$T|Fu!*aY6h+Q=(mlLP&ci;n;R}4*+ zenGuc*7?(JHYFd%;zX#Kq=q)G9O92kB4(N}Gq2u0%Ay+8V@oPQ+j@7eZqtkAtYJ6G z@}S``qv)*ZwBq=n>9Uj1w5DHF|Dfe@Gv}=B^>X*1?E{YfsAZ7=E7$s#YRL*9Ey$=- z<1C|b(F>(+eAEkPns?EUq@UcaS{<5Z|+=Gc0#pRAwgYLsf;_+*rR zz{#W=5H*V=82qR4elIk*LlCiSOm&k-lWtK0Gy#HtebZ;uLKRQn};WQ zx>*z#Oi0g{&d^;7QFlANST^q@x?64Z88x1Y=yI!Cb}Z~iSapG8c-ZvBHNIH2jq?Dk z2ZZ9AZH9=GJnTkBxwx*1(I(4mC)5+KuSNtgJRPQ~J8|r@ZdhCF=QaCU9TxSIJnt)H z$g%H|(XBn5skDpUoHzeqXzh#&4QNKM-tD*FlY__$*pPGn1eW~_A$=88IQ0_b_K(u$u6R5{|1pc}+JhuNA5%%(KU+W-!O}&*qQoZPQGE?e|FPF}Jlda~L=QOvngsrw!FRkF=}b3ev7)m?Ba$PiHZu#IeFd^i@Pm~b|A>brtR(? zj;Rduc6^QtcQ+uHaux6L{1%_swo3u2Dy}dfm#9UpMKu0Eqihr#Shs6PpHeuYNM~o= zl8;5>=_+Y39Ukk2N=6X!{f9o8eCiAd9z)8KBpuN0ukZVxeY%n-DH|pDnC@NGcdg=a zC^!04G&m8?wI^wp0r||Ed}Ho2R~e6e`K*^+W8SwX8J{l-*+BTBzlp9=x9u<)1PaF3 zERD1>FcP^aZzwe?PJi_Zrc$9DbC57v#{;*;^xL-Mswmv#;=Mu?Fbye3S)F7f5$nj~ zo=w033%F87@ZXT7Ol3Sv@xmGviuK)&g!N%*qvq?q*&5WO=^M%8-W5vaxus=;+!XN? zQRH?F3Vz0wDkKOUQs~YmV7Q1Y))%rcDfOGFljhIa+9|qE%!*-ji&I-U#g&(El&QTv zFVs}eRs4yN83=b%XysuF#X6zZ!F^dQhfV}m$7x3DA_4d{s95vY^HuZ-UsR{W6KnHu zBMdQ2CB}}W>(UG@6n?!dFN7x6*9C-`(x)v)Rwg!J-q2WhrYS8=D>WB&FIw8dF|V;Y zRHYrCS!cY=Y$7VR+Ebo)e+^P0B~{KC6;iOzdRdDTc5dAfQgSSsp=#+72dr4qx~!Ec zUBxPQ@Gw?+PEjjERyL)bd0KlHU~N2o!K_^1HuJtMQ+|I|?xujO_SrL6_b*_pgEBhS zn^#p@pi}A1F{}PF2&elZ)*M;adIFU~EVpjt(o0==D9-(=7vPiJ6+EXMGV|2gS&-b% zxnCWo`?}*di-hHQp7T3 zfHUY4AhU}}OE#oMq8*f>ElFCFB&G;Tsn##FOW=G|WTtl<>zFhbn6t2J&vC~(;odzDLuOK%u z7*oGr>94!5LL4;bcR<<26Ejs337`M$PF2=?rr%@ADi~rzuq8JBzF&3AKJG~;mS&8z zp}BXP`r|5MO)UMAKR57+B}nVe1BZJ{Gs@C4Yu!3Y z+w<(t!t(;}>shV#=7uE@_;UC&b8l&{z1!E@<7x}n8l3)JPcFjaP(tQubiw^*V|VJ% z80hTO<++t);yEa#@v;-Odb`pgDD0H_ms)_M$yCPcac2CrCCh_9qT@a2Y~kVR0JzzD z;khW$`O@3@I#c#=!V8gK0Ho&Tu=@$-PXv(%5Vb2ZF6M)4zy2bC=O@JB zC!*me=He&W{Y57lXwk(2HChh|!I#U~#^nABbG8%wHRgLdy)K_W0|OX?B>xW_0Y(}D zCN2R+jUF-w{?9Kgz;NsqPFdd9xae6xaz-zUK=Uu=RRNw;0p3>ud<6kkj~+^F9x8`! zsQj<>y~&(y^;qx%eBpv(>4M_$f~G3HztZVB09Au=J!9Qum(U&Kk1C9KJZQw=t;s>naD|Ju%+D2JFj|nf7^edzY z=MD+kri-|73E0tyY;g?6T=h||ayx}*$M}g@&-S~~i2gzCaqknMEF0jctMj(_el;3r z2vKLvB^uTy3dEHZ4ZxxG3>S)p6S~9{dP){0z!nYX5(}Rlib$`E6cmY&&kV8qW`hdHo*z#+XS$|6u<$RAA- z_ko%qPR6K-P(oa%y{I$2= zKr+d0j0z5RIDL$$WXx5c9F_^ebyaeHcT6H(Vv-qcs;@HpQDRyWx7&ZTW*KwQq1s^c zPp^d(a0{n*B79swWn9M{rJ-${*j8dDUF`5s3d+523`hEexo4YMdTF&U&|e@Wl@dgL zu5e_oX=H9tClyS-=jobL+0j#Ry$;*PGy)27S9R!n*SfZT)!M_7|ZJd;Iwll_YD8yWZaH`?DQ z+`mz!extp~>eS0(c>czW`2GD2BjQ`fm$wP1h*5~u-<2W!`==syqrag8r15B{(^c7{ zP~|*+N)cO5SN)n+QJ5xll%w**rg#&hY{!5pm!liU!WJ5(2?zq7$}zr?;?K3CD@-3y z%L7@3QmGApW+~vsZ?cjKmPic|o8kffj00^GW+(Re`1@ti8 zMISTG3hezP(o_&nK>CF{%WKCcEHGtJ>r(Lw?R`It~_A*rQc3cdiT>$<} zSac~+@o!kv>tE#9>oCw9g)sZcLaGw=rVufQ<5Z#C!?hItCg*0j6zRCcD7AFsI~E(k z1Izp?6O{R6`Grc-8Fn(UOS2SEko;XrwmDlGoSXkeVHvOF_uJ~EzQSUPP(*%!S|g?` znB_9Qhg!vWDWs#ABtjRvB~R(jKs9ch{H+=Z#7aX!^lSQZEen_G*iujU3ZAZ7Q~$)m z?8>BuVwzBAon;4AiyFX1rVAnB@l?I&ZKZ#lVwbBFssP2ERLDwhb*KQE{ZMW2>{s*J zYEP=h#qMGonkLMV#?!0DRDi~8|720V`ftd20v5Ht3b=94wFX(udD5P#xi#PjktTcn zqO*|NW&qOqnWn$P+D?Sp7I$Zmqii1c+Nz~ips3a!WY0#!x*12LN zy~f&UfA<;f#+1vt`RalNv+9_k_CEW@?VQ$r!A8^d`UNfae%w-%g76!Q_N3It9quOV z*2ZnD_-`W!B-A?S7OcT%-WA>J9!O;{&5n9NOZ%fE` zI$tM-UKO`C(KM0^q)^dyFazPxt#t1^x3JIG;m$YUy=HyS*s#yH8i#aod31>Bs=j$? zr=!W)(#|U6o+@sW8tKX6YM>u)%Tj6dl5P`C=!KYQ;5z9dlj#FnFx3g(|6U@* zBH-z>1VVRk>*IHA|3s`ML)>QjqQ4}e{xG%^%%IOXp#Q5egqwBi_ubBnKK3W>-Jnf1 z&JKONK!anwS?HS~a=h)ljO6k+16f4F-vd)8M#Px)$iJw6AGc$*CjqZP%@7SMEhetbZZf*L$DO>EGPS*fShh&|y_Ki8Ru; zH2M-SW7cS-m9d{FDlhHz&8lNxpGQ{%&-hQoo-JU-=HAdDlGjnmK%`>%%JaY~(irs7 zaW9@^2;n70j_e9{zCNz~*aQ%(^whgLjk zKu0iKgy0snXr3@1u(BBRI%(fOX>l}i9Wc#L-05LOZ_+v)JhuR?Ne?BS3OeniSspu+ zoQ`Qls>q)5JX$Q=pH87$ey=6dzD(L6Y+NFHLn8srb9l~SWo-E= zZBck_+xIUeHEhw@tWL@4dPw@>bt^WJ9!&8 zB`Jy~HMSdYvSanPn?B!J891XNw}l_PrdhDl*trHqTU|XSY&;>@|A4Y%^tNK^WM;SW6$!_ex zXXC(-c4|R)Ne^W&9`&`a!-03ffuMJn`T9gDV1ot2LfOkvCCX71h#{nHr5**YG3lte z;iz@tsD0oFo$9EI@8o-Au85@fRogxR?*xM8#5>c@2+Alf)9P55N-XNWNbC6d#la$o z$GB?k=*)@u&FRg^#Fk#pE=a|Y*V$p=UP$45tNY?}72{b#2Mw+bL@rS(A-`D5wBHa+WO zO;Jk@?{T5bO97Hgy|a5X+)JI)ovbybA!a}`nIoa`)2BKN1(BzCq=M!kWWCOpnPSI| z3-`VQ2Q&JWgohUaYY+LF03mC;VecQJNaMLOHjqUg`_;GoN%kZ7w`NJ}m02EB^r(i- z9%J-xM8M&)pv$m~+ez)WDOrcR2@l|S)LXdB^UQ!}`1BjpfhYg1Cj;dBCWcoc;rj;b z`%aeSa^do^mh+sk7oM%xM&SD)M$u8xyD^(H)u5Na-}i<6_wy{w)(7Vma-iG~?*(BX zYrI#th!Z6S@XFcyhc9sQ3$zQ^Ut}7SOM)JMSPVvs!%M=x;BVw|<%c%-1L0U~cBh9| z!~<;R_rWBljK8zvDU@q1j;;-fMH!4cxJ>1CyV5zFuTPI|$fvUTgT6r;qmoSLi!)`` z9o|yT7RwdMRhTuH(Qtdc+ngQWQLFF^RmIYp-+YJvcen$PUl32YM2R_AT5n}@wYlZaMt z9QVtut`}aJZ=Cl>)!f)JT5M#`x5Ez<+L6ngua5$GNa#oaj>p&M2Z6N-&03FFn8jqz zw3vtQ?sh36scvxFds;ro;zNjD(`YIx0pMoMTR!h^B1`@_q3m-3{PyL0?^crbG*>h|Lw^e zqpM7OffKIC0BxTB$JKZGE9@yBgu7Z@*i1r|%#o3f^ov zv@4CRIH@%^>43!cVCaFNZe!?02vWrfeNPozhy_DBWf=Hw4x+=j?&Z}jZ{n-D6_RRW zW;*y~ZH%L|fL9>ns1x7m!4R<2{W?Fdr;TZn`{k8sYG>`oO)|?04#UJxHbw0zDb6?M z+27_kwSPqfk{u?_#M@aGG~M6sq7}k49HrRwD+(uc%Gz01EZu2Ymr&_Vua|7h&REx7 zPuiPCY@%?R{6rTboaBS9J=wQIsClZ!1c3-HOMXb}dzE48UO)F!P}m&$q9+wk=HleN zn)VCQyxfkw-0^;Pv4u!CZxxU7aGqI#ZqR=!Iv<}8B^TZ~FT2@1InP^yCfvhK;X1i) z#_c6Nu1xTvJc1KAy}9p~u;D##(d2=|-OFLTJWp+`6Bj#cX>XoBBS}D>*DLHpmxuDI zNgfXgd{Q7U@a+YN{4kpoySG{8HvfVThVt0)X&cdjK3DxS=xZHPuG()xfAhEvqx(K! z(hu)-^MYZKZ`g8*^BkNIR=$}X+3nnm)F1Ikfui^Oc|-v1EH17VMK{cJbr6q78iM*G zAMU=4H!l~_w*qv*u7vPlPDvuvyhEmmoGPy@;vAHaZ>3q6vY}e9+XIP1eMg42ESeC+ zSTo5CR7!tC2YU6sFF6RaOxHx-e#`sIj4ARnb1Ks7b*HQpy7d+YIno_s4CiynkkBz) z6nyF;afR@J01;#0%{S#T#*$$vJ3E3qI|Dofv0?sxX|3c_5-RzU5&AXc_*B1Lv@~{c zp2TlJtwJ?YI{T7Qt_Hbif1EsUO*V<2^V6D5tE7x^C7_Aq$OvZp9qcVeNj4@A}IVwv^Y5S4lq#ou%%nVA5J7r0`HH9K!ZnJ2Y zXUQz-Z^fu1Vp7P83i)ykr3rFWoFX9KX(n^2dupj-FV*~sj$^bc!k$vg@?4G+YPmkp zlUjpGe!igfM}?W^an<7TeDiff)qIM1Me_120QN4&iZhpOWvPy3#kT8;K-5@r;a0gj7=>Qo^%d*)N4m_O|A2aiS1uYr&Po*Xa~^D ztiMyPU!|HfC$Ck`J;SIk#WuB{@5Q-lmTAq9UAN!2U+~nIErp>!0JQq)eZC(_w#GVj z+#)deefH>>IGXS56ld^XNn5#jrcQoyw6P;D*Zq8g(f;ZH7q|r2Le8t{#e1&?Itxf{ zqpkeytFOH@|1q}xz36X$%AS=NjJh_~jY}Y_w6b$b-Zmb}_YhtlTV{mvoj0_WVP*{* z?2xo=Le7>E3V%jlG3@P2wU*IqPR3~4Vgp?JrBNfY4WBw1K0syDn6VereHYE}bnN#D zr~Rz--qXd4)~5+CL|qST$vs|_XEzn4o7AII1uV4Izk!I%^4&{DBJysoL4^!z{cU^V z_E=NV(zm9GKMtki)a(z2ZqlXn;3A}3XDcVtndl;pQoA1!%l7MnwJXfq`rUf2N&AbP zX;0gpwr8^E*T_}Yj&+$b^ffKn!3}XPVqFV7w1^a$N^S#B$#q*fVAIqtko+x z?^#=2l}^pW)TbrR?OS)=eh6oC%+ZVA=Wo$ocp8tP*Je8ETW`bd?5A#g*;r)h!aa9N z5?mSOVedQ8wB`m3Z9zq{5Bzk3aT;wR0q=Af5SU=Fl+@csrB@ZZ)HIH%!_l2&{TUlK zHoz9$vmG{JGit9z@0}IAb0*wkEcy#hEx2`6n3rQZu2QJrLFhnQ=7=$U3r@`f2LbBZ zb#RS8Fvg<&L<`u8+4}XqCa(Qdj~B2s6A8k*nrD{YoU1!@&P_Az=c>t^>o=7T?Kf-Z zogn&j;l!T*Y$3?Cl-%(8MvfccX7Eu;IRGrc`Ps2AtC+q z-?)z3LSF7;`Ksr+ppLsrZ|+n5Nw=k<_8T?l)x96y?v*zk5AjW&2d4OslWCccr5Deq z0T-@&*t}0;-aNN?^lwM<8&C69oR@WzuDMUkMQf0)7Y+39S4f@D`@Fo*qn#dib-Ztj z&fYHzNWjO*toMsf@3$M7w~Z+82iVE>^C#`cJN(br+Mn?Vz{s+}VmH7Tb(UDN!TC4A z#dRR&*CFHxz8LA;m=ZuaWkY#wLi!Ovz!IE)*7y{gy%6FLU77v4HXE*k0Dd4Feu4mD zJ{w`30C78eUJ(z*314gr^O1Y%6QV96`W94aHgcoRH><2~bif=G9zxV_x+ubgXpDrg z;<`wT$uR4SG3leL23u(7pg4yvS}no1M8fZdIheVG*o`^Zp!vf{9ZW<*Of%h85>yPZ zEeym(ockQC_pR?EIRw`P1a>+ER9jehdW3Yj_;@))dW0m1+bBFlq~CH$gtti$n8oU* z&u+EDPDlJRk(eV?pCfaJqgEfcBM*07cgz!o>I)%PD^Q=Qk(lS4n7xOH_j!l+OFrNI z4j+2{FFX={vV4BJT^^%M0bxmI@g2(f9RbFCA=oXdYh7Wb9U-TD5ib(aK$2gfBw|)1 z!l?#g>pQX8!K%YMT*rh$%fupPyOM<@Qn|Zg`}tDm22$6%Qt$aPUkqiA^JUQsepebu zTIC3CM~^A)G9ea-3zI5{?_5u~6rmkp^C&E;^acmwi3P zLOn7v1D-+y;e9Mu*N#wp#tdYq?foY+UV(GpqKdE_# zk$I1i#RQq+)wQwOsAGntlFkz*jai`;=rZlOyexm#wDTOqkaEID&4xyQhP8_0K< zO71yN?lod;FFa{=e=tml?Y?j9gGk{EYvQ|p;7eBQM@R98mBMeLNQtA^pNAsgnB3Q^ z=+@xC$?A|^s@T_!A~>)(IFceHu{b1?BDByXpp?SNh|JsW@GmoI*aStyd~w7&MdW^Q z=f>KF>7G)x9$=j<* zbkCu;5oK~-5l2b_rKV{%ZN#;3a)_qCV z@nPJ0Ns`x57J6w89#t-xS>|)Gb8boMglZlg)&IxcTSdjSsBM?H1}8WKOK^|i!5spG z;2zxF-QC^YJ-EBOy9IZLVAYExXYccUqyO9P(OuVdU8B}|pE;+qSW%X&QLg$yj{R9Zw`wrW&%VpPg* znBPiWz>JlRY#acA2sRG_WGH$Ic@aY zl?DHLdLV8Wr_>MRD=r@(ie$t<;Y18k@)6dz_m9G1pY;n`?8=Z{C(YKqL?KsgNsGIFJ zo*eelAC1x>X48=74YMlA(a%mvQk z2RyAf5)ChsZ3|LUIr>Mr*VNot^<~(Wl{k7yxV_DIY%&B?9|=W_-!SvNQSm1!I02~P z-@Gv03o>k;M?ud;q2LA>` zlk_&r?iPUjwO#54uwVQ9gg?OVi-ayP&MmFcUDw7vFWnOWen7q0Jv+4ruvVUiiQUNVpuyskua5JE#3+*Qlv#btFE(&Y>@k0A1<^zOpR2(32 zt%$a-ev#AF%>iuh3)LG?0f4=Kkluu26eZZ}ggP99+Fny4TO!UP;@% z8ZWijn-|aB{=(UBI9K2wIQR7Ezp>KyEk7E$0F_vQrjaCY-_{P1-C_2aRv1nnA}>L_60SAI9Q$>s{_{f!kGE3q6;M z_^-3eQ=4M-&w}TTp*w3HH7yGB=1^`>nnKra@0Q&mNO#tKK&H7XmT0mD%f36h1zP;! zh9Bbm1$6Vix^r6IW%6~@+^&1gmQsGlWAqBp_JAr>ObqKDs80>!G?M%2z-=V*JrV;c zaLbLCo=x5ahMnrI)>rkJobMD=R5@`1&#$+GG!A^VlsqO3c0#q)3Ke6sEfeJv5UQvs zbhK=6WN`GnDDq+*v-E!^dH`y?3~VH)t*@@L-zc2@Tx)hyB9e0Ta$-LE>gHNEqEX~s z{tC#?%HXTu+ygJdF6Uz^I&f1? zrN*o%ZcI9;Xkp^W2BNWuY5{mHXTb>65z_N8cqZ%VF!8n=w6I%NJkoWWV)$_lX^|G4 z@NNBPdLoNe-E@unMKIK(~t^aqU>v7TeE&Viad`9XkJC3#}+77 z$_OwG$wA-7Df5ZsLE{$Tg_Br^{2YK149ld$OD-Z(6U!J`Ad$;cuUKcIWa=Ji^8MPw z4i9O313Rgk2aXR6QkWd#^)B#Q*&Pk`vxH_Ktd=g-l;7v;C!W~x_x*^Bw-Ci|!J;ZT zwV@3335d63 zu#U%p+hy=O3zl#}w`!x*-f+wGC@TGtYMQ;lvMmaPZ=*x+Y*M*P`^LUJvSdJjcR)gs z!g*);+d@U8kr_~Q3-Z~RqL)&>AG?VR*24^Zh)Kbmy2Y& zFD{AuH8F28H@=uc%zUveR5?)H^$r@9ZxAfQ=>r)0oiCc&F64)TsqcfTMl6w^Wb)rd zrP}b5@dK^dA_&c7g4}5Scc`$!a6aG&p5O@b6cOLquQJ7JmXMbYX8H5JnHlR+(jFst zD7_nCz_sZ9(suvN3mGXfNTTE%kE;8BsqqSRO}_V0_BVn8FCuYzcEPQJ3PgDW1ksr0 z86NM!Mj>X1oeBgn@h=n${zhZ5e+e>5DO3Z|SQGu^2tz4>GRTH@uH*aOMJfay3+2Hv zsPo`W7%&p)yH0F`LA8u|>8868GuJQn8Z~G>CRvyw;JwaMCb>Jem^eQyoq*TX_aU)B4FtV3V}0;qKG-$^&DgNI=G&nnN1z#-tM%!3 zr0L;d4e#Lt(2TX%&@o+t{!-tGJ$mNH@wkB+Uf)e|VlMn@6Nof9^iqvlI=z9$KtdCE z#iO|#)#uUj3e-VHhBI*<$3Lt{J~a@nt9pTp@@bn!zrlce<04I=N1>B>P?RSvB699= zPfjR+PA=_o(x7u!T3@V%!S?m07x}Jac;hUYAdIr5@DGot{=qt_8wc;F19pa{#R*rt zzxg4_XcViY!RF0d z_z!nM0&W)x`3BomR=MRq@bx##y&C$%4Q+E+jkDh}p4F4Au~!p%;iaa5!J z@umsC_k}0M5T`uueaQ`;9DBZL0zJifwLR{B0p0&4h!b-QftTzcumndPVjBo- z4;VPA9Xk&?UKa$B*RK++$|~LHWe~n*!pB>94#goL?a@LiQqpU?FVMf}4+ zB0^7d*fr|}(RTqC`R1B;2&@Ky@o+dPcY!)KaCKL&cOxlP!GkX9pz}RpcWo)AFVIQ? zg2)5Z#bppHQG+X(2mv2n0uH+K8CoD^aIbU|5oGeM?B#~qO(QH?grwJg+XojVm3tPWkwPJ zYCOYm-7FdsrKlatP*SFdcMVY+nPIQcB4}}=$z(~Hm7GLC+5ed2U9i_tF+4p={P;d zID^DEBY+@Yh%+sO$v8s**j^i@ctG9mkQndO5bv@O@AfO+Z6Sc|9O{sghnOiecO!CO z173j`ic8bQ3^y@~Einc@-UA?r6BCmf5>xgOI{Im+Zs7oaH%BQc&oQYWF{y|xY56>1 zMmVtoH@Ol%UXm)Z$}zdVA+9>m*dNIN?xyBKbYdxu)DrJx@IpZuKTAHvw zF=dD?HBvOC2Oe_*K5@Ds)xjg?;VDSb;R{S+SKzQO5{E$#VNIz3uO?x&1prHlfbFjHn~b=a^ApNyRR zjHQ7Lm_~HWdq*s>R6vqPQJI-GmpSz-Qzt(bnJg<&IBUo-OGe+b*fFUnD=VQdYj8g+ z-9JnAB6(InyE8C5O(D>LBnM+ZyK5ok0W0ugI-$=nN9sOD8ZTFtJr^n{hu8@tL^L}@ zI5!$T$J#E0o!3S|3sI*iTOJK2EHTfhG4F*SzR$D3%eP|Bw^0UMcz+3Em&JUy`+Sf4 zJWIy-&3Bpg_PGJns9A{xAt1ntcV7^JR|pWqLWMaozbj4o1%ctrp~ z9FCX7lvGsISdA(RZ}bB+4_|9=&8n%ztRGWaNM>t)X=8V^RCP_g7hja_Tbm z-Z#c@5o(1mk*2D6j|J-TdDf^7?H4s(9A#dEOknyzd22TGcSWMmh{)Q6ziK=L{3s>d z7d0Lljroc)PDT-$4mB2MQiiH>qP$VGS3v?#WUg|O{TsxpbDxA~yDH!KDzp9EyE(Yh zg91j-LmY{5Ibm_?r{XwfmEu156t2S`Y~nJ=jlTBGZ*|#U(>LYvC&zt0`~W@>{V-e2 z@KC+2R87lP`dO>S$G=7i-+Zf)U;V*e(>YFN=)Dh{h3=ufzHyu(hf14MH4JZ!_*52sVJ=(u?Zw>gP)9NfLAb%-!jS3GOf}A;KTFDEhg**R-#R-94uF$ z`<6M;x=oc`)3BfyQ9+(a2&d46blP2+c%oNya#zcqx-IM@KzTp(TF zcC3(x?A#6)(vB+9{!_T^)nhwq2y+`=2S^zIDHtnXyrbYQr9U1Oyto4oBS!KH1L9RD zsIThXQL%_s0M)A?03rt5czf@Png0;PF1~D>LK{nFDd=S!uL5!TyLcr&V}v*fa$1mv zR8#SHi#EUaw{nKO?D*2m(rgg)la;nuGdy{`NByx!lb~0dvsXv8S8uu5%(g>r@*N(3 zRn1{qdtRNVw;vA|D z>B}SN1MRe$+#!~!4z)fGwG#{jVeW_f3QSpex$&XS=HcPx;ZceH?pKl$1Li(X!-J2* z^C=^X&BGHWmdRAkNn}DSs*y=%t|?E@(WHt${Cxo$+epn8*3|o_ zDIV9pkEOQRI5u}XQ@p9uEL_tT{g`Y>!H<5^Vq7yMBh!(2Lt7LxaxF7xrZWs`ua!q; zw2#NsTgs&9(7%|P_a9AsUzxp7oeeeStFY>^k(|S&HP2}uIz5_o;Tp?(W!kFs+W9QP z$2G#)V(wB1VW4@=b!C3{ac<3zzzDsxr*1yXbz$k%!ld0m?_7Ud1hh55Viwn8j@lvs z3m2p=7PTyvtSpv2EmjaNRRR4CQ`mfh1r0)v=?#houJV?rCDe`fcCO`awPoIv00PtH z!IouO&-vlw0*a^Q`JLrSB+LD8DO3u~UTkq|WcN3vLDBdceGYZqK=S4fqfifjE-o{DOOSfOjIki`2)WzQ{6Ph9ITZtHMFbMUR}ucSz- zmH>iyMvrp?Q+)&LIR>qDEPZ4)VP(wX$=t3f(vc2^V0D8?eFE`zmAG*Jt=XpANI&k0 z|Hk4b{qrnim?>9Efwken2l|O5t}^KQwRzUQkd>eCPd}NE-$?NM6bc&^N!!}4+!9>f zq9AIPJ|U2m+D3TVQWzyvD%%DN-DIX(78~BuOdEN#x}AT%t^d54R=Ts*v13X!W{A9- zMY3z1Hfr0-&xc&-khU96w_~SHt%tm~OuOd|3fuNI+v{lF4OGW=A+ zXx+QQBu3gm<1m`im)|WeS<^4s+b;hS#BZ+nK3}ncVC&9C3ev9DLt5RLglNW`^3D(y z+o3;dTno5g{~?Hl!mq?Y*9Ek%=|MAfJeTrq*9Pe~M&&nZUv`j^s%Je{m&C61+ivUt zg1GI{l%Wol{k%YD7)<}h@$;Qe_^oq#Zy@0z7zMPA#$6cbPSO4DHS~GkClz&+n}qaV zNerVQ8n+RkUm4+-QEwz;(#s!~er2ZL7k$3pw_DNC*-!o*X(|l4FLHl~7`xxYx+oGD zs0KZ>zj<^ve5luW^e%s>6Sw^!@t9`*IO=}g54yPTcpL#e&Vnu{7@p2}pJqVrPpcYN z4Hc`4r*D=)PdlfV3#S$+X~fX<&fD(KXDH7ALHz6d`TPxN{|jhY3v`Qu`u!h*80mT7 zTk$Nz3qhQtIPnib{8KoBL@hdq^y@}i}`RXh8*6g04 z<{;n12m7;)o^T3{)>42Vo&h|Jt542%=i6iX8f(w4kH4-@^AG)4Ch6`lEO;Og2_onq zG2{S(__8>Q7mh5(f)9aCJDcwn%d`bQGRM^!KPo?_r2s$>M;0OGPi_iesn{@eGpff} z3gIo0WeX8lzYxUESLedS-k4S*q^XmYF{IIQRs*wx+83gf*)djP)WtgGZ)tu^TLA>| z)x}Ur3Y4`3b4N(7#QUi&%KD<`ua}anuXVnbfz4pBNO7La84J^1UR{orXg3#(-kI!U zNDE-Nf<&bS@olg8g=iXO+GU7pt|mKiY@okNF@?%aO7Xw8m6H|!a4jeIRq!x};#AJI zS@ePjvTlX+p$oHJwNy5k63+Enp`<>mMqb6*bz4zKZNWxN!_)R-5x)d}oZAKIKVaH6i77W8 z3skfp9Ij`7Fbc?UK74P$Y7#4NyMaHfT*_uM?HT--OcBjsn>~@Hp|wO>w(T$HUJVm-=n`)EDRkKJ-^d7kxHY|YS@ zA|}t$#;R=fMWJ6;S0Ua?5EJ7Ox2#bu-QZ%%uw2b(&3~!ou2H+i%yB2#pB_c^+nY3p zEkll0rz6i6Zs(Jx+vf-7F(~&(a1{-6=ZmRN40_i~pB7#3YE101F@k3qjn4#h2s8x<%q>Fwaj6BNK4mw1yhWnoO;F z79c)7{xyM;TuneG=!GCIEeNKdH*k3V2}O!p3CGCC7xJC_JMIV^ynuxlHWIEHK0pwU z{vr*gDkda3&cz4@ELdDaZ;V8{rK_V5-V0oTwIz>e){AhOkgr{IOC7MGPJR zEs;#uax=`)MTerVK!~<17)eSZ<_gYHOfFA0wit5-o9mYtGej0id=3hYsiU~+4iMqc zCZ}~B@K>6=pxv~N>KN7@RD1U|aY#pR(`kQ50fHswd@+;JuzN@d#P=h5a#-O5NUl!L z?`z7>SGz1VzeLQGzf!Yw#SvudHGPlzO%PL$I7$h_e2rOMmTsDMj8t95NOzLZe@yd` z@OdYfiKuJ9Pk1oqu1%h?KtRcRUDygQR2>IVYJiJaB$I=Kkb|3OApFZ=!tb@^ThXH# zk@Q}f=%Dj#s+ml2e!0nnB+ERinjFao_^E`Gm^|kFZ{n^_tsCGoIkr6e9ms|JY@C9* z!gS+TF^e*pvLA9lDMZ9&?9xh7EZW&I)KnZ$9mG3)(U>Dto@Ib6B0Zq_6x~_sv@DGC@sOIEb!!iP`e!H zaf#QBv0Id7zBSFLwOD+TF0U@031U)GX_;t^tEo?pHZjG2{gLXtwrShcd>3O$`997& z2J^&BSV?tjFem@RH&o^52h}|xg~q8|Guu)XBhKm( zmAVakf@bz)5UNoGUM*zX6q0~H@%RM1?biweJc`Wpvy?q@=DC1Jaj^#El1&Tzjj0kZ zvjRIKj`wY>g|G1DdIBa+VNs36&iiF8{8{Yo62epAb($!+{CqnyH*{a$ODIkkhhk#O zG6AKOT#(r=JVzQN5%Pw17*9nn4rHhywwZ~O=wugWyua279O2TdTZtL{>$6ZHe!gBW7=5urUp`5C>&%1dHa zBQrU&w(0YgXNvV~i`7p{yMXiCfEu5tA>V^yaipPT2#s2$S_y$(X_Qa+M`;6}JE3zK-3 zw#1e8jkiin{V6!#;^%)fFd?$I>P{(GA6=dR7r45+TUr&cYLvCeCrbU%=Z)IfC{jgq znvw6jzJe?{r@(C!awfJctU8?>fj-*;~mtV!?QSqLaKO??m+O9KC$~wj_iW_^n*( zbfDoCVWMF>52bz2cMDF>aMZzM)7lK#j!dHS>Rm8htXLO@NvOwvCL*yf6A?5(GSB~e zA_C5+1i@zXvJa8+fmcmLWmUk_PIyyrPW(ZT)S~c37q8?+rWrzJk@e341Xz90nckl5a?ygk(={p%K@x70wez}H-amNf}5&CYKs3F+JEcW z!v~imt!tv<68{7RUp5;7Wq)Msz*HkSt2hlbni15Nu{a4x*Yh543r#&sYnsbb`znUk zfU;msKvKP-U&Fv$GibEs@(fU{w=JKvfk53q)_Qb-wZ>$>WBdT<91yLKdZ&%eZ2*e( zadrO}%etoDbmF6Qs(ck0ImAc^*J!x_&eC>Gu=42-ne@iY;0YE zUWDp5H^5Y5?`Uv;@$#To`mns`@bIrn{eMW*PcQ$~r~fBU__XBsveP(z03FQ#|6`=_ z|L(K|n26B)A0{FKWdCy_GD-HIEUd2ZAIbb>PE^w0EbM#qT|s}cum)2_YD2ZAv$YmK2d^Ei%T|1p)>c=B=E@=)vC|KZ#T7H<$h{H2 z#un9AelH0p%THB4W6&N*U@_itU_IX%)1mSvl3Y9$7|Z=SL=K@;^KH89`|U7I(~aOn zt^V%nNK@VE8iVJj9=hiG^PlvAsKVSfY?r$^;QaanPCz};H<}UJtA)d)xR}8ng;q8I@e)ZPw-K#;=&4ne!MTcFv% z3!hU0Lt`Qt{Za0SALG3Mn1+rj6Dn~qW;Gmfm%K5Z%mDLyp0^o`*M21}T zP>5LvT*n}oU_FryqZ~e>9QbSdWhPWIBr@Rb2W38|3OIeK_M-HdV;67K@kDwnprcg=z9J*UF?gq18|yhP3(y zBGJhqW(?+VJB0(4uUJ&n-XMKMkgkvL<@uhkEIMR(3pzGmdOd?sH}?TM2b$L$MaOR~ zBps1e(5v_Z)N3rcuyObkylKIoDbDa-K)i}uW)nXMiubK5lw~botbnrJtvEFNuxVBf z4GsmrSK)_<*udDiYVMEsa26LuBr~2bQ&Z2^Tr2~RAFGMRay~sq^+AvUHXq#-F0x?! z0-lK%c&!#6PSyiOV{_s>1UL`b-kqC4;Z=Lp-)YrYHI^aTw`dWdOk$F=q7;;uflp7c00coIS!z*t8_p&6U_`$?j3%zfa`{=Pl;4ruN{5iKa z&|+TYekY|8^}OPZDUegAR#1vNID&R533;2MNj0RL78r+$>qBQ>NUVBs5ifG_meGHJ zObh)oA*gUuEF^GP4=*5bG(^ungKETx&p&B)IM1@8aK!9h4{7yPzGe!9)VPCe3R}p8 zk6Bk{eMA*)w7@Q|+5+ZB%`=kZn0#)n3s8K%ffg)&y9W=f*tn-WX*!}Kh2lNfpzFs8 z<|~^50Sd8+AmytpoRNax`9!CyY+|IsmwaMW(p3(nWTEuVI4W<-4_3WPvi+So7k#M$yZ)k9vl_VjGj&RpZre7$q!h-M)>;-pYo)t~I#U0$g!gHzMBRwZ^6tp3|~{* z{1RK*x%gN!F;Zq%N2A=LY~Q%#dt%>#uikl4TbIwp;AoBiW{}&rx>2pnW$18WCdtah z#FtJ$4sr2Ww!7h;(AeR0N$EN4LnicUkul2fdK{iZF@jyGPqd0WNE^FNqox9It8bhL zZFTI&p7HZMYM$`b7w4zK*}yMvVDLw^Pf3ax=yGa9`oHcr8DR>t9o`_Uiy>vTIF*G% z)4m_Q?RRA@bBZ6{ddC6O6T_-v@(FZ{a63OLxFHA3N3Fd1q1ZugX{PjcNl2_B2whI< zN7CHz&WGd%kT~n}DamHZWDF&#u=zWp)QO(Oi7h2xd+xb3rpH~e>joyzFzw9Z4}0t! zi&dd+)j8hi`=TmI6tS)EF}Tnt(mXccMZrIaF_-Qui+L)DMDitwsu{@_HO^GPAQZ(z zltfgp&t_s?vkF=ntL9543MF34`lz8XJ=`aBBVSj3zW332BREGua#+<8&=)w*<1AVD zLBxs6^tIi+AgbfFUAO6>nRO+*iS~qBDk-$Do6pjYTSf>gAEc)$K54qT*MBA=U?}zN z&}O?1_%73v+ztqBYMDedj~f$ypSmfYb%P$vhuEU(dq~R8L(S1(vzco9b`{Mh$z8T6 zLGkAUU){>0b_;*fo_-wuesUN)^|-^@)-Yo27QuV>xXXjmIPNcXm4#2ZH?#apqCy%T z-C=#7FraZdU+TK(Ka%;;>oVu3Lrs*X`97(es^q65gD*{sb7t3xqSiZxruT3eqc@F! zWZq${Y4vvWw)J7<^sU8%JaQ&)y}r(g4X9}od+e_FrJfk>G7o(!(e)Jy@vTVn)~B&Q z^~7DyZAd5+D5W&g0F;*h)Dz|2a4~;jh@9>M9tr_M$3EO{;my~5`bw@-|1U3+`RmrU z>a*~%#~lvPFXu1ZOok|t+x(#W`LWiUAM~!8vTgTCYppMmdAFbT8k4gOZ7=!6@pMr9 zn!U*V(#u3-?ex_C>hW|8^!(6v^h;m-oWgzM*8L@)=wJ(8Ao~#Sfqdt2Tjx>r-UDgE z1J%J3ht&-|Ko%>(ljzQKq|TFK#*s^8~>HMdFb$oIMFZw&LlXx49@HtZ#h)42S}NG^~Sg0(WJd%9sLU>SX}WJWfp@FcHbvb4|kuLjMqy zvnQSB5LBcc_%1)_JT9ngPnZTLI0r7Un$obsA=tVzNK?y)HZr(z{_PVcaV<{Bjx6@8 zTLKon5bEfVDPEo71R*GhkO@Tq`49|s2-VOQwd4z3?8hgb3+=fJEsXIGvk2Qu2s;2I z^Yvk=uQj(sBn+f6Ru%Py?ZfX9!UgAi>U{N{@4~@wBOur!pl~B3c5Obh`T~;qWo+SA z2lOyhZD_VgOr^+YN_+T$2)u^KFABc$aKY03k)(+}L<0i47TDYgkz@@~GKx_oucLs8 z2*X|!`!tM!Mf7_RcoZX5G$*{*`+XUXg=oG&&(BmM3;pQ4Y%yYq9)bfhq75<9`|dy& zx9~1T#xeH#Q>=SVwBkZ6_r9_Geylc?oAN&X%q(I2w^(YnIFrO!t|+s-PhsR}ai&V~ zBzt6QXtXwl@h+k+x(mXN3@@aN4){9U*`2c*UbCjoI;J{()SoYuooPsw z-%DM`O^XD9%WzJnZWfB{IHq~Wq#Y#UFM1jriw0KVreAcYU5Rp`IHq&zr{4!AKQ5#{ z!)K&AC_y;MI4NepC1uQ9rXx5Bp)F`5HGa9o&1@6S#O%qydXdbdHse^~Q&V&~5DNdw zRA)Ay^~@wc5F|@_$tM=e5Cq}|+A?Opf5|7l)Dzhov)|vt{o2n$lYwSD1ILxl5pv2A zNy-sx%#m39cOoLEoGTBw;*)Zfi*nx)!@3ZsigdzoXhIN3=czd586^EX5s_ZZ)nIqX z=!X=!9ZbyQ+gxPgZ0Oec(Ohk;6D)u%_=H0Dw@0_b7 z5UTnptIh_o-Ue4OBL1*43fog8*#ZR-(iLMx4VE)4{h%nWnwLrXJYixa_mWQ(DHf88 z{9(*n&~xxZda07fnQ)oR7}CDxKJPWqRJ3a>l6k0s;i#FFsTm*>(;obxnOu8CUAvv2 zBispVB@K;U4e=tG|C3K_s&jF!vp_8LPCf$y5yoUxW20$(dMJ5Ebm3pEeYFpWMmqhYj64(Y$FM5?ss zRTAf#T0-oCI6-)=o5tDPPMNrvb$wu|q*jcb^n+^;hAQ8HL7ITojVv{H zlIkSAgWXqY;|gxOFHY@*i)ZP?ufb>XJ*a_r{Bf+(-gQwzg53r?S%Y%)gMt_aaLywT z@UZZ-;T}~Il(cm!Dp?wKU&&Tp<|s5+AKgj@ywCnoAkofgC-0CHV7k z^x`P>oOA4^1Xw?gDawuAtEN2-3qC%Mh0~1Bi;O=IjKi2Z!MBVd5(>htj4vtItBgZ& zNl$QFOyHzW;I&K;tV|FA6A{8mQm#qzkqOCl=up%YR8uKPtqFRyNk+mcU?TD!#5E~- z21`wcTev*BCpy8PHpN3Y&BrzUW(A5$lFBhKgDV1;Cv>u@DKu`Yjos3`sB%=<28!)$ zN}y#%b!CRpboxV6D9tejFCDyADut*iF$y82^6`w>)2ziYq+aS2Y0a$1vC=bSU)ycgl5>+xIy_`G-Oe306NucWMei(o*@d{oO^sG6)@Dn%sMLekT0tm%AM zNNr^uX;QN^ z40!rmZV{O#T&*~ses4_mj=E&RbYwMk^?+{i=gR8WsulT*c~yb6Yp#V)BVin=GLJ1| z7;2DkY3m5UL}c}kWPSsk`(+}6>IS6}F?mqm25BZ!bG#7AJ44L9Nq&NPuD01~xk=f& ziCBkEJ-Vp~^Ha?;i!>vMpx3SMG}$tNZISLusu9I z$tm^MGtWVl&xd$KN97_1F;T~ImB$10U$6)dYMu{f!wz4Uo;0WJS4y3Tt0=du`b3|+ zjx*aUOv4XOJ4{A80tPqn?@n^vj@G!(pv({HHze6S zD?F#(JAXnyCI(R;eZIIhyP$LrdYgVhdn!b;cEN9V&Ir=@$udUGpm8Zea={83VQ#ye zTE66VC+2x`HST)Z_n0Q|S%xh6N&@9rXzhyo{7U-sb*WC0+!u5m@eqY_3ih^Z_0O_u zpliyKak6a~tutuDh#RA}87y*5eNld8q{Apg{KA^s zemyIb`sTif;XdbcK(aY~VcUJi8|YH=fN~AGN`{B><+OVHW+d zv+XvUA)VOwap3f3NaJzj^w-$f?ZjySf4JDF#*;BH5s68E%B+4`PQO|GBFrlUIdYGy zl`aV^L$=L@TO_yM%selHp3BT1yZAseUmne%Pz9*Jbu#@g$^1J^0g-WmzmoaC6A`7! z^;iZ&x!;ocp*RKd#2lsHl6fxDiG?ZsfuPU6$ZwUW_a@RRyTwaZ8oNpo>n22!2SieZ- zZBKVrmTt}0e@o^G?(}{Ryh!GkfAuYm{h5f^9xc=WlKGY26Orim+P0kC8N2^A5t$24 z`8^S-3vFEkxr0Ft@1X_WW1R6oVaTD@LgU+T@9i!y=}ai3k(vgBvgrAz>lE5Fw8y5aD~9Y*R%>I?Nw2 zKv7(cPQ#eDbS?%=M5u;#3$CmrXc#0IMVP0qB49ex#$_d0IiOgCnSNGVcf3Vz`YFZz zaD@Pi?_-75#{TsFYWx5}5M(36y<%e~E<{F%^6Fz~loe@1v$veARQWOsn_%3L&GhvJ z)JVOw;9J{oXA;{J{gO(t*CN8c;@@VJtW(XT7IN<76f}=>Z0g?TfO*fYx*^#uthZal zE)27UfY_7nR z-4TbN%-X9N3!XS^r>wsY*uK5-{naGFvW*asWOfI)Wu`k{Po73rm9UlBM#Hw3_(>Kg zD?9S!)pyoZw>@Q_9GJzi1Ch#S7TvNMZuDLJmRc#3F!GZG6Ehk~<)1Z6CjrKFKVg*3 zqRva-OE<oELFGd0+^S>t|zMUMFy@J)?<6c>v&gZ=}b&poVEOWp_#JLK$ zDT$-*_R^GuLd|CStAguge@~az>dbfHD%%BxoEE!bGm0Y{BF8>JG9P;BdgE~J#I<|u zhvH^C6<;ptxJ&1(bQ{7K-b%Aq4%*jk()>hqaa5kOs(VnQ|62Vg(+5!Z*@Cgg<8`X@ z=jS4|Swpvb+b#{!tJB5LAk-%YYH;wsM7Y+!M7SRT#Y+^L_=5;J#oK?bc~msaFQ9f+ zynNokA1qrtvPrKr833|@CNprjGwCR{NbmS_ud~Zb{O4rnnVajC-TBX%&cC)lAgktu zu^w6c_dwTB32@cGY3?se4S>|?#lT%IV}3Y$cq^x*uCVWCNm_eZO&f5FtLvX>t{U%Z znCTsu9B_;WAZZ|OJf`js5YoW4ZR!~W;L$Gy<15he=E2JPOSSj~hW?u@zWz%>UtjNB zKLZ!G-NS*uhqXSTqm%Q0>clTswQe?mfxbQl{b8UVfs@*G)Bgk9Gc3qM%gfux*Uvv7 zFeo@AG%P$KGAcSIHZDFPF)5HbIW0XSGb=kMHxC%;7ZsP3mX%jjR{f~1sjaJTXl!b3 zX>Duo=Fvu*?H?K*@fjSQn4FrPnVk!wnqOL8Sq)!Y1MZC5t(tE3<_)AU+4l z%`nOiL{diUifJ+G48}9^B3R-6(4$HEXnnBk%c9Vk`qETZK2!LT_0PFW+F3H>PgB`g zQZ4eOsVwuw>+iYCpNK0sOJK3i0u-5+fLm9#(xmJj#q3d6uAv2$aS+?hC%c~H0-{zQ zuCM&r7eOYT_Nsz$dnkcLgB`Wk>f=ZT|Mwl*7bH3jsg!G^@p>FAP!pw_$-wV$soolX z+@L#vn86EXi%5zf_DHyIB$7w~pEZt8)&r42s>P|KYda2K_96u}Zf~|LnBgiz=0aq* zGk=g%PuDDb=o#@h|^G3K^5(8#HamVo^dZ|ABz++cj#CkFD!ZepcZ0Rian z@`|cpP2eJ7sD7LznZCq+0b_{1lxN<^vLfIs#BY2^+Pz47DZjtRAVBZ-_nGDq31uAJ z`x)LjT>xh<1ZFQ1&hxI297NB@4AB`SEqe_HCHGD+ixi#KOD9Iv&avMpGGLsXoX%{2 zJJG<2v>o=dG==2Y08~W9B0~*7buyK_9aHLqZ{}59@u;Mjn|wH_VFyO>0e)JY#Kl$j2cAsXVV&d|bP1cX(X4{*kQqchyMZ%`=S1jZqF0(gJD7uNCCf9ctvZBpTQv&D|omd;eY`rR*MPDvv53sCE*)$0-|s&OR#JEqgfm0zdL_8nBN1cow`4=FQlLF;;2X z!&v^@~JjIdo?YjTi4G3#1eyoLQH`u-Wcv!W(wULAs0_N8= z##hk8uGQJ?Q~NOLCtwOlbO9#P4uN;(0Vk0Gf!*H@!+z$88j=A;0U*)JXI?nN88Dyv zJCKcN5Qtx8!U>CXq9>jC5XVexbZ2J6)JK3bhGf3d7wN)Vd_kf!k?s4ti0;q)d0u6q z`ipdv;++SGNMxbM8+79+ZUla-P(}HQTo9Q5*d{t^ zm2~O1fjQ4QHZW@E#F7fGlFzX#`bDoZTH~T5pZnHu$k}c?hJAqIGpv}jOmD{fwTA#6 z#KCbtsf!Ft@B)&6c4+#LoG?UN;M}z+9H4z9iWKu5gZZN%jTLb2`lf@6p^Oy>kqd)Y zkR_onHkGt^mB;#jICm8RL&fRb+4Vr8kOL0Y1KC35>mo(aNRfQq;7pm*b+IN=v0|Ut zY*o^AiGgIX@|;*eQEO+Z$;-VfNWQ+dv&?3sSpBuv+}Equ=sruuny|q!K|3M9z3WIV zZyl-!(A$TFmgrE3FAOT*R3+rDYhZ71#Ocj`<02OLB_zK1f<$i>(;~nVJI46&b(eyjG4}9+atRr$zp@aoOv*A}Ml<<7g#Qg@vatyd%EpN^N9 z9}jNZW-vQN<`CB*ION*7FUvi#B_yCOXR#3UDnLH=`|EeW*H22$T$zTotc~j12$9eK zFW%nrp{l*#`lh>ELIIVMRw)rtq(MUI5QFZJ?(XhI=c2p2yOr+l?pn`W;CAmT&NrM$O0~XzLUTH2-^K^K%aJ6kGO)1ZrtHAC;fxPu3Nn(Y@;R5k4vLC$ zwI#Qdr!Ge;BTw|}Hk}d9FUK0O$_u?D?;Ft{%8R2QecM{Eu7FB(d1>13s<*b{SlVBgQ{qznO=wNiCDPW`_I@4qfxV=~Zow)^CT+`O16KqT$r{9d-RU6ZQs~^r*rqgxxt7)_H~2`7qgOro*{N%Ncpx z8L!i+Xw`Yf%Q+_5c_q^&y2<5%wF}|8OBAf@w6JUV7uP8-*RW*Q$qv`hw?^{i&a5O4 z*indRkRiM;*GV9mHdhsH0W!}BNt_N9T-^2ze;zmqaiPR~q;M^Emj?1KE{{)&9`YhA z8RpPOl~qO1@W%eiyDFVr{QwJSa8=}`36J%LA+fxPSfQDxgoFCgr4Joj=Y z@rFLCEP}yFiT8vR?n$G&M<*JEv$txf2WA@LtG7M@ifCSnK74p@qI8Jk#{YU#S&yaizrP=Xk*EdB8kL;35fxv4tz}X5Md=4lmv- za3h+~Xebb&DRBSpspL~@Xx?>M8FW1!^gHho#VF$nE>)BP&MH9Og)tF~brFoit;ar( z!J*-Z8-vC%2-`=3*<~G)>I_fzKps_;pW*?>`Is~l)|(sFuA!o@)g-QMKND*ggwL$2S4W%>I8;#R#-4jWbYv2_n1g-w#d%LNWBRZO71Y@7%MLBs02!Q(tk9f zogYLyafetcMXS<9c*aCCfur~KAz}U((ZTnXXr-9QKb7c-m@b9Dga@(zQi-mLeK~}a z%WL=WR3s1feu7owG(mGZo%HV5tH;76Au!qSQD0Q(1EzC40tt}8y$ExxoAIO{{roh zJ26i>QJXp_a238uhbgT@_gptI11BDK^XcUVFg~6Hr-xFv0m8aW!XZt@u1+FQPA0NV z28z(6)yd?O$q&Ua;?HpBE|Q;!#UoE**T|8h9Mih3~$o0zxHxvjV|R#@S=oHI7((+SsE4A3&FTwn>MGdWyfYl303yfZgjGR+v+ z9kY2|E;HSg!Jf9zN0ouROIj!GnBDJ7qi-s0mK$7F*d$$KH#oMMK8D95u`(-3`E}x5 zBU)N78?21A7oDB!iJ&T`Hf;LO232&|4puhm0qh{Y;nc-z*U zl@4!T?~BnincXiI+oFd##FJhnrtR_uPmLYXNXsz=Q*!tao4x z)P9%r`geP=)_#WfhSK6=AItpcP$kH#=C2@`EVD2UArKM z0O<;~+&^Lf*cHHBhc5Sqch&&Rb>bK@b-W6lBin{dUmpLq-`7`*9fr^?vdyFA(-SD& zdUAbFw?fg@KV0kn-rm9S-tqYz(aLqS)cUva-nsmL%(4O|T+@|f`0?g^)C@K*OI)kc64i#X+AB)97O}HOP3*xaLOX}S$ zS?y0;MV}D5kAKaQee3T1WR}qf`ftpsqd1sgq$@)@RqW-SgctyTiC1`SXMxQWbwqj?KopiyQ^=X~g!7e##8DPTkPPhfT zNs3o`#uYVYd#lXfwlv-GE#Co5cz(d0&D9 z$=XWO_ce%e^gov?kJf-E@A0GyyUgCn#R|;zQ;<2kaH7do&DPak=)hU5~AB?14jv1I6aH7MZbW?PBL_K+;J@3MCqJe@BPrW|x_WCvJd(6=dT5lvAEpW0h zHu<6eE+Q5lJQanJ4z&UL^{21Ylvq}aeys0G7pa(Ab(R8%-#RY^W^kJf3B?4nEIs(CLDN= zT`PMdBhGSjBlB*TEG<%RGYgzCNrC+yyt(;FpGWrbW8qr8XHrGV-`y!cO>b^-mL)uP z$8EjUV`LP6n6q8n%dxfnznE~}Sc9r{1`B4PmJAhbR0WQa%_m2;>qb>CU&5z9Ihozs zd&%CqAzHY|HMG@$LYuqajKK+=B@_NHCR`Pde5CNrwR1Q=WhO6EH^{fvw<$sBfVxN4 zVL!Y(mYng(he!BnGxFhL?MnZ-QF|1I z&3?+Ce;3n;13Nd;h|m550mB97-h_|8UN#gHV-9!5i@Ik{CDP(|^hDYi0Os`HOnApV zbE@+X6K>IuyaX_(lWc}B4BGH^0p@fT9Y2sKOe zcF`gW6o;ga!z*0f1qt16q*%dXMR_E9D8us}9}8)?xvy(qou-!@$1cg8-uW=xJvJTB zB#Tb%kX@$!Iz6TLN$>li;^=l@c^>;muO?}BO#c&t7pe4MU0HnT(b|l};w(u%(-M%K zY(~x3EN;}BoQPPvr(74`Tloa>C|>u*(Gz;U?{1q1ZS?{sylcSm@+c7o6AWceT}cU^ zC-8#b5qA$BO&2HQ1pH=BOO0ej)&+ws5Ce? zU17k{(ljqU&&aB0YPNl}Jg6tn*h_qRk#ww}ylh1PJ(NWO^{jF*Am1YMmE3$rmTtTa z^N)(2ncdsd^f%Qp=7L)@hp}h1A!Yf3v33kQDQ9*20edRHdbrNI&+5bzY?aC_M@NeMhGhh!zU{dGjpg_^9Ylgilz z%Qbk&zx?@SY|7Za{!=26+Ja}S+%{Rl^UX!zV{k#TJTrntYNiTQq( z>|($f>sU)Y_UAh?s0lw#E~{0P!=B??W&4$=ma4_SG}OmnKK7Gt%Z1qD)Q+Zw4><1|d= zMST#z?NA20iCIGq(L_wcU9nfR)Y9Z-Ig&H_eil>Hk@*z@XuBo?R@0PB6;%O#yFuA@ zGp&YaLUWkLbB^PYQW;itHg`v;3UTx7_*`+f*Jh#y%*OVSpTo_&{4KG7G z*vTI6<}=w0;p{&Mw7XuS#IEWT{%{xyx?ZM}s_G7kTYiduxxyM$)vNvCD7L`0j-vyk z-`w$m^HJRM{mZJ~%&E2&U-fX5Q3v<1|AutX|HPcGz?1rE+5ybztKq<(6~Xz!JFjeB zO`B7nRn4XCS|*~-9z6`JJGy!52(c4~V>yRJ;MDKabMr0=1E1I{?H~|>vaF4N%qDd^ z_p-r$+2KcU-?QcIuZ%To!cv#Rpxa}xRNZC?R@$$c+mi*o*W21sSCdn}q0@n@*{j>L zM(p~1+Ec9zEC|$uA4c6nr)n7F$C-ajczJ*B&92=eVcXmK^MH422V{@0SAiKnfH|EK zZ@Ae{3|d{1f^d;G+@7C_-wL$c+|81aIKy!{BPcpUnbT-zv`S};aVT?&L*jzR>AwY3Ij%@phIImcX~dK^3s~^ zCKJNSS&8z>+v#;Q${P`DqY;yz4v8pP`Kb9 zHe&Fd`IM&kdd&Oep8F0|_{`7yu9-OL(D<#h!dH@rX_Wi5%fbqC!p5<}wxamgeeo|u zdC*Bm=j)Bv1NJ4_#~{>z{VBpU)ag4G%}h4W+4aYSbLjDBekEd-`ba+tUS%74y-bN>y8sG`B(cR8%}3I+5A@q z`7soo6W1D=K{{-zVw%v;XO9(V0QSeuoMECwXN2fUc6r`ZMFV8K32J|4YOIgSzvWaE z%r%_Bpg$xZ$)#+Gg+oY+rbb-o2ri;WN*bpMe8*0$Kg(;tzA}&mUp?q@!M-*E7JVAL z{GfEp;UR(xj=P)1=2YctD(|0@WqY2zboX*(u>&e|2SoYn5Fa(rSARgH$=B6NtGO z=Zr#AIe_G`pE>XL=_%!ck%$e_f`>DOPM=Hx7o7+KiDz`ABc@)bG{R$VFtr{{{`#U{ zPwBXXd~p)YQUKQ~cnPT7t$*`cO+H%+ey>dZEkuOo0uSOX#vwYQ=To-298MKmM(XoP zE9)tanjz4+Q*#9D&v$6&PA4O46|g@Wt00qh`n5OeF zhR0UDOOICm@h&aKl2kl30XoYJwLfwU$0nQEx#gRiIfd;ETe+p9dRuvwtJz!mwWpgo zmJLYyXrCLMV{tQ^X}BdnRa3qi&gf#8^34vBCfg}%!F%Rc;>((aQ8E6%WRS+0^RqcD zjG$G0-v-xk922SwvngZhP9Zc_YV^G=R(i}g)9Q#R2m&n-jO$Y$HreOP^K5J{8RcNx z@V?=hJtZso)Y46_!YG1Om5YIc_yk=*po_Da_o(yb()Q5+KQhztAb7)m0sB34mRW)m zYJY^8PX4w(_Zeij2n@&I*PsCN39UC6E|fZ%JEv179ZbM1^O)h;jP+XH*{uE9&e@zZ zGV{3*KE|E>*$pkLAi(2X z91J)?p8w7u3$1K7A0ZS7R$&U|xIH8wLJ>I6!3`}`py6G}mjySg78QC_3{zrk!EwjH z?7QA&kcv&|tVU0kYN)X9GDsQQT@_I{GOmV)`;<@L@um=D0`{kx+5UO%FZ3enkif8I>ku7LxHvyHl&0L!a(J2-NQnPvj$OE zyn8sZdN=K<1z>-&UqxT)rN00&NKWmK1iL`xjzUe!#$zOjv@BgfZ9xXeAk*+rW4h=V zK4#j=WG;#&e1i0CO5|lfvpU60aFki&>EIF5k$q=_k_VO_+mz|#|CKvnO{e<1bNBJ^ ziTc@Z`$HJ34zHhIfp;oBz{_aUDkgu!Epumo5_y0O(h|>8a6(fdVz|%tv?S>y6myvL zE`tP1=IJT)OpdZYEy)isoF$nW7wbMPH;{!jvik(1&EQd9Cbw+lRYOBm%Tf9LsS&L~ z8s}=cc)pc6b4`*y=SKb(;!i}B5>`#MA793(CdEEkjhxJAV_4#oFEZB_*F?tfvN0|_ z-ILZSbL#TBz;!WBWO++9dWeC z<`t8pb#H(E&LFkpkNx{7_`by*sjl&f`wut@p(nvhM!v;YX7uDMbs)@(djFhME~wov z^|54x=*LO=$odx_+4FSMO{z!8Q@b7C)}i1AUovIzl_^W)Zpx1>f3Nydmh)Ez*yi9~oqZU{5H7DO`>H?+j7}m}TxSFR$p^F#=|p=dplUX31T%HL&68hl=X4 zzFo`Tv&?H0f$Sq!v*!u<*$y_SM$2Rr@o5hb8F53L;8pP(InFuHCHLK*k&`9V9<`vm zcKdvEUm!B>w0VASfBYl4I)xpHERSQCX}Gz&75Wb&Yp(y;pQ-EBs2Q$);(BxEty(&t zo!|E7W?e)Ius{74eF$|M?bbYhDtB{RQ6+pBS>`ueG!s0~%3Y0j-F@Y*|MV_{40@$8 z#B}yAmAjig=RXE&60sEumt!}h; z0?aZGT#f?vr!eSdN{(-0r04e3r?9S+n$4uaF=4+t>ixdypA7Pl<=A|b)9GUHbBE}s zM>m@Spi@elf)gNv++|U}n#Fcn8eqOX1U>2yu(ZD%09Kjt)tPrW`A%{7_RoK>GB4Ev zTTc)g%y|a%U`*I(;-fRC*F!L9oiHdUbl8Lcus=G&`tS%A6+&dzC=a-7AC03>(7Cpq z*%Mp4(nY&6M2pp}DN|cLW~p>#=W-hwc70*(=JtgfmWRZxk^i}9liP}=^EWD!ch+B@ zz`FzH&_VFuUVYTg4#GVY~3Fa-ig z`TM;OqsHt%A|8k+?!$@uWCD=yL7?oAsN_E)9-2wqA%VG_%RmkRjUVoU2k5>A0!gK3z0|hPsAg`z@|v+=YVW+(abWKX;_TvJ;R=v^wj|zAl26S& z=#J#$A_<8C#fcIU$|l99ruihMr2j?o>BkBXWETA<`HV~I0g}(uH@USl2mf7T7Z4)Y zxAzSJA;S2?WT_u`3J4JvmpWX3F0cP4`SuSE6OK-_%B6ADXHTIjnto#m?~AL4GYUR~ zs*W#|MQWzT~22Y0jZ^Hwfc+Nh{sqtcl-;&E9tRM03rQ z_WFcA8h|81Q9iL!@DS5W&4<8pg)V0%kRrrGWweQC0gxj63Mk6gXyHMGq4XaRqkfN) zMFq%cx$mZ}KiW?PLx>ILHfQ{_8^eo5VU{Yp&;|Xe+4c|BdKCv%pSXI|aZOhiue=E< zlH{X)*AA%YFS^KLkf2cO*u2>3y32r!&RPaSgpK7e z>Dw=#!#~OEu0-58vo@o=(Aan?@fhVxbJX{0HqF0ObWA9k(f_ETznW_$dplAkJ@V2j z(M-7y5q7_ZJR#wk)J*@65CK@O_%{`;SeP`!9!>DB8O7%sn+CR^W|6+>mac*~&m zSxI=~;3(#xyf{YLs8){Qr*WfyCHdrIA#&B*=<#gYl^M#hAfSAMm)zQ7cGx zxw)V21mi{IJ8a3PUDSkz7VpKNA;M#U|5VZcM)Da{7J=l=>3SQ6Bb^+fb-d}6HvN@iG_LS?kE`Q8nH^0C~WFGtN~?QkU--(GItJ#NzR zw~B7Cvc6Oi)PZ0un;@VE(s6i26A^&!Qj?F#i* zV7X%QFtV~Yo%xRByI0X6c%fgK7Z}?mGT5WKVqdZ!#SHpqyvP(yl9w$}7<RdU=UcYxcRPn^mmBRXC|$WR!XESq18~! z?qQ4t4H34FPZ=htiC<$eEh894RU@q%(Gah6rbs&cmG|p6G3@w#b#$&PJVSpn#XMQN&{of|gt9 zs`%U*k4dJPaijgF57DG*x2oWkasGl7tfBvP7+@Ie(_fGR)${lFoWc`2=*w@k%sd=? zqOaad0@wmD`UQ{+zya@m>+4Tnz^F0H%E`~hB@lYR^NDm$Yjg1m0nT`CUO{dH-GCJE z2ubk_P5_=|^QtZP4vYkt1@Djqs5mgs1@^uCD{_Iy*?{^$U~~rbS+=Po5Y^%_#@yhP={- z!e0R0@T`Y7M>==o|)0#aaV^Ly-rrbcT?n=J;n(z?F_|GrtW~v8UeP zbg@Z6uE;vy;*CkGo*P}b)E;EWnjoPBJf0R!r9G<}U9vWiB;XgwTV1M~lld`69SSKV z6@2SSkgTzk0w9I0`(>;~H}psO-0J9yong;D_t#b(tqrD%&so|7%UFQEnCq{rvGV%W z;`B(WzV_m1eMA`4R9|;>w!hSqDAiDZb9H{SH8%h>1t2g;bn}1o#k?y9$9j_Mri>u$ zLjqYH7+4Z5@PY@K<@&$Li!UCG<>S;|3}4r&{n`GO7sKPJL2n}07lVnAP}4$$sV^Qw z9-=+rr$WT77EFVEPn5MBp{NBw3JmhxOCF3gT`SR?wmx3b-|wz;t2!AGI?C%$qnV64 zeu4gnE8QPRVR9Yr>3bzAxX}NA6tWYLD1%+%{XWq(X8rR@r>u{-skEP+--z^VyRel= zf4itNR+Qg^s4+9%FPi2bO@U4G(B9xbO@UWBHjc6;trS+)RPJG`f60qDCt074l8>7? z+Qe$p&+g=fNfoi|=Cm^0`Ku>{R^)68O#})C2S8Kcb1ZGG9~OUF$)pTFZHUOc41&kk z%Au6*2Y31+i0o|&OfBk)m9}jaf`{0rPBTCAR>tGO_ryE&9oAwvu)`im^P2FK-zuCt zd_D0dr(pWSGu3@q%OmF z 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 Gyo|8RW#8LNXjK8%EO>HbT{hZP*9&SpkeeS>7E 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 () => sections.map(({ label, entries }, sectionIndex) => ({ @@ -130,6 +133,7 @@ export function ObservabilityPageTemplate({ - {i18n.translate('xpack.observability.tour.observabilityOverviewStep.tourContent', { - defaultMessage: - 'Take a quick tour to learn the benefits of having all of your observability data in one stack.', - })} - - ), - anchor: `[id^="SolutionNav"]`, - anchorPosition: 'rightUp', - dataTestSubj: 'overviewStep', - showOverlay: true, - }, - { - title: i18n.translate('xpack.observability.tour.streamStep.tourTitle', { - defaultMessage: 'Tail your infrastructure logs in real time', - }), - content: ( - - {i18n.translate('xpack.observability.tour.streamStep.tourContent', { - defaultMessage: - 'Monitor, filter, and inspect log events flowing in from your applications, servers, virtual machines, and containers.', - })} - - ), - anchor: `[data-nav-id="stream"]`, - anchorPosition: 'rightUp', - dataTestSubj: 'streamStep', - showOverlay: true, - }, - { - title: i18n.translate('xpack.observability.tour.metricsExplorerStep.tourTitle', { - defaultMessage: 'Monitor your infrastructure health', - }), - content: ( - - {i18n.translate('xpack.observability.tour.metricsExplorerStep.tourContent', { - defaultMessage: - 'Stream, group, and visualize metrics from your systems, cloud, network, and other infrastructure sources.', - })} - - ), - anchor: `[data-nav-id="metrics_explorer"]`, - anchorPosition: 'rightUp', - dataTestSubj: 'metricsExplorerStep', - showOverlay: true, - }, - { - title: i18n.translate('xpack.observability.tour.tracesStep.tourTitle', { - defaultMessage: 'Identify and resolve application issues', - }), - content: ( - - {i18n.translate('xpack.observability.tour.tracesStep.tourContent', { - defaultMessage: - 'Find and fix performance problems quickly by collecting detailed information about your services.', - })} - - ), - anchor: `[data-nav-id="traces"]`, - anchorPosition: 'rightUp', - dataTestSubj: 'tracesStep', - showOverlay: true, - }, - { - title: i18n.translate('xpack.observability.tour.alertsStep.tourTitle', { - defaultMessage: 'Get notified when something changes', - }), - content: ( - - {i18n.translate('xpack.observability.tour.alertsStep.tourContent', { - defaultMessage: - 'Define and detect conditions that trigger alerts with third-party platform integrations like email, PagerDuty, and Slack.', - })} - - ), - anchor: `[data-nav-id="alerts"]`, - anchorPosition: 'rightUp', - dataTestSubj: 'alertStep', - showOverlay: true, - }, - { - title: i18n.translate('xpack.observability.tour.guidedSetupStep.tourTitle', { - defaultMessage: 'Now add your data!', - }), - content: ( - - {i18n.translate('xpack.observability.tour.guidedSetupStep.tourContent', { - defaultMessage: - 'The easiest way to get going with Elastic Observability is to follow the Guided setup.', - })} - - ), - anchor: '#guidedSetupButton', - anchorPosition: 'rightUp', - dataTestSubj: 'guidedSetupStep', - showOverlay: false, - }, -]; +export const observTourActiveStorageKey = 'guidedOnboarding.observability.tourActive'; +export const observTourStepStorageKey = 'guidedOnboarding.observability.tourStep'; const getSteps = ({ activeStep, incrementStep, endTour, + prependBasePath, }: { activeStep: number; incrementStep: () => void; endTour: () => void; + prependBasePath?: (imageName: string) => string; }) => { const footerAction = ( @@ -206,7 +94,7 @@ const getSteps = ({ return tourStepsConfig.map((stepConfig, index) => { const step = index + 1; - const { dataTestSubj, showOverlay, ...tourStepProps } = stepConfig; + const { dataTestSubj, content, imageConfig, ...tourStepProps } = stepConfig; return ( + +

    {content}

    + + {imageConfig && prependBasePath && ( + <> + + + + )} + + } /> ); }); @@ -233,19 +138,27 @@ interface TourState { isTourActive: boolean; } -const getInitialTourState = (prevTourState: string | null): TourState => { - if (prevTourState) { - try { - const parsedPrevTourState = JSON.parse(prevTourState); - return parsedPrevTourState as TourState; - } catch (e) { - // Fall back to default state - } +const getInitialTourState = ({ + prevIsTourActive, + prevActiveStep, +}: { + prevIsTourActive: string | null; + prevActiveStep: string | null; +}): TourState => { + if (prevIsTourActive === null) { + return { + activeStep: 1, + // Tour is inactive by default + isTourActive: false, + }; } + const isTourActive = prevIsTourActive === 'true'; + const activeStep = prevActiveStep === null ? 1 : Number(prevActiveStep); + return { - activeStep: 1, - isTourActive: false, + activeStep, + isTourActive, }; }; @@ -254,15 +167,21 @@ export function ObservabilityTour({ navigateToApp, isPageDataLoaded, showTour, + prependBasePath, }: { children: ({ isTourVisible }: { isTourVisible: boolean }) => ReactNode; navigateToApp: ApplicationStart['navigateToApp']; isPageDataLoaded: boolean; showTour: boolean; + prependBasePath?: (imageName: string) => string; }) { - const prevTourState = localStorage.getItem(observabilityTourStorageKey); - const { activeStep: initialActiveStep, isTourActive: initialIsTourActive } = - getInitialTourState(prevTourState); + const prevIsTourActive = localStorage.getItem(observTourActiveStorageKey); + const prevActiveStep = localStorage.getItem(observTourStepStorageKey); + + const { activeStep: initialActiveStep, isTourActive: initialIsTourActive } = getInitialTourState({ + prevIsTourActive, + prevActiveStep, + }); const [isTourActive, setIsTourActive] = useState(initialIsTourActive); const [activeStep, setActiveStep] = useState(initialActiveStep); @@ -272,13 +191,16 @@ export function ObservabilityTour({ const isSmallBreakpoint = useIsWithinBreakpoints(['s']); const isOverviewPage = currentPath === overviewPath; - const { showOverlay } = tourStepsConfig[activeStep - 1]; const incrementStep = useCallback(() => { setActiveStep((prevState) => prevState + 1); }, []); - const endTour = useCallback(() => setIsTourActive(false), []); + const endTour = useCallback(() => { + // Reset tour state + setIsTourActive(false); + setActiveStep(1); + }, []); /** * The tour should only be visible if the following conditions are met: @@ -290,8 +212,12 @@ export function ObservabilityTour({ const isTourVisible = showTour && isTourActive && isPageDataLoaded && isSmallBreakpoint === false; useEffect(() => { - localStorage.setItem(observabilityTourStorageKey, JSON.stringify({ isTourActive, activeStep })); - }, [isTourActive, activeStep]); + localStorage.setItem(observTourActiveStorageKey, String(isTourActive)); + }, [isTourActive]); + + useEffect(() => { + localStorage.setItem(observTourStepStorageKey, String(activeStep)); + }, [activeStep]); useEffect(() => { // The user must be on the overview page to view the guided setup step in the tour @@ -305,17 +231,7 @@ export function ObservabilityTour({ return ( <> {children({ isTourVisible })} - {isTourVisible && ( - <> - {getSteps({ activeStep, incrementStep, endTour })} - {showOverlay && ( - - )} - - )} + {isTourVisible && getSteps({ activeStep, incrementStep, endTour, prependBasePath })} ); } diff --git a/x-pack/test/functional/apps/infra/tour.ts b/x-pack/test/functional/apps/infra/tour.ts index 9806115c6129f..8a3cda46efcd8 100644 --- a/x-pack/test/functional/apps/infra/tour.ts +++ b/x-pack/test/functional/apps/infra/tour.ts @@ -6,6 +6,10 @@ */ import expect from '@kbn/expect'; +import { + observTourActiveStorageKey, + observTourStepStorageKey, +} from '@kbn/observability-plugin/public/components/shared/tour'; import { FtrProviderContext } from '../../ftr_provider_context'; export default ({ getPageObjects, getService }: FtrProviderContext) => { @@ -15,13 +19,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const find = getService('find'); const setInitialTourState = async (activeStep?: number) => { - await browser.setLocalStorageItem( - 'xpack.observability.tourState', - JSON.stringify({ - activeStep: activeStep || 1, - isTourActive: true, - }) - ); + await browser.setLocalStorageItem(observTourActiveStorageKey, 'true'); + await browser.setLocalStorageItem(observTourStepStorageKey, String(activeStep || 1)); await browser.refresh(); }; @@ -31,11 +30,14 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); await pageObjects.common.navigateToApp('observability'); + // Need to increase the browser height so the tour steps fit to screen + await browser.setWindowSize(1600, 1400); }); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); - await browser.removeLocalStorageItem('xpack.observability.tourState'); + await browser.removeLocalStorageItem(observTourActiveStorageKey); + await browser.removeLocalStorageItem(observTourStepStorageKey); }); describe('Tour enabled', () => { @@ -45,22 +47,27 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Step 1: Overview await pageObjects.infraHome.waitForTourStep('overviewStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('overviewStep'); // Step 2: Streams await pageObjects.infraHome.waitForTourStep('streamStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('streamStep'); // Step 3: Metrics explorer await pageObjects.infraHome.waitForTourStep('metricsExplorerStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('metricsExplorerStep'); // Step 4: Traces await pageObjects.infraHome.waitForTourStep('tracesStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('tracesStep'); // Step 5: Alerts await pageObjects.infraHome.waitForTourStep('alertStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('alertStep'); // Step 6: Guided setup await pageObjects.infraHome.waitForTourStep('guidedSetupStep'); @@ -92,6 +99,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Step 5: Alerts await pageObjects.infraHome.waitForTourStep('alertStep'); await pageObjects.infraHome.clickTourNextButton(); + await pageObjects.infraHome.ensureTourStepIsClosed('alertStep'); // Step 6: Guided setup await pageObjects.infraHome.waitForTourStep('guidedSetupStep'); diff --git a/x-pack/test/functional/page_objects/infra_home_page.ts b/x-pack/test/functional/page_objects/infra_home_page.ts index 21b29bd4d16fd..c30b6ed698f35 100644 --- a/x-pack/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/test/functional/page_objects/infra_home_page.ts @@ -330,7 +330,7 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide }, async waitForTourStep(tourStep: string) { - await retry.waitFor('tour step', () => testSubjects.exists(tourStep)); + await retry.waitForWithTimeout('tour step', 5000, () => testSubjects.exists(tourStep)); }, async ensureTourStepIsClosed(tourStep: string) { From 8f8db6da73503bd1ca1011b8d72a0f3019e2610a Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 13 Jul 2022 13:50:09 +0100 Subject: [PATCH 03/96] skip flaky suite (#136033) --- x-pack/test/accessibility/apps/tags.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/accessibility/apps/tags.ts b/x-pack/test/accessibility/apps/tags.ts index 5369ad2d2db6b..dd992b191e436 100644 --- a/x-pack/test/accessibility/apps/tags.ts +++ b/x-pack/test/accessibility/apps/tags.ts @@ -16,7 +16,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const toasts = getService('toasts'); - describe('Kibana Tags Page Accessibility', () => { + // FLAKY: https://github.com/elastic/kibana/issues/136033 + describe.skip('Kibana Tags Page Accessibility', () => { before(async () => { await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, From ed1849688ec2a61aaadc3bc7388920e1e4dd019d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Wed, 13 Jul 2022 14:09:17 +0100 Subject: [PATCH 04/96] [Form lib] Add storybook (#127898) --- src/dev/storybook/aliases.ts | 1 + src/plugins/es_ui_shared/.storybook/main.ts | 11 + .../es_ui_shared/.storybook/manager.ts | 21 + .../components/__stories__/constants.ts | 17 + .../__stories__/form_de_serializer.tsx | 175 +++++ .../__stories__/form_default_value.tsx | 62 ++ .../__stories__/form_global_fields.tsx | 266 +++++++ .../__stories__/form_is_modified.tsx | 90 +++ .../components/__stories__/form_utils.tsx | 45 ++ .../__stories__/form_validation.tsx | 94 +++ .../components/__stories__/index.ts | 55 ++ .../components/__stories__/types.ts | 11 + .../__stories__/use_array_basic.tsx | 187 +++++ .../__stories__/use_array_complex.tsx | 543 ++++++++++++++ .../__stories__/use_array_dynamic_data.tsx | 703 ++++++++++++++++++ .../__stories__/use_array_reorder.tsx | 280 +++++++ .../use_field_change_listeners.tsx | 133 ++++ .../__stories__/use_field_field_types.tsx | 292 ++++++++ .../__stories__/use_multi_field_basic.tsx | 143 ++++ .../hook_form_lib/components/form.stories.tsx | 166 +++++ .../forms/hook_form_lib/components/form.tsx | 2 +- .../components/use_array.stories.tsx | 31 + .../hook_form_lib/components/use_array.ts | 2 +- .../components/use_field.stories.tsx | 57 ++ .../hook_form_lib/components/use_field.tsx | 106 +-- .../components/use_multi_field.stories.tsx | 58 ++ .../components/use_multi_fields.test.tsx | 103 +++ .../components/use_multi_fields.tsx | 48 +- .../static/forms/hook_form_lib/constants.ts | 2 + .../static/forms/hook_form_lib/hooks/index.ts | 1 + .../hooks/use_field_from_props.ts | 119 +++ src/plugins/es_ui_shared/tsconfig.json | 4 +- 32 files changed, 3701 insertions(+), 127 deletions(-) create mode 100644 src/plugins/es_ui_shared/.storybook/main.ts create mode 100644 src/plugins/es_ui_shared/.storybook/manager.ts create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/constants.ts create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_de_serializer.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_default_value.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_global_fields.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_is_modified.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_utils.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_validation.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/index.ts create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/types.ts create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_basic.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_complex.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_dynamic_data.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_reorder.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_change_listeners.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_field_types.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_multi_field_basic.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.stories.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.stories.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.stories.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_field.stories.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.test.tsx create mode 100644 src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field_from_props.ts diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index e1360d3b63e4e..e4b87a07af907 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -20,6 +20,7 @@ export const storybookAliases = { data: 'src/plugins/data/.storybook', discover: 'src/plugins/discover/.storybook', embeddable: 'src/plugins/embeddable/.storybook', + es_ui_shared: 'src/plugins/es_ui_shared/.storybook', expression_error: 'src/plugins/expression_error/.storybook', expression_image: 'src/plugins/expression_image/.storybook', expression_metric_vis: 'src/plugins/chart_expressions/expression_metric/.storybook', diff --git a/src/plugins/es_ui_shared/.storybook/main.ts b/src/plugins/es_ui_shared/.storybook/main.ts new file mode 100644 index 0000000000000..1261fe5a06f69 --- /dev/null +++ b/src/plugins/es_ui_shared/.storybook/main.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { defaultConfig } from '@kbn/storybook'; + +module.exports = defaultConfig; diff --git a/src/plugins/es_ui_shared/.storybook/manager.ts b/src/plugins/es_ui_shared/.storybook/manager.ts new file mode 100644 index 0000000000000..b5b23ce4099c8 --- /dev/null +++ b/src/plugins/es_ui_shared/.storybook/manager.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { addons } from '@storybook/addons'; +import { create } from '@storybook/theming'; +import { PANEL_ID } from '@storybook/addon-actions'; + +addons.setConfig({ + theme: create({ + base: 'light', + brandTitle: 'Platform Deployment Management Storybook', + brandUrl: 'https://github.com/elastic/kibana/tree/main/src/plugins/es_ui_shared', + }), + showPanel: () => true, + selectedPanel: PANEL_ID, +}); diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/constants.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/constants.ts new file mode 100644 index 0000000000000..c1bbc5c7d836f --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/constants.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { FieldConfig } from '../../types'; + +/** + * The "title" field base configuration + */ +export const titleConfigBase: FieldConfig = { + label: 'Title', + helpText: 'This is a help text for the field.', +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_de_serializer.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_de_serializer.tsx new file mode 100644 index 0000000000000..9b5cff6b59be4 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_de_serializer.tsx @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiButton } from '@elastic/eui'; + +import { fieldFormatters } from '../../../helpers'; +import { TextField, NumericField } from '../../../components'; +import { useForm } from '../../hooks/use_form'; +import { Form } from '../form'; +import { UseField } from '../use_field'; +import { FormArgs } from './types'; +import { submitForm } from './form_utils'; + +interface MyForm { + endPoint: string; +} + +interface MyFormInternal { + protocol: string; + hostname: string; + port?: number; + pathname: string; +} + +const deserializer = (formDefault: MyForm): MyFormInternal => { + try { + const url = new URL(formDefault.endPoint); + const { protocol, hostname, pathname, port } = url; + + return { + protocol, + hostname, + pathname, + port: parseInt(port, 10), + }; + } catch (e) { + // Invalid URL + return { + protocol: '', + hostname: '', + pathname: '', + }; + } +}; + +const serializer = ({ protocol, hostname, port, pathname }: MyFormInternal): MyForm => ({ + endPoint: `${protocol}//${hostname}:${port}${pathname === '/' ? '' : pathname}`, +}); + +type Args = FormArgs & { endPoint: string }; + +const FormWithDeSerializer = ({ endPoint, ...args }: Args) => { + const { form } = useForm({ + serializer, + deserializer, + defaultValue: { + endPoint, + }, + }); + + return ( +
    + path="protocol" component={TextField} config={{ label: 'Protocol' }} /> + path="hostname" component={TextField} config={{ label: 'Host' }} /> + + path="port" + component={NumericField} + config={{ label: 'Port', formatters: [fieldFormatters.toInt] }} + /> + path="pathname" component={TextField} config={{ label: 'Pathname' }} /> + submitForm(form)}>Send + + ); +}; + +export const DeSerializer = (args: Args) => { + // We add a "key" to force a refresh of the form each time the end point arg changes + return ; +}; + +DeSerializer.storyName = '(De)serializer'; + +DeSerializer.argTypes = { + endPoint: { + name: 'formDefaultValue.endPoint', + description: + 'This endpoint comes from the backend and is passed to the form. We want to split the URL and the port to let the user modify them separately. For that we will deserialize the field into 2 form fields. When sending the form we will serialize back the 2 fields into one.', + defaultValue: 'https://elastic.co:9200', + control: { + type: 'text', + }, + }, +}; + +DeSerializer.parameters = { + docs: { + source: { + code: ` +interface MyForm { + endPoint: string; +} + +interface MyFormInternal { + protocol: string; + hostname: string; + port?: number; + pathname: string; +} + +const deserializer = (formDefault: MyForm): MyFormInternal => { + try { + const url = new URL(formDefault.endPoint); + const { protocol, hostname, pathname, port } = url; + + return { + protocol, + hostname, + pathname, + port: parseInt(port, 10), + }; + } catch (e) { + // Invalid URL + return { + protocol: '', + hostname: '', + pathname: '', + }; + } +}; + +const serializer = ({ protocol, hostname, port, pathname }: MyFormInternal): MyForm => ({ + endPoint: \`\${protocol}//\${hostname}:\${port}\${pathname === '/' ? '' : pathname}\`, +}); + +const MyFormComponent = ({ endPoint }) => { + const { form } = useForm({ + serializer, + deserializer, + defaultValue: { + endPoint, + }, + }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + path="protocol" component={TextField} config={{ label: 'Protocol' }} /> + path="hostname" component={TextField} config={{ label: 'Host' }} /> + + path="port" + component={NumericField} + config={{ label: 'Port', formatters: [fieldFormatters.toInt] }} + /> + path="pathname" component={TextField} config={{ label: 'Pathname' }} /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_default_value.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_default_value.tsx new file mode 100644 index 0000000000000..9946ee7fc30db --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_default_value.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiButton } from '@elastic/eui'; + +import { TextField } from '../../../components'; +import { useForm } from '../../hooks/use_form'; +import { Form } from '../form'; +import { UseField } from '../use_field'; +import { titleConfigBase } from './constants'; +import { FormArgs } from './types'; +import { submitForm } from './form_utils'; + +// The defaultValue would probably come from an HTTP request +const formDefaultValue = { title: 'Title of the post' }; + +export const DefaultValue = (args: FormArgs) => { + const { form } = useForm({ defaultValue: formDefaultValue }); + + return ( +
    + path="title" component={TextField} config={{ ...titleConfigBase }} /> + submitForm(form)}>Send + + ); +}; + +DefaultValue.parameters = { + docs: { + source: { + code: ` +// The defaultValue would probably come from an HTTP request +const formDefaultValue = { title: 'Title of the post' }; + +const MyFormComponent = () => { + const { form } = useForm({ defaultValue: formDefaultValue }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + path="title" component={TextField} config={{ ...titleConfigBase }} /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_global_fields.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_global_fields.tsx new file mode 100644 index 0000000000000..1f5a249bb1465 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_global_fields.tsx @@ -0,0 +1,266 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { useState, useContext, createContext } from 'react'; +import { EuiSpacer, EuiText, EuiTextColor, EuiButton } from '@elastic/eui'; + +import { TextField, NumericField } from '../../../components'; +import { FieldHook } from '../../types'; +import { useForm } from '../../hooks'; +import { Form } from '../form'; +import { UseMultiFields } from '../use_multi_fields'; +import { submitForm } from './form_utils'; + +// map of field ids to "" props +const globalFields = { + fieldA: { + path: 'fieldA', + defaultValue: 'foo', + config: { + label: 'Field A', + }, + }, + fieldB: { + path: 'fieldB', + defaultValue: 123, + config: { + label: 'Field B', + }, + }, +}; + +const FormGlobalFieldsContext = createContext( + {} as { + fieldA: FieldHook; + fieldB: FieldHook; + } +); + +const useGlobalFields = () => { + const ctx = useContext(FormGlobalFieldsContext); + if (!ctx) { + throw new Error('Missing provider'); + } + return ctx; +}; + +const FormGlobalFields: React.FC = ({ children }) => { + return ( + + {(fields) => { + return ( + + {children} + + ); + }} + + ); +}; + +const FormFields = () => { + const { fieldA, fieldB } = useGlobalFields(); + + return ( + <> + } /> + } /> + + ); +}; + +export function GlobalFields() { + const { form } = useForm(); + const [areFieldsVisible, setAreFieldsVisible] = useState(true); + const [areGlobalPresent, setAreGlobalPresent] = useState(true); + + return ( +
    + {areGlobalPresent && ( + + +

    + + You might need to have global fields in you form that persist their value event when + a field unmounts. The recommended pattern is to use a React context along with + "UseMultiFields" + +

    +
    + + + + {areFieldsVisible && } + + setAreFieldsVisible((prev) => !prev)}> + Toggle fields in DOM + + +

    + + Removing fields from DOM (that are connected to globals) will still preserve their + value in the form. + +

    +
    +
    + )} +
    + + setAreGlobalPresent((prev) => !prev)}> + Toggle globals fields + + +

    + + Removing the global fields from DOM remove their value when sending the form. + +

    +
    +
    + +
    + + submitForm(form)}>Send form +
    +
    + ); +} + +GlobalFields.storyName = 'GlobalFields'; + +GlobalFields.parameters = { + docs: { + source: { + code: ` +// map of field ids to "" props +const globalFields = { + fieldA: { + path: 'fieldA', + defaultValue: 'foo', + config: { + label: 'Field A', + }, + }, + fieldB: { + path: 'fieldB', + defaultValue: 123, + config: { + label: 'Field B', + }, + }, +}; + +const FormGlobalFieldsContext = createContext( + {} as { + fieldA: FieldHook; + fieldB: FieldHook; + } +); + +const useGlobalFields = () => { + const ctx = useContext(FormGlobalFieldsContext); + if (!ctx) { + throw new Error('Missing provider'); + } + return ctx; +}; + +const FormGlobalFields: React.FC = ({ children }) => { + return ( + + {(fields) => { + return ( + + {children} + + ); + }} + + ); +}; + +const FormFields = () => { + const { fieldA, fieldB } = useGlobalFields(); + + return ( + <> + + + + ); +}; + +const MyFormComponent = () => { + const { form } = useForm(); + const [areFieldsVisible, setAreFieldsVisible] = useState(true); + const [areGlobalPresent, setAreGlobalPresent] = useState(true); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + {areGlobalPresent && ( + + +

    + + You might need to have global fields in you form that persist their value event when + a field unmounts. The recommended pattern is to use a React context along with + "UseMultiFields" + +

    +
    + + + + {areFieldsVisible && } + + setAreFieldsVisible((prev) => !prev)}> + Toggle fields in DOM + + +

    + + Removing fields from DOM (that are connected to globals) will still preserve their + value in the form. + +

    +
    +
    + )} +
    + + setAreGlobalPresent((prev) => !prev)}> + Toggle globals fields + + +

    + + Removing the global fields from DOM remove their value when sending the form. + +

    +
    +
    + +
    + + Send form +
    +
    + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_is_modified.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_is_modified.tsx new file mode 100644 index 0000000000000..8dc112909e656 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_is_modified.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect } from 'react'; +import { EuiButton } from '@elastic/eui'; +import { action } from '@storybook/addon-actions'; + +import { TextField, ToggleField } from '../../../components'; +import { useForm } from '../../hooks/use_form'; +import { useFormIsModified } from '../../hooks/use_form_is_modified'; +import { Form } from '../form'; +import { UseField } from '../use_field'; +import { titleConfigBase } from './constants'; +import { FormArgs } from './types'; +import { submitForm } from './form_utils'; + +export const IsModified = (args: FormArgs) => { + const { form } = useForm(); + const isFormModified = useFormIsModified({ form }); + + useEffect(() => { + action('Is form modified')(isFormModified); + }, [isFormModified]); + + return ( +
    + + path="title" + defaultValue="Initial value" + component={TextField} + config={titleConfigBase} + /> + + path="isOn" + defaultValue={true} + component={ToggleField} + config={{ label: 'Is on' }} + /> + submitForm(form)}>Send + + ); +}; + +IsModified.parameters = { + docs: { + source: { + code: ` +const MyFormComponent = () => { + const { form } = useForm(); + const isFormModified = useFormIsModified({ form }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + useEffect(() => { + // Do something whenever the form is modified + }, [isFormModified]); + + return ( +
    + + path="title" + defaultValue="Initial value" + component={TextField} + config={titleConfigBase} + /> + + path="isOn" + defaultValue={true} + component={ToggleField} + config={{ label: 'Is on' }} + /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_utils.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_utils.tsx new file mode 100644 index 0000000000000..e72f7600031c7 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_utils.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { FC } from 'react'; +import { EuiSpacer, EuiButton } from '@elastic/eui'; +import { action } from '@storybook/addon-actions'; + +import { useForm } from '../../hooks/use_form'; +import { FormHook, FormConfig } from '../../types'; +import { Form } from '../form'; + +/** + * Validate the form and return its data. + * + * @param form The FormHook instance + */ +export const submitForm = async (form: FormHook) => { + const { isValid, data } = await form.submit(); + action('Send form')({ + isValid, + data: JSON.stringify(data), + }); +}; + +export interface FormWrapperProps { + formConfig?: FormConfig; +} + +export const FormWrapper: FC = ({ formConfig, children }) => { + const { form } = useForm(formConfig); + + return ( +
    + <> + {children} + + submitForm(form)}>Send + + + ); +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_validation.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_validation.tsx new file mode 100644 index 0000000000000..58ca24fe0ffed --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/form_validation.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiButton } from '@elastic/eui'; +import { action } from '@storybook/addon-actions'; + +import { TextField } from '../../../components'; +import { FieldConfig } from '../../types'; +import { useForm } from '../../hooks/use_form'; +import { Form } from '../form'; +import { UseField } from '../use_field'; +import { titleConfigBase } from './constants'; +import { FormArgs } from './types'; +import { submitForm } from './form_utils'; + +const titleConfigWithValidation: FieldConfig = { + ...titleConfigBase, + helpText: 'Test validation by leaving field empty.', + validations: [ + { + validator: ({ value }) => { + action('Validating title field')(value); + + if (value.trim() === '') { + return { + message: `The field can't be empty.`, + }; + } + }, + }, + ], +}; + +export const Validation = (args: FormArgs) => { + const { form } = useForm(); + + return ( +
    + path="title" component={TextField} config={titleConfigWithValidation} /> + submitForm(form)}>Send + + ); +}; + +Validation.parameters = { + docs: { + source: { + code: ` +const titleConfigWithValidation: FieldConfig = { + label: 'Title', + helpText: 'Test validation by leaving field empty.', + validations: [ + { + validator: ({ value }) => { + action('Validating title field')(value); + + if (value.trim() === '') { + return { + message: "The field can't be empty.", + }; + } + }, + }, + ], +}; + +const MyFormComponent = () => { + const { form } = useForm(); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + path="title" component={TextField} config={titleConfigWithValidation} /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/index.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/index.ts new file mode 100644 index 0000000000000..945bd9019fd11 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/index.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Validation } from './form_validation'; +import { DeSerializer } from './form_de_serializer'; +import { DefaultValue } from './form_default_value'; +import { IsModified } from './form_is_modified'; +import { GlobalFields } from './form_global_fields'; + +import { submitForm, FormWrapper } from './form_utils'; + +import { FieldTypes as UseFieldFieldTypes } from './use_field_field_types'; +import { ChangeListeners as UseFieldChangeListeners } from './use_field_change_listeners'; + +import { Basic as UseArrayBasic } from './use_array_basic'; +import { Reorder as UseArrayReorder } from './use_array_reorder'; +import { Complex as UseArrayComplex } from './use_array_complex'; +import { DynamicData as UseArrayDynamicData } from './use_array_dynamic_data'; + +import { Basic as UseMultiFieldBasic } from './use_multi_field_basic'; + +export const formStories = { + Validation, + DeSerializer, + DefaultValue, + IsModified, + GlobalFields, +}; + +export const useFieldStories = { + UseFieldFieldTypes, + UseFieldChangeListeners, +}; + +export const useArrayStories = { + UseArrayBasic, + UseArrayReorder, + UseArrayComplex, + UseArrayDynamicData, +}; + +export const useMultiFieldStories = { + UseMultiFieldBasic, +}; + +export const helpers = { + submitForm, +}; + +export { FormWrapper }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/types.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/types.ts new file mode 100644 index 0000000000000..a8a49626974b9 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/types.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Props as FormProps } from '../form'; + +export type FormArgs = Pick; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_basic.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_basic.tsx new file mode 100644 index 0000000000000..1c6b6d55ad7c8 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_basic.tsx @@ -0,0 +1,187 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiButtonIcon, + EuiButtonEmpty, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; + +import { TextField } from '../../../components'; +import { fieldValidators } from '../../../helpers'; +import { FormConfig } from '../../types'; +import { UseField } from '../use_field'; +import { UseArray } from '../use_array'; +import { FormWrapper } from './form_utils'; + +const { emptyField } = fieldValidators; + +const defaultValue = { + employees: [ + { + name: 'John', + lastName: 'Snow', + }, + ], +}; + +const formConfig: FormConfig = { + defaultValue, +}; + +export function Basic() { + return ( + + <> + +

    Employees

    +
    + + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path }) => { + return ( + + + + + + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove item" + /> + + )} + + ); + })} + + + Add employee + + + ); + }} + + +
    + ); +} + +Basic.storyName = 'Basic'; + +Basic.parameters = { + docs: { + source: { + code: ` +const defaultValue = { + employees: [ + { + name: 'John', + lastName: 'Snow', + }, + ], +}; + +const MyFormComponent = () => { + const { form } = useForm({ defaultValue }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    Employees

    +
    + + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path }) => { + return ( + + + + + + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove item" + /> + + )} + + ); + })} + + + Add employee + + + ); + }} + + + Send + + ); +} + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_complex.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_complex.tsx new file mode 100644 index 0000000000000..312a085efba55 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_complex.tsx @@ -0,0 +1,543 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { FC } from 'react'; +import { get } from 'lodash'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiButtonIcon, + EuiButtonEmpty, + EuiSpacer, + EuiTitle, + EuiHealth, +} from '@elastic/eui'; + +import { TextField, SelectField, SuperSelectField } from '../../../components'; +import { fieldValidators } from '../../../helpers'; +import { useFormData } from '../../hooks'; +import { FormConfig } from '../../types'; +import { UseField } from '../use_field'; +import { UseArray } from '../use_array'; +import { FormWrapper } from './form_utils'; + +const { emptyField } = fieldValidators; + +const typeOptions = [ + { value: 'type_one', text: 'Type one' }, + { value: 'type_two', text: 'Type two' }, +]; + +const processorTypeOptions = [ + { value: 'percentage', text: 'Percentage' }, + { value: 'value', text: 'Value' }, +]; + +const percentageOptions = [ + { + value: 'percentage_config_1', + inputDisplay: ( + + Percentage 1 + + ), + }, + { + value: 'percentage_config_2', + inputDisplay: ( + + Percentage 2 + + ), + }, + { + value: 'percentage_config_3', + inputDisplay: ( + + Percentage 3 + + ), + }, +]; + +const valueOptions = [ + { + value: 'value_config_1', + inputDisplay: ( + + Value 1 + + ), + }, + { + value: 'value_config_2', + inputDisplay: ( + + Value 2 + + ), + }, + { + value: 'value_config_3', + inputDisplay: ( + + Value 3 + + ), + }, +]; + +const configSelect = { label: 'Config' }; + +const PercentageConfigSelect = ({ path }: { path: string }) => { + return ( + + ); +}; + +const ValueConfigSelect = ({ path }: { path: string }) => { + return ( + + ); +}; + +const percentageProcessorTypeConfig = { label: 'Processor type', defaultValue: 'percentage' }; + +const ProcessorTypeConfigurator = ({ basePath }: { basePath: string }) => { + const processorTypePath = `${basePath}.type`; + const processorConfigPath = `${basePath}.config`; + const [formData] = useFormData({ watch: processorTypePath }); + const processorType = get(formData, processorTypePath); + + const renderSelect = () => { + if (!processorType) { + return null; + } + + return processorType === 'percentage' ? ( + + ) : ( + + ); + }; + + return ( + + + + + {renderSelect()} + + ); +}; + +const ProcessorsConfigurator: FC<{ ruleType: string }> = ({ ruleType }) => { + return ( + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path }) => { + return ( + + + {/* Processor name */} + + + + {/* Processor type & config */} + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove processor" + /> + + )} + + ); + })} + + + {/* Add processor button */} + + Add processor + + + ); + }} + + ); +}; + +const FormContent: FC = () => { + const [{ ruleType }] = useFormData({ watch: 'ruleType' }); + + return ( + <> + +

    Rule configurator

    +
    + + + {/* Rule type */} + + + + +

    Processors

    +
    + + {ruleType !== undefined && } + + ); +}; + +const defaultValue = { + ruleType: 'type_one', + processors_type_one: [ + { name: 'Processor 1 name', type: 'value', config: 'value_config_3' }, + { name: 'Processor 2 name', type: 'percentage', config: 'percentage_config_2' }, + ], +}; + +const schema = { + ruleType: { + label: 'Rule type', + defaultValue: 'type_one', + }, +}; + +const formConfig: FormConfig = { + schema, + defaultValue, +}; + +export function Complex() { + return ( + + + + ); +} + +Complex.storyName = 'Complex'; + +Complex.parameters = { + docs: { + source: { + code: ` +const typeOptions = [ + { value: 'type_one', text: 'Type one' }, + { value: 'type_two', text: 'Type two' }, +]; + +const processorTypeOptions = [ + { value: 'percentage', text: 'Percentage' }, + { value: 'value', text: 'Value' }, +]; + +const percentageOptions = [ + { + value: 'percentage_config_1', + inputDisplay: ( + + Percentage 1 + + ), + }, + { + value: 'percentage_config_2', + inputDisplay: ( + + Percentage 2 + + ), + }, + { + value: 'percentage_config_3', + inputDisplay: ( + + Percentage 3 + + ), + }, +]; + +const valueOptions = [ + { + value: 'value_config_1', + inputDisplay: ( + + Value 1 + + ), + }, + { + value: 'value_config_2', + inputDisplay: ( + + Value 2 + + ), + }, + { + value: 'value_config_3', + inputDisplay: ( + + Value 3 + + ), + }, +]; + +const configSelect = { label: 'Config' }; + +const PercentageConfigSelect = ({ path }: { path: string }) => { + return ( + + ); +}; + +const ValueConfigSelect = ({ path }: { path: string }) => { + return ( + + ); +}; + +const percentageProcessorTypeConfig = { label: 'Processor type', defaultValue: 'percentage' }; + +const ProcessorTypeConfigurator = ({ basePath }: { basePath: string }) => { + const processorTypePath = \`\${basePath}.type\`; + const processorConfigPath = \`\${basePath}.config\`; + const [formData] = useFormData({ watch: processorTypePath }); + const processorType = get(formData, processorTypePath); + + const renderSelect = () => { + if (!processorType) { + return null; + } + + return processorType === 'percentage' ? ( + + ) : ( + + ); + }; + + return ( + + + + + {renderSelect()} + + ); +}; + +const ProcessorsConfigurator: FC<{ ruleType: string }> = ({ ruleType }) => { + return ( + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path }) => { + return ( + + + {/* Processor name */} + + + + {/* Processor type & config */} + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove processor" + /> + + )} + + ); + })} + + + {/* Add processor button */} + + Add processor + + + ); + }} + + ); +}; + +const defaultValue = { + ruleType: 'type_one', + processors_type_one: [ + { name: 'Processor 1 name', type: 'value', config: 'value_config_3' }, + { name: 'Processor 2 name', type: 'percentage', config: 'percentage_config_2' }, + ], +}; + +const schema = { + ruleType: { + label: 'Rule type', + defaultValue: 'type_one', + }, +}; + +const MyFormComponent = () => { + const { form } = useForm({ schema, defaultValue }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    Rule configurator

    +
    + + + {/* Rule type */} + + + + +

    Processors

    +
    + + {ruleType !== undefined && } + + Send + + ); +} + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_dynamic_data.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_dynamic_data.tsx new file mode 100644 index 0000000000000..a2c49d8b90911 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_dynamic_data.tsx @@ -0,0 +1,703 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { useCallback, useState, FC } from 'react'; +import { get } from 'lodash'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiButtonIcon, + EuiButtonEmpty, + EuiSpacer, + EuiTitle, + EuiHealth, + EuiLoadingSpinner, +} from '@elastic/eui'; + +import { TextField, SelectField, SuperSelectField } from '../../../components'; +import { fieldValidators } from '../../../helpers'; +import { useFormData } from '../../hooks'; +import { FormConfig } from '../../types'; +import { useFormContext } from '../../form_context'; +import { UseField } from '../use_field'; +import { UseArray } from '../use_array'; +import { FormWrapper } from './form_utils'; + +const { emptyField } = fieldValidators; + +// Select field options +const ruleTypeOptions = [ + { value: 'type_one', text: 'Type one' }, + { value: 'type_two', text: 'Type two' }, +]; + +const processorTypeOptions = [ + { value: 'percentage', text: 'Percentage' }, + { value: 'value', text: 'Value' }, +]; + +const percentageOptions = [ + { + value: 'percentage_config_1', + inputDisplay: ( + + Percentage 1 + + ), + }, + { + value: 'percentage_config_2', + inputDisplay: ( + + Percentage 2 + + ), + }, + { + value: 'percentage_config_3', + inputDisplay: ( + + Percentage 3 + + ), + }, +]; + +const valueOptions = [ + { + value: 'value_config_1', + inputDisplay: ( + + Value 1 + + ), + }, + { + value: 'value_config_2', + inputDisplay: ( + + Value 2 + + ), + }, + { + value: 'value_config_3', + inputDisplay: ( + + Value 3 + + ), + }, +]; + +// Dynamic data that we will be loaded in the form when selecting the rule "type one" +const processorsTypeOne = [ + { + name: 'DynamicTypeOne1', + type: 'value', + config: 'value_config_2', + }, + { + name: 'DynamicTypeOne2', + type: 'value', + config: 'value_config_3', + }, + { + name: 'DynamicTypeOne3', + type: 'percentage', + config: 'percentage_config_2', + }, +]; + +// Dynamic data that we will be loaded in the form when selecting the rule "type two" +const processorsTypeTwo = [ + { + name: 'DynamicTypeTwo1', + type: 'percentage', + config: 'percentage_config_2', + }, + { + name: 'DynamicTypeTwo2', + type: 'value', + config: 'value_config_3', + }, +]; + +// Form field configs +const processorConfig = { label: 'Config' }; +const percentageProcessorTypeConfig = { label: 'Processor type', defaultValue: 'percentage' }; + +const ProcessorTypeConfigurator = ({ + basePath, + readDefaultValueOnForm, +}: { + basePath: string; + readDefaultValueOnForm: boolean; +}) => { + const { getFields } = useFormContext(); + const processorTypePath = `${basePath}.type`; + const processorConfigPath = `${basePath}.config`; + const [formData] = useFormData({ + watch: [processorTypePath], + }); + + const processorType = get(formData, processorTypePath); + const options = processorType === 'percentage' ? percentageOptions : valueOptions; + const defaultOption = options[0].value; + + const onProcessorTypeChange = (newType: string) => { + const configSelectField = getFields()[processorConfigPath]; + + // Set the first select option from the list + configSelectField.setValue( + (newType === 'percentage' ? percentageOptions : valueOptions)[0].value + ); + }; + + const renderSelect = useCallback(() => { + if (!processorType) { + return null; + } + + return ( + + ); + }, [processorType, processorConfigPath, readDefaultValueOnForm, options, defaultOption]); + + return ( + + + + + {renderSelect()} + + ); +}; + +const processorNameConfig = { + label: 'Name', + validations: [{ validator: emptyField('A name is required.') }], +}; + +const ProcessorsConfigurator: FC<{ ruleType: string }> = ({ ruleType }) => { + return ( + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path, isNew }) => { + return ( + + + {/* Processor name */} + + + + {/* Processor type & config */} + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove processor" + /> + + )} + + ); + })} + + + {/* Add processor button */} + + Add processor + + + ); + }} + + ); +}; + +const FormContent: FC = () => { + const [isLoading, setIsLoading] = useState(false); + const { updateFieldValues } = useFormContext(); + const [{ ruleType }] = useFormData({ watch: 'ruleType' }); + + const onRuleTypeChange = useCallback( + (updatedRuleType: string) => { + if (!updatedRuleType) { + return; + } + + setIsLoading(true); + + // Simulate HTTP latency + setTimeout(() => { + updateFieldValues({ + // Set dynamically the processors based on the "ruleType" selected. + // In a real world scenario this would probably occur after fetching data on the server + processors: updatedRuleType === 'type_one' ? processorsTypeOne : processorsTypeTwo, + }); + + setIsLoading(false); + }, 500); + }, + [updateFieldValues] + ); + + return ( + <> + +

    Rule configurator

    +
    + + + {/* Rule type */} + + + + + + +

    Processors

    +
    +
    + {isLoading && ( + + + + )} +
    + + {ruleType !== undefined && } + + ); +}; + +interface MyForm { + ruleType: string; + processors: Array<{ name: string; type: string; config: string }>; +} + +/** + * Form defaultValue - Loaded from backend + */ +const defaultValue = { + ruleType: 'type_two', + processors: [ + { name: 'TypeTwoName1', type: 'value', config: 'value_config_3' }, + { name: 'TypeTwoName2', type: 'percentage', config: 'percentage_config_2' }, + ], +}; + +/** Form schema */ +const schema = { + ruleType: { + label: 'Rule type', + helpText: 'Change the rule type to load other processor configurations', + defaultValue: 'type_one', + }, +}; + +const formConfig: FormConfig = { + schema, + defaultValue, +}; + +export function DynamicData() { + return ( + + + + ); +} + +DynamicData.storyName = 'Dynamic data'; + +DynamicData.parameters = { + docs: { + source: { + code: ` +// Select field options +const ruleTypeOptions = [ + { value: 'type_one', text: 'Type one' }, + { value: 'type_two', text: 'Type two' }, +]; + +const processorTypeOptions = [ + { value: 'percentage', text: 'Percentage' }, + { value: 'value', text: 'Value' }, +]; + +const percentageOptions = [ + { + value: 'percentage_config_1', + inputDisplay: ( + + Percentage 1 + + ), + }, + { + value: 'percentage_config_2', + inputDisplay: ( + + Percentage 2 + + ), + }, + { + value: 'percentage_config_3', + inputDisplay: ( + + Percentage 3 + + ), + }, +]; + +const valueOptions = [ + { + value: 'value_config_1', + inputDisplay: ( + + Value 1 + + ), + }, + { + value: 'value_config_2', + inputDisplay: ( + + Value 2 + + ), + }, + { + value: 'value_config_3', + inputDisplay: ( + + Value 3 + + ), + }, +]; + +// Dynamic data that we will be loaded in the form when selecting the rule "type one" +const processorsTypeOne = [ + { + name: 'DynamicTypeOne1', + type: 'value', + config: 'value_config_2', + }, + { + name: 'DynamicTypeOne2', + type: 'value', + config: 'value_config_3', + }, + { + name: 'DynamicTypeOne3', + type: 'percentage', + config: 'percentage_config_2', + }, +]; + +// Dynamic data that we will be loaded in the form when selecting the rule "type two" +const processorsTypeTwo = [ + { + name: 'DynamicTypeTwo1', + type: 'percentage', + config: 'percentage_config_2', + }, + { + name: 'DynamicTypeTwo2', + type: 'value', + config: 'value_config_3', + }, +]; + +// Form field configs +const processorConfig = { label: 'Config' }; +const percentageProcessorTypeConfig = { label: 'Processor type', defaultValue: 'percentage' }; + +const ProcessorTypeConfigurator = ({ + basePath, + readDefaultValueOnForm, +}: { + basePath: string; + readDefaultValueOnForm: boolean; +}) => { + const { getFields } = useFormContext(); + const processorTypePath = \`\${basePath}.type\`; + const processorConfigPath = \`\${basePath}.config\`; + const [formData] = useFormData({ + watch: [processorTypePath], + }); + + const processorType = get(formData, processorTypePath); + const options = processorType === 'percentage' ? percentageOptions : valueOptions; + const defaultOption = options[0].value; + + const onProcessorTypeChange = (newType: string) => { + const configSelectField = getFields()[processorConfigPath]; + + // Set the first select option from the list + configSelectField.setValue( + (newType === 'percentage' ? percentageOptions : valueOptions)[0].value + ); + }; + + const renderSelect = useCallback(() => { + if (!processorType) { + return null; + } + + return ( + + ); + }, [processorType, processorConfigPath, readDefaultValueOnForm, options, defaultOption]); + + return ( + + + + + {renderSelect()} + + ); +}; + +const processorNameConfig = { + label: 'Name', + validations: [{ validator: emptyField('A name is required.') }], +}; + +const ProcessorsConfigurator: FC<{ ruleType: string }> = ({ ruleType }) => { + return ( + + {({ items, addItem, removeItem }) => { + return ( + <> + {items.map(({ id, path, isNew }) => { + return ( + + + {/* Processor name */} + + + + {/* Processor type & config */} + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove processor" + /> + + )} + + ); + })} + + + {/* Add processor button */} + + Add processor + + + ); + }} + + ); +}; + +interface MyForm { + ruleType: string; + processors: Array<{ name: string; type: string; config: string }>; +} + +/** + * Form defaultValue - Loaded from backend + */ +const defaultValue = { + ruleType: 'type_two', + processors: [ + { name: 'TypeTwoName1', type: 'value', config: 'value_config_3' }, + { name: 'TypeTwoName2', type: 'percentage', config: 'percentage_config_2' }, + ], +}; + +/** Form schema */ +const schema = { + ruleType: { + label: 'Rule type', + helpText: 'Change the rule type to load other processor configurations', + defaultValue: 'type_one', + }, +}; + +const MyFormComponent = () => { + const { form } = useForm({ schema, defaultValue }); + + const [isLoading, setIsLoading] = useState(false); + const { updateFieldValues } = form; + const [{ ruleType }] = useFormData({ form, watch: 'ruleType' }); + + const onRuleTypeChange = useCallback( + (updatedRuleType: string) => { + if (!updatedRuleType) { + return; + } + + setIsLoading(true); + + // Simulate HTTP latency + setTimeout(() => { + updateFieldValues({ + // Set dynamically the processors based on the "ruleType" selected. + // In a real world scenario this would probably occur after fetching data on the server + processors: updatedRuleType === 'type_one' ? processorsTypeOne : processorsTypeTwo, + }); + + setIsLoading(false); + }, 500); + }, + [updateFieldValues] + ); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    Rule configurator

    +
    + + + {/* Rule type */} + + + + + + +

    Processors

    +
    +
    + {isLoading && ( + + + + )} +
    + + {ruleType !== undefined && } + + Send + + ); +} + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_reorder.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_reorder.tsx new file mode 100644 index 0000000000000..64472c69079ea --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_array_reorder.tsx @@ -0,0 +1,280 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiButtonIcon, + EuiButtonEmpty, + EuiSpacer, + EuiDragDropContext, + EuiDroppable, + EuiDraggable, + EuiTitle, + DropResult, + EuiIcon, +} from '@elastic/eui'; + +import { TextField } from '../../../components'; +import { fieldValidators } from '../../../helpers'; +import { FormConfig } from '../../types'; +import { UseField } from '../use_field'; +import { UseArray } from '../use_array'; +import { FormWrapper } from './form_utils'; + +const { emptyField } = fieldValidators; + +const defaultValue = { + employees: [ + { + name: 'John', + lastName: 'Snow', + }, + { + name: 'Mick', + lastName: 'Jagger', + }, + { + name: 'Roger', + lastName: 'Federer', + }, + ], +}; + +const formConfig: FormConfig = { + defaultValue, +}; + +export function Reorder() { + return ( + + <> + +

    Employees

    +
    + + + + {({ items, addItem, removeItem, moveItem }) => { + const onDragEnd = ({ source, destination }: DropResult) => { + if (source && destination) { + moveItem(source.index, destination.index); + } + }; + + return ( + <> + + + <> + {items.map(({ id, path }, index) => { + return ( + + {(provided) => ( + + +
    + +
    +
    + + + + + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove item" + /> + + )} +
    + )} +
    + ); + })} + +
    +
    + + + + Add employee + + + ); + }} +
    + +
    + ); +} + +Reorder.storyName = 'Reorder'; + +Reorder.parameters = { + docs: { + source: { + code: ` +const defaultValue = { + employees: [ + { + name: 'John', + lastName: 'Snow', + }, + { + name: 'Mick', + lastName: 'Jagger', + }, + { + name: 'Roger', + lastName: 'Federer', + }, + ], +}; + +const MyFormComponent = () => { + const { form } = useForm({ defaultValue }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    Employees

    +
    + + + + {({ items, addItem, removeItem, moveItem }) => { + const onDragEnd = ({ source, destination }: DropResult) => { + if (source && destination) { + moveItem(source.index, destination.index); + } + }; + + return ( + <> + + + <> + {items.map(({ id, path }, index) => { + return ( + + {(provided) => ( + + +
    + +
    +
    + + + + + + + {items.length > 1 && ( + + removeItem(id)} + aria-label="Remove item" + /> + + )} +
    + )} +
    + ); + })} + +
    +
    + + + + Add employee + + + ); + }} +
    + + Send + + ); +} + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_change_listeners.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_change_listeners.tsx new file mode 100644 index 0000000000000..41bb15d5c47aa --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_change_listeners.tsx @@ -0,0 +1,133 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect } from 'react'; +import { action } from '@storybook/addon-actions'; +import { EuiText, EuiTextColor, EuiSpacer } from '@elastic/eui'; + +import { TextField } from '../../../components'; +import { useFormData } from '../../hooks/use_form_data'; +import { UseField } from '../use_field'; + +/** + * This Story outputs the order in which different state update + * and events occur whenever a field value changes. + */ +export const ChangeListeners = () => { + const onUseFormDataChange = ({ title }: { title: string }) => { + action('1. useFormData() -> onChange() handler')(title); + }; + const [{ title }] = useFormData({ watch: 'title', onChange: onUseFormDataChange }); + + const onFieldChangeProp = (value: string) => { + action('2. onChange() prop handler')(value); + }; + + useEffect(() => { + action('4. useEffect() "title" changed')(title); + action('')('----------------------------------'); + }, [title]); + + return ( + <> + +

    + + Info: start writing in the field and see the order of change listeners appear in the + "Actions" panel below. + +

    +
    + + + path="title" + component={TextField} + config={{ + label: 'Title', + helpText: 'This is a help text for the field.', + validations: [ + { + validator: ({ value }) => { + action('3. Validating "title" field')(value); + }, + }, + ], + }} + onChange={onFieldChangeProp} + /> + + ); +}; + +ChangeListeners.storyName = 'ChangeListeners'; + +ChangeListeners.parameters = { + docs: { + source: { + code: ` +const MyFormComponent = () => { + const { form } = useForm({ defaultValue }); + + const onUseFormDataChange = ({ title }: { title: string }) => { + action('1. useFormData() -> onChange() handler')(title); + }; + const [{ title }] = useFormData({ watch: 'title', onChange: onUseFormDataChange }); + + const onFieldChangeProp = (value: string) => { + action('2. onChange() prop handler')(value); + }; + + useEffect(() => { + action('4. useEffect() "title" changed')(title); + action('')('----------------------------------'); + }, [title]); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    + + Info: start writing in the field and see the order of change listeners appear in the + "Actions" panel below. + +

    +
    + + + path="title" + component={TextField} + config={{ + label: 'Title', + helpText: 'This is a help text for the field.', + validations: [ + { + validator: ({ value }) => { + action('3. Validating "title" field')(value); + }, + }, + ], + }} + onChange={onFieldChangeProp} + /> + + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_field_types.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_field_types.tsx new file mode 100644 index 0000000000000..e179d7b5315ca --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_field_field_types.tsx @@ -0,0 +1,292 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { action } from '@storybook/addon-actions'; +import { EuiText, EuiTextColor, EuiSpacer, EuiHealth } from '@elastic/eui'; + +import { FieldConfig } from '../../types'; +import { + TextField, + TextAreaField, + NumericField, + ToggleField, + ComboBoxField, + CheckBoxField, + JsonEditorField, + MultiSelectField, + RadioGroupField, + RangeField, + SelectField, + SuperSelectField, +} from '../../../components'; +import { fieldFormatters } from '../../../helpers'; +import { UseField } from '../use_field'; + +const fieldTypeOptions = [ + 'checkBox', + 'comboBox', + 'jsonEditor', + 'multiSelect', + 'number', + 'radioGroup', + 'range', + 'select', + 'superSelect', + 'text', + 'textArea', + 'toggle', +] as const; + +type FieldType = typeof fieldTypeOptions[number]; + +const fieldConfigBase: FieldConfig = { + label: 'My field', +}; + +const getPropsForType = (type: FieldType) => { + switch (type) { + case 'text': + return { + component: TextField, + }; + case 'number': + return { + component: NumericField, + config: { + ...fieldConfigBase, + formatters: [fieldFormatters.toInt], + }, + }; + case 'toggle': + return { + component: ToggleField, + defaultValue: true, + }; + case 'checkBox': + return { + component: CheckBoxField, + defaultValue: true, + }; + case 'select': + return { + component: SelectField, + defaultValue: 'option_one', + componentProps: { + euiFieldProps: { + options: [ + { value: 'option_one', text: 'Option one' }, + { value: 'option_two', text: 'Option two' }, + { value: 'option_three', text: 'Option three' }, + ], + }, + }, + }; + case 'superSelect': + return { + component: SuperSelectField, + defaultValue: 'minor', + componentProps: { + euiFieldProps: { + options: [ + { + value: 'warning', + inputDisplay: ( + + Warning + + ), + disabled: true, + }, + { + value: 'minor', + inputDisplay: ( + + Minor + + ), + }, + { + value: 'critical', + inputDisplay: ( + + Critical + + ), + }, + ], + }, + }, + }; + case 'multiSelect': + // TODO: update MultiSelectField to use + // and + return { + component: MultiSelectField, + euiFieldProps: { + options: [ + { label: 'Johann Sebastian Bach', checked: 'on' }, + { label: 'Wolfgang Amadeus Mozart', checked: 'on' }, + { label: 'Antonín Dvořák', checked: 'off' }, + { label: 'Dmitri Shostakovich' }, + { label: 'Felix Mendelssohn-Bartholdy' }, + { label: 'Franz Liszt' }, + { label: 'Franz Schubert' }, + { label: 'Frédéric Chopin' }, + { label: 'Georg Friedrich Händel' }, + { label: 'Giuseppe Verdi' }, + { label: 'Gustav Mahler' }, + { label: 'Igor Stravinsky' }, + { label: 'Johannes Brahms' }, + { label: 'Joseph Haydn' }, + { label: 'Ludwig van Beethoven' }, + { label: 'Piotr Illitch Tchaïkovsky' }, + { label: 'Robert Schumann' }, + { label: 'Sergej S. Prokofiew' }, + ], + searchable: true, + }, + }; + case 'comboBox': + return { + component: ComboBoxField, + defaultValue: [], + }; + case 'jsonEditor': + return { + component: JsonEditorField, + defaultValue: '', + componentProps: { + euiCodeEditorProps: { + height: '280px', + }, + }, + }; + case 'radioGroup': + return { + component: RadioGroupField, + defaultValue: 'optionTwo', + euiFieldProps: { + options: [ + { + id: 'optionOne', + label: 'Option one', + }, + { + id: 'optionTwo', + label: 'Option two is checked by default', + }, + { + id: 'radioGroupItemThird', + label: 'Option three is disabled', + disabled: true, + }, + ], + }, + }; + case 'textArea': + return { + component: TextAreaField, + }; + case 'range': + return { + component: RangeField, + defaultValue: 3, + config: { + ...fieldConfigBase, + serializer: fieldFormatters.toInt, + }, + }; + default: + throw new Error(`No props found for ${type} type`); + } +}; + +interface Params { + fieldType: FieldType; +} + +export function FieldTypes({ fieldType }: Params) { + return ( + <> + +

    + + Info: change the field type in the "Controls" panel below. + +

    +
    + + + // We add a key to force a reset of the state whenever + // the field type changes + key={fieldType} + path="myField" + config={{ ...fieldConfigBase }} + onChange={action('onChange')} + {...getPropsForType(fieldType)} + /> + + ); +} + +FieldTypes.args = { + fieldType: 'text', +}; + +FieldTypes.argTypes = { + fieldType: { + options: fieldTypeOptions, + control: { type: 'radio' }, + }, +}; + +FieldTypes.storyName = 'FieldTypes'; + +FieldTypes.parameters = { + docs: { + source: { + code: ` +const MyFormComponent = () => { + const { form } = useForm({ defaultValue }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    + + Info: change the field type in the "Controls" panel below. + +

    +
    + + + // We add a key to force a reset of the state whenever + // the field type changes + key={fieldType} + path="myField" + config={{ ...fieldConfigBase }} + onChange={action('onChange')} + {...getPropsForType(fieldType)} + /> + + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_multi_field_basic.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_multi_field_basic.tsx new file mode 100644 index 0000000000000..dc3acf99c63a7 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/__stories__/use_multi_field_basic.tsx @@ -0,0 +1,143 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { useEffect } from 'react'; +import { EuiSpacer, EuiDualRange, EuiText, EuiTextColor, EuiFormRow } from '@elastic/eui'; +import { action } from '@storybook/addon-actions'; + +import { useFormData } from '../../hooks'; +import { UseMultiFields } from '../use_multi_fields'; + +const fields = { + min: { + path: 'minValue', + defaultValue: 0, + }, + max: { + path: 'maxValue', + defaultValue: 100, + }, +}; + +export function Basic() { + const [{ minValue: _min, maxValue: _max }] = useFormData(); + + useEffect(() => { + action('Min max values')([_min, _max]); + }, [_min, _max]); + + return ( + <> + +

    + + When you need to declare multiple fields you can use "UseMultiFields" to avoid + nesting multiple "UseField". + +

    +
    + + + + fields={fields}> + {({ min, max }) => { + return ( + { + min.setValue(minValue as number); + max.setValue(maxValue as number); + }} + /> + ); + }} + + + + ); +} + +Basic.storyName = 'Basic'; + +Basic.parameters = { + docs: { + source: { + code: ` +const fields = { + min: { + path: 'minValue', + defaultValue: 0, + }, + max: { + path: 'maxValue', + defaultValue: 100, + }, +}; + +const MyFormComponent = () => { + const { form } = useForm({ defaultValue }); + + const [{ minValue: _min, maxValue: _max }] = useFormData(); + + useEffect(() => { + action('Min max values')([_min, _max]); + }, [_min, _max]); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + +

    + + When you need to declare multiple fields you can use "UseMultiFields" to avoid + nesting multiple "UseField". + +

    +
    + + + + fields={fields}> + {({ min, max }) => { + return ( + { + min.setValue(minValue as number); + max.setValue(maxValue as number); + }} + /> + ); + }} + + + + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.stories.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.stories.tsx new file mode 100644 index 0000000000000..16afbbe21f9e8 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.stories.tsx @@ -0,0 +1,166 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { ComponentMeta } from '@storybook/react'; +import { EuiButton } from '@elastic/eui'; + +import { action } from '@storybook/addon-actions'; +import { TextField } from '../../components'; +import { STORYBOOK_SECTION } from '../constants'; +import { FormHook, FieldConfig } from '../types'; +import { useForm } from '../hooks/use_form'; +import { Form, Props as FormProps } from './form'; +import { UseField } from './use_field'; +import { formStories } from './__stories__'; + +export default { + component: Form, + title: `${STORYBOOK_SECTION}/Form`, + subcomponents: { UseField }, + decorators: [(Story) =>
    {Story()}
    ], + parameters: { + controls: { hideNoControlsWarning: true }, + }, +} as ComponentMeta; + +type Args = Pick; + +const { DefaultValue, Validation, DeSerializer, IsModified, GlobalFields } = formStories; + +/** + * Validate the form and return its data. + * + * @param form The FormHook instance + */ +const submitForm = async (form: FormHook) => { + const { isValid, data } = await form.submit(); + action('Send form')({ + isValid, + data: JSON.stringify(data), + }); +}; + +/** + * The "title" field base configuration + */ +const titleConfigBase: FieldConfig = { + label: 'Title', + helpText: 'This is a help text for the field.', +}; + +// --- SIMPLE + +export const Simple = (args: Args) => { + const { form } = useForm(); + + return ( +
    + + path="title" + component={TextField} + config={{ + ...titleConfigBase, + }} + /> + submitForm(form)}>Send + + ); +}; + +Simple.parameters = { + docs: { + source: { + code: ` +const MyFormComponent = () => { + const { form } = useForm(); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + + path="title" + component={TextField} + config={{ + label: 'Title', + helpText: 'This is a help text for the field.', + }} + /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; + +// --- FORM SCHEMA + +const formSchema = { + title: { + ...titleConfigBase, + }, +}; + +export const Schema = (args: Args) => { + const { form } = useForm({ + schema: formSchema, + }); + + return ( +
    + path="title" component={TextField} /> + submitForm(form)}>Send + + ); +}; + +Schema.parameters = { + docs: { + source: { + code: ` +const formSchema = { + title: { + label: 'Title', + helpText: 'This is a help text for the field.', + }, +}; + +const MyFormComponent = () => { + const { form } = useForm({ + schema: formSchema, + }); + + const submitForm = async () => { + const { isValid, data } = await form.submit(); + if (isValid) { + // ... do something with the data + } + }; + + return ( +
    + path="title" component={TextField} /> + Send + + ); +}; + `, + language: 'tsx', + }, + }, +}; + +export { DefaultValue, Validation, DeSerializer, IsModified, GlobalFields }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.tsx index 31d1c09712c93..99bffb44b5612 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.tsx +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form.tsx @@ -13,7 +13,7 @@ import { FormProvider } from '../form_context'; import { FormDataContextProvider } from '../form_data_context'; import { FormHook } from '../types'; -interface Props { +export interface Props { form: FormHook; FormWrapper?: React.ComponentType; children: ReactNode | ReactNode[]; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.stories.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.stories.tsx new file mode 100644 index 0000000000000..c565481d0d0a6 --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.stories.tsx @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { ComponentMeta } from '@storybook/react'; + +import { STORYBOOK_SECTION } from '../constants'; +import { UseArray } from './use_array'; +import { useArrayStories } from './__stories__'; + +const { UseArrayBasic, UseArrayReorder, UseArrayComplex, UseArrayDynamicData } = useArrayStories; + +export default { + component: UseArray, + title: `${STORYBOOK_SECTION}/UseArray`, + decorators: [ + (Story) => { + return ( +
    + +
    + ); + }, + ], +} as ComponentMeta; + +export { UseArrayBasic, UseArrayReorder, UseArrayComplex, UseArrayDynamicData }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts index d6ada976c875c..7f5743ef134e8 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_array.ts @@ -13,7 +13,7 @@ import { getFieldValidityAndErrorMessage } from '../helpers'; import { useFormContext } from '../form_context'; import { useField, InternalFieldConfig } from '../hooks'; -interface Props { +export interface Props { path: string; initialNumberOfItems?: number; readDefaultValueOnForm?: boolean; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.stories.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.stories.tsx new file mode 100644 index 0000000000000..e280d8e4a944b --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.stories.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { ComponentMeta } from '@storybook/react'; +import { action } from '@storybook/addon-actions'; +import { EuiButton, EuiSpacer } from '@elastic/eui'; + +import { STORYBOOK_SECTION } from '../constants'; +import { FormHook } from '../types'; +import { useForm } from '../hooks/use_form'; + +import { Form } from './form'; +import { UseField } from './use_field'; +import { useFieldStories } from './__stories__'; + +const { UseFieldFieldTypes, UseFieldChangeListeners } = useFieldStories; + +/** + * Validate the form and return its data. + * + * @param form The FormHook instance + */ +const submitForm = async (form: FormHook) => { + const { isValid, data } = await form.submit(); + action('Send form')({ + isValid, + data: JSON.stringify(data), + }); +}; + +export default { + component: UseField, + title: `${STORYBOOK_SECTION}/UseField`, + decorators: [ + (Story) => { + const { form } = useForm(); + return ( +
    +
    + <> + + + submitForm(form)}>Send + + +
    + ); + }, + ], +} as ComponentMeta; + +export { UseFieldFieldTypes, UseFieldChangeListeners }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.tsx index 7e216e3126ed8..86af10f08cc23 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.tsx +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_field.tsx @@ -6,11 +6,10 @@ * Side Public License, v 1. */ -import React, { FunctionComponent, useMemo, useEffect } from 'react'; +import React, { FunctionComponent } from 'react'; -import { FieldHook, FieldConfig, FormData, FieldValidationData } from '../types'; -import { useField, InternalFieldConfig } from '../hooks'; -import { useFormContext } from '../form_context'; +import { FieldHook, FieldConfig, FormData } from '../types'; +import { useFieldFromProps } from '../hooks'; export interface Props { path: string; @@ -49,104 +48,13 @@ export interface Props { } function UseFieldComp(props: Props) { - const form = useFormContext(); - const { getFieldDefaultValue, __readFieldConfigFromSchema, __updateDefaultValueAt } = form; + const { field, propsToForward } = useFieldFromProps(props); - const { - path, - config = __readFieldConfigFromSchema(props.path), - defaultValue, - component, - componentProps, - readDefaultValueOnForm = true, - onChange, - onError, - children, - validationData, - validationDataProvider, - ...rest - } = props; - - const ComponentToRender = component ?? 'input'; - const propsToForward = { ...componentProps, ...rest }; - - const initialValue = useMemo(() => { - // The initial value of the field. - // Order in which we'll determine this value: - // 1. The "defaultValue" passed through prop - // --> - // 2. A value declared in the "defaultValue" object passed to the form when initiating - // --> const { form } = useForm({ defaultValue: { foo: 'bar' } })) - // 3. The "defaultValue" declared on the field "config". Either passed through prop or on the form schema - // a. --> - // b. --> const formSchema = { foo: { defaultValue: 'bar' } } - // 4. An empty string ("") - - if (defaultValue !== undefined) { - return defaultValue; // defaultValue passed through props - } - - let value: T | undefined; - - if (readDefaultValueOnForm) { - // Check the "defaultValue" object passed to the form - value = getFieldDefaultValue(path); - } - - if (value === undefined) { - // Check the field "config" object (passed through prop or declared on the form schema) - value = config?.defaultValue; - } - - // If still undefined return an empty string - return value === undefined ? ('' as unknown as T) : value; - }, [defaultValue, path, config, readDefaultValueOnForm, getFieldDefaultValue]); - - const fieldConfig = useMemo & InternalFieldConfig>( - () => ({ - ...config, - initialValue, - }), - [config, initialValue] - ); - - const fieldValidationData = useMemo( - () => ({ - validationData, - validationDataProvider, - }), - [validationData, validationDataProvider] - ); - - const field = useField( - form, - path, - fieldConfig, - onChange, - onError, - fieldValidationData - ); - - useEffect(() => { - let needsCleanUp = false; - - if (defaultValue !== undefined) { - needsCleanUp = true; - // Update the form "defaultValue" ref object. - // This allows us to reset the form and put back the defaultValue of each field - __updateDefaultValueAt(path, defaultValue); - } - - return () => { - if (needsCleanUp) { - __updateDefaultValueAt(path, undefined); - } - }; - }, [path, defaultValue, __updateDefaultValueAt]); + const ComponentToRender = props.component ?? 'input'; // Children prevails over anything else provided. - if (children) { - return children(field); + if (props.children) { + return props.children(field); } if (ComponentToRender === 'input') { diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_field.stories.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_field.stories.tsx new file mode 100644 index 0000000000000..0cefc77bda9fb --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_field.stories.tsx @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React from 'react'; +import { ComponentMeta } from '@storybook/react'; +import { action } from '@storybook/addon-actions'; +import { EuiButton, EuiSpacer } from '@elastic/eui'; + +import { STORYBOOK_SECTION } from '../constants'; +import { FormHook } from '../types'; +import { useForm } from '../hooks/use_form'; + +import { Form } from './form'; +import { UseField } from './use_field'; +import { UseMultiFields } from './use_multi_fields'; +import { useMultiFieldStories } from './__stories__'; + +const { UseMultiFieldBasic } = useMultiFieldStories; + +/** + * Validate the form and return its data. + * + * @param form The FormHook instance + */ +const submitForm = async (form: FormHook) => { + const { isValid, data } = await form.submit(); + action('Send form')({ + isValid, + data: JSON.stringify(data), + }); +}; + +export default { + component: UseMultiFields, + title: `${STORYBOOK_SECTION}/UseMultiFields`, + decorators: [ + (Story) => { + const { form } = useForm(); + return ( +
    +
    + <> + + + submitForm(form)}>Send + + +
    + ); + }, + ], +} as ComponentMeta; + +export { UseMultiFieldBasic }; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.test.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.test.tsx new file mode 100644 index 0000000000000..94c36613c44ba --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.test.tsx @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import React, { useState } from 'react'; + +import { registerTestBed } from '../shared_imports'; +import { FieldHook } from '../types'; +import { useForm } from '../hooks/use_form'; +import { Form } from './form'; +import { UseMultiFields } from './use_multi_fields'; + +describe('', () => { + beforeAll(() => { + jest.useFakeTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + const fields = { + foo: { path: 'foo' }, + bar: { path: 'bar' }, + }; + + const TestComp = ({ onFields }: { onFields: (fields: { [x: string]: FieldHook }) => void }) => { + const { form } = useForm(); + const [stateFields, setStateFields] = useState<{ [key: string]: any }>(fields); + + const changeStateFields = () => { + // We'll make sure that if other fields are passed down after the initial + // rendering of the change does not create new FieldHook as that + // would break the **order** of hooks declared inside + + setStateFields({ + aaa: { path: 'aaa' }, // we add this field that will come first when sorting() A-Z + ...fields, + }); + }; + + return ( +
    + + {(hookFields) => { + onFields(hookFields); + return null; + }} + + +
    + ); + }; + + test('it should return 2 hook fields', () => { + const onFields = jest.fn(); + + const setup = registerTestBed(TestComp, { + defaultProps: { onFields }, + memoryRouter: { wrapComponent: false }, + }); + + setup(); + + expect(onFields).toHaveBeenCalled(); + const fieldsReturned = onFields.mock.calls[0][0]; + + expect(fieldsReturned.foo.path).toBe(fields.foo.path); + expect(fieldsReturned.foo.isPristine).toBeDefined(); // It's a FieldHook! + expect(fieldsReturned.bar.path).toBe(fields.bar.path); + expect(fieldsReturned.bar.isPristine).toBeDefined(); + }); + + test('it should keep a stable ref of initial fields passed', () => { + const onFields = jest.fn(); + + const setup = registerTestBed(TestComp, { + defaultProps: { onFields }, + memoryRouter: { wrapComponent: false }, + }); + + const { find } = setup(); + + expect(onFields).toBeCalledTimes(1); + let fieldsReturned = onFields.mock.calls[0][0] as { [key: string]: FieldHook }; + let paths = Object.values(fieldsReturned).map(({ path }) => path); + expect(paths).toEqual(['bar', 'foo']); + + // We change the fields passed down to + find('changeFields').simulate('click'); + expect(onFields).toBeCalledTimes(2); + fieldsReturned = onFields.mock.calls[1][0] as { [key: string]: FieldHook }; + paths = Object.values(fieldsReturned).map(({ path }) => path); + + // We still get the same 2 fields originally passed + expect(paths).toEqual(['bar', 'foo']); + }); +}); diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.tsx b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.tsx index 542be17a782f1..ac2bf5204c01d 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.tsx +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/components/use_multi_fields.tsx @@ -6,16 +6,15 @@ * Side Public License, v 1. */ -import React from 'react'; +import { useRef } from 'react'; -import { UseField, Props as UseFieldProps } from './use_field'; +import { Props as UseFieldProps } from './use_field'; +import { useFieldFromProps } from '../hooks'; import { FieldHook } from '../types'; -type FieldsArray = Array<{ id: string } & Omit, 'children'>>; - interface Props { fields: { [K in keyof T]: Exclude, 'children'> }; - children: (fields: { [K in keyof T]: FieldHook }) => JSX.Element; + children: (fields: { [K in keyof T]: FieldHook }) => JSX.Element | null; } /** @@ -59,7 +58,7 @@ const fields = { }, }; - + {({ min, max }) => { return ( ); }} - + ``` */ export function UseMultiFields({ fields, children }: Props) { - const fieldsArray = Object.entries(fields).reduce( - (acc, [fieldId, field]) => [...acc, { id: fieldId, ...(field as FieldHook) }], - [] as FieldsArray - ); + // Create a stable reference of fields Ids to prevent creating more fields + // by changing the "fields" prop. This is not allowed as it would break + // the hook order below. + const fieldIds = useRef(Object.keys(fields).sort() as Array); - const hookFields: { [K in keyof T]: FieldHook } = {} as any; + const hookFields = fieldIds.current.reduce((acc, id) => { + // We can disable the rules-of-hooks that prevents us to create a hook + // from inside a callback as we have the **guarantee** that the field hooks are created + // in the same order. - const renderField = (index: number) => { - const { id } = fieldsArray[index]; - return ( - - {(field) => { - hookFields[id as keyof T] = field; - return index === fieldsArray.length - 1 ? children(hookFields) : renderField(index + 1); - }} - - ); - }; + // eslint-disable-next-line react-hooks/rules-of-hooks + const { field } = useFieldFromProps(fields[id]); + return { + ...acc, + [id]: field, + }; + }, {} as { [K in keyof T]: FieldHook }); - if (!Boolean(fieldsArray.length)) { + if (!Boolean(fieldIds.current.length)) { return null; } - return renderField(0); + return children(hookFields); } diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/constants.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/constants.ts index c9886a789df20..93bcd590749e9 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/constants.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/constants.ts @@ -31,3 +31,5 @@ export const VALIDATION_TYPES = { /** If the field value is an Array, this error type would be returned if an _item_ of the array is invalid */ ARRAY_ITEM: 'arrayItem', }; + +export const STORYBOOK_SECTION = 'Form lib'; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts index f4911bfaadfa4..3f6c1ed53ab7f 100644 --- a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/index.ts @@ -8,6 +8,7 @@ export type { InternalFieldConfig } from './use_field'; export { useField } from './use_field'; +export { useFieldFromProps } from './use_field_from_props'; export { useForm } from './use_form'; export { useFormData } from './use_form_data'; export { useFormIsModified } from './use_form_is_modified'; diff --git a/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field_from_props.ts b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field_from_props.ts new file mode 100644 index 0000000000000..a3d36fd534b5d --- /dev/null +++ b/src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_field_from_props.ts @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { useMemo, useEffect } from 'react'; +import { UseFieldProps } from '../components'; +import { FieldHook, FieldConfig, FieldValidationData } from '../types'; +import { useFormContext } from '../form_context'; +import { useField, InternalFieldConfig } from './use_field'; + +/** + * Hook to initialize a FieldHook based on Props passed to or + * + * @param props The props passed to or + * @returns The field hook and props to forward to component to render for the field + */ + +export const useFieldFromProps = ( + props: UseFieldProps +): { field: FieldHook; propsToForward: { [x: string]: unknown } } => { + const form = useFormContext(); + const { getFieldDefaultValue, __readFieldConfigFromSchema, __updateDefaultValueAt } = form; + + const { + path, + config = __readFieldConfigFromSchema(props.path), + defaultValue, + component, + componentProps, + readDefaultValueOnForm = true, + onChange, + onError, + children, + validationData, + validationDataProvider, + ...rest + } = props; + + const initialValue = useMemo(() => { + // The initial value of the field. + // Order in which we'll determine this value: + // 1. The "defaultValue" passed through prop + // --> + // 2. A value declared in the "defaultValue" object passed to the form when initiating + // --> const { form } = useForm({ defaultValue: { foo: 'bar' } })) + // 3. The "defaultValue" declared on the field "config". Either passed through prop or on the form schema + // a. --> + // b. --> const formSchema = { foo: { defaultValue: 'bar' } } + // 4. An empty string ("") + + if (defaultValue !== undefined) { + return defaultValue; // defaultValue passed through props + } + + let value: T | undefined; + + if (readDefaultValueOnForm) { + // Check the "defaultValue" object passed to the form + value = getFieldDefaultValue(path); + } + + if (value === undefined) { + // Check the field "config" object (passed through prop or declared on the form schema) + value = config?.defaultValue; + } + + // If still undefined return an empty string + return value === undefined ? ('' as unknown as T) : value; + }, [defaultValue, path, config, readDefaultValueOnForm, getFieldDefaultValue]); + + const fieldConfig = useMemo & InternalFieldConfig>( + () => ({ + ...config, + initialValue, + }), + [config, initialValue] + ); + + const fieldValidationData = useMemo( + () => ({ + validationData, + validationDataProvider, + }), + [validationData, validationDataProvider] + ); + + const field = useField( + form, + path, + fieldConfig, + onChange, + onError, + fieldValidationData + ); + + useEffect(() => { + let needsCleanUp = false; + + if (defaultValue !== undefined) { + needsCleanUp = true; + // Update the form "defaultValue" ref object. + // This allows us to reset the form and put back the defaultValue of each field + __updateDefaultValueAt(path, defaultValue); + } + + return () => { + if (needsCleanUp) { + __updateDefaultValueAt(path, undefined); + } + }; + }, [path, defaultValue, __updateDefaultValueAt]); + + const propsToForward = { ...componentProps, ...rest }; + + return { field, propsToForward }; +}; diff --git a/src/plugins/es_ui_shared/tsconfig.json b/src/plugins/es_ui_shared/tsconfig.json index 90459058eec71..430ec5b85e4f7 100644 --- a/src/plugins/es_ui_shared/tsconfig.json +++ b/src/plugins/es_ui_shared/tsconfig.json @@ -11,7 +11,9 @@ "common/**/*", "public/**/*", "server/**/*", - "static/**/*" + "static/**/*", + "../../../typings/**/*", + ".storybook/**/*" ], "references": [ { "path": "../../core/tsconfig.json" }, From e0b6517ae5b101a40133751024076150c824dd1e Mon Sep 17 00:00:00 2001 From: Najmieh Sadat <98463228+najmiehsa@users.noreply.github.com> Date: Wed, 13 Jul 2022 17:45:42 +0430 Subject: [PATCH 05/96] [ResponseOps] escape vertical bars in mustache variables when used with markdown (#136072) resolves https://github.com/elastic/kibana/issues/135826 Escapes the character `|` in mustache variables used in markdown content, so that embedded `|` chars in a mustache variable can still be used in markdown tables (that use `|`). --- x-pack/plugins/actions/server/lib/mustache_renderer.test.ts | 2 ++ x-pack/plugins/actions/server/lib/mustache_renderer.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/x-pack/plugins/actions/server/lib/mustache_renderer.test.ts b/x-pack/plugins/actions/server/lib/mustache_renderer.test.ts index a72e0fd54bd17..2dff9bac3eddf 100644 --- a/x-pack/plugins/actions/server/lib/mustache_renderer.test.ts +++ b/x-pack/plugins/actions/server/lib/mustache_renderer.test.ts @@ -28,6 +28,7 @@ const variables = { st: '*', ul: '_', st_lt: '*<', + vl: '|', }; describe('mustache_renderer', () => { @@ -77,6 +78,7 @@ describe('mustache_renderer', () => { expect(renderMustacheString('{{bs}}', variables, 'markdown')).toBe('\\' + variables.bs); expect(renderMustacheString('{{st}}', variables, 'markdown')).toBe('\\' + variables.st); expect(renderMustacheString('{{ul}}', variables, 'markdown')).toBe('\\' + variables.ul); + expect(renderMustacheString('{{vl}}', variables, 'markdown')).toBe('\\' + variables.vl); }); it('handles triple escapes', () => { diff --git a/x-pack/plugins/actions/server/lib/mustache_renderer.ts b/x-pack/plugins/actions/server/lib/mustache_renderer.ts index 1e7f2dd3ab644..24c18f7654d4f 100644 --- a/x-pack/plugins/actions/server/lib/mustache_renderer.ts +++ b/x-pack/plugins/actions/server/lib/mustache_renderer.ts @@ -123,6 +123,7 @@ function escapeMarkdown(value: unknown): string { return `${value}` .replace(/\\/g, '\\\\') + .replace(/\|/g, '\\|') .replace(/`/g, '\\`') .replace(/\*/g, '\\*') .replace(/_/g, '\\_') From 63335d8e37b826864b15b1e2963bb70dadd0b13d Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 13 Jul 2022 07:51:23 -0600 Subject: [PATCH 06/96] [maps] clean-up filter by map bounds action (#136045) * [maps] clean-up filter by map bounds action * modal * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * update docs * fix warning in generated filter pill * fix functional test * fix jest test * review feedback Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../images/enable_filter_by_map_extent.png | Bin 724529 -> 0 bytes docs/maps/search.asciidoc | 23 ++--- .../spatial_filter_utils.test.ts | 6 ++ .../spatial_filter_utils.ts | 1 + .../es_geo_grid_source.test.ts | 1 + .../embeddable/get_geo_fields_label.test.ts | 22 +++++ .../public/embeddable/get_geo_fields_label.ts | 33 +++++++ .../maps/public/embeddable/map_embeddable.tsx | 81 ++++++++++-------- ...vement.ts => map_embeddables_singleton.ts} | 13 ++- .../filter_by_map_extent_action.ts | 55 ------------ .../filter_by_map_extent_action.tsx | 73 ++++++++++++++++ .../filter_by_map_extent_modal.tsx | 66 ++++++++++++++ .../synchronize_movement_action.tsx | 4 +- .../synchronize_movement_modal.tsx | 4 +- .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 3 - .../translations/translations/zh-CN.json | 3 - .../group2/embeddable/filter_by_map_extent.js | 15 +++- 18 files changed, 284 insertions(+), 122 deletions(-) delete mode 100644 docs/maps/images/enable_filter_by_map_extent.png create mode 100644 x-pack/plugins/maps/public/embeddable/get_geo_fields_label.test.ts create mode 100644 x-pack/plugins/maps/public/embeddable/get_geo_fields_label.ts rename x-pack/plugins/maps/public/embeddable/{synchronize_movement.ts => map_embeddables_singleton.ts} (84%) delete mode 100644 x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.ts create mode 100644 x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.tsx create mode 100644 x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_modal.tsx diff --git a/docs/maps/images/enable_filter_by_map_extent.png b/docs/maps/images/enable_filter_by_map_extent.png deleted file mode 100644 index 5132dc8f73dbef31579e5a939931ddab22726adb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724529 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

    38{F%dVJ2PEhj|uceQm=hdCe(C~-eTMdM*8 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%0DEkYtvX=eadk#Ng6v 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

      @3%QYS7Y9G?%QE5CaJ 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%0A)FUpYw!0j9%n=^Nkk5a=g#oApUCn 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

      bPfvt~Nk8C;3^)Q{`S_lDMPR9b!ymssb?MffG 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

      x2g7su{A0rI&*LYy=i5!T3y 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%0D9Vh5|dLKNCe1gda7G*Vcv#{H1(e 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 { disabled: false, key: 'location', negate: false, + type: 'spatial_filter', }, query: { bool: { @@ -66,6 +67,7 @@ describe('createExtentFilter', () => { disabled: false, key: 'location', negate: false, + type: 'spatial_filter', }, query: { bool: { @@ -102,6 +104,7 @@ describe('createExtentFilter', () => { disabled: false, key: 'location', negate: false, + type: 'spatial_filter', }, query: { bool: { @@ -138,6 +141,7 @@ describe('createExtentFilter', () => { disabled: false, key: 'location', negate: false, + type: 'spatial_filter', }, query: { bool: { @@ -174,6 +178,7 @@ describe('createExtentFilter', () => { disabled: false, key: 'location', negate: false, + type: 'spatial_filter', }, query: { bool: { @@ -210,6 +215,7 @@ describe('createExtentFilter', () => { disabled: false, isMultiIndex: true, negate: false, + type: 'spatial_filter', }, query: { bool: { diff --git a/x-pack/plugins/maps/common/elasticsearch_util/spatial_filter_utils.ts b/x-pack/plugins/maps/common/elasticsearch_util/spatial_filter_utils.ts index 1cf19a0c8aa81..faa4fbc1383ee 100644 --- a/x-pack/plugins/maps/common/elasticsearch_util/spatial_filter_utils.ts +++ b/x-pack/plugins/maps/common/elasticsearch_util/spatial_filter_utils.ts @@ -89,6 +89,7 @@ export function createExtentFilter(mapExtent: MapExtent, geoFieldNames: string[] } const meta: FilterMeta = { + type: SPATIAL_FILTER_TYPE, alias: null, disabled: false, negate: false, diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts index 831dc90871dff..a7afbbd7e85eb 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts @@ -224,6 +224,7 @@ describe('ESGeoGridSource', () => { disabled: false, key: 'bar', negate: false, + type: 'spatial_filter', }, query: { bool: { diff --git a/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.test.ts b/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.test.ts new file mode 100644 index 0000000000000..5144e87e8b698 --- /dev/null +++ b/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.test.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getGeoFieldsLabel } from './get_geo_fields_label'; + +test('single field', () => { + expect(getGeoFieldsLabel(['location'])).toEqual('location'); +}); + +test('two fields', () => { + expect(getGeoFieldsLabel(['location', 'secondLocation'])).toEqual('location and secondLocation'); +}); + +test('three or more fields', () => { + expect(getGeoFieldsLabel(['location', 'secondLocation', 'thirdLocation'])).toEqual( + 'location, secondLocation, and thirdLocation' + ); +}); diff --git a/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.ts b/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.ts new file mode 100644 index 0000000000000..dba2776720aad --- /dev/null +++ b/x-pack/plugins/maps/public/embeddable/get_geo_fields_label.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export function getGeoFieldsLabel(geoFieldNames: string[]) { + if (geoFieldNames.length === 0) { + return ''; + } + + if (geoFieldNames.length === 1) { + return geoFieldNames[0]; + } + + const connector = i18n.translate('xpack.maps.embeddable.geoFieldsConnector', { + defaultMessage: ' and ', + }); + + if (geoFieldNames.length === 2) { + return geoFieldNames[0] + connector + geoFieldNames[1]; + } + + return ( + geoFieldNames.slice(0, geoFieldNames.length - 1).join(', ') + + ',' + + connector + + geoFieldNames[geoFieldNames.length - 1] + ); +} diff --git a/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx index 8a1064a8725bb..59f679d041024 100644 --- a/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx +++ b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx @@ -82,8 +82,8 @@ import { getIndexPatternsFromIds } from '../index_pattern_util'; import { getMapAttributeService } from '../map_attribute_service'; import { isUrlDrilldown, toValueClickDataFormat } from '../trigger_actions/trigger_utils'; import { waitUntilTimeLayersLoad$ } from '../routes/map_page/map_app/wait_until_time_layers_load'; -import { synchronizeMovement } from './synchronize_movement'; -import { getFilterByMapExtent } from '../trigger_actions/filter_by_map_extent_action'; +import { mapEmbeddablesSingleton } from './map_embeddables_singleton'; +import { getGeoFieldsLabel } from './get_geo_fields_label'; import { MapByValueInput, @@ -112,7 +112,6 @@ export class MapEmbeddable private _savedMap: SavedMap; private _renderTooltipContent?: RenderToolTipContent; private _subscription: Subscription; - private _prevFilterByMapExtent: boolean; private _prevIsRestore: boolean = false; private _prevMapExtent?: MapExtent; private _prevTimeRange?: TimeRange; @@ -144,7 +143,6 @@ export class MapEmbeddable this._initializeSaveMap(); this._subscription = this.getUpdated$().subscribe(() => this.onUpdate()); this._controlledBy = `mapEmbeddablePanel${this.id}`; - this._prevFilterByMapExtent = getFilterByMapExtent(this.input); } public reportsEmbeddableLoad() { @@ -278,16 +276,6 @@ export class MapEmbeddable } onUpdate() { - const filterByMapExtent = getFilterByMapExtent(this.input); - if (this._prevFilterByMapExtent !== filterByMapExtent) { - this._prevFilterByMapExtent = filterByMapExtent; - if (filterByMapExtent) { - this.setMapExtentFilter(); - } else { - this.clearMapExtentFilter(); - } - } - if ( !_.isEqual(this.input.timeRange, this._prevTimeRange) || !_.isEqual(this.input.query, this._prevQuery) || @@ -321,8 +309,12 @@ export class MapEmbeddable : this.input.isMovementSynchronized; }; + _getIsFilterByMapExtent = () => { + return this.input.filterByMapExtent === undefined ? false : this.input.filterByMapExtent; + }; + _gotoSynchronizedLocation() { - const syncedLocation = synchronizeMovement.getLocation(); + const syncedLocation = mapEmbeddablesSingleton.getLocation(); if (syncedLocation) { // set map to synchronized view this._mapSyncHandler(syncedLocation.lat, syncedLocation.lon, syncedLocation.zoom); @@ -334,7 +326,7 @@ export class MapEmbeddable // Use goto because un-rendered map will not have accurate mapCenter and mapZoom. const goto = getGoto(this._savedMap.getStore().getState()); if (goto && goto.center) { - synchronizeMovement.setLocation( + mapEmbeddablesSingleton.setLocation( this.input.id, goto.center.lat, goto.center.lon, @@ -347,12 +339,12 @@ export class MapEmbeddable // Initialize synchronized view to map's view const center = getMapCenter(this._savedMap.getStore().getState()); const zoom = getMapZoom(this._savedMap.getStore().getState()); - synchronizeMovement.setLocation(this.input.id, center.lat, center.lon, zoom); + mapEmbeddablesSingleton.setLocation(this.input.id, center.lat, center.lon, zoom); } _propogateMapMovement = (lat: number, lon: number, zoom: number) => { if (this._getIsMovementSynchronized()) { - synchronizeMovement.setLocation(this.input.id, lat, lon, zoom); + mapEmbeddablesSingleton.setLocation(this.input.id, lat, lon, zoom); } }; @@ -418,7 +410,7 @@ export class MapEmbeddable return; } - synchronizeMovement.register(this.input.id, { + mapEmbeddablesSingleton.register(this.input.id, { getTitle: () => { const output = this.getOutput(); if (output.title) { @@ -442,6 +434,18 @@ export class MapEmbeddable this._savedMap.getStore().dispatch(setMapSettings({ autoFitToDataBounds: true })); } }, + getIsFilterByMapExtent: this._getIsFilterByMapExtent, + setIsFilterByMapExtent: (isFilterByMapExtent: boolean) => { + this.updateInput({ filterByMapExtent: isFilterByMapExtent }); + if (isFilterByMapExtent) { + this._setMapExtentFilter(); + } else { + this._clearMapExtentFilter(); + } + }, + getGeoFieldNames: () => { + return getGeoFieldNames(this._savedMap.getStore().getState()); + }, }); if (this._getIsMovementSynchronized()) { this._gotoSynchronizedLocation(); @@ -568,14 +572,21 @@ export class MapEmbeddable } as ActionExecutionContext; }; - setMapExtentFilter() { - const state = this._savedMap.getStore().getState(); - const mapExtent = getMapExtent(state); - const geoFieldNames = getGeoFieldNames(state); - const center = getMapCenter(state); - const zoom = getMapZoom(state); + // Timing bug for dashboard with multiple maps with synchronized movement and filter by map extent enabled + // When moving map with filterByMapExtent:false, previous map extent filter(s) does not get removed + // Cuased by syncDashboardContainerInput applyContainerChangesToState. + // 1) _setMapExtentFilter executes ACTION_GLOBAL_APPLY_FILTER action, + // removing previous map extent filter and adding new map extent filter + // 2) applyContainerChangesToState then re-adds stale input.filters (which contains previous map extent filter) + // Add debounce to fix timing issue. + // 1) applyContainerChangesToState now runs first and does its thing + // 2) _setMapExtentFilter executes ACTION_GLOBAL_APPLY_FILTER action, + // removing previous map extent filter and adding new map extent filter + _setMapExtentFilter = _.debounce(() => { + const mapExtent = getMapExtent(this._savedMap.getStore().getState()); + const geoFieldNames = mapEmbeddablesSingleton.getGeoFieldNames(); - if (center === undefined || mapExtent === undefined || geoFieldNames.length === 0) { + if (mapExtent === undefined || geoFieldNames.length === 0) { return; } @@ -584,12 +595,8 @@ export class MapEmbeddable const mapExtentFilter = createExtentFilter(mapExtent, geoFieldNames); mapExtentFilter.meta.controlledBy = this._controlledBy; mapExtentFilter.meta.alias = i18n.translate('xpack.maps.embeddable.boundsFilterLabel', { - defaultMessage: 'Map bounds at center: {lat}, {lon}, zoom: {zoom}', - values: { - lat: center.lat, - lon: center.lon, - zoom, - }, + defaultMessage: '{geoFieldsLabel} within map bounds', + values: { geoFieldsLabel: getGeoFieldsLabel(geoFieldNames) }, }); const executeContext = { @@ -602,9 +609,9 @@ export class MapEmbeddable throw new Error('Unable to apply map extent filter, could not locate action'); } action.execute(executeContext); - } + }, 100); - clearMapExtentFilter() { + _clearMapExtentFilter() { this._prevMapExtent = undefined; const executeContext = { ...this.getActionContext(), @@ -620,7 +627,7 @@ export class MapEmbeddable destroy() { super.destroy(); - synchronizeMovement.unregister(this.input.id); + mapEmbeddablesSingleton.unregister(this.input.id); this._isActive = false; if (this._unsubscribeFromStore) { this._unsubscribeFromStore(); @@ -665,8 +672,8 @@ export class MapEmbeddable } const mapExtent = getMapExtent(this._savedMap.getStore().getState()); - if (getFilterByMapExtent(this.input) && !_.isEqual(this._prevMapExtent, mapExtent)) { - this.setMapExtentFilter(); + if (this._getIsFilterByMapExtent() && !_.isEqual(this._prevMapExtent, mapExtent)) { + this._setMapExtentFilter(); } const center = getMapCenter(this._savedMap.getStore().getState()); diff --git a/x-pack/plugins/maps/public/embeddable/synchronize_movement.ts b/x-pack/plugins/maps/public/embeddable/map_embeddables_singleton.ts similarity index 84% rename from x-pack/plugins/maps/public/embeddable/synchronize_movement.ts rename to x-pack/plugins/maps/public/embeddable/map_embeddables_singleton.ts index c1e738224b031..253006924ee88 100644 --- a/x-pack/plugins/maps/public/embeddable/synchronize_movement.ts +++ b/x-pack/plugins/maps/public/embeddable/map_embeddables_singleton.ts @@ -5,6 +5,7 @@ * 2.0. */ +import _ from 'lodash'; import { MapCenterAndZoom } from '../../common/descriptor_types'; interface MapPanel { @@ -12,6 +13,9 @@ interface MapPanel { onLocationChange(lat: number, lon: number, zoom: number): void; getIsMovementSynchronized(): boolean; setIsMovementSynchronized(IsMovementSynchronized: boolean): void; + getIsFilterByMapExtent(): boolean; + setIsFilterByMapExtent(isFilterByMapExtent: boolean): void; + getGeoFieldNames(): string[]; } const registry: Record = {}; @@ -19,7 +23,14 @@ let location: MapCenterAndZoom | undefined; let primaryPanelId: string | undefined; let primaryPanelTimeoutId: ReturnType | undefined; -export const synchronizeMovement = { +export const mapEmbeddablesSingleton = { + getGeoFieldNames() { + const geoFieldNames: string[] = []; + Object.values(registry).forEach((mapPanel) => { + geoFieldNames.push(...mapPanel.getGeoFieldNames()); + }); + return _.uniq(geoFieldNames); + }, getLocation() { return location; }, diff --git a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.ts b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.ts deleted file mode 100644 index a399c954b367e..0000000000000 --- a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { Embeddable, EmbeddableInput, ViewMode } from '@kbn/embeddable-plugin/public'; -import { createAction } from '@kbn/ui-actions-plugin/public'; -import { MAP_SAVED_OBJECT_TYPE } from '../../common/constants'; - -export const FILTER_BY_MAP_EXTENT = 'FILTER_BY_MAP_EXTENT'; - -interface FilterByMapExtentInput extends EmbeddableInput { - filterByMapExtent: boolean; -} - -interface FilterByMapExtentActionContext { - embeddable: Embeddable; -} - -export function getFilterByMapExtent(input: { filterByMapExtent?: boolean }) { - return input.filterByMapExtent === undefined ? false : input.filterByMapExtent; -} - -export const filterByMapExtentAction = createAction({ - id: FILTER_BY_MAP_EXTENT, - type: FILTER_BY_MAP_EXTENT, - order: 20, - getDisplayName: ({ embeddable }: FilterByMapExtentActionContext) => { - return getFilterByMapExtent(embeddable.getInput()) - ? i18n.translate('xpack.maps.filterByMapExtentMenuItem.disableDisplayName', { - defaultMessage: 'Disable filter by map extent', - }) - : i18n.translate('xpack.maps.filterByMapExtentMenuItem.enableDisplayName', { - defaultMessage: 'Enable filter by map extent', - }); - }, - getIconType: () => { - return 'filter'; - }, - isCompatible: async ({ embeddable }: FilterByMapExtentActionContext) => { - return ( - embeddable.type === MAP_SAVED_OBJECT_TYPE && - embeddable.getInput().viewMode === ViewMode.EDIT && - !embeddable.getInput().disableTriggers - ); - }, - execute: async ({ embeddable }: FilterByMapExtentActionContext) => { - embeddable.updateInput({ - filterByMapExtent: !getFilterByMapExtent(embeddable.getInput()), - }); - }, -}); diff --git a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.tsx b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.tsx new file mode 100644 index 0000000000000..b9d70bf4afbf3 --- /dev/null +++ b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_action.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { Embeddable, EmbeddableInput } from '@kbn/embeddable-plugin/public'; +import { createReactOverlays } from '@kbn/kibana-react-plugin/public'; +import { createAction } from '@kbn/ui-actions-plugin/public'; +import { MAP_SAVED_OBJECT_TYPE } from '../../common/constants'; +import { getCore } from '../kibana_services'; + +export const FILTER_BY_MAP_EXTENT = 'FILTER_BY_MAP_EXTENT'; + +interface FilterByMapExtentInput extends EmbeddableInput { + filterByMapExtent: boolean; +} + +interface FilterByMapExtentActionContext { + embeddable: Embeddable; +} + +function getContainerLabel(embeddable: Embeddable) { + return embeddable.parent?.type === 'dashboard' + ? i18n.translate('xpack.maps.filterByMapExtentMenuItem.dashboardLabel', { + defaultMessage: 'dashboard', + }) + : i18n.translate('xpack.maps.filterByMapExtentMenuItem.pageLabel', { + defaultMessage: 'page', + }); +} + +function getDisplayName(embeddable: Embeddable) { + return i18n.translate('xpack.maps.filterByMapExtentMenuItem.displayName', { + defaultMessage: 'Filter {containerLabel} by map bounds', + values: { containerLabel: getContainerLabel(embeddable) }, + }); +} + +export const filterByMapExtentAction = createAction({ + id: FILTER_BY_MAP_EXTENT, + type: FILTER_BY_MAP_EXTENT, + order: 20, + getDisplayName: (context: FilterByMapExtentActionContext) => { + return getDisplayName(context.embeddable); + }, + getDisplayNameTooltip: (context: FilterByMapExtentActionContext) => { + return i18n.translate('xpack.maps.filterByMapExtentMenuItem.displayNameTooltip', { + defaultMessage: + 'As you zoom and pan the map, the {containerLabel} updates to display only the data visible in the map bounds.', + values: { containerLabel: getContainerLabel(context.embeddable) }, + }); + }, + getIconType: () => { + return 'filter'; + }, + isCompatible: async ({ embeddable }: FilterByMapExtentActionContext) => { + return embeddable.type === MAP_SAVED_OBJECT_TYPE && !embeddable.getInput().disableTriggers; + }, + execute: async (context: FilterByMapExtentActionContext) => { + const { FilterByMapExtentModal } = await import('./filter_by_map_extent_modal'); + const { openModal } = createReactOverlays(getCore()); + const modalSession = openModal( + modalSession.close()} + title={getDisplayName(context.embeddable)} + /> + ); + }, +}); diff --git a/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_modal.tsx b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_modal.tsx new file mode 100644 index 0000000000000..206f754ae65bb --- /dev/null +++ b/x-pack/plugins/maps/public/trigger_actions/filter_by_map_extent_modal.tsx @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { Component, Fragment } from 'react'; +import { + EuiFormRow, + EuiModalHeader, + EuiModalBody, + EuiModalHeaderTitle, + EuiSwitch, + EuiSwitchEvent, +} from '@elastic/eui'; +import { mapEmbeddablesSingleton } from '../embeddable/map_embeddables_singleton'; + +interface Props { + onClose: () => void; + title: string; +} + +export class FilterByMapExtentModal extends Component { + _renderSwitches() { + return mapEmbeddablesSingleton.getMapPanels().map((mapPanel) => { + return ( + + { + const isChecked = event.target.checked; + mapPanel.setIsFilterByMapExtent(isChecked); + + // only a single map can create map bound filter at a time + // disable all other map panels from creating map bound filter + if (isChecked) { + mapEmbeddablesSingleton.getMapPanels().forEach((it) => { + if (it.id !== mapPanel.id && it.getIsFilterByMapExtent()) { + it.setIsFilterByMapExtent(false); + } + }); + } + this.forceUpdate(); + }} + compressed + data-test-subj={`filterByMapExtentSwitch${mapPanel.id}`} + /> + + ); + }); + } + + render() { + return ( + + + {this.props.title} + + + {this._renderSwitches()} + + ); + } +} diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_action.tsx b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_action.tsx index aa6ff6c33c18f..e3404c628a54f 100644 --- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_action.tsx +++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_action.tsx @@ -39,8 +39,8 @@ export const synchronizeMovementAction = createAction { - const { synchronizeMovement } = await import('../embeddable/synchronize_movement'); - if (!synchronizeMovement.hasMultipleMaps()) { + const { mapEmbeddablesSingleton } = await import('../embeddable/map_embeddables_singleton'); + if (!mapEmbeddablesSingleton.hasMultipleMaps()) { return false; } diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_modal.tsx b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_modal.tsx index dee5aae53f442..c6a1dae7eb36b 100644 --- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_modal.tsx +++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement_modal.tsx @@ -15,7 +15,7 @@ import { EuiSwitch, EuiSwitchEvent, } from '@elastic/eui'; -import { synchronizeMovement } from '../embeddable/synchronize_movement'; +import { mapEmbeddablesSingleton } from '../embeddable/map_embeddables_singleton'; interface Props { onClose: () => void; @@ -23,7 +23,7 @@ interface Props { export class SynchronizeMovementModal extends Component { _renderSwitches() { - const mapPanels = synchronizeMovement.getMapPanels(); + const mapPanels = mapEmbeddablesSingleton.getMapPanels(); const synchronizedPanels = mapPanels.filter((mapPanel) => { return mapPanel.getIsMovementSynchronized(); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 750bc121875b4..87cabe9d35d36 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -17409,7 +17409,6 @@ "xpack.maps.drawTooltip.lineInstructions": "Cliquez pour commencer la ligne. Cliquez pour ajouter le vertex. Double-cliquez pour terminer.", "xpack.maps.drawTooltip.pointInstructions": "Cliquez pour créer un point.", "xpack.maps.drawTooltip.polygonInstructions": "Cliquez pour commencer la forme. Cliquez pour ajouter le vertex. Double-cliquez pour terminer.", - "xpack.maps.embeddable.boundsFilterLabel": "Limites de carte au centre : {lat}, {lon}, zoom : {zoom}", "xpack.maps.embeddableDisplayName": "carte", "xpack.maps.emsFileSelect.selectPlaceholder": "Sélectionner les limites EMS", "xpack.maps.emsSource.tooltipsTitle": "Champs d'infobulle", @@ -17439,8 +17438,6 @@ "xpack.maps.fileUploadWizard.disabledDesc": "Impossible de charger les fichiers, vous ne disposez pas du privilège Kibana de gestion des vues de données.", "xpack.maps.fileUploadWizard.title": "Charger le fichier", "xpack.maps.fileUploadWizard.uploadLabel": "Importation du fichier", - "xpack.maps.filterByMapExtentMenuItem.disableDisplayName": "Désactiver le filtre par étendue de carte", - "xpack.maps.filterByMapExtentMenuItem.enableDisplayName": "Activer le filtre par étendue de carte", "xpack.maps.filterEditor.applyForceRefreshLabel": "Appliquer une actualisation globale aux données de calque", "xpack.maps.filterEditor.applyForceRefreshTooltip": "Lorsque cette option est activée, le calque récupère à nouveau les données au moment de l’actualisation automatique ainsi que chaque fois que le bouton \"Actualiser\" est sélectionné.", "xpack.maps.filterEditor.applyGlobalFilterHelp": "Lorsque cette option est activée, les résultats sont affinés par recherche globale.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0ca4cbaa696b7..31025095cc67c 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -17399,7 +17399,6 @@ "xpack.maps.drawTooltip.lineInstructions": "クリックして行を開始します。クリックして頂点を追加します。ダブルクリックして終了します。", "xpack.maps.drawTooltip.pointInstructions": "クリックして点を作成します。", "xpack.maps.drawTooltip.polygonInstructions": "クリックしてシェイプを開始します。クリックして頂点を追加します。ダブルクリックして終了します。", - "xpack.maps.embeddable.boundsFilterLabel": "中央のマップの境界:{lat}、{lon}、ズーム:{zoom}", "xpack.maps.embeddableDisplayName": "マップ", "xpack.maps.emsFileSelect.selectPlaceholder": "EMS境界を選択", "xpack.maps.emsSource.tooltipsTitle": "ツールチップフィールド", @@ -17429,8 +17428,6 @@ "xpack.maps.fileUploadWizard.disabledDesc": "ファイルをアップロードできません。Kibana「データビュー管理」権限がありません。", "xpack.maps.fileUploadWizard.title": "ファイルをアップロード", "xpack.maps.fileUploadWizard.uploadLabel": "ファイルをインポートしています", - "xpack.maps.filterByMapExtentMenuItem.disableDisplayName": "マップ範囲でのフィルターを無効にする", - "xpack.maps.filterByMapExtentMenuItem.enableDisplayName": "マップ範囲でのフィルターを有効にする", "xpack.maps.filterEditor.applyForceRefreshLabel": "レイヤーデータにグローバル更新を適用", "xpack.maps.filterEditor.applyForceRefreshTooltip": "有効にすると、自動更新が実行されるときと、[更新]をクリックしたときに、レイヤーでデータが再取り込みされます。", "xpack.maps.filterEditor.applyGlobalFilterHelp": "有効にすると、結果がグローバル検索で絞り込まれます", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9d3b92f48be3e..19f8926ea89c2 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -17417,7 +17417,6 @@ "xpack.maps.drawTooltip.lineInstructions": "单击以开始绘制线条。单击以添加顶点。双击以完成。", "xpack.maps.drawTooltip.pointInstructions": "单击以创建点。", "xpack.maps.drawTooltip.polygonInstructions": "单击以开始绘制形状。单击以添加顶点。双击以完成。", - "xpack.maps.embeddable.boundsFilterLabel": "位于中心的地图边界:{lat}, {lon},缩放:{zoom}", "xpack.maps.embeddableDisplayName": "地图", "xpack.maps.emsFileSelect.selectPlaceholder": "选择 EMS 边界", "xpack.maps.emsSource.tooltipsTitle": "工具提示字段", @@ -17447,8 +17446,6 @@ "xpack.maps.fileUploadWizard.disabledDesc": "无法上传文件,您缺少对“数据视图管理”的 Kibana 权限。", "xpack.maps.fileUploadWizard.title": "上传文件", "xpack.maps.fileUploadWizard.uploadLabel": "正在导入文件", - "xpack.maps.filterByMapExtentMenuItem.disableDisplayName": "按地图范围禁用筛选", - "xpack.maps.filterByMapExtentMenuItem.enableDisplayName": "按地图范围启用筛选", "xpack.maps.filterEditor.applyForceRefreshLabel": "将全局刷新应用于图层数据", "xpack.maps.filterEditor.applyForceRefreshTooltip": "启用后,图层将在触发自动刷新和单击“刷新”时重新提取数据。", "xpack.maps.filterEditor.applyGlobalFilterHelp": "启用后,全局搜索会缩减结果", diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js index c244dc06d6e0f..9f28af2e9a25d 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js @@ -8,6 +8,7 @@ export default function ({ getPageObjects, getService }) { const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'lens', 'maps']); + const browser = getService('browser'); const testSubjects = getService('testSubjects'); const dashboardPanelActions = getService('dashboardPanelActions'); const security = getService('security'); @@ -35,7 +36,12 @@ export default function ({ getPageObjects, getService }) { it('should filter dashboard by map extent when "filter by map extent" is enabled', async () => { const mapPanelHeader = await dashboardPanelActions.getPanelHeading('document example'); await dashboardPanelActions.openContextMenuMorePanel(mapPanelHeader); - await await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await testSubjects.setEuiSwitch( + 'filterByMapExtentSwitch24ade730-afe4-42b6-919a-c4e0a98c94f2', + 'check' + ); + await browser.pressKeys(browser.keys.ESCAPE); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.lens.assertMetric('Count of records', '1'); @@ -50,7 +56,12 @@ export default function ({ getPageObjects, getService }) { it('should remove map extent filter dashboard when "filter by map extent" is disabled', async () => { const mapPanelHeader = await dashboardPanelActions.getPanelHeading('document example'); await dashboardPanelActions.openContextMenuMorePanel(mapPanelHeader); - await await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await testSubjects.setEuiSwitch( + 'filterByMapExtentSwitch24ade730-afe4-42b6-919a-c4e0a98c94f2', + 'uncheck' + ); + await browser.pressKeys(browser.keys.ESCAPE); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.lens.assertMetric('Count of records', '6'); }); From 1f024cafc0b4f1d9da2d4d1812b8816e9ca84b8e Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Wed, 13 Jul 2022 14:57:25 +0100 Subject: [PATCH 07/96] Refactoring network top countries to use useSearchStrategy (#136120) * Refactoring network top countries to use useSearchStrategy * fix unit tests --- .../network_top_countries/index.test.tsx | 71 +++++++-- .../network_top_countries/index.tsx | 139 ++++++------------ 2 files changed, 107 insertions(+), 103 deletions(-) diff --git a/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.test.tsx b/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.test.tsx index 61ce547bce4ac..eef2087f51dad 100644 --- a/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.test.tsx +++ b/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.test.tsx @@ -8,27 +8,76 @@ import { act, renderHook } from '@testing-library/react-hooks'; import { TestProviders } from '../../../common/mock'; import { ID, useNetworkTopCountries } from '.'; -import { NetworkType } from '../../store/model'; +import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; +import { networkModel } from '../../store'; import { FlowTargetSourceDest } from '../../../../common/search_strategy'; +jest.mock('../../../common/containers/use_search_strategy', () => ({ + useSearchStrategy: jest.fn(), +})); +const mockUseSearchStrategy = useSearchStrategy as jest.Mock; +const mockSearch = jest.fn(); + +const props = { + endDate: '2020-07-08T08:20:18.966Z', + flowTarget: FlowTargetSourceDest.source, + id: ID, + indexNames: ['auditbeat-*'], + skip: false, + startDate: '2020-07-07T08:20:18.966Z', + type: networkModel.NetworkType.page, +}; + describe('useNetworkTopCountries', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockUseSearchStrategy.mockReturnValue({ + loading: false, + result: { + edges: [], + totalCount: -1, + pageInfo: { + activePage: 0, + fakeTotalCount: 0, + showMorePagesIndicator: false, + }, + }, + search: mockSearch, + refetch: jest.fn(), + inspect: {}, + }); + }); + + it('runs search', () => { + renderHook(() => useNetworkTopCountries(props), { + wrapper: TestProviders, + }); + + expect(mockSearch).toHaveBeenCalled(); + }); + + it('does not run search when skip = true', () => { + const localProps = { + ...props, + skip: true, + }; + renderHook(() => useNetworkTopCountries(localProps), { + wrapper: TestProviders, + }); + + expect(mockSearch).not.toHaveBeenCalled(); + }); + it('skip = true will cancel any running request', () => { - const abortSpy = jest.spyOn(AbortController.prototype, 'abort'); const localProps = { - docValueFields: [], - flowTarget: FlowTargetSourceDest.source, - startDate: '2020-07-07T08:20:18.966Z', - endDate: '2020-07-08T08:20:18.966Z', - id: `${ID}-${NetworkType.page}`, - indexNames: ['cool'], - type: NetworkType.page, - skip: false, + ...props, }; const { rerender } = renderHook(() => useNetworkTopCountries(localProps), { wrapper: TestProviders, }); localProps.skip = true; act(() => rerender()); - expect(abortSpy).toHaveBeenCalledTimes(4); + expect(mockUseSearchStrategy).toHaveBeenCalledTimes(3); + expect(mockUseSearchStrategy.mock.calls[2][0].abort).toEqual(true); }); }); diff --git a/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.tsx b/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.tsx index 6631d3a9c2fcd..ab44e80043e3e 100644 --- a/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.tsx +++ b/x-pack/plugins/security_solution/public/network/containers/network_top_countries/index.tsx @@ -5,16 +5,12 @@ * 2.0. */ -import { noop } from 'lodash/fp'; -import { useState, useEffect, useCallback, useMemo, useRef } from 'react'; +import { useState, useEffect, useCallback, useMemo } from 'react'; import deepEqual from 'fast-deep-equal'; -import { Subscription } from 'rxjs'; -import { isCompleteResponse, isErrorResponse } from '@kbn/data-plugin/common'; import type { ESTermQuery } from '../../../../common/typed_json'; import type { inputsModel } from '../../../common/store'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; -import { useKibana } from '../../../common/lib/kibana'; import { createFilter } from '../../../common/containers/helpers'; import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers'; import type { networkModel } from '../../store'; @@ -23,14 +19,12 @@ import type { FlowTargetSourceDest, NetworkTopCountriesEdges, NetworkTopCountriesRequestOptions, - NetworkTopCountriesStrategyResponse, PageInfoPaginated, } from '../../../../common/search_strategy'; import { NetworkQueries } from '../../../../common/search_strategy'; -import { getInspectResponse } from '../../../helpers'; import type { InspectResponse } from '../../../types'; import * as i18n from './translations'; -import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; export const ID = 'networkTopCountriesQuery'; @@ -72,18 +66,13 @@ export const useNetworkTopCountries = ({ const { activePage, limit, sort } = useDeepEqualSelector((state) => getTopCountriesSelector(state, type, flowTarget) ); - const { data } = useKibana().services; - const refetch = useRef(noop); - const abortCtrl = useRef(new AbortController()); - const searchSubscription$ = useRef(new Subscription()); - const [loading, setLoading] = useState(false); - const [networkTopCountriesRequest, setHostRequest] = + const [networkTopCountriesRequest, setNetworkTopCountriesRequest] = useState(null); const wrappedLoadMore = useCallback( (newActivePage: number) => { - setHostRequest((prevRequest) => { + setNetworkTopCountriesRequest((prevRequest) => { if (!prevRequest) { return prevRequest; } @@ -96,80 +85,56 @@ export const useNetworkTopCountries = ({ }, [limit] ); - const { addError, addWarning } = useAppToasts(); - const [networkTopCountriesResponse, setNetworkTopCountriesResponse] = - useState({ - networkTopCountries: [], - id, - inspect: { - dsl: [], - response: [], - }, - isInspected: false, - loadPage: wrappedLoadMore, + const { + loading, + result: response, + search, + refetch, + inspect, + } = useSearchStrategy({ + factoryQueryType: NetworkQueries.topCountries, + initialResult: { + edges: [], + totalCount: -1, pageInfo: { activePage: 0, fakeTotalCount: 0, showMorePagesIndicator: false, }, - refetch: refetch.current, - totalCount: -1, - }); - - const networkTopCountriesSearch = useCallback( - (request: NetworkTopCountriesRequestOptions | null) => { - if (request == null || skip) { - return; - } - - const asyncSearch = async () => { - abortCtrl.current = new AbortController(); - setLoading(true); - - searchSubscription$.current = data.search - .search(request, { - strategy: 'securitySolutionSearchStrategy', - abortSignal: abortCtrl.current.signal, - }) - .subscribe({ - next: (response) => { - if (isCompleteResponse(response)) { - setLoading(false); - setNetworkTopCountriesResponse((prevResponse) => ({ - ...prevResponse, - networkTopCountries: response.edges, - inspect: getInspectResponse(response, prevResponse.inspect), - pageInfo: response.pageInfo, - refetch: refetch.current, - totalCount: response.totalCount, - })); - searchSubscription$.current.unsubscribe(); - } else if (isErrorResponse(response)) { - setLoading(false); - addWarning(i18n.ERROR_NETWORK_TOP_COUNTRIES); - searchSubscription$.current.unsubscribe(); - } - }, - error: (msg) => { - setLoading(false); - addError(msg, { - title: i18n.FAIL_NETWORK_TOP_COUNTRIES, - }); - searchSubscription$.current.unsubscribe(); - }, - }); - }; - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); - asyncSearch(); - refetch.current = asyncSearch; }, - [data.search, addWarning, addError, skip] + errorMessage: i18n.FAIL_NETWORK_TOP_COUNTRIES, + abort: skip, + }); + + const networkTopCountriesResponse = useMemo( + () => ({ + endDate, + networkTopCountries: response.edges, + id, + inspect, + isInspected: false, + loadPage: wrappedLoadMore, + pageInfo: response.pageInfo, + refetch, + startDate, + totalCount: response.totalCount, + }), + [ + endDate, + id, + inspect, + refetch, + response.edges, + response.pageInfo, + response.totalCount, + startDate, + wrappedLoadMore, + ] ); useEffect(() => { - setHostRequest((prevRequest) => { + setNetworkTopCountriesRequest((prevRequest) => { const myRequest = { ...(prevRequest ?? {}), defaultIndex: indexNames, @@ -193,20 +158,10 @@ export const useNetworkTopCountries = ({ }, [activePage, indexNames, endDate, filterQuery, ip, limit, startDate, sort, flowTarget]); useEffect(() => { - networkTopCountriesSearch(networkTopCountriesRequest); - return () => { - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); - }; - }, [networkTopCountriesRequest, networkTopCountriesSearch]); - - useEffect(() => { - if (skip) { - setLoading(false); - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); + if (!skip && networkTopCountriesRequest) { + search(networkTopCountriesRequest); } - }, [skip]); + }, [networkTopCountriesRequest, search, skip]); return [loading, networkTopCountriesResponse]; }; From be61682a5ebaf84fdbb6ae82b0a0f4a509101c00 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:59:43 +0200 Subject: [PATCH 08/96] [Lens] rename layer expression arg from `hide` to `simpleView` (#135612) * [Lens] rename layer expression arg from `hide` to `previewMode` * remove obsolete snapshots * change to simpleView --- .../common/expression_functions/annotation_layer.ts | 4 ++-- .../expression_functions/common_data_layer_args.ts | 4 ++-- .../expression_functions/extended_annotation_layer.ts | 4 ++-- .../common/expression_functions/xy_vis_fn.ts | 4 ++-- .../expression_xy/common/i18n/index.tsx | 10 +++++----- .../expression_xy/common/types/expression_functions.ts | 6 +++--- .../expression_xy/public/__mocks__/index.tsx | 2 +- .../components/__snapshots__/xy_chart.test.tsx.snap | 4 ++-- .../expression_xy/public/components/annotations.tsx | 10 +++++----- .../expression_xy/public/components/xy_chart.test.tsx | 8 ++++---- .../expression_xy/public/components/xy_chart.tsx | 8 ++++---- .../__snapshots__/to_expression.test.ts.snap | 6 +++--- .../lens/public/xy_visualization/to_expression.ts | 10 +++++----- x-pack/plugins/lens/public/xy_visualization/types.ts | 4 ++-- x-pack/plugins/translations/translations/fr-FR.json | 2 -- x-pack/plugins/translations/translations/ja-JP.json | 2 -- x-pack/plugins/translations/translations/zh-CN.json | 5 ++--- 17 files changed, 44 insertions(+), 49 deletions(-) diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/annotation_layer.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/annotation_layer.ts index 6174b9d40e452..4635fc5924b90 100644 --- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/annotation_layer.ts +++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/annotation_layer.ts @@ -24,10 +24,10 @@ export function annotationLayerFunction(): ExpressionFunctionDefinition< inputTypes: ['datatable'], help: strings.getAnnotationLayerFnHelp(), args: { - hide: { + simpleView: { types: ['boolean'], default: false, - help: strings.getAnnotationLayerHideHelp(), + help: strings.getAnnotationLayerSimpleViewHelp(), }, annotations: { types: ['manual_point_event_annotation', 'manual_range_event_annotation'], diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/common_data_layer_args.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/common_data_layer_args.ts index 330e31327873a..0c173ea0754f8 100644 --- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/common_data_layer_args.ts +++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/common_data_layer_args.ts @@ -20,10 +20,10 @@ export const commonDataLayerArgs: Omit< CommonDataLayerFnArgs, 'accessors' | 'xAccessor' | 'splitAccessor' > = { - hide: { + simpleView: { types: ['boolean'], default: false, - help: strings.getHideHelp(), + help: strings.getSimpleView(), }, seriesType: { aliases: ['_'], diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/extended_annotation_layer.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/extended_annotation_layer.ts index 539c11854355c..2e3f9e160ebb4 100644 --- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/extended_annotation_layer.ts +++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/extended_annotation_layer.ts @@ -24,10 +24,10 @@ export function extendedAnnotationLayerFunction(): ExpressionFunctionDefinition< inputTypes: ['datatable'], help: strings.getAnnotationLayerFnHelp(), args: { - hide: { + simpleView: { types: ['boolean'], default: false, - help: strings.getAnnotationLayerHideHelp(), + help: strings.getAnnotationLayerSimpleViewHelp(), }, annotations: { types: ['manual_point_event_annotation', 'manual_range_event_annotation'], diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts index ea619fa7e1c28..789b7fb9ceb63 100644 --- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts +++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts @@ -42,7 +42,7 @@ const createDataLayer = (args: XYArgs, table: Datatable): DataLayerConfigResult return { type: DATA_LAYER, seriesType: args.seriesType, - hide: args.hide, + simpleView: args.simpleView, columnToLabel: args.columnToLabel, xScaleType: args.xScaleType, isHistogram: args.isHistogram, @@ -72,7 +72,7 @@ export const xyVisFn: XyVisFn['fn'] = async (data, args, handlers) => { seriesType, accessors, xAccessor, - hide, + simpleView, splitAccessors, columnToLabel, xScaleType, diff --git a/src/plugins/chart_expressions/expression_xy/common/i18n/index.tsx b/src/plugins/chart_expressions/expression_xy/common/i18n/index.tsx index 9d1388829de3c..75a523ab41d92 100644 --- a/src/plugins/chart_expressions/expression_xy/common/i18n/index.tsx +++ b/src/plugins/chart_expressions/expression_xy/common/i18n/index.tsx @@ -125,9 +125,9 @@ export const strings = { i18n.translate('expressionXY.dataLayer.help', { defaultMessage: `Configure a layer in the xy chart`, }), - getHideHelp: () => - i18n.translate('expressionXY.dataLayer.hide.help', { - defaultMessage: 'Show / hide axis', + getSimpleView: () => + i18n.translate('expressionXY.dataLayer.simpleView.help', { + defaultMessage: 'Show / hide details', }), getXAccessorHelp: () => i18n.translate('expressionXY.dataLayer.xAccessor.help', { @@ -233,8 +233,8 @@ export const strings = { i18n.translate('expressionXY.annotationLayer.help', { defaultMessage: `Configure an annotation layer in the xy chart`, }), - getAnnotationLayerHideHelp: () => - i18n.translate('expressionXY.annotationLayer.hide.help', { + getAnnotationLayerSimpleViewHelp: () => + i18n.translate('expressionXY.annotationLayer.simpleView.help', { defaultMessage: 'Show / hide details', }), getAnnotationLayerAnnotationsHelp: () => diff --git a/src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts b/src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts index 8da796c811a68..5d518c31513ae 100644 --- a/src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts +++ b/src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts @@ -115,7 +115,7 @@ export interface DataLayerArgs { accessors: Array; seriesType: SeriesType; xAccessor?: string | ExpressionValueVisDimension; - hide?: boolean; + simpleView?: boolean; splitAccessors?: Array; markSizeAccessor?: string | ExpressionValueVisDimension; lineWidth?: number; @@ -141,7 +141,7 @@ export interface ExtendedDataLayerArgs { accessors: string[]; seriesType: SeriesType; xAccessor?: string; - hide?: boolean; + simpleView?: boolean; splitAccessors?: string[]; markSizeAccessor?: string; lineWidth?: number; @@ -280,7 +280,7 @@ export interface XYProps { export interface AnnotationLayerArgs { annotations: EventAnnotationOutput[]; - hide?: boolean; + simpleView?: boolean; } export type ExtendedAnnotationLayerArgs = AnnotationLayerArgs & { diff --git a/src/plugins/chart_expressions/expression_xy/public/__mocks__/index.tsx b/src/plugins/chart_expressions/expression_xy/public/__mocks__/index.tsx index d4781db0ff915..2e5f3163772ae 100644 --- a/src/plugins/chart_expressions/expression_xy/public/__mocks__/index.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/__mocks__/index.tsx @@ -164,7 +164,7 @@ export const dateHistogramLayer: DataLayerConfig = { type: 'dataLayer', layerType: LayerTypes.DATA, showLines: true, - hide: false, + simpleView: false, xAccessor: 'xAccessorId', xScaleType: 'time', isHistogram: true, diff --git a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap index 46bbe4c5b5a43..24c7d68cd6fda 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap @@ -208,7 +208,7 @@ exports[`XYChart component annotations should render grouped line annotations wi /> `; -exports[`XYChart component annotations should render simplified annotations when hide is true 1`] = ` +exports[`XYChart component annotations should render simplified annotations when simpleView is true 1`] = ` `; -exports[`XYChart component annotations should render simplified annotations when hide is true 2`] = ` +exports[`XYChart component annotations should render simplified annotations when simpleView is true 2`] = ` Array [ >; - hide?: boolean; + simpleView?: boolean; minInterval?: number; isBarChart?: boolean; outsideDimension: number; @@ -179,7 +179,7 @@ export const Annotations = ({ formatter, isHorizontal, paddingMap, - hide, + simpleView, minInterval, isBarChart, outsideDimension, @@ -198,7 +198,7 @@ export const Annotations = ({ const header = formatter?.convert(isGrouped ? roundedTimestamp : exactTimestamp) || moment(isGrouped ? roundedTimestamp : exactTimestamp).toISOString(); - const strokeWidth = hide ? 1 : annotation.lineWidth || 1; + const strokeWidth = simpleView ? 1 : annotation.lineWidth || 1; const dataValue = isGrouped ? moment( isBarChart && minInterval ? roundedTimestamp + minInterval / 2 : roundedTimestamp @@ -210,7 +210,7 @@ export const Annotations = ({ key={id} domainType={AnnotationDomainType.XDomain} marker={ - !hide ? ( + !simpleView ? ( { layerId: 'numberLayer', type: 'dataLayer', layerType: LayerTypes.DATA, - hide: false, + simpleView: false, showLines: true, xAccessor: 'xAccessorId', xScaleType: 'linear', @@ -1251,7 +1251,7 @@ describe('XYChart component', () => { type: 'dataLayer', layerType: LayerTypes.DATA, showLines: true, - hide: false, + simpleView: false, xAccessor: 'xAccessorId', xScaleType: 'linear', isHistogram: true, @@ -3094,11 +3094,11 @@ describe('XYChart component', () => { const component = mount(); expect(component.find(RectAnnotation)).toMatchSnapshot(); }); - test('should render simplified annotations when hide is true', () => { + test('should render simplified annotations when simpleView is true', () => { const { args } = sampleArgsWithAnnotations([ createLayerWithAnnotations([defaultLineStaticAnnotation, defaultRangeStaticAnnotation]), ]); - (args.layers[1] as CommonXYAnnotationLayerConfig).hide = true; + (args.layers[1] as CommonXYAnnotationLayerConfig).simpleView = true; const component = mount(); expect(component.find('LineAnnotation')).toMatchSnapshot(); expect(component.find('RectAnnotation')).toMatchSnapshot(); diff --git a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx index 00478aa9ddd6b..5bb7f5d6f8c47 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx @@ -360,7 +360,7 @@ export function XYChart({ ...groupedLineAnnotations, ].filter(Boolean); - const shouldHideDetails = annotationsLayers.length > 0 ? annotationsLayers[0].hide : false; + const shouldHideDetails = annotationsLayers.length > 0 ? annotationsLayers[0].simpleView : false; const linesPaddings = !shouldHideDetails ? getLinesCausedPaddings(visualConfigs, yAxesMap, shouldRotate) : {}; @@ -740,7 +740,7 @@ export function XYChart({ } title={xTitle} gridLine={gridLineStyle} - hide={xAxisConfig?.hide || dataLayers[0]?.hide || !dataLayers[0]?.xAccessor} + hide={xAxisConfig?.hide || dataLayers[0]?.simpleView || !dataLayers[0]?.xAccessor} tickFormat={(d) => { let value = safeXAccessorLabelRenderer(d) || ''; if (xAxisConfig?.truncate && value.length > xAxisConfig.truncate) { @@ -773,7 +773,7 @@ export function XYChart({ gridLine={{ visible: axis.showGridLines, }} - hide={axis.hide || dataLayers[0]?.hide} + hide={axis.hide || dataLayers[0]?.simpleView} tickFormat={(d) => { let value = axis.formatter?.convert(d) || ''; if (axis.truncate && value.length > axis.truncate) { @@ -848,7 +848,7 @@ export function XYChart({ paddingMap={linesPaddings} isBarChart={filteredBarLayers.length > 0} minInterval={minInterval} - hide={annotationsLayers?.[0].hide} + simpleView={annotationsLayers?.[0].simpleView} outsideDimension={ rangeAnnotations.length && shouldHideDetails ? OUTSIDE_RECT_ANNOTATION_WIDTH_SUGGESTION diff --git a/x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap b/x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap index 43f4082d00dbe..66162b0bee018 100644 --- a/x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap +++ b/x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap @@ -36,9 +36,6 @@ Object { "{\\"b\\":\\"col_b\\",\\"c\\":\\"col_c\\",\\"d\\":\\"col_d\\"}", ], "decorations": Array [], - "hide": Array [ - false, - ], "isHistogram": Array [ false, ], @@ -67,6 +64,9 @@ Object { "seriesType": Array [ "area", ], + "simpleView": Array [ + false, + ], "splitAccessors": Array [ "d", ], diff --git a/x-pack/plugins/lens/public/xy_visualization/to_expression.ts b/x-pack/plugins/lens/public/xy_visualization/to_expression.ts index 36c00ed55e743..6c06891f530e0 100644 --- a/x-pack/plugins/lens/public/xy_visualization/to_expression.ts +++ b/x-pack/plugins/lens/public/xy_visualization/to_expression.ts @@ -83,10 +83,10 @@ export const toExpression = ( }; const simplifiedLayerExpression = { - [layerTypes.DATA]: (layer: XYDataLayerConfig) => ({ ...layer, hide: true }), + [layerTypes.DATA]: (layer: XYDataLayerConfig) => ({ ...layer, simpleView: true }), [layerTypes.REFERENCELINE]: (layer: XYReferenceLineLayerConfig) => ({ ...layer, - hide: true, + simpleView: true, yConfig: layer.yConfig?.map(({ ...rest }) => ({ ...rest, lineWidth: 1, @@ -96,7 +96,7 @@ const simplifiedLayerExpression = { }), [layerTypes.ANNOTATIONS]: (layer: XYAnnotationLayerConfig) => ({ ...layer, - hide: true, + simpleView: true, }), }; @@ -411,7 +411,7 @@ const annotationLayerToExpression = ( type: 'function', function: 'extendedAnnotationLayer', arguments: { - hide: [Boolean(layer.hide)], + simpleView: [Boolean(layer.simpleView)], layerId: [layer.layerId], annotations: layer.annotations ? layer.annotations.map((ann): Ast => eventAnnotationService.toExpression(ann)) @@ -455,7 +455,7 @@ const dataLayerToExpression = ( function: 'extendedDataLayer', arguments: { layerId: [layer.layerId], - hide: [Boolean(layer.hide)], + simpleView: [Boolean(layer.simpleView)], xAccessor: layer.xAccessor ? [layer.xAccessor] : [], xScaleType: [getScaleType(metadata[layer.layerId][layer.xAccessor], ScaleType.Linear)], isHistogram: [isHistogramDimension], diff --git a/x-pack/plugins/lens/public/xy_visualization/types.ts b/x-pack/plugins/lens/public/xy_visualization/types.ts index 0beda9f4740ac..58c4cfb7e26c4 100644 --- a/x-pack/plugins/lens/public/xy_visualization/types.ts +++ b/x-pack/plugins/lens/public/xy_visualization/types.ts @@ -92,7 +92,7 @@ export interface XYDataLayerConfig { layerType: 'data'; seriesType: SeriesType; xAccessor?: string; - hide?: boolean; + simpleView?: boolean; yConfig?: YConfig[]; splitAccessor?: string; palette?: PaletteOutput; @@ -113,7 +113,7 @@ export interface XYAnnotationLayerConfig { layerId: string; layerType: 'annotations'; annotations: EventAnnotationConfig[]; - hide?: boolean; + simpleView?: boolean; } export type XYLayerConfig = diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 87cabe9d35d36..91b083ebab12e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -3642,14 +3642,12 @@ "expressionTagcloud.renderer.tagcloud.helpDescription": "Afficher le rendu d'un nuage de balises", "expressionXY.annotationLayer.annotations.help": "Annotations", "expressionXY.annotationLayer.help": "Configurer un calque d'annotation dans le graphique xy", - "expressionXY.annotationLayer.hide.help": "Afficher/masquer les détails", "expressionXY.axisExtentConfig.extentMode.help": "Mode d'extension", "expressionXY.axisExtentConfig.help": "Configurer les étendues d'axe du graphique xy", "expressionXY.axisExtentConfig.lowerBound.help": "Limite inférieure", "expressionXY.axisExtentConfig.upperBound.help": "Limite supérieure", "expressionXY.dataLayer.accessors.help": "Les colonnes à afficher sur l'axe y.", "expressionXY.dataLayer.help": "Configurer un calque dans le graphique xy", - "expressionXY.dataLayer.hide.help": "Afficher/masquer l'axe", "expressionXY.dataLayer.isHistogram.help": "Disposer le graphique sous forme d'histogramme ou non", "expressionXY.dataLayer.lineWidth.help": "Largeur de la ligne", "expressionXY.dataLayer.markSizeAccessor.help": "Accesseur de taille de marque", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 31025095cc67c..3343db31a26d0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -3640,14 +3640,12 @@ "expressionTagcloud.renderer.tagcloud.helpDescription": "Tag Cloudを表示", "expressionXY.annotationLayer.annotations.help": "注釈", "expressionXY.annotationLayer.help": "xyグラフで注釈レイヤーを構成", - "expressionXY.annotationLayer.hide.help": "詳細を表示/非表示", "expressionXY.axisExtentConfig.extentMode.help": "範囲モード", "expressionXY.axisExtentConfig.help": "xyグラフの軸範囲を構成", "expressionXY.axisExtentConfig.lowerBound.help": "下界", "expressionXY.axisExtentConfig.upperBound.help": "上界", "expressionXY.dataLayer.accessors.help": "y軸に表示する列。", "expressionXY.dataLayer.help": "xyグラフでレイヤーを構成", - "expressionXY.dataLayer.hide.help": "軸を表示/非表示", "expressionXY.dataLayer.isHistogram.help": "グラフをヒストグラムとしてレイアウトするかどうか", "expressionXY.dataLayer.lineWidth.help": "線の幅", "expressionXY.dataLayer.markSizeAccessor.help": "マークサイズアクセラレーター", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 19f8926ea89c2..2b3f762227154 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -3644,14 +3644,13 @@ "expressionTagcloud.renderer.tagcloud.helpDescription": "呈现标签云图", "expressionXY.annotationLayer.annotations.help": "标注", "expressionXY.annotationLayer.help": "配置 xy 图表中的标注图层", - "expressionXY.annotationLayer.hide.help": "显示/隐藏详情", + "expressionXY.annotationLayer.simpleView.help": "显示/隐藏详情", "expressionXY.axisExtentConfig.extentMode.help": "范围模式", "expressionXY.axisExtentConfig.help": "配置 xy 图表的轴范围", "expressionXY.axisExtentConfig.lowerBound.help": "下边界", "expressionXY.axisExtentConfig.upperBound.help": "上边界", "expressionXY.dataLayer.accessors.help": "要在 y 轴上显示的列。", "expressionXY.dataLayer.help": "配置 xy 图表中的图层", - "expressionXY.dataLayer.hide.help": "显示/隐藏轴", "expressionXY.dataLayer.isHistogram.help": "是否将图表布局为直方图", "expressionXY.dataLayer.lineWidth.help": "线条宽度", "expressionXY.dataLayer.markSizeAccessor.help": "标记大小访问器", @@ -32088,4 +32087,4 @@ "xpack.watcher.watchEdit.thresholdWatchExpression.aggType.fieldIsRequiredValidationMessage": "此字段必填。", "xpack.watcher.watcherDescription": "通过创建、管理和监测警报来检测数据中的更改。" } -} +} \ No newline at end of file From 92a516a25dff20c19f5708bd5711133ebfd41127 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 13 Jul 2022 07:43:10 -0700 Subject: [PATCH 09/96] Add operationId to cases openAPI specs (#136161) --- .../plugins/cases/docs/openapi/bundled.json | 68 +++++++++++++----- .../plugins/cases/docs/openapi/bundled.yaml | 70 ++++++++++++++----- .../components/examples/get_status.yaml | 7 ++ .../cases/docs/openapi/paths/api@cases.yaml | 9 ++- .../docs/openapi/paths/api@cases@_find.yaml | 3 +- .../paths/api@cases@alerts@{alertid}.yaml | 3 +- .../openapi/paths/api@cases@configure.yaml | 6 +- .../api@cases@configure@connectors@_find.yaml | 3 +- ...api@cases@configure@{configurationid}.yaml | 3 +- .../openapi/paths/api@cases@reporters.yaml | 3 +- .../docs/openapi/paths/api@cases@tags.yaml | 3 +- .../paths/api@cases@{caseid}@comments.yaml | 12 ++-- ...i@cases@{caseid}@comments@{commentid}.yaml | 6 +- .../openapi/paths/s@{spaceid}@api@cases.yaml | 3 + .../paths/s@{spaceid}@api@cases@_find.yaml | 1 + ...@{spaceid}@api@cases@alerts@{alertid}.yaml | 1 + .../s@{spaceid}@api@cases@configure.yaml | 2 + ...@api@cases@configure@connectors@_find.yaml | 3 +- ...api@cases@configure@{configurationid}.yaml | 1 + .../s@{spaceid}@api@cases@reporters.yaml | 1 + .../paths/s@{spaceid}@api@cases@tags.yaml | 1 + ...{spaceid}@api@cases@{caseid}@comments.yaml | 4 ++ ...i@cases@{caseid}@comments@{commentid}.yaml | 2 + 23 files changed, 163 insertions(+), 52 deletions(-) create mode 100644 x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml diff --git a/x-pack/plugins/cases/docs/openapi/bundled.json b/x-pack/plugins/cases/docs/openapi/bundled.json index 13645b108fc0b..ef89279600760 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.json +++ b/x-pack/plugins/cases/docs/openapi/bundled.json @@ -31,7 +31,8 @@ "paths": { "/api/cases": { "post": { - "summary": "Creates a case.", + "summary": "Creates a case in the default space.", + "operationId": "createCaseDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", "tags": [ "cases", @@ -484,7 +485,8 @@ ] }, "delete": { - "summary": "Deletes one or more cases.", + "summary": "Deletes one or more cases from the default space.", + "operationId": "deleteCaseDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -517,7 +519,8 @@ ] }, "patch": { - "summary": "Updates one or more cases.", + "summary": "Updates one or more cases in the default space.", + "operationId": "updateCaseDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating.\n", "tags": [ "cases", @@ -989,7 +992,8 @@ }, "/api/cases/_find": { "get": { - "summary": "Retrieves a paginated subset of cases.", + "summary": "Retrieves a paginated subset of cases from the default space.", + "operationId": "getCasesDefaultSpace", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "tags": [ "cases", @@ -1494,7 +1498,8 @@ }, "/api/cases/alerts/{alertId}": { "get": { - "summary": "Returns the cases associated with a specific alert.", + "summary": "Returns the cases associated with a specific alert in the default space.", + "operationId": "getCasesByAlertDefaultSpace", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "x-technical-preview": true, "tags": [ @@ -1554,7 +1559,8 @@ }, "/api/cases/configure": { "get": { - "summary": "Retrieves external connection details, such as the closure type and default connector for cases.", + "summary": "Retrieves external connection details, such as the closure type and default connector for cases in the default space.", + "operationId": "getCaseConfigurationDefaultSpace", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration.\n", "tags": [ "cases", @@ -1762,7 +1768,8 @@ ] }, "post": { - "summary": "Sets external connection details, such as the closure type and default connector for cases.", + "summary": "Sets external connection details, such as the closure type and default connector for cases in the default space.", + "operationId": "setCaseConfigurationDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration. Connectors are used to interface with external systems. You must create a connector before you can use it in your cases. Refer to the add connectors API. If you set a default connector, it is automatically selected when you create cases in Kibana. If you use the create case API, however, you must still specify all of the connector details.\n", "tags": [ "cases", @@ -2109,7 +2116,8 @@ }, "/api/cases/configure/{configurationId}": { "patch": { - "summary": "Updates external connection details, such as the closure type and default connector for cases.", + "summary": "Updates external connection details, such as the closure type and default connector for cases in the default space.", + "operationId": "updateCaseConfigurationDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration. Connectors are used to interface with external systems. You must create a connector before you can use it in your cases. Refer to the add connectors API.\n", "tags": [ "cases", @@ -2445,7 +2453,8 @@ }, "/api/cases/configure/connectors/_find": { "get": { - "summary": "Retrieves information about connectors.", + "summary": "Retrieves information about connectors for cases in the default space.", + "operationId": "getCaseConnectorsDefaultSpace", "description": "In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and Connectors** feature in the **Management** section of the Kibana feature privileges.\n", "tags": [ "cases", @@ -2520,7 +2529,8 @@ }, "/api/cases/reporters": { "get": { - "summary": "Returns information about the users who opened cases.", + "summary": "Returns information about the users who opened cases in the default space.", + "operationId": "getCaseReportersDefaultCase", "description": "You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases. The API returns information about the users as they existed at the time of the case creation, including their name, full name, and email address. If any of those details change thereafter or if a user is deleted, the information returned by this API is unchanged.\n", "tags": [ "cases", @@ -2630,7 +2640,8 @@ }, "/api/cases/tags": { "get": { - "summary": "Aggregates and returns a list of case tags.", + "summary": "Aggregates and returns a list of case tags in the default space.", + "operationId": "getCaseTagsDefaultSpace", "description": "You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "tags": [ "cases", @@ -2690,7 +2701,8 @@ }, "/api/cases/{caseId}/comments": { "post": { - "summary": "Adds a comment or alert to a case.", + "summary": "Adds a comment or alert to a case in the default space.", + "operationId": "addCaseCommentDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", "tags": [ "cases", @@ -3016,7 +3028,8 @@ ] }, "delete": { - "summary": "Deletes all comments and alerts from a case.", + "summary": "Deletes all comments and alerts from a case in the default space.", + "operationId": "deleteCaseCommentsDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -3042,7 +3055,8 @@ ] }, "patch": { - "summary": "Updates a comment or alert in a case.", + "summary": "Updates a comment or alert in a case in the default space.", + "operationId": "updateCaseCommentDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating. NOTE: You cannot change the comment type or the owner of a comment.\n", "tags": [ "cases", @@ -3368,7 +3382,8 @@ ] }, "get": { - "summary": "Retrieves all the comments from a case.", + "summary": "Retrieves all the comments from a case in the default space.", + "operationId": "getAllCaseCommentsDefaultSpace", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", "tags": [ "cases", @@ -3417,7 +3432,8 @@ }, "/api/cases/{caseId}/comments/{commentId}": { "delete": { - "summary": "Deletes a comment or alert from a case.", + "summary": "Deletes a comment or alert from a case in the default space.", + "operationId": "deleteCaseCommentDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -3446,7 +3462,8 @@ ] }, "get": { - "summary": "Retrieves a comment from a case.", + "summary": "Retrieves a comment from a case in the default space.", + "operationId": "getCaseCommentDefaultSpace", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", "tags": [ "cases", @@ -3499,6 +3516,7 @@ "/s/{spaceId}/api/cases": { "post": { "summary": "Creates a case.", + "operationId": "createCase", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", "tags": [ "cases", @@ -3955,6 +3973,7 @@ }, "delete": { "summary": "Deletes one or more cases.", + "operationId": "deleteCase", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -3991,6 +4010,7 @@ }, "patch": { "summary": "Updates one or more cases.", + "operationId": "updateCase", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating.\n", "tags": [ "cases", @@ -4466,6 +4486,7 @@ "/s/{spaceId}/api/cases/_find": { "get": { "summary": "Retrieves a paginated subset of cases.", + "operationId": "getCases", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "tags": [ "cases", @@ -4972,6 +4993,7 @@ "/s/{spaceId}/api/cases/alerts/{alertId}": { "get": { "summary": "Returns the cases associated with a specific alert.", + "operationId": "getCasesByAlert", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "x-technical-preview": true, "tags": [ @@ -5035,6 +5057,7 @@ "/s/{spaceId}/api/cases/configure": { "get": { "summary": "Retrieves external connection details, such as the closure type and default connector for cases.", + "operationId": "getCaseConfiguration", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration.\n", "tags": [ "cases", @@ -5246,6 +5269,7 @@ }, "post": { "summary": "Sets external connection details, such as the closure type and default connector for cases.", + "operationId": "setCaseConfiguration", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration. Connectors are used to interface with external systems. You must create a connector before you can use it in your cases. Refer to the add connectors API. If you set a default connector, it is automatically selected when you create cases in Kibana. If you use the create case API, however, you must still specify all of the connector details.\n", "tags": [ "cases", @@ -5596,6 +5620,7 @@ "/s/{spaceId}/api/cases/configure/{configurationId}": { "patch": { "summary": "Updates external connection details, such as the closure type and default connector for cases.", + "operationId": "updateCaseConfiguration", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case configuration. Connectors are used to interface with external systems. You must create a connector before you can use it in your cases. Refer to the add connectors API.\n", "tags": [ "cases", @@ -5935,6 +5960,7 @@ "/s/{spaceId}/api/cases/configure/connectors/_find": { "get": { "summary": "Retrieves information about connectors.", + "operationId": "getCaseConnectors", "description": "In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and Connectors** feature in the **Management** section of the Kibana feature privileges.\n", "tags": [ "cases", @@ -6015,6 +6041,7 @@ "/s/{spaceId}/api/cases/reporters": { "get": { "summary": "Returns information about the users who opened cases.", + "operationId": "getCaseReporters", "description": "You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases. The API returns information about the users as they existed at the time of the case creation, including their name, full name, and email address. If any of those details change thereafter or if a user is deleted, the information returned by this API is unchanged.\n", "tags": [ "cases", @@ -6131,6 +6158,7 @@ "/s/{spaceId}/api/cases/tags": { "get": { "summary": "Aggregates and returns a list of case tags.", + "operationId": "getCaseTags", "description": "You must have read privileges for the **Cases*** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", "tags": [ "cases", @@ -6194,6 +6222,7 @@ "/s/{spaceId}/api/cases/{caseId}/comments": { "post": { "summary": "Adds a comment or alert to a case.", + "operationId": "addCaseComment", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", "tags": [ "cases", @@ -6523,6 +6552,7 @@ }, "delete": { "summary": "Deletes all comments and alerts from a case.", + "operationId": "deleteCaseComments", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -6552,6 +6582,7 @@ }, "patch": { "summary": "Updates a comment or alert in a case.", + "operationId": "updateCaseComment", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating. NOTE: You cannot change the comment type or the owner of a comment.\n", "tags": [ "cases", @@ -6881,6 +6912,7 @@ }, "get": { "summary": "Retrieves all the comments from a case.", + "operationId": "getAllCaseComments", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", "deprecated": true, "tags": [ @@ -6933,6 +6965,7 @@ "/s/{spaceId}/api/cases/{caseId}/comments/{commentId}": { "delete": { "summary": "Deletes a comment or alert from a case.", + "operationId": "deleteCaseComment", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -6965,6 +6998,7 @@ }, "get": { "summary": "Retrieves a comment from a case.", + "operationId": "getCaseComment", "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security*** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", "tags": [ "cases", diff --git a/x-pack/plugins/cases/docs/openapi/bundled.yaml b/x-pack/plugins/cases/docs/openapi/bundled.yaml index 21622619dbbe7..57b3c4647887c 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.yaml +++ b/x-pack/plugins/cases/docs/openapi/bundled.yaml @@ -19,7 +19,8 @@ servers: paths: /api/cases: post: - summary: Creates a case. + summary: Creates a case in the default space. + operationId: createCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -411,7 +412,8 @@ paths: servers: - url: https://localhost:5601 delete: - summary: Deletes one or more cases. + summary: Deletes one or more cases from the default space. + operationId: deleteCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -436,7 +438,8 @@ paths: servers: - url: https://localhost:5601 patch: - summary: Updates one or more cases. + summary: Updates one or more cases in the default space. + operationId: updateCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -839,7 +842,8 @@ paths: - url: https://localhost:5601 /api/cases/_find: get: - summary: Retrieves a paginated subset of cases. + summary: Retrieves a paginated subset of cases from the default space. + operationId: getCasesDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -1230,7 +1234,8 @@ paths: - url: https://localhost:5601 /api/cases/alerts/{alertId}: get: - summary: Returns the cases associated with a specific alert. + summary: Returns the cases associated with a specific alert in the default space. + operationId: getCasesByAlertDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -1269,7 +1274,8 @@ paths: get: summary: >- Retrieves external connection details, such as the closure type and - default connector for cases. + default connector for cases in the default space. + operationId: getCaseConfigurationDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -1455,7 +1461,8 @@ paths: post: summary: >- Sets external connection details, such as the closure type and default - connector for cases. + connector for cases in the default space. + operationId: setCaseConfigurationDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -1776,7 +1783,8 @@ paths: patch: summary: >- Updates external connection details, such as the closure type and - default connector for cases. + default connector for cases in the default space. + operationId: updateCaseConfigurationDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2086,7 +2094,8 @@ paths: - url: https://localhost:5601 /api/cases/configure/connectors/_find: get: - summary: Retrieves information about connectors. + summary: Retrieves information about connectors for cases in the default space. + operationId: getCaseConnectorsDefaultSpace description: > In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and @@ -2136,7 +2145,10 @@ paths: - url: https://localhost:5601 /api/cases/reporters: get: - summary: Returns information about the users who opened cases. + summary: >- + Returns information about the users who opened cases in the default + space. + operationId: getCaseReportersDefaultCase description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2209,7 +2221,8 @@ paths: - url: https://localhost:5601 /api/cases/tags: get: - summary: Aggregates and returns a list of case tags. + summary: Aggregates and returns a list of case tags in the default space. + operationId: getCaseTagsDefaultSpace description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2248,7 +2261,8 @@ paths: - url: https://localhost:5601 /api/cases/{caseId}/comments: post: - summary: Adds a comment or alert to a case. + summary: Adds a comment or alert to a case in the default space. + operationId: addCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2508,7 +2522,8 @@ paths: servers: - url: https://localhost:5601 delete: - summary: Deletes all comments and alerts from a case. + summary: Deletes all comments and alerts from a case in the default space. + operationId: deleteCaseCommentsDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2525,7 +2540,8 @@ paths: servers: - url: https://localhost:5601 patch: - summary: Updates a comment or alert in a case. + summary: Updates a comment or alert in a case in the default space. + operationId: updateCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2786,7 +2802,8 @@ paths: servers: - url: https://localhost:5601 get: - summary: Retrieves all the comments from a case. + summary: Retrieves all the comments from a case in the default space. + operationId: getAllCaseCommentsDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2816,7 +2833,8 @@ paths: - url: https://localhost:5601 /api/cases/{caseId}/comments/{commentId}: delete: - summary: Deletes a comment or alert from a case. + summary: Deletes a comment or alert from a case in the default space. + operationId: deleteCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2834,7 +2852,8 @@ paths: servers: - url: https://localhost:5601 get: - summary: Retrieves a comment from a case. + summary: Retrieves a comment from a case in the default space. + operationId: getCaseCommentDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -2865,6 +2884,7 @@ paths: /s/{spaceId}/api/cases: post: summary: Creates a case. + operationId: createCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the @@ -3259,6 +3279,7 @@ paths: - url: https://localhost:5601 delete: summary: Deletes one or more cases. + operationId: deleteCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the @@ -3286,6 +3307,7 @@ paths: - url: https://localhost:5601 patch: summary: Updates one or more cases. + operationId: updateCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the @@ -3691,6 +3713,7 @@ paths: /s/{spaceId}/api/cases/_find: get: summary: Retrieves a paginated subset of cases. + operationId: getCases description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -4085,6 +4108,7 @@ paths: /s/{spaceId}/api/cases/alerts/{alertId}: get: summary: Returns the cases associated with a specific alert. + operationId: getCasesByAlert description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -4125,6 +4149,7 @@ paths: summary: >- Retrieves external connection details, such as the closure type and default connector for cases. + operationId: getCaseConfiguration description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -4312,6 +4337,7 @@ paths: summary: >- Sets external connection details, such as the closure type and default connector for cases. + operationId: setCaseConfiguration description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -4634,6 +4660,7 @@ paths: summary: >- Updates external connection details, such as the closure type and default connector for cases. + operationId: updateCaseConfiguration description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -4945,6 +4972,7 @@ paths: /s/{spaceId}/api/cases/configure/connectors/_find: get: summary: Retrieves information about connectors. + operationId: getCaseConnectors description: > In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and @@ -4997,6 +5025,7 @@ paths: /s/{spaceId}/api/cases/reporters: get: summary: Returns information about the users who opened cases. + operationId: getCaseReporters description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5072,6 +5101,7 @@ paths: /s/{spaceId}/api/cases/tags: get: summary: Aggregates and returns a list of case tags. + operationId: getCaseTags description: > You must have read privileges for the **Cases*** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5112,6 +5142,7 @@ paths: /s/{spaceId}/api/cases/{caseId}/comments: post: summary: Adds a comment or alert to a case. + operationId: addCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5373,6 +5404,7 @@ paths: - url: https://localhost:5601 delete: summary: Deletes all comments and alerts from a case. + operationId: deleteCaseComments description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5391,6 +5423,7 @@ paths: - url: https://localhost:5601 patch: summary: Updates a comment or alert in a case. + operationId: updateCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5653,6 +5686,7 @@ paths: - url: https://localhost:5601 get: summary: Retrieves all the comments from a case. + operationId: getAllCaseComments description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5684,6 +5718,7 @@ paths: /s/{spaceId}/api/cases/{caseId}/comments/{commentId}: delete: summary: Deletes a comment or alert from a case. + operationId: deleteCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -5703,6 +5738,7 @@ paths: - url: https://localhost:5601 get: summary: Retrieves a comment from a case. + operationId: getCaseComment description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security*** section of the diff --git a/x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml b/x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml new file mode 100644 index 0000000000000..8a3883fe92873 --- /dev/null +++ b/x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml @@ -0,0 +1,7 @@ +summary: Get the number of cases in each state. +value: + { + "count_open_cases": 27, + "count_in_progress_cases": 50, + "count_closed_cases": 198 + } \ No newline at end of file diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases.yaml index c12031803ca60..5375375036671 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases.yaml @@ -1,5 +1,6 @@ post: - summary: Creates a case. + summary: Creates a case in the default space. + operationId: createCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -73,7 +74,8 @@ post: - url: https://localhost:5601 delete: - summary: Deletes one or more cases. + summary: Deletes one or more cases from the default space. + operationId: deleteCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -97,7 +99,8 @@ delete: - url: https://localhost:5601 patch: - summary: Updates one or more cases. + summary: Updates one or more cases in the default space. + operationId: updateCaseDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml index 1ef386ddd1f9d..266e00101aad5 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@_find.yaml @@ -1,5 +1,6 @@ get: - summary: Retrieves a paginated subset of cases. + summary: Retrieves a paginated subset of cases from the default space. + operationId: getCasesDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@alerts@{alertid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@alerts@{alertid}.yaml index f508f9ebc2131..e020ae577cd96 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@alerts@{alertid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@alerts@{alertid}.yaml @@ -1,5 +1,6 @@ get: - summary: Returns the cases associated with a specific alert. + summary: Returns the cases associated with a specific alert in the default space. + operationId: getCasesByAlertDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure.yaml index 9817e37317046..527f67b3cbf22 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure.yaml @@ -1,5 +1,6 @@ get: - summary: Retrieves external connection details, such as the closure type and default connector for cases. + summary: Retrieves external connection details, such as the closure type and default connector for cases in the default space. + operationId: getCaseConfigurationDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -24,7 +25,8 @@ get: - url: https://localhost:5601 post: - summary: Sets external connection details, such as the closure type and default connector for cases. + summary: Sets external connection details, such as the closure type and default connector for cases in the default space. + operationId: setCaseConfigurationDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@connectors@_find.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@connectors@_find.yaml index 636108e564249..8e6bddd6c681d 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@connectors@_find.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@connectors@_find.yaml @@ -1,5 +1,6 @@ get: - summary: Retrieves information about connectors. + summary: Retrieves information about connectors for cases in the default space. + operationId: getCaseConnectorsDefaultSpace description: > In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and Connectors** diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@{configurationid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@{configurationid}.yaml index e7b38f37d761f..204541dced9c1 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@{configurationid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@configure@{configurationid}.yaml @@ -1,5 +1,6 @@ patch: - summary: Updates external connection details, such as the closure type and default connector for cases. + summary: Updates external connection details, such as the closure type and default connector for cases in the default space. + operationId: updateCaseConfigurationDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@reporters.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@reporters.yaml index 3f920b0414f6f..dcc601c7d4a74 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@reporters.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@reporters.yaml @@ -1,5 +1,6 @@ get: - summary: Returns information about the users who opened cases. + summary: Returns information about the users who opened cases in the default space. + operationId: getCaseReportersDefaultCase description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@tags.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@tags.yaml index 68cccc0c8f723..f74dabea5bd0c 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@tags.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@tags.yaml @@ -1,5 +1,6 @@ get: - summary: Aggregates and returns a list of case tags. + summary: Aggregates and returns a list of case tags in the default space. + operationId: getCaseTagsDefaultSpace description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments.yaml index 15fa137fa64b4..95e49981d729d 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments.yaml @@ -1,5 +1,6 @@ post: - summary: Adds a comment or alert to a case. + summary: Adds a comment or alert to a case in the default space. + operationId: addCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -36,7 +37,8 @@ post: - url: https://localhost:5601 delete: - summary: Deletes all comments and alerts from a case. + summary: Deletes all comments and alerts from a case in the default space. + operationId: deleteCaseCommentsDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -54,7 +56,8 @@ delete: - url: https://localhost:5601 patch: - summary: Updates a comment or alert in a case. + summary: Updates a comment or alert in a case in the default space. + operationId: updateCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -92,7 +95,8 @@ patch: - url: https://localhost:5601 get: - summary: Retrieves all the comments from a case. + summary: Retrieves all the comments from a case in the default space. + operationId: getAllCaseCommentsDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments@{commentid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments@{commentid}.yaml index 0b167d3e8d25c..f76bd93cd8510 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments@{commentid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}@comments@{commentid}.yaml @@ -1,5 +1,6 @@ delete: - summary: Deletes a comment or alert from a case. + summary: Deletes a comment or alert from a case in the default space. + operationId: deleteCaseCommentDefaultSpace description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -18,7 +19,8 @@ delete: - url: https://localhost:5601 get: - summary: Retrieves a comment from a case. + summary: Retrieves a comment from a case in the default space. + operationId: getCaseCommentDefaultSpace description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases.yaml index ebf0824e6c9a2..d0f6ddda83731 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases.yaml @@ -1,5 +1,6 @@ post: summary: Creates a case. + operationId: createCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -75,6 +76,7 @@ post: delete: summary: Deletes one or more cases. + operationId: deleteCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -100,6 +102,7 @@ delete: patch: summary: Updates one or more cases. + operationId: updateCase description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@_find.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@_find.yaml index b9652cae0b69e..48801a11dea66 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@_find.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@_find.yaml @@ -1,5 +1,6 @@ get: summary: Retrieves a paginated subset of cases. + operationId: getCases description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@alerts@{alertid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@alerts@{alertid}.yaml index 401c3a486a63b..20c365947e351 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@alerts@{alertid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@alerts@{alertid}.yaml @@ -1,5 +1,6 @@ get: summary: Returns the cases associated with a specific alert. + operationId: getCasesByAlert description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure.yaml index 7e52d226a8389..2df6edb39c1ce 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure.yaml @@ -1,5 +1,6 @@ get: summary: Retrieves external connection details, such as the closure type and default connector for cases. + operationId: getCaseConfiguration description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -26,6 +27,7 @@ get: post: summary: Sets external connection details, such as the closure type and default connector for cases. + operationId: setCaseConfiguration description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@connectors@_find.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@connectors@_find.yaml index 851c0e0ddda30..dfbbc498d836d 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@connectors@_find.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@connectors@_find.yaml @@ -1,5 +1,6 @@ get: - summary: Retrieves information about connectors. + summary: Retrieves information about connectors. + operationId: getCaseConnectors description: > In particular, only the connectors that are supported for use in cases are returned. You must have `read` privileges for the **Actions and Connectors** diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@{configurationid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@{configurationid}.yaml index c5a104a987376..18336746e830b 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@{configurationid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@configure@{configurationid}.yaml @@ -1,5 +1,6 @@ patch: summary: Updates external connection details, such as the closure type and default connector for cases. + operationId: updateCaseConfiguration description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@reporters.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@reporters.yaml index 186e5141dec81..52b0ec945ed1a 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@reporters.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@reporters.yaml @@ -1,5 +1,6 @@ get: summary: Returns information about the users who opened cases. + operationId: getCaseReporters description: > You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@tags.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@tags.yaml index 7798b74296126..58f1e7369d718 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@tags.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@tags.yaml @@ -1,5 +1,6 @@ get: summary: Aggregates and returns a list of case tags. + operationId: getCaseTags description: > You must have read privileges for the **Cases*** feature in the **Management**, **Observability**, or **Security** section of the Kibana diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments.yaml index dc07c62c38c50..9d139bed703e4 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments.yaml @@ -1,5 +1,6 @@ post: summary: Adds a comment or alert to a case. + operationId: addCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -38,6 +39,7 @@ post: delete: summary: Deletes all comments and alerts from a case. + operationId: deleteCaseComments description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -57,6 +59,7 @@ delete: patch: summary: Updates a comment or alert in a case. + operationId: updateCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -96,6 +99,7 @@ patch: get: summary: Retrieves all the comments from a case. + operationId: getAllCaseComments description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments@{commentid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments@{commentid}.yaml index c9ad642bdd559..2ed9456aed4db 100644 --- a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments@{commentid}.yaml +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}@comments@{commentid}.yaml @@ -1,5 +1,6 @@ delete: summary: Deletes a comment or alert from a case. + operationId: deleteCaseComment description: > You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana @@ -20,6 +21,7 @@ delete: get: summary: Retrieves a comment from a case. + operationId: getCaseComment description: > You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security*** section of the Kibana feature privileges, From 5bb7a83db3271ba707346572daf26093dfa1cf17 Mon Sep 17 00:00:00 2001 From: Robert Oskamp Date: Wed, 13 Jul 2022 17:20:24 +0200 Subject: [PATCH 10/96] [ML] Functional tests - re-enable data frame analytics clone tests (#136278) This PR re-enables the data frame analytics clone tests. --- x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts index a86be2bbaaa8d..3a33c95edba42 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/cloning.ts @@ -135,8 +135,7 @@ export default function ({ getService }: FtrProviderContext) { }); for (const testData of testDataList) { - // FLAKY: https://github.com/elastic/kibana/issues/134430 - describe.skip(`${testData.suiteTitle}`, function () { + describe(`${testData.suiteTitle}`, function () { const cloneJobId = `${testData.job.id}_clone`; const cloneDestIndex = `${testData.job!.dest!.index}_clone`; From 469d6f87e4ab78356bf98d2ac96a79807d283ab4 Mon Sep 17 00:00:00 2001 From: Oliver Gupte Date: Wed, 13 Jul 2022 11:20:38 -0400 Subject: [PATCH 11/96] Revert "[APM] Adds support for metrics for latency distribution histogram (#136083)" (#136293) This reverts commit e337b58f7f59c3f92b933148f05c91b08e834095. --- .../fetch_duration_histogram_range_steps.ts | 8 ++- .../queries/fetch_duration_percentiles.ts | 55 ++++++++++--------- .../queries/fetch_duration_ranges.ts | 10 +++- .../correlations/utils/get_duration_field.ts | 24 -------- .../server/routes/correlations/utils/index.ts | 1 - .../routes/latency_distribution/route.ts | 12 +--- 6 files changed, 45 insertions(+), 65 deletions(-) delete mode 100644 x-pack/plugins/apm/server/routes/correlations/utils/get_duration_field.ts diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts index 6cca44ad6c1ff..349eb1a400f7b 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts @@ -9,10 +9,13 @@ import { scaleLog } from 'd3-scale'; import { isFiniteNumber } from '@kbn/observability-plugin/common/utils/is_finite_number'; import { CommonCorrelationsQueryParams } from '../../../../common/correlations/types'; +import { + SPAN_DURATION, + TRANSACTION_DURATION, +} from '../../../../common/elasticsearch_fieldnames'; import { ProcessorEvent } from '../../../../common/processor_event'; import { Setup } from '../../../lib/helpers/setup_request'; import { getCommonCorrelationsQuery } from './get_common_correlations_query'; -import { getDurationField } from '../utils'; const getHistogramRangeSteps = (min: number, max: number, steps: number) => { // A d3 based scale function as a helper to get equally distributed bins on a log scale. @@ -39,7 +42,8 @@ export const fetchDurationHistogramRangeSteps = async ({ const steps = 100; - const durationField = getDurationField(eventType); + const durationField = + eventType === ProcessorEvent.span ? SPAN_DURATION : TRANSACTION_DURATION; const resp = await apmEventClient.search( 'get_duration_histogram_range_steps', diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts index d9a660ea7e54d..706ccb72dba31 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts @@ -5,12 +5,15 @@ * 2.0. */ +import { + SPAN_DURATION, + TRANSACTION_DURATION, +} from '../../../../common/elasticsearch_fieldnames'; import { SIGNIFICANT_VALUE_DIGITS } from '../../../../common/correlations/constants'; import { Setup } from '../../../lib/helpers/setup_request'; import { ProcessorEvent } from '../../../../common/processor_event'; import { getCommonCorrelationsQuery } from './get_common_correlations_query'; import { CommonCorrelationsQueryParams } from '../../../../common/correlations/types'; -import { getDurationField } from '../utils'; export const fetchDurationPercentiles = async ({ eventType, @@ -29,34 +32,36 @@ export const fetchDurationPercentiles = async ({ totalDocs: number; percentiles: Record; }> => { - const params = { - apm: { events: [eventType] }, - body: { - track_total_hits: true, - query: getCommonCorrelationsQuery({ - start, - end, - environment, - kuery, - query, - }), - size: 0, - aggs: { - duration_percentiles: { - percentiles: { - hdr: { - number_of_significant_value_digits: SIGNIFICANT_VALUE_DIGITS, + const response = await setup.apmEventClient.search( + 'get_duration_percentiles', + { + apm: { events: [eventType] }, + body: { + track_total_hits: true, + query: getCommonCorrelationsQuery({ + start, + end, + environment, + kuery, + query, + }), + size: 0, + aggs: { + duration_percentiles: { + percentiles: { + hdr: { + number_of_significant_value_digits: SIGNIFICANT_VALUE_DIGITS, + }, + field: + eventType === ProcessorEvent.span + ? SPAN_DURATION + : TRANSACTION_DURATION, + ...(Array.isArray(percents) ? { percents } : {}), }, - field: getDurationField(eventType), - ...(Array.isArray(percents) ? { percents } : {}), }, }, }, - }, - }; - const response = await setup.apmEventClient.search( - 'get_duration_percentiles', - params + } ); // return early with no results if the search didn't return any documents diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts index a7833232ce74b..30dc52b1a6e93 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts @@ -6,11 +6,14 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { + SPAN_DURATION, + TRANSACTION_DURATION, +} from '../../../../common/elasticsearch_fieldnames'; import { ProcessorEvent } from '../../../../common/processor_event'; import { Setup } from '../../../lib/helpers/setup_request'; import { getCommonCorrelationsQuery } from './get_common_correlations_query'; import { Environment } from '../../../../common/environment_rt'; -import { getDurationField } from '../utils'; export const fetchDurationRanges = async ({ rangeSteps, @@ -61,7 +64,10 @@ export const fetchDurationRanges = async ({ aggs: { logspace_ranges: { range: { - field: getDurationField(eventType), + field: + eventType === ProcessorEvent.span + ? SPAN_DURATION + : TRANSACTION_DURATION, ranges, }, }, diff --git a/x-pack/plugins/apm/server/routes/correlations/utils/get_duration_field.ts b/x-pack/plugins/apm/server/routes/correlations/utils/get_duration_field.ts deleted file mode 100644 index 4a2ad92d81c7e..0000000000000 --- a/x-pack/plugins/apm/server/routes/correlations/utils/get_duration_field.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - SPAN_DURATION, - TRANSACTION_DURATION, - TRANSACTION_DURATION_HISTOGRAM, -} from '../../../../common/elasticsearch_fieldnames'; -import { ProcessorEvent } from '../../../../common/processor_event'; - -export function getDurationField(eventType: ProcessorEvent) { - switch (eventType) { - case ProcessorEvent.metric: - return TRANSACTION_DURATION_HISTOGRAM; - case ProcessorEvent.span: - return SPAN_DURATION; - default: - return TRANSACTION_DURATION; - } -} diff --git a/x-pack/plugins/apm/server/routes/correlations/utils/index.ts b/x-pack/plugins/apm/server/routes/correlations/utils/index.ts index 25bd53f0c7d0c..f7c5abef939b9 100644 --- a/x-pack/plugins/apm/server/routes/correlations/utils/index.ts +++ b/x-pack/plugins/apm/server/routes/correlations/utils/index.ts @@ -7,4 +7,3 @@ export { computeExpectationsAndRanges } from './compute_expectations_and_ranges'; export { splitAllSettledPromises } from './split_all_settled_promises'; -export { getDurationField } from './get_duration_field'; diff --git a/x-pack/plugins/apm/server/routes/latency_distribution/route.ts b/x-pack/plugins/apm/server/routes/latency_distribution/route.ts index 7ec8d9f179816..9ab93e11b974b 100644 --- a/x-pack/plugins/apm/server/routes/latency_distribution/route.ts +++ b/x-pack/plugins/apm/server/routes/latency_distribution/route.ts @@ -11,7 +11,6 @@ import { termQuery } from '@kbn/observability-plugin/server'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { getOverallLatencyDistribution } from './get_overall_latency_distribution'; import { setupRequest } from '../../lib/helpers/setup_request'; -import { getSearchAggregatedTransactions } from '../../lib/helpers/transactions'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { environmentRt, kueryRt, rangeRt } from '../default_api_types'; import { @@ -62,18 +61,9 @@ const latencyOverallTransactionDistributionRoute = createApmServerRoute({ termFilters, } = resources.params.body; - const searchAggregatedTransactions = await getSearchAggregatedTransactions({ - ...setup, - kuery, - start, - end, - }); - return getOverallLatencyDistribution({ setup, - eventType: searchAggregatedTransactions - ? ProcessorEvent.metric - : ProcessorEvent.transaction, + eventType: ProcessorEvent.transaction, environment, kuery, start, From 9739fe883614dee597d530c0fc63c9920279774b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20FOUCRET?= Date: Wed, 13 Jul 2022 17:36:18 +0200 Subject: [PATCH 12/96] [App Search][BYOEI] Object fields rendering (#136016) --- .../curations/curation/curation_logic.ts | 19 +- .../curations/curation/results/utils.test.ts | 3 - .../curations/curation/results/utils.ts | 37 ++-- .../app_search/components/curations/types.ts | 8 +- .../curation_suggestion.test.tsx | 4 - .../app_search/components/result/result.tsx | 4 +- .../components/result/result_field_value.tsx | 28 ++- .../app_search/components/result/types.ts | 6 +- .../components/search/search_logic.ts | 4 +- .../app_search/utils/results/index.test.ts | 126 ++++++++----- .../app_search/utils/results/index.ts | 165 +++++++++++------- 11 files changed, 249 insertions(+), 155 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/curation_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/curation_logic.ts index a37f7257f416e..3b3221a8dcb48 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/curation_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/curation_logic.ts @@ -15,11 +15,10 @@ import { import { HttpLogic } from '../../../../shared/http'; import { KibanaLogic } from '../../../../shared/kibana'; import { ENGINE_CURATIONS_PATH } from '../../../routes'; -import { flattenDocument } from '../../../utils/results'; import { EngineLogic, generateEnginePath } from '../../engine'; import { DELETE_SUCCESS_MESSAGE } from '../constants'; -import { Curation, CurationResult } from '../types'; +import { Curation } from '../types'; import { addDocument, removeDocument } from '../utils'; type CurationPageTabs = 'promoted' | 'history' | 'hidden'; @@ -236,12 +235,8 @@ export const CurationLogic = kea flattenDocument(x) as CurationResult), - promoted: response.promoted.map((x) => flattenDocument(x) as CurationResult), - }; - actions.onCurationLoad(payload); + + actions.onCurationLoad(response); } catch (e) { const { navigateToUrl } = KibanaLogic.values; @@ -269,12 +264,8 @@ export const CurationLogic = kea flattenDocument(x) as CurationResult), - promoted: response.promoted.map((x) => flattenDocument(x) as CurationResult), - }; - actions.onCurationLoad(payload); + + actions.onCurationLoad(response); } catch (e) { flashAPIErrors(e); actions.onCurationError(); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.test.ts index 7bc05f34511a0..2aabb2760695e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.test.ts @@ -21,15 +21,12 @@ describe('convertToResultFormat', () => { }, id: { raw: 'some-id', - snippet: null, }, someField: { raw: 'some flat string', - snippet: null, }, anotherField: { raw: '123456', - snippet: null, }, }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts index 5c56eb934b150..9f9340fe46537 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts @@ -28,25 +28,30 @@ const mergeMetas = (partialMeta: ResultMeta, secondPartialMeta: ResultMeta): Res }; }; -export const convertToResultFormat = (document: CurationResult): SearchResult => { - const result = {} as SearchResult; +const isNestedObject = (value: unknown): boolean => { + if (Array.isArray(value)) { + return value.reduce( + (isNested: boolean, currentValue) => isNested || isNestedObject(currentValue), + false + ); + } + + return value === null || typeof value === 'object'; +}; +export const convertToResultFormat = (document: CurationResult): SearchResult => { // Convert `key: 'value'` into `key: { raw: 'value' }` - Object.entries(document).forEach(([key, value]) => { - // don't convert _meta if exists - if (key === '_meta') { - result[key] = value as ResultMeta; - } else { - result[key] = { - raw: value, - snippet: null, // Don't try to provide a snippet, we can't really guesstimate it - }; - } - }); + const result = Object.entries(document).reduce((acc, [key, value]) => { + return { + ...acc, + [key]: + isNestedObject(value) || Object.prototype.hasOwnProperty.call(value, 'raw') + ? value + : { raw: value }, + }; + }, {} as SearchResult); - // Add the _meta obj needed by Result - const convertedMetaObj = convertIdToMeta(document.id); - result._meta = mergeMetas(result._meta, convertedMetaObj); + result._meta = mergeMetas(result._meta, convertIdToMeta(document.id)); return result; }; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/types.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/types.ts index 73aefbdfd205d..9d4497e5d72a8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/types.ts @@ -8,7 +8,7 @@ import type { SearchResult } from '@elastic/search-ui'; import { Meta } from '../../../../../common/types'; -import { ResultMeta } from '../result/types'; +import { ResultMeta, SimpleFieldValue } from '../result/types'; export interface CurationSuggestion { query: string; @@ -47,5 +47,9 @@ export interface CurationResult { // TODO: Consider updating our internal API to return more standard Result data in the future id: string; _meta?: ResultMeta; - [key: string]: string | string[] | ResultMeta | unknown | undefined; + [key: string]: SimpleFieldValue | ResultMeta | CurationResultNestedFieldValue | undefined; } + +type CurationResultNestedFieldValue = + | { [key: string]: SimpleFieldValue | CurationResultNestedFieldValue } + | CurationResultNestedFieldValue[]; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion.test.tsx index 604d2930a4b5d..f20684dc1a107 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion.test.tsx @@ -90,11 +90,9 @@ describe('CurationSuggestion', () => { { id: { raw: '1', - snippet: null, }, foo: { raw: 'foo', - snippet: null, }, _meta: { id: '1', @@ -110,11 +108,9 @@ describe('CurationSuggestion', () => { { id: { raw: '4', - snippet: null, }, foo: { raw: 'foo', - snippet: null, }, _meta: { id: '4', diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result.tsx index 0c78cc672a609..52bb3086e1e00 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result.tsx @@ -20,7 +20,7 @@ import { Schema } from '../../../shared/schema/types'; import { ENGINE_DOCUMENT_DETAIL_PATH } from '../../routes'; import { generateEncodedPath } from '../../utils/encode_path_params'; -import { flattenDocument } from '../../utils/results'; +import { formatResultWithoutMeta } from '../../utils/results'; import { ResultField } from './result_field'; import { ResultHeader } from './result_header'; @@ -57,7 +57,7 @@ export const Result: React.FC = ({ const META = '_meta'; const resultMeta = result[META]; const resultFields = useMemo( - () => Object.entries(flattenDocument(result)).filter(([key]) => key !== META && key !== ID), + () => Object.entries(formatResultWithoutMeta(result)).filter(([key]) => key !== ID), [result] ); const numResults = resultFields.length; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result_field_value.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result_field_value.tsx index 76bac7cf096e8..30730dbadc578 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result_field_value.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/result_field_value.tsx @@ -9,7 +9,9 @@ import React from 'react'; import classNames from 'classnames'; -import { FieldType, Raw, Snippet } from './types'; +import { SchemaType } from '../../../shared/schema/types'; + +import { FieldType, Raw, SimpleFieldValue, Snippet } from './types'; import './result_field_value.scss'; @@ -18,7 +20,27 @@ const isNotNumeric = (raw: string | number): boolean => { return isNaN(parseFloat(raw)); }; -const getRawArrayDisplay = (rawArray: Array): string => { +const isScalarValue = (_: Raw, type?: FieldType): _ is SimpleFieldValue => { + return type !== SchemaType.Nested; +}; + +const getRawDisplay = (raw?: Raw, type?: FieldType): string | null => { + if (!raw) { + return null; + } + + if (!isScalarValue(raw, type)) { + return JSON.stringify(raw); + } + + if (Array.isArray(raw)) { + return getRawArrayDisplay(raw); + } + + return raw.toString(); +}; + +const getRawArrayDisplay = (rawArray: string[] | number[]): string => { return `[${rawArray.map((raw) => (isNotNumeric(raw) ? `"${raw}"` : raw)).join(', ')}]`; }; @@ -56,7 +78,7 @@ export const ResultFieldValue: React.FC = ({ snippet, raw, type, classNam */ dangerouslySetInnerHTML={snippet ? { __html: parseHighlights(snippet) } : undefined} // eslint-disable-line react/no-danger > - {!!snippet ? null : Array.isArray(raw) ? getRawArrayDisplay(raw) : raw} + {!!snippet ? null : getRawDisplay(raw, type)}

); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/types.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/types.ts index 9ffc535edaca2..45e9996b1afa2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result/types.ts @@ -11,7 +11,11 @@ import { InternalSchemaType, SchemaType } from '../../../shared/schema/types'; export type FieldType = InternalSchemaType | SchemaType; -export type Raw = string | string[] | number | number[]; +export type NestedFieldValue = + | { [fieldName: string]: SimpleFieldValue | NestedFieldValue } + | NestedFieldValue[]; +export type SimpleFieldValue = string | string[] | number | number[]; +export type Raw = SimpleFieldValue | NestedFieldValue; export type Snippet = string; export interface FieldValue { raw?: Raw; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/search/search_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/search/search_logic.ts index 4097e693aff11..6b641de15da46 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/search/search_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/search/search_logic.ts @@ -12,7 +12,7 @@ import type { SearchResult } from '@elastic/search-ui'; import { flashAPIErrors } from '../../../shared/flash_messages'; import { HttpLogic } from '../../../shared/http'; -import { flattenDocument } from '../../utils/results'; +import { formatResult } from '../../utils/results'; import { EngineLogic } from '../engine'; interface SearchValues { @@ -50,7 +50,7 @@ export const SearchLogic = kea>({ searchResults: [ [], { - onSearch: (_, { results }) => results.map((res) => flattenDocument(res) as SearchResult), + onSearch: (_, { results }) => results.map((res) => formatResult(res) as SearchResult), }, ], }), diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.test.ts index c330ce62b474a..b020a4150d5fc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.test.ts @@ -4,57 +4,93 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { SearchResult } from '@elastic/search-ui'; -import { flattenDocument, flattenDocumentField } from '.'; +import { formatResult } from '.'; -describe('flattenDocumentField', () => { - it('flattens field if raw key is absent', () => { - expect(flattenDocumentField('address', { country: { raw: 'United States' } })).toEqual([ - ['address.country', { raw: 'United States' }], - ]); - }); - it('preserves field if raw key is present', () => { - expect(flattenDocumentField('country', { raw: 'United States' })).toEqual([ - ['country', { raw: 'United States' }], - ]); - }); - it('can flatten multiple levels', () => { +describe('formatResult', () => { + it('format the result', () => { const data = { - name: { raw: 'Bubba Gump' }, - address: { - street: { raw: 'South St' }, - country: { - code: { raw: 'US' }, - name: { raw: 'United States' }, - }, - }, + id: { raw: 'doc-id' }, + text_field: { raw: 'text value' }, + numeric_field: { raw: 21 }, + multivalued_field: { raw: ['value_1', 'value_2'] }, + 'simple_object.flattened': { raw: ['value_1', 'value_2'] }, + raw: { raw: 'raw_value' }, + snippet: { snippet: 'snipet_value' }, }; - const expected = [ - ['customer.name', { raw: 'Bubba Gump' }], - ['customer.address.street', { raw: 'South St' }], - ['customer.address.country.code', { raw: 'US' }], - ['customer.address.country.name', { raw: 'United States' }], - ]; - expect(flattenDocumentField('customer', data)).toEqual(expected); + + expect(formatResult(data)).toEqual(data); }); -}); -describe('flattenDocument', () => { - it('flattens all fields without raw key', () => { - const result: SearchResult = { - id: { raw: '123' }, - _meta: { engine: 'Test', id: '1' }, - title: { raw: 'Getty Museum' }, - address: { city: { raw: 'Los Angeles' }, state: { raw: 'California' } }, - }; - const expected: SearchResult = { - id: { raw: '123' }, - _meta: { engine: 'Test', id: '1' }, - title: { raw: 'Getty Museum' }, - 'address.city': { raw: 'Los Angeles' }, - 'address.state': { raw: 'California' }, + describe('with nested objects', () => { + describe('single value field', () => { + it('transform nested field values', () => { + expect( + formatResult({ + id: { raw: 'doc-id' }, + nested_object: { + subfield_1: { raw: ['value 1', 'value 2'] }, + subfield_2: { raw: 'value 3' }, + }, + }) + ).toEqual({ + id: { raw: 'doc-id' }, + nested_object: { + raw: { + subfield_1: ['value 1', 'value 2'], + subfield_2: 'value 3', + }, + }, + }); + }); + }); + + describe('multi-valued field', () => { + it('transform nested field values', () => { + expect( + formatResult({ + id: { raw: 'doc-id' }, + nested_object: [ + { + subfield_1: { raw: ['value 1', 'value 2'] }, + subfield_2: { raw: 'value 3' }, + raw: { raw: 'raw_value' }, + snippet: { raw: 'snippert_value' }, + }, + { + subfield_1: { raw: 'value 4' }, + raw: { raw: ['raw_value'] }, + snippet: { raw: ['snippert_value'] }, + }, + ], + }) + ).toEqual({ + id: { raw: 'doc-id' }, + nested_object: { + raw: [ + { + subfield_1: ['value 1', 'value 2'], + subfield_2: 'value 3', + raw: 'raw_value', + snippet: 'snippert_value', + }, + { + subfield_1: 'value 4', + raw: ['raw_value'], + snippet: ['snippert_value'], + }, + ], + }, + }); + }); + }); + }); + + it('does not consider _meta field as a nested field', () => { + const data = { + id: { raw: 'doc-id' }, + _meta: { id: '1', _score: 12, engine: 'foo-engine' }, }; - expect(flattenDocument(result)).toEqual(expected); + expect(formatResult(data)).toEqual(data); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.ts index 945dd1418801a..673f577c0033e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/utils/results/index.ts @@ -5,70 +5,109 @@ * 2.0. */ -/* This method flattens fields in documents returned from the ent-search backend. - * If a field in the document contains "raw" key, it's already flat. - * If it doesn't, we want to pull properties from it, and move them to the top level. - * This field is already flat: - * 'country', { raw: 'United States' } - * This field is not flat: - * 'address', { - * country: { raw: 'United States' }, - * city: { raw: 'Los Angeles' } - * } - * It will be transformed into: - * [ - * ['address.country', { raw: 'United States' }], - * ['address.city', { raw: 'Los Angeles' }] - * ] - */ -export const flattenDocumentField = ( - fieldName: string, - fieldValue: object -): Array<[string, object]> => { - const flattened: Array<[string, object]> = []; - - if (typeof fieldValue === 'object' && !fieldValue.hasOwnProperty('raw')) { - for (const [propName, value] of Object.entries(fieldValue)) { - flattenDocumentField(fieldName + '.' + propName, value).map(([flatKey, flatVal]) => { - flattened.push([flatKey, flatVal]); - }); - } - } else { - flattened.push([fieldName, fieldValue]); - } +import { + FieldValue, + NestedFieldValue, + ResultMeta, + SimpleFieldValue, + Snippet, +} from '../../components/result/types'; - return flattened; -}; - -/* This method flattens documents returned from the ent-search backend. - * Example document: - * { - * id: { raw: '123' }, - * _meta: { engine: 'Test', id: '1' }, - * title: { raw: 'Getty Museum' }, - * address: { city: { raw: 'Los Angeles' }, state: { raw: 'California' } }, - * } - * Will be transformed to: - * { - * id: { raw: '123' }, - * _meta: { engine: 'Test', id: '1' }, - * title: { raw: 'Getty Museum' }, - * 'address.city': { raw: 'Los Angeles' }, - * 'address.state': { raw: 'California' }, - * } - */ -export const flattenDocument = (result: object): object => { - const flattened: { [index: string]: object } = {}; - - for (const [key, value] of Object.entries(result)) { - if (key === 'id' || key === '_meta') { - flattened[key] = value; - } else { - for (const [flatName, flatValue] of flattenDocumentField(key, value)) { - flattened[flatName] = flatValue; +interface SearchApiWrappedFieldValue { + raw?: SimpleFieldValue; + snippet?: Snippet; +} +type SearchApiNestedFieldValue = + | { [key: string]: SearchApiNestedFieldValue | SearchApiWrappedFieldValue } + | SearchApiNestedFieldValue[]; +type SearchApiFieldValue = ResultMeta | SearchApiWrappedFieldValue | SearchApiNestedFieldValue; + +function isResultMeta(fieldName: string, _: SearchApiFieldValue): _ is ResultMeta { + return fieldName === '_meta'; +} + +function isFieldValueWrapper( + fieldValue: SearchApiFieldValue +): fieldValue is SearchApiWrappedFieldValue { + return ( + fieldValue && + Object.entries(fieldValue).reduce((isValueWrapper: boolean, [k, v]) => { + if (k !== 'raw' && k !== 'snippet') { + return false; } - } + + if (v === null) { + return isValueWrapper; + } + + return (Array.isArray(v) ? v : [v]).reduce((isScalar, currentValue) => { + return isScalar && currentValue !== null && typeof currentValue !== 'object'; + }, isValueWrapper); + }, true) + ); +} + +function isNestedFieldValue( + fieldValue: SearchApiFieldValue +): fieldValue is SearchApiNestedFieldValue { + if (Array.isArray(fieldValue)) { + return fieldValue.reduce( + (isNested: boolean, current) => isNested || isNestedFieldValue(current), + false + ); + } + + return fieldValue != null && typeof fieldValue === 'object' && !isFieldValueWrapper(fieldValue); +} + +function formatNestedFieldValue( + fieldValue: SearchApiNestedFieldValue | SearchApiWrappedFieldValue +): NestedFieldValue { + if (Array.isArray(fieldValue)) { + return fieldValue.map(formatNestedFieldValue); + } + + if (fieldValue !== null && typeof fieldValue === 'object') { + return Object.entries(fieldValue).reduce( + (formattedFieldValue, [nestedFieldName, currentValue]) => { + return { + ...formattedFieldValue, + [nestedFieldName]: isFieldValueWrapper(currentValue) + ? currentValue.raw + : formatNestedFieldValue(currentValue), + }; + }, + {} + ); } - return flattened; -}; + return fieldValue; +} + +export function formatResult( + result: Record +): Record { + return Object.entries(result).reduce((acc, [fieldName, fieldValue]) => { + if (!isResultMeta(fieldName, fieldValue) && isNestedFieldValue(fieldValue)) { + return { ...acc, [fieldName]: { raw: formatNestedFieldValue(fieldValue) } }; + } + + return { ...acc, [fieldName]: fieldValue }; + }, {}); +} + +export function formatResultWithoutMeta( + result: Record +): Record { + return Object.entries(result).reduce((acc, [fieldName, fieldValue]) => { + if (isResultMeta(fieldName, fieldValue)) { + return { ...acc }; + } + + if (isNestedFieldValue(fieldValue)) { + return { ...acc, [fieldName]: { raw: formatNestedFieldValue(fieldValue) } }; + } + + return { ...acc, [fieldName]: fieldValue }; + }, {}); +} From dec18895eb8942fccc7f23909b3db1b2b1766ba2 Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Wed, 13 Jul 2022 11:47:48 -0400 Subject: [PATCH 13/96] [RAM] remove schedule_snooze from public api (#136142) * remove schedule_snooze form public api * went too fast * fix api integration test II * fix test to remove all snoozeSchdule III * fix legacy api integration for find Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../alerting/server/rules_client/rules_client.ts | 2 +- .../alerting/server/rules_client/tests/create.test.ts | 5 ----- .../group1/tests/alerting/create.ts | 1 - .../security_and_spaces/group1/tests/alerting/find.ts | 10 ++++++---- .../security_and_spaces/group1/tests/alerting/get.ts | 2 +- .../group2/tests/alerting/mute_all.ts | 4 ---- .../group2/tests/alerting/unmute_all.ts | 4 ---- .../group2/tests/alerting/update.ts | 5 ----- .../spaces_only/tests/alerting/create.ts | 3 --- .../spaces_only/tests/alerting/find.ts | 6 +++--- .../spaces_only/tests/alerting/get.ts | 2 -- .../spaces_only/tests/alerting/mute_all.ts | 2 -- .../spaces_only/tests/alerting/unmute_all.ts | 2 -- .../spaces_only/tests/alerting/update.ts | 2 -- 14 files changed, 11 insertions(+), 39 deletions(-) diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index 02ff3d469f585..0a60fa24611aa 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -2696,7 +2696,7 @@ export class RulesClient { ...(s.rRule.until ? { until: new Date(s.rRule.until) } : {}), }, })); - const includeSnoozeSchedule = snoozeSchedule !== undefined; + const includeSnoozeSchedule = snoozeSchedule !== undefined && !excludeFromPublicApi; const rule = { id, notifyWhen, diff --git a/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts index f5c839c5006fd..37059924533b2 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts @@ -376,7 +376,6 @@ describe('create()', () => { "interval": "1m", }, "scheduledTaskId": "task-123", - "snoozeSchedule": Array [], "tags": Array [ "foo", ], @@ -1645,7 +1644,6 @@ describe('create()', () => { "interval": "1m", }, "scheduledTaskId": "task-123", - "snoozeSchedule": Array [], "tags": Array [ "foo", ], @@ -1779,7 +1777,6 @@ describe('create()', () => { "interval": "1m", }, "scheduledTaskId": "task-123", - "snoozeSchedule": Array [], "tags": Array [ "foo", ], @@ -1913,7 +1910,6 @@ describe('create()', () => { "interval": "1m", }, "scheduledTaskId": "task-123", - "snoozeSchedule": Array [], "tags": Array [ "foo", ], @@ -2079,7 +2075,6 @@ describe('create()', () => { "interval": "10s", }, "scheduledTaskId": "task-123", - "snoozeSchedule": Array [], "tags": Array [ "foo", ], diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts index 2d3829f42a678..e601c6ee15ec7 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts @@ -115,7 +115,6 @@ export default function createAlertTests({ getService }: FtrProviderContext) { created_by: user.username, schedule: { interval: '1m' }, scheduled_task_id: response.body.scheduled_task_id, - snooze_schedule: response.body.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, throttle: '1m', diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts index 177e51ab78eea..de51e6ad86118 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/find.ts @@ -73,7 +73,6 @@ const findTestUtils = ( params: {}, created_by: 'elastic', scheduled_task_id: match.scheduled_task_id, - snooze_schedule: match.snooze_schedule, created_at: match.created_at, updated_at: match.updated_at, throttle: '1m', @@ -83,7 +82,9 @@ const findTestUtils = ( mute_all: false, muted_alert_ids: [], execution_status: match.execution_status, - ...(describeType === 'internal' ? { monitoring: match.monitoring } : {}), + ...(describeType === 'internal' + ? { monitoring: match.monitoring, snooze_schedule: match.snooze_schedule } + : {}), }); expect(Date.parse(match.created_at)).to.be.greaterThan(0); expect(Date.parse(match.updated_at)).to.be.greaterThan(0); @@ -282,8 +283,9 @@ const findTestUtils = ( created_at: match.created_at, updated_at: match.updated_at, execution_status: match.execution_status, - snooze_schedule: match.snooze_schedule, - ...(describeType === 'internal' ? { monitoring: match.monitoring } : {}), + ...(describeType === 'internal' + ? { monitoring: match.monitoring, snooze_schedule: match.snooze_schedule } + : {}), }); expect(Date.parse(match.created_at)).to.be.greaterThan(0); expect(Date.parse(match.updated_at)).to.be.greaterThan(0); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts index c2c94af19b209..2752707843c0d 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts @@ -72,7 +72,6 @@ const getTestUtils = ( params: {}, created_by: 'elastic', scheduled_task_id: response.body.scheduled_task_id, - snooze_schedule: response.body.snooze_schedule, updated_at: response.body.updated_at, created_at: response.body.created_at, throttle: '1m', @@ -85,6 +84,7 @@ const getTestUtils = ( ...(describeType === 'internal' ? { monitoring: response.body.monitoring, + snooze_schedule: response.body.snooze_schedule, } : {}), }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts index f0ce5962de368..ca3570a511d17 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts @@ -99,7 +99,6 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -156,7 +155,6 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -224,7 +222,6 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -292,7 +289,6 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts index 9c918b3225f9e..b4576650c58c8 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts @@ -104,7 +104,6 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -166,7 +165,6 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -239,7 +237,6 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, @@ -312,7 +309,6 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex .auth(user.username, user.password) .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts index d28b81f479b11..c49fa62c606b6 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts @@ -129,7 +129,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { }, ], scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, @@ -214,7 +213,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { mute_all: false, muted_alert_ids: [], scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, @@ -310,7 +308,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { mute_all: false, muted_alert_ids: [], scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, @@ -406,7 +403,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { mute_all: false, muted_alert_ids: [], scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, @@ -500,7 +496,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { mute_all: false, muted_alert_ids: [], scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts index a33f7fc5a1a2c..143d845d074c4 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts @@ -85,7 +85,6 @@ export default function createAlertTests({ getService }: FtrProviderContext) { created_by: null, schedule: { interval: '1m' }, scheduled_task_id: response.body.scheduled_task_id, - snooze_schedule: response.body.snooze_schedule, updated_by: null, api_key_owner: null, throttle: '1m', @@ -181,7 +180,6 @@ export default function createAlertTests({ getService }: FtrProviderContext) { created_by: null, schedule: { interval: '1m' }, scheduled_task_id: response.body.scheduled_task_id, - snooze_schedule: response.body.snooze_schedule, updated_by: null, api_key_owner: null, throttle: '1m', @@ -477,7 +475,6 @@ export default function createAlertTests({ getService }: FtrProviderContext) { createdBy: null, schedule: { interval: '1m' }, scheduledTaskId: response.body.scheduledTaskId, - snoozeSchedule: response.body.snoozeSchedule, updatedBy: null, apiKeyOwner: null, throttle: '1m', diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts index 021a2be1ebb5d..3162540538ff2 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts @@ -64,7 +64,6 @@ const findTestUtils = ( created_by: null, api_key_owner: null, scheduled_task_id: match.scheduled_task_id, - snooze_schedule: match.snooze_schedule, updated_by: null, throttle: '1m', notify_when: 'onThrottleInterval', @@ -73,7 +72,9 @@ const findTestUtils = ( created_at: match.created_at, updated_at: match.updated_at, execution_status: match.execution_status, - ...(describeType === 'internal' ? { monitoring: match.monitoring } : {}), + ...(describeType === 'internal' + ? { monitoring: match.monitoring, snooze_schedule: match.snooze_schedule } + : {}), }); expect(Date.parse(match.created_at)).to.be.greaterThan(0); expect(Date.parse(match.updated_at)).to.be.greaterThan(0); @@ -295,7 +296,6 @@ export default function createFindTests({ getService }: FtrProviderContext) { createdBy: null, apiKeyOwner: null, scheduledTaskId: match.scheduledTaskId, - snoozeSchedule: match.snoozeSchedule, updatedBy: null, throttle: '1m', notifyWhen: 'onThrottleInterval', diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts index ee993c425fa38..d97eb3e2054b4 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts @@ -45,7 +45,6 @@ const getTestUtils = ( params: {}, created_by: null, scheduled_task_id: response.body.scheduled_task_id, - snooze_schedule: response.body.snooze_schedule, updated_by: null, api_key_owner: null, throttle: '1m', @@ -137,7 +136,6 @@ export default function createGetTests({ getService }: FtrProviderContext) { params: {}, createdBy: null, scheduledTaskId: response.body.scheduledTaskId, - snoozeSchedule: response.body.snoozeSchedule, updatedBy: null, apiKeyOwner: null, throttle: '1m', diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/mute_all.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/mute_all.ts index a56b95ed09219..3fe13f8debe25 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/mute_all.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/mute_all.ts @@ -41,7 +41,6 @@ export default function createMuteTests({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ supertest: supertestWithoutAuth, @@ -70,7 +69,6 @@ export default function createMuteTests({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .expect(200); expect(updatedAlert.mute_all).to.eql(true); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/unmute_all.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/unmute_all.ts index 62ff63052f841..47f61250157a3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/unmute_all.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/unmute_all.ts @@ -42,7 +42,6 @@ export default function createUnmuteTests({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ @@ -76,7 +75,6 @@ export default function createUnmuteTests({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .expect(200); expect(updatedAlert.mute_all).to.eql(false); - expect(updatedAlert.snooze_schedule.length).to.eql(0); // Ensure AAD isn't broken await checkAAD({ diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts index c431654f0fd20..c5a9c93d45e81 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts @@ -60,7 +60,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { muted_alert_ids: [], notify_when: 'onThrottleInterval', scheduled_task_id: createdAlert.scheduled_task_id, - snooze_schedule: createdAlert.snooze_schedule, created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, @@ -161,7 +160,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { mutedInstanceIds: [], notifyWhen: 'onThrottleInterval', scheduledTaskId: createdAlert.scheduled_task_id, - snoozeSchedule: createdAlert.snooze_schedule, createdAt: response.body.createdAt, updatedAt: response.body.updatedAt, executionStatus: response.body.executionStatus, From ca2d1d6975bb413ade72ce10127651490d0660a6 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 13 Jul 2022 08:55:06 -0700 Subject: [PATCH 14/96] [DataViews] Remove some usage of `any` (#135767) * fix editor warning * use UrlFormatEditorFormatParams * remove unnecessary any * remove any from FieldFormatEditorFactory * remove usage of any from src/plugins/data_view_field_editor * remove usage of any from data_views/server/fetcher * fix ts * fix more ts * back off changes in src/plugins/data_views/server/fetcher/ * pretty * remove some unknown * pretty * fix ts * retain null-ability * fix lint * fix test * cleanup * fixes in FieldFormatEditorFactory * cleanup * fix FieldFormatEditorStart * revert functional diff * knock out a few small any * fix lint * set up generic FieldFormatParams, SerializedFieldFormat, FormatFactory * revert comment * fix mistake * use FormatEditorServiceSetup, FormatEditorServiceStart * make defaultFieldFormatEditorFactories more type safe * simplify types * type fixes * roll back re-leveling of fieldFormatEditors * review feedback item * public api correction Co-authored-by: Matt Kime Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../3_creating_custom_format_editor.tsx | 8 ++--- .../public/lib/get_indices.ts | 30 ------------------- .../editors/bytes/index.ts | 3 +- .../editors/color/color.tsx | 6 ++-- .../editors/color/index.ts | 6 ++-- .../field_format_editor/editors/date/date.tsx | 2 +- .../field_format_editor/editors/date/index.ts | 3 +- .../editors/date_nanos/date_nanos.tsx | 2 +- .../editors/date_nanos/index.ts | 6 ++-- .../editors/default/default.tsx | 7 ++--- .../editors/duration/duration.tsx | 10 ++++--- .../editors/duration/index.tsx | 6 ++-- .../editors/geo_point/geo_point.tsx | 2 +- .../editors/geo_point/index.ts | 6 ++-- .../editors/histogram/histogram.tsx | 2 +- .../editors/histogram/index.ts | 6 ++-- .../field_format_editor/editors/index.ts | 7 +++-- .../editors/number/index.ts | 3 +- .../editors/percent/index.ts | 3 +- .../editors/static_lookup/index.ts | 6 ++-- .../editors/static_lookup/static_lookup.tsx | 7 ++++- .../editors/string/index.ts | 6 ++-- .../editors/string/string.tsx | 2 +- .../editors/truncate/index.ts | 6 ++-- .../editors/truncate/truncate.tsx | 6 ++-- .../field_format_editor/editors/types.ts | 6 ++-- .../field_format_editor/editors/url/index.ts | 5 ++-- .../editors/url/url.test.tsx | 7 +++-- .../field_format_editor/editors/url/url.tsx | 17 +++++------ .../field_format_editor.tsx | 22 +++++++------- .../field_format_editor/format_editor.tsx | 19 +++++++----- .../data_view_field_editor/public/index.ts | 1 + .../data_view_field_editor/public/lib/api.ts | 2 +- .../field_format_editors.ts | 13 +++++--- .../public/service/format_editor_service.ts | 19 +++++++++--- .../indexed_fields_table.tsx | 12 ++++---- .../components/table/table.tsx | 4 +-- .../source_filters_table.tsx | 8 ++--- .../edit_index_pattern/tabs/tabs.tsx | 10 ++++--- .../field_format_editor.test.tsx | 17 +++++------ .../field_format_editor.tsx | 21 +++++++------ .../components/scripting_help/test_script.tsx | 2 +- .../components/field_editor/field_editor.tsx | 25 +++++++++++----- .../public/components/field_editor/types.ts | 5 ++-- .../data_views/server/routes/fields_for.ts | 7 +++-- .../saved_objects/index_pattern_migrations.ts | 14 ++++++--- src/plugins/field_formats/common/types.ts | 9 ++++-- 47 files changed, 217 insertions(+), 179 deletions(-) diff --git a/examples/field_formats_example/public/examples/3_creating_custom_format_editor.tsx b/examples/field_formats_example/public/examples/3_creating_custom_format_editor.tsx index 037063b042ce9..3239839ba1338 100644 --- a/examples/field_formats_example/public/examples/3_creating_custom_format_editor.tsx +++ b/examples/field_formats_example/public/examples/3_creating_custom_format_editor.tsx @@ -41,12 +41,12 @@ const ExampleCurrencyFormatEditor: FieldFormatEditor<{ currency: string }> = (pr ExampleCurrencyFormatEditor.formatId = ExampleCurrencyFormat.id; // 3. Wrap editor component in a factory. This is needed to support and encourage code-splitting. -const ExampleCurrencyFormatEditorFactory: FieldFormatEditorFactory<{ - currency: string; -}> = async () => ExampleCurrencyFormatEditor; +const ExampleCurrencyFormatEditorFactory = async () => ExampleCurrencyFormatEditor; ExampleCurrencyFormatEditorFactory.formatId = ExampleCurrencyFormatEditor.formatId; export function registerExampleFormatEditor(indexPatternFieldEditor: IndexPatternFieldEditorSetup) { // 4. Register a field editor. This should happen in setup plugin lifecycle phase. - indexPatternFieldEditor.fieldFormatEditors.register(ExampleCurrencyFormatEditorFactory); + indexPatternFieldEditor.fieldFormatEditors.register( + ExampleCurrencyFormatEditorFactory as FieldFormatEditorFactory + ); } diff --git a/src/plugins/data_view_editor/public/lib/get_indices.ts b/src/plugins/data_view_editor/public/lib/get_indices.ts index 0ddd75fa688be..83b64916cdae9 100644 --- a/src/plugins/data_view_editor/public/lib/get_indices.ts +++ b/src/plugins/data_view_editor/public/lib/get_indices.ts @@ -9,7 +9,6 @@ import { sortBy } from 'lodash'; import { HttpStart } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; -import { IEsSearchResponse } from '@kbn/data-plugin/public'; import { Tag, INDEX_PATTERN_TYPE } from '../types'; import { MatchedItem, ResolveIndexResponse, ResolveIndexResponseItemIndexAttrs } from '../types'; @@ -41,35 +40,6 @@ const getIndexTags = (isRollupIndex: (indexName: string) => boolean) => (indexNa ] : []; -export const searchResponseToArray = - (getTags: (indexName: string) => Tag[], showAllIndices: boolean) => - (response: IEsSearchResponse) => { - const { rawResponse } = response; - if (!rawResponse.aggregations) { - return []; - } else { - // @ts-expect-error @elastic/elasticsearch no way to declare a type for aggregation in the search response - return rawResponse.aggregations.indices.buckets - .map((bucket: { key: string }) => { - return bucket.key; - }) - .filter((indexName: string) => { - if (showAllIndices) { - return true; - } else { - return !indexName.startsWith('.'); - } - }) - .map((indexName: string) => { - return { - name: indexName, - tags: getTags(indexName), - item: {}, - }; - }); - } - }; - export const getIndicesViaResolve = async ({ http, pattern, diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/bytes/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/bytes/index.ts index 5d631e22a8890..9968cba5020c0 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/bytes/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/bytes/index.ts @@ -7,8 +7,9 @@ */ import { formatId } from './constants'; import { FieldFormatEditorFactory } from '../types'; +import { NumberFormatEditorParams } from '../number/number'; export type { BytesFormatEditor } from './bytes'; -export const bytesFormatEditorFactory: FieldFormatEditorFactory = () => +export const bytesFormatEditorFactory: FieldFormatEditorFactory = () => import('./bytes').then((m) => m.BytesFormatEditor); bytesFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/color.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/color.tsx index 8418f24bd443f..c7af24fc772e8 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/color.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/color.tsx @@ -29,7 +29,7 @@ interface IndexedColor extends Color { index: number; } -interface ColorFormatEditorFormatParams { +export interface ColorFormatEditorFormatParams { colors: Color[]; } @@ -38,8 +38,8 @@ export class ColorFormatEditor extends DefaultFormatEditor) { super(props); this.onChange({ - fieldType: props.fieldType, - }); + fieldType: props.fieldType, // FIXME: why add `fieldType` as an EditorFormatParam? + } as unknown as ColorFormatEditorFormatParams); } onColorChange = (newColorParams: Partial, index: number) => { diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/index.ts index b6cadb8aae43b..5b49cbfc57398 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/color/index.ts @@ -7,9 +7,11 @@ */ import { FieldFormatEditorFactory } from '../types'; +import { ColorFormatEditorFormatParams } from './color'; import { formatId } from './constants'; export type { ColorFormatEditor } from './color'; -export const colorFormatEditorFactory: FieldFormatEditorFactory = () => - import('./color').then((m) => m.ColorFormatEditor); +export const colorFormatEditorFactory: FieldFormatEditorFactory< + ColorFormatEditorFormatParams +> = () => import('./color').then((m) => m.ColorFormatEditor); colorFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/date.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/date.tsx index fdf0291f0fa4d..ed294c980d85d 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/date.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/date.tsx @@ -17,7 +17,7 @@ import { formatId } from './constants'; import { FormatEditorSamples } from '../../samples'; -interface DateFormatEditorFormatParams { +export interface DateFormatEditorFormatParams { pattern: string; } diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/index.ts index 9fb47b285f669..2f4a14eee3696 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date/index.ts @@ -8,8 +8,9 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { DateFormatEditorFormatParams } from './date'; export type { DateFormatEditor } from './date'; -export const dateFormatEditorFactory: FieldFormatEditorFactory = () => +export const dateFormatEditorFactory: FieldFormatEditorFactory = () => import('./date').then((m) => m.DateFormatEditor); dateFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/date_nanos.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/date_nanos.tsx index 468263fcdfc38..24b20f2351f01 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/date_nanos.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/date_nanos.tsx @@ -16,7 +16,7 @@ import { formatId } from './constants'; import { FormatEditorSamples } from '../../samples'; -interface DateNanosFormatEditorFormatParams { +export interface DateNanosFormatEditorFormatParams { pattern: string; } diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/index.ts index ade21b27f60ef..3102ae326670f 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/date_nanos/index.ts @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { DateNanosFormatEditorFormatParams } from './date_nanos'; export type { DateNanosFormatEditor } from './date_nanos'; -export const dateNanosFormatEditorFactory: FieldFormatEditorFactory = () => - import('./date_nanos').then((m) => m.DateNanosFormatEditor); +export const dateNanosFormatEditorFactory: FieldFormatEditorFactory< + DateNanosFormatEditorFormatParams +> = () => import('./date_nanos').then((m) => m.DateNanosFormatEditor); dateNanosFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx index a3a71becb3ef3..30ef104df9b5f 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx @@ -6,10 +6,9 @@ * Side Public License, v 1. */ -import React, { PureComponent, ReactText } from 'react'; -import { i18n } from '@kbn/i18n'; - import type { FieldFormatsContentType } from '@kbn/field-formats-plugin/common'; +import { i18n } from '@kbn/i18n'; +import React, { PureComponent, ReactText } from 'react'; import type { Sample, SampleInput } from '../../types'; import type { FormatEditorProps } from '../types'; import { formatId } from './constants'; @@ -80,7 +79,7 @@ export class DefaultFormatEditor

extends PureComponent< return output; } - onChange = (newParams = {}) => { + onChange = (newParams = {} as Partial['formatParams']>) => { const { onChange, formatParams } = this.props; onChange({ diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/duration.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/duration.tsx index 8b8864622ffc2..f1a6f8089f70d 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/duration.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/duration.tsx @@ -33,8 +33,8 @@ interface OutputFormat { text: string; } -interface DurationFormatEditorFormatParams { - outputPrecision: number; +export interface DurationFormatEditorFormatParams { + outputPrecision: number | null; inputFormat: string; outputFormat: string; showSuffix?: boolean; @@ -60,9 +60,11 @@ export class DurationFormatEditor extends DefaultFormatEditor< const output = super.getDerivedStateFromProps(nextProps, state); let error = null; + const { outputPrecision } = nextProps.formatParams; if ( !(nextProps.format as DurationFormat).isHuman() && - nextProps.formatParams.outputPrecision > 20 + outputPrecision != null && + outputPrecision > 20 ) { error = i18n.translate('indexPatternFieldEditor.durationErrorMessage', { defaultMessage: 'Decimal places must be between 0 and 20', @@ -156,7 +158,7 @@ export class DurationFormatEditor extends DefaultFormatEditor< error={hasDecimalError ? error : null} > { diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/index.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/index.tsx index 8e489fbb2a464..40163675aa16f 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/index.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/duration/index.tsx @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { DurationFormatEditorFormatParams } from './duration'; export type { DurationFormatEditor } from './duration'; -export const durationFormatEditorFactory: FieldFormatEditorFactory = () => - import('./duration').then((m) => m.DurationFormatEditor); +export const durationFormatEditorFactory: FieldFormatEditorFactory< + DurationFormatEditorFormatParams +> = () => import('./duration').then((m) => m.DurationFormatEditor); durationFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/geo_point.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/geo_point.tsx index a9460b7e045ca..bf49318e8d62f 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/geo_point.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/geo_point.tsx @@ -17,7 +17,7 @@ import { DefaultFormatEditor, defaultState } from '../default/default'; import { FormatEditorSamples } from '../../samples'; import { formatId } from './constants'; -interface GeoPointFormatEditorFormatParams { +export interface GeoPointFormatEditorFormatParams { transform: string; } diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/index.ts index c7eddd167ba91..525157a231126 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/geo_point/index.ts @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { GeoPointFormatEditorFormatParams } from './geo_point'; export type { GeoPointFormatEditor } from './geo_point'; -export const geoPointFormatEditorFactory: FieldFormatEditorFactory = () => - import('./geo_point').then((m) => m.GeoPointFormatEditor); +export const geoPointFormatEditorFactory: FieldFormatEditorFactory< + GeoPointFormatEditorFormatParams +> = () => import('./geo_point').then((m) => m.GeoPointFormatEditor); geoPointFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/histogram.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/histogram.tsx index ee99c03279aed..7caa0d4429803 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/histogram.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/histogram.tsx @@ -67,7 +67,7 @@ export class HistogramFormatEditor extends DefaultFormatEditor { - this.onChange({ id: e.target.value }); + this.onChange({ id: e.target.value as HistogramFormatEditorParams['id'] }); }} /> diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/index.ts index 071581893f9d9..b66047b65fce9 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/histogram/index.ts @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { HistogramFormatEditorParams } from './histogram'; export type { HistogramFormatEditor } from './histogram'; -export const histogramFormatEditorFactory: FieldFormatEditorFactory = () => - import('./histogram').then((m) => m.HistogramFormatEditor); +export const histogramFormatEditorFactory: FieldFormatEditorFactory< + HistogramFormatEditorParams +> = () => import('./histogram').then((m) => m.HistogramFormatEditor); histogramFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/index.ts index 4d40544cf7c37..18ac46228d912 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/index.ts @@ -6,20 +6,21 @@ * Side Public License, v 1. */ +export type { DefaultFormatEditor } from './default'; export type { FieldFormatEditor, FieldFormatEditorFactory, FormatEditorProps } from './types'; - -export { DefaultFormatEditor, defaultFormatEditorFactory } from './default'; +export type { UrlFormatEditorFormatParams } from './url'; export { BytesFormatEditor, bytesFormatEditorFactory } from './bytes'; export { ColorFormatEditor, colorFormatEditorFactory } from './color'; export { DateFormatEditor, dateFormatEditorFactory } from './date'; export { DateNanosFormatEditor, dateNanosFormatEditorFactory } from './date_nanos'; +export { defaultFormatEditorFactory } from './default'; export { DurationFormatEditor, durationFormatEditorFactory } from './duration'; export { GeoPointFormatEditor, geoPointFormatEditorFactory } from './geo_point'; +export { HistogramFormatEditor, histogramFormatEditorFactory } from './histogram'; export { NumberFormatEditor, numberFormatEditorFactory } from './number'; export { PercentFormatEditor, percentFormatEditorFactory } from './percent'; export { StaticLookupFormatEditor, staticLookupFormatEditorFactory } from './static_lookup'; export { StringFormatEditor, stringFormatEditorFactory } from './string'; export { TruncateFormatEditor, truncateFormatEditorFactory } from './truncate'; export { UrlFormatEditor, urlFormatEditorFactory } from './url'; -export { HistogramFormatEditor, histogramFormatEditorFactory } from './histogram'; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/number/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/number/index.ts index 7589c7b89c01b..6d0dda6170cdb 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/number/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/number/index.ts @@ -8,8 +8,9 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { NumberFormatEditorParams } from './number'; export type { NumberFormatEditor } from './number'; -export const numberFormatEditorFactory: FieldFormatEditorFactory = () => +export const numberFormatEditorFactory: FieldFormatEditorFactory = () => import('./number').then((m) => m.NumberFormatEditor); numberFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/percent/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/percent/index.ts index 5fd8871f2798b..e8ecc81ba20dc 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/percent/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/percent/index.ts @@ -6,10 +6,11 @@ * Side Public License, v 1. */ +import { NumberFormatEditorParams } from '../number/number'; import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; export type { PercentFormatEditor } from './percent'; -export const percentFormatEditorFactory: FieldFormatEditorFactory = () => +export const percentFormatEditorFactory: FieldFormatEditorFactory = () => import('./percent').then((m) => m.PercentFormatEditor); percentFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/index.ts index 325e132e9d791..db538ae81dd39 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/index.ts @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { StaticLookupFormatEditorFormatParams } from './static_lookup'; export type { StaticLookupFormatEditor } from './static_lookup'; -export const staticLookupFormatEditorFactory: FieldFormatEditorFactory = () => - import('./static_lookup').then((m) => m.StaticLookupFormatEditor); +export const staticLookupFormatEditorFactory: FieldFormatEditorFactory< + StaticLookupFormatEditorFormatParams +> = () => import('./static_lookup').then((m) => m.StaticLookupFormatEditor); staticLookupFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/static_lookup.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/static_lookup.tsx index 5b2402b240994..bb4c2a965f4ef 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/static_lookup.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/static_lookup/static_lookup.tsx @@ -20,6 +20,11 @@ export interface StaticLookupFormatEditorFormatParams { unknownKeyValue: string; } +interface LookupItem { + key: string; + value: string; +} + interface StaticLookupItem { key: string; value: string; @@ -42,7 +47,7 @@ export class StaticLookupFormatEditor extends DefaultFormatEditor { const lookupEntries = [...(this.props.formatParams.lookupEntries || [])]; this.onChange({ - lookupEntries: [...lookupEntries, {}], + lookupEntries: [...lookupEntries, {} as LookupItem], }); }; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/index.ts index 194b2444c5576..001f6478d3bfc 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/index.ts @@ -8,8 +8,10 @@ import { FieldFormatEditorFactory } from '../types'; import { formatId } from './constants'; +import { StringFormatEditorFormatParams } from './string'; export type { StringFormatEditor } from './string'; -export const stringFormatEditorFactory: FieldFormatEditorFactory = () => - import('./string').then((m) => m.StringFormatEditor); +export const stringFormatEditorFactory: FieldFormatEditorFactory< + StringFormatEditorFormatParams +> = () => import('./string').then((m) => m.StringFormatEditor); stringFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/string.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/string.tsx index 21e48130a73d9..cf708283b94aa 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/string.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/string/string.tsx @@ -17,7 +17,7 @@ import { DefaultFormatEditor, defaultState } from '../default/default'; import { FormatEditorSamples } from '../../samples'; import { formatId } from './constants'; -interface StringFormatEditorFormatParams { +export interface StringFormatEditorFormatParams { transform: string; } diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/index.ts index 2b0cfda4dcab3..d00da9413e0d4 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/index.ts @@ -8,8 +8,10 @@ import { formatId } from './constants'; import { FieldFormatEditorFactory } from '../types'; +import { TruncateFormatEditorFormatParams } from './truncate'; export type { TruncateFormatEditor } from './truncate'; -export const truncateFormatEditorFactory: FieldFormatEditorFactory = () => - import('./truncate').then((m) => m.TruncateFormatEditor); +export const truncateFormatEditorFactory: FieldFormatEditorFactory< + TruncateFormatEditorFormatParams +> = () => import('./truncate').then((m) => m.TruncateFormatEditor); truncateFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/truncate.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/truncate.tsx index 5dc87cd44651f..99436eaf8b680 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/truncate.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/truncate/truncate.tsx @@ -18,8 +18,8 @@ import { FormatEditorSamples } from '../../samples'; import { sample } from './sample'; import { formatId } from './constants'; -interface TruncateFormatEditorFormatParams { - fieldLength: number; +export interface TruncateFormatEditorFormatParams { + fieldLength: number | null; } export class TruncateFormatEditor extends DefaultFormatEditor { @@ -46,7 +46,7 @@ export class TruncateFormatEditor extends DefaultFormatEditor { diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts index ceb18914ebfc0..3d02bdf9e2681 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ +import type { FieldFormat, FieldFormatParams } from '@kbn/field-formats-plugin/common'; import type { ComponentType } from 'react'; -import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import type { FormatSelectEditorProps } from '../field_format_editor'; /** @@ -18,7 +18,7 @@ export interface FormatEditorProps

{ fieldType: string; format: FieldFormat; formatParams: { type?: string } & P; - onChange: (newParams: { [key: string]: any }) => void; + onChange: (newParams: FieldFormatParams) => void; onError: FormatSelectEditorProps['onError']; } @@ -34,7 +34,7 @@ export type FieldFormatEditor = ComponentType< * A factory for registering field format editor for a field format with `formatId` * @public */ -export type FieldFormatEditorFactory = (() => Promise< +export type FieldFormatEditorFactory = (() => Promise< FieldFormatEditor >) & { formatId: string; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/index.ts b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/index.ts index 6da051003554c..c83975f2a5c23 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/index.ts +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/index.ts @@ -7,9 +7,10 @@ */ import { formatId } from './constants'; import { FieldFormatEditorFactory } from '../types'; +import { UrlFormatEditorFormatParams } from './url'; -export type { UrlFormatEditor } from './url'; +export type { UrlFormatEditor, UrlFormatEditorFormatParams } from './url'; -export const urlFormatEditorFactory: FieldFormatEditorFactory = () => +export const urlFormatEditorFactory: FieldFormatEditorFactory = () => import('./url').then((m) => m.UrlFormatEditor); urlFormatEditorFactory.formatId = formatId; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/url.test.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/url.test.tsx index 8993e2a3185ce..4390d488e420a 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/url.test.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/url.test.tsx @@ -9,11 +9,12 @@ import React from 'react'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; -import { UrlFormatEditor } from './url'; +import { UrlFormatEditor, UrlFormatEditorFormatParams } from './url'; import { coreMock } from '@kbn/core/public/mocks'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { Serializable } from '@kbn/utility-types'; const fieldType = 'string'; const format = { @@ -28,7 +29,7 @@ const format = { ], }, } as unknown as FieldFormat; -const formatParams = { +const formatParams: UrlFormatEditorFormatParams = { openLinkInCurrentTab: true, urlTemplate: '', labelTemplate: '', @@ -85,7 +86,7 @@ describe('UrlFormatEditor', () => { }); it('should append base path to preview images', async () => { - let sampleImageUrlTemplate = ''; + let sampleImageUrlTemplate: Serializable = ''; const { getByLabelText } = renderWithContext( + onFormatChange = (formatId: string, params?: FieldFormatParams) => this.props.onChange( formatId ? { @@ -98,7 +96,7 @@ export class FormatSelectEditor extends PureComponent< : undefined ); - onFormatParamsChange = (newParams: { [key: string]: any }) => { + onFormatParamsChange = (newParams: FieldFormatParams) => { const { fieldFormatId } = this.state; this.onFormatChange(fieldFormatId as string, newParams); }; diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/format_editor.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/format_editor.tsx index 2fcaa3420848a..4211047878cca 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/format_editor.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/format_editor.tsx @@ -7,18 +7,19 @@ */ import { EuiDelayRender, EuiLoadingContent } from '@elastic/eui'; +import type { FieldFormat, FieldFormatParams } from '@kbn/field-formats-plugin/common'; import { memoize } from 'lodash'; -import React, { PureComponent, LazyExoticComponent } from 'react'; -import type { FieldFormat } from '@kbn/field-formats-plugin/common'; -import { FieldFormatEditorFactory, FieldFormatEditor } from './editors'; +import React, { LazyExoticComponent, PureComponent } from 'react'; +import { FormatEditorServiceStart } from '../../service'; +import { FieldFormatEditor, FieldFormatEditorFactory } from './editors'; export interface FormatEditorProps { fieldType: string; fieldFormat: FieldFormat; fieldFormatId: string; - fieldFormatParams: { [key: string]: unknown }; - fieldFormatEditors: any; - onChange: (change: { [key: string]: any }) => void; + fieldFormatParams: FieldFormatParams; + fieldFormatEditors: FormatEditorServiceStart['fieldFormatEditors']; + onChange: (change: FieldFormatParams) => void; onError: (error?: string) => void; } @@ -39,13 +40,15 @@ export class FormatEditor extends PureComponent { index: string; context: PainlessExecuteContext; script: { source: string } | null; - document: Record; + document: Record; }) => { return sendRequest(httpClient, { path: `${API_BASE_PATH}/field_preview`, diff --git a/src/plugins/data_view_field_editor/public/service/field_format_editors/field_format_editors.ts b/src/plugins/data_view_field_editor/public/service/field_format_editors/field_format_editors.ts index 8e3b4691b9d91..ded7243c45668 100644 --- a/src/plugins/data_view_field_editor/public/service/field_format_editors/field_format_editors.ts +++ b/src/plugins/data_view_field_editor/public/service/field_format_editors/field_format_editors.ts @@ -7,11 +7,14 @@ */ import { FieldFormatEditorFactory } from '../../components/field_format_editor'; +import { FormatEditorServiceSetup, FormatEditorServiceStart } from '../format_editor_service'; export class FieldFormatEditors { private editors: FieldFormatEditorFactory[] = []; - public setup(defaultFieldEditors: FieldFormatEditorFactory[] = []) { + public setup( + defaultFieldEditors: FieldFormatEditorFactory[] = [] + ): FormatEditorServiceSetup['fieldFormatEditors'] { this.editors = defaultFieldEditors; return { @@ -21,11 +24,13 @@ export class FieldFormatEditors { }; } - public start() { + public start(): FormatEditorServiceStart['fieldFormatEditors'] { return { getAll: () => [...this.editors], - getById: (id: string) => { - return this.editors.find((editor) => editor.formatId === id); + getById:

(id: string) => { + return this.editors.find((editor) => editor.formatId === id) as + | FieldFormatEditorFactory

+ | undefined; }, }; } diff --git a/src/plugins/data_view_field_editor/public/service/format_editor_service.ts b/src/plugins/data_view_field_editor/public/service/format_editor_service.ts index 61458820bd79f..7d385aeaacd6f 100644 --- a/src/plugins/data_view_field_editor/public/service/format_editor_service.ts +++ b/src/plugins/data_view_field_editor/public/service/format_editor_service.ts @@ -38,7 +38,7 @@ export class FormatEditorService { } public setup() { - const defaultFieldFormatEditorFactories: FieldFormatEditorFactory[] = [ + const defaultFieldFormatEditorFactories = [ bytesFormatEditorFactory, colorFormatEditorFactory, dateFormatEditorFactory, @@ -52,7 +52,7 @@ export class FormatEditorService { truncateFormatEditorFactory, urlFormatEditorFactory, histogramFormatEditorFactory, - ]; + ] as FieldFormatEditorFactory[]; const fieldFormatEditorsSetup = this.fieldFormatEditors.setup( defaultFieldFormatEditorFactories @@ -75,5 +75,16 @@ export class FormatEditorService { } /** @internal */ -export type FormatEditorServiceSetup = ReturnType; -export type FormatEditorServiceStart = ReturnType; +export interface FormatEditorServiceSetup { + fieldFormatEditors: { + register: (editor: FieldFormatEditorFactory) => void; + }; +} + +/** @internal */ +export interface FormatEditorServiceStart { + fieldFormatEditors: { + getAll: () => FieldFormatEditorFactory[]; + getById:

(id: string) => FieldFormatEditorFactory

| undefined; + }; +} diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/indexed_fields_table.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/indexed_fields_table.tsx index d26b0726d7814..e4326439e574a 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/indexed_fields_table.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/indexed_fields_table.tsx @@ -24,7 +24,7 @@ interface IndexedFieldsTableProps { deleteField: (fieldName: string) => void; getFieldInfo: (indexPattern: DataView, field: DataViewField) => string[]; }; - fieldWildcardMatcher: (filters: any[]) => (val: any) => boolean; + fieldWildcardMatcher: (filters: string[] | undefined) => (val: string) => boolean; userEditPermission: boolean; openModal: OverlayStart['openModal']; theme: ThemeServiceStart; @@ -57,8 +57,7 @@ export class IndexedFieldsTable extends Component< mapFields(fields: DataViewField[]): IndexedFieldItem[] { const { indexPattern, fieldWildcardMatcher, helpers, userEditPermission } = this.props; const sourceFilters = - indexPattern.sourceFilters && - indexPattern.sourceFilters.map((f: Record) => f.value); + indexPattern.sourceFilters && indexPattern.sourceFilters.map((f) => f.value); const fieldWildcardMatch = fieldWildcardMatcher(sourceFilters || []); return ( @@ -83,10 +82,11 @@ export class IndexedFieldsTable extends Component< getFilteredFields = createSelector( (state: IndexedFieldsTableState) => state.fields, - (state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => props.fieldFilter, - (state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => + (_state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => props.fieldFilter, + (_state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => props.indexedFieldTypeFilter, - (state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => props.schemaFieldTypeFilter, + (_state: IndexedFieldsTableState, props: IndexedFieldsTableProps) => + props.schemaFieldTypeFilter, (fields, fieldFilter, indexedFieldTypeFilter, schemaFieldTypeFilter) => { if (fieldFilter) { const normalizedFieldFilter = fieldFilter.toLowerCase(); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx index 6030f653f9562..e4671a1fc11cf 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx @@ -73,7 +73,7 @@ export interface TableProps { items: SourceFiltersTableFilter[]; deleteFilter: Function; fieldWildcardMatcher: Function; - saveFilter: (filter: SourceFiltersTableFilter) => any; + saveFilter: (filter: SourceFiltersTableFilter) => void; isSaving: boolean; } @@ -150,7 +150,7 @@ export class Table extends Component { ]); const matches = indexPattern .getNonScriptedFields() - .map((currentFilter: any) => currentFilter.name) + .map((currentFilter) => currentFilter.name) .filter(wildcardMatcher) .sort(); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx index 3d3d167f732da..455371d6c5e2b 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/source_filters_table.tsx @@ -23,7 +23,7 @@ export interface SourceFiltersTableProps { } export interface SourceFiltersTableState { - filterToDelete: any; + filterToDelete: SourceFiltersTableFilter | undefined; isDeleteConfirmationModalVisible: boolean; isSaving: boolean; filters: SourceFiltersTableFilter[]; @@ -56,7 +56,7 @@ export class SourceFiltersTable extends Component< updateFilters = () => { const sourceFilters = this.props.indexPattern.sourceFilters; - const filters = (sourceFilters || []).map((sourceFilter: any) => ({ + const filters = (sourceFilters || []).map((sourceFilter) => ({ ...sourceFilter, clientId: ++this.clientSideId, })); @@ -66,7 +66,7 @@ export class SourceFiltersTable extends Component< getFilteredFilters = createSelector( (state: SourceFiltersTableState) => state.filters, - (state: SourceFiltersTableState, props: SourceFiltersTableProps) => props.filterFilter, + (_state: SourceFiltersTableState, props: SourceFiltersTableProps) => props.filterFilter, (filters, filterFilter) => { if (filterFilter) { const filterFilterToLowercase = filterFilter.toLowerCase(); @@ -98,7 +98,7 @@ export class SourceFiltersTable extends Component< const { filterToDelete, filters } = this.state; indexPattern.sourceFilters = filters.filter((filter) => { - return filter.clientId !== filterToDelete.clientId; + return filter.clientId !== filterToDelete?.clientId; }); this.setState({ isSaving: true }); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx index de4e455cd48af..a4b87110521d7 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/tabs.tsx @@ -141,7 +141,6 @@ export function Tabs({ saveIndexPattern, fields, history, - location, refreshFields, relationships, allowedTypes, @@ -158,7 +157,10 @@ export function Tabs({ savedObjectsManagement, } = useKibana().services; const [fieldFilter, setFieldFilter] = useState(''); - const [syncingStateFunc, setSyncingStateFunc] = useState({ + const [syncingStateFunc, setSyncingStateFunc] = useState<{ + getCurrentTab: () => string; + setCurrentTab?: (newTab: string) => { tab: string }; + }>({ getCurrentTab: () => TAB_INDEXED_FIELDS, }); const [scriptedFieldLanguageFilter, setScriptedFieldLanguageFilter] = useState([]); @@ -260,7 +262,7 @@ export function Tabs({ }, [closeFieldEditor]); const fieldWildcardMatcherDecorated = useCallback( - (filters: string[]) => fieldWildcardMatcher(filters, uiSettings.get(META_FIELDS)), + (filters: string[] | undefined) => fieldWildcardMatcher(filters, uiSettings.get(META_FIELDS)), [uiSettings] ); @@ -600,7 +602,7 @@ export function Tabs({ selectedTab={euiTabs.find((tab) => tab.id === selectedTabId)} onTabClick={(tab) => { setSelectedTabId(tab.id); - syncingStateFunc.setCurrentTab(tab.id); + syncingStateFunc.setCurrentTab?.(tab.id); }} /> ); diff --git a/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.test.tsx b/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.test.tsx index 89be237adac58..65cb1749e3459 100644 --- a/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.test.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.test.tsx @@ -6,11 +6,11 @@ * Side Public License, v 1. */ -import React, { PureComponent } from 'react'; +import { FormatEditorServiceStart } from '@kbn/data-view-field-editor-plugin/public/service'; +import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import { shallow } from 'enzyme'; - +import React, { PureComponent } from 'react'; import { FieldFormatEditor } from './field_format_editor'; -import type { FieldFormat } from '@kbn/field-formats-plugin/common'; class TestEditor extends PureComponent { render() { @@ -21,12 +21,11 @@ class TestEditor extends PureComponent { } } -const formatEditors = { - byFormatId: { - ip: TestEditor, - number: TestEditor, - }, - getById: jest.fn(() => () => Promise.resolve(TestEditor)), +const formatEditors: FormatEditorServiceStart['fieldFormatEditors'] = { + getById: jest.fn( + () => () => Promise.resolve(TestEditor) + ) as unknown as FormatEditorServiceStart['fieldFormatEditors']['getById'], + getAll: jest.fn(), }; describe('FieldFormatEditor', () => { diff --git a/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.tsx b/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.tsx index 0b0018629f02d..fe6ae3158a971 100644 --- a/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/components/field_format_editor/field_format_editor.tsx @@ -6,32 +6,35 @@ * Side Public License, v 1. */ -import React, { LazyExoticComponent, PureComponent } from 'react'; -import { memoize } from 'lodash'; import { EuiDelayRender, EuiLoadingContent } from '@elastic/eui'; import type { - FieldFormatEditorFactory, FieldFormatEditor as InnerFieldFormatEditor, + FieldFormatEditorFactory, } from '@kbn/data-view-field-editor-plugin/public'; -import type { FieldFormat } from '@kbn/field-formats-plugin/common'; +import { FormatEditorServiceStart } from '@kbn/data-view-field-editor-plugin/public'; +import type { FieldFormat, FieldFormatParams } from '@kbn/field-formats-plugin/common'; +import { memoize } from 'lodash'; +import React, { LazyExoticComponent, PureComponent } from 'react'; export interface FieldFormatEditorProps { fieldType: string; fieldFormat: FieldFormat; fieldFormatId: string; - fieldFormatParams: { [key: string]: unknown }; - fieldFormatEditors: any; - onChange: (change: { [key: string]: any }) => void; + fieldFormatParams: FieldFormatParams<{ type?: string }>; + fieldFormatEditors: FormatEditorServiceStart['fieldFormatEditors']; + onChange: (change: FieldFormatParams) => void; onError: (error?: string) => void; } interface FieldFormatEditorState { - EditorComponent: LazyExoticComponent | null; + EditorComponent: LazyExoticComponent> | null; } // use memoize to get stable reference const unwrapEditor = memoize( - (editorFactory: FieldFormatEditorFactory | null): FieldFormatEditorState['EditorComponent'] => { + ( + editorFactory: FieldFormatEditorFactory | undefined + ): FieldFormatEditorState['EditorComponent'] => { if (!editorFactory) return null; return React.lazy(() => editorFactory().then((editor) => ({ default: editor }))); } diff --git a/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx b/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx index 0eb0898f41b60..76df576033e39 100644 --- a/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx @@ -105,7 +105,7 @@ export class TestScript extends Component { this.setState({ isLoading: false, - previewData: scriptResponse.hits?.hits.map((hit: any) => ({ + previewData: scriptResponse.hits?.hits.map((hit) => ({ _id: hit._id, ...hit._source, ...hit.fields, diff --git a/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx b/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx index 460d0317b2323..a73f3fee90dda 100644 --- a/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx @@ -33,10 +33,19 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { PainlessLang } from '@kbn/monaco'; -import type { FieldFormatInstanceType, FieldFormatParams } from '@kbn/field-formats-plugin/common'; +import type { + FieldFormat, + FieldFormatInstanceType, + FieldFormatParams, +} from '@kbn/field-formats-plugin/common'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { KBN_FIELD_TYPES, ES_FIELD_TYPES } from '@kbn/field-types'; -import { DataView, DataViewField, DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { + DataView, + DataViewField, + DataViewsPublicPluginStart, + FieldSpec, +} from '@kbn/data-views-plugin/public'; import { context as contextType, CodeEditor } from '@kbn/kibana-react-plugin/public'; import { getEnabledScriptingLanguages, @@ -97,14 +106,14 @@ export interface FieldEditorState { fieldTypeFormats: FieldTypeFormat[]; existingFieldNames: string[]; fieldFormatId?: string; - fieldFormatParams: FieldFormatParams; + fieldFormatParams?: FieldFormatParams; showScriptingHelp: boolean; showDeleteModal: boolean; hasFormatError: boolean; hasScriptError: boolean; isSaving: boolean; errors?: string[]; - format: any; + format: FieldFormat; spec: DataViewField['spec']; customLabel: string; } @@ -196,9 +205,9 @@ export class FieldEditor extends PureComponent { + onFieldChange = (fieldName: keyof FieldSpec, value: string | number) => { const { spec } = this.state; - (spec as any)[fieldName] = value; + (spec[fieldName] as string | number) = value; this.forceUpdate(); }; @@ -227,7 +236,7 @@ export class FieldEditor extends PureComponent { + onFormatChange = (formatId: string, params?: FieldFormatParams) => { const { fieldTypeFormats } = this.state; const { uiSettings, fieldFormats } = this.context.services; @@ -244,7 +253,7 @@ export class FieldEditor extends PureComponent { + onFormatParamsChange = (newParams: FieldFormatParams) => { const { fieldFormatId } = this.state; this.onFormatChange(fieldFormatId as string, newParams); }; diff --git a/src/plugins/data_view_management/public/components/field_editor/types.ts b/src/plugins/data_view_management/public/components/field_editor/types.ts index 440833fa04809..8bce5a9f3c26d 100644 --- a/src/plugins/data_view_management/public/components/field_editor/types.ts +++ b/src/plugins/data_view_management/public/components/field_editor/types.ts @@ -9,6 +9,7 @@ import { ReactText } from 'react'; import { Query } from '@kbn/es-query'; import { HttpStart } from '@kbn/core/public'; +import { estypes } from '@elastic/elasticsearch'; export type SampleInput = ReactText | ReactText[] | Record; export interface Sample { @@ -27,8 +28,8 @@ export interface ExecuteScriptParams { export interface ExecuteScriptResult { status: number; - hits?: { hits: any[] }; - error?: any; + hits?: { hits: Array> }; + error?: unknown; } export type ExecuteScript = (params: ExecuteScriptParams) => Promise; diff --git a/src/plugins/data_views/server/routes/fields_for.ts b/src/plugins/data_views/server/routes/fields_for.ts index 3ad854ab0d6ac..60321c7185185 100644 --- a/src/plugins/data_views/server/routes/fields_for.ts +++ b/src/plugins/data_views/server/routes/fields_for.ts @@ -6,15 +6,16 @@ * Side Public License, v 1. */ +import { estypes } from '@elastic/elasticsearch'; import { schema } from '@kbn/config-schema'; import { IRouter, - StartServicesAccessor, RequestHandler, RouteValidatorFullConfig, + StartServicesAccessor, } from '@kbn/core/server'; -import type { DataViewsServerPluginStart, DataViewsServerPluginStartDependencies } from '../types'; import { IndexPatternsFetcher } from '../fetcher'; +import type { DataViewsServerPluginStart, DataViewsServerPluginStartDependencies } from '../types'; const parseMetaFields = (metaFields: string | string[]) => { let parsedFields: string[] = []; @@ -28,7 +29,7 @@ const parseMetaFields = (metaFields: string | string[]) => { const path = '/api/index_patterns/_fields_for_wildcard'; -type IBody = { index_filter?: any } | undefined; +type IBody = { index_filter?: estypes.QueryDslQueryContainer } | undefined; interface IQuery { pattern: string; meta_fields: string[]; diff --git a/src/plugins/data_views/server/saved_objects/index_pattern_migrations.ts b/src/plugins/data_views/server/saved_objects/index_pattern_migrations.ts index d92b39e8a6c24..c039e802f69e7 100644 --- a/src/plugins/data_views/server/saved_objects/index_pattern_migrations.ts +++ b/src/plugins/data_views/server/saved_objects/index_pattern_migrations.ts @@ -9,7 +9,10 @@ import { flow, omit } from 'lodash'; import { SavedObjectMigrationFn } from '@kbn/core/server'; -const migrateAttributeTypeAndAttributeTypeMeta: SavedObjectMigrationFn = (doc) => ({ +const migrateAttributeTypeAndAttributeTypeMeta: SavedObjectMigrationFn< + { type?: string; typeMeta?: string }, + unknown +> = (doc) => ({ ...doc, attributes: { ...doc.attributes, @@ -18,11 +21,14 @@ const migrateAttributeTypeAndAttributeTypeMeta: SavedObjectMigrationFn }, }); -const migrateSubTypeAndParentFieldProperties: SavedObjectMigrationFn = (doc) => { +const migrateSubTypeAndParentFieldProperties: SavedObjectMigrationFn< + { fields?: string }, + unknown +> = (doc) => { if (!doc.attributes.fields) return doc; const fieldsString = doc.attributes.fields; - const fields = JSON.parse(fieldsString) as any[]; + const fields = JSON.parse(fieldsString) as Array<{ subType?: string; parent?: string }>; const migratedFields = fields.map((field) => { if (field.subType === 'multi') { return { @@ -43,7 +49,7 @@ const migrateSubTypeAndParentFieldProperties: SavedObjectMigrationFn = }; }; -const addAllowNoIndex: SavedObjectMigrationFn = (doc) => ({ +const addAllowNoIndex: SavedObjectMigrationFn<{}, unknown> = (doc) => ({ ...doc, attributes: { ...doc.attributes, diff --git a/src/plugins/field_formats/common/types.ts b/src/plugins/field_formats/common/types.ts index f52545408976e..8f19e6e26d32b 100644 --- a/src/plugins/field_formats/common/types.ts +++ b/src/plugins/field_formats/common/types.ts @@ -132,7 +132,7 @@ export type FieldFormatInstanceType = (new ( * TODO: support strict typing for params depending on format type * https://github.com/elastic/kibana/issues/108158 */ -export type FieldFormatParams = SerializableRecord; +export type FieldFormatParams

= SerializableRecord & P; /** * Params provided by the registry to every field formatter @@ -157,9 +157,12 @@ export type FieldFormatsStartCommon = Omit = { +export type SerializedFieldFormat< + P = {}, + TParams extends FieldFormatParams

= FieldFormatParams

+> = { id?: string; params?: TParams; }; -export type FormatFactory = (mapping?: SerializedFieldFormat) => IFieldFormat; +export type FormatFactory =

(mapping?: SerializedFieldFormat

) => IFieldFormat; From 89dd6cb91e7a745bb037fd5d41b8320e2e036525 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 13 Jul 2022 19:04:48 +0300 Subject: [PATCH 15/96] [Cloud Posture] Add latest-findings index link (#136096) --- .../cloud_security_posture/kibana.json | 2 +- .../public/pages/findings/findings.test.tsx | 11 ++++- .../findings/findings_flyout/overview_tab.tsx | 42 +++++++++++++++++-- .../latest_findings_container.test.tsx | 2 + .../public/test/test_provider.tsx | 2 + .../cloud_security_posture/public/types.ts | 2 + 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/kibana.json b/x-pack/plugins/cloud_security_posture/kibana.json index 123e1e6ccf0e8..a5fa332e4d5b4 100755 --- a/x-pack/plugins/cloud_security_posture/kibana.json +++ b/x-pack/plugins/cloud_security_posture/kibana.json @@ -10,6 +10,6 @@ "description": "The cloud security posture plugin", "server": true, "ui": true, - "requiredPlugins": ["navigation", "data", "fleet", "unifiedSearch", "taskManager", "security", "charts"], + "requiredPlugins": ["navigation", "data", "fleet", "unifiedSearch", "taskManager", "security", "charts", "discover"], "requiredBundles": ["kibanaReact"] } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx index 989408dc251b0..1604c77358596 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx @@ -22,6 +22,8 @@ import { useCisKubernetesIntegration } from '../../common/api/use_cis_kubernetes import type { DataView } from '@kbn/data-plugin/common'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; +import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; +import type { DiscoverStart } from '@kbn/discover-plugin/public'; jest.mock('../../common/api/use_latest_findings_data_view'); jest.mock('../../common/api/use_cis_kubernetes_integration'); @@ -34,12 +36,14 @@ const Wrapper = ({ data = dataPluginMock.createStartContract(), unifiedSearch = unifiedSearchPluginMock.createStartContract(), charts = chartPluginMock.createStartContract(), + discover = discoverPluginMock.createStartContract(), }: { data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; charts: ChartsPluginStart; + discover: DiscoverStart; }) => ( - + ); @@ -49,6 +53,7 @@ describe.skip('', () => { const data = dataPluginMock.createStartContract(); const unifiedSearch = unifiedSearchPluginMock.createStartContract(); const charts = chartPluginMock.createStartContract(); + const discover = discoverPluginMock.createStartContract(); const source = await data.search.searchSource.create(); (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ @@ -65,7 +70,9 @@ describe.skip('', () => { }), } as UseQueryResult); - render(); + render( + + ); expect(await screen.findByTestId(TEST_SUBJECTS.FINDINGS_CONTAINER)).toBeInTheDocument(); }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx index 5c29e40d28436..cf213bcc9ae16 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx @@ -5,18 +5,29 @@ * 2.0. */ -import { EuiAccordion, EuiDescriptionList, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui'; +import { + EuiAccordion, + EuiDescriptionList, + EuiLink, + EuiPanel, + EuiSpacer, + EuiText, +} from '@elastic/eui'; import React, { useMemo } from 'react'; import moment from 'moment'; import type { EuiDescriptionListProps, EuiAccordionProps } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useLatestFindingsDataView } from '../../../common/api/use_latest_findings_data_view'; +import { useKibana } from '../../../common/hooks/use_kibana'; import { CspFinding } from '../types'; import { CisKubernetesIcons, Markdown, CodeBlock } from './findings_flyout'; type Accordion = Pick & Pick; -const getDetailsList = (data: CspFinding) => [ +const INDEX_LINK_NAME = 'logs-cloud_security_posture.findings_latest-default'; + +const getDetailsList = (data: CspFinding, discoverIndexLink: string | undefined) => [ { title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle', { defaultMessage: 'Rule Name', @@ -47,6 +58,16 @@ const getDetailsList = (data: CspFinding) => [ }), description: data.rule.section, }, + { + title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.indexTitle', { + defaultMessage: 'Index', + }), + description: discoverIndexLink ? ( + {INDEX_LINK_NAME} + ) : ( + INDEX_LINK_NAME + ), + }, ]; export const getRemediationList = (rule: CspFinding['rule']) => [ @@ -99,6 +120,19 @@ const getEvidenceList = ({ result }: CspFinding) => ].filter(Boolean) as EuiDescriptionListProps['listItems']; export const OverviewTab = ({ data }: { data: CspFinding }) => { + const { + services: { discover }, + } = useKibana(); + const latestFindingsDataView = useLatestFindingsDataView(); + + const discoverIndexLink = useMemo( + () => + discover.locator?.getRedirectUrl({ + indexPatternId: latestFindingsDataView.data?.id, + }), + [discover.locator, latestFindingsDataView.data?.id] + ); + const accordions: Accordion[] = useMemo( () => [ { @@ -107,7 +141,7 @@ export const OverviewTab = ({ data }: { data: CspFinding }) => { defaultMessage: 'Details', }), id: 'detailsAccordion', - listItems: getDetailsList(data), + listItems: getDetailsList(data, discoverIndexLink), }, { initialIsOpen: true, @@ -127,7 +161,7 @@ export const OverviewTab = ({ data }: { data: CspFinding }) => { listItems: getEvidenceList(data), }, ], - [data] + [data, discoverIndexLink] ); return ( diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx index 3e9fd0941495e..c74b928100d8b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx @@ -22,6 +22,7 @@ import { buildEsQuery } from '@kbn/es-query'; import { getPaginationQuery } from '../utils'; import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; +import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; jest.mock('../../../common/api/use_latest_findings_data_view'); jest.mock('../../../common/api/use_cis_kubernetes_integration'); @@ -66,6 +67,7 @@ describe('', () => { data: dataMock, unifiedSearch: unifiedSearchPluginMock.createStartContract(), charts: chartPluginMock.createStartContract(), + discover: discoverPluginMock.createStartContract(), }} > diff --git a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx index d0a925069a884..7aaa00f7923b2 100755 --- a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx +++ b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx @@ -14,6 +14,7 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; +import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; import type { CspAppDeps } from '../application/app'; export const TestProvider: React.FC> = ({ @@ -22,6 +23,7 @@ export const TestProvider: React.FC> = ({ data: dataPluginMock.createStartContract(), unifiedSearch: unifiedSearchPluginMock.createStartContract(), charts: chartPluginMock.createStartContract(), + discover: discoverPluginMock.createStartContract(), }, params = coreMock.createAppMountParameters(), children, diff --git a/x-pack/plugins/cloud_security_posture/public/types.ts b/x-pack/plugins/cloud_security_posture/public/types.ts index f5fbb2766e6b9..dbb69b0d65e65 100755 --- a/x-pack/plugins/cloud_security_posture/public/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/types.ts @@ -8,6 +8,7 @@ import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; +import type { DiscoverStart } from '@kbn/discover-plugin/public'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface CspClientPluginSetup {} @@ -26,5 +27,6 @@ export interface CspClientPluginStartDeps { data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; charts: ChartsPluginStart; + discover: DiscoverStart; // optional } From 00216fd0b7674c15febeb8c5bae2afc4d3e7042e Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 13 Jul 2022 18:05:19 +0200 Subject: [PATCH 16/96] [ML] Explain log rate spikes: Use DualBrush component to select WindowParameters for analysis. (#136255) - Adds the DualBrush component to DocumentCountChart to allow the user to select WindowParameters for the explain log rate spikes analysis. - VIEW_MODE is for now hard coded to brush. In a follow up we will allow a user to switch between zoom mode for navigation and brush mode for selection of WindowParameters. - The auto-generation of WindowParameters has been removed from the wrapping code in the ML plugin. - urlState related code has been moved from ExplainLogRateSpikes to ExplainLogRateSpikesWrapper. - The analysis results table style has been changed to compressed. --- .../services/timefilter_refresh_service.ts | 2 +- .../date_picker_wrapper.tsx | 4 +- .../document_count_chart.tsx | 174 +++++++++++++----- .../document_count_content.tsx | 27 ++- .../explain_log_rate_spikes.tsx | 133 ++----------- .../explain_log_rate_spikes_wrapper.tsx | 121 +++++++++++- .../explain_log_rate_spikes/index.ts | 2 +- .../spike_analysis_table.tsx | 1 + .../plugins/aiops/public/hooks/url_state.ts | 6 +- x-pack/plugins/aiops/public/hooks/use_data.ts | 4 +- .../plugins/aiops/public/hooks/use_storage.ts | 2 +- x-pack/plugins/aiops/public/index.ts | 1 - .../aiops/public/shared_lazy_components.tsx | 8 +- .../aiops/explain_log_rate_spikes.tsx | 40 +--- 14 files changed, 304 insertions(+), 221 deletions(-) diff --git a/x-pack/plugins/aiops/public/application/services/timefilter_refresh_service.ts b/x-pack/plugins/aiops/public/application/services/timefilter_refresh_service.ts index 20eab7968fefc..05edd75d599bf 100644 --- a/x-pack/plugins/aiops/public/application/services/timefilter_refresh_service.ts +++ b/x-pack/plugins/aiops/public/application/services/timefilter_refresh_service.ts @@ -12,4 +12,4 @@ export interface Refresh { timeRange?: { start: string; end: string }; } -export const aiOpsRefresh$ = new Subject(); +export const aiopsRefresh$ = new Subject(); diff --git a/x-pack/plugins/aiops/public/components/date_picker_wrapper/date_picker_wrapper.tsx b/x-pack/plugins/aiops/public/components/date_picker_wrapper/date_picker_wrapper.tsx index 00e74bc7db618..931993a354d6c 100644 --- a/x-pack/plugins/aiops/public/components/date_picker_wrapper/date_picker_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/date_picker_wrapper/date_picker_wrapper.tsx @@ -15,7 +15,7 @@ import { TimeHistoryContract, UI_SETTINGS } from '@kbn/data-plugin/public'; import { useUrlState } from '../../hooks/url_state'; import { useAiOpsKibana } from '../../kibana_context'; -import { aiOpsRefresh$ } from '../../application/services/timefilter_refresh_service'; +import { aiopsRefresh$ } from '../../application/services/timefilter_refresh_service'; interface TimePickerQuickRange { from: string; @@ -47,7 +47,7 @@ function getRecentlyUsedRangesFactory(timeHistory: TimeHistoryContract) { } function updateLastRefresh(timeRange: OnRefreshProps) { - aiOpsRefresh$.next({ lastRefresh: Date.now(), timeRange }); + aiopsRefresh$.next({ lastRefresh: Date.now(), timeRange }); } export const DatePickerWrapper: FC = () => { diff --git a/x-pack/plugins/aiops/public/components/document_count_content/document_count_chart/document_count_chart.tsx b/x-pack/plugins/aiops/public/components/document_count_content/document_count_chart/document_count_chart.tsx index f58730544896b..308e91f47506a 100644 --- a/x-pack/plugins/aiops/public/components/document_count_content/document_count_chart/document_count_chart.tsx +++ b/x-pack/plugins/aiops/public/components/document_count_content/document_count_chart/document_count_chart.tsx @@ -5,8 +5,9 @@ * 2.0. */ -import React, { FC, useCallback, useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; +import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; +import moment from 'moment'; + import { Axis, BarSeries, @@ -19,9 +20,14 @@ import { XYChartElementEvent, XYBrushEvent, } from '@elastic/charts'; -import moment from 'moment'; + +import { i18n } from '@kbn/i18n'; import { IUiSettingsClient } from '@kbn/core/public'; +import { DualBrush, DualBrushAnnotation } from '@kbn/aiops-components'; +import { getWindowParameters } from '@kbn/aiops-utils'; +import type { WindowParameters } from '@kbn/aiops-utils'; import { MULTILAYER_TIME_AXIS_STYLE } from '@kbn/charts-plugin/common'; + import { useAiOpsKibana } from '../../../kibana_context'; export interface DocumentCountChartPoint { @@ -29,16 +35,22 @@ export interface DocumentCountChartPoint { value: number; } -interface Props { +interface DocumentCountChartProps { + brushSelectionUpdateHandler: (d: WindowParameters) => void; width?: number; chartPoints: DocumentCountChartPoint[]; timeRangeEarliest: number; timeRangeLatest: number; - interval?: number; + interval: number; } const SPEC_ID = 'document_count'; +enum VIEW_MODE { + ZOOM = 'zoom', + BRUSH = 'brush', +} + function getTimezone(uiSettings: IUiSettingsClient) { if (uiSettings.isDefault('dateFormat:tz')) { const detectedTimezone = moment.tz.guess(); @@ -49,7 +61,8 @@ function getTimezone(uiSettings: IUiSettingsClient) { } } -export const DocumentCountChart: FC = ({ +export const DocumentCountChart: FC = ({ + brushSelectionUpdateHandler, width, chartPoints, timeRangeEarliest, @@ -70,6 +83,9 @@ export const DocumentCountChart: FC = ({ defaultMessage: 'document count', }); + // TODO Let user choose between ZOOM and BRUSH mode. + const [viewMode] = useState(VIEW_MODE.BRUSH); + const xDomain = { min: timeRangeEarliest, max: timeRangeLatest, @@ -117,46 +133,120 @@ export const DocumentCountChart: FC = ({ from: startRange, to: startRange + interval, }; - timefilterUpdateHandler(range); + + if (viewMode === VIEW_MODE.ZOOM) { + timefilterUpdateHandler(range); + } else { + if ( + typeof startRange === 'number' && + originalWindowParameters === undefined && + windowParameters === undefined && + adjustedChartPoints !== undefined + ) { + const wp = getWindowParameters( + startRange + interval / 2, + xDomain.min, + xDomain.max + interval + ); + setOriginalWindowParameters(wp); + setWindowParameters(wp); + brushSelectionUpdateHandler(wp); + } + } }; const timeZone = getTimezone(uiSettings); + const [originalWindowParameters, setOriginalWindowParameters] = useState< + WindowParameters | undefined + >(); + const [windowParameters, setWindowParameters] = useState(); + + function onWindowParametersChange(wp: WindowParameters) { + setWindowParameters(wp); + brushSelectionUpdateHandler(wp); + } + + const [mlBrushWidth, setMlBrushWidth] = useState(); + const [mlBrushMarginLeft, setMlBrushMarginLeft] = useState(); + + useEffect(() => { + if (viewMode !== VIEW_MODE.BRUSH) { + setOriginalWindowParameters(undefined); + setWindowParameters(undefined); + } + }, [viewMode]); + + const isBrushVisible = + originalWindowParameters && mlBrushMarginLeft && mlBrushWidth && mlBrushWidth > 0; + return ( -

- - - xAxisFormatter.convert(value)} - timeAxisLayerCount={useLegacyTimeAxis ? 0 : 2} - style={useLegacyTimeAxis ? {} : MULTILAYER_TIME_AXIS_STYLE} - /> - - - -
+ <> + {isBrushVisible && ( +
+ +
+ )} +
+ + { + setMlBrushMarginLeft(projection.left); + setMlBrushWidth(projection.width); + }} + theme={chartTheme} + baseTheme={chartBaseTheme} + /> + xAxisFormatter.convert(value)} + timeAxisLayerCount={useLegacyTimeAxis ? 0 : 2} + style={useLegacyTimeAxis ? {} : MULTILAYER_TIME_AXIS_STYLE} + /> + + + {windowParameters && ( + <> + + + + )} + +
+ ); }; diff --git a/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx b/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx index db55d6bd718ec..0843d1d5f2736 100644 --- a/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx +++ b/x-pack/plugins/aiops/public/components/document_count_content/document_count_content/document_count_content.tsx @@ -5,16 +5,24 @@ * 2.0. */ import React, { FC } from 'react'; + +import { WindowParameters } from '@kbn/aiops-utils'; + import { DocumentCountChart, DocumentCountChartPoint } from '../document_count_chart'; import { TotalCountHeader } from '../total_count_header'; import { DocumentCountStats } from '../../../get_document_stats'; -export interface Props { +export interface DocumentCountContentProps { + brushSelectionUpdateHandler: (d: WindowParameters) => void; documentCountStats?: DocumentCountStats; totalCount: number; } -export const DocumentCountContent: FC = ({ documentCountStats, totalCount }) => { +export const DocumentCountContent: FC = ({ + brushSelectionUpdateHandler, + documentCountStats, + totalCount, +}) => { if (documentCountStats === undefined) { return totalCount !== undefined ? : null; } @@ -32,12 +40,15 @@ export const DocumentCountContent: FC = ({ documentCountStats, totalCount return ( <> - + {documentCountStats.interval !== undefined && ( + + )} ); }; diff --git a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx index 468d543ddeefd..e0d135522a30c 100644 --- a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx +++ b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx @@ -7,18 +7,6 @@ import React, { useEffect, FC } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiHorizontalRule, - EuiPageBody, - EuiPageContentBody, - EuiPageContentHeader, - EuiPageContentHeaderSection, - EuiSpacer, - EuiTitle, -} from '@elastic/eui'; - import type { DataView } from '@kbn/data-views-plugin/public'; import { ProgressControls } from '@kbn/aiops-components'; import { useFetchStream } from '@kbn/aiops-utils'; @@ -28,44 +16,38 @@ import { useAiOpsKibana } from '../../kibana_context'; import { initialState, streamReducer } from '../../../common/api/stream_reducer'; import type { ApiExplainLogRateSpikes } from '../../../common/api'; import { SpikeAnalysisTable } from '../spike_analysis_table'; -import { FullTimeRangeSelector } from '../full_time_range_selector'; -import { DocumentCountContent } from '../document_count_content/document_count_content'; -import { DatePickerWrapper } from '../date_picker_wrapper'; -import { useData } from '../../hooks/use_data'; -import { useUrlState } from '../../hooks/url_state'; /** * ExplainLogRateSpikes props require a data view. */ -export interface ExplainLogRateSpikesProps { +interface ExplainLogRateSpikesProps { /** The data view to analyze. */ dataView: DataView; + /** Start timestamp filter */ + earliest: number; + /** End timestamp filter */ + latest: number; /** Window parameters for the analysis */ windowParameters: WindowParameters; } export const ExplainLogRateSpikes: FC = ({ dataView, + earliest, + latest, windowParameters, }) => { const { services } = useAiOpsKibana(); const basePath = services.http?.basePath.get() ?? ''; - const [globalState, setGlobalState] = useUrlState('_g'); - - const { docStats, timefilter } = useData(dataView, setGlobalState); - const { cancel, start, data, isRunning, error } = useFetchStream< ApiExplainLogRateSpikes, typeof basePath >( `${basePath}/internal/aiops/explain_log_rate_spikes`, { - // TODO Consider actual user selected time ranges. - // Since we already receive window parameters here, - // we just set a maximum time range of 1970-2038 here. - start: 0, - end: 2147483647000, + start: earliest, + end: latest, // TODO Consider an optional Kuery. kuery: '', // TODO Handle data view without time fields. @@ -76,100 +58,23 @@ export const ExplainLogRateSpikes: FC = ({ { reducer: streamReducer, initialState } ); - useEffect(() => { - if (globalState?.time !== undefined) { - timefilter.setTime({ - from: globalState.time.from, - to: globalState.time.to, - }); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [JSON.stringify(globalState?.time), timefilter]); - - useEffect(() => { - if (globalState?.refreshInterval !== undefined) { - timefilter.setRefreshInterval(globalState.refreshInterval); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [JSON.stringify(globalState?.refreshInterval), timefilter]); - useEffect(() => { start(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - if (!dataView || !timefilter) return null; - return ( <> - - - - - -
- -

{dataView.title}

-
-
-
- - - {dataView.timeFieldName !== undefined && ( - - - - )} - - - - -
-
-
- - - - - {docStats?.totalCount !== undefined && ( - - - - )} - - - - {data?.changePoints ? ( - - - - ) : null} - - -
+ + {data?.changePoints ? ( + + ) : null} ); }; diff --git a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_wrapper.tsx b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_wrapper.tsx index 1b72aac836c18..8c254be451515 100644 --- a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_wrapper.tsx @@ -5,11 +5,27 @@ * 2.0. */ -import React, { FC, useCallback } from 'react'; +import React, { FC, useCallback, useEffect, useState } from 'react'; import { parse, stringify } from 'query-string'; import { isEqual } from 'lodash'; import { encode } from 'rison-node'; import { useHistory, useLocation } from 'react-router-dom'; + +import { + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiPageBody, + EuiPageContentBody, + EuiPageContentHeader, + EuiPageContentHeaderSection, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; + +import type { WindowParameters } from '@kbn/aiops-utils'; +import type { DataView } from '@kbn/data-views-plugin/public'; + import { Accessor, Dictionary, @@ -19,10 +35,51 @@ import { getNestedProperty, SetUrlState, } from '../../hooks/url_state'; +import { useData } from '../../hooks/use_data'; +import { useUrlState } from '../../hooks/url_state'; + +import { FullTimeRangeSelector } from '../full_time_range_selector'; +import { DocumentCountContent } from '../document_count_content/document_count_content'; +import { DatePickerWrapper } from '../date_picker_wrapper'; + +import { ExplainLogRateSpikes } from './explain_log_rate_spikes'; + +export interface ExplainLogRateSpikesWrapperProps { + /** The data view to analyze. */ + dataView: DataView; +} -import { ExplainLogRateSpikes, ExplainLogRateSpikesProps } from './explain_log_rate_spikes'; +export const ExplainLogRateSpikesWrapper: FC = ({ dataView }) => { + const [globalState, setGlobalState] = useUrlState('_g'); + + const { docStats, timefilter } = useData(dataView, setGlobalState); + const [windowParameters, setWindowParameters] = useState(); + + const activeBounds = timefilter.getActiveBounds(); + let earliest: number | undefined; + let latest: number | undefined; + if (activeBounds !== undefined) { + earliest = activeBounds.min?.valueOf(); + latest = activeBounds.max?.valueOf(); + } + + useEffect(() => { + if (globalState?.time !== undefined) { + timefilter.setTime({ + from: globalState.time.from, + to: globalState.time.to, + }); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [JSON.stringify(globalState?.time), timefilter]); + + useEffect(() => { + if (globalState?.refreshInterval !== undefined) { + timefilter.setRefreshInterval(globalState.refreshInterval); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [JSON.stringify(globalState?.refreshInterval), timefilter]); -export const ExplainLogRateSpikesWrapper: FC = (props) => { const history = useHistory(); const { search: urlSearchString } = useLocation(); @@ -88,9 +145,65 @@ export const ExplainLogRateSpikesWrapper: FC = (props [history, urlSearchString] ); + if (!dataView || !timefilter) return null; + return ( - {' '} + + + + + +
+ +

{dataView.title}

+
+
+
+ + + {dataView.timeFieldName !== undefined && ( + + + + )} + + + + +
+
+
+ + + {docStats?.totalCount !== undefined && ( + + )} + + {earliest !== undefined && latest !== undefined && windowParameters !== undefined && ( + + )} + +
); }; diff --git a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/index.ts b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/index.ts index 4666380c7bd61..4c344313209e4 100644 --- a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/index.ts +++ b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -export type { ExplainLogRateSpikesProps } from './explain_log_rate_spikes'; +export type { ExplainLogRateSpikesWrapperProps } from './explain_log_rate_spikes_wrapper'; import { ExplainLogRateSpikesWrapper } from './explain_log_rate_spikes_wrapper'; // required for dynamic import using React.lazy() diff --git a/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table.tsx b/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table.tsx index 3910bd8cc5a02..9e125f4d47305 100644 --- a/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table.tsx +++ b/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table.tsx @@ -117,6 +117,7 @@ export const SpikeAnalysisTable: FC = ({ changePointData, error, loading return ( { // This uses a context to be able to maintain only one instance // of the url state. It gets passed down with `UrlStateProvider` // and can be used via `useUrlState`. -export const aiOpsUrlStateStore = createContext({ +export const aiopsUrlStateStore = createContext({ searchString: '', setUrlState: () => {}, }); -export const { Provider } = aiOpsUrlStateStore; +export const { Provider } = aiopsUrlStateStore; export const useUrlState = (accessor: Accessor) => { - const { searchString, setUrlState: setUrlStateContext } = useContext(aiOpsUrlStateStore); + const { searchString, setUrlState: setUrlStateContext } = useContext(aiopsUrlStateStore); const urlState = useMemo(() => { const fullUrlState = parseUrlState(searchString); diff --git a/x-pack/plugins/aiops/public/hooks/use_data.ts b/x-pack/plugins/aiops/public/hooks/use_data.ts index b3cadd2d44f79..85be019d14e50 100644 --- a/x-pack/plugins/aiops/public/hooks/use_data.ts +++ b/x-pack/plugins/aiops/public/hooks/use_data.ts @@ -11,7 +11,7 @@ import { merge } from 'rxjs'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; import { useAiOpsKibana } from '../kibana_context'; import { useTimefilter } from './use_time_filter'; -import { aiOpsRefresh$ } from '../application/services/timefilter_refresh_service'; +import { aiopsRefresh$ } from '../application/services/timefilter_refresh_service'; import { TimeBuckets } from '../../common/time_buckets'; import { useDocumentCountStats } from './use_document_count_stats'; import { Dictionary } from './url_state'; @@ -80,7 +80,7 @@ export const useData = ( const timeUpdateSubscription = merge( timefilter.getTimeUpdate$(), timefilter.getAutoRefreshFetch$(), - aiOpsRefresh$ + aiopsRefresh$ ).subscribe(() => { if (onUpdate) { onUpdate({ diff --git a/x-pack/plugins/aiops/public/hooks/use_storage.ts b/x-pack/plugins/aiops/public/hooks/use_storage.ts index 7459560d127bf..ef8bf85f2507d 100644 --- a/x-pack/plugins/aiops/public/hooks/use_storage.ts +++ b/x-pack/plugins/aiops/public/hooks/use_storage.ts @@ -8,7 +8,7 @@ import { useCallback, useState } from 'react'; import { useAiOpsKibana } from '../kibana_context'; -export const AIOPS_FROZEN_TIER_PREFERENCE = 'aiOps.frozenDataTierPreference'; +export const AIOPS_FROZEN_TIER_PREFERENCE = 'aiop.frozenDataTierPreference'; export type AiOps = Partial<{ [AIOPS_FROZEN_TIER_PREFERENCE]: 'exclude_frozen' | 'include_frozen'; diff --git a/x-pack/plugins/aiops/public/index.ts b/x-pack/plugins/aiops/public/index.ts index 26166e7ca104d..5810d38d57308 100755 --- a/x-pack/plugins/aiops/public/index.ts +++ b/x-pack/plugins/aiops/public/index.ts @@ -13,6 +13,5 @@ export function plugin() { return new AiopsPlugin(); } -export type { ExplainLogRateSpikesProps } from './components/explain_log_rate_spikes'; export { ExplainLogRateSpikes } from './shared_lazy_components'; export type { AiopsPluginSetup, AiopsPluginStart } from './types'; diff --git a/x-pack/plugins/aiops/public/shared_lazy_components.tsx b/x-pack/plugins/aiops/public/shared_lazy_components.tsx index 95dcdc50ae2ac..d967a6434d83c 100644 --- a/x-pack/plugins/aiops/public/shared_lazy_components.tsx +++ b/x-pack/plugins/aiops/public/shared_lazy_components.tsx @@ -9,7 +9,7 @@ import React, { FC, Suspense } from 'react'; import { EuiErrorBoundary, EuiLoadingContent } from '@elastic/eui'; -import type { ExplainLogRateSpikesProps } from './components/explain_log_rate_spikes'; +import type { ExplainLogRateSpikesWrapperProps } from './components/explain_log_rate_spikes'; const ExplainLogRateSpikesWrapperLazy = React.lazy( () => import('./components/explain_log_rate_spikes') @@ -22,10 +22,10 @@ const LazyWrapper: FC = ({ children }) => ( ); /** - * Lazy-wrapped ExplainLogRateSpikes React component - * @param {ExplainLogRateSpikesProps} props - properties specifying the data on which to run the analysis. + * Lazy-wrapped ExplainLogRateSpikesWrapper React component + * @param {ExplainLogRateSpikesWrapperProps} props - properties specifying the data on which to run the analysis. */ -export const ExplainLogRateSpikes: FC = (props) => ( +export const ExplainLogRateSpikes: FC = (props) => ( diff --git a/x-pack/plugins/ml/public/application/aiops/explain_log_rate_spikes.tsx b/x-pack/plugins/ml/public/application/aiops/explain_log_rate_spikes.tsx index 43bc5e77dbb82..cb6e7061fa319 100644 --- a/x-pack/plugins/ml/public/application/aiops/explain_log_rate_spikes.tsx +++ b/x-pack/plugins/ml/public/application/aiops/explain_log_rate_spikes.tsx @@ -5,18 +5,14 @@ * 2.0. */ -import React, { useEffect, useState, FC } from 'react'; +import React, { FC } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { ExplainLogRateSpikes } from '@kbn/aiops-plugin/public'; -import { getWindowParameters } from '@kbn/aiops-utils'; -import type { WindowParameters } from '@kbn/aiops-utils'; -import { KBN_FIELD_TYPES } from '@kbn/data-plugin/public'; import { useMlContext } from '../contexts/ml'; import { useMlKibana } from '../contexts/kibana'; import { HelpMenu } from '../components/help_menu'; -import { ml } from '../services/ml_api_service'; import { MlPageHeader } from '../components/page_header'; @@ -28,36 +24,6 @@ export const ExplainLogRateSpikesPage: FC = () => { const context = useMlContext(); const dataView = context.currentDataView; - const [windowParameters, setWindowParameters] = useState(); - - useEffect(() => { - async function fetchWindowParameters() { - if (dataView.timeFieldName) { - const stats: Array<{ - data: Array<{ doc_count: number; key: number }>; - stats: [number, number]; - }> = await ml.getVisualizerFieldHistograms({ - indexPattern: dataView.title, - fields: [{ fieldName: dataView.timeFieldName, type: KBN_FIELD_TYPES.DATE }], - query: { match_all: {} }, - samplerShardSize: -1, - }); - - const peak = stats[0].data.reduce((p, c) => (c.doc_count >= p.doc_count ? c : p), { - doc_count: 0, - key: 0, - }); - const peakTimestamp = Math.round(peak.key); - - setWindowParameters( - getWindowParameters(peakTimestamp, stats[0].stats[0], stats[0].stats[1]) - ); - } - } - - fetchWindowParameters(); - }, []); - return ( <> @@ -66,9 +32,7 @@ export const ExplainLogRateSpikesPage: FC = () => { defaultMessage="Explain log rate spikes" /> - {dataView.timeFieldName && windowParameters && ( - - )} + {dataView.timeFieldName && } ); From c287a0205d42223096bbc8a6198336e5d1890a33 Mon Sep 17 00:00:00 2001 From: mgiota Date: Wed, 13 Jul 2022 18:06:17 +0200 Subject: [PATCH 17/96] [Actionable Observability] parameterize shareable rules list to adapt to o11y (#134173) * parameterize shareable rules list to adapt to o11y * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * parameterize rule details link * add Refresh button to triggers_actions_ui * hide create rule button in o11y rules page * removed unused stuff * fix CI issues * state container for last response column * fix CI issues * fix failing functional test on o11y rule details page * make ruleListProps optional * sync status filter with urlbar * remove flaky test * temp * temp2 * fix o11y functional failing test - use clickByButtonText instead of clickByLinkText * fix CI * remove noData, noPermission prompt and refactor use_load_hooks to get filteredRuleTypes as a prop * hide create rule button on empty screen in the o11y rules page * fix CI issues * remove not needed unit tests * remove unused hook * fix failing tests * fix no permission prompt failing tests * fix re-rendering issue when clicking on create rule button * remove statecontainers for lastResponse column from triggers_actions_ui plugin * refactor statusFilter using useEffect * refactor executionStatusFilter using useEffect * sunchronize urlbar with filters * rename executionStatusesFilter to lastResponseFilter * add more unit tests for rules_list * more unit tests * temporarily disable flaky tests * remove unused stuff and move stuff to rule_details page * rename ruleDetailsLink to ruleDetailsRoute * fix o11y unit tests * add more scenarios in the use_load_rules tests * delete kibanaFeature remnant code that was added with type filtering before It was introduced here https://github.com/elastic/kibana/commit/2dfc0b9d19749d562d630d89a0d3190f0de17c49 * more cleanup * bring rule_details_page tests in their original state * add missing types * bring back empty lines * more cleanup * add more types * unskip o11y tests * apply feedback * more unit tests * remove filteredRuleTypes, we already have everything that we need * refactor to only use rule type id to filter in triggers action ui * add selection of visible columns + fix rule definition to not harcoded kibana feature privileges + fix unit test with new logic * fix type + unit test * fix bug around no data when default rules type are on Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Xavier Mouligneau --- .../public/application/application.test.tsx | 1 - .../public/application/index.tsx | 4 - .../components/app/section/apm/index.test.tsx | 1 - .../public/context/plugin_context.tsx | 2 - .../public/hooks/use_fetch_rules.ts | 119 ---- ...observability_public_plugins_start.mock.ts | 1 + .../pages/overview/overview.stories.tsx | 1 - .../components/center_justified_spinner.tsx | 0 .../components/delete_modal_confirmation.tsx | 0 .../rule_details/components/page_title.tsx | 2 +- .../public/pages/rule_details/config.ts | 24 +- .../public/pages/rule_details/index.tsx | 23 +- .../public/pages/rule_details/translations.ts | 46 ++ .../rules/components/edit_rule_flyout.tsx | 31 - .../rules/components/execution_status.tsx | 81 --- .../rules/components/last_response_filter.tsx | 87 --- .../pages/rules/components/last_run.tsx | 24 - .../rules/components/manage_license_model.tsx | 55 -- .../public/pages/rules/components/name.tsx | 36 -- .../components/prompts/no_data_prompt.tsx | 69 --- .../prompts/no_permission_prompt.tsx | 46 -- .../pages/rules/components/rules_table.tsx | 67 --- .../pages/rules/components/type_filter.tsx | 90 --- .../public/pages/rules/config.ts | 61 +- .../public/pages/rules/index.test.tsx | 443 +------------- .../public/pages/rules/index.tsx | 467 ++------------- .../public/pages/rules/translations.ts | 116 ---- .../observability/public/pages/rules/types.ts | 74 --- x-pack/plugins/observability/public/plugin.ts | 25 +- .../observability_rule_type_registry_mock.ts | 1 + .../public/utils/test_helper.tsx | 1 - .../translations/translations/fr-FR.json | 25 - .../translations/translations/ja-JP.json | 25 - .../translations/translations/zh-CN.json | 25 - .../components/prompts/empty_prompt.tsx | 32 +- .../application/hooks/use_load_rule_types.ts | 8 +- .../application/hooks/use_load_rules.test.ts | 102 ++++ .../application/hooks/use_load_rules.ts | 7 +- .../rules_list_sandbox.tsx | 7 +- .../components/rule_definition.tsx | 5 +- .../sections/rule_form/rule_add.tsx | 4 +- .../sections/rule_form/rule_form.tsx | 6 +- .../rules_list/components/rules_list.test.tsx | 556 ++++++++++++++++++ .../rules_list/components/rules_list.tsx | 159 ++++- .../public/common/get_rules_list.tsx | 8 +- .../triggers_actions_ui/public/index.ts | 3 +- .../triggers_actions_ui/public/mocks.ts | 5 +- .../triggers_actions_ui/public/plugin.ts | 10 +- .../triggers_actions_ui/public/types.ts | 7 +- .../observability/pages/rule_details_page.ts | 2 +- .../apps/observability/pages/rules_page.ts | 9 +- 51 files changed, 1032 insertions(+), 1971 deletions(-) delete mode 100644 x-pack/plugins/observability/public/hooks/use_fetch_rules.ts rename x-pack/plugins/observability/public/pages/{rules => rule_details}/components/center_justified_spinner.tsx (100%) rename x-pack/plugins/observability/public/pages/{rules => rule_details}/components/delete_modal_confirmation.tsx (100%) delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/edit_rule_flyout.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/execution_status.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/last_response_filter.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/last_run.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/manage_license_model.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/name.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/prompts/no_data_prompt.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/prompts/no_permission_prompt.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/rules_table.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/components/type_filter.tsx delete mode 100644 x-pack/plugins/observability/public/pages/rules/types.ts diff --git a/x-pack/plugins/observability/public/application/application.test.tsx b/x-pack/plugins/observability/public/application/application.test.tsx index 642652a886275..371be0ceb3a34 100644 --- a/x-pack/plugins/observability/public/application/application.test.tsx +++ b/x-pack/plugins/observability/public/application/application.test.tsx @@ -73,7 +73,6 @@ describe('renderApp', () => { appMountParameters: params, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, - kibanaFeatures: [], usageCollection: { components: { ApplicationUsageTrackingProvider: (props) => null, diff --git a/x-pack/plugins/observability/public/application/index.tsx b/x-pack/plugins/observability/public/application/index.tsx index e8be9d1fd09ff..16738c81aa540 100644 --- a/x-pack/plugins/observability/public/application/index.tsx +++ b/x-pack/plugins/observability/public/application/index.tsx @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import ReactDOM from 'react-dom'; import { Route, Router, Switch } from 'react-router-dom'; -import { KibanaFeature } from '@kbn/features-plugin/common'; import { AppMountParameters, APP_WRAPPER_CLASS, CoreStart } from '@kbn/core/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { @@ -52,7 +51,6 @@ export const renderApp = ({ appMountParameters, observabilityRuleTypeRegistry, ObservabilityPageTemplate, - kibanaFeatures, usageCollection, isDev, }: { @@ -61,7 +59,6 @@ export const renderApp = ({ observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; appMountParameters: AppMountParameters; ObservabilityPageTemplate: React.ComponentType; - kibanaFeatures: KibanaFeature[]; usageCollection: UsageCollectionSetup; isDev?: boolean; }) => { @@ -92,7 +89,6 @@ export const renderApp = ({ appMountParameters, observabilityRuleTypeRegistry, ObservabilityPageTemplate, - kibanaFeatures, }} > diff --git a/x-pack/plugins/observability/public/components/app/section/apm/index.test.tsx b/x-pack/plugins/observability/public/components/app/section/apm/index.test.tsx index d3c6b4b2ce0dc..6ba0556fa0172 100644 --- a/x-pack/plugins/observability/public/components/app/section/apm/index.test.tsx +++ b/x-pack/plugins/observability/public/components/app/section/apm/index.test.tsx @@ -50,7 +50,6 @@ describe('APMSection', () => { plugins: {} as ObservabilityPublicPluginsStart, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, - kibanaFeatures: [], })); }); diff --git a/x-pack/plugins/observability/public/context/plugin_context.tsx b/x-pack/plugins/observability/public/context/plugin_context.tsx index 91e703d1999fc..b4e6889d957b2 100644 --- a/x-pack/plugins/observability/public/context/plugin_context.tsx +++ b/x-pack/plugins/observability/public/context/plugin_context.tsx @@ -7,7 +7,6 @@ import { AppMountParameters } from '@kbn/core/public'; import { createContext } from 'react'; -import { KibanaFeature } from '@kbn/features-plugin/common'; import { ObservabilityRuleTypeRegistry } from '../rules/create_observability_rule_type_registry'; import type { LazyObservabilityPageTemplateProps } from '../components/shared/page_template/lazy_page_template'; @@ -15,7 +14,6 @@ export interface PluginContextValue { appMountParameters: AppMountParameters; observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; ObservabilityPageTemplate: React.ComponentType; - kibanaFeatures: KibanaFeature[]; } export const PluginContext = createContext({} as PluginContextValue); diff --git a/x-pack/plugins/observability/public/hooks/use_fetch_rules.ts b/x-pack/plugins/observability/public/hooks/use_fetch_rules.ts deleted file mode 100644 index b8c3445fffabc..0000000000000 --- a/x-pack/plugins/observability/public/hooks/use_fetch_rules.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useEffect, useState, useCallback } from 'react'; -import { isEmpty } from 'lodash'; -import { loadRules, loadRuleTags } from '@kbn/triggers-actions-ui-plugin/public'; -import { RULES_LOAD_ERROR, RULE_TAGS_LOAD_ERROR } from '../pages/rules/translations'; -import { FetchRulesProps, RuleState, TagsState } from '../pages/rules/types'; -import { useKibana } from '../utils/kibana_react'; -import { usePluginContext } from './use_plugin_context'; - -export function useFetchRules({ - searchText, - ruleLastResponseFilter, - ruleStatusesFilter, - typesFilter, - tagsFilter, - setPage, - page, - sort, -}: FetchRulesProps) { - const { http } = useKibana().services; - const { observabilityRuleTypeRegistry } = usePluginContext(); - - const [rulesState, setRulesState] = useState({ - isLoading: false, - data: [], - error: null, - totalItemCount: 0, - }); - - const [noData, setNoData] = useState(true); - const [initialLoad, setInitialLoad] = useState(true); - const [tagsState, setTagsState] = useState({ - data: [], - error: null, - }); - const loadRuleTagsAggs = useCallback(async () => { - try { - const ruleTagsAggs = await loadRuleTags({ - http, - }); - - if (ruleTagsAggs?.ruleTags) { - setTagsState({ data: ruleTagsAggs.ruleTags, error: null }); - } - } catch (e) { - setTagsState((oldState: TagsState) => ({ ...oldState, error: RULE_TAGS_LOAD_ERROR })); - } - }, [http]); - - const fetchRules = useCallback(async () => { - setRulesState((oldState) => ({ ...oldState, isLoading: true })); - - try { - const response = await loadRules({ - http, - page, - searchText, - typesFilter: typesFilter.length > 0 ? typesFilter : observabilityRuleTypeRegistry.list(), - tagsFilter, - ruleExecutionStatusesFilter: ruleLastResponseFilter, - ruleStatusesFilter, - sort, - }); - await loadRuleTagsAggs(); - setRulesState((oldState) => ({ - ...oldState, - isLoading: false, - data: response.data, - totalItemCount: response.total, - })); - - if (!response.data?.length && page.index > 0) { - setPage({ ...page, index: 0 }); - } - const isFilterApplied = !( - isEmpty(searchText) && - isEmpty(ruleLastResponseFilter) && - isEmpty(typesFilter) && - isEmpty(tagsFilter) && - isEmpty(ruleStatusesFilter) - ); - - setNoData(response.data.length === 0 && !isFilterApplied); - } catch (_e) { - setRulesState((oldState) => ({ ...oldState, isLoading: false, error: RULES_LOAD_ERROR })); - } - setInitialLoad(false); - }, [ - http, - page, - searchText, - typesFilter, - observabilityRuleTypeRegistry, - tagsFilter, - ruleLastResponseFilter, - ruleStatusesFilter, - sort, - loadRuleTagsAggs, - setPage, - ]); - useEffect(() => { - fetchRules(); - }, [fetchRules]); - - return { - rulesState, - reload: fetchRules, - setRulesState, - noData, - initialLoad, - tagsState, - }; -} diff --git a/x-pack/plugins/observability/public/observability_public_plugins_start.mock.ts b/x-pack/plugins/observability/public/observability_public_plugins_start.mock.ts index a20e42cd37841..80a207a846d33 100644 --- a/x-pack/plugins/observability/public/observability_public_plugins_start.mock.ts +++ b/x-pack/plugins/observability/public/observability_public_plugins_start.mock.ts @@ -40,6 +40,7 @@ const triggersActionsUiStartMock = { getRuleTagBadge: jest.fn(), getRuleStatusFilter: jest.fn(), getRuleTagFilter: jest.fn(), + getRulesList: jest.fn(), ruleTypeRegistry: { has: jest.fn(), register: jest.fn(), diff --git a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx index 04519b5f5e7fe..92e19a28e3803 100644 --- a/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx +++ b/x-pack/plugins/observability/public/pages/overview/overview.stories.tsx @@ -84,7 +84,6 @@ const withCore = makeDecorator({ } as unknown as AppMountParameters, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, - kibanaFeatures: [], }} > {storyFn(context) as ReactNode} diff --git a/x-pack/plugins/observability/public/pages/rules/components/center_justified_spinner.tsx b/x-pack/plugins/observability/public/pages/rule_details/components/center_justified_spinner.tsx similarity index 100% rename from x-pack/plugins/observability/public/pages/rules/components/center_justified_spinner.tsx rename to x-pack/plugins/observability/public/pages/rule_details/components/center_justified_spinner.tsx diff --git a/x-pack/plugins/observability/public/pages/rules/components/delete_modal_confirmation.tsx b/x-pack/plugins/observability/public/pages/rule_details/components/delete_modal_confirmation.tsx similarity index 100% rename from x-pack/plugins/observability/public/pages/rules/components/delete_modal_confirmation.tsx rename to x-pack/plugins/observability/public/pages/rule_details/components/delete_modal_confirmation.tsx diff --git a/x-pack/plugins/observability/public/pages/rule_details/components/page_title.tsx b/x-pack/plugins/observability/public/pages/rule_details/components/page_title.tsx index b44eb99e44a3d..d0ad5bbc18891 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/components/page_title.tsx +++ b/x-pack/plugins/observability/public/pages/rule_details/components/page_title.tsx @@ -10,7 +10,7 @@ import { EuiText, EuiFlexGroup, EuiFlexItem, EuiBadge, EuiSpacer } from '@elasti import { PageHeaderProps } from '../types'; import { useKibana } from '../../../utils/kibana_react'; import { LAST_UPDATED_MESSAGE, CREATED_WORD, BY_WORD, ON_WORD } from '../translations'; -import { getHealthColor } from '../../rules/config'; +import { getHealthColor } from '../config'; export function PageTitle({ rule }: PageHeaderProps) { const { triggersActionsUi } = useKibana().services; diff --git a/x-pack/plugins/observability/public/pages/rule_details/config.ts b/x-pack/plugins/observability/public/pages/rule_details/config.ts index 85359447b520e..410c893aba7a3 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/config.ts +++ b/x-pack/plugins/observability/public/pages/rule_details/config.ts @@ -7,18 +7,6 @@ import { RuleExecutionStatuses } from '@kbn/alerting-plugin/common'; import { RuleType, Rule } from '@kbn/triggers-actions-ui-plugin/public'; -type Capabilities = Record; - -export type InitialRule = Partial & - Pick; - -export function hasAllPrivilege(rule: InitialRule, ruleType?: RuleType): boolean { - return ruleType?.authorizedConsumers[rule.consumer]?.all ?? false; -} - -export const hasExecuteActionsCapability = (capabilities: Capabilities) => - capabilities?.actions?.execute; - export function getHealthColor(status: RuleExecutionStatuses) { switch (status) { case 'active': @@ -33,3 +21,15 @@ export function getHealthColor(status: RuleExecutionStatuses) { return 'subdued'; } } + +type Capabilities = Record; + +export type InitialRule = Partial & + Pick; + +export function hasAllPrivilege(rule: InitialRule, ruleType?: RuleType): boolean { + return ruleType?.authorizedConsumers[rule.consumer]?.all ?? false; +} + +export const hasExecuteActionsCapability = (capabilities: Capabilities) => + capabilities?.actions?.execute; diff --git a/x-pack/plugins/observability/public/pages/rule_details/index.tsx b/x-pack/plugins/observability/public/pages/rule_details/index.tsx index e0ac4156ae099..fe6439f718ab0 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/index.tsx +++ b/x-pack/plugins/observability/public/pages/rule_details/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useState, useEffect, useCallback, useRef } from 'react'; +import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react'; import { useParams } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; import { @@ -39,9 +39,8 @@ import { import { ALERTS_FEATURE_ID, RuleExecutionStatusErrorReasons } from '@kbn/alerting-plugin/common'; import { AlertConsumers } from '@kbn/rule-data-utils'; import { RuleDefinitionProps } from '@kbn/triggers-actions-ui-plugin/public'; -import { DeleteModalConfirmation } from '../rules/components/delete_modal_confirmation'; -import { CenterJustifiedSpinner } from '../rules/components/center_justified_spinner'; -import { OBSERVABILITY_SOLUTIONS } from '../rules/config'; +import { DeleteModalConfirmation } from './components/delete_modal_confirmation'; +import { CenterJustifiedSpinner } from './components/center_justified_spinner'; import { RuleDetailsPathParams, EVENT_LOG_LIST_TAB, ALERT_LIST_TAB } from './types'; import { useBreadcrumbs } from '../../hooks/use_breadcrumbs'; import { usePluginContext } from '../../hooks/use_plugin_context'; @@ -73,10 +72,16 @@ export function RuleDetailsPage() { } = useKibana().services; const { ruleId } = useParams(); - const { ObservabilityPageTemplate } = usePluginContext(); + const { ObservabilityPageTemplate, observabilityRuleTypeRegistry } = usePluginContext(); + + const filteredRuleTypes = useMemo( + () => observabilityRuleTypeRegistry.list(), + [observabilityRuleTypeRegistry] + ); + const { isRuleLoading, rule, errorRule, reloadRule } = useFetchRule({ ruleId, http }); const { ruleTypes } = useLoadRuleTypes({ - filteredSolutions: OBSERVABILITY_SOLUTIONS, + filteredRuleTypes, }); const [features, setFeatures] = useState(''); const [ruleType, setRuleType] = useState>(); @@ -327,7 +332,11 @@ export function RuleDetailsPage() { })} {/* Right side of Rule Summary */} - {getRuleDefinition({ rule, onEditRule: () => reloadRule() } as RuleDefinitionProps)} + {getRuleDefinition({ + filteredRuleTypes, + rule, + onEditRule: () => reloadRule(), + } as RuleDefinitionProps)} diff --git a/x-pack/plugins/observability/public/pages/rule_details/translations.ts b/x-pack/plugins/observability/public/pages/rule_details/translations.ts index 9efd05a549ec4..e30178e15cf47 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/translations.ts +++ b/x-pack/plugins/observability/public/pages/rule_details/translations.ts @@ -41,6 +41,52 @@ export const CREATED_WORD = i18n.translate('xpack.observability.ruleDetails.crea defaultMessage: 'Created', }); +export const confirmModalText = ( + numIdsToDelete: number, + singleTitle: string, + multipleTitle: string +) => + i18n.translate('xpack.observability.rules.deleteSelectedIdsConfirmModal.descriptionText', { + defaultMessage: + "You can't recover {numIdsToDelete, plural, one {a deleted {singleTitle}} other {deleted {multipleTitle}}}.", + values: { numIdsToDelete, singleTitle, multipleTitle }, + }); + +export const confirmButtonText = ( + numIdsToDelete: number, + singleTitle: string, + multipleTitle: string +) => + i18n.translate('xpack.observability.rules.deleteSelectedIdsConfirmModal.deleteButtonLabel', { + defaultMessage: + 'Delete {numIdsToDelete, plural, one {{singleTitle}} other {# {multipleTitle}}} ', + values: { numIdsToDelete, singleTitle, multipleTitle }, + }); + +export const cancelButtonText = i18n.translate( + 'xpack.observability.rules.deleteSelectedIdsConfirmModal.cancelButtonLabel', + { + defaultMessage: 'Cancel', + } +); + +export const deleteSuccessText = ( + numSuccesses: number, + singleTitle: string, + multipleTitle: string +) => + i18n.translate('xpack.observability.rules.deleteSelectedIdsSuccessNotification.descriptionText', { + defaultMessage: + 'Deleted {numSuccesses, number} {numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}}', + values: { numSuccesses, singleTitle, multipleTitle }, + }); + +export const deleteErrorText = (numErrors: number, singleTitle: string, multipleTitle: string) => + i18n.translate('xpack.observability.rules.deleteSelectedIdsErrorNotification.descriptionText', { + defaultMessage: + 'Failed to delete {numErrors, number} {numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}', + values: { numErrors, singleTitle, multipleTitle }, + }); export const ALERT_STATUS_LICENSE_ERROR = i18n.translate( 'xpack.observability.ruleDetails.ruleStatusLicenseError', { diff --git a/x-pack/plugins/observability/public/pages/rules/components/edit_rule_flyout.tsx b/x-pack/plugins/observability/public/pages/rules/components/edit_rule_flyout.tsx deleted file mode 100644 index 89dce3e1975fd..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/edit_rule_flyout.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useState, useMemo, useEffect } from 'react'; -import { useKibana } from '../../../utils/kibana_react'; -import { EditFlyoutProps } from '../types'; - -export function EditRuleFlyout({ currentRule, onSave }: EditFlyoutProps) { - const { triggersActionsUi } = useKibana().services; - const [editFlyoutVisible, setEditFlyoutVisibility] = useState(false); - - useEffect(() => { - setEditFlyoutVisibility(true); - }, [currentRule]); - const EditAlertFlyout = useMemo( - () => - triggersActionsUi.getEditAlertFlyout({ - initialRule: currentRule, - onClose: () => { - setEditFlyoutVisibility(false); - }, - onSave, - }), - [currentRule, setEditFlyoutVisibility, triggersActionsUi, onSave] - ); - return <>{editFlyoutVisible && EditAlertFlyout}; -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/execution_status.tsx b/x-pack/plugins/observability/public/pages/rules/components/execution_status.tsx deleted file mode 100644 index c0c7413aa9c15..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/execution_status.tsx +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useState } from 'react'; -import { EuiHealth, EuiToolTip, EuiFlexGroup, EuiFlexItem, EuiButtonEmpty } from '@elastic/eui'; -import { RuleExecutionStatusErrorReasons } from '@kbn/alerting-plugin/common'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { ManageLicenseModal } from './manage_license_model'; -import { getHealthColor, rulesStatusesTranslationsMapping } from '../config'; -import { RULE_STATUS_LICENSE_ERROR } from '../translations'; -import { ExecutionStatusProps } from '../types'; -import { useKibana } from '../../../utils/kibana_react'; - -export function ExecutionStatus({ executionStatus, item, licenseType }: ExecutionStatusProps) { - const { http } = useKibana().services; - const [manageLicenseModalOpts, setManageLicenseModalOpts] = useState<{ - licenseType: string; - ruleTypeId: string; - } | null>(null); - const healthColor = getHealthColor(executionStatus.status); - const tooltipMessage = - executionStatus.status === 'error' ? `Error: ${executionStatus?.error?.message}` : null; - const isLicenseError = executionStatus.error?.reason === RuleExecutionStatusErrorReasons.License; - const statusMessage = isLicenseError - ? RULE_STATUS_LICENSE_ERROR - : rulesStatusesTranslationsMapping[executionStatus.status]; - - const health = ( - - {statusMessage} - - ); - - const healthWithTooltip = tooltipMessage ? ( - - {health} - - ) : ( - health - ); - - return ( - - {healthWithTooltip} - {isLicenseError && ( - - - setManageLicenseModalOpts({ - licenseType, - ruleTypeId: item.ruleTypeId, - }) - } - > - - - - )} - {manageLicenseModalOpts && ( - { - window.open(`${http.basePath.get()}/app/management/stack/license_management`, '_blank'); - setManageLicenseModalOpts(null); - }} - onCancel={() => setManageLicenseModalOpts(null)} - /> - )} - - ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/last_response_filter.tsx b/x-pack/plugins/observability/public/pages/rules/components/last_response_filter.tsx deleted file mode 100644 index f74c56f7f2792..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/last_response_filter.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -/* eslint-disable react/function-component-definition */ - -import React, { useEffect, useState } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - EuiFilterGroup, - EuiPopover, - EuiFilterButton, - EuiFilterSelectItem, - EuiHealth, -} from '@elastic/eui'; -import { RuleExecutionStatuses, RuleExecutionStatusValues } from '@kbn/alerting-plugin/common'; -import { getHealthColor, rulesStatusesTranslationsMapping } from '../config'; -import { LastResponseFilterProps } from '../types'; - -export const LastResponseFilter: React.FunctionComponent = ({ - selectedStatuses, - onChange, -}: LastResponseFilterProps) => { - const [selectedValues, setSelectedValues] = useState(selectedStatuses); - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - - useEffect(() => { - if (onChange) { - onChange(selectedValues); - } - }, [selectedValues, onChange]); - - useEffect(() => { - setSelectedValues(selectedStatuses); - }, [selectedStatuses]); - - return ( - - setIsPopoverOpen(false)} - button={ - 0} - numActiveFilters={selectedValues.length} - numFilters={selectedValues.length} - onClick={() => setIsPopoverOpen(!isPopoverOpen)} - data-test-subj="ruleStatusFilterButton" - > - - - } - > -
- {[...RuleExecutionStatusValues].sort().map((item: RuleExecutionStatuses) => { - const healthColor = getHealthColor(item); - return ( - { - const isPreviouslyChecked = selectedValues.includes(item); - if (isPreviouslyChecked) { - setSelectedValues(selectedValues.filter((val) => val !== item)); - } else { - setSelectedValues(selectedValues.concat(item)); - } - }} - checked={selectedValues.includes(item) ? 'on' : undefined} - data-test-subj={`ruleStatus${item}FilerOption`} - > - {rulesStatusesTranslationsMapping[item]} - - ); - })} -
-
-
- ); -}; diff --git a/x-pack/plugins/observability/public/pages/rules/components/last_run.tsx b/x-pack/plugins/observability/public/pages/rules/components/last_run.tsx deleted file mode 100644 index 08bb6fb229b94..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/last_run.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; -import moment from 'moment'; -import { LastRunProps } from '../types'; - -export function LastRun({ date }: LastRunProps) { - return ( - <> - - - - {moment(date).fromNow()} - - - - - ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/manage_license_model.tsx b/x-pack/plugins/observability/public/pages/rules/components/manage_license_model.tsx deleted file mode 100644 index e273c7d5a3044..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/manage_license_model.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiConfirmModal } from '@elastic/eui'; -import { capitalize } from 'lodash'; - -interface Props { - licenseType: string; - ruleTypeId: string; - onConfirm: () => void; - onCancel: () => void; -} - -export function ManageLicenseModal({ licenseType, ruleTypeId, onConfirm, onCancel }: Props) { - const licenseRequired = capitalize(licenseType); - return ( - -

- -

-
- ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/name.tsx b/x-pack/plugins/observability/public/pages/rules/components/name.tsx deleted file mode 100644 index 96418758df0a5..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/name.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiText } from '@elastic/eui'; -import { RuleNameProps } from '../types'; -import { useKibana } from '../../../utils/kibana_react'; -import { paths } from '../../../config/paths'; - -export function Name({ name, rule }: RuleNameProps) { - const { http } = useKibana().services; - const detailsLink = http.basePath.prepend(paths.observability.ruleDetails(rule.id)); - const link = ( - - - - - - {name} - - - - - - - {rule.ruleType} - - - - ); - return <>{link}; -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/prompts/no_data_prompt.tsx b/x-pack/plugins/observability/public/pages/rules/components/prompts/no_data_prompt.tsx deleted file mode 100644 index bacc311357fd7..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/prompts/no_data_prompt.tsx +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FormattedMessage } from '@kbn/i18n-react'; -import React from 'react'; -import { EuiButton, EuiEmptyPrompt, EuiLink, EuiButtonEmpty, EuiPageTemplate } from '@elastic/eui'; - -export function NoDataPrompt({ - onCTAClicked, - documentationLink, -}: { - onCTAClicked: () => void; - documentationLink: string; -}) { - return ( - - - - - } - body={ -

- -

- } - actions={[ - - - , - - - Documentation - - , - ]} - /> -
- ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/prompts/no_permission_prompt.tsx b/x-pack/plugins/observability/public/pages/rules/components/prompts/no_permission_prompt.tsx deleted file mode 100644 index b32952bbc18d4..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/prompts/no_permission_prompt.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FormattedMessage } from '@kbn/i18n-react'; -import React from 'react'; -import { EuiEmptyPrompt, EuiPageTemplate } from '@elastic/eui'; - -export function NoPermissionPrompt() { - return ( - - - - - } - body={ -

- -

- } - /> -
- ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/rules_table.tsx b/x-pack/plugins/observability/public/pages/rules/components/rules_table.tsx deleted file mode 100644 index 7a860b4fc7f2f..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/rules_table.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React, { useCallback } from 'react'; -import { EuiBasicTable, EuiSpacer, EuiTableSortingType } from '@elastic/eui'; -import { RuleTableItem } from '@kbn/triggers-actions-ui-plugin/public'; -import { RulesTableProps } from '../types'; - -export interface Pagination { - index: number; - size: number; -} - -export function RulesTable({ - columns, - rules, - page, - totalItemCount, - onPageChange, - sort, - onSortChange, - isLoading, -}: RulesTableProps) { - const onChange = useCallback( - ({ - page: changedPage, - sort: changedSort, - }: { - page?: Pagination; - sort?: EuiTableSortingType['sort']; - }) => { - if (changedPage) { - onPageChange(changedPage); - } - if (changedSort) { - onSortChange(changedSort); - } - }, - [onPageChange, onSortChange] - ); - return ( -
- - <> - - - - -
- ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/components/type_filter.tsx b/x-pack/plugins/observability/public/pages/rules/components/type_filter.tsx deleted file mode 100644 index 5f4d4666002b5..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/components/type_filter.tsx +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { Fragment, useEffect, useState } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - EuiFilterGroup, - EuiPopover, - EuiFilterButton, - EuiFilterSelectItem, - EuiTitle, -} from '@elastic/eui'; - -interface TypeFilterProps { - options: Array<{ - groupName: string; - subOptions: Array<{ - value: string; - name: string; - }>; - }>; - onChange?: (selectedTags: string[]) => void; -} - -export function TypeFilter({ options, onChange }: TypeFilterProps) { - const [selectedValues, setSelectedValues] = useState([]); - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - - useEffect(() => { - if (onChange) { - onChange(selectedValues); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedValues]); - - return ( - - setIsPopoverOpen(false)} - button={ - 0} - numActiveFilters={selectedValues.length} - numFilters={selectedValues.length} - onClick={() => setIsPopoverOpen(!isPopoverOpen)} - data-test-subj="ruleTypeFilterButton" - > - - - } - > -
- {options.map((groupItem, groupIndex) => ( - - -

{groupItem.groupName}

-
- {groupItem.subOptions.map((item, index) => ( - { - const isPreviouslyChecked = selectedValues.includes(item.value); - if (isPreviouslyChecked) { - setSelectedValues(selectedValues.filter((val) => val !== item.value)); - } else { - setSelectedValues(selectedValues.concat(item.value)); - } - }} - checked={selectedValues.includes(item.value) ? 'on' : undefined} - data-test-subj={`ruleType${item.value}FilterOption`} - > - {item.name} - - ))} -
- ))} -
-
-
- ); -} diff --git a/x-pack/plugins/observability/public/pages/rules/config.ts b/x-pack/plugins/observability/public/pages/rules/config.ts index de3ef1219fde7..4a87792c3c602 100644 --- a/x-pack/plugins/observability/public/pages/rules/config.ts +++ b/x-pack/plugins/observability/public/pages/rules/config.ts @@ -5,44 +5,7 @@ * 2.0. */ -import { RuleExecutionStatuses } from '@kbn/alerting-plugin/common'; -import { Rule, RuleTypeIndex, RuleType } from '@kbn/triggers-actions-ui-plugin/public'; -import { - RULE_STATUS_OK, - RULE_STATUS_ACTIVE, - RULE_STATUS_ERROR, - RULE_STATUS_PENDING, - RULE_STATUS_UNKNOWN, - RULE_STATUS_WARNING, -} from './translations'; - -export const DEFAULT_SEARCH_PAGE_SIZE: number = 25; - -export function getHealthColor(status: RuleExecutionStatuses) { - switch (status) { - case 'active': - return 'success'; - case 'error': - return 'danger'; - case 'ok': - return 'primary'; - case 'pending': - return 'accent'; - default: - return 'subdued'; - } -} - -export const rulesStatusesTranslationsMapping = { - ok: RULE_STATUS_OK, - active: RULE_STATUS_ACTIVE, - error: RULE_STATUS_ERROR, - pending: RULE_STATUS_PENDING, - unknown: RULE_STATUS_UNKNOWN, - warning: RULE_STATUS_WARNING, -}; - -export const OBSERVABILITY_SOLUTIONS = ['logs', 'uptime', 'infrastructure', 'apm']; +import { Rule, RuleType } from '@kbn/triggers-actions-ui-plugin/public'; export type InitialRule = Partial & Pick; @@ -50,25 +13,3 @@ export type InitialRule = Partial & export function hasAllPrivilege(rule: InitialRule, ruleType?: RuleType): boolean { return ruleType?.authorizedConsumers[rule.consumer]?.all ?? false; } - -export function convertRulesToTableItems( - rules: Rule[], - ruleTypeIndex: RuleTypeIndex, - canExecuteActions: boolean -) { - return rules.map((rule, index: number) => ({ - ...rule, - index, - actionsCount: rule.actions.length, - ruleType: ruleTypeIndex.get(rule.ruleTypeId)?.name ?? rule.ruleTypeId, - isEditable: - hasAllPrivilege(rule, ruleTypeIndex.get(rule.ruleTypeId)) && - (canExecuteActions || (!canExecuteActions && !rule.actions.length)), - enabledInLicense: !!ruleTypeIndex.get(rule.ruleTypeId)?.enabledInLicense, - })); -} - -type Capabilities = Record; - -export const hasExecuteActionsCapability = (capabilities: Capabilities) => - capabilities?.actions?.execute; diff --git a/x-pack/plugins/observability/public/pages/rules/index.test.tsx b/x-pack/plugins/observability/public/pages/rules/index.test.tsx index cf6fae882cad8..a9bf4aff99a83 100644 --- a/x-pack/plugins/observability/public/pages/rules/index.test.tsx +++ b/x-pack/plugins/observability/public/pages/rules/index.test.tsx @@ -12,15 +12,12 @@ import { ReactWrapper } from 'enzyme'; import { CoreStart } from '@kbn/core/public'; import { ObservabilityPublicPluginsStart } from '../../plugin'; import { RulesPage } from '.'; -import { RulesTable } from './components/rules_table'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; import * as pluginContext from '../../hooks/use_plugin_context'; import { KibanaPageTemplate } from '@kbn/shared-ux-components'; import { createObservabilityRuleTypeRegistryMock } from '../../rules/observability_rule_type_registry_mock'; import { AppMountParameters } from '@kbn/core/public'; import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; -import { RuleState } from './types'; -import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; const mockUseKibanaReturnValue = kibanaStartMock.startContract(); @@ -33,10 +30,6 @@ jest.mock('../../hooks/use_breadcrumbs', () => ({ useBreadcrumbs: jest.fn(), })); -jest.mock('../../hooks/use_fetch_rules', () => ({ - useFetchRules: jest.fn(), -})); - jest.mock('@kbn/triggers-actions-ui-plugin/public', () => ({ useLoadRuleTypes: jest.fn(), })); @@ -50,272 +43,11 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ plugins: {} as ObservabilityPublicPluginsStart, })); -const { useFetchRules } = jest.requireMock('../../hooks/use_fetch_rules'); const { useLoadRuleTypes } = jest.requireMock('@kbn/triggers-actions-ui-plugin/public'); -describe('empty RulesPage', () => { - let wrapper: ReactWrapper; - async function setup() { - const rulesState: RuleState = { - isLoading: false, - data: [], - error: null, - totalItemCount: 0, - }; - - useLoadRuleTypes.mockReturnValue({ - ruleTypes: [ - { - id: 'test_rule_type', - name: 'some rule type', - actionGroups: [{ id: 'default', name: 'Default' }], - recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - actionVariables: { context: [], state: [] }, - defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, - minimumLicenseRequired: 'basic', - enabledInLicense: true, - authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, - }, - ruleTaskTimeout: '1m', - }, - ], - }); - useFetchRules.mockReturnValue({ - rulesState, - noData: true, - tagsState: { data: [], error: null }, - }); - wrapper = mountWithIntl(); - } - it('renders empty screen', async () => { - await setup(); - - await act(async () => { - await nextTick(); - wrapper.update(); - }); - expect(wrapper.find(RulesTable).exists()).toBe(false); - expect(wrapper.find('[data-test-subj="createFirstRuleEmptyPrompt"]').exists()).toBeTruthy(); - }); - it('renders Create rule button', async () => { - await setup(); - expect(wrapper.find('EuiButton[data-test-subj="createFirstRuleButton"]')).toHaveLength(1); - }); - it('renders Documentation link', async () => { - await setup(); - expect(wrapper.find('EuiLink[data-test-subj="documentationLink"]')).toHaveLength(1); - expect( - wrapper.find('EuiLink[data-test-subj="documentationLink"]').getElement().props.href - ).toContain('create-alerts.html'); - }); -}); - -describe('empty RulesPage with show only capability', () => { - let wrapper: ReactWrapper; - async function setup() { - const rulesState: RuleState = { - isLoading: false, - data: [], - error: null, - totalItemCount: 0, - }; - const ruleTypes = [ - { - id: 'test_rule_type', - name: 'some rule type', - actionGroups: [{ id: 'default', name: 'Default' }], - recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - actionVariables: { context: [], state: [] }, - defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, - minimumLicenseRequired: 'basic', - enabledInLicense: true, - authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, - }, - ruleTaskTimeout: '1m', - }, - ]; - useFetchRules.mockReturnValue({ - rulesState, - noData: true, - tagsState: { data: [], error: null }, - }); - useLoadRuleTypes.mockReturnValue({ ruleTypes }); - - wrapper = mountWithIntl(); - } - - it('renders no permission screen', async () => { - await setup(); - - await act(async () => { - await nextTick(); - wrapper.update(); - }); - - expect(wrapper.find('[data-test-subj="noPermissionPrompt"]').exists()).toBeTruthy(); - }); - - it('does not render no data screen', async () => { - await setup(); - - await act(async () => { - await nextTick(); - wrapper.update(); - }); - expect(wrapper.find('[data-test-subj="createFirstRuleEmptyPrompt"]').exists()).toBeFalsy(); - }); -}); - -describe('RulesPage with items', () => { +describe('RulesPage with all capabilities', () => { let wrapper: ReactWrapper; async function setup() { - const mockedRulesData: Rule[] = [ - { - id: '1', - name: 'test rule', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '1s' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'active', - lastDuration: 500, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - }, - monitoring: { - execution: { - history: [ - { - success: true, - duration: 1000000, - timestamp: 1234567, - }, - { - success: true, - duration: 200000, - timestamp: 1234567, - }, - { - success: false, - duration: 300000, - timestamp: 1234567, - }, - ], - calculated_metrics: { - success_ratio: 0.66, - p50: 200000, - p95: 300000, - p99: 300000, - }, - }, - }, - }, - { - id: '2', - name: 'test rule ok', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '5d' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'ok', - lastDuration: 61000, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - error: undefined, - }, - monitoring: { - execution: { - history: [ - { - success: true, - duration: 100000, - timestamp: 1234567, - }, - { - success: true, - duration: 500000, - timestamp: 1234567, - }, - ], - calculated_metrics: { - success_ratio: 1, - p50: 0, - p95: 100000, - p99: 500000, - }, - }, - }, - }, - { - id: '3', - name: 'test rule pending', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '5d' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'pending', - lastDuration: 30234, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - }, - monitoring: { - execution: { - history: [{ success: false, duration: 100, timestamp: 1234567 }], - calculated_metrics: { - success_ratio: 0, - }, - }, - }, - }, - ]; - - const rulesState: RuleState = { - isLoading: false, - data: mockedRulesData, - error: null, - totalItemCount: 3, - }; - const mockedRuleTypeIndex = new Map( Object.entries({ '1': { @@ -347,7 +79,7 @@ describe('RulesPage with items', () => { minimumLicenseRequired: 'basic', enabledInLicense: true, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTS_FEATURE_ID]: { all: true }, }, ruleTaskTimeout: '1m', }, @@ -356,7 +88,6 @@ describe('RulesPage with items', () => { ruleTypes, ruleTypeIndex: mockedRuleTypeIndex, }); - useFetchRules.mockReturnValue({ rulesState, tagsState: { data: [], error: null } }); wrapper = mountWithIntl(); await act(async () => { await nextTick(); @@ -366,155 +97,35 @@ describe('RulesPage with items', () => { it('renders table of rules', async () => { await setup(); - expect(wrapper.find(RulesTable).exists()).toBe(true); + const getRulesList = mockUseKibanaReturnValue.services.triggersActionsUi.getRulesList; + expect(getRulesList).toHaveBeenCalled(); + expect(getRulesList).toHaveBeenCalledWith( + expect.objectContaining({ + showActionFilter: false, + showCreateRuleButton: false, + ruleDetailsRoute: 'alerts/rules/:ruleId', + filteredRuleTypes: ['ruleType1', 'ruleType2'], + rulesListKey: 'observability_rulesListColumns', + visibleColumns: [ + 'ruleName', + 'ruleExecutionStatusLastDate', + 'ruleSnoozeNotify', + 'ruleExecutionStatus', + 'ruleExecutionState', + ], + }) + ); + }); + + it('renders create rule button', async () => { + await setup(); + expect(wrapper.find('[data-test-subj="createRuleButton"]').exists()).toBeTruthy(); }); }); -describe('RulesPage with items and show only capability', () => { +describe('RulesPage with show only capability', () => { let wrapper: ReactWrapper; async function setup() { - const mockedRulesData: Rule[] = [ - { - id: '1', - name: 'test rule', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '1s' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'active', - lastDuration: 500, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - }, - monitoring: { - execution: { - history: [ - { - success: true, - duration: 1000000, - timestamp: 1234567, - }, - { - success: true, - duration: 200000, - timestamp: 1234567, - }, - { - success: false, - duration: 300000, - timestamp: 1234567, - }, - ], - calculated_metrics: { - success_ratio: 0.66, - p50: 200000, - p95: 300000, - p99: 300000, - }, - }, - }, - }, - { - id: '2', - name: 'test rule ok', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '5d' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'ok', - lastDuration: 61000, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - }, - monitoring: { - execution: { - history: [ - { - success: true, - duration: 100000, - timestamp: 1234567, - }, - { - success: true, - duration: 500000, - timestamp: 1234567, - }, - ], - calculated_metrics: { - success_ratio: 1, - p50: 0, - p95: 100000, - p99: 500000, - }, - }, - }, - }, - { - id: '3', - name: 'test rule pending', - tags: ['tag1'], - enabled: true, - ruleTypeId: 'test_rule_type', - schedule: { interval: '5d' }, - actions: [], - params: { name: 'test rule type name' }, - createdBy: null, - updatedBy: null, - apiKeyOwner: null, - throttle: '1m', - muteAll: false, - mutedInstanceIds: [], - createdAt: new Date(), - updatedAt: new Date(), - consumer: 'alerts', - notifyWhen: 'onActiveAlert', - executionStatus: { - status: 'pending', - lastDuration: 30234, - lastExecutionDate: new Date('2020-08-20T19:23:38Z'), - }, - monitoring: { - execution: { - history: [{ success: false, duration: 100, timestamp: 1234567 }], - calculated_metrics: { - success_ratio: 0, - }, - }, - }, - }, - ]; - const rulesState: RuleState = { - isLoading: false, - data: mockedRulesData, - error: null, - totalItemCount: 3, - }; - useFetchRules.mockReturnValue({ rulesState, tagsState: { data: [], error: null } }); - const mockedRuleTypeIndex = new Map( Object.entries({ '1': { @@ -558,6 +169,6 @@ describe('RulesPage with items and show only capability', () => { it('does not render create rule button', async () => { await setup(); - expect(wrapper.find('[data-test-subj="createRuleButton"]')).toHaveLength(0); + expect(wrapper.find('[data-test-subj="createRuleButton"]').exists()).toBeFalsy(); }); }); diff --git a/x-pack/plugins/observability/public/pages/rules/index.tsx b/x-pack/plugins/observability/public/pages/rules/index.tsx index 43d98bb1b91b8..61b9d5d3ae3ba 100644 --- a/x-pack/plugins/observability/public/pages/rules/index.tsx +++ b/x-pack/plugins/observability/public/pages/rules/index.tsx @@ -5,153 +5,49 @@ * 2.0. */ -import React, { useState, useMemo, useCallback, useEffect } from 'react'; -import { capitalize, sortBy } from 'lodash'; -import { - EuiButton, - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiButtonEmpty, - EuiText, - EuiHorizontalRule, - EuiTableSortingType, - EuiFieldSearch, -} from '@elastic/eui'; +import React, { useState, useMemo } from 'react'; +import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiButtonEmpty } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { - deleteRules, - RuleTableItem, - RuleStatus, - enableRule, - disableRule, - snoozeRule, - useLoadRuleTypes, - unsnoozeRule, -} from '@kbn/triggers-actions-ui-plugin/public'; -import { RuleExecutionStatus, ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { useLoadRuleTypes } from '@kbn/triggers-actions-ui-plugin/public'; +import type { RulesListVisibleColumns } from '@kbn/triggers-actions-ui-plugin/public'; +import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; + import { usePluginContext } from '../../hooks/use_plugin_context'; import { Provider, rulesPageStateContainer, useRulesPageStateContainer } from './state_container'; import { useBreadcrumbs } from '../../hooks/use_breadcrumbs'; import { useKibana } from '../../utils/kibana_react'; -import { useFetchRules } from '../../hooks/use_fetch_rules'; -import { RulesTable } from './components/rules_table'; -import { Name } from './components/name'; -import { LastResponseFilter } from './components/last_response_filter'; -import { TypeFilter } from './components/type_filter'; -import { ExecutionStatus } from './components/execution_status'; -import { LastRun } from './components/last_run'; -import { EditRuleFlyout } from './components/edit_rule_flyout'; -import { DeleteModalConfirmation } from './components/delete_modal_confirmation'; -import { NoDataPrompt } from './components/prompts/no_data_prompt'; -import { NoPermissionPrompt } from './components/prompts/no_permission_prompt'; -import { CenterJustifiedSpinner } from './components/center_justified_spinner'; -import { Pagination } from './types'; -import { - DEFAULT_SEARCH_PAGE_SIZE, - convertRulesToTableItems, - OBSERVABILITY_SOLUTIONS, - hasExecuteActionsCapability, -} from './config'; -import { - LAST_RESPONSE_COLUMN_TITLE, - LAST_RUN_COLUMN_TITLE, - RULE_COLUMN_TITLE, - STATUS_COLUMN_TITLE, - ACTIONS_COLUMN_TITLE, - EDIT_ACTION_ARIA_LABEL, - EDIT_ACTION_TOOLTIP, - DELETE_ACTION_TOOLTIP, - DELETE_ACTION_ARIA_LABEL, - RULES_PAGE_TITLE, - RULES_BREADCRUMB_TEXT, - RULES_SINGLE_TITLE, - RULES_PLURAL_TITLE, - SEARCH_PLACEHOLDER, -} from './translations'; -const ENTER_KEY = 13; +import { RULES_PAGE_TITLE, RULES_BREADCRUMB_TEXT } from './translations'; -function RulesPage() { - const { ObservabilityPageTemplate, kibanaFeatures } = usePluginContext(); - const { - http, - docLinks, - triggersActionsUi, - application: { capabilities }, - notifications: { toasts }, - } = useKibana().services; - const documentationLink = docLinks.links.observability.createAlerts; - const ruleTypeRegistry = triggersActionsUi.ruleTypeRegistry; - const canExecuteActions = hasExecuteActionsCapability(capabilities); - const [page, setPage] = useState({ index: 0, size: DEFAULT_SEARCH_PAGE_SIZE }); - const [sort, setSort] = useState['sort']>({ - field: 'name', - direction: 'asc', - }); - const [inputText, setInputText] = useState(); - const [searchText, setSearchText] = useState(); - const [tagsFilter, setTagsFilter] = useState([]); - const [typesFilter, setTypesFilter] = useState([]); - const { lastResponse, setLastResponse } = useRulesPageStateContainer(); - const { status, setStatus } = useRulesPageStateContainer(); - const [currentRuleToEdit, setCurrentRuleToEdit] = useState(null); - const [rulesToDelete, setRulesToDelete] = useState([]); - const [createRuleFlyoutVisibility, setCreateRuleFlyoutVisibility] = useState(false); - const [tagPopoverOpenIndex, setTagPopoverOpenIndex] = useState(-1); +const RULES_LIST_COLUMNS_KEY = 'observability_rulesListColumns'; +const RULES_LIST_COLUMNS: RulesListVisibleColumns[] = [ + 'ruleName', + 'ruleExecutionStatusLastDate', + 'ruleSnoozeNotify', + 'ruleExecutionStatus', + 'ruleExecutionState', +]; - const isRuleTypeEditableInContext = (ruleTypeId: string) => - ruleTypeRegistry.has(ruleTypeId) ? !ruleTypeRegistry.get(ruleTypeId).requiresAppContext : false; +function RulesPage() { + const { ObservabilityPageTemplate, observabilityRuleTypeRegistry } = usePluginContext(); + const { http, docLinks, triggersActionsUi } = useKibana().services; - const onRuleEdit = (ruleItem: RuleTableItem) => { - setCurrentRuleToEdit(ruleItem); - }; + const documentationLink = docLinks.links.observability.createAlerts; - const { rulesState, setRulesState, reload, noData, initialLoad, tagsState } = useFetchRules({ - searchText, - ruleLastResponseFilter: lastResponse, - ruleStatusesFilter: status, - typesFilter, - tagsFilter, - page, - setPage, - sort, - }); - const { data: rules, totalItemCount, error } = rulesState; - const { data: tags, error: tagsError } = tagsState; + const filteredRuleTypes = useMemo( + () => observabilityRuleTypeRegistry.list(), + [observabilityRuleTypeRegistry] + ); - const { ruleTypeIndex, ruleTypes } = useLoadRuleTypes({ - filteredSolutions: OBSERVABILITY_SOLUTIONS, + const { status, setStatus, lastResponse, setLastResponse } = useRulesPageStateContainer(); + const [createRuleFlyoutVisibility, setCreateRuleFlyoutVisibility] = useState(false); + const [refresh, setRefresh] = useState(new Date()); + const { ruleTypes } = useLoadRuleTypes({ + filteredRuleTypes, }); const authorizedRuleTypes = [...ruleTypes.values()]; - const getProducerFeatureName = (producer: string) => { - return kibanaFeatures?.find((featureItem) => featureItem.id === producer)?.name; - }; - - const groupRuleTypesByProducer = () => { - return authorizedRuleTypes.reduce( - ( - result: Record< - string, - Array<{ - value: string; - name: string; - }> - >, - ruleType - ) => { - const producer = ruleType.producer; - (result[producer] = result[producer] || []).push({ - value: ruleType.id, - name: ruleType.name, - }); - return result; - }, - {} - ); - }; const authorizedToCreateAnyRules = authorizedRuleTypes.some( (ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.all ); @@ -168,276 +64,54 @@ function RulesPage() { }, ]); - useEffect(() => { - if (tagsError) { - toasts.addDanger({ - title: tagsError, - }); - } - if (error) - toasts.addDanger({ - title: error, - }); - }, [tagsError, error, toasts]); - - const getRulesTableColumns = () => { - return [ - { - field: 'name', - name: RULE_COLUMN_TITLE, - sortable: true, - truncateText: true, - width: '30%', - 'data-test-subj': 'rulesTableCell-name', - render: (name: string, rule: RuleTableItem) => , - }, - { - field: 'tags', - name: '', - sortable: false, - width: '50px', - 'data-test-subj': 'rulesTableCell-tagsPopover', - render: (ruleTags: string[], item: RuleTableItem) => { - return ruleTags.length > 0 - ? triggersActionsUi.getRuleTagBadge<'default'>({ - isOpen: tagPopoverOpenIndex === item.index, - tags: ruleTags, - onClick: () => setTagPopoverOpenIndex(item.index), - onClose: () => setTagPopoverOpenIndex(-1), - }) - : null; - }, - }, - { - field: 'executionStatus.lastExecutionDate', - name: LAST_RUN_COLUMN_TITLE, - sortable: true, - render: (date: Date) => , - }, - { - field: 'executionStatus.status', - name: LAST_RESPONSE_COLUMN_TITLE, - sortable: true, - truncateText: false, - width: '120px', - 'data-test-subj': 'rulesTableCell-status', - render: (_executionStatus: RuleExecutionStatus, item: RuleTableItem) => ( - - ), - }, - { - field: 'enabled', - name: STATUS_COLUMN_TITLE, - sortable: true, - 'data-test-subj': 'rulesTableCell-ContextStatus', - render: (_enabled: boolean, item: RuleTableItem) => { - return triggersActionsUi.getRuleStatusDropdown({ - rule: item, - enableRule: async () => await enableRule({ http, id: item.id }), - disableRule: async () => await disableRule({ http, id: item.id }), - onRuleChanged: () => reload(), - isEditable: item.isEditable && isRuleTypeEditableInContext(item.ruleTypeId), - snoozeRule: async (snoozeSchedule) => { - await snoozeRule({ http, id: item.id, snoozeSchedule }); - }, - unsnoozeRule: async (scheduleIds) => - await unsnoozeRule({ http, id: item.id, scheduleIds }), - }); - }, - }, - { - name: ACTIONS_COLUMN_TITLE, - width: '10%', - render(item: RuleTableItem) { - return ( - - - - - onRuleEdit(item)} - iconType={'pencil'} - aria-label={EDIT_ACTION_ARIA_LABEL} - /> - - - setRulesToDelete([item.id])} - iconType={'trash'} - aria-label={DELETE_ACTION_ARIA_LABEL} - /> - - - - - ); - }, - }, - ]; - }; - const CreateRuleFlyout = useMemo( () => triggersActionsUi.getAddAlertFlyout({ consumer: ALERTS_FEATURE_ID, onClose: () => { setCreateRuleFlyoutVisibility(false); - reload(); }, - filteredSolutions: OBSERVABILITY_SOLUTIONS, + onSave: () => { + setRefresh(new Date()); + return Promise.resolve(); + }, + filteredRuleTypes, }), // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [filteredRuleTypes] ); - const setRuleStatusFilter = useCallback( - (ids: RuleStatus[]) => { - setStatus(ids); - }, - [setStatus] - ); - - const setExecutionStatusFilter = useCallback( - (ids: string[]) => { - setLastResponse(ids); - }, - [setLastResponse] - ); - - const getRulesTable = () => { - if (noData && !rulesState.isLoading) { - return authorizedToCreateAnyRules ? ( - setCreateRuleFlyoutVisibility(true)} - /> - ) : ( - - ); - } - if (initialLoad) { - return ; - } - + const getRulesTable = useMemo(() => { return ( <> - - - { - setInputText(e.target.value); - if (e.target.value === '') { - setSearchText(e.target.value); - } - }} - onKeyUp={(e) => { - if (e.keyCode === ENTER_KEY) { - setSearchText(inputText); - } - }} - placeholder={SEARCH_PLACEHOLDER} - /> - - - setTypesFilter(types)} - options={sortBy(Object.entries(groupRuleTypesByProducer())).map( - ([groupName, ruleTypesOptions]) => ({ - groupName: getProducerFeatureName(groupName) ?? capitalize(groupName), - subOptions: ruleTypesOptions.sort((a, b) => a.name.localeCompare(b.name)), - }) - )} - /> - - - {triggersActionsUi.getRuleTagFilter({ - tags, - selectedTags: tagsFilter, - onChange: (myTags: string[]) => setTagsFilter(myTags), - })} - - - - - - {triggersActionsUi.getRuleStatusFilter({ - selectedStatuses: status, - onChange: setRuleStatusFilter, - })} - - - - - - - - - - - - - - - - setPage(index)} - sort={sort} - onSortChange={(changedSort) => { - setSort(changedSort); - }} - /> + {triggersActionsUi.getRulesList({ + filteredRuleTypes, + showActionFilter: false, + showCreateRuleButton: false, + ruleDetailsRoute: 'alerts/rules/:ruleId', + statusFilter: status, + onStatusFilterChange: setStatus, + lastResponseFilter: lastResponse, + onLastResponseFilterChange: setLastResponse, + refresh, + rulesListKey: RULES_LIST_COLUMNS_KEY, + visibleColumns: RULES_LIST_COLUMNS, + })} ); - }; + }, [ + triggersActionsUi, + filteredRuleTypes, + status, + setStatus, + lastResponse, + setLastResponse, + refresh, + ]); return ( - { - // a new state that rule is deleted, that's the one - setRulesToDelete([]); - // this should cause the fetcher to reload the rules - reload(); - }} - onErrors={async () => { - // Refresh the rules from the server, some rules may have beend deleted - reload(); - setRulesToDelete([]); - }} - onCancel={() => { - setRulesToDelete([]); - }} - apiDeleteCall={deleteRules} - idsToDelete={rulesToDelete} - singleTitle={RULES_SINGLE_TITLE} - multipleTitle={RULES_PLURAL_TITLE} - setIsLoadingState={(isLoading: boolean) => { - setRulesState({ ...rulesState, isLoading }); - }} - /> - - {getRulesTable()} - {currentRuleToEdit && } + {getRulesTable} {createRuleFlyoutVisibility && CreateRuleFlyout} ); diff --git a/x-pack/plugins/observability/public/pages/rules/translations.ts b/x-pack/plugins/observability/public/pages/rules/translations.ts index 8484637e25e60..3287b7310c94b 100644 --- a/x-pack/plugins/observability/public/pages/rules/translations.ts +++ b/x-pack/plugins/observability/public/pages/rules/translations.ts @@ -60,56 +60,6 @@ export const LAST_RESPONSE_COLUMN_TITLE = i18n.translate( } ); -export const LAST_RUN_COLUMN_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.lastRunTitle', - { - defaultMessage: 'Last run', - } -); - -export const RULE_COLUMN_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.nameTitle', - { - defaultMessage: 'Rule', - } -); - -export const STATUS_COLUMN_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.statusTitle', - { - defaultMessage: 'Status', - } -); - -export const ACTIONS_COLUMN_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.actionsTitle', - { - defaultMessage: 'Actions', - } -); - -export const EDIT_ACTION_ARIA_LABEL = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.editAriaLabel', - { defaultMessage: 'Edit' } -); - -export const EDIT_ACTION_TOOLTIP = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.editButtonTooltip', - { - defaultMessage: 'Edit', - } -); - -export const DELETE_ACTION_TOOLTIP = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.deleteButtonTooltip', - { defaultMessage: 'Delete' } -); - -export const DELETE_ACTION_ARIA_LABEL = i18n.translate( - 'xpack.observability.rules.rulesTable.columns.deleteAriaLabel', - { defaultMessage: 'Delete' } -); - export const RULES_PAGE_TITLE = i18n.translate('xpack.observability.rulesTitle', { defaultMessage: 'Rules', }); @@ -132,75 +82,9 @@ export const RULE_TAGS_LOAD_ERROR = i18n.translate( } ); -export const RULES_SINGLE_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.singleTitle', - { - defaultMessage: 'rule', - } -); - -export const RULES_PLURAL_TITLE = i18n.translate( - 'xpack.observability.rules.rulesTable.pluralTitle', - { - defaultMessage: 'rules', - } -); - -export const SEARCH_PLACEHOLDER = i18n.translate( - 'xpack.observability.rules.searchPlaceholderTitle', - { defaultMessage: 'Search' } -); - export const RULES_CHANGE_STATUS = i18n.translate( 'xpack.observability.rules.rulesTable.changeStatusAriaLabel', { defaultMessage: 'Change status', } ); - -export const confirmModalText = ( - numIdsToDelete: number, - singleTitle: string, - multipleTitle: string -) => - i18n.translate('xpack.observability.rules.deleteSelectedIdsConfirmModal.descriptionText', { - defaultMessage: - "You can't recover {numIdsToDelete, plural, one {a deleted {singleTitle}} other {deleted {multipleTitle}}}.", - values: { numIdsToDelete, singleTitle, multipleTitle }, - }); - -export const confirmButtonText = ( - numIdsToDelete: number, - singleTitle: string, - multipleTitle: string -) => - i18n.translate('xpack.observability.rules.deleteSelectedIdsConfirmModal.deleteButtonLabel', { - defaultMessage: - 'Delete {numIdsToDelete, plural, one {{singleTitle}} other {# {multipleTitle}}} ', - values: { numIdsToDelete, singleTitle, multipleTitle }, - }); - -export const cancelButtonText = i18n.translate( - 'xpack.observability.rules.deleteSelectedIdsConfirmModal.cancelButtonLabel', - { - defaultMessage: 'Cancel', - } -); - -export const deleteSuccessText = ( - numSuccesses: number, - singleTitle: string, - multipleTitle: string -) => - i18n.translate('xpack.observability.rules.deleteSelectedIdsSuccessNotification.descriptionText', { - defaultMessage: - 'Deleted {numSuccesses, number} {numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}}', - values: { numSuccesses, singleTitle, multipleTitle }, - }); - -export const deleteErrorText = (numErrors: number, singleTitle: string, multipleTitle: string) => - i18n.translate('xpack.observability.rules.deleteSelectedIdsErrorNotification.descriptionText', { - defaultMessage: - 'Failed to delete {numErrors, number} {numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}', - values: { numErrors, singleTitle, multipleTitle }, - }); diff --git a/x-pack/plugins/observability/public/pages/rules/types.ts b/x-pack/plugins/observability/public/pages/rules/types.ts deleted file mode 100644 index f7abdc6fd274e..0000000000000 --- a/x-pack/plugins/observability/public/pages/rules/types.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { Dispatch, SetStateAction } from 'react'; -import { EuiTableSortingType, EuiBasicTableColumn } from '@elastic/eui'; -import { RuleExecutionStatus } from '@kbn/alerting-plugin/common'; -import { RuleTableItem, Rule, RuleStatus } from '@kbn/triggers-actions-ui-plugin/public'; - -export interface LastResponseFilterProps { - selectedStatuses: string[]; - onChange?: (selectedRuleStatusesIds: string[]) => void; -} - -export interface ExecutionStatusProps { - executionStatus: RuleExecutionStatus; - item: RuleTableItem; - licenseType: string; -} - -export interface LastRunProps { - date: Date; -} - -export interface RuleNameProps { - name: string; - rule: RuleTableItem; -} - -export interface EditFlyoutProps { - currentRule: RuleTableItem; - onSave: () => Promise; -} - -export interface Pagination { - index: number; - size: number; -} - -export interface FetchRulesProps { - searchText: string | undefined; - ruleLastResponseFilter: string[]; - ruleStatusesFilter: RuleStatus[]; - typesFilter: string[]; - tagsFilter: string[]; - page: Pagination; - setPage: Dispatch>; - sort: EuiTableSortingType['sort']; -} - -export interface RulesTableProps { - columns: Array>; - rules: RuleTableItem[]; - page: Pagination; - totalItemCount: number; - onPageChange: (changedPage: Pagination) => void; - sort: EuiTableSortingType['sort']; - onSortChange: (changedSort: EuiTableSortingType['sort']) => void; - isLoading: boolean; -} - -export interface RuleState { - isLoading: boolean; - data: Rule[]; - error: string | null; - totalItemCount: number; -} - -export interface TagsState { - data: string[]; - error: string | null; -} diff --git a/x-pack/plugins/observability/public/plugin.ts b/x-pack/plugins/observability/public/plugin.ts index 39387b1f65f51..12821c8acb8fd 100644 --- a/x-pack/plugins/observability/public/plugin.ts +++ b/x-pack/plugins/observability/public/plugin.ts @@ -23,7 +23,6 @@ import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plu import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { DiscoverStart } from '@kbn/discover-plugin/public'; import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; -import type { FeaturesPluginStart } from '@kbn/features-plugin/public'; import type { HomePublicPluginSetup, HomePublicPluginStart } from '@kbn/home-plugin/public'; import { CasesDeepLinkId, CasesUiStart, getCasesDeepLinks } from '@kbn/cases-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; @@ -32,9 +31,12 @@ import { TriggersAndActionsUIPublicPluginSetup, TriggersAndActionsUIPublicPluginStart, } from '@kbn/triggers-actions-ui-plugin/public'; -import { KibanaFeature } from '@kbn/features-plugin/common'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; +import { + ActionTypeRegistryContract, + RuleTypeRegistryContract, +} from '@kbn/triggers-actions-ui-plugin/public'; import { observabilityAppId, observabilityFeatureId, casesPath } from '../common'; import { createLazyObservabilityPageTemplate } from './components/shared'; import { registerDataHandler } from './data_handler'; @@ -49,7 +51,6 @@ import { getExploratoryViewEmbeddable } from './components/shared/exploratory_vi import { createExploratoryViewUrl } from './components/shared/exploratory_view/configurations/exploratory_view_url'; import { createUseRulesLink } from './hooks/create_use_rules_link'; import getAppDataView from './utils/observability_data_views/get_app_data_view'; - export type ObservabilityPublicSetup = ReturnType; export interface ObservabilityPublicPluginsSetup { @@ -69,9 +70,9 @@ export interface ObservabilityPublicPluginsStart { dataViews: DataViewsPublicPluginStart; lens: LensPublicStart; discover: DiscoverStart; - features: FeaturesPluginStart; - kibanaFeatures: KibanaFeature[]; sharedUX: SharedUXPluginStart; + ruleTypeRegistry: RuleTypeRegistryContract; + actionTypeRegistry: ActionTypeRegistryContract; } export type ObservabilityPublicStart = ReturnType; @@ -152,23 +153,13 @@ export class Plugin // Get start services const [coreStart, pluginsStart, { navigation }] = await coreSetup.getStartServices(); - // The `/api/features` endpoint requires the "Global All" Kibana privilege. Users with a - // subset of this privilege are not authorized to access this endpoint and will receive a 404 - // error that causes the Alerting view to fail to load. - let kibanaFeatures: KibanaFeature[]; - try { - kibanaFeatures = await pluginsStart.features.getFeatures(); - } catch (err) { - kibanaFeatures = []; - } - + const { ruleTypeRegistry, actionTypeRegistry } = pluginsStart.triggersActionsUi; return renderApp({ core: coreStart, - plugins: pluginsStart, + plugins: { ...pluginsStart, ruleTypeRegistry, actionTypeRegistry }, appMountParameters: params, observabilityRuleTypeRegistry: this.observabilityRuleTypeRegistry, ObservabilityPageTemplate: navigation.PageTemplate, - kibanaFeatures, usageCollection: pluginsSetup.usageCollection, isDev: this.initContext.env.mode.dev, }); diff --git a/x-pack/plugins/observability/public/rules/observability_rule_type_registry_mock.ts b/x-pack/plugins/observability/public/rules/observability_rule_type_registry_mock.ts index ad1fc13b8daf2..4a2f8cfc3ba8c 100644 --- a/x-pack/plugins/observability/public/rules/observability_rule_type_registry_mock.ts +++ b/x-pack/plugins/observability/public/rules/observability_rule_type_registry_mock.ts @@ -10,6 +10,7 @@ import { ObservabilityRuleTypeRegistry } from './create_observability_rule_type_ const createRuleTypeRegistryMock = () => ({ getFormatter: () => () => 'a reason', registerFormatter: () => {}, + list: () => ['ruleType1', 'ruleType2'], }); export const createObservabilityRuleTypeRegistryMock = () => diff --git a/x-pack/plugins/observability/public/utils/test_helper.tsx b/x-pack/plugins/observability/public/utils/test_helper.tsx index 5bcc9a7bf22cb..d262f290d1fe1 100644 --- a/x-pack/plugins/observability/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability/public/utils/test_helper.tsx @@ -35,7 +35,6 @@ export const render = (component: React.ReactNode) => { appMountParameters, observabilityRuleTypeRegistry, ObservabilityPageTemplate: KibanaPageTemplate, - kibanaFeatures: [], }} > {component} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 91b083ebab12e..6f6c0f69142d0 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -22550,30 +22550,9 @@ "xpack.observability.rules.deleteSelectedIdsErrorNotification.descriptionText": "Impossible de supprimer {numErrors, number} {numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}", "xpack.observability.rules.deleteSelectedIdsSuccessNotification.descriptionText": "Suppression de {numSuccesses, number} {numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}} effectuée", "xpack.observability.rules.docsLinkText": "Documentation", - "xpack.observability.rules.emptyPrompt.emptyButton": "Créer une règle", - "xpack.observability.rules.emptyPrompt.emptyTitle": "Créer votre première règle", "xpack.observability.rules.loadError": "Impossible de charger les règles", - "xpack.observability.rules.manageLicense.manageLicenseCancelButtonText": "Annuler", - "xpack.observability.rules.manageLicense.manageLicenseConfirmButtonText": "Gérer la licence", - "xpack.observability.rules.manageLicense.manageLicenseMessage": "Le type de règle {ruleTypeId} est désactivé, car il requiert une licence {licenseRequired}. Continuez vers Gestion des licences pour afficher les options de mise à niveau.", - "xpack.observability.rules.manageLicense.manageLicenseTitle": "Licence {licenseRequired} requise", - "xpack.observability.rules.noDataPrompt.noDataDesc": "Les règles permettent de recevoir des alertes et d'automatiser des actions personnalisées lorsque des conditions spécifiques sont satisfaites.", - "xpack.observability.rules.noPermissionToCreateDescription": "Contactez votre administrateur système.", - "xpack.observability.rules.noPermissionToCreateTitle": "Aucune autorisation pour créer des règles", - "xpack.observability.rules.refreshRulesButtonLabel": "Actualiser", - "xpack.observability.rules.ruleLastResponseFilterLabel": "Dernière réponse", "xpack.observability.rules.rulesTable.changeStatusAriaLabel": "Modifier le statut", - "xpack.observability.rules.rulesTable.columns.actionsTitle": "Actions", - "xpack.observability.rules.rulesTable.columns.deleteAriaLabel": "Supprimer", - "xpack.observability.rules.rulesTable.columns.deleteButtonTooltip": "Supprimer", - "xpack.observability.rules.rulesTable.columns.editAriaLabel": "Modifier", - "xpack.observability.rules.rulesTable.columns.editButtonTooltip": "Modifier", "xpack.observability.rules.rulesTable.columns.lastResponseTitle": "Dernière réponse", - "xpack.observability.rules.rulesTable.columns.lastRunTitle": "Dernière exécution", - "xpack.observability.rules.rulesTable.columns.nameTitle": "Règle", - "xpack.observability.rules.rulesTable.columns.statusTitle": "Statut", - "xpack.observability.rules.rulesTable.fixLicenseLink": "Corriger", - "xpack.observability.rules.rulesTable.pluralTitle": "règles", "xpack.observability.rules.rulesTable.ruleStatusActive": "Actif", "xpack.observability.rules.rulesTable.ruleStatusError": "Erreur", "xpack.observability.rules.rulesTable.ruleStatusLicenseError": "Erreur de licence", @@ -22581,10 +22560,6 @@ "xpack.observability.rules.rulesTable.ruleStatusPending": "En attente", "xpack.observability.rules.rulesTable.ruleStatusUnknown": "Inconnu", "xpack.observability.rules.rulesTable.ruleStatusWarning": "avertissement", - "xpack.observability.rules.rulesTable.singleTitle": "règle", - "xpack.observability.rules.searchPlaceholderTitle": "Recherche", - "xpack.observability.rules.totalItemsCountDescription": "Affichage : {pageSize} sur {totalItemCount} règles", - "xpack.observability.rules.typeFilterLabel": "Type", "xpack.observability.rulesLinkTitle": "Règles", "xpack.observability.rulesList.unableToLoadRuleTags": "Impossible de charger les balises de règle", "xpack.observability.rulesTitle": "Règles", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 3343db31a26d0..556da3313654e 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -22536,30 +22536,9 @@ "xpack.observability.rules.deleteSelectedIdsErrorNotification.descriptionText": "{numErrors, number} {numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}を削除できませんでした", "xpack.observability.rules.deleteSelectedIdsSuccessNotification.descriptionText": "{numSuccesses, number} {numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}}を削除しました", "xpack.observability.rules.docsLinkText": "ドキュメント", - "xpack.observability.rules.emptyPrompt.emptyButton": "ルールの作成", - "xpack.observability.rules.emptyPrompt.emptyTitle": "最初のルールを作成", "xpack.observability.rules.loadError": "ルールを読み込めません", - "xpack.observability.rules.manageLicense.manageLicenseCancelButtonText": "キャンセル", - "xpack.observability.rules.manageLicense.manageLicenseConfirmButtonText": "ライセンスの管理", - "xpack.observability.rules.manageLicense.manageLicenseMessage": "ルールタイプ{ruleTypeId}は無効です。{licenseRequired}ライセンスが必要です。アップグレードオプションを表示するには、[ライセンス管理]に移動してください。", - "xpack.observability.rules.manageLicense.manageLicenseTitle": "{licenseRequired}ライセンスが必要です", - "xpack.observability.rules.noDataPrompt.noDataDesc": "ルールでは、特定の条件が満たされたときに、アラートを受信し、カスタムアクションを自動化できます。", - "xpack.observability.rules.noPermissionToCreateDescription": "システム管理者にお問い合わせください。", - "xpack.observability.rules.noPermissionToCreateTitle": "ルールを作成する権限がありません", - "xpack.observability.rules.refreshRulesButtonLabel": "更新", - "xpack.observability.rules.ruleLastResponseFilterLabel": "前回の応答", "xpack.observability.rules.rulesTable.changeStatusAriaLabel": "ステータスの変更", - "xpack.observability.rules.rulesTable.columns.actionsTitle": "アクション", - "xpack.observability.rules.rulesTable.columns.deleteAriaLabel": "削除", - "xpack.observability.rules.rulesTable.columns.deleteButtonTooltip": "削除", - "xpack.observability.rules.rulesTable.columns.editAriaLabel": "編集", - "xpack.observability.rules.rulesTable.columns.editButtonTooltip": "編集", "xpack.observability.rules.rulesTable.columns.lastResponseTitle": "前回の応答", - "xpack.observability.rules.rulesTable.columns.lastRunTitle": "前回の実行", - "xpack.observability.rules.rulesTable.columns.nameTitle": "ルール", - "xpack.observability.rules.rulesTable.columns.statusTitle": "ステータス", - "xpack.observability.rules.rulesTable.fixLicenseLink": "修正", - "xpack.observability.rules.rulesTable.pluralTitle": "ルール", "xpack.observability.rules.rulesTable.ruleStatusActive": "アクティブ", "xpack.observability.rules.rulesTable.ruleStatusError": "エラー", "xpack.observability.rules.rulesTable.ruleStatusLicenseError": "ライセンスエラー", @@ -22567,10 +22546,6 @@ "xpack.observability.rules.rulesTable.ruleStatusPending": "保留中", "xpack.observability.rules.rulesTable.ruleStatusUnknown": "不明", "xpack.observability.rules.rulesTable.ruleStatusWarning": "警告", - "xpack.observability.rules.rulesTable.singleTitle": "ルール", - "xpack.observability.rules.searchPlaceholderTitle": "検索", - "xpack.observability.rules.totalItemsCountDescription": "{pageSize}/{totalItemCount}件のルールを表示しています", - "xpack.observability.rules.typeFilterLabel": "型", "xpack.observability.rulesLinkTitle": "ルール", "xpack.observability.rulesList.unableToLoadRuleTags": "ルールタグを読み込めません", "xpack.observability.rulesTitle": "ルール", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 2b3f762227154..5d2e780bf0cc7 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -22561,30 +22561,9 @@ "xpack.observability.rules.deleteSelectedIdsConfirmModal.descriptionText": "无法恢复{numIdsToDelete, plural, one {删除的{singleTitle}} other {删除的{multipleTitle}}}。", "xpack.observability.rules.deleteSelectedIdsErrorNotification.descriptionText": "无法删除 {numErrors, number} 个{numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}", "xpack.observability.rules.docsLinkText": "文档", - "xpack.observability.rules.emptyPrompt.emptyButton": "创建规则", - "xpack.observability.rules.emptyPrompt.emptyTitle": "创建您的首个规则", "xpack.observability.rules.loadError": "无法加载规则", - "xpack.observability.rules.manageLicense.manageLicenseCancelButtonText": "取消", - "xpack.observability.rules.manageLicense.manageLicenseConfirmButtonText": "管理许可证", - "xpack.observability.rules.manageLicense.manageLicenseMessage": "规则类型 {ruleTypeId} 已禁用,因为它需要{licenseRequired}许可证。继续前往“许可证管理”查看升级选项。", - "xpack.observability.rules.manageLicense.manageLicenseTitle": "需要{licenseRequired}许可证", - "xpack.observability.rules.noDataPrompt.noDataDesc": "规则允许您接收告警并在满足特定条件时自动完成定制操作。", - "xpack.observability.rules.noPermissionToCreateDescription": "请联系您的系统管理员。", - "xpack.observability.rules.noPermissionToCreateTitle": "没有创建规则的权限", - "xpack.observability.rules.refreshRulesButtonLabel": "刷新", - "xpack.observability.rules.ruleLastResponseFilterLabel": "上次响应", "xpack.observability.rules.rulesTable.changeStatusAriaLabel": "更改状态", - "xpack.observability.rules.rulesTable.columns.actionsTitle": "操作", - "xpack.observability.rules.rulesTable.columns.deleteAriaLabel": "删除", - "xpack.observability.rules.rulesTable.columns.deleteButtonTooltip": "删除", - "xpack.observability.rules.rulesTable.columns.editAriaLabel": "编辑", - "xpack.observability.rules.rulesTable.columns.editButtonTooltip": "编辑", "xpack.observability.rules.rulesTable.columns.lastResponseTitle": "上次响应", - "xpack.observability.rules.rulesTable.columns.lastRunTitle": "上次运行", - "xpack.observability.rules.rulesTable.columns.nameTitle": "规则", - "xpack.observability.rules.rulesTable.columns.statusTitle": "状态", - "xpack.observability.rules.rulesTable.fixLicenseLink": "修复", - "xpack.observability.rules.rulesTable.pluralTitle": "规则", "xpack.observability.rules.rulesTable.ruleStatusActive": "活动", "xpack.observability.rules.rulesTable.ruleStatusError": "错误", "xpack.observability.rules.rulesTable.ruleStatusLicenseError": "许可证错误", @@ -22592,10 +22571,6 @@ "xpack.observability.rules.rulesTable.ruleStatusPending": "待处理", "xpack.observability.rules.rulesTable.ruleStatusUnknown": "未知", "xpack.observability.rules.rulesTable.ruleStatusWarning": "警告", - "xpack.observability.rules.rulesTable.singleTitle": "规则", - "xpack.observability.rules.searchPlaceholderTitle": "搜索", - "xpack.observability.rules.totalItemsCountDescription": "正在显示:{pageSize} 个规则(共 {totalItemCount} 个)", - "xpack.observability.rules.typeFilterLabel": "类型", "xpack.observability.rulesLinkTitle": "规则", "xpack.observability.rulesList.unableToLoadRuleTags": "无法加载规则标签", "xpack.observability.rulesTitle": "规则", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx index c9f010b2d6a7e..1219ebe81ef25 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx @@ -9,7 +9,13 @@ import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; -export const EmptyPrompt = ({ onCTAClicked }: { onCTAClicked: () => void }) => ( +export const EmptyPrompt = ({ + onCTAClicked, + showCreateRuleButton = true, +}: { + onCTAClicked: () => void; + showCreateRuleButton: boolean; +}) => ( void }) => (

} actions={ - - - + showCreateRuleButton && ( + + + + ) } /> ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_types.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_types.ts index 74f6d9c2197b9..950d29c886f1a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_types.ts @@ -16,10 +16,10 @@ interface RuleTypesState { } interface RuleTypesProps { - filteredSolutions?: string[] | undefined; + filteredRuleTypes?: string[]; } -export function useLoadRuleTypes({ filteredSolutions }: RuleTypesProps) { +export function useLoadRuleTypes({ filteredRuleTypes }: RuleTypesProps) { const { http } = useKibana().services; const isMounted = useRef(false); const [ruleTypesState, setRuleTypesState] = useState({ @@ -42,8 +42,8 @@ export function useLoadRuleTypes({ filteredSolutions }: RuleTypesProps) { let filteredResponse = response; - if (filteredSolutions && filteredSolutions.length > 0) { - filteredResponse = response.filter((item) => filteredSolutions.includes(item.producer)); + if (filteredRuleTypes && filteredRuleTypes.length > 0) { + filteredResponse = response.filter((item) => filteredRuleTypes.includes(item.id)); } setRuleTypesState({ ...ruleTypesState, isLoading: false, data: filteredResponse }); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.test.ts index a309beeca58aa..d69f4b508dcf5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.test.ts @@ -375,4 +375,106 @@ describe('useLoadRules', () => { expect(onError).toBeCalled(); }); + + describe('No data', () => { + it('noData should be true, if there is no Filter and no rules', async () => { + loadRules.mockResolvedValue({ ...MOCK_RULE_DATA, data: [] }); + const params = { + page: { + index: 0, + size: 25, + }, + searchText: '', + typesFilter: [], + actionTypesFilter: [], + ruleExecutionStatusesFilter: [], + ruleStatusesFilter: [], + tagsFilter: [], + }; + + const { result, waitForNextUpdate } = renderHook(() => + useLoadRules({ + ...params, + onPage, + onError, + }) + ); + + expect(result.current.noData).toBeTruthy(); + + await act(async () => { + result.current.loadRules(); + await waitForNextUpdate(); + }); + + expect(result.current.noData).toBeTruthy(); + }); + + it('noData should be false, if there is rule types filter and no rules', async () => { + loadRules.mockResolvedValue({ ...MOCK_RULE_DATA, data: [] }); + const params = { + page: { + index: 0, + size: 25, + }, + searchText: '', + typesFilter: ['some-kind-of-filter'], + actionTypesFilter: [], + ruleExecutionStatusesFilter: [], + ruleStatusesFilter: [], + tagsFilter: [], + }; + + const { result, waitForNextUpdate } = renderHook(() => + useLoadRules({ + ...params, + onPage, + onError, + }) + ); + + expect(result.current.noData).toBeTruthy(); + + await act(async () => { + result.current.loadRules(); + await waitForNextUpdate(); + }); + + expect(result.current.noData).toBeFalsy(); + }); + + it('noData should be true, if there is rule types filter and no rules with hasDefaultRuleTypesFiltersOn = true', async () => { + loadRules.mockResolvedValue({ ...MOCK_RULE_DATA, data: [] }); + const params = { + page: { + index: 0, + size: 25, + }, + searchText: '', + typesFilter: ['some-kind-of-filter'], + actionTypesFilter: [], + ruleExecutionStatusesFilter: [], + ruleStatusesFilter: [], + tagsFilter: [], + hasDefaultRuleTypesFiltersOn: true, + }; + + const { result, waitForNextUpdate } = renderHook(() => + useLoadRules({ + ...params, + onPage, + onError, + }) + ); + + expect(result.current.noData).toBeTruthy(); + + await act(async () => { + result.current.loadRules(); + await waitForNextUpdate(); + }); + + expect(result.current.noData).toBeTruthy(); + }); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.ts index 4afdfd4f26a72..33cee4f2ffa88 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules.ts @@ -18,6 +18,7 @@ interface RuleState { } type UseLoadRulesProps = Omit & { + hasDefaultRuleTypesFiltersOn?: boolean; onPage: (pagination: Pagination) => void; onError: (message: string) => void; }; @@ -92,6 +93,7 @@ export function useLoadRules({ sort, onPage, onError, + hasDefaultRuleTypesFiltersOn = false, }: UseLoadRulesProps) { const { http } = useKibana().services; const [state, dispatch] = useReducer(reducer, initialState); @@ -135,9 +137,10 @@ export function useLoadRules({ onPage({ ...page, index: 0 }); } + const hasEmptyTypesFilter = hasDefaultRuleTypesFiltersOn ? true : isEmpty(typesFilter); const isFilterApplied = !( isEmpty(searchText) && - isEmpty(typesFilter) && + hasEmptyTypesFilter && isEmpty(actionTypesFilter) && isEmpty(ruleExecutionStatusesFilter) && isEmpty(ruleStatusesFilter) && @@ -167,7 +170,7 @@ export function useLoadRules({ ruleStatusesFilter, tagsFilter, sort, - dispatch, + hasDefaultRuleTypesFiltersOn, onPage, onError, ]); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rules_list_sandbox.tsx b/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rules_list_sandbox.tsx index 0083811802955..f7bcb6f5390b9 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rules_list_sandbox.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/internal/shareable_components_sandbox/rules_list_sandbox.tsx @@ -18,6 +18,11 @@ export const RulesListSandbox = () => { } = useConnectorContext(); return ( -
{getRulesListLazy({ connectorServices: { validateEmailAddresses } })}
+
+ {getRulesListLazy({ + connectorServices: { validateEmailAddresses }, + rulesListProps: {}, + })} +
); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.tsx index 7b74e414d200a..b9f8ae9f6b0ee 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.tsx @@ -24,13 +24,12 @@ import { NOTIFY_WHEN_OPTIONS } from '../../rule_form/rule_notify_when'; import { RuleActions } from './rule_actions'; import { RuleEdit } from '../../rule_form'; -const OBSERVABILITY_SOLUTIONS = ['logs', 'uptime', 'infrastructure', 'apm']; - export const RuleDefinition: React.FunctionComponent = ({ rule, actionTypeRegistry, ruleTypeRegistry, onEditRule, + filteredRuleTypes, }) => { const { application: { capabilities }, @@ -39,7 +38,7 @@ export const RuleDefinition: React.FunctionComponent = ({ const [editFlyoutVisible, setEditFlyoutVisible] = useState(false); const [ruleType, setRuleType] = useState(); const { ruleTypes, ruleTypeIndex } = useLoadRuleTypes({ - filteredSolutions: OBSERVABILITY_SOLUTIONS, + filteredRuleTypes, }); const getRuleType = useMemo(() => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx index f89b3f91f150c..914d52de50299 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx @@ -48,7 +48,7 @@ const RuleAdd = ({ reloadRules, onSave, metadata, - filteredSolutions, + filteredRuleTypes, ...props }: RuleAddProps) => { const onSaveHandler = onSave ?? reloadRules; @@ -262,7 +262,7 @@ const RuleAdd = ({ actionTypeRegistry={actionTypeRegistry} ruleTypeRegistry={ruleTypeRegistry} metadata={metadata} - filteredSolutions={filteredSolutions} + filteredRuleTypes={filteredRuleTypes} /> > { setHasActionsDisabled?: (value: boolean) => void; setHasActionsWithBrokenConnector?: (value: boolean) => void; metadata?: MetaData; - filteredSolutions?: string[] | undefined; + filteredRuleTypes?: string[]; } export const RuleForm = ({ @@ -110,7 +110,7 @@ export const RuleForm = ({ ruleTypeRegistry, actionTypeRegistry, metadata, - filteredSolutions, + filteredRuleTypes: ruleTypeToFilter, }: RuleFormProps) => { const { notifications: { toasts }, @@ -163,7 +163,7 @@ export const RuleForm = ({ ruleTypes, error: loadRuleTypesError, ruleTypeIndex, - } = useLoadRuleTypes({ filteredSolutions }); + } = useLoadRuleTypes({ filteredRuleTypes: ruleTypeToFilter }); // load rule types useEffect(() => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx index 88e6006a601e7..e2054ab13cb4c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx @@ -466,6 +466,562 @@ describe.skip('rules_list component empty', () => { }); }); +describe('rules_list component with props', () => { + describe('Status filter', () => { + let wrapper: ReactWrapper; + async function setup(editable: boolean = true) { + loadRules.mockResolvedValue({ + page: 1, + perPage: 10000, + total: 4, + data: mockedRulesData, + }); + loadActionTypes.mockResolvedValue([ + { + id: 'test', + name: 'Test', + }, + { + id: 'test2', + name: 'Test2', + }, + ]); + loadRuleTypes.mockResolvedValue([ruleTypeFromApi]); + loadAllActions.mockResolvedValue([]); + loadRuleAggregations.mockResolvedValue({ + ruleEnabledStatus: { enabled: 2, disabled: 0 }, + ruleExecutionStatus: { ok: 1, active: 2, error: 3, pending: 4, unknown: 5, warning: 6 }, + ruleMutedStatus: { muted: 0, unmuted: 2 }, + ruleTags, + }); + loadRuleTags.mockResolvedValue({ + ruleTags, + }); + + const ruleTypeMock: RuleTypeModel = { + id: 'test_rule_type', + iconClass: 'test', + description: 'Rule when testing', + documentationUrl: 'https://localhost.local/docs', + validate: () => { + return { errors: {} }; + }, + ruleParamsExpression: jest.fn(), + requiresAppContext: !editable, + }; + + ruleTypeRegistry.has.mockReturnValue(true); + ruleTypeRegistry.get.mockReturnValue(ruleTypeMock); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.ruleTypeRegistry = ruleTypeRegistry; + + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + wrapper = mountWithIntl( + + ); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(loadRules).toHaveBeenCalled(); + expect(loadActionTypes).toHaveBeenCalled(); + expect(loadRuleAggregations).toHaveBeenCalled(); + } + it('can filter by rule states', async () => { + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + + expect(loadRules).toHaveBeenLastCalledWith( + expect.objectContaining({ + ruleStatusesFilter: ['disabled'], + }) + ); + + wrapper.find('[data-test-subj="ruleStatusFilterButton"] button').simulate('click'); + + wrapper.find('[data-test-subj="ruleStatusFilterOption-enabled"]').first().simulate('click'); + + expect(loadRules).toHaveBeenLastCalledWith( + expect.objectContaining({ + ruleStatusesFilter: ['disabled', 'enabled'], + }) + ); + + expect(wrapper.prop('onStatusFilterChange')).toHaveBeenCalled(); + expect(wrapper.prop('onStatusFilterChange')).toHaveBeenLastCalledWith([ + 'disabled', + 'enabled', + ]); + }); + }); + + describe('Last response filter', () => { + let wrapper: ReactWrapper; + async function setup(editable: boolean = true) { + loadRules.mockResolvedValue({ + page: 1, + perPage: 10000, + total: 4, + data: mockedRulesData, + }); + loadActionTypes.mockResolvedValue([ + { + id: 'test', + name: 'Test', + }, + { + id: 'test2', + name: 'Test2', + }, + ]); + loadRuleTypes.mockResolvedValue([ruleTypeFromApi]); + loadAllActions.mockResolvedValue([]); + loadRuleAggregations.mockResolvedValue({ + ruleEnabledStatus: { enabled: 2, disabled: 0 }, + ruleExecutionStatus: { ok: 1, active: 2, error: 3, pending: 4, unknown: 5, warning: 6 }, + ruleMutedStatus: { muted: 0, unmuted: 2 }, + ruleTags, + }); + loadRuleTags.mockResolvedValue({ + ruleTags, + }); + + const ruleTypeMock: RuleTypeModel = { + id: 'test_rule_type', + iconClass: 'test', + description: 'Rule when testing', + documentationUrl: 'https://localhost.local/docs', + validate: () => { + return { errors: {} }; + }, + ruleParamsExpression: jest.fn(), + requiresAppContext: !editable, + }; + + ruleTypeRegistry.has.mockReturnValue(true); + ruleTypeRegistry.get.mockReturnValue(ruleTypeMock); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.ruleTypeRegistry = ruleTypeRegistry; + + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + wrapper = mountWithIntl( + + ); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(loadRules).toHaveBeenCalled(); + expect(loadActionTypes).toHaveBeenCalled(); + expect(loadRuleAggregations).toHaveBeenCalled(); + } + it('can filter by last response', async () => { + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + + expect(loadRules).toHaveBeenLastCalledWith( + expect.objectContaining({ + ruleExecutionStatusesFilter: ['error'], + }) + ); + + wrapper.find('[data-test-subj="ruleExecutionStatusFilterButton"] button').simulate('click'); + + wrapper + .find('[data-test-subj="ruleExecutionStatusactiveFilterOption"]') + .first() + .simulate('click'); + + expect(loadRules).toHaveBeenLastCalledWith( + expect.objectContaining({ + ruleExecutionStatusesFilter: ['error', 'active'], + }) + ); + + expect(wrapper.prop('onLastResponseFilterChange')).toHaveBeenCalled(); + expect(wrapper.prop('onLastResponseFilterChange')).toHaveBeenLastCalledWith([ + 'error', + 'active', + ]); + + wrapper.find('[data-test-subj="ruleExecutionStatusFilterButton"] button').simulate('click'); + wrapper + .find('[data-test-subj="ruleExecutionStatuserrorFilterOption"]') + .first() + .simulate('click'); + + expect(loadRules).toHaveBeenLastCalledWith( + expect.objectContaining({ + ruleExecutionStatusesFilter: ['active'], + }) + ); + + expect(wrapper.prop('onLastResponseFilterChange')).toHaveBeenCalled(); + expect(wrapper.prop('onLastResponseFilterChange')).toHaveBeenLastCalledWith(['active']); + }); + }); + + describe('showActionFilter prop', () => { + let wrapper: ReactWrapper; + async function setup(editable: boolean = true) { + loadRules.mockResolvedValue({ + page: 1, + perPage: 10000, + total: 4, + data: mockedRulesData, + }); + loadActionTypes.mockResolvedValue([ + { + id: 'test', + name: 'Test', + }, + { + id: 'test2', + name: 'Test2', + }, + ]); + loadRuleTypes.mockResolvedValue([ruleTypeFromApi]); + loadAllActions.mockResolvedValue([]); + loadRuleAggregations.mockResolvedValue({ + ruleEnabledStatus: { enabled: 2, disabled: 0 }, + ruleExecutionStatus: { ok: 1, active: 2, error: 3, pending: 4, unknown: 5, warning: 6 }, + ruleMutedStatus: { muted: 0, unmuted: 2 }, + ruleTags, + }); + loadRuleTags.mockResolvedValue({ + ruleTags, + }); + + const ruleTypeMock: RuleTypeModel = { + id: 'test_rule_type', + iconClass: 'test', + description: 'Rule when testing', + documentationUrl: 'https://localhost.local/docs', + validate: () => { + return { errors: {} }; + }, + ruleParamsExpression: jest.fn(), + requiresAppContext: !editable, + }; + + ruleTypeRegistry.has.mockReturnValue(true); + ruleTypeRegistry.get.mockReturnValue(ruleTypeMock); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.ruleTypeRegistry = ruleTypeRegistry; + + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + } + it('hides the ActionFilter component', async () => { + wrapper = mountWithIntl(); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(loadRules).toHaveBeenCalled(); + expect(loadActionTypes).toHaveBeenCalled(); + expect(loadRuleAggregations).toHaveBeenCalled(); + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + expect(wrapper.find('ActionTypeFilter')).toHaveLength(0); + }); + + it('shows the ActionFilter component if no prop is passed', async () => { + wrapper = mountWithIntl(); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(loadRules).toHaveBeenCalled(); + expect(loadActionTypes).toHaveBeenCalled(); + expect(loadRuleAggregations).toHaveBeenCalled(); + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + expect(wrapper.find('ActionTypeFilter')).toHaveLength(1); + }); + }); + + describe('showCreateRuleButton prop', () => { + let wrapper: ReactWrapper; + async function setup(editable: boolean = true) { + loadRules.mockResolvedValue({ + page: 1, + perPage: 10000, + total: 4, + data: mockedRulesData, + }); + loadActionTypes.mockResolvedValue([ + { + id: 'test', + name: 'Test', + }, + { + id: 'test2', + name: 'Test2', + }, + ]); + loadRuleTypes.mockResolvedValue([ruleTypeFromApi]); + loadAllActions.mockResolvedValue([]); + loadRuleAggregations.mockResolvedValue({ + ruleEnabledStatus: { enabled: 2, disabled: 0 }, + ruleExecutionStatus: { ok: 1, active: 2, error: 3, pending: 4, unknown: 5, warning: 6 }, + ruleMutedStatus: { muted: 0, unmuted: 2 }, + ruleTags, + }); + loadRuleTags.mockResolvedValue({ + ruleTags, + }); + + const ruleTypeMock: RuleTypeModel = { + id: 'test_rule_type', + iconClass: 'test', + description: 'Rule when testing', + documentationUrl: 'https://localhost.local/docs', + validate: () => { + return { errors: {} }; + }, + ruleParamsExpression: jest.fn(), + requiresAppContext: !editable, + }; + + ruleTypeRegistry.has.mockReturnValue(true); + ruleTypeRegistry.get.mockReturnValue(ruleTypeMock); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.ruleTypeRegistry = ruleTypeRegistry; + + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + } + + it('hides the Create Rule button', async () => { + wrapper = mountWithIntl(); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + expect(wrapper.find('EuiButton[data-test-subj="createRuleButton"]').length).toEqual(0); + }); + + it('shows the Create Rule button by default', async () => { + wrapper = mountWithIntl(); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + (getIsExperimentalFeatureEnabled as jest.Mock).mockImplementation(() => true); + loadRules.mockReset(); + await setup(); + expect(wrapper.find('EuiButton[data-test-subj="createRuleButton"]').length).toEqual(1); + }); + }); + + describe('filteredRuleTypes prop', () => { + let wrapper: ReactWrapper; + const allRulesData = [ + { + id: '1', + name: 'test rule', + tags: ['tag1'], + enabled: true, + ruleTypeId: 'test_rule_type', + schedule: { interval: '1s' }, + actions: [], + params: { name: 'test rule type name' }, + scheduledTaskId: null, + createdBy: null, + updatedBy: null, + apiKeyOwner: null, + throttle: '1m', + muteAll: false, + mutedInstanceIds: [], + executionStatus: { + status: 'active', + lastDuration: 500, + lastExecutionDate: new Date('2020-08-20T19:23:38Z'), + error: null, + }, + monitoring: { + execution: { + history: [ + { + success: true, + duration: 1000000, + }, + { + success: true, + duration: 200000, + }, + { + success: false, + duration: 300000, + }, + ], + calculated_metrics: { + success_ratio: 0.66, + p50: 200000, + p95: 300000, + p99: 300000, + }, + }, + }, + }, + { + id: '2', + name: 'test rule ok', + tags: ['tag1'], + enabled: true, + ruleTypeId: 'test_rule_type2', + schedule: { interval: '5d' }, + actions: [], + params: { name: 'test rule type name' }, + scheduledTaskId: null, + createdBy: null, + updatedBy: null, + apiKeyOwner: null, + throttle: '1m', + muteAll: false, + mutedInstanceIds: [], + executionStatus: { + status: 'ok', + lastDuration: 61000, + lastExecutionDate: new Date('2020-08-20T19:23:38Z'), + error: null, + }, + monitoring: { + execution: { + history: [ + { + success: true, + duration: 100000, + }, + { + success: true, + duration: 500000, + }, + ], + calculated_metrics: { + success_ratio: 1, + p50: 0, + p95: 100000, + p99: 500000, + }, + }, + }, + }, + { + id: '3', + name: 'test rule pending', + tags: ['tag1'], + enabled: true, + ruleTypeId: 'test_rule_type2', + schedule: { interval: '5d' }, + actions: [], + params: { name: 'test rule type name' }, + scheduledTaskId: null, + createdBy: null, + updatedBy: null, + apiKeyOwner: null, + throttle: '1m', + muteAll: false, + mutedInstanceIds: [], + executionStatus: { + status: 'pending', + lastDuration: 30234, + lastExecutionDate: new Date('2020-08-20T19:23:38Z'), + error: null, + }, + monitoring: { + execution: { + history: [{ success: false, duration: 100 }], + calculated_metrics: { + success_ratio: 0, + }, + }, + }, + }, + ]; + async function setup(editable: boolean = true, filteredRuleTypes: string[]) { + loadRules.mockResolvedValue({ + page: 1, + perPage: 10000, + total: 2, + data: allRulesData.filter(({ ruleTypeId }) => filteredRuleTypes.includes(ruleTypeId)), + }); + + loadActionTypes.mockResolvedValue([ + { + id: 'test', + name: 'Test', + }, + { + id: 'test2', + name: 'Test2', + }, + ]); + loadRuleTypes.mockResolvedValue([ + ruleTypeFromApi, + { ...ruleTypeFromApi, id: 'test_rule_type2' }, + ]); + loadAllActions.mockResolvedValue([]); + loadRuleAggregations.mockResolvedValue({ + ruleEnabledStatus: { enabled: 2, disabled: 0 }, + ruleExecutionStatus: { ok: 1, active: 2, error: 3, pending: 4, unknown: 5, warning: 6 }, + ruleMutedStatus: { muted: 0, unmuted: 2 }, + ruleTags, + }); + loadRuleTags.mockResolvedValue({ + ruleTags, + }); + + const ruleTypeMock: RuleTypeModel = { + id: 'test_rule_type', + iconClass: 'test', + description: 'Rule when testing', + documentationUrl: 'https://localhost.local/docs', + validate: () => { + return { errors: {} }; + }, + ruleParamsExpression: jest.fn(), + requiresAppContext: !editable, + }; + + ruleTypeRegistry.has.mockReturnValue(true); + ruleTypeRegistry.get.mockReturnValue(ruleTypeMock); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.ruleTypeRegistry = ruleTypeRegistry; + + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + + wrapper = mountWithIntl(); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + } + + it('renders only rules for the specified rule types', async () => { + const filteredRuleTypes = ['test_rule_type2']; + await setup(true, filteredRuleTypes); + expect(wrapper.find('EuiTableRow')).not.toHaveLength(allRulesData.length); + expect(wrapper.find('EuiTableRow')).toHaveLength(2); + }); + }); +}); + describe('rules_list component with items', () => { let wrapper: ReactWrapper; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 91fac39f1d345..942e280359406 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import moment from 'moment'; -import { capitalize, sortBy } from 'lodash'; +import { capitalize, isEmpty, sortBy } from 'lodash'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useEffect, useState, ReactNode, useCallback, useMemo } from 'react'; import { @@ -87,9 +87,29 @@ import { useLoadRuleAggregations } from '../../../hooks/use_load_rule_aggregatio import { RulesListTable, convertRulesToTableItems } from './rules_list_table'; import { RulesListAutoRefresh } from './rules_list_auto_refresh'; import { UpdateApiKeyModalConfirmation } from '../../../components/update_api_key_modal_confirmation'; +import { RulesListVisibleColumns } from './rules_list_column_selector'; const ENTER_KEY = 13; +interface RulesPageContainerState { + lastResponse: string[]; + status: RuleStatus[]; +} + +export interface RulesListProps { + filteredRuleTypes?: string[]; + showActionFilter?: boolean; + ruleDetailsRoute?: string; + showCreateRuleButton?: boolean; + statusFilter?: RuleStatus[]; + onStatusFilterChange?: (status: RuleStatus[]) => RulesPageContainerState; + lastResponseFilter?: string[]; + onLastResponseFilterChange?: (lastResponse: string[]) => RulesPageContainerState; + refresh?: Date; + rulesListKey?: string; + visibleColumns?: RulesListVisibleColumns[]; +} + interface RuleTypeState { isLoading: boolean; isInitialized: boolean; @@ -108,7 +128,19 @@ const initialPercentileOptions = Object.values(Percentiles).map((percentile) => key: percentile, })); -export const RulesList: React.FunctionComponent = () => { +export const RulesList = ({ + filteredRuleTypes = [], + showActionFilter = true, + ruleDetailsRoute, + showCreateRuleButton = true, + statusFilter, + onStatusFilterChange, + lastResponseFilter, + onLastResponseFilterChange, + refresh, + rulesListKey, + visibleColumns, +}: RulesListProps) => { const history = useHistory(); const { http, @@ -127,10 +159,13 @@ export const RulesList: React.FunctionComponent = () => { const [page, setPage] = useState({ index: 0, size: DEFAULT_SEARCH_PAGE_SIZE }); const [searchText, setSearchText] = useState(); const [inputText, setInputText] = useState(); - const [typesFilter, setTypesFilter] = useState([]); + const [typesFilter, setTypesFilter] = useState(); const [actionTypesFilter, setActionTypesFilter] = useState([]); - const [ruleExecutionStatusesFilter, setRuleExecutionStatusesFilter] = useState([]); - const [ruleStatusesFilter, setRuleStatusesFilter] = useState([]); + const [ruleExecutionStatusesFilter, setRuleExecutionStatusesFilter] = useState( + lastResponseFilter || [] + ); + const [ruleStatusesFilter, setRuleStatusesFilter] = useState(statusFilter || []); + const [tagsFilter, setTagsFilter] = useState([]); const [ruleFlyoutVisible, setRuleFlyoutVisibility] = useState(false); const [editFlyoutVisible, setEditFlyoutVisibility] = useState(false); @@ -180,10 +215,22 @@ export const RulesList: React.FunctionComponent = () => { [toasts] ); + const authorizedRuleTypes = useMemo(() => [...ruleTypesState.data.values()], [ruleTypesState]); + const authorizedToCreateAnyRules = authorizedRuleTypes.some( + (ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.all + ); + + const [rulesTypesFilter, hasDefaultRuleTypesFiltersOn] = useMemo(() => { + if (isEmpty(typesFilter) && !isEmpty(filteredRuleTypes)) { + return [authorizedRuleTypes.map((art) => art.id), true]; + } + return [typesFilter, false]; + }, [typesFilter, filteredRuleTypes, authorizedRuleTypes]); + const { rulesState, setRulesState, loadRules, noData, initialLoad } = useLoadRules({ page, searchText, - typesFilter, + typesFilter: rulesTypesFilter, actionTypesFilter, ruleExecutionStatusesFilter, ruleStatusesFilter, @@ -191,6 +238,7 @@ export const RulesList: React.FunctionComponent = () => { sort, onPage: setPage, onError, + hasDefaultRuleTypesFiltersOn, }); const { tags, loadTags } = useLoadTags({ @@ -236,6 +284,10 @@ export const RulesList: React.FunctionComponent = () => { ruleTypesState, ]); + useEffect(() => { + loadData(); + }, [loadData, refresh]); + useEffect(() => { loadData(); }, [loadData, percentileOptions]); @@ -249,7 +301,15 @@ export const RulesList: React.FunctionComponent = () => { for (const ruleType of ruleTypes) { index.set(ruleType.id, ruleType); } - setRuleTypesState({ isLoading: false, data: index, isInitialized: true }); + let filteredIndex = index; + if (filteredRuleTypes && filteredRuleTypes.length > 0) { + filteredIndex = new Map( + [...index].filter(([k, v]) => { + return filteredRuleTypes.includes(v.id); + }) + ); + } + setRuleTypesState({ isLoading: false, data: filteredIndex, isInitialized: true }); } catch (e) { toasts.addDanger({ title: i18n.translate( @@ -285,6 +345,30 @@ export const RulesList: React.FunctionComponent = () => { })(); }, []); + useEffect(() => { + if (onStatusFilterChange) { + onStatusFilterChange(ruleStatusesFilter); + } + }, [ruleStatusesFilter]); + + useEffect(() => { + if (statusFilter) { + setRuleStatusesFilter(statusFilter); + } + }, [statusFilter]); + + useEffect(() => { + if (lastResponseFilter) { + setRuleExecutionStatusesFilter(lastResponseFilter); + } + }, [lastResponseFilter]); + + useEffect(() => { + if (onLastResponseFilterChange) { + onLastResponseFilterChange(ruleExecutionStatusesFilter); + } + }, [ruleExecutionStatusesFilter]); + const buildErrorListItems = (_executionStatus: RuleExecutionStatus) => { const hasErrorMessage = _executionStatus.status === 'error'; const errorMessage = _executionStatus?.error?.message; @@ -347,11 +431,6 @@ export const RulesList: React.FunctionComponent = () => { }); }, [showErrors, rulesState]); - const authorizedRuleTypes = [...ruleTypesState.data.values()]; - const authorizedToCreateAnyRules = authorizedRuleTypes.some( - (ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.all - ); - const getProducerFeatureName = (producer: string) => { return kibanaFeatures?.find((featureItem) => featureItem.id === producer)?.name; }; @@ -413,26 +492,30 @@ export const RulesList: React.FunctionComponent = () => { return unsnoozeRule({ http, id: rule.id, scheduleIds }); }; + const filterOptions = sortBy(Object.entries(groupRuleTypesByProducer())).map( + ([groupName, ruleTypesOptions]) => ({ + groupName: getProducerFeatureName(groupName) ?? capitalize(groupName), + subOptions: ruleTypesOptions.sort((a, b) => a.name.localeCompare(b.name)), + }) + ); + const toolsRight = [ setTypesFilter(types)} - options={sortBy(Object.entries(groupRuleTypesByProducer())).map( - ([groupName, ruleTypesOptions]) => ({ - groupName: getProducerFeatureName(groupName) ?? capitalize(groupName), - subOptions: ruleTypesOptions.sort((a, b) => a.name.localeCompare(b.name)), - }) - )} - />, - setActionTypesFilter(ids)} + options={filterOptions} />, + showActionFilter && ( + setActionTypesFilter(ids)} + /> + ), setRuleExecutionStatusesFilter(ids)} + onChange={setRuleExecutionStatusesFilter} />, ...getRuleTagFilter(), ]; @@ -494,7 +577,7 @@ export const RulesList: React.FunctionComponent = () => { )} - {authorizedToCreateAnyRules ? ( + {authorizedToCreateAnyRules && showCreateRuleButton ? ( { ))} + + + + + @@ -661,7 +758,8 @@ export const RulesList: React.FunctionComponent = () => { onPage={setPage} onRuleChanged={() => loadData()} onRuleClick={(rule) => { - history.push(routeToRuleDetails.replace(`:ruleId`, rule.id)); + const detailsRoute = ruleDetailsRoute ? ruleDetailsRoute : routeToRuleDetails; + history.push(detailsRoute.replace(`:ruleId`, rule.id)); }} onRuleEditClick={(rule) => { if (rule.isEditable && isRuleTypeEditableInContext(rule.ruleTypeId)) { @@ -708,7 +806,9 @@ export const RulesList: React.FunctionComponent = () => { /> ) : null; }} + rulesListKey={rulesListKey} config={config} + visibleColumns={visibleColumns} /> {manageLicenseModalOpts && ( { )} ); - // if initial load, show spinner const getRulesList = () => { if (noData && !rulesState.isLoading && !ruleTypesState.isLoading) { return authorizedToCreateAnyRules ? ( - setRuleFlyoutVisibility(true)} /> + setRuleFlyoutVisibility(true)} + /> ) : ( noPermissionPrompt ); @@ -820,6 +922,7 @@ export { RulesList as default }; const noPermissionPrompt = ( diff --git a/x-pack/plugins/triggers_actions_ui/public/common/get_rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/common/get_rules_list.tsx index dd112d46b48a2..82b266d738203 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/get_rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/get_rules_list.tsx @@ -8,12 +8,16 @@ import React from 'react'; import { ConnectorProvider } from '../application/context/connector_context'; import { RulesList } from '../application/sections'; +import type { RulesListProps } from '../application/sections/rules_list/components/rules_list'; import { ConnectorServices } from '../types'; -export const getRulesListLazy = (props: { connectorServices: ConnectorServices }) => { +export const getRulesListLazy = (props: { + connectorServices: ConnectorServices; + rulesListProps: RulesListProps; +}) => { return ( - + ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/index.ts b/x-pack/plugins/triggers_actions_ui/public/index.ts index 524903aa125ad..47a0d7b98167b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/index.ts @@ -15,7 +15,6 @@ export type { RuleAction, Rule, RuleType, - RuleTypeIndex, RuleTypeModel, RuleStatus, ActionType, @@ -29,7 +28,6 @@ export type { RuleFlyoutCloseReason, RuleTypeParams, AsApiContract, - RuleTableItem, AlertsTableProps, BulkActionsObjectProp, RuleSummary, @@ -42,6 +40,7 @@ export type { FieldBrowserOptions, FieldBrowserProps, RuleDefinitionProps, + RulesListVisibleColumns, } from './types'; export { diff --git a/x-pack/plugins/triggers_actions_ui/public/mocks.ts b/x-pack/plugins/triggers_actions_ui/public/mocks.ts index 31c4acc22808a..4e74d2772ad40 100644 --- a/x-pack/plugins/triggers_actions_ui/public/mocks.ts +++ b/x-pack/plugins/triggers_actions_ui/public/mocks.ts @@ -109,7 +109,10 @@ function createStartMock(): TriggersAndActionsUIPublicPluginStart { return getRulesListNotifyBadgeLazy(props); }, getRulesList: () => { - return getRulesListLazy({ connectorServices }); + return getRulesListLazy({ + connectorServices, + rulesListProps: {}, + }); }, getRuleDefinition: (props) => { return getRuleDefinitionLazy({ ...props, actionTypeRegistry, ruleTypeRegistry }); diff --git a/x-pack/plugins/triggers_actions_ui/public/plugin.ts b/x-pack/plugins/triggers_actions_ui/public/plugin.ts index 778dd0dc20dcd..a70802119fb6d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/plugin.ts +++ b/x-pack/plugins/triggers_actions_ui/public/plugin.ts @@ -59,6 +59,7 @@ import type { RuleTagBadgeProps, RuleTagBadgeOptions, RuleEventLogListProps, + RulesListProps, RulesListNotifyBadgeProps, AlertsTableConfigurationRegistry, CreateConnectorFlyoutProps, @@ -111,10 +112,10 @@ export interface TriggersAndActionsUIPublicPluginStart { props: RuleTagBadgeProps ) => ReactElement>; getRuleEventLogList: (props: RuleEventLogListProps) => ReactElement; + getRulesList: (props: RulesListProps) => ReactElement; getRulesListNotifyBadge: ( props: RulesListNotifyBadgeProps ) => ReactElement; - getRulesList: () => ReactElement; getRuleDefinition: (props: RuleDefinitionProps) => ReactElement; getRuleStatusPanel: (props: RuleStatusPanelProps) => ReactElement; } @@ -332,8 +333,11 @@ export class Plugin getRulesListNotifyBadge: (props: RulesListNotifyBadgeProps) => { return getRulesListNotifyBadgeLazy(props); }, - getRulesList: () => { - return getRulesListLazy({ connectorServices: this.connectorServices! }); + getRulesList: (props: RulesListProps) => { + return getRulesListLazy({ + connectorServices: this.connectorServices!, + rulesListProps: props, + }); }, getRuleDefinition: ( props: Omit diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 9f407d8ebe359..d24d658f90d10 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -50,6 +50,7 @@ import { TypeRegistry } from './application/type_registry'; import type { ComponentOpts as RuleStatusDropdownProps } from './application/sections/rules_list/components/rule_status_dropdown'; import type { RuleTagFilterProps } from './application/sections/rules_list/components/rule_tag_filter'; import type { RuleStatusFilterProps } from './application/sections/rules_list/components/rule_status_filter'; +import type { RulesListProps } from './application/sections/rules_list/components/rules_list'; import type { RuleTagBadgeProps, RuleTagBadgeOptions, @@ -65,6 +66,7 @@ import type { FieldBrowserProps, BrowserFieldItem, } from './application/sections/field_browser/types'; +import { RulesListVisibleColumns } from './application/sections/rules_list/components/rules_list_column_selector'; // In Triggers and Actions we treat all `Alert`s as `SanitizedRule` // so the `Params` is a black-box of Record @@ -102,6 +104,7 @@ export type { RuleTagBadgeProps, RuleTagBadgeOptions, RuleEventLogListProps, + RulesListProps, CreateConnectorFlyoutProps, EditConnectorFlyoutProps, RulesListNotifyBadgeProps, @@ -110,6 +113,7 @@ export type { CreateFieldComponent, GetFieldTableColumns, BrowserFieldItem, + RulesListVisibleColumns, }; export type { ActionType, AsApiContract }; export { @@ -353,13 +357,14 @@ export interface RuleAddProps> { onSave?: () => Promise; metadata?: MetaData; ruleTypeIndex?: RuleTypeIndex; - filteredSolutions?: string[] | undefined; + filteredRuleTypes?: string[]; } export interface RuleDefinitionProps { rule: Rule; ruleTypeRegistry: RuleTypeRegistryContract; actionTypeRegistry: ActionTypeRegistryContract; onEditRule: () => Promise; + filteredRuleTypes?: string[]; } export enum Percentiles { diff --git a/x-pack/test/observability_functional/apps/observability/pages/rule_details_page.ts b/x-pack/test/observability_functional/apps/observability/pages/rule_details_page.ts index 70cac2ade3de7..2b5f0d82e4d1a 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/rule_details_page.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/rule_details_page.ts @@ -94,7 +94,7 @@ export default ({ getService }: FtrProviderContext) => { 'Rules table to be visible', async () => await testSubjects.exists('rulesList') ); - await find.clickByLinkText(logThresholdRuleName); + await find.clickByButtonText(logThresholdRuleName); await retry.waitFor( 'Rule details to be visible', async () => await testSubjects.exists('ruleDetails') diff --git a/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts b/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts index bd5f2deaba12c..a8b96c617db58 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts @@ -21,6 +21,7 @@ export default ({ getService }: FtrProviderContext) => { expect(ruleResponse.status).to.eql(200); return ruleResponse.body.id; } + async function deleteRuleById(ruleId: string) { const ruleResponse = await supertest .delete(`${RULE_ENDPOINT}/${ruleId}`) @@ -34,8 +35,8 @@ export default ({ getService }: FtrProviderContext) => { for (const euiTableRow of tableRows) { const $ = await euiTableRow.parseDomContent(); rows.push({ - name: $.findTestSubjects('rulesTableCell-name').find('a').text(), - enabled: $.findTestSubjects('rulesTableCell-ContextStatus').find('button').attr('title'), + name: $.findTestSubjects('rulesTableCell-name').text(), + enabled: $.findTestSubjects('rulesTableCell-status').find('button').attr('title'), }); } return rows; @@ -131,9 +132,9 @@ export default ({ getService }: FtrProviderContext) => { const tableRows = await find.allByCssSelector('.euiTableRow'); const rows = await getRulesList(tableRows); expect(rows.length).to.be(2); - expect(rows[0].name).to.be('error-log'); + expect(rows[0].name).to.contain('error-log'); expect(rows[0].enabled).to.be('Enabled'); - expect(rows[1].name).to.be('uptime'); + expect(rows[1].name).to.contain('uptime'); expect(rows[1].enabled).to.be('Enabled'); }); From 951359e23b88666b5016f5d139c490ab355dbe05 Mon Sep 17 00:00:00 2001 From: Yaroslav Kuznietsov Date: Wed, 13 Jul 2022 19:27:17 +0300 Subject: [PATCH 18/96] [Canvas] Fixes Filter not saving the selected Sort field option (#136085) * Fixed wrong behavior of the sort fields. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/components/es_field_select/index.tsx | 12 +++++++++--- .../canvas/public/components/paginate/index.tsx | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/canvas/public/components/es_field_select/index.tsx b/x-pack/plugins/canvas/public/components/es_field_select/index.tsx index 3b3d5aa13fd24..8c0baea681731 100644 --- a/x-pack/plugins/canvas/public/components/es_field_select/index.tsx +++ b/x-pack/plugins/canvas/public/components/es_field_select/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useRef } from 'react'; import { getFields } from '../../lib/es_service'; import { ESFieldSelect as Component, ESFieldSelectProps as Props } from './es_field_select'; @@ -14,13 +14,19 @@ type ESFieldSelectProps = Omit; export const ESFieldSelect: React.FunctionComponent = (props) => { const { index, value, onChange } = props; const [fields, setFields] = useState([]); + const loadingFields = useRef(false); useEffect(() => { - getFields(index).then((newFields) => setFields(newFields || [])); + loadingFields.current = true; + getFields(index) + .then((newFields) => setFields(newFields || [])) + .finally(() => { + loadingFields.current = false; + }); }, [index]); useEffect(() => { - if (value && !fields.includes(value)) { + if (!loadingFields.current && value && !fields.includes(value)) { onChange(null); } }, [value, fields, onChange]); diff --git a/x-pack/plugins/canvas/public/components/paginate/index.tsx b/x-pack/plugins/canvas/public/components/paginate/index.tsx index 5998b68ffd8bd..bf7c6e09cc01a 100644 --- a/x-pack/plugins/canvas/public/components/paginate/index.tsx +++ b/x-pack/plugins/canvas/public/components/paginate/index.tsx @@ -27,7 +27,8 @@ export const Paginate: React.FunctionComponent = ({ const initialCurrentPage = totalPages > 0 ? Math.min(startPage, totalPages - 1) : 0; const [currentPage, setPage] = useState(initialCurrentPage); const hasRenderedRef = useRef(false); - const maxPage = Math.min(totalPages - 1, 0); + const maxPage = Math.max(totalPages - 1, 0); + const start = currentPage * perPage; const end = currentPage === 0 ? perPage : perPage * (currentPage + 1); const nextPageEnabled = currentPage < maxPage; From 8bcc50e953b7dd4dffe9e68c78bd069fe8d3bae7 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 13 Jul 2022 12:30:47 -0400 Subject: [PATCH 19/96] [Response Ops] Fixing ES index connector so that it can index into data streams as well as indices. (#136011) * Adding op_type: create * Adding functional test Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../builtin_action_types/es_index.test.ts | 20 +- .../server/builtin_action_types/es_index.ts | 2 +- .../actions/builtin_action_types/es_index.ts | 187 ++++++++++++------ 3 files changed, 144 insertions(+), 65 deletions(-) diff --git a/x-pack/plugins/actions/server/builtin_action_types/es_index.test.ts b/x-pack/plugins/actions/server/builtin_action_types/es_index.test.ts index cca2f8c045d3d..98093b685cab2 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/es_index.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/es_index.test.ts @@ -188,7 +188,9 @@ describe('execute()', () => { Object { "body": Array [ Object { - "index": Object {}, + "index": Object { + "op_type": "create", + }, }, Object { "jim": "bob", @@ -228,7 +230,9 @@ describe('execute()', () => { Object { "body": Array [ Object { - "index": Object {}, + "index": Object { + "op_type": "create", + }, }, Object { "jimbob": "jr", @@ -262,7 +266,9 @@ describe('execute()', () => { Object { "body": Array [ Object { - "index": Object {}, + "index": Object { + "op_type": "create", + }, }, Object { "jim": "bob", @@ -295,13 +301,17 @@ describe('execute()', () => { Object { "body": Array [ Object { - "index": Object {}, + "index": Object { + "op_type": "create", + }, }, Object { "a": 1, }, Object { - "index": Object {}, + "index": Object { + "op_type": "create", + }, }, Object { "b": 2, diff --git a/x-pack/plugins/actions/server/builtin_action_types/es_index.ts b/x-pack/plugins/actions/server/builtin_action_types/es_index.ts index 2a2ca0504d3ac..a0ddea9913bef 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/es_index.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/es_index.ts @@ -89,7 +89,7 @@ async function executor( document[timeField] = new Date(); } - bulkBody.push({ index: {} }); + bulkBody.push({ index: { op_type: 'create' } }); bulkBody.push(document); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts index 5424b18599f64..c8161c54569b5 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts @@ -9,7 +9,10 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; -const ES_TEST_INDEX_NAME = 'functional-test-actions-index'; +const ES_TEST_INDEX_NAME = 'functional-test-connectors-index'; +const ES_TEST_DATASTREAM_PREFIX = 'functional-test-connectors-ds'; +const ES_TEST_DATASTREAM_PATTERN_NAME = `${ES_TEST_DATASTREAM_PREFIX}-*`; +const ES_TEST_DATASTREAM_INDEX_NAME = `${ES_TEST_DATASTREAM_PREFIX}-00001`; // eslint-disable-next-line import/no-default-export export default function indexTest({ getService }: FtrProviderContext) { @@ -17,62 +20,76 @@ export default function indexTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esDeleteAllIndices = getService('esDeleteAllIndices'); - describe('index action', () => { - beforeEach(() => esDeleteAllIndices(ES_TEST_INDEX_NAME)); + describe('index connector', () => { + beforeEach(() => { + esDeleteAllIndices(ES_TEST_INDEX_NAME); + esDeleteAllIndices(ES_TEST_DATASTREAM_INDEX_NAME); + }); - let createdActionID: string; - let createdActionIDWithIndex: string; + after(async () => { + await es.transport.request({ + method: 'DELETE', + path: `/_data_stream/${ES_TEST_DATASTREAM_INDEX_NAME}`, + }); + await es.transport.request({ + method: 'DELETE', + path: `/_index_template/${ES_TEST_DATASTREAM_PREFIX}`, + }); + }); + + let createdConnectorID: string; + let createdConnectorIDWithIndex: string; it('should be created successfully', async () => { // create action with no config - const { body: createdAction } = await supertest - .post('/api/actions/action') + const { body: createdConnector } = await supertest + .post('/api/actions/connector') .set('kbn-xsrf', 'foo') .send({ - name: 'An index action', - actionTypeId: '.index', + name: 'An index connector', + connector_type_id: '.index', config: { index: ES_TEST_INDEX_NAME }, secrets: {}, }) .expect(200); - expect(createdAction).to.eql({ - id: createdAction.id, - isPreconfigured: false, - isDeprecated: false, - name: 'An index action', - actionTypeId: '.index', - isMissingSecrets: false, + expect(createdConnector).to.eql({ + id: createdConnector.id, + is_preconfigured: false, + is_deprecated: false, + name: 'An index connector', + connector_type_id: '.index', + is_missing_secrets: false, config: { index: ES_TEST_INDEX_NAME, refresh: false, executionTimeField: null, }, }); - createdActionID = createdAction.id; - expect(typeof createdActionID).to.be('string'); + createdConnectorID = createdConnector.id; + expect(typeof createdConnectorID).to.be('string'); - const { body: fetchedAction } = await supertest - .get(`/api/actions/action/${createdActionID}`) + const { body: fetchedConnector } = await supertest + .get(`/api/actions/connector/${createdConnectorID}`) .expect(200); - expect(fetchedAction).to.eql({ - id: fetchedAction.id, - isPreconfigured: false, - isDeprecated: false, - isMissingSecrets: false, - name: 'An index action', - actionTypeId: '.index', + expect(fetchedConnector).to.eql({ + id: fetchedConnector.id, + is_preconfigured: false, + is_deprecated: false, + is_missing_secrets: false, + name: 'An index connector', + connector_type_id: '.index', config: { index: ES_TEST_INDEX_NAME, refresh: false, executionTimeField: null }, }); - // create action with all config props - const { body: createdActionWithIndex } = await supertest - .post('/api/actions/action') + // create connector with all config props + const { body: createdConnectorWithIndex } = await supertest + .post('/api/actions/connector') .set('kbn-xsrf', 'foo') .send({ - name: 'An index action with index config', - actionTypeId: '.index', + name: 'An index connector with index config', + connector_type_id: '.index', config: { index: ES_TEST_INDEX_NAME, refresh: true, @@ -81,33 +98,33 @@ export default function indexTest({ getService }: FtrProviderContext) { }) .expect(200); - expect(createdActionWithIndex).to.eql({ - id: createdActionWithIndex.id, - isPreconfigured: false, - isDeprecated: false, - name: 'An index action with index config', - actionTypeId: '.index', - isMissingSecrets: false, + expect(createdConnectorWithIndex).to.eql({ + id: createdConnectorWithIndex.id, + is_preconfigured: false, + is_deprecated: false, + name: 'An index connector with index config', + connector_type_id: '.index', + is_missing_secrets: false, config: { index: ES_TEST_INDEX_NAME, refresh: true, executionTimeField: 'test', }, }); - createdActionIDWithIndex = createdActionWithIndex.id; - expect(typeof createdActionIDWithIndex).to.be('string'); + createdConnectorIDWithIndex = createdConnectorWithIndex.id; + expect(typeof createdConnectorIDWithIndex).to.be('string'); - const { body: fetchedActionWithIndex } = await supertest - .get(`/api/actions/action/${createdActionIDWithIndex}`) + const { body: fetchedConnectorWithIndex } = await supertest + .get(`/api/actions/connector/${createdConnectorIDWithIndex}`) .expect(200); - expect(fetchedActionWithIndex).to.eql({ - id: fetchedActionWithIndex.id, - isPreconfigured: false, - isDeprecated: false, - name: 'An index action with index config', - actionTypeId: '.index', - isMissingSecrets: false, + expect(fetchedConnectorWithIndex).to.eql({ + id: fetchedConnectorWithIndex.id, + is_preconfigured: false, + is_deprecated: false, + name: 'An index connector with index config', + connector_type_id: '.index', + is_missing_secrets: false, config: { index: ES_TEST_INDEX_NAME, refresh: true, @@ -116,13 +133,13 @@ export default function indexTest({ getService }: FtrProviderContext) { }); }); - it('should execute successly when expected for a single body', async () => { - const { body: createdAction } = await supertest - .post('/api/actions/action') + it('should execute successfully when expected for a single body', async () => { + const { body: createdConnector } = await supertest + .post('/api/actions/connector') .set('kbn-xsrf', 'foo') .send({ - name: 'An index action', - actionTypeId: '.index', + name: 'An index connector', + connector_type_id: '.index', config: { index: ES_TEST_INDEX_NAME, refresh: true, @@ -131,7 +148,7 @@ export default function indexTest({ getService }: FtrProviderContext) { }) .expect(200); const { body: result } = await supertest - .post(`/api/actions/action/${createdAction.id}/_execute`) + .post(`/api/actions/connector/${createdConnector.id}/_execute`) .set('kbn-xsrf', 'foo') .send({ params: { @@ -141,16 +158,68 @@ export default function indexTest({ getService }: FtrProviderContext) { .expect(200); expect(result.status).to.eql('ok'); - const items = await getTestIndexItems(es); + const items = await getTestIndexItems(es, ES_TEST_INDEX_NAME); expect(items.length).to.eql(1); expect(items[0]._source).to.eql({ testing: [1, 2, 3] }); }); + + it('should execute successfully into data stream', async () => { + await es.transport.request( + { + method: 'PUT', + path: `/_index_template/${ES_TEST_DATASTREAM_PREFIX}`, + body: { + index_patterns: [ES_TEST_DATASTREAM_PATTERN_NAME], + template: { + mappings: { + properties: { + '@timestamp': { + type: 'date', + }, + }, + }, + }, + data_stream: {}, + }, + }, + { meta: true } + ); + const { body: createdConnector } = await supertest + .post('/api/actions/connector') + .set('kbn-xsrf', 'foo') + .send({ + name: 'An index connector', + connector_type_id: '.index', + config: { + index: ES_TEST_DATASTREAM_INDEX_NAME, + refresh: true, + }, + secrets: {}, + }) + .expect(200); + + const timestamp = new Date().toISOString(); + const { body: result } = await supertest + .post(`/api/actions/connector/${createdConnector.id}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + documents: [{ '@timestamp': timestamp, testing_ds: [1, 2, 3] }], + }, + }) + .expect(200); + expect(result.status).to.eql('ok'); + + const items = await getTestIndexItems(es, ES_TEST_DATASTREAM_INDEX_NAME); + expect(items.length).to.eql(1); + expect(items[0]._source).to.eql({ '@timestamp': timestamp, testing_ds: [1, 2, 3] }); + }); }); } -async function getTestIndexItems(es: Client) { +async function getTestIndexItems(es: Client, indexName: string) { const result = await es.search({ - index: ES_TEST_INDEX_NAME, + index: indexName, }); return result.hits.hits; From 1c7aedb471f3c17c82f7b5ebc4456ea3a295f161 Mon Sep 17 00:00:00 2001 From: Davey Holler Date: Wed, 13 Jul 2022 09:41:32 -0700 Subject: [PATCH 20/96] [Enterprise Search] New shared navigation for Overview, Content, and Elasticsearch apps (#135967) --- .../__mocks__/react_router/state.mock.ts | 17 ++-- .../app_search/components/layout/nav.tsx | 1 - .../elasticsearch_guide.tsx | 7 +- .../elasticsearch/components/layout/index.ts | 1 - .../components/layout/nav.test.tsx | 50 ---------- .../elasticsearch/components/layout/nav.tsx | 78 --------------- .../components/layout/page_template.test.tsx | 4 +- .../components/layout/page_template.tsx | 5 +- .../components/layout/index.ts | 1 - .../components/layout/nav.test.tsx | 63 ------------ .../components/layout/nav.tsx | 96 ------------------- .../components/layout/page_template.test.tsx | 4 +- .../components/layout/page_template.tsx | 5 +- .../components/layout/index.ts | 1 - .../components/layout/nav.test.tsx | 44 --------- .../components/layout/nav.tsx | 66 ------------- .../components/layout/page_template.test.tsx | 4 +- .../components/layout/page_template.tsx | 5 +- .../product_selector/product_selector.tsx | 6 +- .../shared/kibana/kibana_logic.ts | 5 +- .../applications/shared/layout/index.ts | 1 + .../applications/shared/layout/nav.test.tsx | 56 +++++++++++ .../public/applications/shared/layout/nav.tsx | 94 ++++++++++++++++++ .../shared/layout/nav_link_helpers.test.ts | 52 ++++++---- .../shared/layout/nav_link_helpers.ts | 37 ++++--- .../generate_react_router_props.test.ts | 26 ++++- .../generate_react_router_props.ts | 10 +- .../components/layout/nav.test.tsx | 2 +- .../components/layout/nav.tsx | 2 +- .../translations/translations/fr-FR.json | 11 +-- .../translations/translations/ja-JP.json | 12 +-- .../translations/translations/zh-CN.json | 12 +-- 32 files changed, 287 insertions(+), 491 deletions(-) delete mode 100644 x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.test.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.test.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.test.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router/state.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router/state.mock.ts index 0ce8673530b00..8939d7cd18f01 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router/state.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router/state.mock.ts @@ -10,15 +10,6 @@ * Jest to accept its use within a jest.mock() */ -export const mockHistory = { - createHref: jest.fn(({ pathname }) => `/app/enterprise_search${pathname}`), - push: jest.fn(), - location: { - pathname: '/current-path', - }, - listen: jest.fn(() => jest.fn()), -} as any; - export const mockLocation = { key: 'someKey', pathname: '/current-path', @@ -26,3 +17,11 @@ export const mockLocation = { hash: '#hash', state: {}, }; + +export const mockHistory = { + createHref: jest.fn(({ pathname }) => `/app/enterprise_search${pathname}`), + push: jest.fn(), + location: mockLocation, + listen: jest.fn(() => jest.fn()), + basePath: '/app/enterprise_search', +} as any; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/layout/nav.tsx index 793a36f48fe82..20bbfe38e5f39 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/layout/nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/layout/nav.tsx @@ -30,7 +30,6 @@ export const useAppSearchNav = () => { name: ENGINES_TITLE, ...generateNavLink({ to: ENGINES_PATH, - isRoot: true, shouldShowActiveForSubroutes: true, items: useEngineNav(), }), diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/elasticsearch_guide/elasticsearch_guide.tsx b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/elasticsearch_guide/elasticsearch_guide.tsx index cc5c3c90c4ac8..7dba7836e8599 100644 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/elasticsearch_guide/elasticsearch_guide.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/elasticsearch_guide/elasticsearch_guide.tsx @@ -10,7 +10,6 @@ import React, { useEffect, useState } from 'react'; import queryString from 'query-string'; import { - EuiPageTemplate, EuiText, EuiFlexGroup, EuiFlexItem, @@ -26,9 +25,9 @@ import { i18n } from '@kbn/i18n'; import { docLinks } from '../../../shared/doc_links'; import { ElasticsearchResources } from '../../../shared/elasticsearch_resources'; import { SetElasticsearchChrome as SetPageChrome } from '../../../shared/kibana_chrome'; - import { ElasticsearchClientInstructions } from '../elasticsearch_client_instructions'; import { ElasticsearchCloudId } from '../elasticsearch_cloud_id'; +import { EnterpriseSearchElasticsearchPageTemplate } from '../layout'; // Replace FormattedMessage with i18n strings @@ -61,7 +60,7 @@ export const ElasticsearchGuide: React.FC = () => { }, []); return ( - + {/* maxWidth is needed to prevent code blocks with long unbreakable strings (Kibana PR Cloud ID) from stretching the column */} @@ -193,6 +192,6 @@ export const ElasticsearchGuide: React.FC = () => { - + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/index.ts b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/index.ts index 3eedc5e5de879..d373c68d1ec41 100644 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export { useEnterpriseSearchElasticsearchNav } from './nav'; export { EnterpriseSearchElasticsearchPageTemplate } from './page_template'; diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.test.tsx deleted file mode 100644 index 598f3005fe5dc..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.test.tsx +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -jest.mock('../../../shared/layout', () => ({ - generateNavLink: jest.fn(({ to, items }) => ({ href: to, items })), -})); - -import { useEnterpriseSearchElasticsearchNav } from '.'; - -describe('useEnterpriseSearchElasticsearchNav', () => { - it('returns an array of top-level Enterprise Search nav items', () => { - expect(useEnterpriseSearchElasticsearchNav()).toEqual([ - { - id: 'es_overview', - name: 'Overview', - emphasize: true, - isSelected: true, - href: '/app/enterprise_search/overview', - }, - { - id: 'content', - name: 'Content', - emphasize: true, - href: '/app/enterprise_search/content', - }, - { - id: 'elasticsearch', - name: 'Elasticsearch', - emphasize: true, - href: '/app/enterprise_search/elasticsearch', - }, - { - id: 'app_search', - name: 'App Search', - emphasize: true, - href: '/app/enterprise_search/app_search', - }, - { - id: 'workplace_search', - name: 'Workplace Search', - emphasize: true, - href: '/app/enterprise_search/workplace_search', - }, - ]); - }); -}); diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.tsx deleted file mode 100644 index 08c67d1408c6f..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/nav.tsx +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { EuiSideNavItemType } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { - APP_SEARCH_PLUGIN, - ELASTICSEARCH_PLUGIN, - ENTERPRISE_SEARCH_OVERVIEW_PLUGIN, - ENTERPRISE_SEARCH_CONTENT_PLUGIN, - WORKPLACE_SEARCH_PLUGIN, -} from '../../../../../common/constants'; -import { generateNavLink } from '../../../shared/layout'; - -export const useEnterpriseSearchElasticsearchNav = () => { - const navItems: Array> = [ - { - id: 'es_overview', - isSelected: true, - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle', { - defaultMessage: 'Overview', - }), - href: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL, - }, - { - id: 'content', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.contentTitle', { - defaultMessage: 'Content', - }), - ...generateNavLink({ - to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'elasticsearch', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.elasticsearch.nav.contentTitle', { - defaultMessage: 'Elasticsearch', - }), - ...generateNavLink({ - to: ELASTICSEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'app_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.appSearchTitle', { - defaultMessage: 'App Search', - }), - ...generateNavLink({ - to: APP_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'workplace_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.workplaceSearchTitle', { - defaultMessage: 'Workplace Search', - }), - ...generateNavLink({ - to: WORKPLACE_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - ]; - - return navItems; -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.test.tsx b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.test.tsx index 25551715bc444..a6885bb8adc9c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.test.tsx @@ -5,8 +5,8 @@ * 2.0. */ -jest.mock('./nav', () => ({ - useEnterpriseSearchElasticsearchNav: () => [], +jest.mock('../../../shared/layout/nav', () => ({ + useEnterpriseSearchNav: () => [], })); import React from 'react'; diff --git a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.tsx index bbcb442bd4f6b..f854246a9f9a7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/elasticsearch/components/layout/page_template.tsx @@ -10,10 +10,9 @@ import React from 'react'; import { ELASTICSEARCH_PLUGIN } from '../../../../../common/constants'; import { SetElasticsearchChrome } from '../../../shared/kibana_chrome'; import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout'; +import { useEnterpriseSearchNav } from '../../../shared/layout'; import { SendEnterpriseSearchTelemetry } from '../../../shared/telemetry'; -import { useEnterpriseSearchElasticsearchNav } from './nav'; - export const EnterpriseSearchElasticsearchPageTemplate: React.FC = ({ children, pageChrome, @@ -25,7 +24,7 @@ export const EnterpriseSearchElasticsearchPageTemplate: React.FC} > diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/index.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/index.ts index 4ab6f30869363..d7865fe340bf5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export { useEnterpriseSearchContentNav } from './nav'; export { EnterpriseSearchContentPageTemplate } from './page_template'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.test.tsx deleted file mode 100644 index 9b3375f1d168f..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.test.tsx +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -jest.mock('../../../shared/layout', () => ({ - generateNavLink: jest.fn(({ to, items }) => ({ href: to, items })), -})); -jest.mock('../search_index/index_nav', () => ({ - useSearchIndicesNav: () => [], -})); - -import { useEnterpriseSearchContentNav } from '.'; - -describe('useEnterpriseSearchContentNav', () => { - it('returns an array of top-level Enterprise Search nav items', () => { - expect(useEnterpriseSearchContentNav()).toEqual([ - { - id: 'es_overview', - name: 'Overview', - emphasize: true, - items: undefined, - href: '/app/enterprise_search/overview', - }, - { - id: 'content', - name: 'Content', - emphasize: true, - href: '/', - items: [ - { - href: '/search_indices', - id: 'search_indices', - items: [], - name: 'Search indices', - }, - { - href: '/settings', - id: 'settings', - items: undefined, - name: 'Settings', - }, - ], - }, - { - id: 'app_search', - name: 'App Search', - emphasize: true, - items: undefined, - href: '/app/enterprise_search/app_search', - }, - { - id: 'workplace_search', - name: 'Workplace Search', - emphasize: true, - items: undefined, - href: '/app/enterprise_search/workplace_search', - }, - ]); - }); -}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.tsx deleted file mode 100644 index af3f5dd9c48e8..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/nav.tsx +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { EuiSideNavItemType } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { - APP_SEARCH_PLUGIN, - ENTERPRISE_SEARCH_OVERVIEW_PLUGIN, - WORKPLACE_SEARCH_PLUGIN, -} from '../../../../../common/constants'; -import { generateNavLink } from '../../../shared/layout'; - -import { ROOT_PATH, SEARCH_INDICES_PATH, SETTINGS_PATH } from '../../routes'; - -import { useSearchIndicesNav } from '../search_index/index_nav'; - -export const useEnterpriseSearchContentNav = () => { - const navItems: Array> = [ - { - id: 'es_overview', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle', { - defaultMessage: 'Overview', - }), - ...generateNavLink({ - to: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'content', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.contentTitle', { - defaultMessage: 'Content', - }), - ...generateNavLink({ - to: ROOT_PATH, - isRoot: true, - shouldShowActiveForSubroutes: false, - items: [ - { - id: 'search_indices', - name: i18n.translate('xpack.enterpriseSearch.content.nav.searchIndicesTitle', { - defaultMessage: 'Search indices', - }), - ...generateNavLink({ - to: SEARCH_INDICES_PATH, - isRoot: true, - shouldShowActiveForSubroutes: true, - items: useSearchIndicesNav(), - }), - }, - { - id: 'settings', - name: i18n.translate('xpack.enterpriseSearch.content.nav.settingsTitle', { - defaultMessage: 'Settings', - }), - ...generateNavLink({ - to: SETTINGS_PATH, - isRoot: true, - }), - }, - ], - }), - }, - { - id: 'app_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.appSearchTitle', { - defaultMessage: 'App Search', - }), - ...generateNavLink({ - to: APP_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'workplace_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.workplaceSearchTitle', { - defaultMessage: 'Workplace Search', - }), - ...generateNavLink({ - to: WORKPLACE_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - ]; - - return navItems; -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.test.tsx index e3385417f6151..b3aa172dd5bc0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.test.tsx @@ -5,8 +5,8 @@ * 2.0. */ -jest.mock('./nav', () => ({ - useEnterpriseSearchContentNav: () => [], +jest.mock('../../../shared/layout/nav', () => ({ + useEnterpriseSearchNav: () => [], })); import React from 'react'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx index a4d5315c898d1..54dca0f8d921b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx @@ -10,10 +10,9 @@ import React from 'react'; import { ENTERPRISE_SEARCH_CONTENT_PLUGIN } from '../../../../../common/constants'; import { SetEnterpriseSearchChrome } from '../../../shared/kibana_chrome'; import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout'; +import { useEnterpriseSearchNav } from '../../../shared/layout'; import { SendEnterpriseSearchTelemetry } from '../../../shared/telemetry'; -import { useEnterpriseSearchContentNav } from './nav'; - export const EnterpriseSearchContentPageTemplate: React.FC = ({ children, pageChrome, @@ -25,7 +24,7 @@ export const EnterpriseSearchContentPageTemplate: React.FC = {...pageTemplateProps} solutionNav={{ name: ENTERPRISE_SEARCH_CONTENT_PLUGIN.NAME, - items: useEnterpriseSearchContentNav(), + items: useEnterpriseSearchNav(), }} setPageChrome={pageChrome && } > diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/index.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/index.ts index ea69823f82b87..261dd353b0a35 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/index.ts @@ -5,6 +5,5 @@ * 2.0. */ -export { useEnterpriseSearchOverviewNav } from './nav'; export { EnterpriseSearchOverviewPageTemplate } from './page_template'; export { EnterpriseSearchOverviewHeaderActions } from './kibana_header_actions'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.test.tsx deleted file mode 100644 index 411bda5dfe2be..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -jest.mock('../../../shared/layout', () => ({ - generateNavLink: jest.fn(({ to, items }) => ({ href: to, items })), -})); - -import { useEnterpriseSearchOverviewNav } from '.'; - -describe('useEnterpriseSearchOverviewNav', () => { - it('returns an array of top-level Enterprise Search nav items', () => { - expect(useEnterpriseSearchOverviewNav()).toEqual([ - { - id: 'es_overview', - name: 'Overview', - emphasize: true, - isSelected: true, - href: '/app/enterprise_search/overview', - }, - { - id: 'content', - name: 'Content', - emphasize: true, - href: '/app/enterprise_search/content', - }, - { - id: 'app_search', - name: 'App Search', - emphasize: true, - href: '/app/enterprise_search/app_search', - }, - { - id: 'workplace_search', - name: 'Workplace Search', - emphasize: true, - href: '/app/enterprise_search/workplace_search', - }, - ]); - }); -}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.tsx deleted file mode 100644 index 294e8f0e87a32..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/nav.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { EuiSideNavItemType } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { - APP_SEARCH_PLUGIN, - ENTERPRISE_SEARCH_OVERVIEW_PLUGIN, - ENTERPRISE_SEARCH_CONTENT_PLUGIN, - WORKPLACE_SEARCH_PLUGIN, -} from '../../../../../common/constants'; -import { generateNavLink } from '../../../shared/layout'; - -export const useEnterpriseSearchOverviewNav = () => { - const navItems: Array> = [ - { - id: 'es_overview', - isSelected: true, - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle', { - defaultMessage: 'Overview', - }), - href: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL, - }, - { - id: 'content', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.contentTitle', { - defaultMessage: 'Content', - }), - ...generateNavLink({ - to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'app_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.appSearchTitle', { - defaultMessage: 'App Search', - }), - ...generateNavLink({ - to: APP_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - { - id: 'workplace_search', - emphasize: true, - name: i18n.translate('xpack.enterpriseSearch.content.nav.workplaceSearchTitle', { - defaultMessage: 'Workplace Search', - }), - ...generateNavLink({ - to: WORKPLACE_SEARCH_PLUGIN.URL, - shouldNotCreateHref: true, - }), - }, - ]; - - return navItems; -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.test.tsx index 0a7019da3fdd0..791a9bbab3a11 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.test.tsx @@ -5,8 +5,8 @@ * 2.0. */ -jest.mock('./nav', () => ({ - useEnterpriseSearchOverviewNav: () => [], +jest.mock('../../../shared/layout/nav', () => ({ + useEnterpriseSearchNav: () => [], })); import React from 'react'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.tsx index 2f914d01ce8be..8902788edb329 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/layout/page_template.tsx @@ -10,10 +10,9 @@ import React from 'react'; import { ENTERPRISE_SEARCH_CONTENT_PLUGIN } from '../../../../../common/constants'; import { SetEnterpriseSearchChrome } from '../../../shared/kibana_chrome'; import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout'; +import { useEnterpriseSearchNav } from '../../../shared/layout'; import { SendEnterpriseSearchTelemetry } from '../../../shared/telemetry'; -import { useEnterpriseSearchOverviewNav } from './nav'; - export const EnterpriseSearchOverviewPageTemplate: React.FC = ({ children, pageChrome, @@ -25,7 +24,7 @@ export const EnterpriseSearchOverviewPageTemplate: React.FC = {...pageTemplateProps} solutionNav={{ name: ENTERPRISE_SEARCH_CONTENT_PLUGIN.NAME, - items: useEnterpriseSearchOverviewNav(), + items: useEnterpriseSearchNav(), }} setPageChrome={pageChrome && } > diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx index 3a1e52e8d8afd..b958fb3925d4e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx @@ -24,7 +24,6 @@ import { Chat } from '@kbn/cloud-plugin/public'; import { i18n } from '@kbn/i18n'; import { - KibanaPageTemplate, KibanaPageTemplateSolutionNavAvatar, NO_DATA_PAGE_TEMPLATE_PROPS, } from '@kbn/kibana-react-plugin/public'; @@ -38,6 +37,7 @@ import { SendEnterpriseSearchTelemetry as SendTelemetry } from '../../../shared/ import AppSearchImage from '../../assets/app_search.png'; import WorkplaceSearchImage from '../../assets/workplace_search.png'; import { ElasticsearchCard } from '../elasticsearch_card'; +import { EnterpriseSearchOverviewPageTemplate } from '../layout'; import { LicenseCallout } from '../license_callout'; import { ProductCard } from '../product_card'; import { SetupGuideCta } from '../setup_guide'; @@ -152,7 +152,7 @@ export const ProductSelector: React.FC = ({ /> ); return ( - + @@ -186,6 +186,6 @@ export const ProductSelector: React.FC = ({ {shouldShowEnterpriseSearchCards ? productCards : insufficientAccessMessage} - + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts index 873357e0528af..07aa3974b6479 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts @@ -7,12 +7,11 @@ import { FC } from 'react'; -import { History } from 'history'; import { kea, MakeLogicType } from 'kea'; import { ChartsPluginStart } from '@kbn/charts-plugin/public'; import { CloudSetup } from '@kbn/cloud-plugin/public'; -import { ApplicationStart, ChromeBreadcrumb } from '@kbn/core/public'; +import { ApplicationStart, ChromeBreadcrumb, ScopedHistory } from '@kbn/core/public'; import { SecurityPluginStart } from '@kbn/security-plugin/public'; import { HttpLogic } from '../http'; @@ -24,7 +23,7 @@ type RequiredFieldsOnly = { interface KibanaLogicProps { config: { host?: string }; // Kibana core - history: History; + history: ScopedHistory; navigateToUrl: RequiredFieldsOnly; setBreadcrumbs(crumbs: ChromeBreadcrumb[]): void; setChromeIsVisible(isVisible: boolean): void; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/index.ts b/x-pack/plugins/enterprise_search/public/applications/shared/layout/index.ts index 790d72943a1bc..b137029defb34 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/index.ts @@ -8,3 +8,4 @@ export type { PageTemplateProps } from './page_template'; export { EnterpriseSearchPageTemplateWrapper } from './page_template'; export { generateNavLink } from './nav_link_helpers'; +export { useEnterpriseSearchNav } from './nav'; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx new file mode 100644 index 0000000000000..60f51b8d6b6f2 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +jest.mock('./nav_link_helpers', () => ({ + generateNavLink: jest.fn(({ to, items }) => ({ href: to, items })), +})); + +import { useEnterpriseSearchNav } from './nav'; + +describe('useEnterpriseSearchContentNav', () => { + it('returns an array of top-level Enterprise Search nav items', () => { + expect(useEnterpriseSearchNav()).toEqual([ + { + href: '/app/enterprise_search/overview', + id: 'es_overview', + name: 'Overview', + }, + { + id: 'content', + items: [ + { + href: '/app/enterprise_search/content/search_indices', + id: 'search_indices', + name: 'Indices', + }, + ], + name: 'Content', + }, + { + id: 'search_experiences', + items: [ + { + href: '/app/enterprise_search/elasticsearch', + id: 'elasticsearch', + name: 'Elasticsearch', + }, + { + href: '/app/enterprise_search/app_search', + id: 'app_search', + name: 'App Search', + }, + { + href: '/app/enterprise_search/workplace_search', + id: 'workplace_search', + name: 'Workplace Search', + }, + ], + name: 'Search experiences', + }, + ]); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx new file mode 100644 index 0000000000000..f97253585505b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiSideNavItemType } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { + APP_SEARCH_PLUGIN, + ELASTICSEARCH_PLUGIN, + ENTERPRISE_SEARCH_CONTENT_PLUGIN, + ENTERPRISE_SEARCH_OVERVIEW_PLUGIN, + WORKPLACE_SEARCH_PLUGIN, +} from '../../../../common/constants'; +import { SEARCH_INDICES_PATH } from '../../enterprise_search_content/routes'; + +import { generateNavLink } from './nav_link_helpers'; + +export const useEnterpriseSearchNav = () => { + const navItems: Array> = [ + { + id: 'es_overview', + name: i18n.translate('xpack.enterpriseSearch.nav.enterpriseSearchOverviewTitle', { + defaultMessage: 'Overview', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL, + }), + }, + { + id: 'content', + items: [ + { + id: 'search_indices', + name: i18n.translate('xpack.enterpriseSearch.nav.searchIndicesTitle', { + defaultMessage: 'Indices', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + shouldShowActiveForSubroutes: true, + to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL + SEARCH_INDICES_PATH, + }), + }, + ], + name: i18n.translate('xpack.enterpriseSearch.nav.contentTitle', { + defaultMessage: 'Content', + }), + }, + { + id: 'search_experiences', + items: [ + { + id: 'elasticsearch', + name: i18n.translate('xpack.enterpriseSearch.nav.elasticsearchTitle', { + defaultMessage: 'Elasticsearch', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: ELASTICSEARCH_PLUGIN.URL, + }), + }, + { + id: 'app_search', + name: i18n.translate('xpack.enterpriseSearch.nav.appSearchTitle', { + defaultMessage: 'App Search', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: APP_SEARCH_PLUGIN.URL, + }), + }, + { + id: 'workplace_search', + name: i18n.translate('xpack.enterpriseSearch.nav.workplaceSearchTitle', { + defaultMessage: 'Workplace Search', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: WORKPLACE_SEARCH_PLUGIN.URL, + }), + }, + ], + name: i18n.translate('xpack.enterpriseSearch.nav.searchExperiencesTitle', { + defaultMessage: 'Search experiences', + }), + }, + ]; + + return navItems; +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.test.ts index 8cfca3bade993..fff28345bb1bb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.test.ts @@ -6,14 +6,14 @@ */ import { mockKibanaValues } from '../../__mocks__/kea_logic'; +import '../../__mocks__/react_router'; -jest.mock('../react_router_helpers', () => ({ - generateReactRouterProps: ({ to }: { to: string }) => ({ - href: `/app/enterprise_search${to}`, - onClick: () => mockKibanaValues.navigateToUrl(to), - }), +jest.mock('../react_router_helpers/link_events', () => ({ + letBrowserHandleEvent: jest.fn(), })); +import { letBrowserHandleEvent } from '../react_router_helpers/link_events'; + import { generateNavLink, getNavLinkActive } from './nav_link_helpers'; describe('generateNavLink', () => { @@ -23,6 +23,8 @@ describe('generateNavLink', () => { }); it('generates React Router props for use within an EuiSideNavItem obj', () => { + (letBrowserHandleEvent as jest.Mock).mockReturnValueOnce(false); + const navItem = generateNavLink({ to: '/test' }); expect(navItem).toEqual({ @@ -31,8 +33,10 @@ describe('generateNavLink', () => { isSelected: false, }); - navItem.onClick({} as any); - expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/test'); + navItem.onClick({ preventDefault: jest.fn() } as any); + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/test', { + shouldNotCreateHref: false, + }); }); describe('isSelected / getNavLinkActive', () => { @@ -50,19 +54,20 @@ describe('generateNavLink', () => { expect(isSelected).toEqual(false); }); - describe('isRoot', () => { - it('returns true if the current path is "/"', () => { - mockKibanaValues.history.location.pathname = '/'; - const isSelected = getNavLinkActive({ to: '/overview', isRoot: true }); - - expect(isSelected).toEqual(true); + it('returns true when to includes a basePath and shouldNotCreateHref=true', () => { + mockKibanaValues.history.location.pathname = '/test'; + const isSelected = getNavLinkActive({ + shouldNotCreateHref: true, + to: '/app/enterprise_search/test', }); + + expect(isSelected).toEqual(true); }); describe('shouldShowActiveForSubroutes', () => { it('returns true if the current path is a subroute of the passed path', () => { mockKibanaValues.history.location.pathname = '/hello/world'; - const isSelected = getNavLinkActive({ to: '/hello', shouldShowActiveForSubroutes: true }); + const isSelected = getNavLinkActive({ shouldShowActiveForSubroutes: true, to: '/hello' }); expect(isSelected).toEqual(true); }); @@ -76,9 +81,9 @@ describe('generateNavLink', () => { it('returns false if subroutes already have their own items subnav (with active state)', () => { mockKibanaValues.history.location.pathname = '/items/123/settings'; const isSelected = getNavLinkActive({ - to: '/items', - shouldShowActiveForSubroutes: true, items: [{ id: 'settings', name: 'Settings' }], + shouldShowActiveForSubroutes: true, + to: '/items', }); expect(isSelected).toEqual(false); @@ -86,7 +91,7 @@ describe('generateNavLink', () => { it('returns false if not a valid subroute', () => { mockKibanaValues.history.location.pathname = '/hello/world'; - const isSelected = getNavLinkActive({ to: '/world', shouldShowActiveForSubroutes: true }); + const isSelected = getNavLinkActive({ shouldShowActiveForSubroutes: true, to: '/world' }); expect(isSelected).toEqual(false); }); @@ -97,11 +102,22 @@ describe('generateNavLink', () => { expect(isSelected).toEqual(false); }); + + it('returns true when to includes a basePath and shouldNotCreateHref=true', () => { + mockKibanaValues.history.location.pathname = '/hello/world'; + const isSelected = getNavLinkActive({ + shouldNotCreateHref: true, + shouldShowActiveForSubroutes: true, + to: '/app/enterprise_search/hello', + }); + + expect(isSelected).toEqual(true); + }); }); }); it('optionally passes items', () => { - const navItem = generateNavLink({ to: '/test', items: [] }); + const navItem = generateNavLink({ items: [], to: '/test' }); expect(navItem.items).toEqual([]); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.ts b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.ts index 9caf58886c52e..f086433c9fc0e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav_link_helpers.ts @@ -11,38 +11,47 @@ import { stripTrailingSlash } from '../../../../common/strip_slashes'; import { KibanaLogic } from '../kibana'; import { generateReactRouterProps, ReactRouterProps } from '../react_router_helpers'; +import { GeneratedReactRouterProps } from '../react_router_helpers/generate_react_router_props'; interface Params { - to: string; - isRoot?: boolean; - shouldShowActiveForSubroutes?: boolean; items?: Array>; // Primarily passed if using `items` to determine isSelected - if not, you can just set `items` outside of this helper + shouldShowActiveForSubroutes?: boolean; + to: string; } -export const generateNavLink = ({ to, items, ...rest }: Params & ReactRouterProps) => { - return { - ...generateReactRouterProps({ to, ...rest }), - isSelected: getNavLinkActive({ to, items, ...rest }), - items, +type NavLinkProps = GeneratedReactRouterProps & + Pick, 'isSelected' | 'items'>; + +export const generateNavLink = ({ + items, + ...rest +}: Params & ReactRouterProps): NavLinkProps => { + const linkProps = { + ...generateReactRouterProps({ ...rest }), + isSelected: getNavLinkActive({ items, ...rest }), }; + return items ? { ...linkProps, items } : linkProps; }; export const getNavLinkActive = ({ to, - isRoot = false, shouldShowActiveForSubroutes = false, items = [], -}: Params): boolean => { + shouldNotCreateHref = false, +}: Params & ReactRouterProps): boolean => { const { pathname } = KibanaLogic.values.history.location; const currentPath = stripTrailingSlash(pathname); + const { href: currentPathHref } = generateReactRouterProps({ + shouldNotCreateHref: false, + to: currentPath, + }); + const { href: toHref } = generateReactRouterProps({ shouldNotCreateHref, to }); - if (currentPath === to) return true; - - if (isRoot && currentPath === '') return true; + if (currentPathHref === toHref) return true; if (shouldShowActiveForSubroutes) { if (items.length) return false; // If a nav link has sub-nav items open, never show it as active - if (currentPath.startsWith(to)) return true; + if (currentPathHref.startsWith(toHref)) return true; } return false; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.test.ts index 05e00eb8cc3a6..309f94fcf55b4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.test.ts @@ -31,7 +31,7 @@ describe('generateReactRouterProps', () => { }); describe('onClick', () => { - it('prevents default navigation and uses React Router history', () => { + it('prevents default navigation and uses React Router history for internal links', () => { const mockEvent = { button: 0, target: { getAttribute: () => '_self' }, @@ -42,11 +42,33 @@ describe('generateReactRouterProps', () => { onClick(mockEvent); expect(mockEvent.preventDefault).toHaveBeenCalled(); - expect(mockKibanaValues.navigateToUrl).toHaveBeenCalled(); + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/test', { + shouldNotCreateHref: false, + }); + }); + + it('prevents default navigation and uses React Router history for cross-app links', () => { + const mockEvent = { + button: 0, + target: { getAttribute: () => '_self' }, + preventDefault: jest.fn(), + } as any; + + const { onClick } = generateReactRouterProps({ + to: '/app/enterprise_search/test', + shouldNotCreateHref: true, + }); + onClick(mockEvent); + + expect(mockEvent.preventDefault).toHaveBeenCalled(); + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/app/enterprise_search/test', { + shouldNotCreateHref: true, + }); }); it('does not prevent default browser behavior on new tab/window clicks', () => { const mockEvent = { + preventDefault: jest.fn(), shiftKey: true, target: { getAttribute: () => '_blank' }, } as any; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.ts b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.ts index 994468721856f..2ef7f556eb2d1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/generate_react_router_props.ts @@ -7,6 +7,8 @@ import React from 'react'; +import { EuiSideNavItemType } from '@elastic/eui'; + import { HttpLogic } from '../http'; import { KibanaLogic } from '../kibana'; @@ -29,11 +31,15 @@ export interface ReactRouterProps { shouldNotCreateHref?: boolean; } +export type GeneratedReactRouterProps = Required< + Pick, 'href' | 'onClick'> +>; + export const generateReactRouterProps = ({ to, onClick, - shouldNotCreateHref, -}: ReactRouterProps) => { + shouldNotCreateHref = false, +}: ReactRouterProps): GeneratedReactRouterProps => { const { navigateToUrl, history } = KibanaLogic.values; const { http } = HttpLogic.values; diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.test.tsx index 1e73c6156619e..3337493b54018 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.test.tsx @@ -30,7 +30,7 @@ describe('useWorkplaceSearchNav', () => { { id: 'root', name: 'Overview', - href: '/', + href: '', }, { id: 'sources', diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.tsx index 05ec569dcd292..f259c0ed7349c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/nav.tsx @@ -26,7 +26,7 @@ export const useWorkplaceSearchNav = () => { { id: 'root', name: NAV.OVERVIEW, - ...generateNavLink({ to: '/', isRoot: true }), + ...generateNavLink({ to: '' }), }, { id: 'sources', diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 6f6c0f69142d0..f112c4f1e4a05 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -11640,11 +11640,6 @@ "xpack.enterpriseSearch.appSearch.tokens.search.name": "Clé de recherche publique", "xpack.enterpriseSearch.appSearch.tokens.update": "La clé d'API \"{name}\" a été mise à jour", "xpack.enterpriseSearch.content.description": "Enterprise Search offre un certain nombre de moyens de rendre vos données facilement interrogeables. Vous pouvez choisir entre le robot d'indexation, les indices Elasticsearch, l'API, les téléchargements directs ou les connecteurs tiers.", - "xpack.enterpriseSearch.content.nav.appSearchTitle": "App Search", - "xpack.enterpriseSearch.content.nav.contentTitle": "Contenu", - "xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle": "Aperçu", - "xpack.enterpriseSearch.content.nav.searchIndicesTitle": "Rechercher dans les index", - "xpack.enterpriseSearch.content.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.content.navTitle": "Contenu", "xpack.enterpriseSearch.content.newIndex.breadcrumb": "Nouvel index de recherche", "xpack.enterpriseSearch.content.newIndex.buttonGroup.api.description": "Utiliser différentes bibliothèques de clients pour ajouter des documents à votre index de recherche", @@ -11840,7 +11835,6 @@ "xpack.enterpriseSearch.crawler.urlComboBox.invalidUrlErrorMessage": "Veuillez entrer une URL valide", "xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "En savoir plus sur les mises à niveau incluses dans la licence", "xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "Démarrer un essai gratuit de 30 jours", - "xpack.enterpriseSearch.elasticsearch.nav.contentTitle": "Elasticsearch", "xpack.enterpriseSearch.elasticsearch.productCardDescription": "Concevez et créez des applications de recherche performantes et pertinentes ou des implémentations de recherche à grande échelle directement dans Elasticsearch.", "xpack.enterpriseSearch.elasticsearch.productDescription": "Outils de bas niveau pour la création d'expériences performantes et pertinentes.", "xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch", @@ -11871,6 +11865,11 @@ "xpack.enterpriseSearch.licenseCalloutBody": "L'authentification d'Enterprise via SAML, la prise en charge des autorisations de niveau document, les expériences de recherche personnalisées et bien plus encore sont disponibles avec une licence Platinum valide.", "xpack.enterpriseSearch.licenseDocumentationLink": "En savoir plus sur les fonctionnalités incluses dans la licence", "xpack.enterpriseSearch.licenseManagementLink": "Gérer votre licence", + "xpack.enterpriseSearch.nav.appSearchTitle": "App Search", + "xpack.enterpriseSearch.nav.contentTitle": "Contenu", + "xpack.enterpriseSearch.nav.enterpriseSearchOverviewTitle": "Aperçu", + "xpack.enterpriseSearch.nav.searchIndicesTitle": "Rechercher dans les index", + "xpack.enterpriseSearch.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.notFound.action1": "Retour à votre tableau de bord", "xpack.enterpriseSearch.notFound.action2": "Contacter le support technique", "xpack.enterpriseSearch.notFound.description": "Impossible de trouver la page que vous recherchez.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 556da3313654e..fb1c3e8bbbf6f 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -11631,11 +11631,6 @@ "xpack.enterpriseSearch.appSearch.tokens.search.name": "公開検索キー", "xpack.enterpriseSearch.appSearch.tokens.update": "APIキー'{name}'が更新されました", "xpack.enterpriseSearch.content.description": "エンタープライズ サーチでは、さまざまな方法で簡単にデータを検索可能にできます。Webクローラー、Elasticsearchインデックス、API、直接アップロード、サードパーティコネクターから選択します。", - "xpack.enterpriseSearch.content.nav.appSearchTitle": "App Search", - "xpack.enterpriseSearch.content.nav.contentTitle": "コンテンツ", - "xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle": "概要", - "xpack.enterpriseSearch.content.nav.searchIndicesTitle": "インデックスの検索", - "xpack.enterpriseSearch.content.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.content.navTitle": "コンテンツ", "xpack.enterpriseSearch.content.newIndex.breadcrumb": "新しい検索インデックス", "xpack.enterpriseSearch.content.newIndex.buttonGroup.api.description": "さまざまなクライアントライブラリを使用して、ドキュメントを検索インデックスに追加", @@ -11831,7 +11826,6 @@ "xpack.enterpriseSearch.crawler.urlComboBox.invalidUrlErrorMessage": "有効なURLを入力してください", "xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "ライセンスアップグレードの詳細", "xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "30 日間のトライアルの開始", - "xpack.enterpriseSearch.elasticsearch.nav.contentTitle": "Elasticsearch", "xpack.enterpriseSearch.elasticsearch.productCardDescription": "Elasticsearchで直接、パフォーマンスと関連性が高い、検索対応アプリケーションまたは大規模検索実装を設計して構築。", "xpack.enterpriseSearch.elasticsearch.productDescription": "高パフォーマンスで関連性の高い検索エクスペリエンスを作成するための低レベルのツール。", "xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch", @@ -11862,6 +11856,12 @@ "xpack.enterpriseSearch.licenseCalloutBody": "SAML経由のエンタープライズ認証、ドキュメントレベルのアクセス権と許可サポート、カスタム検索経験などは有効なPlatinumライセンスで提供されます。", "xpack.enterpriseSearch.licenseDocumentationLink": "ライセンス機能の詳細", "xpack.enterpriseSearch.licenseManagementLink": "ライセンスを更新", + "xpack.enterpriseSearch.nav.appSearchTitle": "App Search", + "xpack.enterpriseSearch.nav.contentTitle": "コンテンツ", + "xpack.enterpriseSearch.nav.elasticsearchTitle": "Elasticsearch", + "xpack.enterpriseSearch.nav.enterpriseSearchOverviewTitle": "概要", + "xpack.enterpriseSearch.nav.searchIndicesTitle": "インデックスの検索", + "xpack.enterpriseSearch.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.notFound.action1": "ダッシュボードに戻す", "xpack.enterpriseSearch.notFound.action2": "サポートに問い合わせる", "xpack.enterpriseSearch.notFound.description": "お探しのページは見つかりませんでした。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 5d2e780bf0cc7..566e86eb04ac1 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -11647,11 +11647,6 @@ "xpack.enterpriseSearch.appSearch.tokens.search.name": "公有搜索密钥", "xpack.enterpriseSearch.appSearch.tokens.update": "API 密钥“{name}”已更新", "xpack.enterpriseSearch.content.description": "Enterprise Search 提供了各种方法以便您轻松搜索数据。从网络爬虫、Elasticsearch 索引、API、直接上传或第三方连接器中选择。", - "xpack.enterpriseSearch.content.nav.appSearchTitle": "App Search", - "xpack.enterpriseSearch.content.nav.contentTitle": "内容", - "xpack.enterpriseSearch.content.nav.enterpriseSearchOverviewTitle": "概览", - "xpack.enterpriseSearch.content.nav.searchIndicesTitle": "搜索索引", - "xpack.enterpriseSearch.content.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.content.navTitle": "内容", "xpack.enterpriseSearch.content.newIndex.breadcrumb": "新搜索索引", "xpack.enterpriseSearch.content.newIndex.buttonGroup.api.description": "使用一系列客户端库可将文档添加到搜索索引", @@ -11847,7 +11842,6 @@ "xpack.enterpriseSearch.crawler.urlComboBox.invalidUrlErrorMessage": "请输入有效 URL", "xpack.enterpriseSearch.curations.settings.licenseUpgradeLink": "详细了解许可证升级", "xpack.enterpriseSearch.curations.settings.start30DayTrialButtonLabel": "开始为期 30 天的试用", - "xpack.enterpriseSearch.elasticsearch.nav.contentTitle": "Elasticsearch", "xpack.enterpriseSearch.elasticsearch.productCardDescription": "直接在 Elasticsearch 中设计并构建由相关搜索提供支持的高性能应用程序或大规模搜索实现。", "xpack.enterpriseSearch.elasticsearch.productDescription": "用于打造高效、相关的搜索体验的低级工具。", "xpack.enterpriseSearch.elasticsearch.productName": "Elasticsearch", @@ -11878,6 +11872,12 @@ "xpack.enterpriseSearch.licenseCalloutBody": "使用有效的白金级许可证,可获得通过 SAML 实现的企业验证、文档级别权限和授权支持、定制搜索体验等等。", "xpack.enterpriseSearch.licenseDocumentationLink": "详细了解许可证功能", "xpack.enterpriseSearch.licenseManagementLink": "管理您的许可", + "xpack.enterpriseSearch.nav.appSearchTitle": "App Search", + "xpack.enterpriseSearch.nav.contentTitle": "内容", + "xpack.enterpriseSearch.nav.elasticsearchTitle": "Elasticsearch", + "xpack.enterpriseSearch.nav.enterpriseSearchOverviewTitle": "概览", + "xpack.enterpriseSearch.nav.searchIndicesTitle": "搜索索引", + "xpack.enterpriseSearch.nav.workplaceSearchTitle": "Workplace Search", "xpack.enterpriseSearch.notFound.action1": "返回到您的仪表板", "xpack.enterpriseSearch.notFound.action2": "联系支持人员", "xpack.enterpriseSearch.notFound.description": "找不到您要查找的页面。", From 8880884c9193cf209661d5e037e768b190d69869 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 13 Jul 2022 11:44:01 -0500 Subject: [PATCH 21/96] [RAM] Fix snooze UI popover styles and future rescheduling (#135746) * [RAM] Fix UI styling issues on the Snooze popover * Fix future minDate * Use EuiSplitPanel where necessary * Fix scheduler popover footer * Make badge popover scrollable * Fix non-popover styling * Fix spacing issues * Restor dropdown arrow * Clean up recurrence scheduler styles * Remove unused styled formrow * Fix class naming issue Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../rule_snooze/panel/base_snooze_panel.tsx | 51 +++++++----- .../components/rule_snooze/panel/index.tsx | 11 ++- .../custom_recurrence_scheduler.tsx | 81 +++++++++---------- .../recurrence_scheduler/helpers.tsx | 4 +- .../recurrence_scheduler/index.tsx | 16 ++-- .../recurrence_scheduler.scss | 8 ++ .../components/rule_snooze/scheduler.tsx | 55 +++++++------ .../components/rules_list_notify_badge.tsx | 2 + 8 files changed, 132 insertions(+), 96 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/recurrence_scheduler.scss diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx index e1cf6aa3818fa..914ba3bb0cb05 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/base_snooze_panel.tsx @@ -18,6 +18,7 @@ import { EuiIcon, EuiLink, EuiPopoverTitle, + EuiPopoverFooter, EuiSelect, EuiSpacer, EuiText, @@ -44,6 +45,7 @@ export interface BaseSnoozePanelProps { navigateToScheduler: (sched?: SnoozeSchedule) => void; isLoading: boolean; onRemoveAllSchedules: (ids: string[]) => void; + inPopover?: boolean; } export const BaseSnoozePanel: React.FunctionComponent = ({ @@ -56,6 +58,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ navigateToScheduler, onRemoveAllSchedules, hasTitle, + inPopover = false, }) => { const [intervalValue, setIntervalValue] = useState(parseInterval(interval).value); const [intervalUnit, setIntervalUnit] = useState(parseInterval(interval).unit); @@ -132,6 +135,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ = ({ )} - = ({ isLoading={isLoading} onClick={onClickApplyButton} data-test-subj="ruleSnoozeApply" + minWidth={0} > {i18n.translate('xpack.triggersActionsUI.sections.rulesList.applySnooze', { defaultMessage: 'Apply', @@ -239,12 +243,17 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ - - + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.snoozeIndefinitely', { defaultMessage: 'Snooze indefinitely', })} - + @@ -253,6 +262,7 @@ export const BaseSnoozePanel: React.FunctionComponent = ({ = ({ )} {showCancel && ( <> - - - - - {i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { - defaultMessage: 'Cancel snooze', - })} - - - + {!inPopover && } + + {!inPopover && } + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.cancelSnooze', { + defaultMessage: 'Cancel snooze', + })} + + + + )} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx index 7a5965532e4cf..7cd7829aec874 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/panel/index.tsx @@ -14,7 +14,13 @@ export { futureTimeToInterval } from './helpers'; type SnoozePanelProps = Pick< BaseSnoozePanelProps, - 'interval' | 'snoozeRule' | 'unsnoozeRule' | 'showCancel' | 'scheduledSnoozes' | 'hasTitle' + | 'interval' + | 'snoozeRule' + | 'unsnoozeRule' + | 'showCancel' + | 'scheduledSnoozes' + | 'hasTitle' + | 'inPopover' >; export const SnoozePanel: React.FC = ({ @@ -24,6 +30,7 @@ export const SnoozePanel: React.FC = ({ showCancel, scheduledSnoozes, hasTitle = true, + inPopover = false, }) => { const [isSchedulerOpen, setIsSchedulerOpen] = useState(false); const [initialSchedule, setInitialSchedule] = useState(null); @@ -98,6 +105,7 @@ export const SnoozePanel: React.FC = ({ navigateToScheduler={onOpenScheduler} onRemoveAllSchedules={cancelSnoozeSchedules} hasTitle={hasTitle} + inPopover={inPopover} /> ) : ( = ({ onSaveSchedule={saveSnoozeSchedule} onCancelSchedules={cancelSnoozeSchedules} hasTitle={hasTitle} + inPopover={inPopover} /> ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx index e67717dc29161..4a94c43e4810e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx @@ -8,12 +8,13 @@ import { EuiButtonGroup, EuiFieldNumber, - EuiFormControlLayoutDelimited, + EuiFormControlLayout, EuiFormRow, EuiSelect, + EuiFlexGroup, + EuiFlexItem, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { euiStyled } from '@kbn/kibana-react-plugin/common'; import deepEqual from 'fast-deep-equal'; import { Moment } from 'moment'; import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; @@ -28,13 +29,6 @@ import { } from './helpers'; import { i18nEndControlOptions, i18nNthWeekdayShort } from './translations'; -// FIXME https://github.com/elastic/eui/issues/5958 -const EuiFormRowWithDelimitedFixer = euiStyled(EuiFormRow)` - & .euiFormControlLayout__childrenWrapper { - height: 100%; - } -`; - interface CustomRecurrenceSchedulerProps { startDate: Moment | null; onChange: (state: CustomFrequencyState) => void; @@ -66,7 +60,7 @@ export const CustomRecurrenceScheduler: React.FC const monthlyRecurDayOptions = useMemo(() => { if (!startDate) return []; - const { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth } = getWeekdayInfo(startDate); + const { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth } = getWeekdayInfo(startDate, 'ddd'); return [ { id: 'day', @@ -129,49 +123,49 @@ export const CustomRecurrenceScheduler: React.FC return ( <> - - setInterval(Number(e.target.value))} - /> - } - endControl={ + + + + setInterval(Number(e.target.value))} + /> + + + setFrequency(Number(e.target.value))} value={frequency} options={endControlOptions} /> - } - /> - + + + {frequency === RRuleFrequency.WEEKLY && ( )} {frequency === RRuleFrequency.MONTHLY && startDate && ( - + { - const dayOfWeek = date.format('dddd'); +export const getWeekdayInfo = (date: Moment, dayOfWeekFmt: string = 'dddd') => { + const dayOfWeek = date.format(dayOfWeekFmt); const nthWeekdayOfMonth = Math.ceil(date.date() / 7); const isLastOfMonth = nthWeekdayOfMonth > 4 || !date.isSame(moment(date).add(7, 'd'), 'month'); return { dayOfWeek, nthWeekdayOfMonth, isLastOfMonth }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx index 6b98dd34984e2..fbd5082d0f131 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx @@ -12,8 +12,8 @@ import { EuiFormControlLayout, EuiFormRow, EuiHorizontalRule, - EuiPanel, EuiSelect, + EuiSplitPanel, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import moment from 'moment'; @@ -38,6 +38,8 @@ import { } from './helpers'; import { i18nNthWeekday } from './translations'; +import './recurrence_scheduler.scss'; + interface ComponentOpts { startDate: Moment | null; endDate: Moment | null; @@ -192,8 +194,8 @@ export const RecurrenceScheduler: React.FC = ({ }, [compiledRecurrenceSchedule, onChange]); return ( - -
+ + = ({ )} -
+ -
+ {i18n.translate('xpack.triggersActionsUI.ruleSnoozeScheduler.repeatsSummary', { defaultMessage: 'Repeats {summary}', values: { summary: recurrenceSummary(compiledRecurrenceSchedule) }, })} -
-
+ + ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/recurrence_scheduler.scss b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/recurrence_scheduler.scss new file mode 100644 index 0000000000000..eb820e07f55fc --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/recurrence_scheduler.scss @@ -0,0 +1,8 @@ +.ramRecurrenceScheduler { + .euiFormRow__labelWrapper { + width: calc(20% - 8px); + } + .euiFormRow__fieldWrapper { + width: 80%; + } +} \ No newline at end of file diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx index 8fcdf10da9567..ee4721d15b289 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/scheduler.tsx @@ -13,7 +13,6 @@ import uuid from 'uuid'; import { EuiDatePicker, EuiDatePickerRange, - EuiPanel, EuiComboBox, EuiFormRow, EuiHorizontalRule, @@ -23,8 +22,10 @@ import { EuiSpacer, EuiButton, EuiPopoverTitle, + EuiPopoverFooter, EuiIcon, EuiLink, + EuiSplitPanel, } from '@elastic/eui'; import { RecurrenceSchedule, SnoozeSchedule } from '../../../../../types'; import { RecurrenceScheduler } from './recurrence_scheduler'; @@ -36,6 +37,7 @@ interface PanelOpts { onCancelSchedules: (ids: string[]) => void; initialSchedule: SnoozeSchedule | null; isLoading: boolean; + inPopover?: boolean; } export interface ComponentOpts extends PanelOpts { @@ -93,6 +95,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ initialSchedule, isLoading, onCancelSchedules, + inPopover = false, }) => { // These two states form a state machine for whether or not the user's clicks on the datepicker apply to the start/end date or start/end time // - State A: After the user clicks a start date: @@ -111,7 +114,9 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ const [selectingEndDate, setSelectingEndDate] = useState(false); const [selectingEndTime, setSelectingEndTime] = useState(false); const minDate = useMemo( - () => moment(initialSchedule?.rRule.dtstart ?? undefined), + // If the initial schedule is earlier than now, set minDate to it + // Set minDate to now if the initial schedule is in the future + () => moment.min(moment(), moment(initialSchedule?.rRule.dtstart ?? undefined)), [initialSchedule] ); @@ -240,7 +245,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ }, [initialSchedule, onCancelSchedules]); return ( - + <> = ({ /> - - + + = ({ minDate={minDate} adjustDateOnChange={false} /> - + - + = ({ isClearable={false} /> - - + + @@ -325,7 +325,7 @@ const RuleSnoozeSchedulerPanel: React.FunctionComponent = ({ /> {isRecurring && ( <> - + = ({ {initialSchedule && ( <> - - - - - {i18n.translate('xpack.triggersActionsUI.sections.rulesList.deleteSchedule', { - defaultMessage: 'Delete schedule', - })} - - - + {!inPopover && } + + {!inPopover && } + + + + {i18n.translate('xpack.triggersActionsUI.sections.rulesList.deleteSchedule', { + defaultMessage: 'Delete schedule', + })} + + + + )} - + ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx index 1bacc0003150c..2aaaa0af1123a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_notify_badge.tsx @@ -314,6 +314,7 @@ export const RulesListNotifyBadge: React.FunctionComponent ); From 469fb6364c30c9842e177b84f73f0a1abe566820 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Wed, 13 Jul 2022 20:05:06 +0300 Subject: [PATCH 22/96] [Cases] Persistable state UI registry (#135902) * Create external reference attachment registry * Pass externalReferenceAttachmentTypeRegistry to cases client * Better types * Show external references user action * Handle unregistered events * Add e2e tests * Fixe fixture plugin naming * Add cases fixture plugin to tsconfig * Fix types * Improvements * Fix types * Fixes * Create persistable state attachment type * Create persistable state attachment registry * Migrate persistable attachments * Add tests * Move test * Add tests * Add intergration tests * Migrate user actions * Extract/Inject persistable state attributes * Add tests * Fix i18n * Minor improvements * Show persistable state attachments on user actions * PR feedback * PR feedback * Skip convert to camel case attachment's state * Add tests * Fix tests * PR feedback --- x-pack/plugins/cases/common/registry.test.ts | 18 +- x-pack/plugins/cases/common/registry.ts | 4 +- x-pack/plugins/cases/common/ui/types.ts | 2 + .../plugins/cases/common/utils/attachments.ts | 31 +++ x-pack/plugins/cases/public/api/utils.test.ts | 85 +++++++- x-pack/plugins/cases/public/api/utils.ts | 88 ++++++++- x-pack/plugins/cases/public/application.tsx | 6 +- .../external_reference_registry.ts | 4 +- .../persistable_state_registry.ts | 15 ++ .../client/attachment_framework/types.ts | 33 +++- .../ui/get_all_cases_selector_modal.tsx | 12 +- .../cases/public/client/ui/get_cases.tsx | 7 +- .../public/client/ui/get_cases_context.tsx | 8 +- .../client/ui/get_create_case_flyout.tsx | 13 +- .../public/client/ui/get_recent_cases.tsx | 12 +- .../public/common/mock/test_providers.tsx | 15 +- ..._cases_add_to_existing_case_modal.test.tsx | 3 + .../cases/public/components/app/index.tsx | 4 + .../public/components/cases_context/index.tsx | 9 +- .../use_cases_add_to_new_case_flyout.test.tsx | 3 + .../editable_title.test.tsx.snap | 4 + .../__snapshots__/index.test.tsx.snap | 4 + .../components/recent_cases/index.test.tsx | 2 +- .../user_actions/comment/comment.test.tsx | 97 +++++++++- .../user_actions/comment/comment.tsx | 19 ++ .../comment/external_reference.tsx | 89 ++------- .../comment/persistable_state.tsx | 37 ++++ .../comment/registered_attachments.tsx | 113 +++++++++++ .../public/components/user_actions/index.tsx | 5 +- .../public/components/user_actions/mock.ts | 3 + .../public/components/user_actions/types.ts | 2 + .../cases/public/containers/api.test.tsx | 127 +++++++++++- x-pack/plugins/cases/public/containers/api.ts | 34 ++-- .../plugins/cases/public/containers/mock.ts | 154 ++++++++++++++- x-pack/plugins/cases/public/plugin.ts | 13 ++ x-pack/plugins/cases/public/types.ts | 2 + .../persistable_state_registry.ts | 4 +- .../attachment_framework/so_references.ts | 2 +- .../cases/server/client/attachments/update.ts | 2 +- x-pack/plugins/cases/server/client/utils.ts | 6 +- x-pack/plugins/cases/server/common/utils.ts | 20 -- .../server/services/user_actions/index.ts | 7 +- .../apps/cases/attachment_framework.ts | 181 ++++++++++++++++-- .../fixtures/plugins/cases/kibana.json | 2 +- .../external_references_content.tsx | 2 +- .../public/attachments/persistable_state.tsx | 68 +++++++ .../fixtures/plugins/cases/public/plugin.ts | 27 ++- .../server/attachments/persistable_state.ts | 12 ++ .../fixtures/plugins/cases/server/plugin.ts | 13 +- 49 files changed, 1223 insertions(+), 200 deletions(-) create mode 100644 x-pack/plugins/cases/common/utils/attachments.ts create mode 100644 x-pack/plugins/cases/public/client/attachment_framework/persistable_state_registry.ts create mode 100644 x-pack/plugins/cases/public/components/user_actions/comment/persistable_state.tsx create mode 100644 x-pack/plugins/cases/public/components/user_actions/comment/registered_attachments.tsx create mode 100644 x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/persistable_state.tsx create mode 100644 x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/attachments/persistable_state.ts diff --git a/x-pack/plugins/cases/common/registry.test.ts b/x-pack/plugins/cases/common/registry.test.ts index 2fdda34d3ce91..cce3997630d99 100644 --- a/x-pack/plugins/cases/common/registry.test.ts +++ b/x-pack/plugins/cases/common/registry.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { CaseRegistry } from './registry'; +import { AttachmentTypeRegistry } from './registry'; export const ExpressionComponent: React.FunctionComponent = () => { return null; @@ -15,18 +15,18 @@ const getItem = (id: string = 'test') => { return { id }; }; -describe('CaseRegistry', () => { +describe('AttachmentTypeRegistry', () => { beforeEach(() => jest.resetAllMocks()); describe('has()', () => { it('returns false for unregistered items', () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); expect(registry.has('test')).toEqual(false); }); it('returns true after registering an item', () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); registry.register(getItem()); expect(registry.has('test')); @@ -35,14 +35,14 @@ describe('CaseRegistry', () => { describe('register()', () => { it('able to register items', () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); registry.register(getItem()); expect(registry.has('test')).toEqual(true); }); it('throws error if item is already registered', () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); registry.register(getItem('test')); expect(() => registry.register(getItem('test'))).toThrowErrorMatchingInlineSnapshot( @@ -53,7 +53,7 @@ describe('CaseRegistry', () => { describe('get()', () => { it('returns item', () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); registry.register(getItem()); const actionType = registry.get('test'); @@ -63,7 +63,7 @@ describe('CaseRegistry', () => { }); it(`throw error when action type doesn't exist`, () => { - const registry = new CaseRegistry('TestRegistry'); + const registry = new AttachmentTypeRegistry('TestRegistry'); expect(() => registry.get('not-exist-item')).toThrowErrorMatchingInlineSnapshot( `"Item \\"not-exist-item\\" is not registered on registry TestRegistry"` ); @@ -72,7 +72,7 @@ describe('CaseRegistry', () => { describe('list()', () => { it('returns list of items', () => { - const actionTypeRegistry = new CaseRegistry('TestRegistry'); + const actionTypeRegistry = new AttachmentTypeRegistry('TestRegistry'); actionTypeRegistry.register(getItem()); const actionTypes = actionTypeRegistry.list(); diff --git a/x-pack/plugins/cases/common/registry.ts b/x-pack/plugins/cases/common/registry.ts index b6ba2c2a004ff..1b3d9969c75b0 100644 --- a/x-pack/plugins/cases/common/registry.ts +++ b/x-pack/plugins/cases/common/registry.ts @@ -7,11 +7,11 @@ import { i18n } from '@kbn/i18n'; -interface BaseItem { +export interface AttachmentTypeRegistryBaseItem { id: string; } -export class CaseRegistry { +export class AttachmentTypeRegistry { private readonly collection: Map = new Map(); constructor(private readonly name: string) {} diff --git a/x-pack/plugins/cases/common/ui/types.ts b/x-pack/plugins/cases/common/ui/types.ts index 7ab5fccafa7bb..65dc8b124c2b1 100644 --- a/x-pack/plugins/cases/common/ui/types.ts +++ b/x-pack/plugins/cases/common/ui/types.ts @@ -22,6 +22,7 @@ import { CasesMetricsResponse, CaseSeverity, CommentResponseExternalReferenceType, + CommentResponseTypePersistableState, } from '../api'; import { SnakeToCamelCase } from '../types'; @@ -67,6 +68,7 @@ export type CaseViewRefreshPropInterface = null | { export type Comment = SnakeToCamelCase; export type AlertComment = SnakeToCamelCase; export type ExternalReferenceComment = SnakeToCamelCase; +export type PersistableComment = SnakeToCamelCase; export type CaseUserActions = SnakeToCamelCase; export type CaseExternalService = SnakeToCamelCase; export type Case = Omit, 'comments'> & { comments: Comment[] }; diff --git a/x-pack/plugins/cases/common/utils/attachments.ts b/x-pack/plugins/cases/common/utils/attachments.ts new file mode 100644 index 0000000000000..75446ebedb0ed --- /dev/null +++ b/x-pack/plugins/cases/common/utils/attachments.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + CommentRequest, + CommentRequestExternalReferenceType, + CommentType, + CommentRequestPersistableStateType, +} from '../api'; + +/** + * A type narrowing function for external reference attachments. + */ +export const isCommentRequestTypeExternalReference = ( + context: CommentRequest +): context is CommentRequestExternalReferenceType => { + return context.type === CommentType.externalReference; +}; + +/** + * A type narrowing function for persistable state attachments. + */ +export const isCommentRequestTypePersistableState = ( + context: Partial +): context is CommentRequestPersistableStateType => { + return context.type === CommentType.persistableState; +}; diff --git a/x-pack/plugins/cases/public/api/utils.test.ts b/x-pack/plugins/cases/public/api/utils.test.ts index f46ada35ffca1..e7dd99938e3cf 100644 --- a/x-pack/plugins/cases/public/api/utils.test.ts +++ b/x-pack/plugins/cases/public/api/utils.test.ts @@ -5,8 +5,29 @@ * 2.0. */ -import { allCases, allCasesSnake } from '../containers/mock'; -import { convertAllCasesToCamel, convertArrayToCamelCase, convertToCamelCase } from './utils'; +import { + allCases, + allCasesSnake, + caseWithRegisteredAttachments, + caseWithRegisteredAttachmentsSnake, + externalReferenceAttachment, + externalReferenceAttachmentSnake, + persistableStateAttachmentSnake, + persistableStateAttachment, + caseUserActionsWithRegisteredAttachments, + caseUserActionsWithRegisteredAttachmentsSnake, +} from '../containers/mock'; +import { + convertAllCasesToCamel, + convertArrayToCamelCase, + convertCaseResolveToCamelCase, + convertCasesToCamelCase, + convertCaseToCamelCase, + convertToCamelCase, + convertAttachmentsToCamelCase, + convertAttachmentToCamelCase, + convertUserActionsToCamelCase, +} from './utils'; describe('utils', () => { describe('convertArrayToCamelCase', () => { @@ -39,4 +60,64 @@ describe('utils', () => { expect(convertAllCasesToCamel(allCasesSnake)).toEqual(allCases); }); }); + + describe('convertCaseToCamelCase', () => { + it('converts a case to camel case without converting registered attachments', () => { + expect(convertCaseToCamelCase(caseWithRegisteredAttachmentsSnake)).toEqual( + caseWithRegisteredAttachments + ); + }); + }); + + describe('convertCasesToCamelCase', () => { + it('converts multiple cases to camel case without converting registered attachments', () => { + expect(convertCasesToCamelCase([caseWithRegisteredAttachmentsSnake])).toEqual([ + caseWithRegisteredAttachments, + ]); + }); + }); + + describe('convertCaseResolveToCamelCase', () => { + it('converts multiple cases to camel case without converting registered attachments', () => { + expect( + convertCaseResolveToCamelCase({ + outcome: 'aliasMatch', + case: caseWithRegisteredAttachmentsSnake, + }) + ).toEqual({ + outcome: 'aliasMatch', + case: caseWithRegisteredAttachments, + }); + }); + }); + + describe('convertAttachmentsToCamelCase', () => { + it('converts attachments camel case without converting registered attachments', () => { + expect(convertAttachmentsToCamelCase(caseWithRegisteredAttachmentsSnake.comments)).toEqual( + caseWithRegisteredAttachments.comments + ); + }); + }); + + describe('convertAttachmentToCamelCase', () => { + it('converts an external reference attachment to camel case without converting externalReferenceMetadata', () => { + expect(convertAttachmentToCamelCase(externalReferenceAttachmentSnake)).toEqual( + externalReferenceAttachment + ); + }); + + it('converts a persistable state attachment to camel case without converting externalReferenceMetadata', () => { + expect(convertAttachmentToCamelCase(persistableStateAttachmentSnake)).toEqual( + persistableStateAttachment + ); + }); + }); + + describe('convertUserActionsToCamelCase', () => { + it('converts attachments camel case without converting registered attachments', () => { + expect(convertUserActionsToCamelCase(caseUserActionsWithRegisteredAttachmentsSnake)).toEqual( + caseUserActionsWithRegisteredAttachments + ); + }); + }); }); diff --git a/x-pack/plugins/cases/public/api/utils.ts b/x-pack/plugins/cases/public/api/utils.ts index 19cb800de921b..992f078bfb7f1 100644 --- a/x-pack/plugins/cases/public/api/utils.ts +++ b/x-pack/plugins/cases/public/api/utils.ts @@ -5,9 +5,22 @@ * 2.0. */ -import { isArray, set, camelCase, isObject } from 'lodash'; -import { CasesFindResponse, CaseResponse } from '../../common/api'; -import { Cases, Case } from '../containers/types'; +import { isArray, set, camelCase, isObject, omit, get } from 'lodash'; +import { + isCommentRequestTypeExternalReference, + isCommentRequestTypePersistableState, +} from '../../common/utils/attachments'; +import { + CasesFindResponse, + CaseResponse, + CaseUserActionsResponse, + CommentRequest, + CommentResponse, + CaseResolveResponse, + CasesResponse, +} from '../../common/api'; +import { isCommentUserAction } from '../../common/utils/user_actions'; +import { Cases, Case, Comment, ResolvedCase } from '../containers/types'; export const convertArrayToCamelCase = (arrayOfSnakes: unknown[]): unknown[] => arrayOfSnakes.reduce((acc: unknown[], value) => { @@ -32,8 +45,75 @@ export const convertToCamelCase = (obj: T): U => return acc; }, {} as U); +export const convertCaseToCamelCase = (theCase: CaseResponse): Case => { + const { comments, ...restCase } = theCase; + return { + ...convertToCamelCase(restCase), + ...(comments != null ? { comments: convertAttachmentsToCamelCase(comments) } : {}), + }; +}; + +export const convertCasesToCamelCase = (cases: CasesResponse): Case[] => + cases.map(convertCaseToCamelCase); + +export const convertCaseResolveToCamelCase = (res: CaseResolveResponse): ResolvedCase => { + const { case: theCase, ...rest } = res; + return { + ...convertToCamelCase(rest), + case: convertCaseToCamelCase(theCase), + }; +}; + +export const convertAttachmentsToCamelCase = (attachments: CommentResponse[]): Comment[] => { + return attachments.map((attachment) => convertAttachmentToCamelCase(attachment)); +}; + +export const convertAttachmentToCamelCase = (attachment: CommentRequest): Comment => { + if (isCommentRequestTypeExternalReference(attachment)) { + return convertAttachmentToCamelExceptProperty(attachment, 'externalReferenceMetadata'); + } + + if (isCommentRequestTypePersistableState(attachment)) { + return convertAttachmentToCamelExceptProperty(attachment, 'persistableStateAttachmentState'); + } + + return convertToCamelCase(attachment); +}; + +export const convertUserActionsToCamelCase = (userActions: CaseUserActionsResponse) => { + return userActions.map((userAction) => { + if (isCommentUserAction(userAction)) { + const userActionWithoutPayload = omit(userAction, 'payload.comment'); + const camelCaseUserActionWithoutPayload = convertToCamelCase(userActionWithoutPayload); + + return { + ...camelCaseUserActionWithoutPayload, + payload: { + comment: convertAttachmentToCamelCase(userAction.payload.comment), + }, + }; + } + + return convertToCamelCase(userAction); + }); +}; + +const convertAttachmentToCamelExceptProperty = ( + attachment: CommentRequest, + key: string +): Comment => { + const intactValue = get(attachment, key); + const attachmentWithoutIntactValue = omit(attachment, key); + const camelCaseAttachmentWithoutIntactValue = convertToCamelCase(attachmentWithoutIntactValue); + + return { + ...camelCaseAttachmentWithoutIntactValue, + [key]: intactValue, + } as Comment; +}; + export const convertAllCasesToCamel = (snakeCases: CasesFindResponse): Cases => ({ - cases: snakeCases.cases.map((theCase) => convertToCamelCase(theCase)), + cases: convertCasesToCamelCase(snakeCases.cases), countOpenCases: snakeCases.count_open_cases, countInProgressCases: snakeCases.count_in_progress_cases, countClosedCases: snakeCases.count_closed_cases, diff --git a/x-pack/plugins/cases/public/application.tsx b/x-pack/plugins/cases/public/application.tsx index 49cdfa434923d..5acf288d3bc34 100644 --- a/x-pack/plugins/cases/public/application.tsx +++ b/x-pack/plugins/cases/public/application.tsx @@ -20,6 +20,7 @@ import { EuiThemeProvider as StyledComponentsThemeProvider } from '@kbn/kibana-r import { RenderAppProps } from './types'; import { CasesApp } from './components/app'; import { ExternalReferenceAttachmentTypeRegistry } from './client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from './client/attachment_framework/persistable_state_registry'; export const renderApp = (deps: RenderAppProps) => { const { mountParams } = deps; @@ -34,16 +35,18 @@ export const renderApp = (deps: RenderAppProps) => { interface CasesAppWithContextProps { externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry; + persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; } const CasesAppWithContext: React.FC = React.memo( - ({ externalReferenceAttachmentTypeRegistry }) => { + ({ externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry }) => { const [darkMode] = useUiSetting$('theme:darkMode'); return ( ); @@ -73,6 +76,7 @@ export const App: React.FC<{ deps: RenderAppProps }> = ({ deps }) => { externalReferenceAttachmentTypeRegistry={ deps.externalReferenceAttachmentTypeRegistry } + persistableStateAttachmentTypeRegistry={deps.persistableStateAttachmentTypeRegistry} />
diff --git a/x-pack/plugins/cases/public/client/attachment_framework/external_reference_registry.ts b/x-pack/plugins/cases/public/client/attachment_framework/external_reference_registry.ts index a172c7ba70089..ed3eada182b0f 100644 --- a/x-pack/plugins/cases/public/client/attachment_framework/external_reference_registry.ts +++ b/x-pack/plugins/cases/public/client/attachment_framework/external_reference_registry.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { CaseRegistry } from '../../../common/registry'; +import { AttachmentTypeRegistry } from '../../../common/registry'; import { ExternalReferenceAttachmentType } from './types'; -export class ExternalReferenceAttachmentTypeRegistry extends CaseRegistry { +export class ExternalReferenceAttachmentTypeRegistry extends AttachmentTypeRegistry { constructor() { super('ExternalReferenceAttachmentTypeRegistry'); } diff --git a/x-pack/plugins/cases/public/client/attachment_framework/persistable_state_registry.ts b/x-pack/plugins/cases/public/client/attachment_framework/persistable_state_registry.ts new file mode 100644 index 0000000000000..1b8c5a1e40529 --- /dev/null +++ b/x-pack/plugins/cases/public/client/attachment_framework/persistable_state_registry.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AttachmentTypeRegistry } from '../../../common/registry'; +import { PersistableStateAttachmentType } from './types'; + +export class PersistableStateAttachmentTypeRegistry extends AttachmentTypeRegistry { + constructor() { + super('PersistableStateAttachmentTypeRegistry'); + } +} diff --git a/x-pack/plugins/cases/public/client/attachment_framework/types.ts b/x-pack/plugins/cases/public/client/attachment_framework/types.ts index 01e635c17ad59..9e62a00957aef 100644 --- a/x-pack/plugins/cases/public/client/attachment_framework/types.ts +++ b/x-pack/plugins/cases/public/client/attachment_framework/types.ts @@ -7,34 +7,49 @@ import type React from 'react'; import { EuiCommentProps, IconType } from '@elastic/eui'; -import { CommentRequestExternalReferenceType } from '../../../common/api'; +import { + CommentRequestExternalReferenceType, + CommentRequestPersistableStateType, +} from '../../../common/api'; import { Case } from '../../containers/types'; -export interface ExternalReferenceAttachmentViewObject { +export interface AttachmentViewObject { type?: EuiCommentProps['type']; timelineIcon?: EuiCommentProps['timelineIcon']; actions?: EuiCommentProps['actions']; event?: EuiCommentProps['event']; - children?: React.LazyExoticComponent; + children?: React.LazyExoticComponent>; } -export interface ExternalReferenceAttachmentViewProps { +export interface CommonAttachmentViewProps { + caseData: Pick; +} + +export interface ExternalReferenceAttachmentViewProps extends CommonAttachmentViewProps { externalReferenceId: CommentRequestExternalReferenceType['externalReferenceId']; externalReferenceMetadata: CommentRequestExternalReferenceType['externalReferenceMetadata']; - caseData: Pick; } -export interface ExternalReferenceAttachmentType { +export interface PersistableStateAttachmentViewProps extends CommonAttachmentViewProps { + persistableStateAttachmentTypeId: CommentRequestPersistableStateType['persistableStateAttachmentTypeId']; + persistableStateAttachmentState: CommentRequestPersistableStateType['persistableStateAttachmentState']; +} + +export interface AttachmentType { id: string; icon: IconType; displayName: string; - getAttachmentViewObject: ( - props: ExternalReferenceAttachmentViewProps - ) => ExternalReferenceAttachmentViewObject; + getAttachmentViewObject: () => AttachmentViewObject; } +export type ExternalReferenceAttachmentType = AttachmentType; +export type PersistableStateAttachmentType = AttachmentType; + export interface AttachmentFramework { registerExternalReference: ( externalReferenceAttachmentType: ExternalReferenceAttachmentType ) => void; + registerPersistableState: ( + persistableStateAttachmentType: PersistableStateAttachmentType + ) => void; } diff --git a/x-pack/plugins/cases/public/client/ui/get_all_cases_selector_modal.tsx b/x-pack/plugins/cases/public/client/ui/get_all_cases_selector_modal.tsx index 37145c59b94ad..93c107f8cc726 100644 --- a/x-pack/plugins/cases/public/client/ui/get_all_cases_selector_modal.tsx +++ b/x-pack/plugins/cases/public/client/ui/get_all_cases_selector_modal.tsx @@ -13,7 +13,7 @@ import { CasesProvider, CasesContextProps } from '../../components/cases_context type GetAllCasesSelectorModalPropsInternal = AllCasesSelectorModalProps & CasesContextProps; export type GetAllCasesSelectorModalProps = Omit< GetAllCasesSelectorModalPropsInternal, - 'externalReferenceAttachmentTypeRegistry' + 'externalReferenceAttachmentTypeRegistry' | 'persistableStateAttachmentTypeRegistry' >; const AllCasesSelectorModalLazy: React.FC = lazy( @@ -21,13 +21,21 @@ const AllCasesSelectorModalLazy: React.FC = lazy( ); export const getAllCasesSelectorModalLazy = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, hiddenStatuses, onRowClick, onClose, }: GetAllCasesSelectorModalPropsInternal) => ( - + }> ; +export type GetCasesProps = Omit< + GetCasesPropsInternal, + 'externalReferenceAttachmentTypeRegistry' | 'persistableStateAttachmentTypeRegistry' +>; const CasesRoutesLazy: React.FC = lazy(() => import('../../components/app/routes')); export const getCasesLazy = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, basePath, @@ -33,6 +37,7 @@ export const getCasesLazy = ({ ; const CasesProviderLazy: React.FC<{ value: GetCasesContextPropsInternal }> = lazy( @@ -21,6 +21,7 @@ const CasesProviderLazy: React.FC<{ value: GetCasesContextPropsInternal }> = laz const CasesProviderLazyWrapper = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, features, @@ -32,6 +33,7 @@ const CasesProviderLazyWrapper = ({ ): (() => React.FC) => { const CasesProviderLazyWrapperWithRegistry: React.FC = ({ children, @@ -59,6 +62,7 @@ export const getCasesContextLazy = ({ {children} diff --git a/x-pack/plugins/cases/public/client/ui/get_create_case_flyout.tsx b/x-pack/plugins/cases/public/client/ui/get_create_case_flyout.tsx index 5149b71d19dd4..e6f6b5465173e 100644 --- a/x-pack/plugins/cases/public/client/ui/get_create_case_flyout.tsx +++ b/x-pack/plugins/cases/public/client/ui/get_create_case_flyout.tsx @@ -13,7 +13,7 @@ import { CasesProvider, CasesContextProps } from '../../components/cases_context type GetCreateCaseFlyoutPropsInternal = CreateCaseFlyoutProps & CasesContextProps; export type GetCreateCaseFlyoutProps = Omit< GetCreateCaseFlyoutPropsInternal, - 'externalReferenceAttachmentTypeRegistry' + 'externalReferenceAttachmentTypeRegistry' | 'persistableStateAttachmentTypeRegistry' >; export const CreateCaseFlyoutLazy: React.FC = lazy( @@ -21,6 +21,7 @@ export const CreateCaseFlyoutLazy: React.FC = lazy( ); export const getCreateCaseFlyoutLazy = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, features, @@ -29,7 +30,15 @@ export const getCreateCaseFlyoutLazy = ({ onSuccess, attachments, }: GetCreateCaseFlyoutPropsInternal) => ( - + }> ; const RecentCasesLazy: React.FC = lazy( @@ -21,11 +21,19 @@ const RecentCasesLazy: React.FC = lazy( ); export const getRecentCasesLazy = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, maxCasesToShow, }: GetRecentCasesPropsInternal) => ( - + }> diff --git a/x-pack/plugins/cases/public/common/mock/test_providers.tsx b/x-pack/plugins/cases/public/common/mock/test_providers.tsx index 4d1bd4b68accd..84bf68f7fa814 100644 --- a/x-pack/plugins/cases/public/common/mock/test_providers.tsx +++ b/x-pack/plugins/cases/public/common/mock/test_providers.tsx @@ -25,6 +25,7 @@ import { StartServices } from '../../types'; import { ReleasePhase } from '../../components/types'; import { CasesPermissions } from '../../client/helpers/capabilities'; import { ExternalReferenceAttachmentTypeRegistry } from '../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../client/attachment_framework/persistable_state_registry'; interface TestProviderProps { children: React.ReactNode; @@ -33,6 +34,7 @@ interface TestProviderProps { owner?: string[]; releasePhase?: ReleasePhase; externalReferenceAttachmentTypeRegistry?: ExternalReferenceAttachmentTypeRegistry; + persistableStateAttachmentTypeRegistry?: PersistableStateAttachmentTypeRegistry; } type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult; @@ -47,6 +49,7 @@ const TestProvidersComponent: React.FC = ({ permissions = allCasesPermissions(), releasePhase = 'ga', externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(), + persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(), }) => { const queryClient = new QueryClient({ defaultOptions: { @@ -62,7 +65,13 @@ const TestProvidersComponent: React.FC = ({ ({ eui: euiDarkVars, darkMode: true })}> {children} @@ -78,6 +87,7 @@ export const TestProviders = React.memo(TestProvidersComponent); export interface AppMockRenderer { externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry; + persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; render: UiRender; coreStart: StartServices; queryClient: QueryClient; @@ -111,6 +121,7 @@ export const createAppMockRenderer = ({ permissions = allCasesPermissions(), releasePhase = 'ga', externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(), + persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(), }: Omit = {}): AppMockRenderer => { const services = createStartServicesMock(); const queryClient = new QueryClient({ @@ -129,6 +140,7 @@ export const createAppMockRenderer = ({ { const useCreateAttachmentsMock = useCreateAttachments as jest.Mock; const externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(); +const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); describe('use cases add to existing case modal hook', () => { useCreateAttachmentsMock.mockReturnValue({ @@ -60,6 +62,7 @@ describe('use cases add to existing case modal hook', () => { = ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, }) => { const userCapabilities = useApplicationCapabilities(); @@ -29,6 +32,7 @@ const CasesAppComponent: React.FC = ({ {getCasesLazy({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner: [APP_OWNER], useFetchAlertData: () => [false, {}], permissions: userCapabilities.generalCases, diff --git a/x-pack/plugins/cases/public/components/cases_context/index.tsx b/x-pack/plugins/cases/public/components/cases_context/index.tsx index de63eefb79cc5..161fcce7abcfb 100644 --- a/x-pack/plugins/cases/public/components/cases_context/index.tsx +++ b/x-pack/plugins/cases/public/components/cases_context/index.tsx @@ -20,11 +20,13 @@ import { CasesFeaturesAllRequired, CasesFeatures } from '../../containers/types' import { CasesGlobalComponents } from './cases_global_components'; import { ReleasePhase } from '../types'; import { ExternalReferenceAttachmentTypeRegistry } from '../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../client/attachment_framework/persistable_state_registry'; export type CasesContextValueDispatch = Dispatch; export interface CasesContextValue { externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry; + persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; owner: string[]; appId: string; appTitle: string; @@ -41,7 +43,10 @@ export interface CasesContextValue { export interface CasesContextProps extends Pick< CasesContextValue, - 'owner' | 'permissions' | 'externalReferenceAttachmentTypeRegistry' + | 'owner' + | 'permissions' + | 'externalReferenceAttachmentTypeRegistry' + | 'persistableStateAttachmentTypeRegistry' > { basePath?: string; features?: CasesFeatures; @@ -59,6 +64,7 @@ export const CasesProvider: React.FC<{ value: CasesContextProps }> = ({ children, value: { externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, basePath = DEFAULT_BASE_PATH, @@ -70,6 +76,7 @@ export const CasesProvider: React.FC<{ value: CasesContextProps }> = ({ const [state, dispatch] = useReducer(casesContextReducer, getInitialCasesContextState()); const [value, setValue] = useState(() => ({ externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, owner, permissions, basePath, diff --git a/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.test.tsx b/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.test.tsx index d553295eaef98..b49349f9844fa 100644 --- a/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.test.tsx +++ b/x-pack/plugins/cases/public/components/create/flyout/use_cases_add_to_new_case_flyout.test.tsx @@ -15,10 +15,12 @@ import { CasesContextStoreActionsList } from '../../cases_context/cases_context_ import { useCasesAddToNewCaseFlyout } from './use_cases_add_to_new_case_flyout'; import { allCasesPermissions } from '../../../common/mock'; import { ExternalReferenceAttachmentTypeRegistry } from '../../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../../client/attachment_framework/persistable_state_registry'; jest.mock('../../../common/use_cases_toast'); const externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(); +const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); describe('use cases add to new case flyout hook', () => { const dispatch = jest.fn(); @@ -30,6 +32,7 @@ describe('use cases add to new case flyout hook', () => { diff --git a/x-pack/plugins/cases/public/components/header_page/__snapshots__/index.test.tsx.snap b/x-pack/plugins/cases/public/components/header_page/__snapshots__/index.test.tsx.snap index 75f368a9cc61a..cfb75e0c286f2 100644 --- a/x-pack/plugins/cases/public/components/header_page/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/cases/public/components/header_page/__snapshots__/index.test.tsx.snap @@ -46,6 +46,10 @@ exports[`HeaderPage it renders 1`] = ` "all": true, "read": true, }, + "persistableStateAttachmentTypeRegistry": PersistableStateAttachmentTypeRegistry { + "collection": Map {}, + "name": "PersistableStateAttachmentTypeRegistry", + }, } } > diff --git a/x-pack/plugins/cases/public/components/recent_cases/index.test.tsx b/x-pack/plugins/cases/public/components/recent_cases/index.test.tsx index d25f3b997aeda..82ed36ef25243 100644 --- a/x-pack/plugins/cases/public/components/recent_cases/index.test.tsx +++ b/x-pack/plugins/cases/public/components/recent_cases/index.test.tsx @@ -63,7 +63,7 @@ describe('RecentCases', () => { ); - expect(getAllByTestId('case-details-link')).toHaveLength(7); + expect(getAllByTestId('case-details-link')).toHaveLength(8); }); it('render max cases correctly', () => { diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx index d7f4c9ee0150b..3c41caecdb0aa 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx @@ -18,14 +18,18 @@ import { getExternalReferenceAttachment, getExternalReferenceUserAction, getHostIsolationUserAction, + getPersistableStateAttachment, + getPersistableStateUserAction, getUserAction, hostIsolationComment, + persistableStateAttachment, } from '../../../containers/mock'; import { AppMockRenderer, createAppMockRenderer, TestProviders } from '../../../common/mock'; import { createCommentUserActionBuilder } from './comment'; import { getMockBuilderArgs } from '../mock'; import { useCaseViewParams } from '../../../common/navigation'; import { ExternalReferenceAttachmentTypeRegistry } from '../../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../../client/attachment_framework/persistable_state_registry'; jest.mock('../../../common/lib/kibana'); jest.mock('../../../common/navigation/hooks'); @@ -204,7 +208,7 @@ describe('createCommentUserActionBuilder', () => { const createdUserAction = builder.build(); const result = appMockRender.render(); - expect(result.getByTestId('comment-external-reference-.test')).toBeInTheDocument(); + expect(result.getByTestId('comment-externalReference-.test')).toBeInTheDocument(); expect(result.getByTestId('copy-link-external-reference-comment-id')).toBeInTheDocument(); expect(result.getByTestId('user-action-username-with-avatar')).toBeInTheDocument(); expect(screen.getByText('added a chart')).toBeInTheDocument(); @@ -227,7 +231,7 @@ describe('createCommentUserActionBuilder', () => { const createdUserAction = builder.build(); const result = appMockRender.render(); - expect(result.getByTestId('comment-external-reference-not-found')).toBeInTheDocument(); + expect(result.getByTestId('comment-externalReference-not-found')).toBeInTheDocument(); expect(screen.getByText('added an attachment of type')).toBeInTheDocument(); expect(screen.getByText('Attachment type is not registered')).toBeInTheDocument(); }); @@ -259,7 +263,94 @@ describe('createCommentUserActionBuilder', () => { const createdUserAction = builder.build(); const result = appMockRender.render(); - expect(result.getByTestId('comment-external-reference-.test')).toBeInTheDocument(); + expect(result.getByTestId('comment-externalReference-.test')).toBeInTheDocument(); + expect(screen.getByText('Attachment actions')).toBeInTheDocument(); + }); + }); + + describe('Persistable state', () => { + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('renders correctly a persistable state attachment', async () => { + const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); + persistableStateAttachmentTypeRegistry.register( + getPersistableStateAttachment({ type: 'regular' }) + ); + + const userAction = getPersistableStateUserAction(); + const builder = createCommentUserActionBuilder({ + ...builderArgs, + persistableStateAttachmentTypeRegistry, + caseData: { + ...builderArgs.caseData, + comments: [persistableStateAttachment], + }, + userAction, + }); + + const createdUserAction = builder.build(); + const result = appMockRender.render(); + + expect(result.getByTestId('comment-persistableState-.test')).toBeInTheDocument(); + expect(result.getByTestId('copy-link-persistable-state-comment-id')).toBeInTheDocument(); + expect(result.getByTestId('user-action-username-with-avatar')).toBeInTheDocument(); + expect(screen.getByText('added an embeddable')).toBeInTheDocument(); + }); + + it('renders correctly if the reference is not registered', async () => { + const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); + + const userAction = getPersistableStateUserAction(); + const builder = createCommentUserActionBuilder({ + ...builderArgs, + persistableStateAttachmentTypeRegistry, + caseData: { + ...builderArgs.caseData, + comments: [persistableStateAttachment], + }, + userAction, + }); + + const createdUserAction = builder.build(); + const result = appMockRender.render(); + + expect(result.getByTestId('comment-persistableState-not-found')).toBeInTheDocument(); + expect(screen.getByText('added an attachment of type')).toBeInTheDocument(); + expect(screen.getByText('Attachment type is not registered')).toBeInTheDocument(); + }); + + it('renders correctly a persistable state with actions', async () => { + const ActionsView = () => { + return <>{'Attachment actions'}; + }; + + const attachment = getPersistableStateAttachment({ + type: 'regular', + actions: , + }); + + const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); + persistableStateAttachmentTypeRegistry.register(attachment); + + const userAction = getPersistableStateUserAction(); + const builder = createCommentUserActionBuilder({ + ...builderArgs, + persistableStateAttachmentTypeRegistry, + caseData: { + ...builderArgs.caseData, + comments: [persistableStateAttachment], + }, + userAction, + }); + + const createdUserAction = builder.build(); + const result = appMockRender.render(); + + expect(result.getByTestId('comment-persistableState-.test')).toBeInTheDocument(); expect(screen.getByText('Attachment actions')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx index 0dfd5876cea6b..ef5b4418d454f 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx @@ -16,6 +16,7 @@ import { createUserAttachmentUserActionBuilder } from './user'; import { createAlertAttachmentUserActionBuilder } from './alert'; import { createActionAttachmentUserActionBuilder } from './actions'; import { createExternalReferenceAttachmentUserActionBuilder } from './external_reference'; +import { createPersistableStateAttachmentUserActionBuilder } from './persistable_state'; const getUpdateLabelTitle = () => `${i18n.EDITED_FIELD} ${i18n.COMMENT.toLowerCase()}`; const getDeleteLabelTitle = () => `${i18n.REMOVED_FIELD} ${i18n.COMMENT.toLowerCase()}`; @@ -41,6 +42,7 @@ const getCreateCommentUserAction = ({ userAction, caseData, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, comment, commentRefs, manageMarkdownEditIds, @@ -89,14 +91,18 @@ const getCreateCommentUserAction = ({ onRuleDetailsClick, onShowAlertDetails, }); + return alertBuilder.build(); + case CommentType.actions: const actionBuilder = createActionAttachmentUserActionBuilder({ userAction, comment, actionsNavigation, }); + return actionBuilder.build(); + case CommentType.externalReference: const externalReferenceBuilder = createExternalReferenceAttachmentUserActionBuilder({ userAction, @@ -104,7 +110,18 @@ const getCreateCommentUserAction = ({ externalReferenceAttachmentTypeRegistry, caseData, }); + return externalReferenceBuilder.build(); + + case CommentType.persistableState: + const persistableBuilder = createPersistableStateAttachmentUserActionBuilder({ + userAction, + comment, + persistableStateAttachmentTypeRegistry, + caseData, + }); + + return persistableBuilder.build(); default: return []; } @@ -113,6 +130,7 @@ const getCreateCommentUserAction = ({ export const createCommentUserActionBuilder: UserActionBuilder = ({ caseData, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, userAction, commentRefs, manageMarkdownEditIds, @@ -148,6 +166,7 @@ export const createCommentUserActionBuilder: UserActionBuilder = ({ caseData, userAction: commentUserAction, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, comment, commentRefs, manageMarkdownEditIds, diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/external_reference.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/external_reference.tsx index 3a28e8abd65d3..10b676be711b7 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/external_reference.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/external_reference.tsx @@ -5,16 +5,10 @@ * 2.0. */ -import React, { Suspense } from 'react'; - -import { EuiCallOut, EuiCode, EuiLoadingSpinner } from '@elastic/eui'; import { CommentResponseExternalReferenceType } from '../../../../common/api'; import { UserActionBuilder, UserActionBuilderArgs } from '../types'; -import { UserActionTimestamp } from '../timestamp'; import { SnakeToCamelCase } from '../../../../common/types'; -import { UserActionUsernameWithAvatar } from '../avatar_username'; -import { UserActionCopyLink } from '../copy_link'; -import { ATTACHMENT_NOT_REGISTERED_ERROR, DEFAULT_EVENT_ATTACHMENT_TITLE } from './translations'; +import { createRegisteredAttachmentUserActionBuilder } from './registered_attachments'; type BuilderArgs = Pick< UserActionBuilderArgs, @@ -28,75 +22,16 @@ export const createExternalReferenceAttachmentUserActionBuilder = ({ comment, externalReferenceAttachmentTypeRegistry, caseData, -}: BuilderArgs): ReturnType => ({ - // TODO: Fix this manually. Issue #123375 - // eslint-disable-next-line react/display-name - build: () => { - const isTypeRegistered = externalReferenceAttachmentTypeRegistry.has( - comment.externalReferenceAttachmentTypeId - ); - - if (!isTypeRegistered) { - return [ - { - username: ( - - ), - event: ( - <> - {`${DEFAULT_EVENT_ATTACHMENT_TITLE} `} - {comment.externalReferenceAttachmentTypeId} - - ), - className: 'comment-external-reference-not-found', - 'data-test-subj': 'comment-external-reference-not-found', - timestamp: , - children: ( - - ), - }, - ]; - } - - const externalReferenceType = externalReferenceAttachmentTypeRegistry.get( - comment.externalReferenceAttachmentTypeId - ); - - const externalReferenceViewObject = externalReferenceType.getAttachmentViewObject({ +}: BuilderArgs): ReturnType => { + return createRegisteredAttachmentUserActionBuilder({ + userAction, + comment, + registry: externalReferenceAttachmentTypeRegistry, + caseData, + getId: () => comment.externalReferenceAttachmentTypeId, + getAttachmentViewProps: () => ({ externalReferenceId: comment.externalReferenceId, externalReferenceMetadata: comment.externalReferenceMetadata, - caseData: { id: caseData.id, title: caseData.title }, - }); - - return [ - { - username: ( - - ), - type: externalReferenceViewObject.type, - className: `comment-external-reference${comment.externalReferenceAttachmentTypeId}`, - event: externalReferenceViewObject.event, - 'data-test-subj': `comment-external-reference-${comment.externalReferenceAttachmentTypeId}`, - timestamp: , - timelineIcon: externalReferenceViewObject.timelineIcon, - actions: ( - <> - - {externalReferenceViewObject.actions} - - ), - children: externalReferenceViewObject.children ? ( - }> - {React.createElement(externalReferenceViewObject.children)} - - ) : undefined, - }, - ]; - }, -}); + }), + }); +}; diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/persistable_state.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/persistable_state.tsx new file mode 100644 index 0000000000000..80e4d0d3743ce --- /dev/null +++ b/x-pack/plugins/cases/public/components/user_actions/comment/persistable_state.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CommentResponseTypePersistableState } from '../../../../common/api'; +import { UserActionBuilder, UserActionBuilderArgs } from '../types'; +import { SnakeToCamelCase } from '../../../../common/types'; +import { createRegisteredAttachmentUserActionBuilder } from './registered_attachments'; + +type BuilderArgs = Pick< + UserActionBuilderArgs, + 'userAction' | 'persistableStateAttachmentTypeRegistry' | 'caseData' +> & { + comment: SnakeToCamelCase; +}; + +export const createPersistableStateAttachmentUserActionBuilder = ({ + userAction, + comment, + persistableStateAttachmentTypeRegistry, + caseData, +}: BuilderArgs): ReturnType => { + return createRegisteredAttachmentUserActionBuilder({ + userAction, + comment, + registry: persistableStateAttachmentTypeRegistry, + caseData, + getId: () => comment.persistableStateAttachmentTypeId, + getAttachmentViewProps: () => ({ + persistableStateAttachmentTypeId: comment.persistableStateAttachmentTypeId, + persistableStateAttachmentState: comment.persistableStateAttachmentState, + }), + }); +}; diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/registered_attachments.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/registered_attachments.tsx new file mode 100644 index 0000000000000..6a05f3c64a491 --- /dev/null +++ b/x-pack/plugins/cases/public/components/user_actions/comment/registered_attachments.tsx @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { Suspense } from 'react'; + +import { EuiCallOut, EuiCode, EuiLoadingSpinner } from '@elastic/eui'; +import { AttachmentType } from '../../../client/attachment_framework/types'; +import { AttachmentTypeRegistry } from '../../../../common/registry'; +import { CommentResponse } from '../../../../common/api'; +import { UserActionBuilder, UserActionBuilderArgs } from '../types'; +import { UserActionTimestamp } from '../timestamp'; +import { SnakeToCamelCase } from '../../../../common/types'; +import { UserActionUsernameWithAvatar } from '../avatar_username'; +import { UserActionCopyLink } from '../copy_link'; +import { ATTACHMENT_NOT_REGISTERED_ERROR, DEFAULT_EVENT_ATTACHMENT_TITLE } from './translations'; + +type BuilderArgs = Pick & { + comment: SnakeToCamelCase; + registry: R; + getId: () => string; + getAttachmentViewProps: () => object; +}; + +export const createRegisteredAttachmentUserActionBuilder = < + C extends CommentResponse, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + R extends AttachmentTypeRegistry> +>({ + userAction, + comment, + registry, + caseData, + getId, + getAttachmentViewProps, +}: BuilderArgs): ReturnType => ({ + // TODO: Fix this manually. Issue #123375 + // eslint-disable-next-line react/display-name + build: () => { + const attachmentTypeId: string = getId(); + const isTypeRegistered = registry.has(attachmentTypeId); + + if (!isTypeRegistered) { + return [ + { + username: ( + + ), + event: ( + <> + {`${DEFAULT_EVENT_ATTACHMENT_TITLE} `} + {attachmentTypeId} + + ), + className: `comment-${comment.type}-not-found`, + 'data-test-subj': `comment-${comment.type}-not-found`, + timestamp: , + children: ( + + ), + }, + ]; + } + + const attachmentType = registry.get(attachmentTypeId); + + const attachmentViewObject = attachmentType.getAttachmentViewObject(); + const props = { + ...getAttachmentViewProps(), + caseData: { id: caseData.id, title: caseData.title }, + }; + + return [ + { + username: ( + + ), + type: attachmentViewObject.type, + className: `comment-${comment.type}-attachment-${attachmentTypeId}`, + event: attachmentViewObject.event, + 'data-test-subj': `comment-${comment.type}-${attachmentTypeId}`, + timestamp: , + timelineIcon: attachmentViewObject.timelineIcon, + actions: ( + <> + + {attachmentViewObject.actions} + + ), + children: attachmentViewObject.children ? ( + }> + {React.createElement(attachmentViewObject.children, props)} + + ) : undefined, + }, + ]; + }, +}); diff --git a/x-pack/plugins/cases/public/components/user_actions/index.tsx b/x-pack/plugins/cases/public/components/user_actions/index.tsx index 1c456f90a71e7..7224eee213719 100644 --- a/x-pack/plugins/cases/public/components/user_actions/index.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/index.tsx @@ -95,7 +95,8 @@ export const UserActions = React.memo( const { detailName: caseId, commentId } = useCaseViewParams(); const [initLoading, setInitLoading] = useState(true); const currentUser = useCurrentUser(); - const { externalReferenceAttachmentTypeRegistry } = useCasesContext(); + const { externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry } = + useCasesContext(); const alertIdsWithoutRuleInfo = useMemo( () => getManualAlertIdsWithNoRuleId(caseData.comments), @@ -180,6 +181,7 @@ export const UserActions = React.memo( const userActionBuilder = builder({ caseData, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, userAction, caseServices, comments: caseData.comments, @@ -207,6 +209,7 @@ export const UserActions = React.memo( [ caseUserActions, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, descriptionCommentListObj, caseData, caseServices, diff --git a/x-pack/plugins/cases/public/components/user_actions/mock.ts b/x-pack/plugins/cases/public/components/user_actions/mock.ts index 777241aca71eb..b3a7909b06929 100644 --- a/x-pack/plugins/cases/public/components/user_actions/mock.ts +++ b/x-pack/plugins/cases/public/components/user_actions/mock.ts @@ -8,6 +8,7 @@ import { Actions } from '../../../common/api'; import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; import { ExternalReferenceAttachmentTypeRegistry } from '../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../client/attachment_framework/persistable_state_registry'; import { basicCase, basicPush, getUserAction } from '../../containers/mock'; import { UserActionBuilderArgs } from './types'; @@ -58,10 +59,12 @@ export const getMockBuilderArgs = (): UserActionBuilderArgs => { const handleManageQuote = jest.fn(); const handleOutlineComment = jest.fn(); const externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(); + const persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); return { userAction, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, caseData: basicCase, comments: basicCase.comments, caseServices, diff --git a/x-pack/plugins/cases/public/components/user_actions/types.ts b/x-pack/plugins/cases/public/components/user_actions/types.ts index a834328075a09..8ba409468851e 100644 --- a/x-pack/plugins/cases/public/components/user_actions/types.ts +++ b/x-pack/plugins/cases/public/components/user_actions/types.ts @@ -16,6 +16,7 @@ import { CasesNavigation } from '../links'; import { UNSUPPORTED_ACTION_TYPES } from './constants'; import type { OnUpdateFields } from '../case_view/types'; import { ExternalReferenceAttachmentTypeRegistry } from '../../client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from '../../client/attachment_framework/persistable_state_registry'; export interface UserActionTreeProps { caseServices: CaseServices; @@ -38,6 +39,7 @@ export type SupportedUserActionTypes = keyof Omit { +describe('Cases API', () => { describe('deleteCases', () => { beforeEach(() => { fetchMock.mockClear(); @@ -128,6 +133,12 @@ describe('Case Configuration API', () => { const resp = await getCase(data, true, abortCtrl.signal); expect(resp).toEqual(basicCase); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + const resp = await getCase(data, true, abortCtrl.signal); + expect(resp).toEqual(caseWithRegisteredAttachments); + }); }); describe('resolveCase', () => { @@ -156,6 +167,21 @@ describe('Case Configuration API', () => { const resp = await resolveCase(caseId, true, abortCtrl.signal); expect(resp).toEqual({ ...basicResolveCase, case: basicCase, targetAliasId }); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue({ + ...basicResolveCase, + case: caseWithRegisteredAttachmentsSnake, + target_alias_id: targetAliasId, + }); + + const resp = await resolveCase(caseId, true, abortCtrl.signal); + expect(resp).toEqual({ + ...basicResolveCase, + case: caseWithRegisteredAttachments, + targetAliasId, + }); + }); }); describe('getCases', () => { @@ -278,7 +304,7 @@ describe('Case Configuration API', () => { }); }); - test('should return correct response', async () => { + test('should return correct response and not covert to camel case registered attachments', async () => { fetchMock.mockResolvedValue(allCasesSnake); const resp = await getCases({ filterOptions: { ...DEFAULT_FILTER_OPTIONS, owner: [SECURITY_SOLUTION_OWNER] }, @@ -339,6 +365,12 @@ describe('Case Configuration API', () => { const resp = await getCaseUserActions(basicCase.id, abortCtrl.signal); expect(resp).toEqual(caseUserActions); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseUserActionsWithRegisteredAttachmentsSnake); + const resp = await getCaseUserActions(basicCase.id, abortCtrl.signal); + expect(resp).toEqual(caseUserActionsWithRegisteredAttachments); + }); }); describe('getReporters', () => { @@ -392,9 +424,12 @@ describe('Case Configuration API', () => { fetchMock.mockClear(); fetchMock.mockResolvedValue([basicCaseSnake]); }); + const data = { description: 'updated description' }; + test('should be called with correct check url, method, signal', async () => { await patchCase(basicCase.id, data, basicCase.version, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}`, { method: 'PATCH', body: JSON.stringify({ @@ -411,7 +446,20 @@ describe('Case Configuration API', () => { basicCase.version, abortCtrl.signal ); - expect(resp).toEqual({ ...[basicCase] }); + + expect(resp).toEqual([basicCase]); + }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue([caseWithRegisteredAttachmentsSnake]); + const resp = await patchCase( + basicCase.id, + { description: 'updated description' }, + basicCase.version, + abortCtrl.signal + ); + + expect(resp).toEqual([caseWithRegisteredAttachments]); }); }); @@ -420,6 +468,7 @@ describe('Case Configuration API', () => { fetchMock.mockClear(); fetchMock.mockResolvedValue(casesSnake); }); + const data = [ { status: CaseStatuses.closed, @@ -437,9 +486,9 @@ describe('Case Configuration API', () => { }); }); - test('should return correct response', async () => { + test('should return correct response should not covert to camel case registered attachments', async () => { const resp = await patchCasesStatus(data, abortCtrl.signal); - expect(resp).toEqual({ ...cases }); + expect(resp).toEqual(cases); }); }); @@ -458,6 +507,7 @@ describe('Case Configuration API', () => { signal: abortCtrl.signal, owner: SECURITY_SOLUTION_OWNER, }); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/comments`, { method: 'PATCH', body: JSON.stringify({ @@ -482,6 +532,21 @@ describe('Case Configuration API', () => { }); expect(resp).toEqual(basicCase); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + + const resp = await patchComment({ + caseId: basicCase.id, + commentId: basicCase.comments[0].id, + commentUpdate: 'updated comment', + version: basicCase.comments[0].version, + signal: abortCtrl.signal, + owner: SECURITY_SOLUTION_OWNER, + }); + + expect(resp).toEqual(caseWithRegisteredAttachments); + }); }); describe('postCase', () => { @@ -518,6 +583,12 @@ describe('Case Configuration API', () => { const resp = await postCase(data, abortCtrl.signal); expect(resp).toEqual(basicCase); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + const resp = await postCase(data, abortCtrl.signal); + expect(resp).toEqual(caseWithRegisteredAttachments); + }); }); describe('createAttachments', () => { @@ -559,6 +630,12 @@ describe('Case Configuration API', () => { const resp = await createAttachments(data, basicCase.id, abortCtrl.signal); expect(resp).toEqual(basicCase); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + const resp = await createAttachments(data, basicCase.id, abortCtrl.signal); + expect(resp).toEqual(caseWithRegisteredAttachments); + }); }); describe('pushCase', () => { @@ -585,6 +662,12 @@ describe('Case Configuration API', () => { const resp = await pushCase(basicCase.id, connectorId, abortCtrl.signal); expect(resp).toEqual(pushedCase); }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + const resp = await pushCase(basicCase.id, connectorId, abortCtrl.signal); + expect(resp).toEqual(caseWithRegisteredAttachments); + }); }); describe('deleteComment', () => { @@ -628,4 +711,38 @@ describe('Case Configuration API', () => { expect(resp).toEqual(['siem', 'observability']); }); }); + + describe('postComment', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + + const data = { + comment: 'Solve this fast!', + type: CommentType.user as const, + owner: SECURITY_SOLUTION_OWNER, + }; + + test('should be called with correct check url, method, signal', async () => { + await postComment(data, basicCase.id, abortCtrl.signal); + + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/comments`, { + method: 'POST', + body: JSON.stringify(data), + signal: abortCtrl.signal, + }); + }); + + test('should return correct response', async () => { + const resp = await postComment(data, basicCase.id, abortCtrl.signal); + expect(resp).toEqual(basicCase); + }); + + test('should not covert to camel case registered attachments', async () => { + fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); + const resp = await postComment(data, basicCase.id, abortCtrl.signal); + expect(resp).toEqual(caseWithRegisteredAttachments); + }); + }); }); diff --git a/x-pack/plugins/cases/public/containers/api.ts b/x-pack/plugins/cases/public/containers/api.ts index 344f390908104..f01ac793f66c9 100644 --- a/x-pack/plugins/cases/public/containers/api.ts +++ b/x-pack/plugins/cases/public/containers/api.ts @@ -45,7 +45,15 @@ import { getAllConnectorTypesUrl } from '../../common/utils/connectors_api'; import { KibanaServices } from '../common/lib/kibana'; -import { convertAllCasesToCamel, convertToCamelCase, convertArrayToCamelCase } from '../api/utils'; +import { + convertAllCasesToCamel, + convertToCamelCase, + convertArrayToCamelCase, + convertUserActionsToCamelCase, + convertCaseToCamelCase, + convertCasesToCamelCase, + convertCaseResolveToCamelCase, +} from '../api/utils'; import { ActionLicense, @@ -77,7 +85,7 @@ export const getCase = async ( }, signal, }); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const resolveCase = async ( @@ -95,7 +103,7 @@ export const resolveCase = async ( signal, } ); - return convertToCamelCase(decodeCaseResolveResponse(response)); + return convertCaseResolveToCamelCase(decodeCaseResolveResponse(response)); }; export const getTags = async (signal: AbortSignal, owner: string[]): Promise => { @@ -145,7 +153,10 @@ export const getCaseUserActions = async ( signal, } ); - return convertArrayToCamelCase(decodeCaseUserActionsResponse(response)) as CaseUserActions[]; + + return convertUserActionsToCamelCase( + decodeCaseUserActionsResponse(response) + ) as CaseUserActions[]; }; export const getCases = async ({ @@ -190,7 +201,7 @@ export const postCase = async (newCase: CasePostRequest, signal: AbortSignal): P body: JSON.stringify(newCase), signal, }); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const patchCase = async ( @@ -207,7 +218,7 @@ export const patchCase = async ( body: JSON.stringify({ cases: [{ ...updatedCase, id: caseId, version }] }), signal, }); - return convertToCamelCase(decodeCasesResponse(response)); + return convertCasesToCamelCase(decodeCasesResponse(response)); }; export const patchCasesStatus = async ( @@ -219,7 +230,8 @@ export const patchCasesStatus = async ( body: JSON.stringify({ cases }), signal, }); - return convertToCamelCase(decodeCasesResponse(response)); + + return convertCasesToCamelCase(decodeCasesResponse(response)); }; export const postComment = async ( @@ -235,7 +247,7 @@ export const postComment = async ( signal, } ); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const patchComment = async ({ @@ -264,7 +276,7 @@ export const patchComment = async ({ }), signal, }); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const deleteComment = async ({ @@ -305,7 +317,7 @@ export const pushCase = async ( } ); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const getActionLicense = async (signal: AbortSignal): Promise => { @@ -333,7 +345,7 @@ export const createAttachments = async ( signal, } ); - return convertToCamelCase(decodeCaseResponse(response)); + return convertCaseToCamelCase(decodeCaseResponse(response)); }; export const getFeatureIds = async ( diff --git a/x-pack/plugins/cases/public/containers/mock.ts b/x-pack/plugins/cases/public/containers/mock.ts index e691558ad690b..b09420c59800f 100644 --- a/x-pack/plugins/cases/public/containers/mock.ts +++ b/x-pack/plugins/cases/public/containers/mock.ts @@ -14,6 +14,7 @@ import type { AlertComment, CasesMetrics, ExternalReferenceComment, + PersistableComment, } from '../../common/ui/types'; import { Actions, @@ -41,7 +42,8 @@ import { SnakeToCamelCase } from '../../common/types'; import { covertToSnakeCase } from './utils'; import { ExternalReferenceAttachmentType, - ExternalReferenceAttachmentViewObject, + AttachmentViewObject, + PersistableStateAttachmentType, } from '../client/attachment_framework/types'; export { connectorsMock } from '../common/mock/connectors'; @@ -171,7 +173,22 @@ export const externalReferenceAttachment: ExternalReferenceComment = { externalReferenceId: 'my-id', externalReferenceStorage: { type: ExternalReferenceStorageType.elasticSearchDoc }, externalReferenceAttachmentTypeId: '.test', - externalReferenceMetadata: null, + externalReferenceMetadata: { test_foo: 'foo' }, + createdAt: basicCreatedAt, + createdBy: elasticUser, + owner: SECURITY_SOLUTION_OWNER, + pushedAt: null, + pushedBy: null, + updatedAt: null, + updatedBy: null, + version: 'WzQ3LDFc', +}; + +export const persistableStateAttachment: PersistableComment = { + type: CommentType.persistableState, + id: 'persistable-state-comment-id', + persistableStateAttachmentState: { test_foo: 'foo' }, + persistableStateAttachmentTypeId: '.test', createdAt: basicCreatedAt, createdBy: elasticUser, owner: SECURITY_SOLUTION_OWNER, @@ -218,6 +235,7 @@ export const caseWithAlerts = { totalAlerts: 2, id: caseWithAlertsId, }; + export const caseWithAlertsSyncOff = { ...basicCase, totalAlerts: 2, @@ -227,6 +245,12 @@ export const caseWithAlertsSyncOff = { id: caseWithAlertsSyncOffId, }; +export const caseWithRegisteredAttachments = { + ...basicCase, + id: 'case-with-registered-attachment', + comments: [externalReferenceAttachment, persistableStateAttachment], +}; + export const basicResolvedCase: ResolvedCase = { case: basicCase, outcome: 'aliasMatch', @@ -377,6 +401,7 @@ export const cases: Case[] = [ { ...basicCase, id: '4', totalComment: 0, comments: [] }, caseWithAlerts, caseWithAlertsSyncOff, + caseWithRegisteredAttachments, ]; export const allCases: Cases = { @@ -425,6 +450,38 @@ export const basicCommentSnake: CommentResponse = { version: 'WzQ3LDFc', }; +export const externalReferenceAttachmentSnake: CommentResponse = { + type: CommentType.externalReference, + id: 'external-reference-comment-id', + externalReferenceId: 'my-id', + externalReferenceMetadata: { test_foo: 'foo' }, + externalReferenceAttachmentTypeId: '.test', + externalReferenceStorage: { type: ExternalReferenceStorageType.elasticSearchDoc }, + created_at: basicCreatedAt, + created_by: elasticUserSnake, + owner: SECURITY_SOLUTION_OWNER, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + version: 'WzQ3LDFc', +}; + +export const persistableStateAttachmentSnake: CommentResponse = { + type: CommentType.persistableState, + id: 'persistable-state-comment-id', + persistableStateAttachmentState: { test_foo: 'foo' }, + persistableStateAttachmentTypeId: '.test', + created_at: basicCreatedAt, + created_by: elasticUserSnake, + owner: SECURITY_SOLUTION_OWNER, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + version: 'WzQ3LDFc', +}; + export const basicCaseSnake: CaseResponse = { ...basicCase, status: CaseStatuses.open, @@ -446,6 +503,7 @@ export const caseWithAlertsSnake = { totalAlerts: 2, id: caseWithAlertsId, }; + export const caseWithAlertsSyncOffSnake = { ...basicCaseSnake, totalAlerts: 2, @@ -455,6 +513,12 @@ export const caseWithAlertsSyncOffSnake = { id: caseWithAlertsSyncOffId, }; +export const caseWithRegisteredAttachmentsSnake = { + ...basicCaseSnake, + id: 'case-with-registered-attachment', + comments: [externalReferenceAttachmentSnake, persistableStateAttachmentSnake], +}; + export const casesStatusSnake: CasesStatusResponse = { count_closed_cases: 130, count_in_progress_cases: 40, @@ -502,6 +566,7 @@ export const casesSnake: CasesResponse = [ { ...basicCaseSnake, id: '4', totalComment: 0, comments: [] }, caseWithAlertsSnake, caseWithAlertsSyncOffSnake, + caseWithRegisteredAttachmentsSnake, ]; export const allCasesSnake: CasesFindResponse = { @@ -645,6 +710,32 @@ export const caseUserActionsSnake: CaseUserActionsResponse = [ getUserActionSnake('description', Actions.update), ]; +export const caseUserActionsWithRegisteredAttachmentsSnake: CaseUserActionsResponse = [ + getUserActionSnake('description', Actions.create), + { + created_at: basicCreatedAt, + created_by: elasticUserSnake, + case_id: 'case-with-registered-attachment', + comment_id: null, + owner: SECURITY_SOLUTION_OWNER, + type: 'comment', + action: 'create', + action_id: 'create-comment-id', + payload: { comment: externalReferenceAttachmentSnake }, + }, + { + created_at: basicCreatedAt, + created_by: elasticUserSnake, + case_id: 'case-with-registered-attachment', + comment_id: null, + owner: SECURITY_SOLUTION_OWNER, + type: 'comment', + action: 'create', + action_id: 'create-comment-id', + payload: { comment: persistableStateAttachmentSnake }, + }, +]; + export const getJiraConnector = (overrides?: Partial): CaseConnector => { return { id: '123', @@ -701,6 +792,32 @@ export const caseUserActions: CaseUserActions[] = [ getUserAction('description', Actions.update), ]; +export const caseUserActionsWithRegisteredAttachments: CaseUserActions[] = [ + getUserAction('description', Actions.create), + { + createdAt: basicCreatedAt, + createdBy: elasticUser, + caseId: 'case-with-registered-attachment', + commentId: null, + owner: SECURITY_SOLUTION_OWNER, + type: 'comment', + action: 'create', + actionId: 'create-comment-id', + payload: { comment: externalReferenceAttachment }, + }, + { + createdAt: basicCreatedAt, + createdBy: elasticUser, + caseId: 'case-with-registered-attachment', + commentId: null, + owner: SECURITY_SOLUTION_OWNER, + type: 'comment', + action: 'create', + actionId: 'create-comment-id', + payload: { comment: persistableStateAttachment }, + }, +]; + // components tests export const useGetCasesMockState = { data: allCases, @@ -735,7 +852,7 @@ export const getExternalReferenceUserAction = (): SnakeToCamelCase< }); export const getExternalReferenceAttachment = ( - viewObject: ExternalReferenceAttachmentViewObject = {} + viewObject: AttachmentViewObject = {} ): ExternalReferenceAttachmentType => ({ id: '.test', icon: 'casesApp', @@ -747,3 +864,34 @@ export const getExternalReferenceAttachment = ( ...viewObject, }), }); + +export const getPersistableStateUserAction = (): SnakeToCamelCase< + UserActionWithResponse +> => ({ + ...getUserAction(ActionTypes.comment, Actions.create), + actionId: 'persistable-state-action-id', + type: ActionTypes.comment, + commentId: 'persistable-state-comment-id', + payload: { + comment: { + type: CommentType.persistableState, + persistableStateAttachmentState: { test_foo: 'foo' }, + persistableStateAttachmentTypeId: '.test', + owner: SECURITY_SOLUTION_OWNER, + }, + }, +}); + +export const getPersistableStateAttachment = ( + viewObject: AttachmentViewObject = {} +): PersistableStateAttachmentType => ({ + id: '.test', + icon: 'casesApp', + displayName: 'Test', + getAttachmentViewObject: () => ({ + type: 'update', + event: 'added an embeddable', + timelineIcon: 'casesApp', + ...viewObject, + }), +}); diff --git a/x-pack/plugins/cases/public/plugin.ts b/x-pack/plugins/cases/public/plugin.ts index 1be8a1e428f9c..410ce5b31b07f 100644 --- a/x-pack/plugins/cases/public/plugin.ts +++ b/x-pack/plugins/cases/public/plugin.ts @@ -25,6 +25,7 @@ import { getCreateCaseFlyoutLazy } from './client/ui/get_create_case_flyout'; import { getRecentCasesLazy } from './client/ui/get_recent_cases'; import { groupAlertsByRule } from './client/helpers/group_alerts_by_rule'; import { ExternalReferenceAttachmentTypeRegistry } from './client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from './client/attachment_framework/persistable_state_registry'; /** * @public @@ -36,16 +37,19 @@ export class CasesUiPlugin private readonly kibanaVersion: string; private readonly storage = new Storage(localStorage); private externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry; + private persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; constructor(private readonly initializerContext: PluginInitializerContext) { this.kibanaVersion = initializerContext.env.packageInfo.version; this.externalReferenceAttachmentTypeRegistry = new ExternalReferenceAttachmentTypeRegistry(); + this.persistableStateAttachmentTypeRegistry = new PersistableStateAttachmentTypeRegistry(); } public setup(core: CoreSetup, plugins: CasesPluginSetup): CasesUiSetup { const kibanaVersion = this.kibanaVersion; const storage = this.storage; const externalReferenceAttachmentTypeRegistry = this.externalReferenceAttachmentTypeRegistry; + const persistableStateAttachmentTypeRegistry = this.persistableStateAttachmentTypeRegistry; if (plugins.home) { plugins.home.featureCatalogue.register({ @@ -79,6 +83,7 @@ export class CasesUiPlugin storage, kibanaVersion, externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry, }); }, }); @@ -88,6 +93,9 @@ export class CasesUiPlugin registerExternalReference: (externalReferenceAttachmentType) => { this.externalReferenceAttachmentTypeRegistry.register(externalReferenceAttachmentType); }, + registerPersistableState: (persistableStateAttachmentType) => { + this.persistableStateAttachmentTypeRegistry.register(persistableStateAttachmentType); + }, }, }; } @@ -102,6 +110,7 @@ export class CasesUiPlugin */ const getCasesContext = getCasesContextLazy({ externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }); return { @@ -111,24 +120,28 @@ export class CasesUiPlugin getCasesLazy({ ...props, externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), getCasesContext, getRecentCases: (props) => getRecentCasesLazy({ ...props, externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), // @deprecated Please use the hook getUseCasesAddToNewCaseFlyout getCreateCaseFlyout: (props) => getCreateCaseFlyoutLazy({ ...props, externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), // @deprecated Please use the hook getUseCasesAddToExistingCaseModal getAllCasesSelectorModal: (props) => getAllCasesSelectorModalLazy({ ...props, externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, + persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), }, hooks: { diff --git a/x-pack/plugins/cases/public/types.ts b/x-pack/plugins/cases/public/types.ts index 9836210292b43..b417fd0202516 100644 --- a/x-pack/plugins/cases/public/types.ts +++ b/x-pack/plugins/cases/public/types.ts @@ -40,6 +40,7 @@ import type { Cases, CasesStatus, CasesMetrics } from '../common/ui'; import { groupAlertsByRule } from './client/helpers/group_alerts_by_rule'; import type { AttachmentFramework } from './client/attachment_framework/types'; import { ExternalReferenceAttachmentTypeRegistry } from './client/attachment_framework/external_reference_registry'; +import { PersistableStateAttachmentTypeRegistry } from './client/attachment_framework/persistable_state_registry'; export interface CasesPluginSetup { security: SecurityPluginSetup; @@ -75,6 +76,7 @@ export interface RenderAppProps { storage: Storage; kibanaVersion: string; externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry; + persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; } export interface CasesUiSetup { diff --git a/x-pack/plugins/cases/server/attachment_framework/persistable_state_registry.ts b/x-pack/plugins/cases/server/attachment_framework/persistable_state_registry.ts index b36e75245ac47..5ca965a7da726 100644 --- a/x-pack/plugins/cases/server/attachment_framework/persistable_state_registry.ts +++ b/x-pack/plugins/cases/server/attachment_framework/persistable_state_registry.ts @@ -6,10 +6,10 @@ */ import { identity } from 'lodash'; -import { CaseRegistry } from '../../common/registry'; +import { AttachmentTypeRegistry } from '../../common/registry'; import { PersistableStateAttachmentType, PersistableStateAttachmentTypeSetup } from './types'; -export class PersistableStateAttachmentTypeRegistry extends CaseRegistry { +export class PersistableStateAttachmentTypeRegistry extends AttachmentTypeRegistry { constructor() { super('PersistableStateAttachmentTypeRegistry'); } diff --git a/x-pack/plugins/cases/server/attachment_framework/so_references.ts b/x-pack/plugins/cases/server/attachment_framework/so_references.ts index 4e18d128586fa..f6f2435235289 100644 --- a/x-pack/plugins/cases/server/attachment_framework/so_references.ts +++ b/x-pack/plugins/cases/server/attachment_framework/so_references.ts @@ -6,8 +6,8 @@ */ import { SavedObjectReference } from '@kbn/core/types'; +import { isCommentRequestTypePersistableState } from '../../common/utils/attachments'; import { CommentRequest, CommentRequestPersistableStateType } from '../../common/api'; -import { isCommentRequestTypePersistableState } from '../common/utils'; import { PersistableStateAttachmentTypeRegistry } from './persistable_state_registry'; interface SavedObjectAttributesAndReferences { diff --git a/x-pack/plugins/cases/server/client/attachments/update.ts b/x-pack/plugins/cases/server/client/attachments/update.ts index f003f988d98d8..fefc9d61e7c89 100644 --- a/x-pack/plugins/cases/server/client/attachments/update.ts +++ b/x-pack/plugins/cases/server/client/attachments/update.ts @@ -9,9 +9,9 @@ import Boom from '@hapi/boom'; import { CaseCommentModel } from '../../common/models'; import { createCaseError } from '../../common/error'; +import { isCommentRequestTypeExternalReference } from '../../../common/utils/attachments'; import { CaseResponse, CommentPatchRequest } from '../../../common/api'; import { CASE_SAVED_OBJECT } from '../../../common/constants'; -import { isCommentRequestTypeExternalReference } from '../../common/utils'; import { CasesClientArgs } from '..'; import { decodeCommentRequest } from '../utils'; import { Operations } from '../../authorization'; diff --git a/x-pack/plugins/cases/server/client/utils.ts b/x-pack/plugins/cases/server/client/utils.ts index 2c0137ba13d3e..1e25bd3476621 100644 --- a/x-pack/plugins/cases/server/client/utils.ts +++ b/x-pack/plugins/cases/server/client/utils.ts @@ -13,6 +13,10 @@ import { identity } from 'fp-ts/lib/function'; import { pipe } from 'fp-ts/lib/pipeable'; import { nodeBuilder, fromKueryExpression, KueryNode, escapeKuery } from '@kbn/es-query'; +import { + isCommentRequestTypeExternalReference, + isCommentRequestTypePersistableState, +} from '../../common/utils/attachments'; import { CASE_SAVED_OBJECT } from '../../common/constants'; import { OWNER_FIELD, @@ -36,9 +40,7 @@ import { isCommentRequestTypeAlert, isCommentRequestTypeUser, isCommentRequestTypeActions, - isCommentRequestTypeExternalReference, assertUnreachable, - isCommentRequestTypePersistableState, } from '../common/utils'; import { SavedObjectFindOptionsKueryNode } from '../common/types'; diff --git a/x-pack/plugins/cases/server/common/utils.ts b/x-pack/plugins/cases/server/common/utils.ts index bd22c600fe817..19c840a25d048 100644 --- a/x-pack/plugins/cases/server/common/utils.ts +++ b/x-pack/plugins/cases/server/common/utils.ts @@ -27,8 +27,6 @@ import { CommentRequestActionsType, CommentRequestAlertType, CommentRequestExternalReferenceSOType, - CommentRequestExternalReferenceType, - CommentRequestPersistableStateType, CommentRequestUserType, CommentResponse, CommentsResponse, @@ -237,15 +235,6 @@ export const isCommentRequestTypeAlert = ( return context.type === CommentType.alert; }; -/** - * A type narrowing function for external reference attachments. - */ -export const isCommentRequestTypeExternalReference = ( - context: CommentRequest -): context is CommentRequestExternalReferenceType => { - return context.type === CommentType.externalReference; -}; - /** * A type narrowing function for external reference so attachments. */ @@ -258,15 +247,6 @@ export const isCommentRequestTypeExternalReferenceSO = ( ); }; -/** - * A type narrowing function for persistable state attachments. - */ -export const isCommentRequestTypePersistableState = ( - context: Partial -): context is CommentRequestPersistableStateType => { - return context.type === CommentType.persistableState; -}; - /** * Adds the ids and indices to a map of statuses */ diff --git a/x-pack/plugins/cases/server/services/user_actions/index.ts b/x-pack/plugins/cases/server/services/user_actions/index.ts index 38855146e70de..3adde90f369d1 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.ts @@ -18,6 +18,7 @@ import { import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { KueryNode } from '@kbn/es-query'; +import { isCommentRequestTypePersistableState } from '../../../common/utils/attachments'; import { isConnectorUserAction, isPushedUserAction, @@ -54,11 +55,7 @@ import { findConnectorIdReference } from '../transform'; import { buildFilter, combineFilters, isTwoArraysDifference } from '../../client/utils'; import { BuilderParameters, BuilderReturnValue, CommonArguments, CreateUserAction } from './types'; import { BuilderFactory } from './builder_factory'; -import { - defaultSortField, - isCommentRequestTypeExternalReferenceSO, - isCommentRequestTypePersistableState, -} from '../../common/utils'; +import { defaultSortField, isCommentRequestTypeExternalReferenceSO } from '../../common/utils'; import { PersistableStateAttachmentTypeRegistry } from '../../attachment_framework/persistable_state_registry'; import { injectPersistableReferencesToSO } from '../../attachment_framework/so_references'; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/attachment_framework.ts b/x-pack/test/functional_with_es_ssl/apps/cases/attachment_framework.ts index 7e56bc0fa6ae3..5a5a48af9b4b0 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/attachment_framework.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/attachment_framework.ts @@ -5,17 +5,70 @@ * 2.0. */ +import type SuperTest from 'supertest'; import { ExternalReferenceStorageType, CommentType, CaseResponse, + CommentRequest, } from '@kbn/cases-plugin/common/api'; +import { expect } from 'expect'; import { FtrProviderContext } from '../../ftr_provider_context'; +const createLogStashDataView = async ( + supertest: SuperTest.SuperTest +): Promise<{ data_view: { id: string } }> => { + const { body } = await supertest + .post(`/api/data_views/data_view`) + .set('kbn-xsrf', 'foo') + .send({ data_view: { title: 'logstash-*', name: 'logstash', timeFieldName: '@timestamp' } }) + .expect(200); + + return body; +}; + +const deleteLogStashDataView = async ( + supertest: SuperTest.SuperTest, + dataViewId: string +): Promise => { + await supertest + .delete(`/api/saved_objects/index-pattern/${dataViewId}`) + .query({ force: true }) + .set('kbn-xsrf', 'foo') + .send() + .expect(200); +}; + export default ({ getPageObject, getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); const header = getPageObject('header'); const testSubjects = getService('testSubjects'); const cases = getService('cases'); + const find = getService('find'); + + const createAttachmentAndNavigate = async (attachment: CommentRequest) => { + const caseData = await cases.api.createCase({ + title: `Registered attachment of type ${attachment.type}`, + }); + const caseWithAttachment = await cases.api.createAttachment({ + caseId: caseData.id, + params: attachment, + }); + + await cases.navigation.navigateToApp(); + await cases.casesTable.waitForCasesToBeListed(); + await cases.casesTable.goToFirstListedCase(); + await header.waitUntilLoadingHasFinished(); + + return caseWithAttachment; + }; + + const validateAttachment = async (type: string, attachmentId?: string) => { + await testSubjects.existOrFail(`comment-${type}-.test`); + await testSubjects.existOrFail(`copy-link-${attachmentId}`); + await testSubjects.existOrFail('test-attachment-action'); + }; /** * Attachment types are being registered in @@ -26,23 +79,14 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { let caseWithAttachment: CaseResponse; before(async () => { - const caseData = await cases.api.createCase({ title: 'External references' }); - caseWithAttachment = await cases.api.createAttachment({ - caseId: caseData.id, - params: { - type: CommentType.externalReference, - externalReferenceId: 'my-id', - externalReferenceStorage: { type: ExternalReferenceStorageType.elasticSearchDoc }, - externalReferenceAttachmentTypeId: '.test', - externalReferenceMetadata: null, - owner: 'cases', - }, + caseWithAttachment = await createAttachmentAndNavigate({ + type: CommentType.externalReference, + externalReferenceId: 'my-id', + externalReferenceStorage: { type: ExternalReferenceStorageType.elasticSearchDoc }, + externalReferenceAttachmentTypeId: '.test', + externalReferenceMetadata: null, + owner: 'cases', }); - - await cases.navigation.navigateToApp(); - await cases.casesTable.waitForCasesToBeListed(); - await cases.casesTable.goToFirstListedCase(); - await header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -51,11 +95,110 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { it('renders an external reference attachment type correctly', async () => { const attachmentId = caseWithAttachment?.comments?.[0].id; - await testSubjects.existOrFail('comment-external-reference-.test'); - await testSubjects.existOrFail(`copy-link-${attachmentId}`); - await testSubjects.existOrFail('test-attachment-action'); + await validateAttachment(CommentType.externalReference, attachmentId); await testSubjects.existOrFail('test-attachment-content'); }); }); + + describe('Persistable state attachments', () => { + const getLensState = (dataViewId: string) => ({ + title: '', + visualizationType: 'lnsXY', + type: 'lens', + references: [ + { + type: 'index-pattern', + id: dataViewId, + name: 'indexpattern-datasource-layer-85863a23-73a0-4e11-9774-70f77b9a5898', + }, + ], + state: { + visualization: { + legend: { isVisible: true, position: 'right' }, + valueLabels: 'hide', + fittingFunction: 'None', + axisTitlesVisibilitySettings: { x: true, yLeft: true, yRight: true }, + tickLabelsVisibilitySettings: { x: true, yLeft: true, yRight: true }, + labelsOrientation: { x: 0, yLeft: 0, yRight: 0 }, + gridlinesVisibilitySettings: { x: true, yLeft: true, yRight: true }, + preferredSeriesType: 'bar_stacked', + layers: [ + { + layerId: '85863a23-73a0-4e11-9774-70f77b9a5898', + accessors: ['63810bd4-8481-4aab-822a-532d8513a8b1'], + position: 'top', + seriesType: 'bar_stacked', + showGridlines: false, + layerType: 'data', + xAccessor: 'ab807e89-c453-415b-8eb4-3986de52c923', + }, + ], + }, + query: { query: '', language: 'kuery' }, + filters: [], + datasourceStates: { + indexpattern: { + layers: { + '85863a23-73a0-4e11-9774-70f77b9a5898': { + columns: { + 'ab807e89-c453-415b-8eb4-3986de52c923': { + label: '@timestamp', + dataType: 'date', + operationType: 'date_histogram', + sourceField: '@timestamp', + isBucketed: true, + scale: 'interval', + params: { interval: 'auto', includeEmptyRows: true, dropPartials: false }, + }, + '63810bd4-8481-4aab-822a-532d8513a8b1': { + label: 'Median of id', + dataType: 'number', + operationType: 'median', + sourceField: 'id', + isBucketed: false, + scale: 'ratio', + params: { emptyAsNull: true }, + }, + }, + columnOrder: [ + 'ab807e89-c453-415b-8eb4-3986de52c923', + '63810bd4-8481-4aab-822a-532d8513a8b1', + ], + incompleteColumns: {}, + }, + }, + }, + }, + }, + }); + + let caseWithAttachment: CaseResponse; + let dataViewId = ''; + + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); + const res = await createLogStashDataView(supertest); + dataViewId = res.data_view.id; + + caseWithAttachment = await createAttachmentAndNavigate({ + type: CommentType.persistableState, + persistableStateAttachmentTypeId: '.test', + persistableStateAttachmentState: getLensState(dataViewId), + owner: 'cases', + }); + }); + + after(async () => { + await cases.api.deleteAllCases(); + await deleteLogStashDataView(supertest, dataViewId); + await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); + }); + + it('renders a persistable attachment type correctly', async () => { + const attachmentId = caseWithAttachment?.comments?.[0].id; + await validateAttachment(CommentType.persistableState, attachmentId); + expect(await find.existsByCssSelector('.lnsExpressionRenderer')).toBe(true); + }); + }); }); }; diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/kibana.json b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/kibana.json index f9263695b2483..86f25f410fee7 100644 --- a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/kibana.json +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/kibana.json @@ -3,7 +3,7 @@ "owner": { "name": "Response Ops", "githubTeam": "response-ops" }, "version": "1.0.0", "kibanaVersion": "kibana", - "requiredPlugins": ["cases"], + "requiredPlugins": ["cases", "embeddable", "lens"], "server": true, "ui": true } diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/external_references_content.tsx b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/external_references_content.tsx index 6961539982f80..84e51ce85fed4 100644 --- a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/external_references_content.tsx +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/external_references_content.tsx @@ -13,7 +13,7 @@ const dg = new DataGenerator(); const data1 = dg.generateGroupedSeries(20, 1); const data2 = dg.generateGroupedSeries(20, 5); -const AttachmentContent: React.FC = () => { +const AttachmentContent: React.FC = (props) => { return ( diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/persistable_state.tsx b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/persistable_state.tsx new file mode 100644 index 0000000000000..f669406a2795a --- /dev/null +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/attachments/persistable_state.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { + PersistableStateAttachmentType, + PersistableStateAttachmentViewProps, +} from '@kbn/cases-plugin/public/client/attachment_framework/types'; +import { EuiButtonIcon } from '@elastic/eui'; +import { EmbeddableComponentProps, TypedLensByValueInput } from '@kbn/lens-plugin/public'; + +const AttachmentActions: React.FC = () => { + return ( + {}} + iconType="arrowRight" + aria-label="See attachment" + /> + ); +}; + +const getLazyComponent = ( + EmbeddableComponent: React.ComponentType +): React.LazyExoticComponent> => + React.lazy(() => { + return Promise.resolve().then(() => { + return { + default: React.memo((props: PersistableStateAttachmentViewProps) => { + const { persistableStateAttachmentState } = props; + const attributes = + persistableStateAttachmentState as unknown as TypedLensByValueInput['attributes']; + + return ( + + ); + }), + }; + }); + }); + +export const getPersistableStateAttachmentRegular = ( + EmbeddableComponent: React.ComponentType +): PersistableStateAttachmentType => ({ + id: '.test', + icon: 'casesApp', + displayName: 'Test', + getAttachmentViewObject: () => ({ + type: 'regular', + event: 'added an embeddable', + timelineIcon: 'casesApp', + actions: , + children: getLazyComponent(EmbeddableComponent), + }), +}); diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/plugin.ts b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/plugin.ts index ef0ce76848ae0..a1f3a2e11e356 100644 --- a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/plugin.ts +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/public/plugin.ts @@ -5,9 +5,11 @@ * 2.0. */ -import { Plugin, CoreSetup } from '@kbn/core/public'; +import { Plugin, CoreSetup, CoreStart } from '@kbn/core/public'; import { CasesUiSetup } from '@kbn/cases-plugin/public/types'; +import { LensPublicStart } from '@kbn/lens-plugin/public'; import { getExternalReferenceAttachmentRegular } from './attachments/external_reference'; +import { getPersistableStateAttachmentRegular } from './attachments/persistable_state'; export type Setup = void; export type Start = void; @@ -16,11 +18,26 @@ export interface CasesExamplePublicSetupDeps { cases: CasesUiSetup; } -export class CasesFixturePlugin implements Plugin { - public setup(core: CoreSetup, { cases }: CasesExamplePublicSetupDeps) { - cases.attachmentFramework.registerExternalReference(getExternalReferenceAttachmentRegular()); +export interface CasesExamplePublicStartDeps { + lens: LensPublicStart; +} + +export class CasesFixturePlugin + implements Plugin +{ + public setup(core: CoreSetup, plugins: CasesExamplePublicSetupDeps) { + plugins.cases.attachmentFramework.registerExternalReference( + getExternalReferenceAttachmentRegular() + ); + + core.getStartServices().then(([_, depsStart]) => { + plugins.cases.attachmentFramework.registerPersistableState( + getPersistableStateAttachmentRegular(depsStart.lens.EmbeddableComponent) + ); + }); } - public start() {} + public start(core: CoreStart, plugins: CasesExamplePublicStartDeps) {} + public stop() {} } diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/attachments/persistable_state.ts b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/attachments/persistable_state.ts new file mode 100644 index 0000000000000..1371c04c185ef --- /dev/null +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/attachments/persistable_state.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PersistableStateAttachmentTypeSetup } from '@kbn/cases-plugin/server/attachment_framework/types'; + +export const getPersistableStateAttachmentServer = (): PersistableStateAttachmentTypeSetup => ({ + id: '.test', +}); diff --git a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/plugin.ts b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/plugin.ts index b0af6c8c54e36..fd86aa7300eb1 100644 --- a/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/plugin.ts +++ b/x-pack/test/functional_with_es_ssl/fixtures/plugins/cases/server/plugin.ts @@ -5,10 +5,19 @@ * 2.0. */ +import { PluginSetupContract as CasesSetup } from '@kbn/cases-plugin/server/types'; import { Plugin, CoreSetup } from '@kbn/core/server'; +import { getPersistableStateAttachmentServer } from './attachments/persistable_state'; + +export interface CasesExamplePublicSetupDeps { + cases: CasesSetup; +} + +export class CasesFixturePlugin implements Plugin { + public setup(core: CoreSetup, { cases }: CasesExamplePublicSetupDeps) { + cases.attachmentFramework.registerPersistableState(getPersistableStateAttachmentServer()); + } -export class CasesFixturePlugin implements Plugin { - public setup(core: CoreSetup) {} public start() {} public stop() {} } From b789daceb735fc21df3d5a7987324bd45b167e40 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 13 Jul 2022 20:24:36 +0300 Subject: [PATCH 23/96] [Cloud Posture] Using existing index name #136318 --- .../public/pages/findings/findings_flyout/overview_tab.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx index cf213bcc9ae16..94d221ddf9af7 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/overview_tab.tsx @@ -17,6 +17,7 @@ import React, { useMemo } from 'react'; import moment from 'moment'; import type { EuiDescriptionListProps, EuiAccordionProps } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { LATEST_FINDINGS_INDEX_DEFAULT_NS } from '../../../../common/constants'; import { useLatestFindingsDataView } from '../../../common/api/use_latest_findings_data_view'; import { useKibana } from '../../../common/hooks/use_kibana'; import { CspFinding } from '../types'; @@ -25,8 +26,6 @@ import { CisKubernetesIcons, Markdown, CodeBlock } from './findings_flyout'; type Accordion = Pick & Pick; -const INDEX_LINK_NAME = 'logs-cloud_security_posture.findings_latest-default'; - const getDetailsList = (data: CspFinding, discoverIndexLink: string | undefined) => [ { title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle', { @@ -63,9 +62,9 @@ const getDetailsList = (data: CspFinding, discoverIndexLink: string | undefined) defaultMessage: 'Index', }), description: discoverIndexLink ? ( - {INDEX_LINK_NAME} + {LATEST_FINDINGS_INDEX_DEFAULT_NS} ) : ( - INDEX_LINK_NAME + LATEST_FINDINGS_INDEX_DEFAULT_NS ), }, ]; From 086732f350a9b3a9f7b301c1b79fd8c6316f453d Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 13 Jul 2022 13:46:15 -0400 Subject: [PATCH 24/96] [Response Ops] Refactor task runner - consolidate determination of active/recovered/new alerts into library function (#135069) * wip * Consolidating alert logic into single function and using it in task runner * Updating unit tests * Setting duration to 0 for new alerts * Fixing types * Fixing types * Preserving original alert data * Reverting change * Fixing types * PR feedback Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../server/alert/create_alert_factory.test.ts | 33 +- .../server/alert/create_alert_factory.ts | 43 +- .../server/lib/get_recovered_alerts.test.ts | 40 -- .../server/lib/get_recovered_alerts.ts | 25 -- x-pack/plugins/alerting/server/lib/index.ts | 2 +- .../server/lib/process_alerts.test.ts | 413 ++++++++++++++++++ .../alerting/server/lib/process_alerts.ts | 82 ++++ .../server/task_runner/task_runner.ts | 207 ++++----- .../alerting/server/task_runner/types.ts | 34 +- 9 files changed, 624 insertions(+), 255 deletions(-) delete mode 100644 x-pack/plugins/alerting/server/lib/get_recovered_alerts.test.ts delete mode 100644 x-pack/plugins/alerting/server/lib/get_recovered_alerts.ts create mode 100644 x-pack/plugins/alerting/server/lib/process_alerts.test.ts create mode 100644 x-pack/plugins/alerting/server/lib/process_alerts.ts diff --git a/x-pack/plugins/alerting/server/alert/create_alert_factory.test.ts b/x-pack/plugins/alerting/server/alert/create_alert_factory.test.ts index f8d61e64c9eaf..c9505d5f838e2 100644 --- a/x-pack/plugins/alerting/server/alert/create_alert_factory.test.ts +++ b/x-pack/plugins/alerting/server/alert/create_alert_factory.test.ts @@ -9,10 +9,10 @@ import sinon from 'sinon'; import { loggingSystemMock } from '@kbn/core/server/mocks'; import { Alert } from './alert'; import { createAlertFactory } from './create_alert_factory'; -import { getRecoveredAlerts } from '../lib'; +import { processAlerts } from '../lib'; jest.mock('../lib', () => ({ - getRecoveredAlerts: jest.fn(), + processAlerts: jest.fn(), })); let clock: sinon.SinonFakeTimers; @@ -37,6 +37,7 @@ describe('createAlertFactory()', () => { "state": Object {}, } `); + // @ts-expect-error expect(result.getId()).toEqual('1'); }); @@ -108,16 +109,18 @@ describe('createAlertFactory()', () => { }); test('returns recovered alerts when setsRecoveryContext is true', () => { - (getRecoveredAlerts as jest.Mock).mockReturnValueOnce({ - z: { - id: 'z', - state: { foo: true }, - meta: { lastScheduledActions: { group: 'default', date: new Date() } }, - }, - y: { - id: 'y', - state: { foo: true }, - meta: { lastScheduledActions: { group: 'default', date: new Date() } }, + (processAlerts as jest.Mock).mockReturnValueOnce({ + recoveredAlerts: { + z: { + id: 'z', + state: { foo: true }, + meta: { lastScheduledActions: { group: 'default', date: new Date() } }, + }, + y: { + id: 'y', + state: { foo: true }, + meta: { lastScheduledActions: { group: 'default', date: new Date() } }, + }, }, }); const alertFactory = createAlertFactory({ @@ -142,7 +145,7 @@ describe('createAlertFactory()', () => { }); test('returns empty array if no recovered alerts', () => { - (getRecoveredAlerts as jest.Mock).mockReturnValueOnce({}); + (processAlerts as jest.Mock).mockReturnValueOnce({ recoveredAlerts: {} }); const alertFactory = createAlertFactory({ alerts: {}, logger, @@ -163,8 +166,8 @@ describe('createAlertFactory()', () => { expect(recoveredAlerts.length).toEqual(0); }); - test('returns empty array if getRecoveredAlerts returns null', () => { - (getRecoveredAlerts as jest.Mock).mockReturnValueOnce(null); + test('returns empty array if recovered alerts are null', () => { + (processAlerts as jest.Mock).mockReturnValueOnce({ recoveredAlerts: null }); const alertFactory = createAlertFactory({ alerts: {}, logger, diff --git a/x-pack/plugins/alerting/server/alert/create_alert_factory.ts b/x-pack/plugins/alerting/server/alert/create_alert_factory.ts index 9528273fb28db..5a9dad5cdada8 100644 --- a/x-pack/plugins/alerting/server/alert/create_alert_factory.ts +++ b/x-pack/plugins/alerting/server/alert/create_alert_factory.ts @@ -6,52 +6,48 @@ */ import { Logger } from '@kbn/core/server'; +import { cloneDeep } from 'lodash'; import { AlertInstanceContext, AlertInstanceState } from '../types'; -import { Alert } from './alert'; -import { getRecoveredAlerts } from '../lib'; +import { Alert, PublicAlert } from './alert'; +import { processAlerts } from '../lib'; export interface AlertFactoryDoneUtils< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, + State extends AlertInstanceState, + Context extends AlertInstanceContext, ActionGroupIds extends string > { - getRecoveredAlerts: () => Array>; + getRecoveredAlerts: () => Array>; } export interface CreateAlertFactoryOpts< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, - ActionGroupIds extends string + State extends AlertInstanceState, + Context extends AlertInstanceContext > { - alerts: Record>; + alerts: Record>; logger: Logger; canSetRecoveryContext?: boolean; } export function createAlertFactory< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, + State extends AlertInstanceState, + Context extends AlertInstanceContext, ActionGroupIds extends string ->({ - alerts, - logger, - canSetRecoveryContext = false, -}: CreateAlertFactoryOpts) { +>({ alerts, logger, canSetRecoveryContext = false }: CreateAlertFactoryOpts) { // Keep track of which alerts we started with so we can determine which have recovered - const initialAlertIds = new Set(Object.keys(alerts)); + const originalAlerts = cloneDeep(alerts); let isDone = false; return { - create: (id: string): Alert => { + create: (id: string): PublicAlert => { if (isDone) { throw new Error(`Can't create new alerts after calling done() in AlertsFactory.`); } if (!alerts[id]) { - alerts[id] = new Alert(id); + alerts[id] = new Alert(id); } return alerts[id]; }, - done: (): AlertFactoryDoneUtils => { + done: (): AlertFactoryDoneUtils => { isDone = true; return { getRecoveredAlerts: () => { @@ -62,8 +58,11 @@ export function createAlertFactory< return []; } - const recoveredAlerts = getRecoveredAlerts(alerts, initialAlertIds); - return Object.keys(recoveredAlerts ?? []).map( + const { recoveredAlerts } = processAlerts( + alerts, + originalAlerts + ); + return Object.keys(recoveredAlerts ?? {}).map( (alertId: string) => recoveredAlerts[alertId] ); }, diff --git a/x-pack/plugins/alerting/server/lib/get_recovered_alerts.test.ts b/x-pack/plugins/alerting/server/lib/get_recovered_alerts.test.ts deleted file mode 100644 index b984b04fc65d4..0000000000000 --- a/x-pack/plugins/alerting/server/lib/get_recovered_alerts.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getRecoveredAlerts } from './get_recovered_alerts'; -import { Alert } from '../alert'; -import { AlertInstanceState, AlertInstanceContext, DefaultActionGroupId } from '../types'; - -describe('getRecoveredAlerts', () => { - test('considers alert recovered if it has no scheduled actions', () => { - const alert1 = new Alert('1'); - alert1.scheduleActions('default', { foo: '1' }); - - const alert2 = new Alert('2'); - alert2.setContext({ foo: '2' }); - const alerts = { - '1': alert1, - '2': alert2, - }; - - expect(getRecoveredAlerts(alerts, new Set(['1', '2']))).toEqual({ - '2': alert2, - }); - }); - - test('does not consider alert recovered if it has no actions but was not in original alerts list', () => { - const alert1 = new Alert('1'); - alert1.scheduleActions('default', { foo: '1' }); - const alert2 = new Alert('2'); - const alerts = { - '1': alert1, - '2': alert2, - }; - - expect(getRecoveredAlerts(alerts, new Set(['1']))).toEqual({}); - }); -}); diff --git a/x-pack/plugins/alerting/server/lib/get_recovered_alerts.ts b/x-pack/plugins/alerting/server/lib/get_recovered_alerts.ts deleted file mode 100644 index f389f56a813d0..0000000000000 --- a/x-pack/plugins/alerting/server/lib/get_recovered_alerts.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Dictionary, pickBy } from 'lodash'; -import { Alert } from '../alert'; -import { AlertInstanceState, AlertInstanceContext } from '../types'; - -export function getRecoveredAlerts< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, - RecoveryActionGroupId extends string ->( - alerts: Record>, - originalAlertIds: Set -): Dictionary> { - return pickBy( - alerts, - (alert: Alert, id) => - !alert.hasScheduledActions() && originalAlertIds.has(id) - ); -} diff --git a/x-pack/plugins/alerting/server/lib/index.ts b/x-pack/plugins/alerting/server/lib/index.ts index 1d65497b15212..d221c2251d386 100644 --- a/x-pack/plugins/alerting/server/lib/index.ts +++ b/x-pack/plugins/alerting/server/lib/index.ts @@ -25,7 +25,7 @@ export { ruleExecutionStatusToRaw, ruleExecutionStatusFromRaw, } from './rule_execution_status'; -export { getRecoveredAlerts } from './get_recovered_alerts'; +export { processAlerts } from './process_alerts'; export { createWrappedScopedClusterClientFactory } from './wrap_scoped_cluster_client'; export { isRuleSnoozed, getRuleSnoozeEndTime } from './is_rule_snoozed'; export { convertRuleIdsToKueryNode } from './convert_rule_ids_to_kuery_node'; diff --git a/x-pack/plugins/alerting/server/lib/process_alerts.test.ts b/x-pack/plugins/alerting/server/lib/process_alerts.test.ts new file mode 100644 index 0000000000000..a242ac471ad11 --- /dev/null +++ b/x-pack/plugins/alerting/server/lib/process_alerts.test.ts @@ -0,0 +1,413 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import sinon from 'sinon'; +import { cloneDeep } from 'lodash'; +import { processAlerts } from './process_alerts'; +import { Alert } from '../alert'; +import { DefaultActionGroupId } from '../types'; + +describe('processAlerts', () => { + let clock: sinon.SinonFakeTimers; + + beforeAll(() => { + clock = sinon.useFakeTimers(); + }); + + beforeEach(() => { + clock.reset(); + }); + + afterAll(() => clock.restore()); + + describe('newAlerts', () => { + test('considers alert new if it has scheduled actions and its id is not in originalAlertIds list', () => { + const newAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '2': existingAlert1, + '3': existingAlert2, + }; + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '2' }); + + // @ts-expect-error + const { newAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(newAlerts).toEqual({ '1': newAlert }); + }); + + test('sets start time in new alert state', () => { + const newAlert1 = new Alert<{}, {}, DefaultActionGroupId>('1'); + const newAlert2 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('3'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('4'); + + const originalAlerts = { + '3': existingAlert1, + '4': existingAlert2, + }; + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert1, + '2': newAlert2, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '1' }); + updatedAlerts['4'].scheduleActions('default', { foo: '2' }); + + expect(newAlert1.getState()).toStrictEqual({}); + expect(newAlert2.getState()).toStrictEqual({}); + + // @ts-expect-error + const { newAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(newAlerts).toEqual({ '1': newAlert1, '2': newAlert2 }); + + const newAlert1State = newAlerts['1'].getState(); + const newAlert2State = newAlerts['2'].getState(); + + // @ts-expect-error + expect(newAlert1State.start).toEqual('1970-01-01T00:00:00.000Z'); + // @ts-expect-error + expect(newAlert2State.start).toEqual('1970-01-01T00:00:00.000Z'); + + // @ts-expect-error + expect(newAlert1State.duration).toEqual('0'); + // @ts-expect-error + expect(newAlert2State.duration).toEqual('0'); + + // @ts-expect-error + expect(newAlert1State.end).not.toBeDefined(); + // @ts-expect-error + expect(newAlert2State.end).not.toBeDefined(); + }); + }); + + describe('activeAlerts', () => { + test('considers alert active if it has scheduled actions', () => { + const newAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '2': existingAlert1, + '3': existingAlert2, + }; + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '2' }); + + // @ts-expect-error + const { activeAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(activeAlerts).toEqual({ + '1': updatedAlerts['1'], + '2': updatedAlerts['2'], + '3': updatedAlerts['3'], + }); + }); + + test('updates duration in active alerts if start is available', () => { + const newAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '2': existingAlert1, + '3': existingAlert2, + }; + originalAlerts['2'].replaceState({ start: '1969-12-30T00:00:00.000Z', duration: 33000 }); + originalAlerts['3'].replaceState({ start: '1969-12-31T07:34:00.000Z', duration: 23532 }); + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '2' }); + + // @ts-expect-error + const { activeAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(activeAlerts).toEqual({ + '1': updatedAlerts['1'], + '2': updatedAlerts['2'], + '3': updatedAlerts['3'], + }); + + const activeAlert1State = activeAlerts['2'].getState(); + const activeAlert2State = activeAlerts['3'].getState(); + + // @ts-expect-error + expect(activeAlert1State.start).toEqual('1969-12-30T00:00:00.000Z'); + // @ts-expect-error + expect(activeAlert2State.start).toEqual('1969-12-31T07:34:00.000Z'); + + // @ts-expect-error + expect(activeAlert1State.duration).toEqual('172800000000000'); + // @ts-expect-error + expect(activeAlert2State.duration).toEqual('59160000000000'); + + // @ts-expect-error + expect(activeAlert1State.end).not.toBeDefined(); + // @ts-expect-error + expect(activeAlert2State.end).not.toBeDefined(); + }); + + test('does not update duration in active alerts if start is not available', () => { + const newAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '2': existingAlert1, + '3': existingAlert2, + }; + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '2' }); + + // @ts-expect-error + const { activeAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(activeAlerts).toEqual({ + '1': updatedAlerts['1'], + '2': updatedAlerts['2'], + '3': updatedAlerts['3'], + }); + + const activeAlert1State = activeAlerts['2'].getState(); + const activeAlert2State = activeAlerts['3'].getState(); + + // @ts-expect-error + expect(activeAlert1State.start).not.toBeDefined(); + // @ts-expect-error + expect(activeAlert2State.start).not.toBeDefined(); + + // @ts-expect-error + expect(activeAlert1State.duration).not.toBeDefined(); + // @ts-expect-error + expect(activeAlert2State.duration).not.toBeDefined(); + + // @ts-expect-error + expect(activeAlert1State.end).not.toBeDefined(); + // @ts-expect-error + expect(activeAlert2State.end).not.toBeDefined(); + }); + + test('preserves other state fields', () => { + const newAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const existingAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const existingAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '2': existingAlert1, + '3': existingAlert2, + }; + originalAlerts['2'].replaceState({ + stateField1: 'xyz', + start: '1969-12-30T00:00:00.000Z', + duration: 33000, + }); + originalAlerts['3'].replaceState({ + anotherState: true, + start: '1969-12-31T07:34:00.000Z', + duration: 23532, + }); + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '1': newAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].scheduleActions('default', { foo: '1' }); + updatedAlerts['3'].scheduleActions('default', { foo: '2' }); + + // @ts-expect-error + const { activeAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(activeAlerts).toEqual({ + '1': updatedAlerts['1'], + '2': updatedAlerts['2'], + '3': updatedAlerts['3'], + }); + + const activeAlert1State = activeAlerts['2'].getState(); + const activeAlert2State = activeAlerts['3'].getState(); + + // @ts-expect-error + expect(activeAlert1State.start).toEqual('1969-12-30T00:00:00.000Z'); + // @ts-expect-error + expect(activeAlert2State.start).toEqual('1969-12-31T07:34:00.000Z'); + + // @ts-expect-error + expect(activeAlert1State.stateField1).toEqual('xyz'); + // @ts-expect-error + expect(activeAlert2State.anotherState).toEqual(true); + + // @ts-expect-error + expect(activeAlert1State.duration).toEqual('172800000000000'); + // @ts-expect-error + expect(activeAlert2State.duration).toEqual('59160000000000'); + + // @ts-expect-error + expect(activeAlert1State.end).not.toBeDefined(); + // @ts-expect-error + expect(activeAlert2State.end).not.toBeDefined(); + }); + }); + + describe('recoveredAlerts', () => { + test('considers alert recovered if it has no scheduled actions', () => { + const activeAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const recoveredAlert = new Alert<{}, {}, DefaultActionGroupId>('2'); + + const originalAlerts = { + '1': activeAlert, + '2': recoveredAlert, + }; + + const updatedAlerts = cloneDeep(originalAlerts); + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + updatedAlerts['2'].setContext({ foo: '2' }); + + // @ts-expect-error + const { recoveredAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(recoveredAlerts).toEqual({ '2': updatedAlerts['2'] }); + }); + + test('does not consider alert recovered if it has no actions but was not in original alerts list', () => { + const activeAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const notRecoveredAlert = new Alert<{}, {}, DefaultActionGroupId>('2'); + + const originalAlerts = { + '1': activeAlert, + }; + + const updatedAlerts = { + ...cloneDeep(originalAlerts), + '2': notRecoveredAlert, + }; + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + + // @ts-expect-error + const { recoveredAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(recoveredAlerts).toEqual({}); + }); + + test('updates duration in recovered alerts if start is available and adds end time', () => { + const activeAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const recoveredAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const recoveredAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '1': activeAlert, + '2': recoveredAlert1, + '3': recoveredAlert2, + }; + originalAlerts['2'].replaceState({ start: '1969-12-30T00:00:00.000Z', duration: 33000 }); + originalAlerts['3'].replaceState({ start: '1969-12-31T07:34:00.000Z', duration: 23532 }); + + const updatedAlerts = cloneDeep(originalAlerts); + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + + // @ts-expect-error + const { recoveredAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(recoveredAlerts).toEqual({ '2': updatedAlerts['2'], '3': updatedAlerts['3'] }); + + const recoveredAlert1State = recoveredAlerts['2'].getState(); + const recoveredAlert2State = recoveredAlerts['3'].getState(); + + // @ts-expect-error + expect(recoveredAlert1State.start).toEqual('1969-12-30T00:00:00.000Z'); + // @ts-expect-error + expect(recoveredAlert2State.start).toEqual('1969-12-31T07:34:00.000Z'); + + // @ts-expect-error + expect(recoveredAlert1State.duration).toEqual('172800000000000'); + // @ts-expect-error + expect(recoveredAlert2State.duration).toEqual('59160000000000'); + + // @ts-expect-error + expect(recoveredAlert1State.end).toEqual('1970-01-01T00:00:00.000Z'); + // @ts-expect-error + expect(recoveredAlert2State.end).toEqual('1970-01-01T00:00:00.000Z'); + }); + + test('does not update duration or set end in recovered alerts if start is not available', () => { + const activeAlert = new Alert<{}, {}, DefaultActionGroupId>('1'); + const recoveredAlert1 = new Alert<{}, {}, DefaultActionGroupId>('2'); + const recoveredAlert2 = new Alert<{}, {}, DefaultActionGroupId>('3'); + + const originalAlerts = { + '1': activeAlert, + '2': recoveredAlert1, + '3': recoveredAlert2, + }; + const updatedAlerts = cloneDeep(originalAlerts); + + updatedAlerts['1'].scheduleActions('default', { foo: '1' }); + + // @ts-expect-error + const { recoveredAlerts } = processAlerts(updatedAlerts, originalAlerts); + + expect(recoveredAlerts).toEqual({ '2': updatedAlerts['2'], '3': updatedAlerts['3'] }); + + const recoveredAlert1State = recoveredAlerts['2'].getState(); + const recoveredAlert2State = recoveredAlerts['3'].getState(); + + // @ts-expect-error + expect(recoveredAlert1State.start).not.toBeDefined(); + // @ts-expect-error + expect(recoveredAlert2State.start).not.toBeDefined(); + + // @ts-expect-error + expect(recoveredAlert1State.duration).not.toBeDefined(); + // @ts-expect-error + expect(recoveredAlert2State.duration).not.toBeDefined(); + + // @ts-expect-error + expect(recoveredAlert1State.end).not.toBeDefined(); + // @ts-expect-error + expect(recoveredAlert2State.end).not.toBeDefined(); + }); + }); +}); diff --git a/x-pack/plugins/alerting/server/lib/process_alerts.ts b/x-pack/plugins/alerting/server/lib/process_alerts.ts new file mode 100644 index 0000000000000..f4af401e5113c --- /dev/null +++ b/x-pack/plugins/alerting/server/lib/process_alerts.ts @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { millisToNanos } from '@kbn/event-log-plugin/server'; +import { Alert } from '../alert'; +import { AlertInstanceState, AlertInstanceContext } from '../types'; + +interface ProcessAlertsResult< + State extends AlertInstanceState, + Context extends AlertInstanceContext, + ActionGroupIds extends string, + RecoveryActionGroupId extends string +> { + newAlerts: Record>; + activeAlerts: Record>; + recoveredAlerts: Record>; +} + +export function processAlerts< + State extends AlertInstanceState, + Context extends AlertInstanceContext, + ActionGroupIds extends string, + RecoveryActionGroupId extends string +>( + alerts: Record>, + originalAlerts: Record> +): ProcessAlertsResult { + const originalAlertIds = new Set(Object.keys(originalAlerts)); + + const currentTime = new Date().toISOString(); + const newAlerts: Record> = {}; + const activeAlerts: Record> = {}; + const recoveredAlerts: Record> = {}; + + for (const id in alerts) { + if (alerts.hasOwnProperty(id)) { + // alerts with scheduled actions are considered "active" + if (alerts[id].hasScheduledActions()) { + activeAlerts[id] = alerts[id]; + + // if this alert did not exist in previous run, it is considered "new" + if (!originalAlertIds.has(id)) { + newAlerts[id] = alerts[id]; + + // Inject start time into alert state for new alerts + const state = newAlerts[id].getState(); + newAlerts[id].replaceState({ ...state, start: currentTime, duration: '0' }); + } else { + // this alert did exist in previous run + // calculate duration to date for active alerts + const state = originalAlerts[id].getState(); + const durationInMs = + new Date(currentTime).valueOf() - new Date(state.start as string).valueOf(); + const duration = state.start ? millisToNanos(durationInMs) : undefined; + activeAlerts[id].replaceState({ + ...state, + ...(state.start ? { start: state.start } : {}), + ...(duration !== undefined ? { duration } : {}), + }); + } + } else if (originalAlertIds.has(id)) { + recoveredAlerts[id] = alerts[id]; + + // Inject end time into alert state of recovered alerts + const state = recoveredAlerts[id].getState(); + const durationInMs = + new Date(currentTime).valueOf() - new Date(state.start as string).valueOf(); + const duration = state.start ? millisToNanos(durationInMs) : undefined; + recoveredAlerts[id].replaceState({ + ...state, + ...(duration ? { duration } : {}), + ...(state.start ? { end: currentTime } : {}), + }); + } + } + } + return { recoveredAlerts, newAlerts, activeAlerts }; +} diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index c78531cf17d31..30a64d11196c9 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -6,12 +6,12 @@ */ import apm from 'elastic-apm-node'; -import { cloneDeep, mapValues, omit, pickBy, without } from 'lodash'; +import { cloneDeep, omit } from 'lodash'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import uuid from 'uuid'; import { KibanaRequest, Logger } from '@kbn/core/server'; import { ConcreteTaskInstance, throwUnrecoverableError } from '@kbn/task-manager-plugin/server'; -import { millisToNanos, nanosToMillis } from '@kbn/event-log-plugin/server'; +import { nanosToMillis } from '@kbn/event-log-plugin/server'; import { TaskRunnerContext } from './task_runner_factory'; import { createExecutionHandler, ExecutionHandler } from './create_execution_handler'; import { Alert, createAlertFactory } from '../alert'; @@ -20,9 +20,9 @@ import { ErrorWithReason, executionStatusFromError, executionStatusFromState, - getRecoveredAlerts, ruleExecutionStatusToRaw, isRuleSnoozed, + processAlerts, } from '../lib'; import { Rule, @@ -62,7 +62,6 @@ import { RuleTaskInstance, RuleTaskRunResult, ScheduleActionsForRecoveredAlertsParams, - TrackAlertDurationsParams, RuleRunResult, RuleTaskStateAndMetrics, } from './types'; @@ -89,9 +88,9 @@ export const getDefaultRuleMonitoring = (): RuleMonitoring => ({ export class TaskRunner< Params extends RuleTypeParams, ExtractedParams extends RuleTypeParams, - State extends RuleTypeState, - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, + RuleState extends RuleTypeState, + State extends AlertInstanceState, + Context extends AlertInstanceContext, ActionGroupIds extends string, RecoveryActionGroupId extends string > { @@ -102,9 +101,9 @@ export class TaskRunner< private ruleType: NormalizedRuleType< Params, ExtractedParams, + RuleState, State, - InstanceState, - InstanceContext, + Context, ActionGroupIds, RecoveryActionGroupId >; @@ -120,9 +119,9 @@ export class TaskRunner< ruleType: NormalizedRuleType< Params, ExtractedParams, + RuleState, State, - InstanceState, - InstanceContext, + Context, ActionGroupIds, RecoveryActionGroupId >, @@ -158,9 +157,9 @@ export class TaskRunner< return createExecutionHandler< Params, ExtractedParams, + RuleState, State, - InstanceState, - InstanceContext, + Context, ActionGroupIds, RecoveryActionGroupId >({ @@ -227,7 +226,7 @@ export class TaskRunner< private async executeAlert( alertId: string, - alert: Alert, + alert: Alert, executionHandler: ExecutionHandler, ruleRunMetricsStore: RuleRunMetricsStore ) { @@ -275,7 +274,11 @@ export class TaskRunner< } = rule; const { params: { alertId: ruleId }, - state: { alertInstances: alertRawInstances = {}, alertTypeState = {}, previousStartedAt }, + state: { + alertInstances: alertRawInstances = {}, + alertTypeState: ruleTypeState = {}, + previousStartedAt, + }, } = this.taskInstance; const executionHandler = this.getExecutionHandler( @@ -293,16 +296,13 @@ export class TaskRunner< const namespace = this.context.spaceIdToNamespace(spaceId); const ruleType = this.ruleTypeRegistry.get(alertTypeId); - const alerts = mapValues< - Record, - Alert - >( - alertRawInstances, - (rawAlert, alertId) => new Alert(alertId, rawAlert) - ); - + const alerts: Record> = {}; + for (const id in alertRawInstances) { + if (alertRawInstances.hasOwnProperty(id)) { + alerts[id] = new Alert(id, alertRawInstances[id]); + } + } const originalAlerts = cloneDeep(alerts); - const originalAlertIds = new Set(Object.keys(originalAlerts)); const ruleLabel = `${this.ruleType.id}:${ruleId}: '${name}'`; @@ -352,8 +352,8 @@ export class TaskRunner< uiSettingsClient: this.context.uiSettings.asScopedToClient(savedObjectsClient), scopedClusterClient: wrappedScopedClusterClient.client(), alertFactory: createAlertFactory< - InstanceState, - InstanceContext, + State, + Context, WithoutReservedActionGroups >({ alerts, @@ -364,7 +364,7 @@ export class TaskRunner< shouldStopExecution: () => this.cancelled, }, params, - state: alertTypeState as State, + state: ruleTypeState as RuleState, startedAt: this.taskInstance.startedAt!, previousStartedAt: previousStartedAt ? new Date(previousStartedAt) : null, spaceId, @@ -423,33 +423,26 @@ export class TaskRunner< ruleRunMetricsStore.setTotalSearchDurationMs(searchMetrics.totalSearchDurationMs); ruleRunMetricsStore.setEsSearchDurationMs(searchMetrics.esSearchDurationMs); - // Cleanup alerts that are no longer scheduling actions to avoid over populating the alertInstances object - const alertsWithScheduledActions = pickBy( - alerts, - (alert: Alert) => alert.hasScheduledActions() - ); - - const recoveredAlerts = getRecoveredAlerts(alerts, originalAlertIds); + const { newAlerts, activeAlerts, recoveredAlerts } = processAlerts< + State, + Context, + ActionGroupIds, + RecoveryActionGroupId + >(alerts, originalAlerts); logActiveAndRecoveredAlerts({ logger: this.logger, - activeAlerts: alertsWithScheduledActions, + activeAlerts, recoveredAlerts, ruleLabel, canSetRecoveryContext: ruleType.doesSetRecoveryContext ?? false, }); - trackAlertDurations({ - originalAlerts, - currentAlerts: alertsWithScheduledActions, - recoveredAlerts, - }); - if (this.shouldLogAndScheduleActionsForAlerts()) { generateNewAndRecoveredAlertEvents({ alertingEventLogger: this.alertingEventLogger, - originalAlerts, - currentAlerts: alertsWithScheduledActions, + newAlerts, + activeAlerts, recoveredAlerts, ruleLabel, ruleRunMetricsStore, @@ -466,8 +459,8 @@ export class TaskRunner< if (!ruleIsSnoozed && this.shouldLogAndScheduleActionsForAlerts()) { const mutedAlertIdsSet = new Set(mutedInstanceIds); - const alertsWithExecutableActions = Object.entries(alertsWithScheduledActions).filter( - ([alertName, alert]: [string, Alert]) => { + const alertsWithExecutableActions = Object.entries(activeAlerts).filter( + ([alertName, alert]: [string, Alert]) => { const throttled = alert.isThrottled(throttle); const muted = mutedAlertIdsSet.has(alertName); let shouldExecuteAction = true; @@ -495,16 +488,12 @@ export class TaskRunner< await Promise.all( alertsWithExecutableActions.map( - ([alertId, alert]: [string, Alert]) => + ([alertId, alert]: [string, Alert]) => this.executeAlert(alertId, alert, executionHandler, ruleRunMetricsStore) ) ); - await scheduleActionsForRecoveredAlerts< - InstanceState, - InstanceContext, - RecoveryActionGroupId - >({ + await scheduleActionsForRecoveredAlerts({ recoveryActionGroup: this.ruleType.recoveryActionGroup, recoveredAlerts, executionHandler, @@ -530,13 +519,17 @@ export class TaskRunner< } } + const alertsToReturn: Record = {}; + for (const id in activeAlerts) { + if (activeAlerts.hasOwnProperty(id)) { + alertsToReturn[id] = activeAlerts[id].toRaw(); + } + } + return { metrics: ruleRunMetricsStore.getMetrics(), alertTypeState: updatedRuleTypeState || undefined, - alertInstances: mapValues< - Record>, - RawAlertInstance - >(alertsWithScheduledActions, (alert) => alert.toRaw()), + alertInstances: alertsToReturn, }; } @@ -811,76 +804,33 @@ export class TaskRunner< } } -function trackAlertDurations< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext ->(params: TrackAlertDurationsParams) { - const currentTime = new Date().toISOString(); - const { currentAlerts, originalAlerts, recoveredAlerts } = params; - const originalAlertIds = Object.keys(originalAlerts); - const currentAlertIds = Object.keys(currentAlerts); - const recoveredAlertIds = Object.keys(recoveredAlerts); - const newAlertIds = without(currentAlertIds, ...originalAlertIds); - - // Inject start time into alert state of new alerts - for (const id of newAlertIds) { - const state = currentAlerts[id].getState(); - currentAlerts[id].replaceState({ ...state, start: currentTime }); - } - - // Calculate duration to date for active alerts - for (const id of currentAlertIds) { - const state = originalAlertIds.includes(id) - ? originalAlerts[id].getState() - : currentAlerts[id].getState(); - const durationInMs = - new Date(currentTime).valueOf() - new Date(state.start as string).valueOf(); - const duration = state.start ? millisToNanos(durationInMs) : undefined; - currentAlerts[id].replaceState({ - ...state, - ...(state.start ? { start: state.start } : {}), - ...(duration !== undefined ? { duration } : {}), - }); - } - - // Inject end time into alert state of recovered alerts - for (const id of recoveredAlertIds) { - const state = recoveredAlerts[id].getState(); - const durationInMs = - new Date(currentTime).valueOf() - new Date(state.start as string).valueOf(); - const duration = state.start ? millisToNanos(durationInMs) : undefined; - recoveredAlerts[id].replaceState({ - ...state, - ...(duration ? { duration } : {}), - ...(state.start ? { end: currentTime } : {}), - }); - } -} - function generateNewAndRecoveredAlertEvents< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext ->(params: GenerateNewAndRecoveredAlertEventsParams) { - const { - alertingEventLogger, - currentAlerts, - originalAlerts, - recoveredAlerts, - ruleRunMetricsStore, - } = params; - const originalAlertIds = Object.keys(originalAlerts); - const currentAlertIds = Object.keys(currentAlerts); + State extends AlertInstanceState, + Context extends AlertInstanceContext, + ActionGroupIds extends string, + RecoveryActionGroupId extends string +>( + params: GenerateNewAndRecoveredAlertEventsParams< + State, + Context, + ActionGroupIds, + RecoveryActionGroupId + > +) { + const { alertingEventLogger, activeAlerts, newAlerts, recoveredAlerts, ruleRunMetricsStore } = + params; + const activeAlertIds = Object.keys(activeAlerts); const recoveredAlertIds = Object.keys(recoveredAlerts); - const newIds = without(currentAlertIds, ...originalAlertIds); + const newAlertIds = Object.keys(newAlerts); if (apm.currentTransaction) { apm.currentTransaction.addLabels({ - alerting_new_alerts: newIds.length, + alerting_new_alerts: newAlertIds.length, }); } - ruleRunMetricsStore.setNumberOfActiveAlerts(currentAlertIds.length); - ruleRunMetricsStore.setNumberOfNewAlerts(newIds.length); + ruleRunMetricsStore.setNumberOfActiveAlerts(activeAlertIds.length); + ruleRunMetricsStore.setNumberOfNewAlerts(newAlertIds.length); ruleRunMetricsStore.setNumberOfRecoveredAlerts(recoveredAlertIds.length); for (const id of recoveredAlertIds) { @@ -899,10 +849,10 @@ function generateNewAndRecoveredAlertEvents< }); } - for (const id of newIds) { + for (const id of newAlertIds) { const { actionGroup, subgroup: actionSubgroup } = - currentAlerts[id].getScheduledActionOptions() ?? {}; - const state = currentAlerts[id].getState(); + activeAlerts[id].getScheduledActionOptions() ?? {}; + const state = activeAlerts[id].getState(); const message = `${params.ruleLabel} created new alert: '${id}'`; alertingEventLogger.logAlert({ action: EVENT_LOG_ACTIONS.newInstance, @@ -914,10 +864,10 @@ function generateNewAndRecoveredAlertEvents< }); } - for (const id of currentAlertIds) { + for (const id of activeAlertIds) { const { actionGroup, subgroup: actionSubgroup } = - currentAlerts[id].getScheduledActionOptions() ?? {}; - const state = currentAlerts[id].getState(); + activeAlerts[id].getScheduledActionOptions() ?? {}; + const state = activeAlerts[id].getState(); const message = `${params.ruleLabel} active alert: '${id}' in ${ actionSubgroup ? `actionGroup(subgroup): '${actionGroup}(${actionSubgroup})'` @@ -978,17 +928,12 @@ async function scheduleActionsForRecoveredAlerts< } function logActiveAndRecoveredAlerts< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, + State extends AlertInstanceState, + Context extends AlertInstanceContext, ActionGroupIds extends string, RecoveryActionGroupId extends string >( - params: LogActiveAndRecoveredAlertsParams< - InstanceState, - InstanceContext, - ActionGroupIds, - RecoveryActionGroupId - > + params: LogActiveAndRecoveredAlertsParams ) { const { logger, activeAlerts, recoveredAlerts, ruleLabel, canSetRecoveryContext } = params; const activeAlertIds = Object.keys(activeAlerts); diff --git a/x-pack/plugins/alerting/server/task_runner/types.ts b/x-pack/plugins/alerting/server/task_runner/types.ts index 12de4ccc63a66..7a3a78c5426df 100644 --- a/x-pack/plugins/alerting/server/task_runner/types.ts +++ b/x-pack/plugins/alerting/server/task_runner/types.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { Dictionary } from 'lodash'; import { KibanaRequest, Logger } from '@kbn/core/server'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import { PluginStartContract as ActionsPluginStartContract } from '@kbn/actions-plugin/server'; @@ -49,23 +48,16 @@ export interface RuleTaskInstance extends ConcreteTaskInstance { state: RuleTaskState; } -export interface TrackAlertDurationsParams< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext -> { - originalAlerts: Dictionary>; - currentAlerts: Dictionary>; - recoveredAlerts: Dictionary>; -} - export interface GenerateNewAndRecoveredAlertEventsParams< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext + State extends AlertInstanceState, + Context extends AlertInstanceContext, + ActionGroupIds extends string, + RecoveryActionGroupId extends string > { alertingEventLogger: AlertingEventLogger; - originalAlerts: Dictionary>; - currentAlerts: Dictionary>; - recoveredAlerts: Dictionary>; + newAlerts: Record>; + activeAlerts: Record>; + recoveredAlerts: Record>; ruleLabel: string; ruleRunMetricsStore: RuleRunMetricsStore; } @@ -77,22 +69,22 @@ export interface ScheduleActionsForRecoveredAlertsParams< > { logger: Logger; recoveryActionGroup: ActionGroup; - recoveredAlerts: Dictionary>; - executionHandler: ExecutionHandler; + recoveredAlerts: Record>; + executionHandler: ExecutionHandler; mutedAlertIdsSet: Set; ruleLabel: string; ruleRunMetricsStore: RuleRunMetricsStore; } export interface LogActiveAndRecoveredAlertsParams< - InstanceState extends AlertInstanceState, - InstanceContext extends AlertInstanceContext, + State extends AlertInstanceState, + Context extends AlertInstanceContext, ActionGroupIds extends string, RecoveryActionGroupId extends string > { logger: Logger; - activeAlerts: Dictionary>; - recoveredAlerts: Dictionary>; + activeAlerts: Record>; + recoveredAlerts: Record>; ruleLabel: string; canSetRecoveryContext: boolean; } From 6e6c51fab34bed634f191b823f9027a4cd83a464 Mon Sep 17 00:00:00 2001 From: Akash Tangde <73993188+ak20102763@users.noreply.github.com> Date: Thu, 14 Jul 2022 00:12:03 +0530 Subject: [PATCH 25/96] Updating description for elastic APM integration (#136121) * Update available_packages.tsx * Update x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx Co-authored-by: Brandon Morelli Co-authored-by: Brandon Morelli Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../sections/epm/screens/home/available_packages.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx index af3faff04243d..e8d4692f2a3b9 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/home/available_packages.tsx @@ -340,7 +340,7 @@ export const AvailablePackages: React.FC<{ })} description={i18n.translate('xpack.fleet.featuredObsDesc', { defaultMessage: - 'Monitor, detect and diagnose complex performance issues from your application.', + 'Monitor, detect, and diagnose complex application performance issues.', })} href={addBasePath('/app/home#/tutorial/apm')} icon={} From 27deb07bc6bdf069908bf67d458966cf6a192730 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Wed, 13 Jul 2022 15:44:25 -0400 Subject: [PATCH 26/96] [UX Dashboard] Migrate page load duration chart out of APM (#132970) Co-authored-by: shahzad31 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 3 - .github/paths-labeller.yml | 4 - .../projections/rum_page_load_transactions.ts | 121 -------- .../plugins/apm/server/projections/typings.ts | 24 -- .../util/merge_projection/index.test.ts | 80 ------ .../util/merge_projection/index.ts | 37 --- .../get_global_apm_server_route_repository.ts | 2 - .../__snapshots__/queries.test.ts.snap | 272 ------------------ .../rum_client/get_page_load_distribution.ts | 233 --------------- .../rum_client/get_pl_dist_breakdown.ts | 128 --------- .../server/routes/rum_client/queries.test.ts | 35 --- .../apm/server/routes/rum_client/route.ts | 160 ----------- .../ui_filters/get_es_filter.test.ts | 31 -- .../rum_client/ui_filters/get_es_filter.ts | 44 --- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../charts/page_load_dist_chart.tsx | 163 +++-------- .../rum_dashboard/charts/page_views_chart.tsx | 34 +-- .../charts/use_exp_view_attrs.ts | 37 +++ .../breakdown_series.tsx | 75 ----- .../page_load_distribution/index.tsx | 98 +------ .../page_load_distribution/use_breakdowns.ts | 52 ---- .../rum_dashboard/page_views_trend/index.tsx | 5 +- .../panels/page_load_and_views.tsx | 2 +- 25 files changed, 83 insertions(+), 1560 deletions(-) delete mode 100644 x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts delete mode 100644 x-pack/plugins/apm/server/projections/typings.ts delete mode 100644 x-pack/plugins/apm/server/projections/util/merge_projection/index.test.ts delete mode 100644 x-pack/plugins/apm/server/projections/util/merge_projection/index.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/get_page_load_distribution.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/get_pl_dist_breakdown.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/queries.test.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/route.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.test.ts delete mode 100644 x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.ts create mode 100644 x-pack/plugins/ux/public/components/app/rum_dashboard/charts/use_exp_view_attrs.ts delete mode 100644 x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/breakdown_series.tsx delete mode 100644 x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/use_breakdowns.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7377ea3ffe353..793805005de8b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -150,9 +150,6 @@ # Client Side Monitoring / Uptime (lives in APM directories but owned by Uptime) /x-pack/plugins/apm/public/application/uxApp.tsx @elastic/uptime /x-pack/plugins/apm/public/components/app/rum_dashboard @elastic/uptime -/x-pack/plugins/apm/server/lib/rum_client @elastic/uptime -/x-pack/plugins/apm/server/routes/rum_client.ts @elastic/uptime -/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts @elastic/uptime /x-pack/test/apm_api_integration/tests/csm/ @elastic/uptime ### END Observability Plugins diff --git a/.github/paths-labeller.yml b/.github/paths-labeller.yml index 6800aeea65b9d..efc03d8942b8d 100644 --- a/.github/paths-labeller.yml +++ b/.github/paths-labeller.yml @@ -17,7 +17,3 @@ - "x-pack/plugins/synthetics/**/*.*" - "x-pack/plugins/ux/**/*.*" - "x-pack/plugins/observability/public/components/shared/exploratory_view/**/*.*" - - "x-pack/plugins/apm/server/lib/rum_client/**/*.*" - - "x-pack/plugins/apm/server/lib/rum_client/*.*" - - "x-pack/plugins/apm/server/routes/rum_client.ts" - - "x-pack/plugins/apm/server/projections/rum_overview.ts" diff --git a/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts b/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts deleted file mode 100644 index 545e90914f4d2..0000000000000 --- a/x-pack/plugins/apm/server/projections/rum_page_load_transactions.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { rangeQuery } from '@kbn/observability-plugin/server'; -import { SetupUX } from '../routes/rum_client/route'; -import { - AGENT_NAME, - TRANSACTION_TYPE, - SERVICE_LANGUAGE_NAME, -} from '../../common/elasticsearch_fieldnames'; -import { ProcessorEvent } from '../../common/processor_event'; -import { TRANSACTION_PAGE_LOAD } from '../../common/transaction_types'; -import { getEsFilter } from '../routes/rum_client/ui_filters/get_es_filter'; - -export function getRumPageLoadTransactionsProjection({ - setup, - urlQuery, - checkFetchStartFieldExists = true, - start, - end, -}: { - setup: SetupUX; - urlQuery?: string; - checkFetchStartFieldExists?: boolean; - start: number; - end: number; -}) { - const { uiFilters } = setup; - - const bool = { - filter: [ - ...rangeQuery(start, end), - { term: { [TRANSACTION_TYPE]: TRANSACTION_PAGE_LOAD } }, - ...(checkFetchStartFieldExists - ? [ - { - // Adding this filter to cater for some inconsistent rum data - // not available on aggregated transactions - exists: { - field: 'transaction.marks.navigationTiming.fetchStart', - }, - }, - ] - : []), - ...(urlQuery - ? [ - { - wildcard: { - 'url.full': `*${urlQuery}*`, - }, - }, - ] - : []), - ...getEsFilter(uiFilters), - ], - must_not: [...getEsFilter(uiFilters, true)], - }; - - return { - apm: { - events: [ProcessorEvent.transaction], - }, - body: { - query: { - bool, - }, - }, - }; -} - -export function getRumErrorsProjection({ - setup, - urlQuery, - start, - end, -}: { - setup: SetupUX; - urlQuery?: string; - start: number; - end: number; -}) { - const { uiFilters } = setup; - - const bool = { - filter: [ - ...rangeQuery(start, end), - { term: { [AGENT_NAME]: 'rum-js' } }, - { - term: { - [SERVICE_LANGUAGE_NAME]: 'javascript', - }, - }, - ...getEsFilter(uiFilters), - ...(urlQuery - ? [ - { - wildcard: { - 'url.full': `*${urlQuery}*`, - }, - }, - ] - : []), - ], - must_not: [...getEsFilter(uiFilters, true)], - }; - - return { - apm: { - events: [ProcessorEvent.error], - }, - body: { - query: { - bool, - }, - }, - }; -} diff --git a/x-pack/plugins/apm/server/projections/typings.ts b/x-pack/plugins/apm/server/projections/typings.ts deleted file mode 100644 index 6ba7d315bfa6d..0000000000000 --- a/x-pack/plugins/apm/server/projections/typings.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { AggregationOptionsByType } from '@kbn/core/types/elasticsearch'; -import { APMEventESSearchRequest } from '../lib/helpers/create_es_client/create_apm_event_client'; - -export type Projection = Omit & { - body: Omit< - Required['body'], - 'aggs' | 'aggregations' | 'size' - > & { - size?: number; - aggs?: { - [key: string]: { - terms: AggregationOptionsByType['terms'] & { field: string }; - aggs?: Record; - }; - }; - }; -}; diff --git a/x-pack/plugins/apm/server/projections/util/merge_projection/index.test.ts b/x-pack/plugins/apm/server/projections/util/merge_projection/index.test.ts deleted file mode 100644 index 8294630dad9d4..0000000000000 --- a/x-pack/plugins/apm/server/projections/util/merge_projection/index.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { mergeProjection } from '.'; - -describe('mergeProjection', () => { - it('overrides arrays', () => { - expect( - mergeProjection( - { - apm: { events: [] }, - body: { query: { bool: { must: [{ terms: { field: ['a'] } }] } } }, - }, - { - apm: { events: [] }, - body: { query: { bool: { must: [{ term: { field: 'b' } }] } } }, - } - ) - ).toEqual({ - apm: { - events: [], - }, - body: { - query: { - bool: { - must: [ - { - term: { field: 'b' }, - }, - ], - }, - }, - }, - }); - }); - - it('merges plain objects', () => { - const termsAgg = { terms: { field: 'bar' } }; - expect( - mergeProjection( - { apm: { events: [] }, body: { query: {}, aggs: { foo: termsAgg } } }, - { - apm: { - events: [], - }, - body: { - aggs: { - foo: { ...termsAgg, aggs: { bar: { terms: { field: 'baz' } } } }, - }, - }, - } - ) - ).toEqual({ - apm: { - events: [], - }, - body: { - query: {}, - aggs: { - foo: { - terms: { - field: 'bar', - }, - aggs: { - bar: { - terms: { - field: 'baz', - }, - }, - }, - }, - }, - }, - }); - }); -}); diff --git a/x-pack/plugins/apm/server/projections/util/merge_projection/index.ts b/x-pack/plugins/apm/server/projections/util/merge_projection/index.ts deleted file mode 100644 index 992f47c9c1066..0000000000000 --- a/x-pack/plugins/apm/server/projections/util/merge_projection/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { cloneDeep, isPlainObject, mergeWith } from 'lodash'; -import { DeepPartial } from 'utility-types'; -import { APMEventESSearchRequest } from '../../../lib/helpers/create_es_client/create_apm_event_client'; -import { Projection } from '../../typings'; - -type PlainObject = Record; - -type SourceProjection = DeepPartial; - -type DeepMerge = U extends PlainObject - ? T extends PlainObject - ? Omit & { - [key in keyof U]: T extends { [k in key]: any } - ? DeepMerge - : U[key]; - } - : U - : U; - -export function mergeProjection< - T extends Projection, - U extends SourceProjection ->(target: T, source: U): DeepMerge { - return mergeWith({}, cloneDeep(target), source, (a, b) => { - if (isPlainObject(a) && isPlainObject(b)) { - return undefined; - } - return b; - }) as DeepMerge; -} diff --git a/x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts b/x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts index 4c6bc38192fa4..f906d6d95feb0 100644 --- a/x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts +++ b/x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts @@ -26,7 +26,6 @@ import { infrastructureRouteRepository } from '../infrastructure/route'; import { latencyDistributionRouteRepository } from '../latency_distribution/route'; import { metricsRouteRepository } from '../metrics/route'; import { observabilityOverviewRouteRepository } from '../observability_overview/route'; -import { rumRouteRepository } from '../rum_client/route'; import { serviceRouteRepository } from '../services/route'; import { serviceGroupRouteRepository } from '../service_groups/route'; import { serviceMapRouteRepository } from '../service_map/route'; @@ -50,7 +49,6 @@ function getTypedGlobalApmServerRouteRepository() { ...latencyDistributionRouteRepository, ...metricsRouteRepository, ...observabilityOverviewRouteRepository, - ...rumRouteRepository, ...serviceMapRouteRepository, ...serviceNodeRouteRepository, ...serviceRouteRepository, diff --git a/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap deleted file mode 100644 index c36088481d07c..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/__snapshots__/queries.test.ts.snap +++ /dev/null @@ -1,272 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`rum client dashboard queries fetches page load distribution 1`] = ` -Object { - "apm": Object { - "events": Array [ - "transaction", - ], - }, - "body": Object { - "aggs": Object { - "durPercentiles": Object { - "percentiles": Object { - "field": "transaction.duration.us", - "hdr": Object { - "number_of_significant_value_digits": 3, - }, - "percents": Array [ - 50, - 75, - 90, - 95, - 99, - ], - }, - }, - "loadDistribution": Object { - "percentile_ranks": Object { - "field": "transaction.duration.us", - "hdr": Object { - "number_of_significant_value_digits": 3, - }, - "keyed": false, - "values": Array [ - 0, - 500000, - 1000000, - 1500000, - 2000000, - 2500000, - 3000000, - 3500000, - 4000000, - 4500000, - 5000000, - 5500000, - 6000000, - 6500000, - 7000000, - 7500000, - 8000000, - 8500000, - 9000000, - 9500000, - 10000000, - 10500000, - 11000000, - 11500000, - 12000000, - 12500000, - 13000000, - 13500000, - 14000000, - 14500000, - 15000000, - 15500000, - 16000000, - 16500000, - 17000000, - 17500000, - 18000000, - 18500000, - 19000000, - 19500000, - 20000000, - 20500000, - 21000000, - 21500000, - 22000000, - 22500000, - 23000000, - 23500000, - 24000000, - 24500000, - 25000000, - 25500000, - 26000000, - 26500000, - 27000000, - 27500000, - 28000000, - 28500000, - 29000000, - 29500000, - 30000000, - 30500000, - 31000000, - 31500000, - 32000000, - 32500000, - 33000000, - 33500000, - 34000000, - 34500000, - 35000000, - 35500000, - 36000000, - 36500000, - 37000000, - 37500000, - 38000000, - 38500000, - 39000000, - 39500000, - 40000000, - 40500000, - 41000000, - 41500000, - 42000000, - 42500000, - 43000000, - 43500000, - 44000000, - 44500000, - 45000000, - 45500000, - 46000000, - 46500000, - 47000000, - 47500000, - 48000000, - 48500000, - 49000000, - 49500000, - 50000000, - 50500000, - 51000000, - 51500000, - 52000000, - 52500000, - 53000000, - 53500000, - 54000000, - 54500000, - 55000000, - 55500000, - 56000000, - 56500000, - 57000000, - 57500000, - 58000000, - 58500000, - 59000000, - 59500000, - 60000000, - 60500000, - 61000000, - 61500000, - 62000000, - 62500000, - 63000000, - 63500000, - 64000000, - 64500000, - 65000000, - 65500000, - 66000000, - 66500000, - 67000000, - 67500000, - 68000000, - 68500000, - 69000000, - 69500000, - 70000000, - 70500000, - 71000000, - 71500000, - 72000000, - 72500000, - 73000000, - 73500000, - 74000000, - 74500000, - 75000000, - 75500000, - 76000000, - 76500000, - 77000000, - 77500000, - 78000000, - 78500000, - 79000000, - 79500000, - 80000000, - 80500000, - 81000000, - 81500000, - 82000000, - 82500000, - 83000000, - 83500000, - 84000000, - 84500000, - 85000000, - 85500000, - 86000000, - 86500000, - 87000000, - 87500000, - 88000000, - 88500000, - 89000000, - 89500000, - 90000000, - 90500000, - 91000000, - 91500000, - 92000000, - 92500000, - 93000000, - 93500000, - 94000000, - 94500000, - 95000000, - 95500000, - 96000000, - 96500000, - 97000000, - 97500000, - 98000000, - 98500000, - 99000000, - ], - }, - }, - }, - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "format": "epoch_millis", - "gte": 0, - "lte": 50000, - }, - }, - }, - Object { - "term": Object { - "transaction.type": "page-load", - }, - }, - Object { - "exists": Object { - "field": "transaction.marks.navigationTiming.fetchStart", - }, - }, - Object { - "term": Object { - "service.environment": "staging", - }, - }, - ], - "must_not": Array [], - }, - }, - "size": 0, - }, -} -`; diff --git a/x-pack/plugins/apm/server/routes/rum_client/get_page_load_distribution.ts b/x-pack/plugins/apm/server/routes/rum_client/get_page_load_distribution.ts deleted file mode 100644 index 27c8c4668ce9b..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/get_page_load_distribution.ts +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { TRANSACTION_DURATION } from '../../../common/elasticsearch_fieldnames'; -import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; -import { mergeProjection } from '../../projections/util/merge_projection'; -import { SetupUX } from './route'; - -export const MICRO_TO_SEC = 1000000; - -export function microToSec(val: number) { - return Math.round((val / MICRO_TO_SEC + Number.EPSILON) * 100) / 100; -} - -export function removeZeroesFromTail( - distData: Array<{ x: number; y: number }> -) { - if (distData.length > 0) { - while (distData[distData.length - 1].y === 0) { - distData.pop(); - } - } - return distData; -} - -export const getPLDChartSteps = ({ - maxDuration, - minDuration, - initStepValue, -}: { - maxDuration: number; - minDuration: number; - initStepValue?: number; -}) => { - let stepValue = 0.5; - // if diff is too low, let's lower - // down the steps value to increase steps - if (maxDuration - minDuration <= 5 * MICRO_TO_SEC) { - stepValue = 0.1; - } - - if (initStepValue) { - stepValue = initStepValue; - } - - let initValue = minDuration; - const stepValues = [initValue]; - - while (initValue < maxDuration) { - initValue += stepValue * MICRO_TO_SEC; - stepValues.push(initValue); - } - - return stepValues; -}; - -export async function getPageLoadDistribution({ - setup, - minPercentile, - maxPercentile, - urlQuery, - start, - end, -}: { - setup: SetupUX; - minPercentile?: string; - maxPercentile?: string; - urlQuery?: string; - start: number; - end: number; -}) { - const projection = getRumPageLoadTransactionsProjection({ - setup, - urlQuery, - start, - end, - }); - - // we will first get 100 steps using 0sec and 50sec duration, - // most web apps will cover this use case - // if 99th percentile is greater than 50sec, - // we will fetch additional 5 steps beyond 99th percentile - let maxDuration = (maxPercentile ? +maxPercentile : 50) * MICRO_TO_SEC; - const minDuration = minPercentile ? +minPercentile * MICRO_TO_SEC : 0; - const stepValues = getPLDChartSteps({ - maxDuration, - minDuration, - }); - - const params = mergeProjection(projection, { - body: { - size: 0, - aggs: { - durPercentiles: { - percentiles: { - field: TRANSACTION_DURATION, - percents: [50, 75, 90, 95, 99], - hdr: { - number_of_significant_value_digits: 3, - }, - }, - }, - loadDistribution: { - percentile_ranks: { - field: TRANSACTION_DURATION, - values: stepValues, - keyed: false, - hdr: { - number_of_significant_value_digits: 3, - }, - }, - }, - }, - }, - }); - - const { apmEventClient } = setup; - - const { - aggregations, - hits: { total }, - } = await apmEventClient.search('get_page_load_distribution', params); - - if (total.value === 0) { - return null; - } - - const { durPercentiles, loadDistribution } = aggregations ?? {}; - - let pageDistVals = loadDistribution?.values ?? []; - - const maxPercQuery = durPercentiles?.values['99.0'] ?? 0; - - // we assumed that page load will never exceed 50secs, if 99th percentile is - // greater then let's fetch additional 10 steps, to cover that on the chart - if (maxPercQuery > maxDuration && !maxPercentile) { - const additionalStepsPageVals = await getPercentilesDistribution({ - setup, - maxDuration: maxPercQuery, - // we pass 50sec as min to get next steps - minDuration: maxDuration, - start, - end, - }); - - pageDistVals = pageDistVals.concat(additionalStepsPageVals); - maxDuration = maxPercQuery; - } - - // calculate the diff to get actual page load on specific duration value - let pageDist = pageDistVals.map( - ({ key, value: maybeNullValue }, index: number, arr) => { - // FIXME: values from percentile* aggs can be null - const value = maybeNullValue!; - return { - x: microToSec(key), - y: index === 0 ? value : value - arr[index - 1].value!, - }; - } - ); - - pageDist = removeZeroesFromTail(pageDist); - - Object.entries(durPercentiles?.values ?? {}).forEach(([key, val]) => { - if (durPercentiles?.values?.[key]) { - durPercentiles.values[key] = microToSec(val as number); - } - }); - - return { - pageLoadDistribution: pageDist, - percentiles: durPercentiles?.values, - minDuration: microToSec(minDuration), - maxDuration: microToSec(maxDuration), - }; -} - -const getPercentilesDistribution = async ({ - setup, - minDuration, - maxDuration, - start, - end, -}: { - setup: SetupUX; - minDuration: number; - maxDuration: number; - start: number; - end: number; -}) => { - const stepValues = getPLDChartSteps({ - minDuration: minDuration + 0.5 * MICRO_TO_SEC, - maxDuration, - initStepValue: 0.5, - }); - - const projection = getRumPageLoadTransactionsProjection({ - setup, - start, - end, - }); - - const params = mergeProjection(projection, { - body: { - size: 0, - aggs: { - loadDistribution: { - percentile_ranks: { - field: TRANSACTION_DURATION, - values: stepValues, - keyed: false, - hdr: { - number_of_significant_value_digits: 3, - }, - }, - }, - }, - }, - }); - - const { apmEventClient } = setup; - - const { aggregations } = await apmEventClient.search( - 'get_page_load_distribution', - params - ); - - return aggregations?.loadDistribution.values ?? []; -}; diff --git a/x-pack/plugins/apm/server/routes/rum_client/get_pl_dist_breakdown.ts b/x-pack/plugins/apm/server/routes/rum_client/get_pl_dist_breakdown.ts deleted file mode 100644 index d6a67b57fa98f..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/get_pl_dist_breakdown.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getRumPageLoadTransactionsProjection } from '../../projections/rum_page_load_transactions'; -import { ProcessorEvent } from '../../../common/processor_event'; -import { mergeProjection } from '../../projections/util/merge_projection'; -import { SetupUX } from './route'; -import { - CLIENT_GEO_COUNTRY_ISO_CODE, - USER_AGENT_DEVICE, - USER_AGENT_NAME, - USER_AGENT_OS, - TRANSACTION_DURATION, -} from '../../../common/elasticsearch_fieldnames'; -import { - getPLDChartSteps, - MICRO_TO_SEC, - microToSec, - removeZeroesFromTail, -} from './get_page_load_distribution'; - -export const getBreakdownField = (breakdown: string) => { - switch (breakdown) { - case 'Location': - return CLIENT_GEO_COUNTRY_ISO_CODE; - case 'Device': - return USER_AGENT_DEVICE; - case 'OS': - return USER_AGENT_OS; - case 'Browser': - default: - return USER_AGENT_NAME; - } -}; - -export const getPageLoadDistBreakdown = async ({ - setup, - minPercentile, - maxPercentile, - breakdown, - urlQuery, - start, - end, -}: { - setup: SetupUX; - minPercentile: number; - maxPercentile: number; - breakdown: string; - urlQuery?: string; - start: number; - end: number; -}) => { - // convert secs to micros - const stepValues = getPLDChartSteps({ - maxDuration: (maxPercentile ? +maxPercentile : 50) * MICRO_TO_SEC, - minDuration: minPercentile ? +minPercentile * MICRO_TO_SEC : 0, - }); - - const projection = getRumPageLoadTransactionsProjection({ - setup, - urlQuery, - start, - end, - }); - - const params = mergeProjection(projection, { - apm: { - events: [ProcessorEvent.transaction], - }, - body: { - size: 0, - aggs: { - breakdowns: { - terms: { - field: getBreakdownField(breakdown), - size: 9, - }, - aggs: { - page_dist: { - percentile_ranks: { - field: TRANSACTION_DURATION, - values: stepValues, - keyed: false, - hdr: { - number_of_significant_value_digits: 3, - }, - }, - }, - }, - }, - }, - }, - }); - - const { apmEventClient } = setup; - - const { aggregations } = await apmEventClient.search( - 'get_page_load_dist_breakdown', - params - ); - - const pageDistBreakdowns = aggregations?.breakdowns.buckets; - - return pageDistBreakdowns?.map(({ key, page_dist: pageDist }) => { - let seriesData = pageDist.values?.map( - ({ key: pKey, value: maybeNullValue }, index: number, arr) => { - // FIXME: values from percentile* aggs can be null - const value = maybeNullValue!; - return { - x: microToSec(pKey), - y: index === 0 ? value : value - arr[index - 1].value!, - }; - } - ); - - // remove 0 values from tail - seriesData = removeZeroesFromTail(seriesData); - - return { - name: String(key), - data: seriesData, - }; - }); -}; diff --git a/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts b/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts deleted file mode 100644 index bbc67fef9d8e1..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/queries.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { - SearchParamsMock, - inspectSearchParams, -} from '../../utils/test_helpers'; -import { getPageLoadDistribution } from './get_page_load_distribution'; - -describe('rum client dashboard queries', () => { - let mock: SearchParamsMock; - - afterEach(() => { - mock.teardown(); - }); - - it('fetches page load distribution', async () => { - mock = await inspectSearchParams( - (setup) => - getPageLoadDistribution({ - setup, - minPercentile: '0', - maxPercentile: '99', - start: 0, - end: 50000, - }), - { uiFilters: { environment: 'staging' } } - ); - expect(mock.params).toMatchSnapshot(); - }); -}); diff --git a/x-pack/plugins/apm/server/routes/rum_client/route.ts b/x-pack/plugins/apm/server/routes/rum_client/route.ts deleted file mode 100644 index 834b71223f969..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/route.ts +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import * as t from 'io-ts'; -import { Logger } from '@kbn/core/server'; -import { setupRequest, Setup } from '../../lib/helpers/setup_request'; -import { getPageLoadDistribution } from './get_page_load_distribution'; -import { getPageLoadDistBreakdown } from './get_pl_dist_breakdown'; -import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; -import { rangeRt } from '../default_api_types'; -import { APMRouteHandlerResources } from '../typings'; -import { UxUIFilters } from '../../../common/ux_ui_filter'; - -export type SetupUX = Setup & { - uiFilters: UxUIFilters; -}; - -interface SetupRequestParams { - query: { - _inspect?: boolean; - - /** - * Timestamp in ms since epoch - */ - start?: number; - - /** - * Timestamp in ms since epoch - */ - end?: number; - }; -} - -type SetupUXRequestParams = Omit & { - query: SetupRequestParams['query'] & { - uiFilters?: string; - }; -}; - -export const percentileRangeRt = t.partial({ - minPercentile: t.string, - maxPercentile: t.string, -}); - -const uiFiltersRt = t.type({ uiFilters: t.string }); - -const uxQueryRt = t.intersection([ - uiFiltersRt, - rangeRt, - t.partial({ urlQuery: t.string, percentile: t.string }), -]); - -const rumPageLoadDistributionRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/ux/page-load-distribution', - params: t.type({ - query: t.intersection([uxQueryRt, percentileRangeRt]), - }), - options: { tags: ['access:apm'] }, - handler: async ( - resources - ): Promise<{ - pageLoadDistribution: { - pageLoadDistribution: Array<{ x: number; y: number }>; - percentiles: Record | undefined; - minDuration: number; - maxDuration: number; - } | null; - }> => { - const setup = await setupUXRequest(resources); - - const { - query: { minPercentile, maxPercentile, urlQuery, start, end }, - } = resources.params; - - const pageLoadDistribution = await getPageLoadDistribution({ - setup, - minPercentile, - maxPercentile, - urlQuery, - start, - end, - }); - - return { pageLoadDistribution }; - }, -}); - -const rumPageLoadDistBreakdownRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/ux/page-load-distribution/breakdown', - params: t.type({ - query: t.intersection([ - uxQueryRt, - percentileRangeRt, - t.type({ breakdown: t.string }), - ]), - }), - options: { tags: ['access:apm'] }, - handler: async ( - resources - ): Promise<{ - pageLoadDistBreakdown: - | Array<{ name: string; data: Array<{ x: number; y: number }> }> - | undefined; - }> => { - const setup = await setupUXRequest(resources); - - const { - query: { minPercentile, maxPercentile, breakdown, urlQuery, start, end }, - } = resources.params; - - const pageLoadDistBreakdown = await getPageLoadDistBreakdown({ - setup, - minPercentile: Number(minPercentile), - maxPercentile: Number(maxPercentile), - breakdown, - urlQuery, - start, - end, - }); - - return { pageLoadDistBreakdown }; - }, -}); - -function decodeUiFilters( - logger: Logger, - uiFiltersEncoded?: string -): UxUIFilters { - if (!uiFiltersEncoded) { - return {}; - } - try { - return JSON.parse(uiFiltersEncoded); - } catch (error) { - logger.error(error); - return {}; - } -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -async function setupUXRequest( - resources: APMRouteHandlerResources & { params: TParams } -) { - const setup = await setupRequest(resources); - return { - ...setup, - uiFilters: decodeUiFilters( - resources.logger, - resources.params.query.uiFilters - ), - }; -} - -export const rumRouteRepository = { - ...rumPageLoadDistributionRoute, - ...rumPageLoadDistBreakdownRoute, -}; diff --git a/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.test.ts b/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.test.ts deleted file mode 100644 index ba5e318a1901b..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getEsFilter } from './get_es_filter'; - -describe('getEfFilters', function () { - it('should return environment in include filters', function () { - const result = getEsFilter({ - browser: ['Chrome'], - environment: 'production', - }); - - expect(result).toEqual([ - { terms: { 'user_agent.name': ['Chrome'] } }, - { term: { 'service.environment': 'production' } }, - ]); - }); - - it('should not return environment in exclude filters', function () { - const result = getEsFilter( - { browserExcluded: ['Chrome'], environment: 'production' }, - true - ); - - expect(result).toEqual([{ terms: { 'user_agent.name': ['Chrome'] } }]); - }); -}); diff --git a/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.ts b/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.ts deleted file mode 100644 index 8d759140fc659..0000000000000 --- a/x-pack/plugins/apm/server/routes/rum_client/ui_filters/get_es_filter.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { ESFilter } from '@kbn/core/types/elasticsearch'; -import { environmentQuery } from '../../../../common/utils/environment_query'; -import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; -import { - uxLocalUIFilterNames, - uxLocalUIFilters, - UxUIFilters, -} from '../../../../common/ux_ui_filter'; - -export function getEsFilter(uiFilters: UxUIFilters, exclude?: boolean) { - const localFilterValues = uiFilters; - const mappedFilters = uxLocalUIFilterNames - .filter((name) => { - const validFilter = name in localFilterValues; - if (exclude) { - return name.includes('Excluded') && validFilter; - } - return !name.includes('Excluded') && validFilter; - }) - .map((filterName) => { - const field = uxLocalUIFilters[filterName]; - const value = localFilterValues[filterName]; - - return { - terms: { - [field.fieldName]: value, - }, - }; - }) as ESFilter[]; - - return [ - ...mappedFilters, - ...(exclude - ? [] - : environmentQuery(uiFilters.environment || ENVIRONMENT_ALL.value)), - ]; -} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f112c4f1e4a05..7e5bc44c176e4 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -31681,7 +31681,6 @@ "xpack.ux.overview.beatsCard.title": "Ajouter les données RUM", "xpack.ux.overview.heading": "Tableau de bord", "xpack.ux.overview.solutionName": "Observabilité", - "xpack.ux.pageViews.analyze": "Analyser", "xpack.ux.percentile.50thMedian": "50e (médiane)", "xpack.ux.percentile.75th": "75e", "xpack.ux.percentile.90th": "90e", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fb1c3e8bbbf6f..f117b7db3c568 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -31664,7 +31664,6 @@ "xpack.ux.overview.beatsCard.title": "RUMデータを追加", "xpack.ux.overview.heading": "ダッシュボード", "xpack.ux.overview.solutionName": "Observability", - "xpack.ux.pageViews.analyze": "分析", "xpack.ux.percentile.50thMedian": "50 番目(中央値)", "xpack.ux.percentile.75th": "75番目", "xpack.ux.percentile.90th": "90番目", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 566e86eb04ac1..ed52200cf059e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -31694,7 +31694,6 @@ "xpack.ux.overview.beatsCard.title": "添加 RUM 数据", "xpack.ux.overview.heading": "仪表板", "xpack.ux.overview.solutionName": "Observability", - "xpack.ux.pageViews.analyze": "分析", "xpack.ux.percentile.50thMedian": "第 50 个(中值)", "xpack.ux.percentile.75th": "第 75 个", "xpack.ux.percentile.90th": "第 90 个", diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_load_dist_chart.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_load_dist_chart.tsx index 7d96b8f7e2fc1..d0d66c28ee9c2 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_load_dist_chart.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_load_dist_chart.tsx @@ -5,148 +5,55 @@ * 2.0. */ -import React, { useState } from 'react'; -import numeral from '@elastic/numeral'; -import { - Axis, - BrushEndListener, - XYBrushEvent, - Chart, - CurveType, - LineSeries, - ScaleType, - Settings, - TooltipValue, - TooltipValueFormatter, - DARK_THEME, - LIGHT_THEME, - Fit, - Position, -} from '@elastic/charts'; -import { - EUI_CHARTS_THEME_DARK, - EUI_CHARTS_THEME_LIGHT, -} from '@elastic/eui/dist/eui_charts_theme'; -import styled from 'styled-components'; -import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; -import { PercentileAnnotations } from '../page_load_distribution/percentile_annotations'; -import { I18LABELS } from '../translations'; -import { ChartWrapper } from '../chart_wrapper'; -import { BreakdownSeries } from '../page_load_distribution/breakdown_series'; +import React from 'react'; +import { AllSeries } from '@kbn/observability-plugin/public'; +import { useExpViewAttributes } from './use_exp_view_attrs'; import { BreakdownItem } from '../../../../../typings/ui_filters'; -import { PercentileRange } from '../page_load_distribution/types'; - -interface PageLoadData { - pageLoadDistribution: Array<{ x: number; y: number }>; - percentiles: Record | undefined; - minDuration: number; - maxDuration: number; -} +import { useDataView } from '../local_uifilters/use_data_view'; +import { useKibanaServices } from '../../../../hooks/use_kibana_services'; +import { TRANSACTION_DURATION } from '../../../../../common/elasticsearch_fieldnames'; interface Props { - onPercentileChange: (min: number, max: number) => void; - data?: PageLoadData | null; breakdown: BreakdownItem | null; - percentileRange: PercentileRange; - loading: boolean; + onPercentileChange: (min: number, max: number) => void; } -const PageLoadChart = styled(Chart)` - .echAnnotation { - pointer-events: initial; - } -`; +export function PageLoadDistChart({ onPercentileChange, breakdown }: Props) { + const { dataViewTitle } = useDataView(); + + const kibana = useKibanaServices(); + const { ExploratoryViewEmbeddable } = kibana.observability!; -export function PageLoadDistChart({ - onPercentileChange, - data, - breakdown, - loading, - percentileRange, -}: Props) { - const [breakdownLoading, setBreakdownLoading] = useState(false); - const onBrushEnd = ({ x }: XYBrushEvent) => { - if (!x) { + const onBrushEnd = ({ range }: { range: number[] }) => { + if (!range) { return; } - const [minX, maxX] = x; + const [minX, maxX] = range; onPercentileChange(minX, maxX); }; - const headerFormatter: TooltipValueFormatter = (tooltip: TooltipValue) => { - return ( -
-

- {tooltip.value} {I18LABELS.seconds} -

-
- ); - }; - - const tooltipProps = { - headerFormatter, - }; - - const [darkMode] = useUiSetting$('theme:darkMode'); + const { reportDefinitions, time } = useExpViewAttributes(); - const euiChartTheme = darkMode - ? EUI_CHARTS_THEME_DARK - : EUI_CHARTS_THEME_LIGHT; + const allSeries: AllSeries = [ + { + time, + reportDefinitions, + dataType: 'ux', + name: 'page-load-distribution', + selectedMetricField: TRANSACTION_DURATION, + breakdown: breakdown?.fieldName, + }, + ]; return ( - - {(!loading || data) && ( - - - - - d + ' %'} - /> - numeral(d).format('0.0') + ' %'} - /> - {breakdown && ( - { - setBreakdownLoading(bLoading); - }} - /> - )} - - )} - + ); } diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_views_chart.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_views_chart.tsx index 2d763013157fb..4f8d0d4d2a06c 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_views_chart.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/page_views_chart.tsx @@ -9,7 +9,6 @@ import moment from 'moment'; import React from 'react'; import { AllSeries, - ALL_VALUES_SELECTED, fromQuery, RECORDS_FIELD, toQuery, @@ -17,50 +16,32 @@ import { } from '@kbn/observability-plugin/public'; import { useHistory } from 'react-router-dom'; -import { ENVIRONMENT_ALL } from '../../../../../common/environment_filter_values'; -import { BreakdownItem, UxUIFilters } from '../../../../../typings/ui_filters'; -import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; +import { BreakdownItem } from '../../../../../typings/ui_filters'; import { useKibanaServices } from '../../../../hooks/use_kibana_services'; import { useDataView } from '../local_uifilters/use_data_view'; -import { - SERVICE_ENVIRONMENT, - SERVICE_NAME, -} from '../../../../../common/elasticsearch_fieldnames'; +import { useExpViewAttributes } from './use_exp_view_attrs'; interface Props { breakdown: BreakdownItem | null; - uiFilters: UxUIFilters; } -export function PageViewsChart({ breakdown, uiFilters }: Props) { +export function PageViewsChart({ breakdown }: Props) { const { dataViewTitle } = useDataView(); const history = useHistory(); - const { urlParams } = useLegacyUrlParams(); const kibana = useKibanaServices(); const { ExploratoryViewEmbeddable } = kibana.observability; - const { start, end } = urlParams; const theme = useTheme(); + const { reportDefinitions, time } = useExpViewAttributes(); + const allSeries: AllSeries = [ { + time, + reportDefinitions, dataType: 'ux', - time: { - from: start ?? '', - to: end ?? '', - }, name: 'ux-series-1', selectedMetricField: RECORDS_FIELD, - reportDefinitions: { - [SERVICE_ENVIRONMENT]: - !uiFilters?.environment || - uiFilters.environment === ENVIRONMENT_ALL.value - ? [ALL_VALUES_SELECTED] - : [uiFilters.environment], - [SERVICE_NAME]: urlParams.serviceName - ? [urlParams.serviceName] - : [ALL_VALUES_SELECTED], - }, breakdown: breakdown?.fieldName, color: theme.eui.euiColorVis1, }, @@ -93,6 +74,7 @@ export function PageViewsChart({ breakdown, uiFilters }: Props) { dataTypesIndexPatterns={{ ux: dataViewTitle }} isSingleMetric={true} axisTitlesVisibility={{ x: false, yRight: true, yLeft: true }} + legendIsVisible={Boolean(breakdown)} /> ); } diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/use_exp_view_attrs.ts b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/use_exp_view_attrs.ts new file mode 100644 index 0000000000000..fb8eb5a0564e1 --- /dev/null +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/charts/use_exp_view_attrs.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALL_VALUES_SELECTED } from '@kbn/observability-plugin/public'; +import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; +import { + SERVICE_ENVIRONMENT, + SERVICE_NAME, +} from '../../../../../common/elasticsearch_fieldnames'; +import { ENVIRONMENT_ALL } from '../../../../../common/environment_filter_values'; + +export const useExpViewAttributes = () => { + const { urlParams, uxUiFilters } = useLegacyUrlParams(); + + const { start, end } = urlParams; + + const reportDefinitions = { + [SERVICE_ENVIRONMENT]: + !uxUiFilters?.environment || + uxUiFilters.environment === ENVIRONMENT_ALL.value + ? [ALL_VALUES_SELECTED] + : [uxUiFilters.environment], + [SERVICE_NAME]: uxUiFilters?.serviceName ?? [ALL_VALUES_SELECTED], + }; + + return { + reportDefinitions, + time: { + from: start ?? '', + to: end ?? '', + }, + }; +}; diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/breakdown_series.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/breakdown_series.tsx deleted file mode 100644 index 0bd86a52c6e49..0000000000000 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/breakdown_series.tsx +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { CurveType, Fit, LineSeries, ScaleType } from '@elastic/charts'; -import React, { useEffect } from 'react'; -import numeral from '@elastic/numeral'; -import { - EUI_CHARTS_THEME_DARK, - EUI_CHARTS_THEME_LIGHT, -} from '@elastic/eui/dist/eui_charts_theme'; -import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; -import { PercentileRange } from './types'; -import { useBreakdowns } from './use_breakdowns'; - -interface Props { - field: string; - value: string; - percentileRange: PercentileRange; - onLoadingChange: (loading: boolean) => void; -} - -export function BreakdownSeries({ - field, - value, - percentileRange, - onLoadingChange, -}: Props) { - const [darkMode] = useUiSetting$('theme:darkMode'); - - const euiChartTheme = darkMode - ? EUI_CHARTS_THEME_DARK - : EUI_CHARTS_THEME_LIGHT; - - const { breakdowns, status } = useBreakdowns({ - field, - value, - percentileRange, - }); - - useEffect(() => { - onLoadingChange(status !== 'success'); - }, [status, onLoadingChange]); - - // sort index 1 color vizColors1 is already used for overall, - // so don't user that here - return ( - <> - {breakdowns.map(({ data: seriesData, name }, sortIndex) => ( - numeral(d).format('0.0') + ' %'} - /> - ))} - - ); -} diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/index.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/index.tsx index 65487aaf66bf5..4ff4b47293cb3 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/index.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/index.tsx @@ -6,34 +6,15 @@ */ import React, { useState } from 'react'; -import { - EuiButton, - EuiFlexGroup, - EuiFlexItem, - EuiSpacer, - EuiTitle, -} from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { createExploratoryViewUrl } from '@kbn/observability-plugin/public'; -import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; -import { useFetcher } from '../../../../hooks/use_fetcher'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; import { I18LABELS } from '../translations'; import { BreakdownFilter } from '../breakdowns/breakdown_filter'; import { PageLoadDistChart } from '../charts/page_load_dist_chart'; import { ResetPercentileZoom } from './reset_percentile_zoom'; -import { useKibanaServices } from '../../../../hooks/use_kibana_services'; import { BreakdownItem } from '../../../../../typings/ui_filters'; import { PercentileRange } from './types'; export function PageLoadDistribution() { - const { http } = useKibanaServices(); - - const { rangeId, urlParams, uxUiFilters } = useLegacyUrlParams(); - - const { start, end, rangeFrom, rangeTo, searchTerm } = urlParams; - - const { serviceName } = uxUiFilters; - const [percentileRange, setPercentileRange] = useState({ min: null, max: null, @@ -41,66 +22,10 @@ export function PageLoadDistribution() { const [breakdown, setBreakdown] = useState(null); - const { data, status } = useFetcher( - (callApmApi) => { - if (start && end && serviceName) { - return callApmApi('GET /internal/apm/ux/page-load-distribution', { - params: { - query: { - start, - end, - uiFilters: JSON.stringify(uxUiFilters), - urlQuery: searchTerm, - ...(percentileRange.min && percentileRange.max - ? { - minPercentile: String(percentileRange.min), - maxPercentile: String(percentileRange.max), - } - : {}), - }, - }, - }); - } - return Promise.resolve(null); - }, - // `rangeId` acts as a cache buster for stable ranges like "Today" - // eslint-disable-next-line react-hooks/exhaustive-deps - [ - end, - start, - uxUiFilters, - percentileRange.min, - percentileRange.max, - searchTerm, - serviceName, - rangeId, - ] - ); - const onPercentileChange = (min: number, max: number) => { setPercentileRange({ min, max }); }; - const exploratoryViewLink = createExploratoryViewUrl( - { - reportType: 'kpi-over-time', - allSeries: [ - { - name: `${serviceName}-page-views`, - dataType: 'ux', - time: { from: rangeFrom!, to: rangeTo! }, - reportDefinitions: { - 'service.name': serviceName as string[], - }, - ...(breakdown ? { breakdown: breakdown.fieldName } : {}), - }, - ], - }, - http.basePath.get() - ); - - const showAnalyzeButton = false; - return (
@@ -120,31 +45,10 @@ export function PageLoadDistribution() { dataTestSubj={'pldBreakdownFilter'} /> - {showAnalyzeButton && ( - - - - - - )} -
); diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/use_breakdowns.ts b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/use_breakdowns.ts deleted file mode 100644 index ffe794ddceaee..0000000000000 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_load_distribution/use_breakdowns.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useFetcher } from '../../../../hooks/use_fetcher'; -import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; -import { PercentileRange } from './types'; - -interface Props { - percentileRange?: PercentileRange; - field: string; - value: string; -} - -export const useBreakdowns = ({ percentileRange, field, value }: Props) => { - const { urlParams, uxUiFilters } = useLegacyUrlParams(); - const { start, end, searchTerm } = urlParams; - const { min: minP, max: maxP } = percentileRange ?? {}; - - const { data, status } = useFetcher( - (callApmApi) => { - if (start && end && field && value) { - return callApmApi( - 'GET /internal/apm/ux/page-load-distribution/breakdown', - { - params: { - query: { - start, - end, - breakdown: value, - uiFilters: JSON.stringify(uxUiFilters), - urlQuery: searchTerm, - ...(minP && maxP - ? { - minPercentile: String(minP), - maxPercentile: String(maxP), - } - : {}), - }, - }, - } - ); - } - }, - [end, start, uxUiFilters, field, value, minP, maxP, searchTerm] - ); - - return { breakdowns: data?.pageLoadDistBreakdown ?? [], status }; -}; diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_views_trend/index.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_views_trend/index.tsx index 733fbcf935c25..173865dc9ace0 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/page_views_trend/index.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/page_views_trend/index.tsx @@ -7,15 +7,12 @@ import React, { useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; -import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; import { I18LABELS } from '../translations'; import { BreakdownFilter } from '../breakdowns/breakdown_filter'; import { PageViewsChart } from '../charts/page_views_chart'; import { BreakdownItem } from '../../../../../typings/ui_filters'; export function PageViewsTrend() { - const { uxUiFilters } = useLegacyUrlParams(); - const [breakdown, setBreakdown] = useState(null); return ( @@ -34,7 +31,7 @@ export function PageViewsTrend() { />
- +
); } diff --git a/x-pack/plugins/ux/public/components/app/rum_dashboard/panels/page_load_and_views.tsx b/x-pack/plugins/ux/public/components/app/rum_dashboard/panels/page_load_and_views.tsx index 0a4deee67786b..ef834227efbe8 100644 --- a/x-pack/plugins/ux/public/components/app/rum_dashboard/panels/page_load_and_views.tsx +++ b/x-pack/plugins/ux/public/components/app/rum_dashboard/panels/page_load_and_views.tsx @@ -14,7 +14,7 @@ export function PageLoadAndViews() { return ( - + From b3011ba4e561aa4c633a620fbde6e523a43ebda2 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 13 Jul 2022 21:57:11 +0200 Subject: [PATCH 27/96] [Fleet] Add a is_managed field to package policy (#136183) --- .../routes/benchmarks/benchmarks.test.ts | 1 - .../fleet/common/types/models/agent_policy.ts | 1 + .../common/types/models/package_policy.ts | 1 + .../steps/step_define_package_policy.tsx | 468 +++++++++--------- .../components/context_menu_actions.tsx | 39 +- .../package_policy_actions_menu.tsx | 3 + x-pack/plugins/fleet/server/errors/index.ts | 7 + .../fleet/server/saved_objects/index.ts | 1 + .../fleet/server/services/package_policy.ts | 16 +- ...nthetics_policy_edit_extension_wrapper.tsx | 25 + 10 files changed, 323 insertions(+), 239 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts index 55dfcd2fa259a..9f66386eb4144 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts @@ -356,7 +356,6 @@ describe('benchmarks API', () => { it('should build benchmark entry agent policy and package policy', async () => { const packagePolicy = createPackagePolicyMock(); const agentPolicy = createMockAgentPolicy(); - // @ts-expect-error agentPolicy.agents = 3; const cspRulesStatus = { diff --git a/x-pack/plugins/fleet/common/types/models/agent_policy.ts b/x-pack/plugins/fleet/common/types/models/agent_policy.ts index a7b24911d8306..40a6c8cdb9b48 100644 --- a/x-pack/plugins/fleet/common/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/agent_policy.ts @@ -39,6 +39,7 @@ export interface AgentPolicy extends Omit { updated_at: string; updated_by: string; revision: number; + agents?: number; } export type AgentPolicySOAttributes = Omit; diff --git a/x-pack/plugins/fleet/common/types/models/package_policy.ts b/x-pack/plugins/fleet/common/types/models/package_policy.ts index c865d7ba8a9e7..047bd9a403d9d 100644 --- a/x-pack/plugins/fleet/common/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/package_policy.ts @@ -63,6 +63,7 @@ export interface NewPackagePolicy { description?: string; namespace: string; enabled: boolean; + is_managed?: boolean; policy_id: string; output_id: string; package?: PackagePolicyPackage; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx index 634c173a01111..77b69651143f9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx @@ -18,6 +18,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiLink, + EuiCallOut, } from '@elastic/eui'; import styled from 'styled-components'; @@ -159,255 +160,272 @@ export const StepDefinePackagePolicy: React.FunctionComponent<{ isLoadingPackagePolicies, ]); + const isManaged = packagePolicy.is_managed; + return validationResults ? ( - - - - } - description={ - + {isManaged && ( + + } + iconType="lock" /> - } - > - - {/* Name */} - - - } - > - - updatePackagePolicy({ - name: e.target.value, - }) - } - data-test-subj="packagePolicyNameInput" + )} + + - - - - {/* Description */} - - - } - labelAppend={ - + + } + description={ + + } + > + + {/* Name */} + + - - } - isInvalid={!!validationResults.description} - error={validationResults.description} - > - - updatePackagePolicy({ - description: e.target.value, - }) } - data-test-subj="packagePolicyDescriptionInput" - /> - - - - {/* Required vars */} - {requiredVars.map((varDef) => { - const { name: varName, type: varType } = varDef; - if (!packagePolicy.vars || !packagePolicy.vars[varName]) return null; - const value = packagePolicy.vars[varName].value; - - return ( - - { + > + updatePackagePolicy({ - vars: { - ...packagePolicy.vars, - [varName]: { - type: varType, - value: newValue, - }, - }, - }); - }} - errors={validationResults.vars![varName]} - forceShowErrors={submitAttempted} + name: e.target.value, + }) + } + data-test-subj="packagePolicyNameInput" /> - - ); - })} + + - {/* Advanced options toggle */} - {!noAdvancedToggle && ( + {/* Description */} - - - setIsShowingAdvanced(!isShowingAdvanced)} - flush="left" - > + + } + labelAppend={ + - + + } + isInvalid={!!validationResults.description} + error={validationResults.description} + > + + updatePackagePolicy({ + description: e.target.value, + }) + } + data-test-subj="packagePolicyDescriptionInput" + /> + + + + {/* Required vars */} + {requiredVars.map((varDef) => { + const { name: varName, type: varType } = varDef; + if (!packagePolicy.vars || !packagePolicy.vars[varName]) return null; + const value = packagePolicy.vars[varName].value; + + return ( + + { + updatePackagePolicy({ + vars: { + ...packagePolicy.vars, + [varName]: { + type: varType, + value: newValue, + }, + }, + }); + }} + errors={validationResults.vars![varName]} + forceShowErrors={submitAttempted} + /> - {!isShowingAdvanced && !!validationResults.namespace ? ( + ); + })} + + {/* Advanced options toggle */} + {!noAdvancedToggle && !isManaged && ( + + - + setIsShowingAdvanced(!isShowingAdvanced)} + flush="left" + > - + - ) : null} - - - )} + {!isShowingAdvanced && !!validationResults.namespace ? ( + + + + + + ) : null} + + + )} - {/* Advanced options content */} - {/* Todo: Populate list of existing namespaces */} - {isShowingAdvanced ? ( - - - - - } - helpText={ - - {i18n.translate( - 'xpack.fleet.createPackagePolicy.stepConfigure.packagePolicyNamespaceHelpLearnMoreLabel', - { defaultMessage: 'Learn more' } - )} - - ), - }} - /> - } - > - + + + } - onCreateOption={(newNamespace: string) => { - updatePackagePolicy({ - namespace: newNamespace, - }); - }} - onChange={(newNamespaces: Array<{ label: string }>) => { - updatePackagePolicy({ - namespace: newNamespaces.length ? newNamespaces[0].label : '', - }); - }} - /> - - - - - } - helpText={ - - {i18n.translate( - 'xpack.fleet.createPackagePolicy.stepConfigure.packagePolicyDataRetentionLearnMoreLink', - { defaultMessage: 'Learn more' } - )} - - ), + helpText={ + + {i18n.translate( + 'xpack.fleet.createPackagePolicy.stepConfigure.packagePolicyNamespaceHelpLearnMoreLabel', + { defaultMessage: 'Learn more' } + )} + + ), + }} + /> + } + > + { + updatePackagePolicy({ + namespace: newNamespace, + }); }} - /> - } - > - )} diff --git a/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.test.ts b/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.test.ts new file mode 100644 index 0000000000000..bc1c489cd77a0 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.test.ts @@ -0,0 +1,153 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getUniqGeoOrStrExamples } from './example_utils'; + +describe('example utils', () => { + describe('getUniqGeoOrStrExamples', () => { + test('should remove duplicated strings up to maxExamples', () => { + expect( + getUniqGeoOrStrExamples( + [ + 'deb', + '', + 'css', + 'deb', + '', + '', + 'deb', + 'gz', + '', + 'gz', + '', + 'deb', + 'gz', + 'deb', + '', + 'deb', + 'deb', + '', + 'gz', + 'gz', + ], + 20 + ) + ).toMatchObject(['deb', '', 'css', 'gz']); + expect( + getUniqGeoOrStrExamples( + [ + 'deb', + '', + 'css', + 'deb', + '', + '', + 'deb', + 'gz', + '', + 'gz', + '', + 'deb', + 'gz', + 'deb', + '', + 'deb', + 'deb', + '', + 'gz', + 'gz', + ], + 2 + ) + ).toMatchObject(['deb', '']); + }); + + test('should remove duplicated coordinates up to maxExamples', () => { + expect( + getUniqGeoOrStrExamples([ + { coordinates: [0.1, 2343], type: 'Point' }, + { coordinates: [0.1, 2343], type: 'Point' }, + { coordinates: [0.1, 2343], type: 'Point' }, + { coordinates: [0.1, 2343], type: 'Shape' }, + { coordinates: [0.1, 2343] }, + { coordinates: [4321, 2343], type: 'Point' }, + { coordinates: [4321, 2343], type: 'Point' }, + ]) + ).toMatchObject([ + { + coordinates: [0.1, 2343], + type: 'Point', + }, + { + coordinates: [0.1, 2343], + type: 'Shape', + }, + { + coordinates: [0.1, 2343], + }, + { + coordinates: [4321, 2343], + type: 'Point', + }, + ]); + expect( + getUniqGeoOrStrExamples([ + { coordinates: [1, 2, 3], type: 'Point' }, + { coordinates: [1, 2, 3], type: 'Point' }, + { coordinates: [1, 2, 3], type: 'Point' }, + { coordinates: [1, 2, 3, 4], type: 'Shape' }, + { coordinates: [1, 2, 3, 4] }, + ]) + ).toMatchObject([ + { + coordinates: [1, 2, 3], + type: 'Point', + }, + { coordinates: [1, 2, 3, 4], type: 'Shape' }, + { coordinates: [1, 2, 3, 4] }, + ]); + }); + + test('should remove duplicated lon/lat coordinates up to maxExamples', () => { + expect( + getUniqGeoOrStrExamples([ + { lon: 0.1, lat: 2343 }, + { lon: 0.1, lat: 2343 }, + { lon: 0.1, lat: 2343 }, + { lon: 0.1, lat: 2343 }, + { lon: 0.1, lat: 2343 }, + { lon: 4321, lat: 2343 }, + { lon: 4321, lat: 2343 }, + ]) + ).toMatchObject([ + { lon: 0.1, lat: 2343 }, + { lon: 4321, lat: 2343 }, + ]); + expect( + getUniqGeoOrStrExamples( + [ + { lon: 1, lat: 2 }, + { lon: 1, lat: 2 }, + { lon: 2, lat: 3 }, + { lon: 2, lat: 3 }, + { lon: 3, lat: 4 }, + { lon: 3, lat: 4 }, + { lon: 4, lat: 5 }, + { lon: 4, lat: 5 }, + { lon: 5, lat: 6 }, + { lon: 5, lat: 6 }, + ], + 3 + ) + ).toMatchObject([ + { lon: 1, lat: 2 }, + { lon: 2, lat: 3 }, + { lon: 3, lat: 4 }, + ]); + }); + }); +}); diff --git a/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.ts b/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.ts new file mode 100644 index 0000000000000..cc4a9a3ca9bfa --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/common/util/example_utils.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { isDefined } from './is_defined'; +import { GeoPointExample, LatLongExample } from '../../../../common/types/field_request_config'; + +export function isGeoPointExample(arg: unknown): arg is GeoPointExample { + return isPopulatedObject(arg, ['coordinates']) && Array.isArray(arg.coordinates); +} + +export function isLonLatExample(arg: unknown): arg is LatLongExample { + return isPopulatedObject(arg, ['lon', 'lat']); +} + +export function getUniqGeoOrStrExamples( + examples: Array | undefined, + maxExamples = 10 +): Array { + const uniqueCoordinates: Array = []; + if (!isDefined(examples)) return uniqueCoordinates; + for (let i = 0; i < examples.length; i++) { + const example = examples[i]; + if (typeof example === 'string' && uniqueCoordinates.indexOf(example) === -1) { + uniqueCoordinates.push(example); + } else { + if ( + isGeoPointExample(example) && + uniqueCoordinates.findIndex( + (c) => + isGeoPointExample(c) && + c.type === example.type && + example.coordinates.every((coord, idx) => coord === c.coordinates[idx]) + ) === -1 + ) { + uniqueCoordinates.push(example); + } + + if ( + isLonLatExample(example) && + uniqueCoordinates.findIndex( + (c) => isLonLatExample(c) && example.lon === c.lon && example.lat === c.lat + ) === -1 + ) { + uniqueCoordinates.push(example); + } + } + if (uniqueCoordinates.length === maxExamples) { + return uniqueCoordinates; + } + } + + return uniqueCoordinates; +} diff --git a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.test.ts b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.test.ts index 8f9e4ffd3b898..0f3ae62eae209 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.test.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.test.ts @@ -5,24 +5,26 @@ * 2.0. */ -import { JOB_FIELD_TYPES } from '../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../common/constants'; import { getJobTypeLabel, jobTypeLabels } from './field_types_utils'; describe('field type utils', () => { describe('getJobTypeLabel: Getting a field type aria label by passing what it is stored in constants', () => { - test('should returns all JOB_FIELD_TYPES labels exactly as it is for each correct value', () => { - const keys = Object.keys(JOB_FIELD_TYPES); + test('should returns all SUPPORTED_FIELD_TYPES labels exactly as it is for each correct value', () => { + const keys = Object.keys(SUPPORTED_FIELD_TYPES); const receivedLabels: Record = {}; const testStorage = jobTypeLabels; keys.forEach((key) => { - const constant = key as keyof typeof JOB_FIELD_TYPES; - receivedLabels[JOB_FIELD_TYPES[constant]] = getJobTypeLabel(JOB_FIELD_TYPES[constant]); + const constant = key as keyof typeof SUPPORTED_FIELD_TYPES; + receivedLabels[SUPPORTED_FIELD_TYPES[constant]] = getJobTypeLabel( + SUPPORTED_FIELD_TYPES[constant] + ); }); expect(receivedLabels).toEqual(testStorage); }); - test('should returns NULL as JOB_FIELD_TYPES does not contain such a keyword', () => { - expect(getJobTypeLabel('JOB_FIELD_TYPES')).toBe(null); + test('should returns NULL as SUPPORTED_FIELD_TYPES does not contain such a keyword', () => { + expect(getJobTypeLabel('SUPPORTED_FIELD_TYPES')).toBe(null); }); }); }); diff --git a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts index d9617ae61e2ec..5d1293f0a22b3 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/util/field_types_utils.ts @@ -8,52 +8,70 @@ import { i18n } from '@kbn/i18n'; import { DataViewField } from '@kbn/data-views-plugin/public'; import { KBN_FIELD_TYPES } from '@kbn/data-plugin/common'; -import { JOB_FIELD_TYPES } from '../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../common/constants'; export const getJobTypeLabel = (type: string) => { return type in jobTypeLabels ? jobTypeLabels[type as keyof typeof jobTypeLabels] : null; }; export const jobTypeLabels = { - [JOB_FIELD_TYPES.BOOLEAN]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.booleanTypeLabel', { - defaultMessage: 'Boolean', - }), - [JOB_FIELD_TYPES.DATE]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.dateTypeLabel', { + [SUPPORTED_FIELD_TYPES.BOOLEAN]: i18n.translate( + 'xpack.dataVisualizer.fieldTypeIcon.booleanTypeLabel', + { + defaultMessage: 'Boolean', + } + ), + [SUPPORTED_FIELD_TYPES.DATE]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.dateTypeLabel', { defaultMessage: 'Date', }), - [JOB_FIELD_TYPES.GEO_POINT]: i18n.translate( + [SUPPORTED_FIELD_TYPES.GEO_POINT]: i18n.translate( 'xpack.dataVisualizer.fieldTypeIcon.geoPointTypeLabel', { defaultMessage: 'Geo point', } ), - [JOB_FIELD_TYPES.GEO_SHAPE]: i18n.translate( + [SUPPORTED_FIELD_TYPES.GEO_SHAPE]: i18n.translate( 'xpack.dataVisualizer.fieldTypeIcon.geoShapeTypeLabel', { defaultMessage: 'Geo shape', } ), - [JOB_FIELD_TYPES.IP]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.ipTypeLabel', { + [SUPPORTED_FIELD_TYPES.IP]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.ipTypeLabel', { defaultMessage: 'IP', }), - [JOB_FIELD_TYPES.KEYWORD]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.keywordTypeLabel', { - defaultMessage: 'Keyword', - }), - [JOB_FIELD_TYPES.NUMBER]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.numberTypeLabel', { - defaultMessage: 'Number', - }), - [JOB_FIELD_TYPES.HISTOGRAM]: i18n.translate( + [SUPPORTED_FIELD_TYPES.KEYWORD]: i18n.translate( + 'xpack.dataVisualizer.fieldTypeIcon.keywordTypeLabel', + { + defaultMessage: 'Keyword', + } + ), + [SUPPORTED_FIELD_TYPES.NUMBER]: i18n.translate( + 'xpack.dataVisualizer.fieldTypeIcon.numberTypeLabel', + { + defaultMessage: 'Number', + } + ), + [SUPPORTED_FIELD_TYPES.HISTOGRAM]: i18n.translate( 'xpack.dataVisualizer.fieldTypeIcon.histogramTypeLabel', { defaultMessage: 'Histogram', } ), - [JOB_FIELD_TYPES.TEXT]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.textTypeLabel', { + [SUPPORTED_FIELD_TYPES.TEXT]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.textTypeLabel', { defaultMessage: 'Text', }), - [JOB_FIELD_TYPES.UNKNOWN]: i18n.translate('xpack.dataVisualizer.fieldTypeIcon.unknownTypeLabel', { - defaultMessage: 'Unknown', - }), + [SUPPORTED_FIELD_TYPES.UNKNOWN]: i18n.translate( + 'xpack.dataVisualizer.fieldTypeIcon.unknownTypeLabel', + { + defaultMessage: 'Unknown', + } + ), + [SUPPORTED_FIELD_TYPES.VERSION]: i18n.translate( + 'xpack.dataVisualizer.fieldTypeIcon.versionTypeLabel', + { + defaultMessage: 'Version', + } + ), }; // convert kibana types to ML Job types @@ -62,30 +80,35 @@ export const jobTypeLabels = { export function kbnTypeToJobType(field: DataViewField) { // Return undefined if not one of the supported data visualizer field types. let type; + switch (field.type) { case KBN_FIELD_TYPES.STRING: - type = field.aggregatable ? JOB_FIELD_TYPES.KEYWORD : JOB_FIELD_TYPES.TEXT; + type = field.aggregatable ? SUPPORTED_FIELD_TYPES.KEYWORD : SUPPORTED_FIELD_TYPES.TEXT; + + if (field.esTypes?.includes(SUPPORTED_FIELD_TYPES.VERSION)) { + type = SUPPORTED_FIELD_TYPES.VERSION; + } break; case KBN_FIELD_TYPES.NUMBER: - type = JOB_FIELD_TYPES.NUMBER; + type = SUPPORTED_FIELD_TYPES.NUMBER; break; case KBN_FIELD_TYPES.DATE: - type = JOB_FIELD_TYPES.DATE; + type = SUPPORTED_FIELD_TYPES.DATE; break; case KBN_FIELD_TYPES.IP: - type = JOB_FIELD_TYPES.IP; + type = SUPPORTED_FIELD_TYPES.IP; break; case KBN_FIELD_TYPES.BOOLEAN: - type = JOB_FIELD_TYPES.BOOLEAN; + type = SUPPORTED_FIELD_TYPES.BOOLEAN; break; case KBN_FIELD_TYPES.GEO_POINT: - type = JOB_FIELD_TYPES.GEO_POINT; + type = SUPPORTED_FIELD_TYPES.GEO_POINT; break; case KBN_FIELD_TYPES.GEO_SHAPE: - type = JOB_FIELD_TYPES.GEO_SHAPE; + type = SUPPORTED_FIELD_TYPES.GEO_SHAPE; break; case KBN_FIELD_TYPES.HISTOGRAM: - type = JOB_FIELD_TYPES.HISTOGRAM; + type = SUPPORTED_FIELD_TYPES.HISTOGRAM; break; default: diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index 0b4103687bbde..079804a47cd7b 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -399,7 +399,7 @@ export const IndexDataVisualizerView: FC = (dataVi
-

{currentDataView.title}

+

{currentDataView.getName()}

{ const fieldData = nonMetricFieldData.find((f) => f.fieldName === field.spec.name); - const nonMetricConfig: Partial = { ...(fieldData ? fieldData : {}), fieldFormat: currentDataView.getFormatterForField(field), diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_field_examples.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_field_examples.ts index 0e04665256e20..dfc68e6dac9ae 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_field_examples.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_field_examples.ts @@ -15,6 +15,8 @@ import type { ISearchStart, } from '@kbn/data-plugin/public'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import type { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { getUniqGeoOrStrExamples } from '../../../common/util/example_utils'; import { buildBaseFilterCriteria } from '../../../../../common/utils/query_utils'; import type { Field, @@ -90,20 +92,11 @@ export const fetchFieldsExamples = ( if (body.hits.total > 0) { const hits = body.hits.hits; - for (let i = 0; i < hits.length; i++) { - // Use lodash get() to support field names containing dots. - const doc: object[] | undefined = get(hits[i].fields, field.fieldName); - // the results from fields query is always an array - if (Array.isArray(doc) && doc.length > 0) { - const example = doc[0]; - if (example !== undefined && stats.examples.indexOf(example) === -1) { - stats.examples.push(example); - if (stats.examples.length === maxExamples) { - break; - } - } - } - } + const processedDocs = hits.map((hit: SearchHit) => { + const doc: object[] | undefined = get(hit.fields, field.fieldName); + return Array.isArray(doc) && doc.length > 0 ? doc[0] : doc; + }); + stats.examples = getUniqGeoOrStrExamples(processedDocs, maxExamples); } return stats; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_fields_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_fields_stats.ts index 4dd0b3a7ba40a..a549e40704c0f 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_fields_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_fields_stats.ts @@ -11,7 +11,7 @@ import { ISearchStart } from '@kbn/data-plugin/public'; import type { FieldStatsCommonRequestParams } from '../../../../../common/types/field_stats'; import type { FieldStatsError } from '../../../../../common/types/field_stats'; import type { FieldStats } from '../../../../../common/types/field_stats'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; import { fetchDateFieldsStats } from './get_date_field_stats'; import { fetchBooleanFieldsStats } from './get_boolean_field_stats'; import { fetchFieldsExamples } from './get_field_examples'; @@ -31,16 +31,17 @@ export const getFieldsStats = ( ): Observable | undefined => { const fieldType = fields[0].type; switch (fieldType) { - case JOB_FIELD_TYPES.NUMBER: + case SUPPORTED_FIELD_TYPES.NUMBER: return fetchNumericFieldsStats(dataSearch, params, fields, options); - case JOB_FIELD_TYPES.KEYWORD: - case JOB_FIELD_TYPES.IP: + case SUPPORTED_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.IP: + case SUPPORTED_FIELD_TYPES.VERSION: return fetchStringFieldsStats(dataSearch, params, fields, options); - case JOB_FIELD_TYPES.DATE: + case SUPPORTED_FIELD_TYPES.DATE: return fetchDateFieldsStats(dataSearch, params, fields, options); - case JOB_FIELD_TYPES.BOOLEAN: + case SUPPORTED_FIELD_TYPES.BOOLEAN: return fetchBooleanFieldsStats(dataSearch, params, fields, options); - case JOB_FIELD_TYPES.TEXT: + case SUPPORTED_FIELD_TYPES.TEXT: return fetchFieldsExamples(dataSearch, params, fields, options); default: // Use an exists filter on the the field name to get diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index e36d4abb75a1c..780ea4fe5f40c 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10516,7 +10516,6 @@ "xpack.dataVisualizer.dataGrid.field.topValues.calculatedFromSampleDescription": "Calculé à partir d'un échantillon de {topValuesSamplerShardSize} documents par partition", "xpack.dataVisualizer.dataGrid.field.topValuesLabel": "Valeurs les plus élevées", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.falseCountLabel": "faux", - "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.summaryTableTitle": "Résumé", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.trueCountLabel": "vrai", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.choroplethMapTopValues.calculatedFromSampleDescription": "Calculé à partir d'un échantillon de {topValuesSamplerShardSize} documents par partition", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.documentStatsTable.countLabel": "compte", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index cc42d39638c58..5f076322b4917 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10508,7 +10508,6 @@ "xpack.dataVisualizer.dataGrid.field.topValues.calculatedFromSampleDescription": "1 つのシャードにつき {topValuesSamplerShardSize} のドキュメントのサンプルで計算されています", "xpack.dataVisualizer.dataGrid.field.topValuesLabel": "トップの値", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.falseCountLabel": "false", - "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.summaryTableTitle": "まとめ", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.trueCountLabel": "true", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.choroplethMapTopValues.calculatedFromSampleDescription": "1 つのシャードにつき {topValuesSamplerShardSize} のドキュメントのサンプルで計算されています", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.documentStatsTable.countLabel": "カウント", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a0848f0acf9ad..5f8dc58573275 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10523,7 +10523,6 @@ "xpack.dataVisualizer.dataGrid.field.topValues.calculatedFromSampleDescription": "基于每个分片的 {topValuesSamplerShardSize} 文档样例计算", "xpack.dataVisualizer.dataGrid.field.topValuesLabel": "排名最前值", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.falseCountLabel": "false", - "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.summaryTableTitle": "摘要", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.trueCountLabel": "true", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.choroplethMapTopValues.calculatedFromSampleDescription": "基于每个分片的 {topValuesSamplerShardSize} 文档样例计算", "xpack.dataVisualizer.dataGrid.fieldExpandedRow.documentStatsTable.countLabel": "计数", From cc6d132ee7491030ca987083cd40a553e5cf028f Mon Sep 17 00:00:00 2001 From: Candace Park <56409205+parkiino@users.noreply.github.com> Date: Thu, 14 Jul 2022 16:33:51 -0400 Subject: [PATCH 77/96] [Security Solution][Responder Console] Input area has arrow submit button (#136233) --- .../command_input/command_input.test.tsx | 26 ++++++++++++++- .../command_input/command_input.tsx | 32 ++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx index a06d6ae7c38b7..2701ebdb136b5 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx @@ -10,7 +10,7 @@ import type { ConsoleTestSetup } from '../../mocks'; import { getConsoleTestSetup } from '../../mocks'; import type { ConsoleProps } from '../../types'; import { INPUT_DEFAULT_PLACEHOLDER_TEXT } from '../console_state/state_update_handlers/handle_input_area_state'; -import { waitFor } from '@testing-library/react'; +import { act, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; describe('When entering data into the Console input', () => { @@ -92,6 +92,30 @@ describe('When entering data into the Console input', () => { expect(getFooterText()).toEqual('Unknown command abc'); }); + it('should show the arrow button as not disabled if input has text entered', () => { + render(); + enterCommand('cm ', { inputOnly: true }); + + const arrowButton = renderResult.getByTestId('test-inputTextSubmitButton'); + expect(arrowButton).not.toBeDisabled(); + }); + + it('should show the arrow button as disabled if input area is blank', () => { + render(); + + const arrowButton = renderResult.getByTestId('test-inputTextSubmitButton'); + expect(arrowButton).toBeDisabled(); + }); + + it('should execute correct command if arrow button is clicked', () => { + render(); + enterCommand('isolate', { inputOnly: true }); + act(() => { + renderResult.getByTestId('test-inputTextSubmitButton').click(); + }); + expect(renderResult.getByTestId('test-userCommandText').textContent).toEqual('isolate'); + }); + // FIXME:PT uncomment once task OLM task #4384 is implemented it.skip('should display the input history popover when UP key is pressed', async () => { render(); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx index 89ba5f6561435..a4ff5b03b45e8 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx @@ -8,7 +8,7 @@ import type { MouseEventHandler } from 'react'; import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import type { CommonProps } from '@elastic/eui'; -import { EuiFlexGroup, EuiFlexItem, useResizeObserver } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, useResizeObserver, EuiButtonIcon } from '@elastic/eui'; import styled from 'styled-components'; import classNames from 'classnames'; import type { ConsoleDataState } from '../console_state/types'; @@ -110,6 +110,25 @@ export const CommandInput = memo(({ prompt = '', focusRef, .. }); }, [isKeyInputBeingCaptured]); + const disableArrowButton = useMemo( + () => textEntered.length === 0 && rightOfCursor.text.length === 0, + [rightOfCursor.text.length, textEntered.length] + ); + + const handleSubmitButton = useCallback( + (ev) => { + setCommandToExecute(textEntered + rightOfCursor.text); + dispatch({ + type: 'updateInputTextEnteredState', + payload: { + textEntered: '', + rightOfCursor: undefined, + }, + }); + }, + [dispatch, textEntered, rightOfCursor.text] + ); + const handleKeyCaptureOnStateChange = useCallback>( (isCapturing) => { setIsKeyInputBeingCaptured(isCapturing); @@ -285,6 +304,17 @@ export const CommandInput = memo(({ prompt = '', focusRef, .. + + + Date: Thu, 14 Jul 2022 15:40:54 -0500 Subject: [PATCH 78/96] Bump moment-timezone to 0.5.34 (#136406) Fixes a warning during bootstrap: `info [bazel] warning " > @elastic/charts@46.12.0" has incorrect peer dependency "moment-timezone@^0.5.32".` --- package.json | 4 ++-- yarn.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 9294089cb355a..4f98a16e13959 100644 --- a/package.json +++ b/package.json @@ -412,7 +412,7 @@ "minimatch": "^3.1.2", "moment": "^2.29.4", "moment-duration-format": "^2.3.2", - "moment-timezone": "^0.5.27", + "moment-timezone": "^0.5.34", "monaco-editor": "^0.22.3", "mustache": "^2.3.2", "node-fetch": "^2.6.7", @@ -911,7 +911,7 @@ "@types/mocha": "^9.1.1", "@types/mock-fs": "^4.13.1", "@types/moment-duration-format": "^2.2.3", - "@types/moment-timezone": "^0.5.12", + "@types/moment-timezone": "^0.5.30", "@types/mustache": "^0.8.31", "@types/ncp": "^2.0.1", "@types/nock": "^10.0.3", diff --git a/yarn.lock b/yarn.lock index f8f09a1dab087..83f4084c5dbc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7562,12 +7562,12 @@ dependencies: moment ">=2.14.0" -"@types/moment-timezone@^0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@types/moment-timezone/-/moment-timezone-0.5.12.tgz#0fb680c03db194fe8ff4551eaeb1eec8d3d80e9f" - integrity sha512-hnHH2+Efg2vExr/dSz+IX860nSiyk9Sk4pJF2EmS11lRpMcNXeB4KBW5xcgw2QPsb9amTXdsVNEe5IoJXiT0uw== +"@types/moment-timezone@^0.5.30": + version "0.5.30" + resolved "https://registry.yarnpkg.com/@types/moment-timezone/-/moment-timezone-0.5.30.tgz#340ed45fe3e715f4a011f5cfceb7cb52aad46fc7" + integrity sha512-aDVfCsjYnAQaV/E9Qc24C5Njx1CoDjXsEgkxtp9NyXDpYu4CCbmclb6QhWloS9UTU/8YROUEEdEkWI0D7DxnKg== dependencies: - moment ">=2.14.0" + moment-timezone "*" "@types/mustache@^0.8.31": version "0.8.31" @@ -21234,10 +21234,10 @@ moment-duration-format@^2.3.2: resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.3.2.tgz#5fa2b19b941b8d277122ff3f87a12895ec0d6212" integrity sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ== -moment-timezone@^0.5.27: - version "0.5.27" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.27.tgz#73adec8139b6fe30452e78f210f27b1f346b8877" - integrity sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw== +moment-timezone@*, moment-timezone@^0.5.34: + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" From 3044cb7ba56a4f5d94bdf22de0be675b23693412 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Thu, 14 Jul 2022 15:04:57 -0600 Subject: [PATCH 79/96] [APM] Document serverless-specific UI (#135178) Co-authored-by: Alexander Wert --- docs/apm/correlations.asciidoc | 6 +-- docs/apm/how-to-guides.asciidoc | 3 ++ docs/apm/images/lambda-cold-start-trace.png | Bin 0 -> 531901 bytes docs/apm/images/lambda-cold-start.png | Bin 0 -> 215264 bytes docs/apm/images/lambda-correlations.png | Bin 0 -> 679193 bytes docs/apm/lambda.asciidoc | 51 ++++++++++++++++++++ docs/apm/service-overview.asciidoc | 35 +++++++++++--- docs/apm/transactions.asciidoc | 7 ++- 8 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 docs/apm/images/lambda-cold-start-trace.png create mode 100644 docs/apm/images/lambda-cold-start.png create mode 100644 docs/apm/images/lambda-correlations.png create mode 100644 docs/apm/lambda.asciidoc diff --git a/docs/apm/correlations.asciidoc b/docs/apm/correlations.asciidoc index cb72a1b305fd7..ca77c6c8c6afb 100644 --- a/docs/apm/correlations.asciidoc +++ b/docs/apm/correlations.asciidoc @@ -21,7 +21,7 @@ NOTE: Queries within the {apm-app} are also applied to the correlations. ==== Find high transaction latency correlations The correlations on the *Latency correlations* tab help you discover which -attributes are contributing to increased transaction latency. +attributes are contributing to increased transaction latency. [role="screenshot"] image::apm/images/correlations-hover.png[Latency correlations] @@ -74,7 +74,7 @@ The table is sorted by scores, which are mapped to high, medium, or low impact levels. Attributes with high impact levels are more likely to contribute to failed transactions. By default, the attribute with the highest score is added to the chart. To see a different attribute in the chart, select its row in the -table. +table. For example, in the screenshot below, there are attributes such as a specific node and pod name that have medium impact on the failed transactions. @@ -86,4 +86,4 @@ Select the `+` filter to create a new query in the {apm-app} for transactions with one or more of these attributes. If you are unfamiliar with a field, click the icon beside its name to view its most popular values and optionally filter on those values too. Each time that you add another attribute, it is filtering -out more and more noise and bringing you closer to a diagnosis. \ No newline at end of file +out more and more noise and bringing you closer to a diagnosis. diff --git a/docs/apm/how-to-guides.asciidoc b/docs/apm/how-to-guides.asciidoc index b634c937588b0..88b331de2acf2 100644 --- a/docs/apm/how-to-guides.asciidoc +++ b/docs/apm/how-to-guides.asciidoc @@ -12,6 +12,7 @@ Learn how to perform common APM app tasks. * <> * <> * <> +* <> * <> * <> @@ -30,6 +31,8 @@ include::correlations.asciidoc[] include::machine-learning.asciidoc[] +include::lambda.asciidoc[] + include::advanced-queries.asciidoc[] include::deployment-annotations.asciidoc[] \ No newline at end of file diff --git a/docs/apm/images/lambda-cold-start-trace.png b/docs/apm/images/lambda-cold-start-trace.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f6efd0557ceca76b22fe21013499418ed92cd8 GIT binary patch literal 531901 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

- - - {/* Advanced vars */} - {advancedVars.map((varDef) => { - const { name: varName, type: varType } = varDef; - if (!packagePolicy.vars || !packagePolicy.vars[varName]) return null; - const value = packagePolicy.vars![varName].value; - return ( - - { + onChange={(newNamespaces: Array<{ label: string }>) => { updatePackagePolicy({ - vars: { - ...packagePolicy.vars, - [varName]: { - type: varType, - value: newValue, - }, - }, + namespace: newNamespaces.length ? newNamespaces[0].label : '', }); }} - errors={validationResults.vars![varName]} - forceShowErrors={submitAttempted} /> - - ); - })} - - - ) : null} - - + + + + + } + helpText={ + + {i18n.translate( + 'xpack.fleet.createPackagePolicy.stepConfigure.packagePolicyDataRetentionLearnMoreLink', + { defaultMessage: 'Learn more' } + )} + + ), + }} + /> + } + > +
+ + + {/* Advanced vars */} + {advancedVars.map((varDef) => { + const { name: varName, type: varType } = varDef; + if (!packagePolicy.vars || !packagePolicy.vars[varName]) return null; + const value = packagePolicy.vars![varName].value; + return ( + + { + updatePackagePolicy({ + vars: { + ...packagePolicy.vars, + [varName]: { + type: varType, + value: newValue, + }, + }, + }); + }} + errors={validationResults.vars![varName]} + forceShowErrors={submitAttempted} + /> + + ); + })} + + + ) : null} + + + ) : ( ); diff --git a/x-pack/plugins/fleet/public/components/context_menu_actions.tsx b/x-pack/plugins/fleet/public/components/context_menu_actions.tsx index 5bfb12f865388..53ca16a366f54 100644 --- a/x-pack/plugins/fleet/public/components/context_menu_actions.tsx +++ b/x-pack/plugins/fleet/public/components/context_menu_actions.tsx @@ -13,6 +13,7 @@ import { EuiContextMenuPanel, EuiPopover, EuiButton, + EuiToolTip, } from '@elastic/eui'; import type { EuiButtonProps } from '@elastic/eui/src/components/button/button'; import type { EuiContextMenuProps } from '@elastic/eui/src/components/context_menu/context_menu'; @@ -24,6 +25,7 @@ type Props = { children: JSX.Element; }; isOpen?: boolean; + isManaged?: boolean; onChange?: (isOpen: boolean) => void; } & ( | { @@ -51,24 +53,37 @@ export const ContextMenuActions = React.memo(({ button, onChange, isOpen, } }, [isOpenState, onChange, isOpen]); + const actionButton = button ? ( + + {button.children} + + ) : ( + + ); + return ( - {button.children} - - ) : ( - + > + {actionButton} + + ) : ( + actionButton ) } isOpen={isOpen === undefined ? isOpenState : isOpen} diff --git a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx index 42b907cc282f4..9ba89394896ad 100644 --- a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx +++ b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx @@ -37,6 +37,8 @@ export const PackagePolicyActionsMenu: React.FunctionComponent<{ const refreshAgentPolicy = useAgentPolicyRefresh(); const [isActionsMenuOpen, setIsActionsMenuOpen] = useState(defaultIsOpen); + const isManaged = Boolean(packagePolicy.is_managed); + const onEnrollmentFlyoutClose = useMemo(() => { return () => setIsEnrollmentFlyoutOpen(false); }, []); @@ -148,6 +150,7 @@ export const PackagePolicyActionsMenu: React.FunctionComponent<{ )} setIsActionsMenuOpen(open)} diff --git a/x-pack/plugins/fleet/server/errors/index.ts b/x-pack/plugins/fleet/server/errors/index.ts index ecd5bb8c670ae..9753f8006566f 100644 --- a/x-pack/plugins/fleet/server/errors/index.ts +++ b/x-pack/plugins/fleet/server/errors/index.ts @@ -62,6 +62,13 @@ export class HostedAgentPolicyRestrictionRelatedError extends IngestManagerError ); } } +export class PackagePolicyRestrictionRelatedError extends IngestManagerError { + constructor(message = 'Cannot perform that action') { + super( + `${message} in Fleet because the package policy is managed by an external orchestration solution, such as Elastic Cloud, Kubernetes, etc. Please make changes using your orchestration solution.` + ); + } +} export class FleetEncryptedSavedObjectEncryptionKeyRequired extends IngestManagerError {} export class FleetSetupError extends IngestManagerError {} export class GenerateServiceTokenError extends IngestManagerError {} diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index 55b57dc857a90..6512b1a5b0cb8 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -145,6 +145,7 @@ const getSavedObjectTypes = ( description: { type: 'text' }, namespace: { type: 'keyword' }, enabled: { type: 'boolean' }, + is_managed: { type: 'boolean' }, policy_id: { type: 'keyword' }, output_id: { type: 'keyword' }, package: { diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index 04abb2f54228e..79d5b69ae14cc 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -53,6 +53,7 @@ import { ingestErrorToResponseOptions, PackagePolicyIneligibleForUpgradeError, PackagePolicyValidationError, + PackagePolicyRestrictionRelatedError, } from '../errors'; import { NewPackagePolicySchema, PackagePolicySchema, UpdatePackagePolicySchema } from '../types'; import type { @@ -380,6 +381,10 @@ class PackagePolicyService implements PackagePolicyServiceInterface { const oldPackagePolicy = await this.get(soClient, id); const { version, ...restOfPackagePolicy } = packagePolicy; + if (packagePolicyUpdate.is_managed && !options?.force) { + throw new PackagePolicyRestrictionRelatedError(`Cannot update package policy ${id}`); + } + if (!oldPackagePolicy) { throw new Error('Package policy not found'); } @@ -481,6 +486,11 @@ class PackagePolicyService implements PackagePolicyServiceInterface { if (!packagePolicy) { throw new Error('Package policy not found'); } + + if (packagePolicy.is_managed && !options?.force) { + throw new PackagePolicyRestrictionRelatedError(`Cannot delete package policy ${id}`); + } + if (!options?.skipUnassignFromAgentPolicies) { await agentPolicyService.unassignPackagePolicies( soClient, @@ -605,7 +615,7 @@ class PackagePolicyService implements PackagePolicyServiceInterface { soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, ids: string[], - options?: { user?: AuthenticatedUser }, + options?: { user?: AuthenticatedUser; force?: boolean }, packagePolicy?: PackagePolicy, pkgVersion?: string ): Promise { @@ -621,6 +631,10 @@ class PackagePolicyService implements PackagePolicyServiceInterface { pkgVersion )); + if (packagePolicy.is_managed && !options?.force) { + throw new PackagePolicyRestrictionRelatedError(`Cannot upgrade package policy ${id}`); + } + await this.doUpgrade(soClient, esClient, id, packagePolicy!, result, packageInfo, options); } catch (error) { result.push({ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx index bffdc882115a0..abe156475755d 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx @@ -6,7 +6,10 @@ */ import React, { memo, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; import { PackagePolicyEditExtensionComponentProps } from '@kbn/fleet-plugin/public'; +import { EuiButton, EuiCallOut } from '@elastic/eui'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { PolicyConfig, MonitorFields } from './types'; import { ConfigKey, DataStream, TLSFields } from './types'; import { SyntheticsPolicyEditExtension } from './synthetics_policy_edit_extension'; @@ -95,6 +98,20 @@ export const SyntheticsPolicyEditExtensionWrapper = memo +

{EDIT_IN_UPTIME_DESC}

+ {/* TODO Add a link to exact monitor*/} + + {EDIT_IN_UPTIME_LABEL} + + + ); + } + return ( Date: Wed, 13 Jul 2022 16:29:39 -0400 Subject: [PATCH 28/96] [Security Solution] [Platform] Fix performance issue related to building alert body when large fields response is present (#135956) TL;DR: When a security rule's search response has a lot of values in the fields section, the rule could timeout while trying to build the body of the alert to be indexed. This commit fixes that. For example if a rule was querying an index with a lot of runtime fields mapped on it, those runtime fields would come back in the `fields` section of the search response. When we build the body of the alert we merge data from the `_source` and `fields` properties in the search response. From 8.0 until now we would copy every value in `fields` individually and simultaneously copy every value previously iterated over into a new instance of the alert object. We are now mutating the object instead. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../merge_missing_fields_with_source.test.ts | 35 +- .../merge_missing_fields_with_source.ts | 4 +- .../security_and_spaces/group1/runtime.ts | 10 + .../security_solution/runtime/mappings.json | 7002 ++++++++++++++++- 4 files changed, 7047 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.test.ts index eb21579ddea87..a5c811bc1a5c1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - +import { performance } from 'perf_hooks'; import { mergeMissingFieldsWithSource } from './merge_missing_fields_with_source'; import type { SignalSourceHit } from '../../types'; import { emptyEsResult } from '../../__mocks__/empty_signal_source_hit'; @@ -294,6 +294,16 @@ describe('merge_missing_fields_with_source', () => { 'bar.foo': [], }; + const bigFields: SignalSourceHit['fields'] = [...Array(7000).keys()].reduce( + (acc, item, index) => { + return { + [`my-runtime-field-${index}`]: ['nice'], + ...acc, + }; + }, + {} + ); + test('when source is an empty array (f_[]), merged doc is empty array (f_[])"', () => { const _source: SignalSourceHit['_source'] = { 'bar.foo': [], @@ -356,6 +366,29 @@ describe('merge_missing_fields_with_source', () => { const merged = mergeMissingFieldsWithSource({ doc, ignoreFields: [] })._source; expect(merged).toEqual(_source); }); + + /** + * tests for https://github.com/elastic/kibana/issues/135963 + * This test will fail when we replace the import + * import { set } from '@elastic/safer-lodash-set'; + * to use the fp version + * import { set } from '@elastic/safer-lodash-set/fp'; + * and switch around the return inside of filteredEntries.reduce + * to be the following: + * return set(fieldsKey, valueToMerge, merged); + */ + test('when fields is big', () => { + const _source: SignalSourceHit['_source'] = { + 'bar.foo': [], + }; + const doc: SignalSourceHit = { ...emptyEsResult(), _source, fields: bigFields }; + const start = performance.now(); + // we don't care about the response just determining performance + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + mergeMissingFieldsWithSource({ doc, ignoreFields: [] })._source; + const end = performance.now(); + expect(end - start).toBeLessThan(500); + }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.ts index 28269652ae5e8..89695f6b562b0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/source_fields_merging/strategies/merge_missing_fields_with_source.ts @@ -6,7 +6,7 @@ */ import { get } from 'lodash/fp'; -import { set } from '@elastic/safer-lodash-set/fp'; +import { set } from '@elastic/safer-lodash-set'; import type { SignalSource } from '../../types'; import { filterFieldEntries } from '../utils/filter_field_entries'; import type { FieldsType, MergeStrategyFunction } from '../types'; @@ -44,7 +44,7 @@ export const mergeMissingFieldsWithSource: MergeStrategyFunction = ({ doc, ignor const valueInMergedDocument = get(fieldsKey, merged); const valueToMerge = recursiveUnboxingFields(fieldsValue, valueInMergedDocument); - return set(fieldsKey, valueToMerge, merged); + return set(merged, fieldsKey, valueToMerge); }, { ...source } ); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/runtime.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/runtime.ts index e6d1ef69f0913..6c6b33d4a54e3 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/runtime.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/runtime.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { performance } from 'perf_hooks'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { @@ -49,6 +50,15 @@ export default ({ getService }: FtrProviderContext) => { await deleteAllAlerts(supertest, log); }); + it('should execute a rule to completion and not timeout when there are a lot of runtime fields', async () => { + const rule = getRuleForSignalTesting(['runtime']); + const { id } = await createRule(supertest, log, rule); + const start = performance.now(); + await waitForRuleSuccessOrStatus(supertest, log, id); + const end = performance.now(); + expect(end - start).to.be.lessThan(10000); + }); + it('should copy normal non-runtime data set from the source index into the signals index in the same position when the target is ECS compatible', async () => { const rule = getRuleForSignalTesting(['runtime']); const { id } = await createRule(supertest, log, rule); diff --git a/x-pack/test/functional/es_archives/security_solution/runtime/mappings.json b/x-pack/test/functional/es_archives/security_solution/runtime/mappings.json index 33235d0171837..8fde854cb3b89 100644 --- a/x-pack/test/functional/es_archives/security_solution/runtime/mappings.json +++ b/x-pack/test/functional/es_archives/security_solution/runtime/mappings.json @@ -10,7 +10,7007 @@ "script": { "source": "emit(doc['host.name'].value)" } - } + }, + "my-runtime-field-6999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1099": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1098": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1097": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1096": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1095": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1094": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1093": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1092": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1091": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1090": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1089": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1088": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1087": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1086": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1085": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1084": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1083": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1082": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1081": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1080": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1079": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1078": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1077": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1076": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1075": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1074": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1073": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1072": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1071": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1070": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1069": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1068": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1067": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1066": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1065": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1064": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1063": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1062": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1061": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1060": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1059": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1058": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1057": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1056": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1055": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1054": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1053": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1052": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1051": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1050": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1049": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1048": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1047": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1046": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1045": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1044": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1043": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1042": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1041": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1040": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1039": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1038": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1037": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1036": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1035": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1034": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1033": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1032": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1031": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1030": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1029": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1028": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1027": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1026": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1025": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1024": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1023": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1022": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1021": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1020": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1019": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1018": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1017": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1016": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1015": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1014": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1013": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1012": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1011": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1010": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1009": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1008": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1007": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1006": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1005": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1004": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1003": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1002": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1001": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1000": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-999": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-998": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-997": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-996": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-995": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-994": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-993": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-992": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-991": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-990": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-989": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-988": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-987": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-986": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-985": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-984": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-983": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-982": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-981": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-980": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-979": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-978": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-977": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-976": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-975": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-974": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-973": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-972": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-971": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-970": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-969": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-968": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-967": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-966": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-965": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-964": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-963": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-962": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-961": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-960": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-959": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-958": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-957": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-956": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-955": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-954": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-953": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-952": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-951": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-950": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-949": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-948": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-947": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-946": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-945": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-944": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-943": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-942": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-941": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-940": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-939": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-938": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-937": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-936": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-935": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-934": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-933": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-932": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-931": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-930": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-929": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-928": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-927": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-926": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-925": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-924": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-923": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-922": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-921": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-920": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-919": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-918": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-917": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-916": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-915": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-914": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-913": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-912": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-911": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-910": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-909": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-908": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-907": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-906": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-905": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-904": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-903": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-902": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-901": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-900": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-899": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-898": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-897": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-896": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-895": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-894": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-893": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-892": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-891": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-890": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-889": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-888": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-887": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-886": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-885": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-884": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-883": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-882": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-881": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-880": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-879": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-878": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-877": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-876": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-875": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-874": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-873": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-872": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-871": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-870": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-869": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-868": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-867": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-866": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-865": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-864": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-863": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-862": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-861": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-860": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-859": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-858": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-857": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-856": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-855": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-854": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-853": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-852": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-851": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-850": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-849": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-848": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-847": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-846": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-845": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-844": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-843": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-842": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-841": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-840": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-839": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-838": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-837": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-836": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-835": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-834": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-833": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-832": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-831": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-830": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-829": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-828": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-827": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-826": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-825": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-824": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-823": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-822": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-821": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-820": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-819": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-818": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-817": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-816": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-815": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-814": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-813": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-812": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-811": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-810": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-809": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-808": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-807": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-806": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-805": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-804": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-803": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-802": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-801": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-800": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-799": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-798": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-797": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-796": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-795": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-794": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-793": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-792": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-791": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-790": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-789": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-788": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-787": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-786": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-785": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-784": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-783": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-782": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-781": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-780": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-779": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-778": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-777": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-776": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-775": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-774": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-773": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-772": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-771": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-770": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-769": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-768": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-767": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-766": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-765": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-764": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-763": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-762": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-761": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-760": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-759": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-758": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-757": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-756": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-755": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-754": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-753": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-752": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-751": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-750": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-749": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-748": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-747": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-746": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-745": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-744": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-743": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-742": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-741": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-740": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-739": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-738": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-737": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-736": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-735": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-734": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-733": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-732": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-731": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-730": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-729": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-728": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-727": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-726": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-725": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-724": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-723": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-722": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-721": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-720": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-719": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-718": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-717": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-716": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-715": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-714": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-713": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-712": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-711": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-710": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-709": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-708": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-707": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-706": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-705": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-704": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-703": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-702": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-701": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-700": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-699": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-698": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-697": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-696": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-695": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-694": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-693": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-692": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-691": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-690": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-689": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-688": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-687": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-686": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-685": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-684": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-683": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-682": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-681": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-680": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-679": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-678": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-677": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-676": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-675": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-674": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-673": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-672": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-671": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-670": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-669": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-668": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-667": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-666": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-665": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-664": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-663": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-662": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-661": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-660": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-659": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-658": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-657": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-656": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-655": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-654": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-653": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-652": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-651": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-650": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-649": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-648": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-647": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-646": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-645": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-644": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-643": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-642": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-641": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-640": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-639": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-638": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-637": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-636": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-635": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-634": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-633": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-632": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-631": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-630": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-629": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-628": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-627": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-626": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-625": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-624": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-623": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-622": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-621": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-620": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-619": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-618": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-617": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-616": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-615": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-614": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-613": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-612": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-611": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-610": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-609": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-608": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-607": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-606": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-605": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-604": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-603": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-602": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-601": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-600": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-599": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-598": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-597": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-596": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-595": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-594": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-593": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-592": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-591": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-590": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-589": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-588": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-587": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-586": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-585": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-584": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-583": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-582": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-581": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-580": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-579": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-578": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-577": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-576": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-575": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-574": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-573": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-572": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-571": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-570": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-569": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-568": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-567": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-566": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-565": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-564": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-563": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-562": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-561": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-560": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-559": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-558": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-557": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-556": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-555": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-554": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-553": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-552": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-551": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-550": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-549": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-548": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-547": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-546": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-545": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-544": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-543": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-542": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-541": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-540": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-539": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-538": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-537": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-536": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-535": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-534": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-533": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-532": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-531": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-530": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-529": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-528": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-527": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-526": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-525": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-524": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-523": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-522": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-521": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-520": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-519": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-518": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-517": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-516": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-515": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-514": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-513": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-512": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-511": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-510": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-509": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-508": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-507": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-506": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-505": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-504": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-503": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-502": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-501": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-500": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-499": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-498": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-497": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-496": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-495": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-494": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-493": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-492": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-491": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-490": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-489": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-488": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-487": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-486": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-485": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-484": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-483": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-482": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-481": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-480": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-479": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-478": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-477": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-476": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-475": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-474": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-473": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-472": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-471": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-470": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-469": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-468": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-467": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-466": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-465": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-464": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-463": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-462": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-461": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-460": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-459": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-458": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-457": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-456": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-455": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-454": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-453": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-452": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-451": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-450": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-449": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-448": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-447": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-446": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-445": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-444": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-443": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-442": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-441": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-440": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-439": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-438": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-437": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-436": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-435": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-434": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-433": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-432": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-431": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-430": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-429": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-428": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-427": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-426": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-425": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-424": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-423": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-422": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-421": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-420": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-419": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-418": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-417": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-416": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-415": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-414": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-413": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-412": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-411": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-410": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-409": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-408": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-407": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-406": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-405": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-404": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-403": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-402": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-401": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-400": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-399": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-398": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-397": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-396": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-395": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-394": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-393": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-392": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-391": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-390": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-389": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-388": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-387": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-386": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-385": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-384": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-383": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-382": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-381": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-380": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-379": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-378": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-377": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-376": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-375": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-374": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-373": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-372": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-371": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-370": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-369": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-368": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-367": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-366": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-365": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-364": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-363": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-362": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-361": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-360": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-359": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-358": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-357": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-356": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-355": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-354": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-353": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-352": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-351": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-350": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-349": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-348": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-347": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-346": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-345": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-344": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-343": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-342": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-341": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-340": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-339": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-338": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-337": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-336": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-335": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-334": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-333": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-332": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-331": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-330": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-329": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-328": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-327": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-326": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-325": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-324": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-323": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-322": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-321": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-320": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-319": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-318": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-317": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-316": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-315": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-314": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-313": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-312": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-311": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-310": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-309": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-308": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-307": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-306": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-305": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-304": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-303": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-302": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-301": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-300": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-299": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-298": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-297": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-296": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-295": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-294": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-293": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-292": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-291": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-290": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-289": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-288": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-287": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-286": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-285": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-284": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-283": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-282": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-281": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-280": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-279": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-278": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-277": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-276": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-275": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-274": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-273": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-272": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-271": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-270": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-269": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-268": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-267": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-266": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-265": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-264": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-263": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-262": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-261": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-260": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-259": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-258": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-257": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-256": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-255": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-254": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-253": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-252": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-251": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-250": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-249": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-248": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-247": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-246": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-245": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-244": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-243": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-242": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-241": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-240": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-239": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-238": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-237": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-236": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-235": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-234": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-233": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-232": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-231": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-230": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-229": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-228": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-227": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-226": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-225": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-224": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-223": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-222": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-221": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-220": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-219": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-218": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-217": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-216": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-215": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-214": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-213": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-212": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-211": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-210": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-209": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-208": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-207": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-206": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-205": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-204": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-203": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-202": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-201": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-200": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-199": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-198": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-197": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-196": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-195": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-194": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-193": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-192": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-191": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-190": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-189": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-188": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-187": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-186": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-185": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-184": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-183": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-182": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-181": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-180": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-179": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-178": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-177": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-176": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-175": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-174": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-173": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-172": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-171": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-170": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-169": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-168": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-167": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-166": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-165": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-164": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-163": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-162": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-161": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-160": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-159": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-158": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-157": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-156": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-155": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-154": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-153": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-152": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-151": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-150": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-149": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-148": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-147": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-146": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-145": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-144": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-143": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-142": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-141": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-140": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-139": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-138": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-137": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-136": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-135": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-134": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-133": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-132": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-131": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-130": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-129": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-128": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-127": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-126": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-125": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-124": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-123": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-122": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-121": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-120": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-119": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-118": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-117": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-116": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-115": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-114": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-113": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-112": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-111": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-110": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-109": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-108": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-107": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-106": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-105": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-104": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-103": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-102": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-101": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-100": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-99": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-98": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-97": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-96": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-95": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-94": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-93": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-92": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-91": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-90": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-89": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-88": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-87": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-86": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-85": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-84": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-83": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-82": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-81": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-80": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-79": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-78": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-77": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-76": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-75": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-74": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-73": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-72": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-71": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-70": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-69": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-68": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-67": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-66": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-65": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-64": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-63": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-62": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-61": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-60": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-59": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-58": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-57": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-56": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-55": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-54": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-53": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-52": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-51": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-50": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-49": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-48": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-47": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-46": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-45": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-44": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-43": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-42": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-41": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-40": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-39": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-38": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-37": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-36": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-35": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-34": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-33": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-32": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-31": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-30": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-29": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-28": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-27": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-26": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-25": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-24": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-23": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-22": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-21": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-20": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-19": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-18": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-17": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-16": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-15": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-14": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-13": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-12": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-11": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-10": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-9": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-8": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-7": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-6": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-5": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-4": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-3": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-2": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-1": { "type": "keyword", "script": { "source": "emit('nice')" } }, + "my-runtime-field-0": { "type": "keyword", "script": { "source": "emit('nice')" } } }, "properties": { "@timestamp": { From 7f664f578866ea9d5d7a960c99e39545b6075ed0 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 13 Jul 2022 16:02:10 -0500 Subject: [PATCH 29/96] [RAM] Remove ability to enter negative numbers in snooze recurrence UI (#136235) * [RAM] Remove ability to enter negative numbers in snooze recurrence UI * Add onBlur to number field * Add NumberField test --- .../rule_snooze/helpers/number_field.test.tsx | 69 +++++++++++++++++++ .../rule_snooze/helpers/number_field.tsx | 45 ++++++++++++ .../custom_recurrence_scheduler.tsx | 6 +- .../recurrence_scheduler/index.tsx | 6 +- 4 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.tsx diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.test.tsx new file mode 100644 index 0000000000000..d3ae27c5bd211 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.test.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import React from 'react'; +import { NumberField } from './number_field'; + +describe('NumberField', () => { + const onChange = jest.fn(); + + beforeEach(() => { + onChange.mockReset(); + }); + + test('allows any value with no defined min or max', () => { + const wrapper = mountWithIntl(); + wrapper + .find('input') + .first() + .simulate('change', { target: { value: 3 } }); + + expect(onChange).toHaveBeenCalledWith(3); + + wrapper + .find('input') + .first() + .simulate('change', { target: { value: 0 } }); + + expect(onChange).toHaveBeenCalledWith(0); + }); + + test('constrains value to defined min', () => { + const wrapper = mountWithIntl(); + wrapper + .find('input') + .first() + .simulate('change', { target: { value: 1 } }); + + expect(onChange).toHaveBeenCalledWith(1); + + wrapper + .find('input') + .first() + .simulate('change', { target: { value: -1 } }); + + expect(onChange).not.toHaveBeenCalledWith(-1); + }); + + test('constrains value to defined max', () => { + const wrapper = mountWithIntl(); + wrapper + .find('input') + .first() + .simulate('change', { target: { value: -1 } }); + + expect(onChange).toHaveBeenCalledWith(-1); + + wrapper + .find('input') + .first() + .simulate('change', { target: { value: 11 } }); + + expect(onChange).not.toHaveBeenCalledWith(11); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.tsx new file mode 100644 index 0000000000000..2483f6fc4a43c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/helpers/number_field.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState, useCallback } from 'react'; +import { EuiFieldNumber, EuiFieldNumberProps } from '@elastic/eui'; + +export const NumberField: React.FC< + EuiFieldNumberProps & { + onChange: (value: string) => void; + } +> = (props) => { + const [displayValue, setDisplayValue] = useState(props.value); + const min = typeof props.min !== 'undefined' ? props.min : -Infinity; + const max = typeof props.max !== 'undefined' ? props.max : Infinity; + + const onChange = useCallback( + (e) => { + const { value } = e.target; + const isValid = !isNaN(Number(value)) && value >= min && value <= max; + if (isValid || value === '') { + setDisplayValue(value); + } + if (isValid && props.onChange) { + props.onChange(value); + } + }, + [props, setDisplayValue, max, min] + ); + + const onBlur = useCallback( + (e) => { + if (isNaN(Number(displayValue)) || displayValue === '') { + setDisplayValue(props.value); + } + if (props.onBlur) props.onBlur(e); + }, + [displayValue, props, setDisplayValue] + ); + + return ; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx index 4a94c43e4810e..b7568cfdc99db 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/custom_recurrence_scheduler.tsx @@ -7,7 +7,6 @@ import { EuiButtonGroup, - EuiFieldNumber, EuiFormControlLayout, EuiFormRow, EuiSelect, @@ -19,6 +18,7 @@ import deepEqual from 'fast-deep-equal'; import { Moment } from 'moment'; import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; +import { NumberField } from '../helpers/number_field'; import { RRuleFrequency } from '../../../../../../types'; import { I18N_WEEKDAY_OPTIONS } from './constants'; import { @@ -140,12 +140,12 @@ export const CustomRecurrenceScheduler: React.FC } )} > - setInterval(Number(e.target.value))} + onChange={(value) => setInterval(Number(value))} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx index fbd5082d0f131..4220e287c5f17 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_snooze/recurrence_scheduler/index.tsx @@ -8,7 +8,6 @@ import { EuiButtonGroup, EuiDatePicker, - EuiFieldNumber, EuiFormControlLayout, EuiFormRow, EuiHorizontalRule, @@ -21,6 +20,7 @@ import { Moment } from 'moment'; import React from 'react'; import { useEffect, useMemo, useRef, useState } from 'react'; +import { NumberField } from '../helpers/number_field'; import { RRuleFrequency, RecurrenceSchedule } from '../../../../../../types'; import { i18nMonthDayDate } from '../../../../../lib/i18n_month_day_date'; import { @@ -276,11 +276,11 @@ export const RecurrenceScheduler: React.FC = ({ } )} > - setOccurrrences(Number(e.target.value))} + onChange={(value) => setOccurrrences(Number(value))} /> From f074c397c537029e0b9a1ea8bf3cb9ef52a3dc04 Mon Sep 17 00:00:00 2001 From: Spencer Date: Wed, 13 Jul 2022 16:36:39 -0500 Subject: [PATCH 30/96] [ftr] add support for launching a dedicated task runner Kibana node (#135875) * [ftr] add support for launching a dedicated task runner Kibana node * Update run_kibana_server.ts * disable the optimizer in kbn-tasks proc when running locally * remove paths module * include decicated task proc in promises array * add getSupertest() helper to DedicatesTaskRunner service * avoid caching a supertest instance, just create one on request * remove surprise dependents on KIBANA_ROOT const * remove modifications to test/analytics/config.ts --- packages/kbn-test/BUILD.bazel | 2 + packages/kbn-test/src/es/test_es_cluster.ts | 10 +- .../functional_test_runner.ts | 2 + .../lib/config/schema.ts | 1 + .../lib/dedicated_task_runner.ts | 138 ++++++++++++++++++ .../src/functional_test_runner/lib/index.ts | 1 + .../functional_test_runner/public_types.ts | 19 ++- .../src/functional_tests/lib/index.ts | 1 - .../src/functional_tests/lib/paths.ts | 21 --- .../functional_tests/lib/run_elasticsearch.ts | 4 +- .../functional_tests/lib/run_kibana_server.ts | 97 ++++++++---- .../kbn-test/src/functional_tests/tasks.ts | 15 +- packages/kbn-test/src/index.ts | 3 - test/examples/config.js | 8 +- x-pack/test/examples/config.ts | 3 +- x-pack/test/licensing_plugin/config.public.ts | 3 +- x-pack/test/plugin_functional/config.ts | 3 +- .../services/endpoint_telemetry.ts | 3 +- 18 files changed, 255 insertions(+), 79 deletions(-) create mode 100644 packages/kbn-test/src/functional_test_runner/lib/dedicated_task_runner.ts delete mode 100644 packages/kbn-test/src/functional_tests/lib/paths.ts diff --git a/packages/kbn-test/BUILD.bazel b/packages/kbn-test/BUILD.bazel index e2824076e80b9..b854379eb536b 100644 --- a/packages/kbn-test/BUILD.bazel +++ b/packages/kbn-test/BUILD.bazel @@ -76,6 +76,7 @@ RUNTIME_DEPS = [ "@npm//rxjs", "@npm//semver", "@npm//strip-ansi", + "@npm//supertest", "@npm//xmlbuilder", "@npm//xml2js", ] @@ -123,6 +124,7 @@ TYPES_DEPS = [ "@npm//@types/react-redux", "@npm//@types/react-router-dom", "@npm//@types/semver", + "@npm//@types/supertest", "@npm//@types/uuid", "@npm//@types/xml2js", ] diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index 1eb48ca58d950..8c650ec9b6051 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -19,11 +19,11 @@ import type { ChildProcess } from 'child_process'; import { Cluster } from '@kbn/es'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; +import { REPO_ROOT } from '@kbn/utils'; + import { CI_PARALLEL_PROCESS_PREFIX } from '../ci_parallel_process_prefix'; import { esTestConfig } from './es_test_config'; -import { KIBANA_ROOT } from '..'; - interface TestEsClusterNodesOptions { name: string; /** @@ -168,7 +168,7 @@ export function createTestEsCluster< password = 'changeme', license = 'basic', log, - basePath = Path.resolve(KIBANA_ROOT, '.es'), + basePath = Path.resolve(REPO_ROOT, '.es'), esFrom = esTestConfig.getBuildFrom(), dataArchive, nodes = [{ name: 'node-01' }], @@ -196,7 +196,7 @@ export function createTestEsCluster< const config = { version: esTestConfig.getVersion(), installPath: Path.resolve(basePath, clusterName), - sourcePath: Path.resolve(KIBANA_ROOT, '../elasticsearch'), + sourcePath: Path.resolve(REPO_ROOT, '../elasticsearch'), password, license, basePath, @@ -321,7 +321,7 @@ export function createTestEsCluster< } const uuid = Uuid.v4(); - const debugPath = Path.resolve(KIBANA_ROOT, `data/es_debug_${uuid}.tar.gz`); + const debugPath = Path.resolve(REPO_ROOT, `data/es_debug_${uuid}.tar.gz`); log.error(`[es] debug files found, archiving install to ${debugPath}`); const archiver = createArchiver('tar', { gzip: true }); const promise = pipeline(archiver, Fs.createWriteStream(debugPath)); diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index 9de6500a45323..4e549e960dc26 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -24,6 +24,7 @@ import { Config, SuiteTracker, EsVersion, + DedicatedTaskRunner, } from './lib'; import { createEsClientForFtrConfig } from '../es'; @@ -242,6 +243,7 @@ export class FunctionalTestRunner { config: () => config, dockerServers: () => dockerServers, esVersion: () => this.esVersion, + dedicatedTaskRunner: () => new DedicatedTaskRunner(config, this.log), }); return await handler(config, lifecycle, coreProviders); diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts index bf652bf8c8444..6f5757a73ea0a 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts @@ -216,6 +216,7 @@ export const schema = Joi.object() sourceArgs: Joi.array(), serverArgs: Joi.array(), installDir: Joi.string(), + useDedicatedTaskRunner: Joi.boolean().default(false), /** Options for how FTR should execute and interact with Kibana */ runOptions: Joi.object() .keys({ diff --git a/packages/kbn-test/src/functional_test_runner/lib/dedicated_task_runner.ts b/packages/kbn-test/src/functional_test_runner/lib/dedicated_task_runner.ts new file mode 100644 index 0000000000000..20b5e0387c719 --- /dev/null +++ b/packages/kbn-test/src/functional_test_runner/lib/dedicated_task_runner.ts @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import Url from 'url'; + +import { ToolingLog } from '@kbn/tooling-log'; +import Supertest from 'supertest'; + +import { KbnClient } from '../../kbn_client'; +import { Config } from './config'; +import { getKibanaCliArg } from '../../functional_tests/lib/kibana_cli_args'; + +export class DedicatedTaskRunner { + static getPort(uiPort: number) { + return uiPort + 13; + } + + static getUuid(mainUuid: string) { + if (mainUuid.length !== 36) { + throw new Error(`invalid mainUuid: ${mainUuid}`); + } + + return `00000000-${mainUuid.slice(9)}`; + } + + /** + * True when the FTR config indicates that Kibana has a dedicated task runner process, otherwise false. If this + * property is false then all other methods on this class will throw when they are called, so if you're not + * certain where your code will be run make sure to check `dedicatedTaskRunner.enabled` before calling + * other methods. + */ + public readonly enabled: boolean; + + private readonly enabledProps?: { + readonly port: number; + readonly url: string; + readonly client: KbnClient; + readonly uuid?: string; + readonly supertest?: Supertest.SuperTest; + }; + + constructor(config: Config, log: ToolingLog) { + if (!config.get('kbnTestServer.useDedicatedTaskRunner')) { + this.enabled = false; + return; + } + + this.enabled = true; + + const port = DedicatedTaskRunner.getPort(config.get('servers.kibana.port')); + const url = Url.format({ + ...config.get('servers.kibana'), + port, + }); + const client = new KbnClient({ + log, + url, + certificateAuthorities: config.get('servers.kibana.certificateAuthorities'), + uiSettingDefaults: config.get('uiSettings.defaults'), + }); + + const mainUuid = getKibanaCliArg(config.get('kbnTestServer.serverArgs'), 'server.uuid'); + const uuid = typeof mainUuid === 'string' ? DedicatedTaskRunner.getUuid(mainUuid) : undefined; + + this.enabledProps = { port, url, client, uuid }; + } + + private getEnabledProps() { + if (!this.enabledProps) { + throw new Error( + `DedicatedTaskRunner is not enabled, check the "enabled" property before calling getters assuming it is enabled.` + ); + } + + return this.enabledProps; + } + + /** + * The port number that the dedicated task runner is running on + */ + getPort() { + return this.getEnabledProps().port; + } + + /** + * The full URL for the dedicated task runner process + */ + getUrl() { + return this.getEnabledProps().url; + } + + /** + * Returns true if the `--server.uuid` setting was passed to the Kibana server, allowing the UUID to + * be deterministic and ensuring that `dedicatedTaskRunner.getUuid()` won't throw. + */ + hasUuid() { + return !!this.getEnabledProps().uuid; + } + + /** + * If `--server.uuid` is passed to Kibana in the FTR config file then the dedicated task runner will + * use a UUID derived from that and it will be synchronously available to users via this function. + * Otherwise this function will through. + */ + getUuid() { + const uuid = this.getEnabledProps().uuid; + if (!uuid) { + throw new Error( + 'Pass `--server.uuid` the the Kibana server in your FTR config in order to make the UUID of the dedicated task runner deterministic.' + ); + } + + return uuid; + } + + /** + * @returns a `KbnClient` instance that is configured to talk directly to the dedicated task runner. Not really sure how useful this is. + */ + getClient() { + return this.getEnabledProps().client; + } + + /** + * @returns a Supertest instance that will send requests to the dedicated task runner. + * + * @example + * const supertest = dedicatedTaskRunner.getSupertest(); + * const response = await supertest.get('/status'); + */ + getSupertest() { + return Supertest(this.getUrl()); + } +} diff --git a/packages/kbn-test/src/functional_test_runner/lib/index.ts b/packages/kbn-test/src/functional_test_runner/lib/index.ts index b269e34178851..983a185dee682 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/index.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/index.ts @@ -14,6 +14,7 @@ export * from './providers'; export { runTests, setupMocha } from './mocha'; export * from './docker_servers'; export { SuiteTracker } from './suite_tracker'; +export { DedicatedTaskRunner } from './dedicated_task_runner'; export type { Provider } from './providers'; export * from './es_version'; diff --git a/packages/kbn-test/src/functional_test_runner/public_types.ts b/packages/kbn-test/src/functional_test_runner/public_types.ts index 67adceaf22323..3faa19de73ce1 100644 --- a/packages/kbn-test/src/functional_test_runner/public_types.ts +++ b/packages/kbn-test/src/functional_test_runner/public_types.ts @@ -8,7 +8,13 @@ import type { ToolingLog } from '@kbn/tooling-log'; -import type { Config, Lifecycle, DockerServersService, EsVersion } from './lib'; +import type { + Config, + Lifecycle, + DockerServersService, + EsVersion, + DedicatedTaskRunner, +} from './lib'; import type { Test, Suite } from './fake_mocha_types'; export { Lifecycle, Config }; @@ -56,7 +62,15 @@ export interface GenericFtrProviderContext< * Determine if a service is avaliable * @param serviceName */ - hasService(serviceName: 'config' | 'log' | 'lifecycle' | 'dockerServers' | 'esVersion'): true; + hasService( + serviceName: + | 'config' + | 'log' + | 'lifecycle' + | 'dockerServers' + | 'esVersion' + | 'dedicatedTaskRunner' + ): true; hasService(serviceName: K): serviceName is K; hasService(serviceName: string): serviceName is Extract; @@ -70,6 +84,7 @@ export interface GenericFtrProviderContext< getService(serviceName: 'lifecycle'): Lifecycle; getService(serviceName: 'dockerServers'): DockerServersService; getService(serviceName: 'esVersion'): EsVersion; + getService(serviceName: 'dedicatedTaskRunner'): DedicatedTaskRunner; getService(serviceName: T): ServiceMap[T]; /** diff --git a/packages/kbn-test/src/functional_tests/lib/index.ts b/packages/kbn-test/src/functional_tests/lib/index.ts index 2726192328bda..8844a2ee59a19 100644 --- a/packages/kbn-test/src/functional_tests/lib/index.ts +++ b/packages/kbn-test/src/functional_tests/lib/index.ts @@ -10,5 +10,4 @@ export { runKibanaServer } from './run_kibana_server'; export { runElasticsearch } from './run_elasticsearch'; export type { CreateFtrOptions, CreateFtrParams } from './run_ftr'; export { runFtr, hasTests, assertNoneExcluded } from './run_ftr'; -export { KIBANA_ROOT, KIBANA_FTR_SCRIPT } from './paths'; export { runCli } from './run_cli'; diff --git a/packages/kbn-test/src/functional_tests/lib/paths.ts b/packages/kbn-test/src/functional_tests/lib/paths.ts deleted file mode 100644 index 76357d447dc2a..0000000000000 --- a/packages/kbn-test/src/functional_tests/lib/paths.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { REPO_ROOT } from '@kbn/utils'; -import { resolve, relative } from 'path'; - -// resolve() treats relative paths as relative to process.cwd(), -// so to return a relative path we use relative() -function resolveRelative(path: string) { - return relative(process.cwd(), resolve(path)); -} - -export const KIBANA_EXEC = 'node'; -export const KIBANA_SCRIPT_PATH = resolveRelative('scripts/kibana'); -export const KIBANA_ROOT = REPO_ROOT; -export const KIBANA_FTR_SCRIPT = resolve(KIBANA_ROOT, 'scripts/functional_test_runner'); diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index 2ee9de4053fef..5dcee56e765e0 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -9,7 +9,7 @@ import { resolve } from 'path'; import type { ToolingLog } from '@kbn/tooling-log'; import getPort from 'get-port'; -import { KIBANA_ROOT } from './paths'; +import { REPO_ROOT } from '@kbn/utils'; import type { Config } from '../../functional_test_runner'; import { createTestEsCluster } from '../../es'; @@ -106,7 +106,7 @@ async function startEsNode( port: config.port, ssl: config.ssl, log, - basePath: resolve(KIBANA_ROOT, '.es'), + basePath: resolve(REPO_ROOT, '.es'), nodes: [ { name, diff --git a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts index 7b6d6d5cd1a3e..76346f3618a51 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts @@ -7,12 +7,15 @@ */ import Path from 'path'; +import Os from 'os'; +import Uuid from 'uuid'; import type { ProcRunner } from '@kbn/dev-proc-runner'; +import { REPO_ROOT } from '@kbn/utils'; -import { KIBANA_ROOT, KIBANA_EXEC, KIBANA_SCRIPT_PATH } from './paths'; import type { Config } from '../../functional_test_runner'; -import { parseRawFlags } from './kibana_cli_args'; +import { DedicatedTaskRunner } from '../../functional_test_runner/lib'; +import { parseRawFlags, getArgValue } from './kibana_cli_args'; function extendNodeOptions(installDir?: string) { if (!installDir) { @@ -44,13 +47,35 @@ export async function runKibanaServer({ }) { const runOptions = config.get('kbnTestServer.runOptions'); const installDir = runOptions.alwaysUseSource ? undefined : options.installDir; - const extraArgs = options.extraKbnOpts ?? []; + const devMode = !installDir; + const useTaskRunner = config.get('kbnTestServer.useDedicatedTaskRunner'); + + const procRunnerOpts = { + cwd: installDir || REPO_ROOT, + cmd: installDir + ? process.platform.startsWith('win') + ? Path.resolve(installDir, 'bin/kibana.bat') + : Path.resolve(installDir, 'bin/kibana') + : process.execPath, + env: { + FORCE_COLOR: 1, + ...process.env, + ...config.get('kbnTestServer.env'), + ...extendNodeOptions(installDir), + }, + wait: runOptions.wait, + onEarlyExit, + }; + + const prefixArgs = devMode + ? [Path.relative(process.cwd(), Path.resolve(REPO_ROOT, 'scripts/kibana'))] + : []; const buildArgs: string[] = config.get('kbnTestServer.buildArgs') || []; const sourceArgs: string[] = config.get('kbnTestServer.sourceArgs') || []; const serverArgs: string[] = config.get('kbnTestServer.serverArgs') || []; - const args = parseRawFlags([ + const kbnFlags = parseRawFlags([ // When installDir is passed, we run from a built version of Kibana which uses different command line // arguments. If installDir is not passed, we run from source code. ...(installDir @@ -58,31 +83,51 @@ export async function runKibanaServer({ : [...sourceArgs, ...serverArgs]), // We also allow passing in extra Kibana server options, tack those on here so they always take precedence - ...extraArgs, + ...(options.extraKbnOpts ?? []), ]); - // main process - await procs.run('kibana', { - cmd: getKibanaCmd(installDir), - args: installDir ? args : [KIBANA_SCRIPT_PATH, ...args], - env: { - FORCE_COLOR: 1, - ...process.env, - ...config.get('kbnTestServer.env'), - ...extendNodeOptions(installDir), - }, - cwd: installDir || KIBANA_ROOT, - wait: runOptions.wait, - onEarlyExit, - }); -} + const promises = [ + // main process + procs.run(useTaskRunner ? 'kbn-ui' : 'kibana', { + ...procRunnerOpts, + args: [ + ...prefixArgs, + ...parseRawFlags([ + ...kbnFlags, + ...(!useTaskRunner + ? [] + : [ + '--node.roles=["ui"]', + `--path.data=${Path.resolve(Os.tmpdir(), `ftr-ui-${Uuid.v4()}`)}`, + ]), + ]), + ], + }), + ]; + + if (useTaskRunner) { + const mainUuid = getArgValue(kbnFlags, 'server.uuid'); -function getKibanaCmd(installDir?: string) { - if (installDir) { - return process.platform.startsWith('win') - ? Path.resolve(installDir, 'bin/kibana.bat') - : Path.resolve(installDir, 'bin/kibana'); + // dedicated task runner + promises.push( + procs.run('kbn-tasks', { + ...procRunnerOpts, + args: [ + ...prefixArgs, + ...parseRawFlags([ + ...kbnFlags, + `--server.port=${DedicatedTaskRunner.getPort(config.get('servers.kibana.port'))}`, + '--node.roles=["background_tasks"]', + `--path.data=${Path.resolve(Os.tmpdir(), `ftr-task-runner-${Uuid.v4()}`)}`, + ...(typeof mainUuid === 'string' && mainUuid + ? [`--server.uuid=${DedicatedTaskRunner.getUuid(mainUuid)}`] + : []), + ...(devMode ? ['--no-optimizer'] : []), + ]), + ], + }) + ); } - return KIBANA_EXEC; + await Promise.all(promises); } diff --git a/packages/kbn-test/src/functional_tests/tasks.ts b/packages/kbn-test/src/functional_tests/tasks.ts index 76cc4dde1f36b..9b5fb5424f3fe 100644 --- a/packages/kbn-test/src/functional_tests/tasks.ts +++ b/packages/kbn-test/src/functional_tests/tasks.ts @@ -6,9 +6,10 @@ * Side Public License, v 1. */ -import { relative } from 'path'; -import * as Rx from 'rxjs'; +import Path from 'path'; import { setTimeout } from 'timers/promises'; + +import * as Rx from 'rxjs'; import { startWith, switchMap, take } from 'rxjs/operators'; import { withProcRunner } from '@kbn/dev-proc-runner'; import { ToolingLog } from '@kbn/tooling-log'; @@ -16,17 +17,17 @@ import { getTimeReporter } from '@kbn/ci-stats-reporter'; import { REPO_ROOT } from '@kbn/utils'; import dedent from 'dedent'; +import { readConfigFile, EsVersion } from '../functional_test_runner/lib'; import { runElasticsearch, runKibanaServer, runFtr, assertNoneExcluded, hasTests, - KIBANA_FTR_SCRIPT, CreateFtrOptions, } from './lib'; -import { readConfigFile, EsVersion } from '../functional_test_runner/lib'; +const FTR_SCRIPT_PATH = Path.resolve(REPO_ROOT, 'scripts/functional_test_runner'); const makeSuccessMessage = (options: StartServerOptions) => { const installDirFlag = options.installDir ? ` --kibana-install-dir=${options.installDir}` : ''; @@ -34,7 +35,7 @@ const makeSuccessMessage = (options: StartServerOptions) => { const pathsMessage = options.useDefaultConfig ? '' : configPaths - .map((path) => relative(process.cwd(), path)) + .map((path) => Path.relative(process.cwd(), path)) .map((path) => ` --config ${path}`) .join(''); @@ -44,7 +45,7 @@ const makeSuccessMessage = (options: StartServerOptions) => { Elasticsearch and Kibana are ready for functional testing. Start the functional tests in another terminal session by running this command from this directory: - node ${relative(process.cwd(), KIBANA_FTR_SCRIPT)}${installDirFlag}${pathsMessage} + node ${Path.relative(process.cwd(), FTR_SCRIPT_PATH)}${installDirFlag}${pathsMessage} ` + '\n\n' ); @@ -96,7 +97,7 @@ export async function runTests(options: RunTestsParams) { await log.indent(0, async () => { if (options.configs.length > 1) { const progress = `${i + 1}/${options.configs.length}`; - log.write(`--- [${progress}] Running ${relative(REPO_ROOT, configPath)}`); + log.write(`--- [${progress}] Running ${Path.relative(REPO_ROOT, configPath)}`); } if (!(await hasTests({ configPath, options: { ...options, log } }))) { diff --git a/packages/kbn-test/src/index.ts b/packages/kbn-test/src/index.ts index 7770232011d21..6d67bbecc2093 100644 --- a/packages/kbn-test/src/index.ts +++ b/packages/kbn-test/src/index.ts @@ -24,9 +24,6 @@ export { runTestsCli, processRunTestsCliOptions, startServersCli, processStartSe // @internal export { runTests, startServers } from './functional_tests/tasks'; -// @internal -export { KIBANA_ROOT } from './functional_tests/lib/paths'; - export { getKibanaCliArg, getKibanaCliLoggers } from './functional_tests/lib/kibana_cli_args'; export type { diff --git a/test/examples/config.js b/test/examples/config.js index 25537a22e19ac..e2374d203d7c7 100644 --- a/test/examples/config.js +++ b/test/examples/config.js @@ -9,15 +9,15 @@ import { resolve } from 'path'; import { services } from '../plugin_functional/services'; import fs from 'fs'; -import { KIBANA_ROOT } from '@kbn/test'; +import { REPO_ROOT } from '@kbn/utils'; export default async function ({ readConfigFile }) { const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); // Find all folders in /examples and /x-pack/examples since we treat all them as plugin folder - const examplesFiles = fs.readdirSync(resolve(KIBANA_ROOT, 'examples')); + const examplesFiles = fs.readdirSync(resolve(REPO_ROOT, 'examples')); const examples = examplesFiles.filter((file) => - fs.statSync(resolve(KIBANA_ROOT, 'examples', file)).isDirectory() + fs.statSync(resolve(REPO_ROOT, 'examples', file)).isDirectory() ); return { @@ -63,7 +63,7 @@ export default async function ({ readConfigFile }) { '--env.name=development', '--telemetry.optIn=false', ...examples.map( - (exampleDir) => `--plugin-path=${resolve(KIBANA_ROOT, 'examples', exampleDir)}` + (exampleDir) => `--plugin-path=${resolve(REPO_ROOT, 'examples', exampleDir)}` ), ], }, diff --git a/x-pack/test/examples/config.ts b/x-pack/test/examples/config.ts index 16db620e76598..fe01c4ecf0e44 100644 --- a/x-pack/test/examples/config.ts +++ b/x-pack/test/examples/config.ts @@ -8,8 +8,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { resolve } from 'path'; import fs from 'fs'; -// @ts-expect-error https://github.com/elastic/kibana/issues/95679 -import { KIBANA_ROOT } from '@kbn/test'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { const xpackFunctionalConfig = await readConfigFile( diff --git a/x-pack/test/licensing_plugin/config.public.ts b/x-pack/test/licensing_plugin/config.public.ts index a9df9f6ad1e96..a962f499d566a 100644 --- a/x-pack/test/licensing_plugin/config.public.ts +++ b/x-pack/test/licensing_plugin/config.public.ts @@ -6,8 +6,7 @@ */ import path from 'path'; -// @ts-expect-error https://github.com/elastic/kibana/issues/95679 -import { KIBANA_ROOT } from '@kbn/test'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; import { FtrConfigProviderContext } from '@kbn/test'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { diff --git a/x-pack/test/plugin_functional/config.ts b/x-pack/test/plugin_functional/config.ts index a21b8f406e506..361318c0992a3 100644 --- a/x-pack/test/plugin_functional/config.ts +++ b/x-pack/test/plugin_functional/config.ts @@ -7,8 +7,7 @@ import { resolve } from 'path'; import fs from 'fs'; -// @ts-expect-error https://github.com/elastic/kibana/issues/95679 -import { KIBANA_ROOT } from '@kbn/test'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; import { FtrConfigProviderContext } from '@kbn/test'; import { services } from './services'; import { pageObjects } from './page_objects'; diff --git a/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts b/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts index d91a772ccafac..eb93b43e83bab 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint_telemetry.ts @@ -7,8 +7,7 @@ import fs from 'fs'; import Path from 'path'; -// @ts-expect-error https://github.com/elastic/kibana/issues/95679 -import { KIBANA_ROOT } from '@kbn/test'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/utils'; import { FtrProviderContext } from '../ftr_provider_context'; const TELEMETRY_API_ROOT = '/api/stats?extended=true'; From 318530ef549c6706d05c8417b9869612ac3c73e3 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Wed, 13 Jul 2022 15:58:41 -0700 Subject: [PATCH 31/96] Migrates core's client-side deprecations service to packages (#136164) * Creates packages for shared types: core-deprecations-common and core-deprecations-common-internal, moves types accordingly, updates src/core/public|server imports * Moves more internal types to package * Changes widely used internal deprecations-related types to public types, moves these to publically accessible packages * Updates import, updates bazel build file * Creates package core-deprecations-browser-internal and moves implementation and tests into package * Updates imports of public deprecations implementations * Creates package core-deprecations-browser-mocks, moves mock and deletes core-deprecations-common-internal * Updates types in src/core * Updates README's and build bazel files for core's client-side deprecations service * Updates imports * exports shared DeprecationsDetails from core/server * Adds deprecations to i18n rc * replace targetted core packages with top level packages for core in i18nrc file, cleans up tsconfig and bazel build files, addresses prefered style in core --- .i18nrc.json | 3 +- package.json | 8 ++ packages/BUILD.bazel | 8 ++ .../BUILD.bazel | 114 ++++++++++++++++++ .../README.md | 3 + .../jest.config.js | 13 ++ .../package.json | 8 ++ .../src}/deprecations_client.test.ts | 2 +- .../src}/deprecations_client.ts | 9 +- .../src/deprecations_service.ts | 29 +++++ .../src}/index.ts | 2 - .../tsconfig.json | 18 +++ .../BUILD.bazel | 110 +++++++++++++++++ .../core-deprecations-browser-mocks/README.md | 3 + .../jest.config.js | 13 ++ .../package.json | 8 ++ .../src}/deprecations_service.mock.ts | 4 +- .../src/index.ts | 9 ++ .../tsconfig.json | 18 +++ .../core-deprecations-browser/BUILD.bazel | 107 ++++++++++++++++ .../core-deprecations-browser/README.md | 3 + .../core-deprecations-browser/jest.config.js | 13 ++ .../core-deprecations-browser/package.json | 8 ++ .../src/contracts.ts | 24 +--- .../core-deprecations-browser/src/index.ts | 10 ++ .../core-deprecations-browser/src/types.ts | 13 ++ .../core-deprecations-browser/tsconfig.json | 18 +++ .../core-deprecations-common/BUILD.bazel | 106 ++++++++++++++++ .../core-deprecations-common/README.md | 3 + .../core-deprecations-common/jest.config.js | 13 ++ .../core-deprecations-common/package.json | 8 ++ .../core-deprecations-common/src/index.ts | 16 +++ .../core-deprecations-common/src/types.ts | 107 ++++++++++++++++ .../core-deprecations-common/tsconfig.json | 18 +++ src/core/public/core_system.ts | 2 +- src/core/public/index.ts | 9 +- src/core/public/mocks.ts | 4 +- .../public/plugins/plugins_service.test.ts | 2 +- .../deprecations/deprecations_factory.test.ts | 2 +- .../deprecations/deprecations_factory.ts | 7 +- .../deprecations/deprecations_registry.ts | 8 +- .../deprecations/deprecations_service.ts | 4 +- src/core/server/deprecations/index.ts | 10 +- src/core/server/deprecations/routes/get.ts | 2 +- src/core/server/deprecations/types.ts | 101 +--------------- src/core/server/index.ts | 6 +- .../deprecations/unknown_object_types.ts | 2 +- src/core/server/types.ts | 5 +- yarn.lock | 32 +++++ 49 files changed, 874 insertions(+), 171 deletions(-) create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/README.md create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/jest.config.js create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/package.json rename {src/core/public/deprecations => packages/core/deprecations/core-deprecations-browser-internal/src}/deprecations_client.test.ts (98%) rename {src/core/public/deprecations => packages/core/deprecations/core-deprecations-browser-internal/src}/deprecations_client.ts (92%) create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts rename {src/core/public/deprecations => packages/core/deprecations/core-deprecations-browser-internal/src}/index.ts (74%) create mode 100644 packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/README.md create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/jest.config.js create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/package.json rename {src/core/public/deprecations => packages/core/deprecations/core-deprecations-browser-mocks/src}/deprecations_service.mock.ts (88%) create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/src/index.ts create mode 100644 packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json create mode 100644 packages/core/deprecations/core-deprecations-browser/BUILD.bazel create mode 100644 packages/core/deprecations/core-deprecations-browser/README.md create mode 100644 packages/core/deprecations/core-deprecations-browser/jest.config.js create mode 100644 packages/core/deprecations/core-deprecations-browser/package.json rename src/core/public/deprecations/deprecations_service.ts => packages/core/deprecations/core-deprecations-browser/src/contracts.ts (60%) create mode 100644 packages/core/deprecations/core-deprecations-browser/src/index.ts create mode 100644 packages/core/deprecations/core-deprecations-browser/src/types.ts create mode 100644 packages/core/deprecations/core-deprecations-browser/tsconfig.json create mode 100644 packages/core/deprecations/core-deprecations-common/BUILD.bazel create mode 100644 packages/core/deprecations/core-deprecations-common/README.md create mode 100644 packages/core/deprecations/core-deprecations-common/jest.config.js create mode 100644 packages/core/deprecations/core-deprecations-common/package.json create mode 100644 packages/core/deprecations/core-deprecations-common/src/index.ts create mode 100644 packages/core/deprecations/core-deprecations-common/src/types.ts create mode 100644 packages/core/deprecations/core-deprecations-common/tsconfig.json diff --git a/.i18nrc.json b/.i18nrc.json index 073a413fabf80..08f2ff151b4c2 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -9,8 +9,7 @@ "console": "src/plugins/console", "core": [ "src/core", - "packages/core/i18n/core-i18n-browser-internal", - "packages/core/fatal-errors/core-fatal-errors-browser-internal" + "packages/core" ], "customIntegrations": "src/plugins/custom_integrations", "dashboard": "src/plugins/dashboard", diff --git a/package.json b/package.json index addd2cde108fb..b56a4d1e803aa 100644 --- a/package.json +++ b/package.json @@ -158,6 +158,10 @@ "@kbn/core-base-server-mocks": "link:bazel-bin/packages/core/base/core-base-server-mocks", "@kbn/core-config-server-internal": "link:bazel-bin/packages/core/config/core-config-server-internal", "@kbn/core-config-server-mocks": "link:bazel-bin/packages/core/config/core-config-server-mocks", + "@kbn/core-deprecations-browser": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser", + "@kbn/core-deprecations-browser-internal": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal", + "@kbn/core-deprecations-browser-mocks": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks", + "@kbn/core-deprecations-common": "link:bazel-bin/packages/core/deprecations/core-deprecations-common", "@kbn/core-doc-links-browser": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser", "@kbn/core-doc-links-browser-internal": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal", "@kbn/core-doc-links-browser-mocks": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-mocks", @@ -730,6 +734,10 @@ "@types/kbn__core-common-internal-base": "link:bazel-bin/packages/core/common/internal-base/npm_module_types", "@types/kbn__core-config-server-internal": "link:bazel-bin/packages/core/config/core-config-server-internal/npm_module_types", "@types/kbn__core-config-server-mocks": "link:bazel-bin/packages/core/config/core-config-server-mocks/npm_module_types", + "@types/kbn__core-deprecations-browser": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser/npm_module_types", + "@types/kbn__core-deprecations-browser-internal": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal/npm_module_types", + "@types/kbn__core-deprecations-browser-mocks": "link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks/npm_module_types", + "@types/kbn__core-deprecations-common": "link:bazel-bin/packages/core/deprecations/core-deprecations-common/npm_module_types", "@types/kbn__core-doc-links-browser": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser/npm_module_types", "@types/kbn__core-doc-links-browser-internal": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal/npm_module_types", "@types/kbn__core-doc-links-browser-mocks": "link:bazel-bin/packages/core/doc-links/core-doc-links-browser-mocks/npm_module_types", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index 8d39cf240970b..96786d77dd80f 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -27,6 +27,10 @@ filegroup( "//packages/core/base/core-base-server-internal:build", "//packages/core/base/core-base-server-mocks:build", "//packages/core/config/core-config-server-internal:build", + "//packages/core/deprecations/core-deprecations-browser-internal:build", + "//packages/core/deprecations/core-deprecations-browser-mocks:build", + "//packages/core/deprecations/core-deprecations-browser:build", + "//packages/core/deprecations/core-deprecations-common:build", "//packages/core/doc-links/core-doc-links-browser-internal:build", "//packages/core/doc-links/core-doc-links-browser-mocks:build", "//packages/core/doc-links/core-doc-links-browser:build", @@ -224,6 +228,10 @@ filegroup( "//packages/core/base/core-base-server-internal:build_types", "//packages/core/base/core-base-server-mocks:build_types", "//packages/core/config/core-config-server-internal:build_types", + "//packages/core/deprecations/core-deprecations-browser-internal:build_types", + "//packages/core/deprecations/core-deprecations-browser-mocks:build_types", + "//packages/core/deprecations/core-deprecations-browser:build_types", + "//packages/core/deprecations/core-deprecations-common:build_types", "//packages/core/doc-links/core-doc-links-browser-internal:build_types", "//packages/core/doc-links/core-doc-links-browser-mocks:build_types", "//packages/core/doc-links/core-doc-links-browser:build_types", diff --git a/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel new file mode 100644 index 0000000000000..c3f2e0f4c1a23 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/BUILD.bazel @@ -0,0 +1,114 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-deprecations-browser-internal" +PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser-internal" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "//packages/kbn-i18n", + "//packages/core/http/core-http-browser-mocks", +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//@types/react", + "//packages/kbn-i18n:npm_module_types", + "//packages/core/base/core-base-browser-internal:npm_module_types", + "//packages/core/http/core-http-browser:npm_module_types", + "//packages/core/http/core-http-browser-mocks:npm_module_types", + "//packages/core/deprecations/core-deprecations-common:npm_module_types", + "//packages/core/deprecations/core-deprecations-browser:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/deprecations/core-deprecations-browser-internal/README.md b/packages/core/deprecations/core-deprecations-browser-internal/README.md new file mode 100644 index 0000000000000..8f7b2f147deaf --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/README.md @@ -0,0 +1,3 @@ +# @kbn/core-deprecations-browser-internal + +Contains implementation and internal types for Core's client-side `deprecations` service diff --git a/packages/core/deprecations/core-deprecations-browser-internal/jest.config.js b/packages/core/deprecations/core-deprecations-browser-internal/jest.config.js new file mode 100644 index 0000000000000..c1baf6d1fdfc9 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/deprecations/core-deprecations-browser-internal'], +}; diff --git a/packages/core/deprecations/core-deprecations-browser-internal/package.json b/packages/core/deprecations/core-deprecations-browser-internal/package.json new file mode 100644 index 0000000000000..1f4a5d5531ce9 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-deprecations-browser-internal", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/src/core/public/deprecations/deprecations_client.test.ts b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.test.ts similarity index 98% rename from src/core/public/deprecations/deprecations_client.test.ts rename to packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.test.ts index 7bff04cccf323..49d9c0a23956a 100644 --- a/src/core/public/deprecations/deprecations_client.test.ts +++ b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.test.ts @@ -8,7 +8,7 @@ import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { DeprecationsClient } from './deprecations_client'; -import type { DomainDeprecationDetails } from '../../server/types'; +import type { DomainDeprecationDetails } from '@kbn/core-deprecations-common'; describe('DeprecationsClient', () => { const http = httpServiceMock.createSetupContract(); diff --git a/src/core/public/deprecations/deprecations_client.ts b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.ts similarity index 92% rename from src/core/public/deprecations/deprecations_client.ts rename to packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.ts index 80b1913fcfaf1..f3f2bd7f28e8a 100644 --- a/src/core/public/deprecations/deprecations_client.ts +++ b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_client.ts @@ -8,16 +8,17 @@ import { i18n } from '@kbn/i18n'; import type { HttpStart } from '@kbn/core-http-browser'; -import type { DomainDeprecationDetails, DeprecationsGetResponse } from '../../server/types'; +import type { + DomainDeprecationDetails, + DeprecationsGetResponse, +} from '@kbn/core-deprecations-common'; +import type { ResolveDeprecationResponse } from '@kbn/core-deprecations-browser'; /* @internal */ export interface DeprecationsClientDeps { http: Pick; } -/* @internal */ -export type ResolveDeprecationResponse = { status: 'ok' } | { status: 'fail'; reason: string }; - export class DeprecationsClient { private readonly http: Pick; constructor({ http }: DeprecationsClientDeps) { diff --git a/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts new file mode 100644 index 0000000000000..edaf5f7f27be0 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { CoreService } from '@kbn/core-base-browser-internal'; +import type { DeprecationsServiceStart } from '@kbn/core-deprecations-browser'; +import type { HttpStart } from '@kbn/core-http-browser'; +import { DeprecationsClient } from './deprecations_client'; + +export class DeprecationsService implements CoreService { + public setup(): void {} + + public start({ http }: { http: HttpStart }): DeprecationsServiceStart { + const deprecationsClient = new DeprecationsClient({ http }); + + return { + getAllDeprecations: deprecationsClient.getAllDeprecations, + getDeprecations: deprecationsClient.getDeprecations, + isDeprecationResolvable: deprecationsClient.isDeprecationResolvable, + resolveDeprecation: deprecationsClient.resolveDeprecation, + }; + } + + public stop(): void {} +} diff --git a/src/core/public/deprecations/index.ts b/packages/core/deprecations/core-deprecations-browser-internal/src/index.ts similarity index 74% rename from src/core/public/deprecations/index.ts rename to packages/core/deprecations/core-deprecations-browser-internal/src/index.ts index 092cbed613ac2..758a941ee3a04 100644 --- a/src/core/public/deprecations/index.ts +++ b/packages/core/deprecations/core-deprecations-browser-internal/src/index.ts @@ -7,5 +7,3 @@ */ export { DeprecationsService } from './deprecations_service'; -export type { DeprecationsServiceStart } from './deprecations_service'; -export type { ResolveDeprecationResponse } from './deprecations_client'; diff --git a/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json b/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-internal/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel new file mode 100644 index 0000000000000..8c840af011078 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/BUILD.bazel @@ -0,0 +1,110 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-deprecations-browser-mocks" +PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser-mocks" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "//packages/core/deprecations/core-deprecations-browser-internal" +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//@types/react", + "//packages/kbn-utility-types:npm_module_types", + "//packages/core/deprecations/core-deprecations-browser:npm_module_types", + "//packages/core/deprecations/core-deprecations-browser-internal:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/README.md b/packages/core/deprecations/core-deprecations-browser-mocks/README.md new file mode 100644 index 0000000000000..a11bbcc144ebb --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/README.md @@ -0,0 +1,3 @@ +# @kbn/core-deprecations-browser-mocks + +Contains mocks for Core's client-side `deprecations` service diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/jest.config.js b/packages/core/deprecations/core-deprecations-browser-mocks/jest.config.js new file mode 100644 index 0000000000000..4bfb844cf8fa3 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/deprecations/core-deprecations-browser-mocks'], +}; diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/package.json b/packages/core/deprecations/core-deprecations-browser-mocks/package.json new file mode 100644 index 0000000000000..47b5aa1f0add2 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-deprecations-browser-mocks", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/src/core/public/deprecations/deprecations_service.mock.ts b/packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts similarity index 88% rename from src/core/public/deprecations/deprecations_service.mock.ts rename to packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts index 5bcd52982d513..f742f84036ea6 100644 --- a/src/core/public/deprecations/deprecations_service.mock.ts +++ b/packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts @@ -7,8 +7,8 @@ */ import type { PublicMethodsOf } from '@kbn/utility-types'; -import { DeprecationsService } from './deprecations_service'; -import type { DeprecationsServiceStart } from './deprecations_service'; +import { DeprecationsService } from '@kbn/core-deprecations-browser-internal'; +import type { DeprecationsServiceStart } from '@kbn/core-deprecations-browser'; const createServiceMock = (): jest.Mocked => ({ getAllDeprecations: jest.fn().mockResolvedValue([]), diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/src/index.ts b/packages/core/deprecations/core-deprecations-browser-mocks/src/index.ts new file mode 100644 index 0000000000000..1239090c387ad --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/src/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { deprecationsServiceMock } from './deprecations_service.mock'; diff --git a/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json b/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser-mocks/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/deprecations/core-deprecations-browser/BUILD.bazel b/packages/core/deprecations/core-deprecations-browser/BUILD.bazel new file mode 100644 index 0000000000000..85a9e6c411c21 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/BUILD.bazel @@ -0,0 +1,107 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-deprecations-browser" +PKG_REQUIRE_NAME = "@kbn/core-deprecations-browser" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//@types/react", + "//packages/core/deprecations/core-deprecations-common:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/deprecations/core-deprecations-browser/README.md b/packages/core/deprecations/core-deprecations-browser/README.md new file mode 100644 index 0000000000000..3c7bae6833733 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/README.md @@ -0,0 +1,3 @@ +# @kbn/core-deprecations-browser + +Contains public types for Core's client-side `deprecations` service diff --git a/packages/core/deprecations/core-deprecations-browser/jest.config.js b/packages/core/deprecations/core-deprecations-browser/jest.config.js new file mode 100644 index 0000000000000..9f08c08e4fb41 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/deprecations/core-deprecations-browser'], +}; diff --git a/packages/core/deprecations/core-deprecations-browser/package.json b/packages/core/deprecations/core-deprecations-browser/package.json new file mode 100644 index 0000000000000..d4e5346ab80a8 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-deprecations-browser", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/src/core/public/deprecations/deprecations_service.ts b/packages/core/deprecations/core-deprecations-browser/src/contracts.ts similarity index 60% rename from src/core/public/deprecations/deprecations_service.ts rename to packages/core/deprecations/core-deprecations-browser/src/contracts.ts index bcc701cc634a0..c8e8d08e79848 100644 --- a/src/core/public/deprecations/deprecations_service.ts +++ b/packages/core/deprecations/core-deprecations-browser/src/contracts.ts @@ -5,11 +5,8 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - -import type { CoreService } from '@kbn/core-base-browser-internal'; -import type { HttpStart } from '@kbn/core-http-browser'; -import { DeprecationsClient, ResolveDeprecationResponse } from './deprecations_client'; -import type { DomainDeprecationDetails } from '../../server/types'; +import type { DomainDeprecationDetails } from '@kbn/core-deprecations-common'; +import type { ResolveDeprecationResponse } from './types'; /** * DeprecationsService provides methods to fetch domain deprecation details from @@ -41,20 +38,3 @@ export interface DeprecationsServiceStart { */ resolveDeprecation: (details: DomainDeprecationDetails) => Promise; } - -export class DeprecationsService implements CoreService { - public setup(): void {} - - public start({ http }: { http: HttpStart }): DeprecationsServiceStart { - const deprecationsClient = new DeprecationsClient({ http }); - - return { - getAllDeprecations: deprecationsClient.getAllDeprecations, - getDeprecations: deprecationsClient.getDeprecations, - isDeprecationResolvable: deprecationsClient.isDeprecationResolvable, - resolveDeprecation: deprecationsClient.resolveDeprecation, - }; - } - - public stop(): void {} -} diff --git a/packages/core/deprecations/core-deprecations-browser/src/index.ts b/packages/core/deprecations/core-deprecations-browser/src/index.ts new file mode 100644 index 0000000000000..4ae415ba26f5e --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/src/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { DeprecationsServiceStart } from './contracts'; +export type { ResolveDeprecationResponse } from './types'; diff --git a/packages/core/deprecations/core-deprecations-browser/src/types.ts b/packages/core/deprecations/core-deprecations-browser/src/types.ts new file mode 100644 index 0000000000000..a51174445edac --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/src/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/** + * Response from correctiveActions.api call from automatically resolving the deprecation + * @public + */ +export type ResolveDeprecationResponse = { status: 'ok' } | { status: 'fail'; reason: string }; diff --git a/packages/core/deprecations/core-deprecations-browser/tsconfig.json b/packages/core/deprecations/core-deprecations-browser/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/deprecations/core-deprecations-browser/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/deprecations/core-deprecations-common/BUILD.bazel b/packages/core/deprecations/core-deprecations-common/BUILD.bazel new file mode 100644 index 0000000000000..7bddbc3cebaf7 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/BUILD.bazel @@ -0,0 +1,106 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-deprecations-common" +PKG_REQUIRE_NAME = "@kbn/core-deprecations-common" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//@types/react" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/deprecations/core-deprecations-common/README.md b/packages/core/deprecations/core-deprecations-common/README.md new file mode 100644 index 0000000000000..503006503c060 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/README.md @@ -0,0 +1,3 @@ +# @kbn/core-deprecations-common + +Contains public shared types for Core's `deprecations` service diff --git a/packages/core/deprecations/core-deprecations-common/jest.config.js b/packages/core/deprecations/core-deprecations-common/jest.config.js new file mode 100644 index 0000000000000..3a20374e4f7ad --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/deprecations/core-deprecations-common'], +}; diff --git a/packages/core/deprecations/core-deprecations-common/package.json b/packages/core/deprecations/core-deprecations-common/package.json new file mode 100644 index 0000000000000..66dd322302c60 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-deprecations-common", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/core/deprecations/core-deprecations-common/src/index.ts b/packages/core/deprecations/core-deprecations-common/src/index.ts new file mode 100644 index 0000000000000..3013ad0f32281 --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/src/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { + BaseDeprecationDetails, + ConfigDeprecationDetails, + FeatureDeprecationDetails, + DeprecationsDetails, + DomainDeprecationDetails, + DeprecationsGetResponse, +} from './types'; diff --git a/packages/core/deprecations/core-deprecations-common/src/types.ts b/packages/core/deprecations/core-deprecations-common/src/types.ts new file mode 100644 index 0000000000000..8dc7a08923bad --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/src/types.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/** + * Base properties shared by all types of deprecations + * + * @public + */ +export interface BaseDeprecationDetails { + /** + * The title of the deprecation. + * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` + */ + title: string; + /** + * The description message to be displayed for the deprecation. + * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` + */ + message: string; + /** + * levels: + * - warning: will not break deployment upon upgrade + * - critical: needs to be addressed before upgrade. + * - fetch_error: Deprecations service failed to grab the deprecation details for the domain. + */ + level: 'warning' | 'critical' | 'fetch_error'; + /** + * (optional) Used to identify between different deprecation types. + * Example use case: in Upgrade Assistant, we may want to allow the user to sort by + * deprecation type or show each type in a separate tab. + * + * Feel free to add new types if necessary. + * Predefined types are necessary to reduce having similar definitions with different keywords + * across kibana deprecations. + */ + deprecationType?: 'config' | 'feature'; + /** (optional) link to the documentation for more details on the deprecation. */ + documentationUrl?: string; + /** (optional) specify the fix for this deprecation requires a full kibana restart. */ + requireRestart?: boolean; + /** corrective action needed to fix this deprecation. */ + correctiveActions: { + /** + * (optional) The api to be called to automatically fix the deprecation + * Each domain should implement a POST/PUT route for their plugin to + * handle their deprecations. + */ + api?: { + /** Kibana route path. Passing a query string is allowed */ + path: string; + /** Kibana route method: 'POST' or 'PUT'. */ + method: 'POST' | 'PUT'; + /** Additional details to be passed to the route. */ + body?: { + [key: string]: any; + }; + /* Allow to omit context in the request of the body */ + omitContextFromBody?: boolean; + }; + /** + * Specify a list of manual steps users need to follow to + * fix the deprecation before upgrade. Required even if an API + * corrective action is set in case the API fails. + * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` + */ + manualSteps: string[]; + }; +} + +/** + * @public + */ +export interface ConfigDeprecationDetails extends BaseDeprecationDetails { + configPath: string; + deprecationType: 'config'; +} + +/** + * @public + */ +export interface FeatureDeprecationDetails extends BaseDeprecationDetails { + deprecationType?: 'feature' | undefined; +} + +/** + * @public + */ +export type DeprecationsDetails = ConfigDeprecationDetails | FeatureDeprecationDetails; + +/** + * @public + */ +export type DomainDeprecationDetails = DeprecationsDetails & { + domainId: string; +}; + +/** + * @public + */ +export interface DeprecationsGetResponse { + deprecations: DomainDeprecationDetails[]; +} diff --git a/packages/core/deprecations/core-deprecations-common/tsconfig.json b/packages/core/deprecations/core-deprecations-common/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/deprecations/core-deprecations-common/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/src/core/public/core_system.ts b/src/core/public/core_system.ts index 636c44dd3a6e0..834927ae7f541 100644 --- a/src/core/public/core_system.ts +++ b/src/core/public/core_system.ts @@ -23,6 +23,7 @@ import { ExecutionContextService } from '@kbn/core-execution-context-browser-int import type { FatalErrorsSetup } from '@kbn/core-fatal-errors-browser'; import { FatalErrorsService } from '@kbn/core-fatal-errors-browser-internal'; import { HttpService } from '@kbn/core-http-browser-internal'; +import { DeprecationsService } from '@kbn/core-deprecations-browser-internal'; import { CoreSetup, CoreStart } from '.'; import { ChromeService } from './chrome'; import { NotificationsService } from './notifications'; @@ -33,7 +34,6 @@ import { ApplicationService } from './application'; import { RenderingService } from './rendering'; import { SavedObjectsService } from './saved_objects'; import { IntegrationsService } from './integrations'; -import { DeprecationsService } from './deprecations'; import { CoreApp } from './core_app'; import type { InternalApplicationSetup, InternalApplicationStart } from './application/types'; import { fetchOptionalMemoryInfo } from './fetch_optional_memory_info'; diff --git a/src/core/public/index.ts b/src/core/public/index.ts index 5e224c38a2dc4..b3ffc84a51f58 100644 --- a/src/core/public/index.ts +++ b/src/core/public/index.ts @@ -42,6 +42,7 @@ import type { FatalErrorsStart, FatalErrorInfo, } from '@kbn/core-fatal-errors-browser'; +import type { DeprecationsServiceStart } from '@kbn/core-deprecations-browser'; import type { ChromeBadge, ChromeBreadcrumb, @@ -75,10 +76,9 @@ import type { import type { UiSettingsState, IUiSettingsClient } from './ui_settings'; import type { ApplicationSetup, Capabilities, ApplicationStart } from './application'; import type { SavedObjectsStart } from './saved_objects'; -import type { DeprecationsServiceStart } from './deprecations'; export type { PackageInfo, EnvironmentMode } from '@kbn/config'; -export type { DomainDeprecationDetails } from '../server/types'; +export type { DomainDeprecationDetails } from '@kbn/core-deprecations-common'; export type { CoreContext } from '@kbn/core-base-browser-internal'; export type { CoreSystem } from './core_system'; export { DEFAULT_APP_CATEGORIES, APP_WRAPPER_CLASS } from '../utils'; @@ -210,7 +210,10 @@ export type { export type { ThemeServiceSetup, ThemeServiceStart, CoreTheme } from '@kbn/core-theme-browser'; -export type { DeprecationsServiceStart, ResolveDeprecationResponse } from './deprecations'; +export type { + DeprecationsServiceStart, + ResolveDeprecationResponse, +} from '@kbn/core-deprecations-browser'; export type { MountPoint, UnmountCallback, PublicUiSettingsParams } from './types'; diff --git a/src/core/public/mocks.ts b/src/core/public/mocks.ts index b3070d46feee8..97f3af9f33cca 100644 --- a/src/core/public/mocks.ts +++ b/src/core/public/mocks.ts @@ -17,6 +17,7 @@ import { executionContextServiceMock } from '@kbn/core-execution-context-browser import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { fatalErrorsServiceMock } from '@kbn/core-fatal-errors-browser-mocks'; import { httpServiceMock } from '@kbn/core-http-browser-mocks'; +import { deprecationsServiceMock } from '@kbn/core-deprecations-browser-mocks'; import type { PluginInitializerContext, AppMountParameters } from '.'; // Import values from their individual modules instead. import { ScopedHistory } from './application'; @@ -26,7 +27,6 @@ import { notificationServiceMock } from './notifications/notifications_service.m import { overlayServiceMock } from './overlays/overlay_service.mock'; import { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; import { savedObjectsServiceMock } from './saved_objects/saved_objects_service.mock'; -import { deprecationsServiceMock } from './deprecations/deprecations_service.mock'; export { injectedMetadataServiceMock } from '@kbn/core-injected-metadata-browser-mocks'; export { docLinksServiceMock } from '@kbn/core-doc-links-browser-mocks'; @@ -43,7 +43,7 @@ export { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; export { savedObjectsServiceMock } from './saved_objects/saved_objects_service.mock'; export { scopedHistoryMock } from './application/scoped_history.mock'; export { applicationServiceMock } from './application/application_service.mock'; -export { deprecationsServiceMock } from './deprecations/deprecations_service.mock'; +export { deprecationsServiceMock } from '@kbn/core-deprecations-browser-mocks'; function createCoreSetupMock({ basePath = '', diff --git a/src/core/public/plugins/plugins_service.test.ts b/src/core/public/plugins/plugins_service.test.ts index d956b0e8599a3..d6b7810f44cd6 100644 --- a/src/core/public/plugins/plugins_service.test.ts +++ b/src/core/public/plugins/plugins_service.test.ts @@ -38,7 +38,7 @@ import { uiSettingsServiceMock } from '../ui_settings/ui_settings_service.mock'; import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import type { CoreSetup, CoreStart, PluginInitializerContext } from '..'; import { savedObjectsServiceMock } from '../saved_objects/saved_objects_service.mock'; -import { deprecationsServiceMock } from '../deprecations/deprecations_service.mock'; +import { deprecationsServiceMock } from '@kbn/core-deprecations-browser-mocks'; export let mockPluginInitializers: Map; diff --git a/src/core/server/deprecations/deprecations_factory.test.ts b/src/core/server/deprecations/deprecations_factory.test.ts index b05a3ea3ce4dc..3ae83a1886e5c 100644 --- a/src/core/server/deprecations/deprecations_factory.test.ts +++ b/src/core/server/deprecations/deprecations_factory.test.ts @@ -9,7 +9,7 @@ import type { GetDeprecationsContext } from './types'; import { DeprecationsFactory, DeprecationsFactoryConfig } from './deprecations_factory'; import { loggerMock } from '@kbn/logging-mocks'; -import { DeprecationsDetails } from './types'; +import type { DeprecationsDetails } from '@kbn/core-deprecations-common'; describe('DeprecationsFactory', () => { let logger: ReturnType; diff --git a/src/core/server/deprecations/deprecations_factory.ts b/src/core/server/deprecations/deprecations_factory.ts index d36d61fa2eab2..514817ed1c12a 100644 --- a/src/core/server/deprecations/deprecations_factory.ts +++ b/src/core/server/deprecations/deprecations_factory.ts @@ -8,12 +8,9 @@ import { i18n } from '@kbn/i18n'; import type { Logger } from '@kbn/logging'; +import type { DomainDeprecationDetails, DeprecationsDetails } from '@kbn/core-deprecations-common'; import { DeprecationsRegistry } from './deprecations_registry'; -import type { - DomainDeprecationDetails, - DeprecationsDetails, - GetDeprecationsContext, -} from './types'; +import type { GetDeprecationsContext } from './types'; export interface DeprecationsFactoryDeps { logger: Logger; diff --git a/src/core/server/deprecations/deprecations_registry.ts b/src/core/server/deprecations/deprecations_registry.ts index e979bb94712e6..6e59504d0d1d7 100644 --- a/src/core/server/deprecations/deprecations_registry.ts +++ b/src/core/server/deprecations/deprecations_registry.ts @@ -7,12 +7,8 @@ */ import { withTimeout, isPromise } from '@kbn/std'; -import type { - DeprecationsDetails, - RegisterDeprecationsConfig, - GetDeprecationsContext, -} from './types'; - +import type { DeprecationsDetails } from '@kbn/core-deprecations-common'; +import type { RegisterDeprecationsConfig, GetDeprecationsContext } from './types'; const MsInSec = 1000; export class DeprecationsRegistry { diff --git a/src/core/server/deprecations/deprecations_service.ts b/src/core/server/deprecations/deprecations_service.ts index 6d8aef2ef84e8..7b07b4c1d10de 100644 --- a/src/core/server/deprecations/deprecations_service.ts +++ b/src/core/server/deprecations/deprecations_service.ts @@ -7,13 +7,13 @@ */ import { firstValueFrom } from 'rxjs'; - import type { Logger } from '@kbn/logging'; import type { IConfigService } from '@kbn/config'; import type { CoreContext, CoreService } from '@kbn/core-base-server-internal'; +import { DomainDeprecationDetails } from '@kbn/core-deprecations-common'; import type { InternalHttpServiceSetup } from '@kbn/core-http-server-internal'; import { DeprecationsFactory } from './deprecations_factory'; -import { DomainDeprecationDetails, RegisterDeprecationsConfig } from './types'; +import { RegisterDeprecationsConfig } from './types'; import { registerRoutes } from './routes'; import { config as deprecationConfig, DeprecationConfigType } from './deprecation_config'; import { IScopedClusterClient } from '../elasticsearch/client'; diff --git a/src/core/server/deprecations/index.ts b/src/core/server/deprecations/index.ts index 9245179d3099a..db6fe8193867d 100644 --- a/src/core/server/deprecations/index.ts +++ b/src/core/server/deprecations/index.ts @@ -6,15 +6,7 @@ * Side Public License, v 1. */ -export type { - BaseDeprecationDetails, - DeprecationsDetails, - ConfigDeprecationDetails, - FeatureDeprecationDetails, - GetDeprecationsContext, - RegisterDeprecationsConfig, - DeprecationsGetResponse, -} from './types'; +export type { GetDeprecationsContext, RegisterDeprecationsConfig } from './types'; export type { DeprecationsServiceSetup, diff --git a/src/core/server/deprecations/routes/get.ts b/src/core/server/deprecations/routes/get.ts index a3ea08f04d706..1ae70e47c2b62 100644 --- a/src/core/server/deprecations/routes/get.ts +++ b/src/core/server/deprecations/routes/get.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { DeprecationsGetResponse } from '../types'; +import type { DeprecationsGetResponse } from '@kbn/core-deprecations-common'; import type { InternalDeprecationRouter } from '../internal_types'; export const registerGetRoute = (router: InternalDeprecationRouter) => { diff --git a/src/core/server/deprecations/types.ts b/src/core/server/deprecations/types.ts index 3990a76f7578e..16104c6f9cc57 100644 --- a/src/core/server/deprecations/types.ts +++ b/src/core/server/deprecations/types.ts @@ -7,102 +7,10 @@ */ import type { MaybePromise } from '@kbn/utility-types'; +import type { DeprecationsDetails } from '@kbn/core-deprecations-common'; import type { SavedObjectsClientContract } from '../saved_objects/types'; import type { IScopedClusterClient } from '../elasticsearch'; -/** - * Base properties shared by all types of deprecations - * - * @public - */ -export interface BaseDeprecationDetails { - /** - * The title of the deprecation. - * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` - */ - title: string; - /** - * The description message to be displayed for the deprecation. - * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` - */ - message: string; - /** - * levels: - * - warning: will not break deployment upon upgrade - * - critical: needs to be addressed before upgrade. - * - fetch_error: Deprecations service failed to grab the deprecation details for the domain. - */ - level: 'warning' | 'critical' | 'fetch_error'; - /** - * (optional) Used to identify between different deprecation types. - * Example use case: in Upgrade Assistant, we may want to allow the user to sort by - * deprecation type or show each type in a separate tab. - * - * Feel free to add new types if necessary. - * Predefined types are necessary to reduce having similar definitions with different keywords - * across kibana deprecations. - */ - deprecationType?: 'config' | 'feature'; - /** (optional) link to the documentation for more details on the deprecation. */ - documentationUrl?: string; - /** (optional) specify the fix for this deprecation requires a full kibana restart. */ - requireRestart?: boolean; - /** corrective action needed to fix this deprecation. */ - correctiveActions: { - /** - * (optional) The api to be called to automatically fix the deprecation - * Each domain should implement a POST/PUT route for their plugin to - * handle their deprecations. - */ - api?: { - /** Kibana route path. Passing a query string is allowed */ - path: string; - /** Kibana route method: 'POST' or 'PUT'. */ - method: 'POST' | 'PUT'; - /** Additional details to be passed to the route. */ - body?: { - [key: string]: any; - }; - /* Allow to omit context in the request of the body */ - omitContextFromBody?: boolean; - }; - /** - * Specify a list of manual steps users need to follow to - * fix the deprecation before upgrade. Required even if an API - * corrective action is set in case the API fails. - * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` - */ - manualSteps: string[]; - }; -} - -/** - * @public - */ -export interface ConfigDeprecationDetails extends BaseDeprecationDetails { - configPath: string; - deprecationType: 'config'; -} - -/** - * @public - */ -export interface FeatureDeprecationDetails extends BaseDeprecationDetails { - deprecationType?: 'feature' | undefined; -} - -/** - * @public - */ -export type DeprecationsDetails = ConfigDeprecationDetails | FeatureDeprecationDetails; - -/** - * @internal - */ -export type DomainDeprecationDetails = DeprecationsDetails & { - domainId: string; -}; - /** * @public */ @@ -117,10 +25,3 @@ export interface GetDeprecationsContext { esClient: IScopedClusterClient; savedObjectsClient: SavedObjectsClientContract; } - -/** - * @public - */ -export interface DeprecationsGetResponse { - deprecations: DomainDeprecationDetails[]; -} diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 9dc6a88bacca5..82d98f875241e 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -405,17 +405,13 @@ export { EventLoopDelaysMonitor } from './metrics'; export type { I18nServiceSetup } from './i18n'; export type { - BaseDeprecationDetails, - DeprecationsDetails, - ConfigDeprecationDetails, - FeatureDeprecationDetails, RegisterDeprecationsConfig, GetDeprecationsContext, DeprecationsServiceSetup, DeprecationsClient, DeprecationsRequestHandlerContext, } from './deprecations'; - +export type { DeprecationsDetails } from '@kbn/core-deprecations-common'; export type { AppCategory } from '../types'; export { DEFAULT_APP_CATEGORIES, APP_WRAPPER_CLASS } from '../utils'; diff --git a/src/core/server/saved_objects/deprecations/unknown_object_types.ts b/src/core/server/saved_objects/deprecations/unknown_object_types.ts index 9e48c84860b48..d8762ebcfd1bd 100644 --- a/src/core/server/saved_objects/deprecations/unknown_object_types.ts +++ b/src/core/server/saved_objects/deprecations/unknown_object_types.ts @@ -7,7 +7,7 @@ */ import { i18n } from '@kbn/i18n'; -import type { DeprecationsDetails } from '../../deprecations'; +import type { DeprecationsDetails } from '@kbn/core-deprecations-common'; import { IScopedClusterClient } from '../../elasticsearch'; import { getAggregatedTypesDocuments } from '../migrations/actions/check_for_unknown_docs'; import { addExcludedTypesToBoolQuery } from '../migrations/model/helpers'; diff --git a/src/core/server/types.ts b/src/core/server/types.ts index 0e49ebbf851d6..1bcdd1ac09535 100644 --- a/src/core/server/types.ts +++ b/src/core/server/types.ts @@ -42,6 +42,9 @@ export type { SavedObjectReferenceWithContext, SavedObjectsCollectMultiNamespaceReferencesResponse, } from './saved_objects/service'; -export type { DomainDeprecationDetails, DeprecationsGetResponse } from './deprecations/types'; +export type { + DomainDeprecationDetails, + DeprecationsGetResponse, +} from '@kbn/core-deprecations-common'; export * from './ui_settings/types'; export type { ExternalUrlConfig } from '@kbn/core-http-server-internal'; diff --git a/yarn.lock b/yarn.lock index 645740bce7b48..47a0d08a5b1c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3104,6 +3104,22 @@ version "0.0.0" uid "" +"@kbn/core-deprecations-browser-internal@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal": + version "0.0.0" + uid "" + +"@kbn/core-deprecations-browser-mocks@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks": + version "0.0.0" + uid "" + +"@kbn/core-deprecations-browser@link:bazel-bin/packages/core/deprecations/core-deprecations-browser": + version "0.0.0" + uid "" + +"@kbn/core-deprecations-common@link:bazel-bin/packages/core/deprecations/core-deprecations-common": + version "0.0.0" + uid "" + "@kbn/core-doc-links-browser-internal@link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal": version "0.0.0" uid "" @@ -6723,6 +6739,22 @@ version "0.0.0" uid "" +"@types/kbn__core-deprecations-browser-internal@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-internal/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-deprecations-browser-mocks@link:bazel-bin/packages/core/deprecations/core-deprecations-browser-mocks/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-deprecations-browser@link:bazel-bin/packages/core/deprecations/core-deprecations-browser/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-deprecations-common@link:bazel-bin/packages/core/deprecations/core-deprecations-common/npm_module_types": + version "0.0.0" + uid "" + "@types/kbn__core-doc-links-browser-internal@link:bazel-bin/packages/core/doc-links/core-doc-links-browser-internal/npm_module_types": version "0.0.0" uid "" From 5a09b74cef9ec7cc4db9f862814f21a875ae206a Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 13 Jul 2022 19:02:41 -0400 Subject: [PATCH 32/96] [Fleet] Remove licence restrictions for bulk reassign and bulk unenroll (#136334) --- x-pack/plugins/fleet/server/routes/agent/handlers.ts | 8 -------- .../plugins/fleet/server/routes/agent/unenroll_handler.ts | 8 -------- 2 files changed, 16 deletions(-) diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index 8f5797d0d3cf3..7a10a50e2fb7b 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -29,7 +29,6 @@ import type { PostBulkUpdateAgentTagsRequestSchema, } from '../../types'; import { defaultIngestErrorHandler } from '../../errors'; -import { licenseService } from '../../services'; import * as AgentService from '../../services/agents'; export const getAgentHandler: RequestHandler< @@ -214,13 +213,6 @@ export const postBulkAgentsReassignHandler: RequestHandler< undefined, TypeOf > = async (context, request, response) => { - if (!licenseService.isGoldPlus()) { - return response.customError({ - statusCode: 403, - body: { message: 'Requires Gold license' }, - }); - } - const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; diff --git a/x-pack/plugins/fleet/server/routes/agent/unenroll_handler.ts b/x-pack/plugins/fleet/server/routes/agent/unenroll_handler.ts index 257112dc6872d..b6e398d269a6f 100644 --- a/x-pack/plugins/fleet/server/routes/agent/unenroll_handler.ts +++ b/x-pack/plugins/fleet/server/routes/agent/unenroll_handler.ts @@ -16,7 +16,6 @@ import type { PostAgentUnenrollRequestSchema, PostBulkAgentUnenrollRequestSchema, } from '../../types'; -import { licenseService } from '../../services'; import * as AgentService from '../../services/agents'; import { defaultIngestErrorHandler } from '../../errors'; @@ -46,13 +45,6 @@ export const postBulkAgentsUnenrollHandler: RequestHandler< undefined, TypeOf > = async (context, request, response) => { - if (!licenseService.isGoldPlus()) { - return response.customError({ - statusCode: 403, - body: { message: 'Requires Gold license' }, - }); - } - const coreContext = await context.core; const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; From 65e307086fceceeac30e13142523abeedd6cdf6c Mon Sep 17 00:00:00 2001 From: Muhammad Ibragimov <53621505+mibragimov@users.noreply.github.com> Date: Thu, 14 Jul 2022 08:53:51 +0500 Subject: [PATCH 33/96] [Console] Handle encoded characters in API requests (#135441) * [Console] Handle encoded characters in API requests * Add a functional test for requests with query params Co-authored-by: Muhammad Ibragimov --- .../network_request_status_bar.tsx | 5 +- .../console/server/lib/proxy_request.test.ts | 113 ++++++++++-------- .../console/server/lib/proxy_request.ts | 27 ++--- .../server/lib/utils/encode_path.test.ts | 37 ++++++ .../console/server/lib/utils/encode_path.ts | 28 +++++ src/plugins/console/server/lib/utils/index.ts | 9 ++ .../api/console/proxy/create_handler.ts | 5 + test/functional/apps/console/_console.ts | 16 +++ test/functional/page_objects/console_page.ts | 6 + 9 files changed, 172 insertions(+), 74 deletions(-) create mode 100644 src/plugins/console/server/lib/utils/encode_path.test.ts create mode 100644 src/plugins/console/server/lib/utils/encode_path.ts create mode 100644 src/plugins/console/server/lib/utils/index.ts diff --git a/src/plugins/console/public/application/components/network_request_status_bar/network_request_status_bar.tsx b/src/plugins/console/public/application/components/network_request_status_bar/network_request_status_bar.tsx index d5d8d97a4712a..320b0bbfee473 100644 --- a/src/plugins/console/public/application/components/network_request_status_bar/network_request_status_bar.tsx +++ b/src/plugins/console/public/application/components/network_request_status_bar/network_request_status_bar.tsx @@ -80,7 +80,10 @@ export const NetworkRequestStatusBar: FunctionComponent = ({ }`} } > - + {/* Use   to ensure that no matter the width we don't allow line breaks */} {statusCode} - {statusText} diff --git a/src/plugins/console/server/lib/proxy_request.test.ts b/src/plugins/console/server/lib/proxy_request.test.ts index 98c63d9685c87..10f43e0a8f11b 100644 --- a/src/plugins/console/server/lib/proxy_request.test.ts +++ b/src/plugins/console/server/lib/proxy_request.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import http, { ClientRequest } from 'http'; +import http, { ClientRequest, OutgoingHttpHeaders } from 'http'; import * as sinon from 'sinon'; import { proxyRequest } from './proxy_request'; import { URL } from 'url'; @@ -29,6 +29,28 @@ describe(`Console's send request`, () => { fakeRequest = null as any; }); + const sendProxyRequest = async ({ + headers = {}, + uri = new URL('http://noone.nowhere.none'), + timeout = 3000, + requestPath = '', + }: { + headers?: OutgoingHttpHeaders; + uri?: URL; + timeout?: number; + requestPath?: string; + }) => { + return await proxyRequest({ + agent: null as any, + headers, + method: 'get', + payload: null as any, + uri, + timeout, + requestPath, + }); + }; + it('correctly implements timeout and abort mechanism', async () => { fakeRequest = { destroy: sinon.stub(), @@ -36,14 +58,7 @@ describe(`Console's send request`, () => { once() {}, } as any; try { - await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 0, // immediately timeout - uri: new URL('http://noone.nowhere.none'), - }); + await sendProxyRequest({ timeout: 0 }); // immediately timeout fail('Should not reach here!'); } catch (e) { expect(e.message).toEqual('Client request timeout'); @@ -63,16 +78,9 @@ describe(`Console's send request`, () => { } as any; // Don't set a host header this time - const result1 = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL('http://noone.nowhere.none'), - }); + const defaultResult = await sendProxyRequest({}); - expect(result1).toEqual('done'); + expect(defaultResult).toEqual('done'); const [httpRequestOptions1] = stub.firstCall.args; @@ -83,16 +91,9 @@ describe(`Console's send request`, () => { }); // Set a host header - const result2 = await proxyRequest({ - agent: null as any, - headers: { Host: 'myhost' }, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL('http://noone.nowhere.none'), - }); + const resultWithHostHeader = await sendProxyRequest({ headers: { Host: 'myhost' } }); - expect(result2).toEqual('done'); + expect(resultWithHostHeader).toEqual('done'); const [httpRequestOptions2] = stub.secondCall.args; expect((httpRequestOptions2 as any).headers).toEqual({ @@ -102,7 +103,7 @@ describe(`Console's send request`, () => { }); }); - describe('with percent-encoded uri pathname', () => { + describe('with request path', () => { beforeEach(() => { fakeRequest = { abort: sinon.stub(), @@ -115,39 +116,45 @@ describe(`Console's send request`, () => { } as any; }); - it('should decode percent-encoded uri pathname and encode it correctly', async () => { - const uri = new URL( - `http://noone.nowhere.none/%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23` - ); - const result = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, + const verifyRequestPath = async ({ + initialPath, + expectedPath, + uri, + }: { + initialPath: string; + expectedPath: string; + uri?: URL; + }) => { + const result = await sendProxyRequest({ + requestPath: initialPath, uri, }); - expect(result).toEqual('done'); const [httpRequestOptions] = stub.firstCall.args; - expect((httpRequestOptions as any).path).toEqual( - '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23' - ); + expect((httpRequestOptions as any).path).toEqual(expectedPath); + }; + + it('should correctly encode invalid URL characters included in path', async () => { + await verifyRequestPath({ + initialPath: '%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23', + expectedPath: + '%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23', + }); }); - it('should issue request with date-math format', async () => { - const result = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL(`http://noone.nowhere.none/%3Cmy-index-%7Bnow%2Fd%7D%3E`), + it('should not encode the path if it is encoded', async () => { + await verifyRequestPath({ + initialPath: '%3Cmy-index-%7Bnow%2Fd%7D%3E', + expectedPath: '%3Cmy-index-%7Bnow%2Fd%7D%3E', }); + }); - expect(result).toEqual('done'); - const [httpRequestOptions] = stub.firstCall.args; - expect((httpRequestOptions as any).path).toEqual('/%3Cmy-index-%7Bnow%2Fd%7D%3E'); + it('should correctly encode path with query params', async () => { + await verifyRequestPath({ + initialPath: '_index/.test', + uri: new URL('http://noone.nowhere.none/_index/.test?q=something&v=something'), + expectedPath: '_index/.test?q=something&v=something', + }); }); }); }); diff --git a/src/plugins/console/server/lib/proxy_request.ts b/src/plugins/console/server/lib/proxy_request.ts index 4a8839d1d8583..35452b4f99703 100644 --- a/src/plugins/console/server/lib/proxy_request.ts +++ b/src/plugins/console/server/lib/proxy_request.ts @@ -11,8 +11,9 @@ import https from 'https'; import net from 'net'; import stream from 'stream'; import Boom from '@hapi/boom'; -import { URL, URLSearchParams } from 'url'; -import { trimStart } from 'lodash'; +import { URL } from 'url'; + +import { encodePath } from './utils'; interface Args { method: 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head'; @@ -22,6 +23,7 @@ interface Args { timeout: number; headers: http.OutgoingHttpHeaders; rejectUnauthorized?: boolean; + requestPath: string; } /** @@ -31,22 +33,6 @@ interface Args { const sanitizeHostname = (hostName: string): string => hostName.trim().replace(/^\[/, '').replace(/\]$/, ''); -/** - * Node URL percent-encodes any invalid characters in the pathname which results a 400 bad request error. - * We need to decode the percent-encoded pathname, and encode it correctly with encodeURIComponent - */ - -const encodePathname = (pathname: string) => { - const decodedPath = new URLSearchParams(`path=${pathname}`).get('path') ?? ''; - - // Skip if it is valid - if (pathname === decodedPath) { - return pathname; - } - - return `/${encodeURIComponent(trimStart(decodedPath, '/'))}`; -}; - // We use a modified version of Hapi's Wreck because Hapi, Axios, and Superagent don't support GET requests // with bodies, but ES APIs do. Similarly with DELETE requests with bodies. Another library, `request` // diverged too much from current behaviour. @@ -58,10 +44,11 @@ export const proxyRequest = ({ timeout, payload, rejectUnauthorized, + requestPath, }: Args) => { - const { hostname, port, protocol, pathname, search } = uri; + const { hostname, port, protocol, search } = uri; const client = uri.protocol === 'https:' ? https : http; - const encodedPath = encodePathname(pathname); + const encodedPath = encodePath(requestPath); let resolved = false; let resolve: (res: http.IncomingMessage) => void; diff --git a/src/plugins/console/server/lib/utils/encode_path.test.ts b/src/plugins/console/server/lib/utils/encode_path.test.ts new file mode 100644 index 0000000000000..07c7108e9d2cf --- /dev/null +++ b/src/plugins/console/server/lib/utils/encode_path.test.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { encodePath } from './encode_path'; + +describe('encodePath', () => { + const tests = [ + { + description: 'encodes invalid URL characters', + source: '/%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23', + assert: + '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23', + }, + { + description: 'ignores encoded characters', + source: '/my-index/_doc/this%2Fis%2Fa%2Fdoc', + assert: '/my-index/_doc/this%2Fis%2Fa%2Fdoc', + }, + { + description: 'ignores slashes between', + source: '_index/test/.test', + assert: '_index/test/.test', + }, + ]; + + tests.forEach(({ description, source, assert }) => { + test(description, () => { + const result = encodePath(source); + expect(result).toEqual(assert); + }); + }); +}); diff --git a/src/plugins/console/server/lib/utils/encode_path.ts b/src/plugins/console/server/lib/utils/encode_path.ts new file mode 100644 index 0000000000000..273c60d3f66e4 --- /dev/null +++ b/src/plugins/console/server/lib/utils/encode_path.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { URLSearchParams } from 'url'; +import { trimStart } from 'lodash'; + +export const encodePath = (path: string) => { + const decodedPath = new URLSearchParams(`path=${path}`).get('path') ?? ''; + // Take the initial path and compare it with the decoded path. + // If the result is not the same, the path is encoded. + const isEncoded = trimStart(path, '/') !== trimStart(decodedPath, '/'); + + // Return the initial path if it is already encoded + if (isEncoded) { + return path; + } + + // Encode every component except slashes + return path + .split('/') + .map((component) => encodeURIComponent(component)) + .join('/'); +}; diff --git a/src/plugins/console/server/lib/utils/index.ts b/src/plugins/console/server/lib/utils/index.ts new file mode 100644 index 0000000000000..19c35901570e6 --- /dev/null +++ b/src/plugins/console/server/lib/utils/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { encodePath } from './encode_path'; diff --git a/src/plugins/console/server/routes/api/console/proxy/create_handler.ts b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts index 1fc22ca685cc5..2e575c7723a64 100644 --- a/src/plugins/console/server/routes/api/console/proxy/create_handler.ts +++ b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts @@ -145,6 +145,10 @@ export const createHandler = const host = hosts[idx]; try { const uri = toURL(host, path); + // Invalid URL characters included in uri pathname will be percent-encoded by Node URL method, and results in a faulty request in some cases. + // To fix this issue, we need to extract the original request path and supply it to proxyRequest function to encode it correctly with encodeURIComponent. + // We ignore the search params here, since we are extracting them from the uri constructed by Node URL method. + const [requestPath] = path.split('?'); // Because this can technically be provided by a settings-defined proxy config, we need to // preserve these property names to maintain BWC. @@ -174,6 +178,7 @@ export const createHandler = payload: body, rejectUnauthorized, agent, + requestPath, }); break; diff --git a/test/functional/apps/console/_console.ts b/test/functional/apps/console/_console.ts index de4ed241f4110..f22a46c838ae9 100644 --- a/test/functional/apps/console/_console.ts +++ b/test/functional/apps/console/_console.ts @@ -124,6 +124,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + describe('with query params', () => { + it('should issue a successful request', async () => { + await PageObjects.console.clearTextArea(); + await PageObjects.console.enterRequest( + '\n GET _cat/aliases?format=json&v=true&pretty=true' + ); + await PageObjects.console.clickPlay(); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await retry.try(async () => { + const status = await PageObjects.console.getResponseStatus(); + expect(status).to.eql(200); + }); + }); + }); + describe('multiple requests output', () => { const sendMultipleRequests = async (requests: string[]) => { await asyncForEach(requests, async (request) => { diff --git a/test/functional/page_objects/console_page.ts b/test/functional/page_objects/console_page.ts index 17ab4e1b170f7..3a5c8e3d84db4 100644 --- a/test/functional/page_objects/console_page.ts +++ b/test/functional/page_objects/console_page.ts @@ -221,4 +221,10 @@ export class ConsolePageObject extends FtrService { return false; } } + + public async getResponseStatus() { + const statusBadge = await this.testSubjects.find('consoleResponseStatusBadge'); + const text = await statusBadge.getVisibleText(); + return text.replace(/[^\d.]+/, ''); + } } From a1c2220566adac87a71e62cf5022fd8d7b5cad18 Mon Sep 17 00:00:00 2001 From: Spencer Date: Wed, 13 Jul 2022 23:37:39 -0500 Subject: [PATCH 34/96] [checks] disable spinners in CI to cut-down on log sizes (#136341) --- .../src/cli/run_telemetry_check.ts | 112 +++++++++--------- .../src/cli/run_telemetry_extract.ts | 39 +++--- src/dev/run_i18n_check.ts | 1 + src/dev/run_i18n_extract.ts | 55 +++++---- src/dev/run_i18n_integrate.ts | 57 +++++---- x-pack/plugins/apm/scripts/precommit.js | 6 +- 6 files changed, 148 insertions(+), 122 deletions(-) diff --git a/packages/kbn-telemetry-tools/src/cli/run_telemetry_check.ts b/packages/kbn-telemetry-tools/src/cli/run_telemetry_check.ts index 4518b3631a2a0..ed5a7ff8b8135 100644 --- a/packages/kbn-telemetry-tools/src/cli/run_telemetry_check.ts +++ b/packages/kbn-telemetry-tools/src/cli/run_telemetry_check.ts @@ -48,64 +48,70 @@ export function runTelemetryCheck() { ); } - const list = new Listr([ - { - title: 'Checking .telemetryrc.json files', - task: () => new Listr(parseConfigsTask(), { exitOnError: true }), - }, - { - title: 'Extracting Collectors', - task: (context) => new Listr(extractCollectorsTask(context, path), { exitOnError: true }), - }, - { - enabled: () => typeof path !== 'undefined', - title: 'Checking collectors in --path are not excluded', - task: ({ roots }: TaskContext) => { - const totalCollections = roots.reduce((acc, root) => { - return acc + (root.parsedCollections?.length || 0); - }, 0); - const collectorsInPath = Array.isArray(path) ? path.length : 1; + const list = new Listr( + [ + { + title: 'Checking .telemetryrc.json files', + task: () => new Listr(parseConfigsTask(), { exitOnError: true }), + }, + { + title: 'Extracting Collectors', + task: (context) => + new Listr(extractCollectorsTask(context, path), { exitOnError: true }), + }, + { + enabled: () => typeof path !== 'undefined', + title: 'Checking collectors in --path are not excluded', + task: ({ roots }: TaskContext) => { + const totalCollections = roots.reduce((acc, root) => { + return acc + (root.parsedCollections?.length || 0); + }, 0); + const collectorsInPath = Array.isArray(path) ? path.length : 1; - if (totalCollections !== collectorsInPath) { - throw new Error( - 'Collector specified in `path` is excluded; Check the telemetryrc.json files.' + if (totalCollections !== collectorsInPath) { + throw new Error( + 'Collector specified in `path` is excluded; Check the telemetryrc.json files.' + ); + } + }, + }, + { + title: 'Checking Compatible collector.schema with collector.fetch type', + task: (context) => new Listr(checkCompatibleTypesTask(context), { exitOnError: true }), + }, + { + enabled: (_) => fix || !ignoreStoredJson, + title: 'Checking Matching collector.schema against stored json files', + task: (context) => + new Listr(checkMatchingSchemasTask(context, !fix), { exitOnError: true }), + }, + { + enabled: (_) => fix, + skip: ({ roots }: TaskContext) => { + const noDiffs = roots.every( + ({ esMappingDiffs }) => !esMappingDiffs || !esMappingDiffs.length ); - } + return noDiffs && 'No changes needed.'; + }, + title: 'Generating new telemetry mappings', + task: (context) => new Listr(generateSchemasTask(context), { exitOnError: true }), }, - }, - { - title: 'Checking Compatible collector.schema with collector.fetch type', - task: (context) => new Listr(checkCompatibleTypesTask(context), { exitOnError: true }), - }, - { - enabled: (_) => fix || !ignoreStoredJson, - title: 'Checking Matching collector.schema against stored json files', - task: (context) => - new Listr(checkMatchingSchemasTask(context, !fix), { exitOnError: true }), - }, - { - enabled: (_) => fix, - skip: ({ roots }: TaskContext) => { - const noDiffs = roots.every( - ({ esMappingDiffs }) => !esMappingDiffs || !esMappingDiffs.length - ); - return noDiffs && 'No changes needed.'; + { + enabled: (_) => fix, + skip: ({ roots }: TaskContext) => { + const noDiffs = roots.every( + ({ esMappingDiffs }) => !esMappingDiffs || !esMappingDiffs.length + ); + return noDiffs && 'No changes needed.'; + }, + title: 'Updating telemetry mapping files', + task: (context) => new Listr(writeToFileTask(context), { exitOnError: true }), }, - title: 'Generating new telemetry mappings', - task: (context) => new Listr(generateSchemasTask(context), { exitOnError: true }), - }, + ], { - enabled: (_) => fix, - skip: ({ roots }: TaskContext) => { - const noDiffs = roots.every( - ({ esMappingDiffs }) => !esMappingDiffs || !esMappingDiffs.length - ); - return noDiffs && 'No changes needed.'; - }, - title: 'Updating telemetry mapping files', - task: (context) => new Listr(writeToFileTask(context), { exitOnError: true }), - }, - ]); + renderer: process.env.CI ? 'verbose' : 'default', + } + ); try { const context = createTaskContext(); diff --git a/packages/kbn-telemetry-tools/src/cli/run_telemetry_extract.ts b/packages/kbn-telemetry-tools/src/cli/run_telemetry_extract.ts index c998470ff0a9c..22790ab6a0578 100644 --- a/packages/kbn-telemetry-tools/src/cli/run_telemetry_extract.ts +++ b/packages/kbn-telemetry-tools/src/cli/run_telemetry_extract.ts @@ -21,24 +21,29 @@ import { export function runTelemetryExtract() { run( async ({ flags: {}, log }) => { - const list = new Listr([ + const list = new Listr( + [ + { + title: 'Parsing .telemetryrc.json files', + task: () => new Listr(parseConfigsTask(), { exitOnError: true }), + }, + { + title: 'Extracting Telemetry Collectors', + task: (context) => new Listr(extractCollectorsTask(context), { exitOnError: true }), + }, + { + title: 'Generating Schema files', + task: (context) => new Listr(generateSchemasTask(context), { exitOnError: true }), + }, + { + title: 'Writing to file', + task: (context) => new Listr(writeToFileTask(context), { exitOnError: true }), + }, + ], { - title: 'Parsing .telemetryrc.json files', - task: () => new Listr(parseConfigsTask(), { exitOnError: true }), - }, - { - title: 'Extracting Telemetry Collectors', - task: (context) => new Listr(extractCollectorsTask(context), { exitOnError: true }), - }, - { - title: 'Generating Schema files', - task: (context) => new Listr(generateSchemasTask(context), { exitOnError: true }), - }, - { - title: 'Writing to file', - task: (context) => new Listr(writeToFileTask(context), { exitOnError: true }), - }, - ]); + renderer: process.env.CI ? 'verbose' : 'default', + } + ); try { const context = createTaskContext(); diff --git a/src/dev/run_i18n_check.ts b/src/dev/run_i18n_check.ts index 2aa9f65f4d3db..220eef24f3808 100644 --- a/src/dev/run_i18n_check.ts +++ b/src/dev/run_i18n_check.ts @@ -120,6 +120,7 @@ run( { concurrent: false, exitOnError: true, + renderer: process.env.CI ? 'verbose' : 'default', } ); diff --git a/src/dev/run_i18n_extract.ts b/src/dev/run_i18n_extract.ts index 6ff9eb5164ad2..2c1f39e929a36 100644 --- a/src/dev/run_i18n_extract.ts +++ b/src/dev/run_i18n_extract.ts @@ -38,32 +38,37 @@ run( } const srcPaths = Array().concat(path || ['./src', './packages', './x-pack']); - const list = new Listr([ - { - title: 'Merging .i18nrc.json files', - task: () => new Listr(mergeConfigs(includeConfig), { exitOnError: true }), - }, - { - title: 'Extracting Default Messages', - task: ({ config }) => - new Listr(extractDefaultMessages(config, srcPaths), { exitOnError: true }), - }, - { - title: 'Writing to file', - enabled: (ctx) => outputDir && ctx.messages.size, - task: async (ctx) => { - const sortedMessages = [...ctx.messages].sort(([key1], [key2]) => - key1.localeCompare(key2) - ); - await writeFileAsync( - resolve(outputDir, 'en.json'), - outputFormat === 'json5' - ? serializeToJson5(sortedMessages) - : serializeToJson(sortedMessages) - ); + const list = new Listr( + [ + { + title: 'Merging .i18nrc.json files', + task: () => new Listr(mergeConfigs(includeConfig), { exitOnError: true }), + }, + { + title: 'Extracting Default Messages', + task: ({ config }) => + new Listr(extractDefaultMessages(config, srcPaths), { exitOnError: true }), }, - }, - ]); + { + title: 'Writing to file', + enabled: (ctx) => outputDir && ctx.messages.size, + task: async (ctx) => { + const sortedMessages = [...ctx.messages].sort(([key1], [key2]) => + key1.localeCompare(key2) + ); + await writeFileAsync( + resolve(outputDir, 'en.json'), + outputFormat === 'json5' + ? serializeToJson5(sortedMessages) + : serializeToJson(sortedMessages) + ); + }, + }, + ], + { + renderer: process.env.CI ? 'verbose' : 'default', + } + ); try { const reporter = new ErrorReporter(); diff --git a/src/dev/run_i18n_integrate.ts b/src/dev/run_i18n_integrate.ts index 29696ca5f9aa5..80e2f8cb1f33b 100644 --- a/src/dev/run_i18n_integrate.ts +++ b/src/dev/run_i18n_integrate.ts @@ -69,33 +69,38 @@ run( const srcPaths = Array().concat(path || ['./src', './packages', './x-pack']); - const list = new Listr([ - { - title: 'Merging .i18nrc.json files', - task: () => new Listr(mergeConfigs(includeConfig), { exitOnError: true }), - }, - { - title: 'Extracting Default Messages', - task: ({ config }) => - new Listr(extractDefaultMessages(config, srcPaths), { exitOnError: true }), - }, - { - title: 'Integrating Locale File', - task: async ({ messages, config }) => { - await integrateLocaleFiles(messages, { - sourceFileName: source, - targetFileName: target, - dryRun, - ignoreIncompatible, - ignoreUnused, - ignoreMissing, - ignoreMalformed, - config, - log, - }); + const list = new Listr( + [ + { + title: 'Merging .i18nrc.json files', + task: () => new Listr(mergeConfigs(includeConfig), { exitOnError: true }), + }, + { + title: 'Extracting Default Messages', + task: ({ config }) => + new Listr(extractDefaultMessages(config, srcPaths), { exitOnError: true }), }, - }, - ]); + { + title: 'Integrating Locale File', + task: async ({ messages, config }) => { + await integrateLocaleFiles(messages, { + sourceFileName: source, + targetFileName: target, + dryRun, + ignoreIncompatible, + ignoreUnused, + ignoreMissing, + ignoreMalformed, + config, + log, + }); + }, + }, + ], + { + renderer: process.env.CI ? 'verbose' : 'default', + } + ); try { const reporter = new ErrorReporter(); diff --git a/x-pack/plugins/apm/scripts/precommit.js b/x-pack/plugins/apm/scripts/precommit.js index ab19094c4e610..c1847432abcf7 100644 --- a/x-pack/plugins/apm/scripts/precommit.js +++ b/x-pack/plugins/apm/scripts/precommit.js @@ -80,7 +80,11 @@ const tasks = new Listr( ), }, ], - { exitOnError: true, concurrent: false } + { + exitOnError: true, + concurrent: false, + renderer: process.env.CI ? 'verbose' : 'default', + } ); tasks.run().catch((error) => { From ac2ce8971e035bfbc02f8a36776912240f940f5d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 14 Jul 2022 00:41:57 -0400 Subject: [PATCH 35/96] [api-docs] Daily api_docs build (#136361) --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.devdocs.json | 72 +- api_docs/aiops.mdx | 7 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 86 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/core.devdocs.json | 406 +++------ api_docs/core.mdx | 4 +- api_docs/core_application.mdx | 4 +- api_docs/core_chrome.mdx | 4 +- api_docs/core_http.devdocs.json | 218 ----- api_docs/core_http.mdx | 30 - api_docs/core_saved_objects.mdx | 4 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 26 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.devdocs.json | 163 +++- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.devdocs.json | 15 + api_docs/data_view_editor.mdx | 4 +- api_docs/data_view_field_editor.devdocs.json | 33 +- api_docs/data_view_field_editor.mdx | 4 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.devdocs.json | 32 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/elastic_apm_synthtrace.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.devdocs.json | 4 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.devdocs.json | 4 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- .../expression_partition_vis.devdocs.json | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.devdocs.json | 8 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.devdocs.json | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.devdocs.json | 33 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/fleet.devdocs.json | 47 +- api_docs/fleet.mdx | 4 +- api_docs/global_search.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bazel_packages.mdx | 2 +- api_docs/kbn_bazel_runner.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- ...kbn_core_deprecations_browser.devdocs.json | 189 ++++ api_docs/kbn_core_deprecations_browser.mdx | 30 + ...deprecations_browser_internal.devdocs.json | 129 +++ ...kbn_core_deprecations_browser_internal.mdx | 27 + ...re_deprecations_browser_mocks.devdocs.json | 92 ++ .../kbn_core_deprecations_browser_mocks.mdx | 27 + .../kbn_core_deprecations_common.devdocs.json | 321 +++++++ api_docs/kbn_core_deprecations_common.mdx | 30 + api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- ...ore_http_context_server_mocks.devdocs.json | 201 +++++ .../kbn_core_http_context_server_mocks.mdx | 30 + ...e_http_router_server_internal.devdocs.json | 414 +++++++++ .../kbn_core_http_router_server_internal.mdx | 33 + ...core_http_router_server_mocks.devdocs.json | 193 ++++ .../kbn_core_http_router_server_mocks.mdx | 30 + api_docs/kbn_core_http_server.mdx | 2 +- ...kbn_core_http_server_internal.devdocs.json | 845 ++++++++++++++++++ api_docs/kbn_core_http_server_internal.mdx | 36 + .../kbn_core_http_server_mocks.devdocs.json | 830 +++++++++++++++++ api_docs/kbn_core_http_server_mocks.mdx | 33 + api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- .../kbn_core_injected_metadata_browser.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- ...kbn_core_node_server_internal.devdocs.json | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_home_sample_data_cards.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_kibana_json_schema.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_discovery.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_pm.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_scalability_simulation_generator.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_components.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_services.mdx | 2 +- api_docs/kbn_shared_ux_storybook.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_sort_package_json.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.devdocs.json | 97 +- api_docs/kbn_test.mdx | 4 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_type_summarizer.mdx | 2 +- api_docs/kbn_type_summarizer_core.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 26 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.devdocs.json | 16 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.devdocs.json | 29 +- api_docs/maps.mdx | 4 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/observability.devdocs.json | 95 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 31 +- api_docs/presentation_util.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.devdocs.json | 8 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/shared_u_x.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 172 +--- api_docs/triggers_actions_ui.mdx | 4 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.devdocs.json | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.devdocs.json | 10 +- api_docs/visualizations.mdx | 2 +- 331 files changed, 4457 insertions(+), 1299 deletions(-) delete mode 100644 api_docs/core_http.devdocs.json delete mode 100644 api_docs/core_http.mdx create mode 100644 api_docs/kbn_core_deprecations_browser.devdocs.json create mode 100644 api_docs/kbn_core_deprecations_browser.mdx create mode 100644 api_docs/kbn_core_deprecations_browser_internal.devdocs.json create mode 100644 api_docs/kbn_core_deprecations_browser_internal.mdx create mode 100644 api_docs/kbn_core_deprecations_browser_mocks.devdocs.json create mode 100644 api_docs/kbn_core_deprecations_browser_mocks.mdx create mode 100644 api_docs/kbn_core_deprecations_common.devdocs.json create mode 100644 api_docs/kbn_core_deprecations_common.mdx create mode 100644 api_docs/kbn_core_http_context_server_mocks.devdocs.json create mode 100644 api_docs/kbn_core_http_context_server_mocks.mdx create mode 100644 api_docs/kbn_core_http_router_server_internal.devdocs.json create mode 100644 api_docs/kbn_core_http_router_server_internal.mdx create mode 100644 api_docs/kbn_core_http_router_server_mocks.devdocs.json create mode 100644 api_docs/kbn_core_http_router_server_mocks.mdx create mode 100644 api_docs/kbn_core_http_server_internal.devdocs.json create mode 100644 api_docs/kbn_core_http_server_internal.mdx create mode 100644 api_docs/kbn_core_http_server_mocks.devdocs.json create mode 100644 api_docs/kbn_core_http_server_mocks.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index b37fe3df21ad2..266c9e3101296 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github summary: API docs for the actions plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index d7284bf2ba87a..8b8ac8261c081 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github summary: API docs for the advancedSettings plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index a9675003d2e1f..e351d2c17883e 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -10,17 +10,11 @@ "tags": [], "label": "ExplainLogRateSpikes", "description": [ - "\nLazy-wrapped ExplainLogRateSpikes React component" + "\nLazy-wrapped ExplainLogRateSpikesWrapper React component" ], "signature": [ "(props: React.PropsWithChildren<", - { - "pluginId": "aiops", - "scope": "public", - "docId": "kibAiopsPluginApi", - "section": "def-public.ExplainLogRateSpikesProps", - "text": "ExplainLogRateSpikesProps" - }, + "ExplainLogRateSpikesWrapperProps", ">) => JSX.Element" ], "path": "x-pack/plugins/aiops/public/shared_lazy_components.tsx", @@ -37,13 +31,7 @@ ], "signature": [ "React.PropsWithChildren<", - { - "pluginId": "aiops", - "scope": "public", - "docId": "kibAiopsPluginApi", - "section": "def-public.ExplainLogRateSpikesProps", - "text": "ExplainLogRateSpikesProps" - }, + "ExplainLogRateSpikesWrapperProps", ">" ], "path": "x-pack/plugins/aiops/public/shared_lazy_components.tsx", @@ -55,59 +43,7 @@ "initialIsOpen": false } ], - "interfaces": [ - { - "parentPluginId": "aiops", - "id": "def-public.ExplainLogRateSpikesProps", - "type": "Interface", - "tags": [], - "label": "ExplainLogRateSpikesProps", - "description": [ - "\nExplainLogRateSpikes props require a data view." - ], - "path": "x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx", - "deprecated": false, - "children": [ - { - "parentPluginId": "aiops", - "id": "def-public.ExplainLogRateSpikesProps.dataView", - "type": "Object", - "tags": [], - "label": "dataView", - "description": [ - "The data view to analyze." - ], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - } - ], - "path": "x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx", - "deprecated": false - }, - { - "parentPluginId": "aiops", - "id": "def-public.ExplainLogRateSpikesProps.windowParameters", - "type": "Object", - "tags": [], - "label": "windowParameters", - "description": [ - "Window parameters for the analysis" - ], - "signature": [ - "WindowParameters" - ], - "path": "x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes.tsx", - "deprecated": false - } - ], - "initialIsOpen": false - } - ], + "interfaces": [], "enums": [], "misc": [], "objects": [], diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 618ea5e1eb78d..d99384c4f3db0 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github summary: API docs for the aiops plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 12 | 0 | 0 | 0 | +| 9 | 0 | 0 | 1 | ## Client @@ -28,9 +28,6 @@ Contact [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) for q ### Functions -### Interfaces - - ## Server ### Setup diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 7b86f41380cf8..2db29e53cf015 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github summary: API docs for the alerting plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 06c67d2dc2974..97812e861a663 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -772,7 +772,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/dynamic\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/ux/page-load-distribution\" | \"GET /internal/apm/ux/page-load-distribution/breakdown\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/backend\" | \"GET /internal/apm/services/{serviceName}/serviceNodes\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search\" | \"POST /api/apm/services/{serviceName}/annotation\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/profiling/timeline\" | \"GET /internal/apm/services/{serviceName}/profiling/statistics\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/sorted_and_filtered_services\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_rate\" | \"GET /internal/apm/alerts/chart_preview/transaction_duration\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_count\" | \"GET /api/apm/settings/agent-configuration\" | \"GET /api/apm/settings/agent-configuration/view\" | \"DELETE /api/apm/settings/agent-configuration\" | \"PUT /api/apm/settings/agent-configuration\" | \"POST /api/apm/settings/agent-configuration/search\" | \"GET /api/apm/settings/agent-configuration/environments\" | \"GET /api/apm/settings/agent-configuration/agent_name\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps\" | \"POST /api/apm/sourcemaps\" | \"DELETE /api/apm/sourcemaps/{id}\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/backends/top_backends\" | \"GET /internal/apm/backends/upstream_services\" | \"GET /internal/apm/backends/metadata\" | \"GET /internal/apm/backends/charts/latency\" | \"GET /internal/apm/backends/charts/throughput\" | \"GET /internal/apm/backends/charts/error_rate\" | \"GET /internal/apm/backends/operations\" | \"GET /internal/apm/backends/charts/distribution\" | \"GET /internal/apm/backends/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"POST /internal/apm/correlations/field_stats/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/dynamic\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/backend\" | \"GET /internal/apm/services/{serviceName}/serviceNodes\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search\" | \"POST /api/apm/services/{serviceName}/annotation\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/profiling/timeline\" | \"GET /internal/apm/services/{serviceName}/profiling/statistics\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/sorted_and_filtered_services\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_rate\" | \"GET /internal/apm/alerts/chart_preview/transaction_duration\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_count\" | \"GET /api/apm/settings/agent-configuration\" | \"GET /api/apm/settings/agent-configuration/view\" | \"DELETE /api/apm/settings/agent-configuration\" | \"PUT /api/apm/settings/agent-configuration\" | \"POST /api/apm/settings/agent-configuration/search\" | \"GET /api/apm/settings/agent-configuration/environments\" | \"GET /api/apm/settings/agent-configuration/agent_name\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps\" | \"POST /api/apm/sourcemaps\" | \"DELETE /api/apm/sourcemaps/{id}\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/backends/top_backends\" | \"GET /internal/apm/backends/upstream_services\" | \"GET /internal/apm/backends/metadata\" | \"GET /internal/apm/backends/charts/latency\" | \"GET /internal/apm/backends/charts/throughput\" | \"GET /internal/apm/backends/charts/error_rate\" | \"GET /internal/apm/backends/operations\" | \"GET /internal/apm/backends/charts/distribution\" | \"GET /internal/apm/backends/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"POST /internal/apm/correlations/field_stats/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\"" ], "path": "x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -4740,90 +4740,6 @@ "ServiceAnomalyStats", " | undefined; label: string | undefined; id?: string | undefined; parent?: string | undefined; position?: cytoscape.Position | undefined; } | { 'span.destination.service.resource': string; 'span.type': string; 'span.subtype': string; label: string | undefined; id?: string | undefined; parent?: string | undefined; position?: cytoscape.Position | undefined; } | { id: string; source: string | undefined; target: string | undefined; label: string | undefined; bidirectional?: boolean | undefined; isInverseEdge?: boolean | undefined; } | undefined)[]; }; } | { data: { id: string; source: string; target: string; }; })[]; }, ", "APMRouteCreateOptions", - ">; \"GET /internal/apm/ux/page-load-distribution/breakdown\": ", - "ServerRoute", - "<\"GET /internal/apm/ux/page-load-distribution/breakdown\", ", - "TypeC", - "<{ query: ", - "IntersectionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ uiFilters: ", - "StringC", - "; }>, ", - "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; }>, ", - "PartialC", - "<{ urlQuery: ", - "StringC", - "; percentile: ", - "StringC", - "; }>]>, ", - "PartialC", - "<{ minPercentile: ", - "StringC", - "; maxPercentile: ", - "StringC", - "; }>, ", - "TypeC", - "<{ breakdown: ", - "StringC", - "; }>]>; }>, ", - { - "pluginId": "apm", - "scope": "server", - "docId": "kibApmPluginApi", - "section": "def-server.APMRouteHandlerResources", - "text": "APMRouteHandlerResources" - }, - ", { pageLoadDistBreakdown: { name: string; data: { x: number; y: number; }[]; }[] | undefined; }, ", - "APMRouteCreateOptions", - ">; \"GET /internal/apm/ux/page-load-distribution\": ", - "ServerRoute", - "<\"GET /internal/apm/ux/page-load-distribution\", ", - "TypeC", - "<{ query: ", - "IntersectionC", - "<[", - "IntersectionC", - "<[", - "TypeC", - "<{ uiFilters: ", - "StringC", - "; }>, ", - "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; }>, ", - "PartialC", - "<{ urlQuery: ", - "StringC", - "; percentile: ", - "StringC", - "; }>]>, ", - "PartialC", - "<{ minPercentile: ", - "StringC", - "; maxPercentile: ", - "StringC", - "; }>]>; }>, ", - { - "pluginId": "apm", - "scope": "server", - "docId": "kibApmPluginApi", - "section": "def-server.APMRouteHandlerResources", - "text": "APMRouteHandlerResources" - }, - ", { pageLoadDistribution: { pageLoadDistribution: { x: number; y: number; }[]; percentiles: Record | undefined; minDuration: number; maxDuration: number; } | null; }, ", - "APMRouteCreateOptions", ">; \"GET /internal/apm/observability_overview/has_data\": ", "ServerRoute", "<\"GET /internal/apm/observability_overview/has_data\", undefined, ", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 1e52586d92225..3050858419771 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github summary: API docs for the apm plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 60a50ae742061..0611e689c3760 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github summary: API docs for the banners plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index d11bfb0ab67a5..80f63cf0a3fbf 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github summary: API docs for the bfetch plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index e647d472c91f9..434e0a37bb096 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github summary: API docs for the canvas plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 2aa643e48d15b..f155adf764c83 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github summary: API docs for the cases plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 9671ccbe8af2f..b29658891ad61 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github summary: API docs for the charts plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 01ec58337accf..892f3c9871d8c 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloud plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 21e18763c07cc..221935685c3aa 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloudSecurityPosture plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/console.mdx b/api_docs/console.mdx index bf2db61245112..46fcb6547e8f0 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github summary: API docs for the console plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index fc1869da56022..78f2941afcacd 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github summary: API docs for the controls plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json index 04ccf7434c847..696d751b5a6ed 100644 --- a/api_docs/core.devdocs.json +++ b/api_docs/core.devdocs.json @@ -1646,13 +1646,7 @@ "{@link DeprecationsServiceStart}" ], "signature": [ - { - "pluginId": "core", - "scope": "public", - "docId": "kibCorePluginApi", - "section": "def-public.DeprecationsServiceStart", - "text": "DeprecationsServiceStart" - } + "DeprecationsServiceStart" ], "path": "src/core/public/index.ts", "deprecated": false @@ -1726,7 +1720,7 @@ "description": [ "\nDeprecationsService provides methods to fetch domain deprecation details from\nthe Kibana server.\n" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "children": [ { @@ -1743,7 +1737,7 @@ "DomainDeprecationDetails", "[]>" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "children": [], "returnComment": [] @@ -1762,7 +1756,7 @@ "DomainDeprecationDetails", "[]>" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "children": [ { @@ -1775,7 +1769,7 @@ "signature": [ "string" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "isRequired": true } @@ -1796,7 +1790,7 @@ "DomainDeprecationDetails", ") => boolean" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "children": [ { @@ -1809,7 +1803,7 @@ "signature": [ "DomainDeprecationDetails" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "isRequired": true } @@ -1829,16 +1823,10 @@ "(details: ", "DomainDeprecationDetails", ") => Promise<", - { - "pluginId": "core", - "scope": "public", - "docId": "kibCorePluginApi", - "section": "def-public.ResolveDeprecationResponse", - "text": "ResolveDeprecationResponse" - }, + "ResolveDeprecationResponse", ">" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "children": [ { @@ -1851,7 +1839,7 @@ "signature": [ "DomainDeprecationDetails" ], - "path": "src/core/public/deprecations/deprecations_service.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "isRequired": true } @@ -9180,6 +9168,21 @@ "deprecated": false, "initialIsOpen": false }, + { + "parentPluginId": "core", + "id": "def-public.DomainDeprecationDetails", + "type": "Type", + "tags": [], + "label": "DomainDeprecationDetails", + "description": [], + "signature": [ + "DeprecationsDetails", + " & { domainId: string; }" + ], + "path": "node_modules/@types/kbn__core-deprecations-common/index.d.ts", + "deprecated": false, + "initialIsOpen": false + }, { "parentPluginId": "core", "id": "def-public.EventType", @@ -9560,11 +9563,13 @@ "type": "Type", "tags": [], "label": "ResolveDeprecationResponse", - "description": [], + "description": [ + "\nResponse from correctiveActions.api call from automatically resolving the deprecation" + ], "signature": [ "{ status: \"ok\"; } | { status: \"fail\"; reason: string; }" ], - "path": "src/core/public/deprecations/deprecations_client.ts", + "path": "node_modules/@types/kbn__core-deprecations-browser/index.d.ts", "deprecated": false, "initialIsOpen": false }, @@ -10161,6 +10166,92 @@ }, "server": { "classes": [ + { + "parentPluginId": "core", + "id": "def-server.CspConfig", + "type": "Class", + "tags": [], + "label": "CspConfig", + "description": [ + "\nCSP configuration for use in Kibana." + ], + "signature": [ + "CspConfig", + " implements ", + "ICspConfig" + ], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "core", + "id": "def-server.CspConfig.private", + "type": "Any", + "tags": [], + "label": "#private", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.CspConfig.DEFAULT", + "type": "Object", + "tags": [], + "label": "DEFAULT", + "description": [], + "signature": [ + "CspConfig" + ], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.CspConfig.strict", + "type": "boolean", + "tags": [], + "label": "strict", + "description": [], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.CspConfig.warnLegacyBrowsers", + "type": "boolean", + "tags": [], + "label": "warnLegacyBrowsers", + "description": [], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.CspConfig.disableEmbedding", + "type": "boolean", + "tags": [], + "label": "disableEmbedding", + "description": [], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + }, + { + "parentPluginId": "core", + "id": "def-server.CspConfig.header", + "type": "string", + "tags": [], + "label": "header", + "description": [], + "path": "node_modules/@types/kbn__core-http-server-internal/index.d.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "core", "id": "def-server.ElasticsearchConfig", @@ -11519,120 +11610,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails", - "type": "Interface", - "tags": [], - "label": "BaseDeprecationDetails", - "description": [ - "\nBase properties shared by all types of deprecations\n" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.title", - "type": "string", - "tags": [], - "label": "title", - "description": [ - "\nThe title of the deprecation.\nCheck the README for writing deprecations in `src/core/server/deprecations/README.mdx`" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.message", - "type": "string", - "tags": [], - "label": "message", - "description": [ - "\nThe description message to be displayed for the deprecation.\nCheck the README for writing deprecations in `src/core/server/deprecations/README.mdx`" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.level", - "type": "CompoundType", - "tags": [], - "label": "level", - "description": [ - "\nlevels:\n- warning: will not break deployment upon upgrade\n- critical: needs to be addressed before upgrade.\n- fetch_error: Deprecations service failed to grab the deprecation details for the domain." - ], - "signature": [ - "\"warning\" | \"critical\" | \"fetch_error\"" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.deprecationType", - "type": "CompoundType", - "tags": [], - "label": "deprecationType", - "description": [ - "\n(optional) Used to identify between different deprecation types.\nExample use case: in Upgrade Assistant, we may want to allow the user to sort by\ndeprecation type or show each type in a separate tab.\n\nFeel free to add new types if necessary.\nPredefined types are necessary to reduce having similar definitions with different keywords\nacross kibana deprecations." - ], - "signature": [ - "\"config\" | \"feature\" | undefined" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.documentationUrl", - "type": "string", - "tags": [], - "label": "documentationUrl", - "description": [ - "(optional) link to the documentation for more details on the deprecation." - ], - "signature": [ - "string | undefined" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.requireRestart", - "type": "CompoundType", - "tags": [], - "label": "requireRestart", - "description": [ - "(optional) specify the fix for this deprecation requires a full kibana restart." - ], - "signature": [ - "boolean | undefined" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.BaseDeprecationDetails.correctiveActions", - "type": "Object", - "tags": [], - "label": "correctiveActions", - "description": [ - "corrective action needed to fix this deprecation." - ], - "signature": [ - "{ api?: { path: string; method: \"POST\" | \"PUT\"; body?: { [key: string]: any; } | undefined; omitContextFromBody?: boolean | undefined; } | undefined; manualSteps: string[]; }" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "core", "id": "def-server.Capabilities", @@ -11950,59 +11927,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.ConfigDeprecationDetails", - "type": "Interface", - "tags": [], - "label": "ConfigDeprecationDetails", - "description": [], - "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.ConfigDeprecationDetails", - "text": "ConfigDeprecationDetails" - }, - " extends ", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.BaseDeprecationDetails", - "text": "BaseDeprecationDetails" - } - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.ConfigDeprecationDetails.configPath", - "type": "string", - "tags": [], - "label": "configPath", - "description": [], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.ConfigDeprecationDetails.deprecationType", - "type": "string", - "tags": [], - "label": "deprecationType", - "description": [], - "signature": [ - "\"config\"" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "core", "id": "def-server.ConfigDeprecationFactory", @@ -14528,49 +14452,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.FeatureDeprecationDetails", - "type": "Interface", - "tags": [], - "label": "FeatureDeprecationDetails", - "description": [], - "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.FeatureDeprecationDetails", - "text": "FeatureDeprecationDetails" - }, - " extends ", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.BaseDeprecationDetails", - "text": "BaseDeprecationDetails" - } - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.FeatureDeprecationDetails.deprecationType", - "type": "string", - "tags": [], - "label": "deprecationType", - "description": [], - "signature": [ - "\"feature\" | undefined" - ], - "path": "src/core/server/deprecations/types.ts", - "deprecated": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "core", "id": "def-server.GetDeprecationsContext", @@ -25796,13 +25677,7 @@ ") => ", "MaybePromise", "<", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.DeprecationsDetails", - "text": "DeprecationsDetails" - }, + "DeprecationsDetails", "[]>" ], "path": "src/core/server/deprecations/types.ts", @@ -28565,23 +28440,11 @@ "label": "DeprecationsDetails", "description": [], "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.ConfigDeprecationDetails", - "text": "ConfigDeprecationDetails" - }, + "ConfigDeprecationDetails", " | ", - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.FeatureDeprecationDetails", - "text": "FeatureDeprecationDetails" - } + "FeatureDeprecationDetails" ], - "path": "src/core/server/deprecations/types.ts", + "path": "node_modules/@types/kbn__core-deprecations-common/index.d.ts", "deprecated": false, "initialIsOpen": false }, @@ -30480,6 +30343,33 @@ "deprecated": false, "initialIsOpen": false }, + { + "parentPluginId": "core", + "id": "def-server.kibanaResponseFactory", + "type": "CompoundType", + "tags": [], + "label": "kibanaResponseFactory", + "description": [], + "signature": [ + "KibanaSuccessResponseFactory", + " & ", + "KibanaRedirectionResponseFactory", + " & ", + "KibanaErrorResponseFactory", + " & { custom | Error | ", + "Stream", + " | Buffer | { message: string | Error; attributes?: ", + "ResponseErrorAttributes", + " | undefined; } | undefined>(options: ", + "CustomHttpResponseOptions", + "): ", + "IKibanaResponse", + "; }" + ], + "path": "node_modules/@types/kbn__core-http-router-server-internal/index.d.ts", + "deprecated": false, + "initialIsOpen": false + }, { "parentPluginId": "core", "id": "def-server.KibanaResponseFactory", @@ -31461,9 +31351,9 @@ "\nThe set of common HTTP methods supported by Kibana routing." ], "signature": [ - "SafeRouteMethod", + "DestructiveRouteMethod", " | ", - "DestructiveRouteMethod" + "SafeRouteMethod" ], "path": "node_modules/@types/kbn__core-http-server/index.d.ts", "deprecated": false, diff --git a/api_docs/core.mdx b/api_docs/core.mdx index 1ca2a7bd7646b..f1a1c1b2e0dc0 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github summary: API docs for the core plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2489 | 9 | 746 | 25 | +| 2472 | 6 | 724 | 22 | ## Client diff --git a/api_docs/core_application.mdx b/api_docs/core_application.mdx index 73e1cc4df37c8..b9d2d257b7d28 100644 --- a/api_docs/core_application.mdx +++ b/api_docs/core_application.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-application title: "core.application" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.application plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.application'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2489 | 9 | 746 | 25 | +| 2472 | 6 | 724 | 22 | ## Client diff --git a/api_docs/core_chrome.mdx b/api_docs/core_chrome.mdx index 38935d4adbf2c..7dfaeefb9d685 100644 --- a/api_docs/core_chrome.mdx +++ b/api_docs/core_chrome.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-chrome title: "core.chrome" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.chrome plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.chrome'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2489 | 9 | 746 | 25 | +| 2472 | 6 | 724 | 22 | ## Client diff --git a/api_docs/core_http.devdocs.json b/api_docs/core_http.devdocs.json deleted file mode 100644 index 3aea850ad213e..0000000000000 --- a/api_docs/core_http.devdocs.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "id": "core.http", - "client": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "server": { - "classes": [ - { - "parentPluginId": "core", - "id": "def-server.CspConfig", - "type": "Class", - "tags": [], - "label": "CspConfig", - "description": [ - "\nCSP configuration for use in Kibana." - ], - "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCoreHttpPluginApi", - "section": "def-server.CspConfig", - "text": "CspConfig" - }, - " implements ", - "ICspConfig" - ], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.CspConfig.DEFAULT", - "type": "Object", - "tags": [], - "label": "DEFAULT", - "description": [], - "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCoreHttpPluginApi", - "section": "def-server.CspConfig", - "text": "CspConfig" - } - ], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.CspConfig.directives", - "type": "Object", - "tags": [], - "label": "#directives", - "description": [], - "signature": [ - "CspDirectives" - ], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.CspConfig.strict", - "type": "boolean", - "tags": [], - "label": "strict", - "description": [], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.CspConfig.warnLegacyBrowsers", - "type": "boolean", - "tags": [], - "label": "warnLegacyBrowsers", - "description": [], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.CspConfig.disableEmbedding", - "type": "boolean", - "tags": [], - "label": "disableEmbedding", - "description": [], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.CspConfig.header", - "type": "string", - "tags": [], - "label": "header", - "description": [], - "path": "src/core/server/http/csp/csp_config.ts", - "deprecated": false - } - ], - "initialIsOpen": false - } - ], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [ - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory", - "type": "Object", - "tags": [], - "label": "kibanaResponseFactory", - "description": [], - "path": "src/core/server/http/router/response.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory.Unnamed", - "type": "Any", - "tags": [], - "label": "Unnamed", - "description": [], - "signature": [ - "any" - ], - "path": "src/core/server/http/router/response.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory.Unnamed", - "type": "Any", - "tags": [], - "label": "Unnamed", - "description": [], - "signature": [ - "any" - ], - "path": "src/core/server/http/router/response.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory.Unnamed", - "type": "Any", - "tags": [], - "label": "Unnamed", - "description": [], - "signature": [ - "any" - ], - "path": "src/core/server/http/router/response.ts", - "deprecated": false - }, - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory.custom", - "type": "Function", - "tags": [], - "label": "custom", - "description": [], - "signature": [ - " | Error | ", - "Stream", - " | Buffer | { message: string | Error; attributes?: ", - "ResponseErrorAttributes", - " | undefined; } | undefined>(options: ", - "CustomHttpResponseOptions", - ") => ", - "KibanaResponse", - "" - ], - "path": "src/core/server/http/router/response.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.kibanaResponseFactory.custom.$1", - "type": "Object", - "tags": [], - "label": "options", - "description": [], - "signature": [ - "CustomHttpResponseOptions", - "" - ], - "path": "src/core/server/http/router/response.ts", - "deprecated": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - } - ] - }, - "common": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - } -} \ No newline at end of file diff --git a/api_docs/core_http.mdx b/api_docs/core_http.mdx deleted file mode 100644 index 3dca29910f474..0000000000000 --- a/api_docs/core_http.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -id: kibCoreHttpPluginApi -slug: /kibana-dev-docs/api/core-http -title: "core.http" -image: https://source.unsplash.com/400x175/?github -summary: API docs for the core.http plugin -date: 2022-07-13 -tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.http'] -warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. ---- -import coreHttpObj from './core_http.devdocs.json'; - - - -Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. - -**Code health stats** - -| Public API count | Any count | Items lacking comments | Missing exports | -|-------------------|-----------|------------------------|-----------------| -| 2489 | 9 | 746 | 25 | - -## Server - -### Objects - - -### Classes - - diff --git a/api_docs/core_saved_objects.mdx b/api_docs/core_saved_objects.mdx index ef05af39d188d..c6536a2b385fb 100644 --- a/api_docs/core_saved_objects.mdx +++ b/api_docs/core_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-savedObjects title: "core.savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.savedObjects plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2489 | 9 | 746 | 25 | +| 2472 | 6 | 724 | 22 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index ee0b3ef00b9be..92901a3bcc233 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github summary: API docs for the customIntegrations plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 17a5f089230cd..6d6f8231dae94 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboard plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index cb8a65c67c0e3..9c8b86bab716f 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboardEnhanced plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index cc89249f62a1b..128560ead897f 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -645,7 +645,15 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "" + ">" ], "path": "src/plugins/data/common/search/aggs/agg_config.ts", "deprecated": false, @@ -12955,7 +12963,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) => void" ], @@ -12995,7 +13003,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">" ], @@ -19389,7 +19397,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) => void" ], @@ -19429,7 +19437,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">" ], @@ -19517,7 +19525,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { @@ -22619,7 +22627,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">> | undefined; runtimeFieldMap?: Record> | undefined; runtimeFieldMap?: Record | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { diff --git a/api_docs/data.mdx b/api_docs/data.mdx index f6c01d22f9c87..3822a516eaafb 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github summary: API docs for the data plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 50c49ba0251eb..d5c579e9428a5 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.query plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index a406c0bcb8d3f..65cfc70b670cd 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -1465,16 +1465,7 @@ "docId": "kibDataSearchPluginApi", "section": "def-server.ISearchSessionService", "text": "ISearchSessionService" - }, - "<", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSessionSavedObjectAttributes", - "text": "SearchSessionSavedObjectAttributes" - }, - ">" + } ], "path": "src/plugins/data/server/search/session/session_service.ts", "deprecated": false, @@ -2718,9 +2709,25 @@ "label": "saveSession", "description": [], "signature": [ - "(sessionId: string, attributes: Partial) => Promise<", + "(sessionId: string, attributes: Partial<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ">) => Promise<", "SavedObject", - " | undefined>" + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + "> | undefined>" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false, @@ -2744,7 +2751,27 @@ "label": "attributes", "description": [], "signature": [ - "{ [P in keyof T]?: T[P] | undefined; }" + "{ sessionId?: string | undefined; name?: string | undefined; appId?: string | undefined; created?: string | undefined; touched?: string | undefined; expires?: string | undefined; completed?: string | null | undefined; status?: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionStatus", + "text": "SearchSessionStatus" + }, + " | undefined; locatorId?: string | undefined; initialState?: ", + "SerializableRecord", + " | undefined; restoreState?: ", + "SerializableRecord", + " | undefined; idMapping?: Record | undefined; persisted?: boolean | undefined; realmType?: string | undefined; realmName?: string | undefined; username?: string | undefined; version?: string | undefined; }" ], "path": "src/plugins/data/server/search/session/types.ts", "deprecated": false @@ -2761,7 +2788,15 @@ "signature": [ "(sessionId: string) => Promise<", "SavedObject", - ">" + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ">>" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false, @@ -2803,7 +2838,15 @@ "section": "def-server.SavedObjectsFindResponse", "text": "SavedObjectsFindResponse" }, - ">" + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ", unknown>>" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false, @@ -2860,7 +2903,15 @@ "label": "updateSession", "description": [], "signature": [ - "(sessionId: string, attributes: Partial) => Promise<", + "(sessionId: string, attributes: Partial<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ">) => Promise<", { "pluginId": "core", "scope": "server", @@ -2868,7 +2919,15 @@ "section": "def-server.SavedObjectsUpdateResponse", "text": "SavedObjectsUpdateResponse" }, - ">" + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ">>" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false, @@ -2892,7 +2951,27 @@ "label": "attributes", "description": [], "signature": [ - "{ [P in keyof T]?: T[P] | undefined; }" + "{ sessionId?: string | undefined; name?: string | undefined; appId?: string | undefined; created?: string | undefined; touched?: string | undefined; expires?: string | undefined; completed?: string | null | undefined; status?: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionStatus", + "text": "SearchSessionStatus" + }, + " | undefined; locatorId?: string | undefined; initialState?: ", + "SerializableRecord", + " | undefined; restoreState?: ", + "SerializableRecord", + " | undefined; idMapping?: Record | undefined; persisted?: boolean | undefined; realmType?: string | undefined; realmName?: string | undefined; username?: string | undefined; version?: string | undefined; }" ], "path": "src/plugins/data/server/search/session/types.ts", "deprecated": false @@ -2967,7 +3046,15 @@ "section": "def-server.SavedObjectsUpdateResponse", "text": "SavedObjectsUpdateResponse" }, - ">" + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSessionSavedObjectAttributes", + "text": "SearchSessionSavedObjectAttributes" + }, + ">>" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false, @@ -3008,16 +3095,6 @@ "tags": [], "label": "ISearchSessionService", "description": [], - "signature": [ - { - "pluginId": "data", - "scope": "server", - "docId": "kibDataSearchPluginApi", - "section": "def-server.ISearchSessionService", - "text": "ISearchSessionService" - }, - "" - ], "path": "src/plugins/data/server/search/session/types.ts", "deprecated": false, "children": [ @@ -3040,8 +3117,7 @@ ") => (request: ", "KibanaRequest", ") => ", - "IScopedSearchSessionsClient", - "" + "IScopedSearchSessionsClient" ], "path": "src/plugins/data/server/search/session/types.ts", "deprecated": false, @@ -3758,8 +3834,7 @@ "label": "searchSessionsClient", "description": [], "signature": [ - "IScopedSearchSessionsClient", - "" + "IScopedSearchSessionsClient" ], "path": "src/plugins/data/server/search/types.ts", "deprecated": false @@ -4481,7 +4556,15 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "" + ">" ], "path": "src/plugins/data/common/search/aggs/agg_config.ts", "deprecated": false, @@ -7126,7 +7209,15 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "" + ">" ], "path": "src/plugins/data/common/search/aggs/agg_type.ts", "deprecated": false, @@ -21671,7 +21762,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) | undefined" ], diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index b141bc3f7fa82..606b543770e9b 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.search plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_view_editor.devdocs.json b/api_docs/data_view_editor.devdocs.json index edcf82634ea28..a03f5a4289435 100644 --- a/api_docs/data_view_editor.devdocs.json +++ b/api_docs/data_view_editor.devdocs.json @@ -128,6 +128,21 @@ ], "path": "src/plugins/data_view_editor/public/types.ts", "deprecated": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorProps.allowAdHocDataView", + "type": "CompoundType", + "tags": [], + "label": "allowAdHocDataView", + "description": [ + "\nif set to true user is presented with an option to create ad-hoc dataview without a saved object." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data_view_editor/public/types.ts", + "deprecated": false } ], "initialIsOpen": false diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index a0dfcb172f2c8..242a4f5e76579 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewEditor plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 7 | 0 | +| 15 | 0 | 7 | 0 | ## Client diff --git a/api_docs/data_view_field_editor.devdocs.json b/api_docs/data_view_field_editor.devdocs.json index 8b3e28b5fd93a..7f38835b2639d 100644 --- a/api_docs/data_view_field_editor.devdocs.json +++ b/api_docs/data_view_field_editor.devdocs.json @@ -127,7 +127,7 @@ "label": "onChange", "description": [], "signature": [ - "(newParams?: {}) => void" + "(newParams?: Partial<{ type?: string | undefined; } & P>) => void" ], "path": "src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx", "deprecated": false, @@ -140,7 +140,7 @@ "label": "newParams", "description": [], "signature": [ - "{}" + "Partial<{ type?: string | undefined; } & P>" ], "path": "src/plugins/data_view_field_editor/public/components/field_format_editor/editors/default/default.tsx", "deprecated": false, @@ -242,7 +242,9 @@ "label": "onChange", "description": [], "signature": [ - "(newParams: { [key: string]: any; }) => void" + "(newParams: ", + "SerializableRecord", + ") => void" ], "path": "src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts", "deprecated": false, @@ -254,23 +256,12 @@ "tags": [], "label": "newParams", "description": [], + "signature": [ + "SerializableRecord" + ], "path": "src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts", "deprecated": false, - "children": [ - { - "parentPluginId": "dataViewFieldEditor", - "id": "def-public.FormatEditorProps.onChange.$1.Unnamed", - "type": "IndexSignature", - "tags": [], - "label": "[key: string]: any", - "description": [], - "signature": [ - "[key: string]: any" - ], - "path": "src/plugins/data_view_field_editor/public/components/field_format_editor/editors/types.ts", - "deprecated": false - } - ] + "isRequired": true } ], "returnComment": [] @@ -556,7 +547,7 @@ "section": "def-public.FieldFormatEditorFactory", "text": "FieldFormatEditorFactory" }, - ") => void; }" + "<{}>) => void; }" ], "path": "src/plugins/data_view_field_editor/public/types.ts", "deprecated": false @@ -679,7 +670,7 @@ "section": "def-public.FieldFormatEditorFactory", "text": "FieldFormatEditorFactory" }, - "[]; getById: (id: string) => ", + "<{}>[]; getById:

(id: string) => ", { "pluginId": "dataViewFieldEditor", "scope": "public", @@ -687,7 +678,7 @@ "section": "def-public.FieldFormatEditorFactory", "text": "FieldFormatEditorFactory" }, - " | undefined; }" + "

| undefined; }" ], "path": "src/plugins/data_view_field_editor/public/types.ts", "deprecated": false diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 59bf59eefe9bd..64b7f890a340d 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewFieldEditor plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 42 | 0 | 37 | 3 | +| 41 | 0 | 36 | 3 | ## Client diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index d1f57d8a709de..f6c1c816c3463 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewManagement plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 1182fdba14c4d..69caa706b7227 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -1451,7 +1451,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) => void" ], @@ -1491,7 +1491,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">" ], @@ -1579,7 +1579,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { @@ -5902,7 +5902,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">> | undefined; runtimeFieldMap?: Record | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { @@ -7555,7 +7555,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) => void" ], @@ -7595,7 +7595,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">" ], @@ -10240,7 +10240,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { @@ -13560,7 +13560,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">) => void" ], @@ -13600,7 +13600,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">" ], @@ -13688,7 +13688,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { @@ -17765,7 +17765,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | null | undefined" ], @@ -18532,7 +18532,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">> | undefined; runtimeFieldMap?: Record> | undefined; runtimeFieldMap?: Record; }" ], @@ -19966,7 +19966,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; esTypes?: string[] | undefined; searchable: boolean; aggregatable: boolean; readFromDocValues?: boolean | undefined; indexed?: boolean | undefined; customLabel?: string | undefined; runtimeField?: ", { diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index affa6f0e564e2..f5ad4f7c782d3 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViews plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 7c3260f17f381..ca0383f02bd8c 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataVisualizer plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 671d479bbccc2..2b8ef4377da72 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index fab0384a628df..1c116f6874be7 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- @@ -217,7 +217,7 @@ so TS and code-reference navigation might not highlight them. | | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [page_template.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx#:~:text=KibanaPageTemplateProps), [page_template.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx#:~:text=KibanaPageTemplateProps) | - | -| | [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [product_selector.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx#:~:text=KibanaPageTemplate), [product_selector.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx#:~:text=KibanaPageTemplate), [product_selector.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate)+ 11 more | - | +| | [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [version_mismatch_page.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/version_mismatch/version_mismatch_page.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate), [page_template.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx#:~:text=KibanaPageTemplate), [page_template.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx#:~:text=KibanaPageTemplate), [page_template.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx#:~:text=KibanaPageTemplate), [error_connecting.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/error_connecting/error_connecting.tsx#:~:text=KibanaPageTemplate)+ 8 more | - | | | [account_settings.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi) | - | | | [check_access.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 8d5fe5e1eae5d..ec25b9ed7e4d5 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team summary: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index aa54cbe4f050e..3bbded301146a 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github summary: API docs for the devTools plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index f65c671bed195..9ee768d6ccff2 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github summary: API docs for the discover plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 0e9c5ec48c255..942b1a2791147 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the discoverEnhanced plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/elastic_apm_synthtrace.mdx b/api_docs/elastic_apm_synthtrace.mdx index 5ca22a26a6e36..652bcb829b36d 100644 --- a/api_docs/elastic_apm_synthtrace.mdx +++ b/api_docs/elastic_apm_synthtrace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/elastic-apm-synthtrace title: "@elastic/apm-synthtrace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @elastic/apm-synthtrace plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@elastic/apm-synthtrace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index e4131ab27841b..4a53f6c3bc704 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddable plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 57a314069ec80..722821b64b8b9 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddableEnhanced plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 6d81ac8710d6d..25760de133fcd 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the encryptedSavedObjects plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index e63cd6c903d56..ca000e0cbdda2 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the enterpriseSearch plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 9af8efc8273f8..744edc9147194 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github summary: API docs for the esUiShared plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index ef1af364265bd..0cb6faf9f7921 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventAnnotation plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 8f4e382d5481b..bf8a6079f2f48 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventLog plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 51094be114475..fdb9f22e90e41 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionError plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_gauge.devdocs.json b/api_docs/expression_gauge.devdocs.json index c3acd6e8b013f..89a17fbf23fa0 100644 --- a/api_docs/expression_gauge.devdocs.json +++ b/api_docs/expression_gauge.devdocs.json @@ -898,7 +898,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined) => ", { @@ -928,7 +928,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index e50484b266e4c..bfe26a9810ee1 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionGauge plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_heatmap.devdocs.json b/api_docs/expression_heatmap.devdocs.json index 0a8c0f54bc641..6cc1961115e4e 100644 --- a/api_docs/expression_heatmap.devdocs.json +++ b/api_docs/expression_heatmap.devdocs.json @@ -485,7 +485,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined) => ", { @@ -515,7 +515,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 685f99a7ba9e0..ba8d4bde0ea74 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionHeatmap plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 2e1f71c8bdd5c..5090c83da7a37 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionImage plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 9e6300966a37f..c60be92df439d 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionLegacyMetricVis plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index e8985aa1d6ed7..448a10c15c0a0 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetric plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index ed1d2c1b8385d..a8fbfe9dccf90 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetricVis plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_partition_vis.devdocs.json b/api_docs/expression_partition_vis.devdocs.json index 215825a71615f..2f6134f683007 100644 --- a/api_docs/expression_partition_vis.devdocs.json +++ b/api_docs/expression_partition_vis.devdocs.json @@ -253,7 +253,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; }" ], diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 0dc3ea7c83883..0b3d3ec2cb487 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionPartitionVis plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index fff23cee1715b..2ef5c54bd07e5 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRepeatImage plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 03329e37a283c..39653b4b02bc8 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRevealImage plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index e9b3fd2668ae8..62d44a3f287a4 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionShape plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 1cf371bedce39..58c5ff7542301 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionTagcloud plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_x_y.devdocs.json b/api_docs/expression_x_y.devdocs.json index 8e4323a0f0114..4f47ae934bf4d 100644 --- a/api_docs/expression_x_y.devdocs.json +++ b/api_docs/expression_x_y.devdocs.json @@ -96,10 +96,10 @@ }, { "parentPluginId": "expressionXY", - "id": "def-common.AnnotationLayerArgs.hide", + "id": "def-common.AnnotationLayerArgs.simpleView", "type": "CompoundType", "tags": [], - "label": "hide", + "label": "simpleView", "description": [], "signature": [ "boolean | undefined" @@ -582,10 +582,10 @@ }, { "parentPluginId": "expressionXY", - "id": "def-common.DataLayerArgs.hide", + "id": "def-common.DataLayerArgs.simpleView", "type": "CompoundType", "tags": [], - "label": "hide", + "label": "simpleView", "description": [], "signature": [ "boolean | undefined" diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 07590478a7e0e..3e646cc1d4144 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionXY plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index bea645fca66b1..dd9b0e90dcf4c 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -27942,7 +27942,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index f8c304a1aeab4..239e15f230145 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressions plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/features.mdx b/api_docs/features.mdx index d6353777ae421..b2e2cb8636e8f 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github summary: API docs for the features plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/field_formats.devdocs.json b/api_docs/field_formats.devdocs.json index 1fbc728768522..6ee4a0284f9f5 100644 --- a/api_docs/field_formats.devdocs.json +++ b/api_docs/field_formats.devdocs.json @@ -2116,7 +2116,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined) => ", { @@ -2145,7 +2145,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], @@ -4878,7 +4878,8 @@ "\nParams provided when creating a formatter.\nParams are vary per formatter\n\nTODO: support strict typing for params depending on format type\nhttps://github.com/elastic/kibana/issues/108158" ], "signature": [ - "SerializableRecord" + "SerializableRecord", + " & P" ], "path": "src/plugins/field_formats/common/types.ts", "deprecated": false, @@ -5082,7 +5083,7 @@ "label": "FormatFactory", "description": [], "signature": [ - "(mapping?: ", + "

(mapping?: ", { "pluginId": "fieldFormats", "scope": "common", @@ -5090,9 +5091,15 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", - "SerializableRecord", - "> | undefined) => ", + "> | undefined) => ", { "pluginId": "fieldFormats", "scope": "common", @@ -5120,9 +5127,15 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", - "SerializableRecord", - "> | undefined" + "> | undefined" ], "path": "src/plugins/field_formats/common/types.ts", "deprecated": false diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 3f308b1e45891..be83fc50e1a71 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github summary: API docs for the fieldFormats plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 0a0984a7c1b61..483619e1e4180 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github summary: API docs for the fileUpload plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 0e8db05a8eb7a..aec385e2eab76 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -564,6 +564,19 @@ "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", "deprecated": false }, + { + "parentPluginId": "fleet", + "id": "def-public.NewPackagePolicy.is_managed", + "type": "CompoundType", + "tags": [], + "label": "is_managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", + "deprecated": false + }, { "parentPluginId": "fleet", "id": "def-public.NewPackagePolicy.policy_id", @@ -1342,7 +1355,7 @@ "The updated Integration Policy to be merged back and included in the API call" ], "signature": [ - "{ id?: string | number | undefined; name?: string | undefined; description?: string | undefined; namespace?: string | undefined; enabled?: boolean | undefined; policy_id?: string | undefined; output_id?: string | undefined; package?: ", + "{ id?: string | number | undefined; name?: string | undefined; description?: string | undefined; namespace?: string | undefined; enabled?: boolean | undefined; is_managed?: boolean | undefined; policy_id?: string | undefined; output_id?: string | undefined; package?: ", { "pluginId": "fleet", "scope": "common", @@ -10545,6 +10558,19 @@ "description": [], "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", "deprecated": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.AgentPolicy.agents", + "type": "number", + "tags": [], + "label": "agents", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", + "deprecated": false } ], "initialIsOpen": false @@ -16436,6 +16462,19 @@ "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", "deprecated": false }, + { + "parentPluginId": "fleet", + "id": "def-common.NewPackagePolicy.is_managed", + "type": "CompoundType", + "tags": [], + "label": "is_managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", + "deprecated": false + }, { "parentPluginId": "fleet", "id": "def-common.NewPackagePolicy.policy_id", @@ -20222,7 +20261,7 @@ "section": "def-common.ValueOf", "text": "ValueOf" }, - "<{ readonly Active: \"active\"; readonly Inactive: \"inactive\"; }>; description?: string | undefined; name: string; updated_at: string; namespace: string; updated_by: string; is_default?: boolean | undefined; is_default_fleet_server?: boolean | undefined; has_fleet_server?: boolean | undefined; is_managed: boolean; monitoring_enabled?: (\"metrics\" | \"logs\")[] | undefined; unenroll_timeout?: number | undefined; is_preconfigured?: boolean | undefined; data_output_id?: string | null | undefined; monitoring_output_id?: string | null | undefined; download_source_id?: string | null | undefined; package_policies: string[] | ", + "<{ readonly Active: \"active\"; readonly Inactive: \"inactive\"; }>; description?: string | undefined; name: string; updated_at: string; namespace: string; updated_by: string; is_managed: boolean; is_default?: boolean | undefined; is_default_fleet_server?: boolean | undefined; has_fleet_server?: boolean | undefined; monitoring_enabled?: (\"metrics\" | \"logs\")[] | undefined; unenroll_timeout?: number | undefined; is_preconfigured?: boolean | undefined; data_output_id?: string | null | undefined; monitoring_output_id?: string | null | undefined; download_source_id?: string | null | undefined; package_policies: string[] | ", { "pluginId": "fleet", "scope": "common", @@ -20230,7 +20269,7 @@ "section": "def-common.PackagePolicy", "text": "PackagePolicy" }, - "[]; revision: number; }" + "[]; revision: number; agents?: number | undefined; }" ], "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", "deprecated": false, @@ -22293,7 +22332,7 @@ "section": "def-common.PackagePolicyInput", "text": "PackagePolicyInput" }, - "[]; policy_id: string; output_id: string; revision: number; }" + "[]; is_managed?: boolean | undefined; policy_id: string; output_id: string; revision: number; }" ], "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 9e4d8abbf4299..0c6b50fdcbaba 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github summary: API docs for the fleet plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Fleet](https://github.com/orgs/elastic/teams/fleet) for questions regar | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1522 | 8 | 1390 | 10 | +| 1525 | 8 | 1393 | 10 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index dd60d001c83c5..2723d4f6e8c65 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the globalSearch plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/home.mdx b/api_docs/home.mdx index dcf20af6a1d11..f854b50ca3c46 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github summary: API docs for the home plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index c806e66c7e64b..4fc5d960a2148 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexLifecycleManagement plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 05e767cf2fc4c..8dd28aa8de103 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexManagement plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index d2c9347b374b5..cc46935d05be2 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github summary: API docs for the infra plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index db6eb55ddad01..94489a03e5334 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github summary: API docs for the inspector plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 632870059bc83..bc5f5239b9121 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github summary: API docs for the interactiveSetup plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index d33da0ffedfeb..3a0fb68f7e276 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ace plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 67908b73aaf91..f892382e2d980 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/aiops-components plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 16b93b3725319..3c4a88c4ece35 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/aiops-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 50b568cc1982a..7576954a8e867 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/alerts plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 13aa2734bd079..58d40c7854834 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 276c72a842dfc..0f99bb0d50192 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-client plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 4b9a8759b2b1b..89df1534b5024 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 7e0390fc7d255..042d33148c7ab 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 8e9c1a191211b..6eab6975ace2a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 17813d56492b2..1a6c6a6c29a8c 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 5c00309bd8842..24b69f7e51081 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-config-loader plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 5203af444072a..1e5722fe7e8cc 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index c94abfadcbe05..a8f7220cc05ad 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/axe-config plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_bazel_packages.mdx b/api_docs/kbn_bazel_packages.mdx index 99c31ede3a39d..7aeda72838515 100644 --- a/api_docs/kbn_bazel_packages.mdx +++ b/api_docs/kbn_bazel_packages.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-bazel-packages title: "@kbn/bazel-packages" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/bazel-packages plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bazel-packages'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_bazel_runner.mdx b/api_docs/kbn_bazel_runner.mdx index 6d99f6c5f5299..54d8e93528fc5 100644 --- a/api_docs/kbn_bazel_runner.mdx +++ b/api_docs/kbn_bazel_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-bazel-runner title: "@kbn/bazel-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/bazel-runner plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bazel-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index dc14fb459eb97..3ca28e5a00a81 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-core plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 38dc0a15f5175..11f5ff83daab5 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 869643ad84802..1df2abbea0d2e 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-reporter plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 15587ab667343..44ef4146a587a 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/cli-dev-mode plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 471a883e4db00..37692b467b530 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/coloring plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index e3f717c4d980a..ba10ea449d7ed 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index c8d686e8deda8..c5e14a6ce3ef8 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index a9387c456838b..e2369107ebad8 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-schema plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 2fc459ffbbe1a..f279096a8aeb8 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index c28cc9230262a..6e9c64f546655 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index c3dea4bb4fec1..4af5fc170de17 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index f2f99d527dd31..223d8d5438765 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index e6e247e4970ab..6d37d452f045a 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 92e3d24c1bedb..13dd7f8718c31 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index ad6288df80ee0..4b27a8e593b66 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index ba1e4abd15ae2..ad49df0e0fc86 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-common plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index c7d4e0c80c19e..d4548895b8138 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index d2b99c2f95faf..10746192e53dc 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 9c7741208effb..db2484ca5660b 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-config-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_deprecations_browser.devdocs.json b/api_docs/kbn_core_deprecations_browser.devdocs.json new file mode 100644 index 0000000000000..76ea9b00bad48 --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser.devdocs.json @@ -0,0 +1,189 @@ +{ + "id": "@kbn/core-deprecations-browser", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart", + "type": "Interface", + "tags": [], + "label": "DeprecationsServiceStart", + "description": [ + "\nDeprecationsService provides methods to fetch domain deprecation details from\nthe Kibana server.\n" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.getAllDeprecations", + "type": "Function", + "tags": [], + "label": "getAllDeprecations", + "description": [ + "\nGrabs deprecations details for all domains." + ], + "signature": [ + "() => Promise<", + "DomainDeprecationDetails", + "[]>" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.getDeprecations", + "type": "Function", + "tags": [], + "label": "getDeprecations", + "description": [ + "\nGrabs deprecations for a specific domain.\n" + ], + "signature": [ + "(domainId: string) => Promise<", + "DomainDeprecationDetails", + "[]>" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.getDeprecations.$1", + "type": "string", + "tags": [], + "label": "domainId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.isDeprecationResolvable", + "type": "Function", + "tags": [], + "label": "isDeprecationResolvable", + "description": [ + "\nReturns a boolean if the provided deprecation can be automatically resolvable.\n" + ], + "signature": [ + "(details: ", + "DomainDeprecationDetails", + ") => boolean" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.isDeprecationResolvable.$1", + "type": "CompoundType", + "tags": [], + "label": "details", + "description": [], + "signature": [ + "DomainDeprecationDetails" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.resolveDeprecation", + "type": "Function", + "tags": [], + "label": "resolveDeprecation", + "description": [ + "\nCalls the correctiveActions.api to automatically resolve the depprecation.\n" + ], + "signature": [ + "(details: ", + "DomainDeprecationDetails", + ") => Promise<", + { + "pluginId": "@kbn/core-deprecations-browser", + "scope": "common", + "docId": "kibKbnCoreDeprecationsBrowserPluginApi", + "section": "def-common.ResolveDeprecationResponse", + "text": "ResolveDeprecationResponse" + }, + ">" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.DeprecationsServiceStart.resolveDeprecation.$1", + "type": "CompoundType", + "tags": [], + "label": "details", + "description": [], + "signature": [ + "DomainDeprecationDetails" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/contracts.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-deprecations-browser", + "id": "def-common.ResolveDeprecationResponse", + "type": "Type", + "tags": [], + "label": "ResolveDeprecationResponse", + "description": [ + "\nResponse from correctiveActions.api call from automatically resolving the deprecation" + ], + "signature": [ + "{ status: \"ok\"; } | { status: \"fail\"; reason: string; }" + ], + "path": "packages/core/deprecations/core-deprecations-browser/src/types.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx new file mode 100644 index 0000000000000..8a09d18d10e2d --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -0,0 +1,30 @@ +--- +id: kibKbnCoreDeprecationsBrowserPluginApi +slug: /kibana-dev-docs/api/kbn-core-deprecations-browser +title: "@kbn/core-deprecations-browser" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-deprecations-browser plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 9 | 0 | 3 | 0 | + +## Common + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_deprecations_browser_internal.devdocs.json b/api_docs/kbn_core_deprecations_browser_internal.devdocs.json new file mode 100644 index 0000000000000..3d549b7a15850 --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser_internal.devdocs.json @@ -0,0 +1,129 @@ +{ + "id": "@kbn/core-deprecations-browser-internal", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService", + "type": "Class", + "tags": [], + "label": "DeprecationsService", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-browser-internal", + "scope": "common", + "docId": "kibKbnCoreDeprecationsBrowserInternalPluginApi", + "section": "def-common.DeprecationsService", + "text": "DeprecationsService" + }, + " implements ", + "CoreService", + "" + ], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService.setup", + "type": "Function", + "tags": [], + "label": "setup", + "description": [], + "signature": [ + "() => void" + ], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService.start", + "type": "Function", + "tags": [], + "label": "start", + "description": [], + "signature": [ + "({ http }: { http: ", + "HttpSetup", + "; }) => ", + "DeprecationsServiceStart" + ], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService.start.$1", + "type": "Object", + "tags": [], + "label": "{ http }", + "description": [], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService.start.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + "HttpSetup" + ], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser-internal", + "id": "def-common.DeprecationsService.stop", + "type": "Function", + "tags": [], + "label": "stop", + "description": [], + "signature": [ + "() => void" + ], + "path": "packages/core/deprecations/core-deprecations-browser-internal/src/deprecations_service.ts", + "deprecated": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx new file mode 100644 index 0000000000000..1ff6711cbba7e --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -0,0 +1,27 @@ +--- +id: kibKbnCoreDeprecationsBrowserInternalPluginApi +slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal +title: "@kbn/core-deprecations-browser-internal" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-deprecations-browser-internal plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 6 | 0 | 6 | 0 | + +## Common + +### Classes + + diff --git a/api_docs/kbn_core_deprecations_browser_mocks.devdocs.json b/api_docs/kbn_core_deprecations_browser_mocks.devdocs.json new file mode 100644 index 0000000000000..6a3c846f820ae --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser_mocks.devdocs.json @@ -0,0 +1,92 @@ +{ + "id": "@kbn/core-deprecations-browser-mocks", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-mocks", + "id": "def-common.deprecationsServiceMock", + "type": "Object", + "tags": [], + "label": "deprecationsServiceMock", + "description": [], + "path": "packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-browser-mocks", + "id": "def-common.deprecationsServiceMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked<", + "PublicMethodsOf", + "<", + "DeprecationsService", + ">>" + ], + "path": "packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser-mocks", + "id": "def-common.deprecationsServiceMock.createSetupContract", + "type": "Function", + "tags": [], + "label": "createSetupContract", + "description": [], + "signature": [ + "() => undefined" + ], + "path": "packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-deprecations-browser-mocks", + "id": "def-common.deprecationsServiceMock.createStartContract", + "type": "Function", + "tags": [], + "label": "createStartContract", + "description": [], + "signature": [ + "() => jest.Mocked<", + "DeprecationsServiceStart", + ">" + ], + "path": "packages/core/deprecations/core-deprecations-browser-mocks/src/deprecations_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + } + ], + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx new file mode 100644 index 0000000000000..f613c435d770d --- /dev/null +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -0,0 +1,27 @@ +--- +id: kibKbnCoreDeprecationsBrowserMocksPluginApi +slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks +title: "@kbn/core-deprecations-browser-mocks" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-deprecations-browser-mocks plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 4 | 0 | 4 | 0 | + +## Common + +### Objects + + diff --git a/api_docs/kbn_core_deprecations_common.devdocs.json b/api_docs/kbn_core_deprecations_common.devdocs.json new file mode 100644 index 0000000000000..bdaa9bdad8fd6 --- /dev/null +++ b/api_docs/kbn_core_deprecations_common.devdocs.json @@ -0,0 +1,321 @@ +{ + "id": "@kbn/core-deprecations-common", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails", + "type": "Interface", + "tags": [], + "label": "BaseDeprecationDetails", + "description": [ + "\nBase properties shared by all types of deprecations\n" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.title", + "type": "string", + "tags": [], + "label": "title", + "description": [ + "\nThe title of the deprecation.\nCheck the README for writing deprecations in `src/core/server/deprecations/README.mdx`" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.message", + "type": "string", + "tags": [], + "label": "message", + "description": [ + "\nThe description message to be displayed for the deprecation.\nCheck the README for writing deprecations in `src/core/server/deprecations/README.mdx`" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.level", + "type": "CompoundType", + "tags": [], + "label": "level", + "description": [ + "\nlevels:\n- warning: will not break deployment upon upgrade\n- critical: needs to be addressed before upgrade.\n- fetch_error: Deprecations service failed to grab the deprecation details for the domain." + ], + "signature": [ + "\"warning\" | \"critical\" | \"fetch_error\"" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.deprecationType", + "type": "CompoundType", + "tags": [], + "label": "deprecationType", + "description": [ + "\n(optional) Used to identify between different deprecation types.\nExample use case: in Upgrade Assistant, we may want to allow the user to sort by\ndeprecation type or show each type in a separate tab.\n\nFeel free to add new types if necessary.\nPredefined types are necessary to reduce having similar definitions with different keywords\nacross kibana deprecations." + ], + "signature": [ + "\"config\" | \"feature\" | undefined" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.documentationUrl", + "type": "string", + "tags": [], + "label": "documentationUrl", + "description": [ + "(optional) link to the documentation for more details on the deprecation." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.requireRestart", + "type": "CompoundType", + "tags": [], + "label": "requireRestart", + "description": [ + "(optional) specify the fix for this deprecation requires a full kibana restart." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.BaseDeprecationDetails.correctiveActions", + "type": "Object", + "tags": [], + "label": "correctiveActions", + "description": [ + "corrective action needed to fix this deprecation." + ], + "signature": [ + "{ api?: { path: string; method: \"POST\" | \"PUT\"; body?: { [key: string]: any; } | undefined; omitContextFromBody?: boolean | undefined; } | undefined; manualSteps: string[]; }" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.ConfigDeprecationDetails", + "type": "Interface", + "tags": [], + "label": "ConfigDeprecationDetails", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.ConfigDeprecationDetails", + "text": "ConfigDeprecationDetails" + }, + " extends ", + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.BaseDeprecationDetails", + "text": "BaseDeprecationDetails" + } + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.ConfigDeprecationDetails.configPath", + "type": "string", + "tags": [], + "label": "configPath", + "description": [], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.ConfigDeprecationDetails.deprecationType", + "type": "string", + "tags": [], + "label": "deprecationType", + "description": [], + "signature": [ + "\"config\"" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationsGetResponse", + "type": "Interface", + "tags": [], + "label": "DeprecationsGetResponse", + "description": [], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationsGetResponse.deprecations", + "type": "Array", + "tags": [], + "label": "deprecations", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.DomainDeprecationDetails", + "text": "DomainDeprecationDetails" + }, + "[]" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.FeatureDeprecationDetails", + "type": "Interface", + "tags": [], + "label": "FeatureDeprecationDetails", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.FeatureDeprecationDetails", + "text": "FeatureDeprecationDetails" + }, + " extends ", + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.BaseDeprecationDetails", + "text": "BaseDeprecationDetails" + } + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.FeatureDeprecationDetails.deprecationType", + "type": "string", + "tags": [], + "label": "deprecationType", + "description": [], + "signature": [ + "\"feature\" | undefined" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationsDetails", + "type": "Type", + "tags": [], + "label": "DeprecationsDetails", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.ConfigDeprecationDetails", + "text": "ConfigDeprecationDetails" + }, + " | ", + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.FeatureDeprecationDetails", + "text": "FeatureDeprecationDetails" + } + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DomainDeprecationDetails", + "type": "Type", + "tags": [], + "label": "DomainDeprecationDetails", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.DeprecationsDetails", + "text": "DeprecationsDetails" + }, + " & { domainId: string; }" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx new file mode 100644 index 0000000000000..1655e5ace5d75 --- /dev/null +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -0,0 +1,30 @@ +--- +id: kibKbnCoreDeprecationsCommonPluginApi +slug: /kibana-dev-docs/api/kbn-core-deprecations-common +title: "@kbn/core-deprecations-common" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-deprecations-common plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 17 | 0 | 9 | 0 | + +## Common + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 1a969e948111d..0d3d4b782a6e6 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index cd9441faafeae..3db9ce527e743 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index e960e0a78e180..b8bf4362d80e1 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 6fcdb8e176c21..e02f196c84624 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 51a204698e524..8e9ab43eac32f 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-environment-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index d430edc47a08a..d7206b6566221 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-environment-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 83698a759bb1b..935c7d10bb4e4 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index ea919a39c9a6d..e9d8b97b72bd4 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 05abf8327f857..ceebcf02bb548 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 959a2dbc027ba..174ba7a2883ba 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-common plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index a88ed431d022f..1f3b85bc43bd5 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 22d3cdf2819ec..a2ac783457fdf 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 368b325e127a5..9f49fcec212b6 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index a7b2329ec2369..1d7ad995b0c82 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index bfea5fb0095d6..6b7c0d2ddcf77 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 742d0816a7548..61a5977759133 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index c6859f2ef93e6..9c8c687cdb714 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index df680225c6251..12d2c6fbf3df9 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 97ec4742c8089..5976a476a2c79 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-common plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_context_server_mocks.devdocs.json b/api_docs/kbn_core_http_context_server_mocks.devdocs.json new file mode 100644 index 0000000000000..2c77ba329d06d --- /dev/null +++ b/api_docs/kbn_core_http_context_server_mocks.devdocs.json @@ -0,0 +1,201 @@ +{ + "id": "@kbn/core-http-context-server-mocks", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.ContextContainerMock", + "type": "Type", + "tags": [], + "label": "ContextContainerMock", + "description": [], + "signature": [ + "{ registerContext: jest.MockInstance<", + "IContextContainer", + ", [pluginOpaqueId: symbol, contextName: \"resolve\", provider: ", + "IContextProvider", + "<", + "RequestHandlerContextBase", + ", \"resolve\">]>; createHandler: jest.MockInstance<(request: ", + "KibanaRequest", + ", response: ", + "KibanaResponseFactory", + ") => Promise<", + "IKibanaResponse", + ">, [pluginOpaqueId: symbol, handler: ", + "RequestHandler", + "]>; } & ", + "IContextContainer" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_container.mock.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextMock", + "type": "Object", + "tags": [], + "label": "contextMock", + "description": [], + "path": "packages/core/http/core-http-context-server-mocks/src/context_container.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "(mockContext?: any) => ", + { + "pluginId": "@kbn/core-http-context-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpContextServerMocksPluginApi", + "section": "def-server.ContextContainerMock", + "text": "ContextContainerMock" + } + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_container.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextMock.create.$1", + "type": "Any", + "tags": [], + "label": "mockContext", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_container.mock.ts", + "deprecated": false + } + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock", + "type": "Object", + "tags": [], + "label": "contextServiceMock", + "description": [], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock.createPrebootContract", + "type": "Function", + "tags": [], + "label": "createPrebootContract", + "description": [], + "signature": [ + "(mockContext?: {}) => jest.Mocked<", + "InternalContextSetup", + ">" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock.createPrebootContract.$1", + "type": "Object", + "tags": [], + "label": "mockContext", + "description": [], + "signature": [ + "{}" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock.createSetupContract", + "type": "Function", + "tags": [], + "label": "createSetupContract", + "description": [], + "signature": [ + "(mockContext?: {}) => jest.Mocked<", + "InternalContextSetup", + ">" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-context-server-mocks", + "id": "def-server.contextServiceMock.createSetupContract.$1", + "type": "Object", + "tags": [], + "label": "mockContext", + "description": [], + "signature": [ + "{}" + ], + "path": "packages/core/http/core-http-context-server-mocks/src/context_service.mock.ts", + "deprecated": false + } + ] + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx new file mode 100644 index 0000000000000..b6a5c32870cfc --- /dev/null +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -0,0 +1,30 @@ +--- +id: kibKbnCoreHttpContextServerMocksPluginApi +slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks +title: "@kbn/core-http-context-server-mocks" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-http-context-server-mocks plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 10 | 1 | 10 | 0 | + +## Server + +### Objects + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_http_router_server_internal.devdocs.json b/api_docs/kbn_core_http_router_server_internal.devdocs.json new file mode 100644 index 0000000000000..444c019edeea9 --- /dev/null +++ b/api_docs/kbn_core_http_router_server_internal.devdocs.json @@ -0,0 +1,414 @@ +{ + "id": "@kbn/core-http-router-server-internal", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter", + "type": "Class", + "tags": [], + "label": "HapiResponseAdapter", + "description": [], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "responseToolkit", + "description": [], + "signature": [ + "ResponseToolkit" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.toBadRequest", + "type": "Function", + "tags": [], + "label": "toBadRequest", + "description": [], + "signature": [ + "(message: string) => ", + "Boom", + "" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.toBadRequest.$1", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.toInternalError", + "type": "Function", + "tags": [], + "label": "toInternalError", + "description": [], + "signature": [ + "() => ", + "Boom", + "" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.handle", + "type": "Function", + "tags": [], + "label": "handle", + "description": [], + "signature": [ + "(kibanaResponse: ", + "KibanaResponse", + ") => ", + "Boom", + " | ", + "ResponseObject" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.HapiResponseAdapter.handle.$1", + "type": "Object", + "tags": [], + "label": "kibanaResponse", + "description": [], + "signature": [ + "KibanaResponse", + "" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response_adapter.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.filterHeaders", + "type": "Function", + "tags": [], + "label": "filterHeaders", + "description": [], + "signature": [ + "(headers: ", + "Headers", + ", fieldsToKeep: string[], fieldsToExclude: string[]) => ", + "Headers" + ], + "path": "packages/core/http/core-http-router-server-internal/src/headers.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.filterHeaders.$1", + "type": "CompoundType", + "tags": [], + "label": "headers", + "description": [], + "signature": [ + "Headers" + ], + "path": "packages/core/http/core-http-router-server-internal/src/headers.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.filterHeaders.$2", + "type": "Array", + "tags": [], + "label": "fieldsToKeep", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/core/http/core-http-router-server-internal/src/headers.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.filterHeaders.$3", + "type": "Array", + "tags": [], + "label": "fieldsToExclude", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/core/http/core-http-router-server-internal/src/headers.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.isKibanaResponse", + "type": "Function", + "tags": [], + "label": "isKibanaResponse", + "description": [], + "signature": [ + "(response: Record) => boolean" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.isKibanaResponse.$1", + "type": "Object", + "tags": [], + "label": "response", + "description": [], + "signature": [ + "Record" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.isSafeMethod", + "type": "Function", + "tags": [], + "label": "isSafeMethod", + "description": [], + "signature": [ + "(method: ", + "RouteMethod", + ") => boolean" + ], + "path": "packages/core/http/core-http-router-server-internal/src/route.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.isSafeMethod.$1", + "type": "CompoundType", + "tags": [], + "label": "method", + "description": [], + "signature": [ + "RouteMethod" + ], + "path": "packages/core/http/core-http-router-server-internal/src/route.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory", + "type": "Object", + "tags": [], + "label": "kibanaResponseFactory", + "description": [], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory.custom", + "type": "Function", + "tags": [], + "label": "custom", + "description": [], + "signature": [ + " | Error | ", + "Stream", + " | Buffer | { message: string | Error; attributes?: ", + "ResponseErrorAttributes", + " | undefined; } | undefined>(options: ", + "CustomHttpResponseOptions", + ") => ", + "KibanaResponse", + "" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.kibanaResponseFactory.custom.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "CustomHttpResponseOptions", + "" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.lifecycleResponseFactory", + "type": "Object", + "tags": [], + "label": "lifecycleResponseFactory", + "description": [], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.lifecycleResponseFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-router-server-internal", + "id": "def-server.lifecycleResponseFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-router-server-internal/src/response.ts", + "deprecated": false + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx new file mode 100644 index 0000000000000..dfe9ea97fb622 --- /dev/null +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -0,0 +1,33 @@ +--- +id: kibKbnCoreHttpRouterServerInternalPluginApi +slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal +title: "@kbn/core-http-router-server-internal" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-http-router-server-internal plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 25 | 5 | 25 | 1 | + +## Server + +### Objects + + +### Functions + + +### Classes + + diff --git a/api_docs/kbn_core_http_router_server_mocks.devdocs.json b/api_docs/kbn_core_http_router_server_mocks.devdocs.json new file mode 100644 index 0000000000000..90fbdecc75145 --- /dev/null +++ b/api_docs/kbn_core_http_router_server_mocks.devdocs.json @@ -0,0 +1,193 @@ +{ + "id": "@kbn/core-http-router-server-mocks", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.RouterMock", + "type": "Type", + "tags": [], + "label": "RouterMock", + "description": [], + "signature": [ + "{ routerPath: string; get: jest.MockInstance, handler: ", + "RequestHandler", + "]>; post: jest.MockInstance, handler: ", + "RequestHandler", + "]>; put: jest.MockInstance, handler: ", + "RequestHandler", + "]>; patch: jest.MockInstance, handler: ", + "RequestHandler", + "]>; delete: jest.MockInstance, handler: ", + "RequestHandler", + "]>; handleLegacyErrors: jest.MockInstance<", + "RequestHandler", + ", [handler: ", + "RequestHandler", + "]>; getRoutes: jest.MockInstance<", + "RouterRoute", + "[], []>; } & ", + "IRouter", + "" + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter", + "type": "Object", + "tags": [], + "label": "mockRouter", + "description": [], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "({ routerPath }?: { routerPath?: string | undefined; }) => ", + { + "pluginId": "@kbn/core-http-router-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpRouterServerMocksPluginApi", + "section": "def-server.RouterMock", + "text": "RouterMock" + } + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter.create.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "{ routerPath?: string | undefined; }" + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter.createKibanaRequest", + "type": "Function", + "tags": [], + "label": "createKibanaRequest", + "description": [], + "signature": [ + "

({ path, headers, params, body, query, method, socket, routeTags, routeAuthRequired, validation, kibanaRouteOptions, kibanaRequestState, auth, }?: ", + "RequestFixtureOptions", + ") => ", + "KibanaRequest", + "" + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter.createKibanaRequest.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "RequestFixtureOptions", + "" + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-router-server-mocks", + "id": "def-server.mockRouter.createResponseFactory", + "type": "Function", + "tags": [], + "label": "createResponseFactory", + "description": [], + "signature": [ + "() => jest.Mocked<", + "KibanaResponseFactory", + ">" + ], + "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx new file mode 100644 index 0000000000000..f0957357d4c7f --- /dev/null +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -0,0 +1,30 @@ +--- +id: kibKbnCoreHttpRouterServerMocksPluginApi +slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks +title: "@kbn/core-http-router-server-mocks" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-http-router-server-mocks plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 7 | 0 | 7 | 1 | + +## Server + +### Objects + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 80871a81a9d25..495e16540ff99 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_server_internal.devdocs.json b/api_docs/kbn_core_http_server_internal.devdocs.json new file mode 100644 index 0000000000000..b0c482d9afc03 --- /dev/null +++ b/api_docs/kbn_core_http_server_internal.devdocs.json @@ -0,0 +1,845 @@ +{ + "id": "@kbn/core-http-server-internal", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig", + "type": "Class", + "tags": [], + "label": "CspConfig", + "description": [ + "\nCSP configuration for use in Kibana." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.CspConfig", + "text": "CspConfig" + }, + " implements ", + "ICspConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.DEFAULT", + "type": "Object", + "tags": [], + "label": "DEFAULT", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.CspConfig", + "text": "CspConfig" + } + ], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.directives", + "type": "Object", + "tags": [], + "label": "#directives", + "description": [], + "signature": [ + "CspDirectives" + ], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.strict", + "type": "boolean", + "tags": [], + "label": "strict", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.warnLegacyBrowsers", + "type": "boolean", + "tags": [], + "label": "warnLegacyBrowsers", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.disableEmbedding", + "type": "boolean", + "tags": [], + "label": "disableEmbedding", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.CspConfig.header", + "type": "string", + "tags": [], + "label": "header", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/csp/csp_config.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.ExternalUrlConfig", + "type": "Class", + "tags": [], + "label": "ExternalUrlConfig", + "description": [ + "\nExternal Url configuration for use in Kibana." + ], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.ExternalUrlConfig", + "text": "ExternalUrlConfig" + }, + " implements ", + "IExternalUrlConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/external_url/external_url_config.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.ExternalUrlConfig.DEFAULT", + "type": "Object", + "tags": [], + "label": "DEFAULT", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.ExternalUrlConfig", + "text": "ExternalUrlConfig" + } + ], + "path": "packages/core/http/core-http-server-internal/src/external_url/external_url_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.ExternalUrlConfig.policy", + "type": "Array", + "tags": [], + "label": "policy", + "description": [], + "signature": [ + "IExternalUrlPolicy", + "[]" + ], + "path": "packages/core/http/core-http-server-internal/src/external_url/external_url_config.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig", + "type": "Class", + "tags": [], + "label": "HttpConfig", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.HttpConfig", + "text": "HttpConfig" + }, + " implements ", + "IHttpConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.autoListen", + "type": "boolean", + "tags": [], + "label": "autoListen", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.host", + "type": "string", + "tags": [], + "label": "host", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.keepaliveTimeout", + "type": "number", + "tags": [], + "label": "keepaliveTimeout", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.socketTimeout", + "type": "number", + "tags": [], + "label": "socketTimeout", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.port", + "type": "number", + "tags": [], + "label": "port", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.cors", + "type": "Object", + "tags": [], + "label": "cors", + "description": [], + "signature": [ + "{ enabled: boolean; allowCredentials: boolean; allowOrigin: string[]; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.securityResponseHeaders", + "type": "Object", + "tags": [], + "label": "securityResponseHeaders", + "description": [], + "signature": [ + "{ [x: string]: string | string[]; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.customResponseHeaders", + "type": "Object", + "tags": [], + "label": "customResponseHeaders", + "description": [], + "signature": [ + "{ [x: string]: string | string[]; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.maxPayload", + "type": "Object", + "tags": [], + "label": "maxPayload", + "description": [], + "signature": [ + "ByteSizeValue" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.basePath", + "type": "string", + "tags": [], + "label": "basePath", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.publicBaseUrl", + "type": "string", + "tags": [], + "label": "publicBaseUrl", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.rewriteBasePath", + "type": "boolean", + "tags": [], + "label": "rewriteBasePath", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.ssl", + "type": "Object", + "tags": [], + "label": "ssl", + "description": [], + "signature": [ + "SslConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.compression", + "type": "Object", + "tags": [], + "label": "compression", + "description": [], + "signature": [ + "{ enabled: boolean; referrerWhitelist?: string[] | undefined; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.csp", + "type": "Object", + "tags": [], + "label": "csp", + "description": [], + "signature": [ + "ICspConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.externalUrl", + "type": "Object", + "tags": [], + "label": "externalUrl", + "description": [], + "signature": [ + "IExternalUrlConfig" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.xsrf", + "type": "Object", + "tags": [], + "label": "xsrf", + "description": [], + "signature": [ + "{ disableProtection: boolean; allowlist: string[]; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.requestId", + "type": "Object", + "tags": [], + "label": "requestId", + "description": [], + "signature": [ + "{ allowFromAnyIp: boolean; ipAllowlist: string[]; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfig.shutdownTimeout", + "type": "Object", + "tags": [], + "label": "shutdownTimeout", + "description": [], + "signature": [ + "moment.Duration" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer", + "type": "Class", + "tags": [], + "label": "HttpServer", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + "LoggerFactory" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.Unnamed.$2", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "shutdownTimeout$", + "description": [], + "signature": [ + "Observable", + "" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.isListening", + "type": "Function", + "tags": [], + "label": "isListening", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.setup", + "type": "Function", + "tags": [], + "label": "setup", + "description": [], + "signature": [ + "(config: ", + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.HttpConfig", + "text": "HttpConfig" + }, + ", executionContext?: ", + "IExecutionContext", + " | undefined) => Promise<", + "HttpServerSetup", + ">" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.setup.$1", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server-internal", + "scope": "server", + "docId": "kibKbnCoreHttpServerInternalPluginApi", + "section": "def-server.HttpConfig", + "text": "HttpConfig" + } + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.setup.$2", + "type": "Object", + "tags": [], + "label": "executionContext", + "description": [], + "signature": [ + "IExecutionContext", + " | undefined" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.start", + "type": "Function", + "tags": [], + "label": "start", + "description": [], + "signature": [ + "() => Promise" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpServer.stop", + "type": "Function", + "tags": [], + "label": "stop", + "description": [], + "signature": [ + "() => Promise" + ], + "path": "packages/core/http/core-http-server-internal/src/http_server.ts", + "deprecated": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.createCookieSessionStorageFactory", + "type": "Function", + "tags": [], + "label": "createCookieSessionStorageFactory", + "description": [ + "\nCreates SessionStorage factory, which abstract the way of\nsession storage implementation and scoping to the incoming requests.\n" + ], + "signature": [ + "(log: ", + "Logger", + ", server: ", + "Server", + ", cookieOptions: ", + "SessionStorageCookieOptions", + ", basePath: string | undefined) => Promise<", + "SessionStorageFactory", + ">" + ], + "path": "packages/core/http/core-http-server-internal/src/cookie_session_storage.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.createCookieSessionStorageFactory.$1", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "signature": [ + "Logger" + ], + "path": "packages/core/http/core-http-server-internal/src/cookie_session_storage.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.createCookieSessionStorageFactory.$2", + "type": "Object", + "tags": [], + "label": "server", + "description": [ + "- hapi server to create SessionStorage for" + ], + "signature": [ + "Server" + ], + "path": "packages/core/http/core-http-server-internal/src/cookie_session_storage.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.createCookieSessionStorageFactory.$3", + "type": "Object", + "tags": [], + "label": "cookieOptions", + "description": [ + "- cookies configuration" + ], + "signature": [ + "SessionStorageCookieOptions", + "" + ], + "path": "packages/core/http/core-http-server-internal/src/cookie_session_storage.ts", + "deprecated": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.createCookieSessionStorageFactory.$4", + "type": "string", + "tags": [], + "label": "basePath", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/core/http/core-http-server-internal/src/cookie_session_storage.ts", + "deprecated": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.HttpConfigType", + "type": "Type", + "tags": [], + "label": "HttpConfigType", + "description": [], + "signature": [ + "{ readonly basePath?: string | undefined; readonly uuid?: string | undefined; readonly publicBaseUrl?: string | undefined; readonly name: string; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; redirectHttpFromPort?: number | undefined; } & { enabled: boolean; keystore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; truststore: Readonly<{ path?: string | undefined; password?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"required\" | \"optional\"; }>; readonly host: string; readonly port: number; readonly compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; }>; readonly cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; readonly autoListen: boolean; readonly shutdownTimeout: moment.Duration; readonly securityResponseHeaders: Readonly<{} & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; disableEmbedding: boolean; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; }>; readonly customResponseHeaders: Record; readonly maxPayload: ", + "ByteSizeValue", + "; readonly rewriteBasePath: boolean; readonly keepaliveTimeout: number; readonly socketTimeout: number; readonly xsrf: Readonly<{} & { disableProtection: boolean; allowlist: string[]; }>; readonly requestId: Readonly<{} & { allowFromAnyIp: boolean; ipAllowlist: string[]; }>; }" + ], + "path": "packages/core/http/core-http-server-internal/src/http_config.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.cspConfig", + "type": "Object", + "tags": [], + "label": "cspConfig", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/csp/config.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.cspConfig.path", + "type": "string", + "tags": [], + "label": "path", + "description": [ + "// TODO: Move this to server.csp using config deprecations\n// ? https://github.com/elastic/kibana/pull/52251" + ], + "path": "packages/core/http/core-http-server-internal/src/csp/config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.cspConfig.schema", + "type": "Object", + "tags": [], + "label": "schema", + "description": [], + "signature": [ + "ObjectType", + "<{ disableUnsafeEval: ", + "ConditionalType", + "; script_src: ", + "Type", + "; worker_src: ", + "Type", + "; style_src: ", + "Type", + "; connect_src: ", + "Type", + "; default_src: ", + "Type", + "; font_src: ", + "Type", + "; frame_src: ", + "Type", + "; img_src: ", + "Type", + "; frame_ancestors: ", + "Type", + "; report_uri: ", + "Type", + "; report_to: ", + "Type", + "; strict: ", + "Type", + "; warnLegacyBrowsers: ", + "Type", + "; disableEmbedding: ", + "Type", + "; }>" + ], + "path": "packages/core/http/core-http-server-internal/src/csp/config.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.externalUrlConfig", + "type": "Object", + "tags": [], + "label": "externalUrlConfig", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/external_url/config.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.externalUrlConfig.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "packages/core/http/core-http-server-internal/src/external_url/config.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-internal", + "id": "def-server.externalUrlConfig.schema", + "type": "Object", + "tags": [], + "label": "schema", + "description": [], + "signature": [ + "ObjectType", + "<{ policy: ", + "Type", + "<", + "IExternalUrlPolicy", + "[]>; }>" + ], + "path": "packages/core/http/core-http-server-internal/src/external_url/config.ts", + "deprecated": false + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx new file mode 100644 index 0000000000000..c73c69d8383de --- /dev/null +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -0,0 +1,36 @@ +--- +id: kibKbnCoreHttpServerInternalPluginApi +slug: /kibana-dev-docs/api/kbn-core-http-server-internal +title: "@kbn/core-http-server-internal" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-http-server-internal plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 54 | 0 | 48 | 2 | + +## Server + +### Objects + + +### Functions + + +### Classes + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_http_server_mocks.devdocs.json b/api_docs/kbn_core_http_server_mocks.devdocs.json new file mode 100644 index 0000000000000..bdbc8ce677929 --- /dev/null +++ b/api_docs/kbn_core_http_server_mocks.devdocs.json @@ -0,0 +1,830 @@ +{ + "id": "@kbn/core-http-server-mocks", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.createCoreContext", + "type": "Function", + "tags": [], + "label": "createCoreContext", + "description": [], + "signature": [ + "(overrides?: Partial<", + "CoreContext", + ">) => ", + "CoreContext" + ], + "path": "packages/core/http/core-http-server-mocks/src/test_utils.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.createCoreContext.$1", + "type": "Object", + "tags": [], + "label": "overrides", + "description": [], + "signature": [ + "Partial<", + "CoreContext", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/test_utils.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.createHttpServer", + "type": "Function", + "tags": [], + "label": "createHttpServer", + "description": [ + "\nCreates a concrete HttpServer with a mocked context." + ], + "signature": [ + "(overrides?: Partial<", + "CoreContext", + ">) => ", + "HttpService" + ], + "path": "packages/core/http/core-http-server-mocks/src/test_utils.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.createHttpServer.$1", + "type": "Object", + "tags": [], + "label": "overrides", + "description": [], + "signature": [ + "Partial<", + "CoreContext", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/test_utils.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.HttpServicePrebootMock", + "type": "Type", + "tags": [], + "label": "HttpServicePrebootMock", + "description": [], + "signature": [ + "{ registerRoutes: jest.MockInstance) => void]>; basePath: ", + "IBasePath", + "; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; } & ", + "HttpServicePreboot", + "<", + "RequestHandlerContextBase", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.HttpServiceSetupMock", + "type": "Type", + "tags": [], + "label": "HttpServiceSetupMock", + "description": [], + "signature": [ + "{ csp: ", + "ICspConfig", + "; createCookieSessionStorageFactory: jest.MockInstance>, [cookieOptions: ", + "SessionStorageCookieOptions", + "]>; registerOnPreRouting: jest.MockInstance; registerOnPreAuth: jest.MockInstance; registerAuth: jest.MockInstance; registerOnPostAuth: jest.MockInstance; registerOnPreResponse: jest.MockInstance; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; registerRouteHandlerContext: jest.MockInstance<", + "IContextContainer", + ", [contextName: Exclude, provider: ", + "IContextProvider", + ">]>; } & Omit<", + "HttpServiceSetup", + ", \"basePath\" | \"createRouter\"> & { basePath: BasePathMocked; createRouter: jest.MockedFunction<() => ", + "RouterMock", + ">; }" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.HttpServiceStartMock", + "type": "Type", + "tags": [], + "label": "HttpServiceStartMock", + "description": [], + "signature": [ + "{ basePath: ", + "IBasePath", + "; auth: ", + "HttpAuth", + "; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; } & ", + "HttpServiceStart", + " & { basePath: BasePathMocked; }" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.InternalHttpServicePrebootMock", + "type": "Type", + "tags": [], + "label": "InternalHttpServicePrebootMock", + "description": [], + "signature": [ + "{ auth: ", + "HttpAuth", + "; server: ", + "Server", + "; externalUrl: ", + "ExternalUrlConfig", + "; csp: ", + "ICspConfig", + "; registerStaticDir: jest.MockInstance; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; registerRouteHandlerContext: jest.MockInstance]>; registerRoutes: jest.MockInstance) => void]>; } & Omit<", + "InternalHttpServicePreboot", + ", \"basePath\"> & { basePath: BasePathMocked; }" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.InternalHttpServiceSetupMock", + "type": "Type", + "tags": [], + "label": "InternalHttpServiceSetupMock", + "description": [], + "signature": [ + "{ server: ", + "Server", + "; externalUrl: ", + "ExternalUrlConfig", + "; csp: ", + "ICspConfig", + "; registerRouterAfterListening: jest.MockInstance]>; registerStaticDir: jest.MockInstance; createCookieSessionStorageFactory: jest.MockInstance>, [cookieOptions: ", + "SessionStorageCookieOptions", + "]>; registerOnPreRouting: jest.MockInstance; registerOnPreAuth: jest.MockInstance; registerAuth: jest.MockInstance; registerOnPostAuth: jest.MockInstance; registerOnPreResponse: jest.MockInstance; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; registerRouteHandlerContext: jest.MockInstance]>; registerPrebootRoutes: jest.MockInstance) => void]>; } & Omit<", + "InternalHttpServiceSetup", + ", \"basePath\" | \"auth\" | \"authRequestHeaders\" | \"createRouter\"> & { auth: AuthMocked; basePath: BasePathMocked; createRouter: jest.MockedFunction<(path: string) => ", + "RouterMock", + ">; authRequestHeaders: jest.Mocked<", + "IAuthHeadersStorage", + ">; }" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.InternalHttpServiceStartMock", + "type": "Type", + "tags": [], + "label": "InternalHttpServiceStartMock", + "description": [], + "signature": [ + "{ isListening: jest.MockInstance; basePath: ", + "IBasePath", + "; auth: ", + "HttpAuth", + "; getServerInfo: jest.MockInstance<", + "HttpServerInfo", + ", []>; } & ", + "InternalHttpServiceStart", + " & { basePath: BasePathMocked; }" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock", + "type": "Object", + "tags": [], + "label": "httpServerMock", + "description": [], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createKibanaRequest", + "type": "Function", + "tags": [], + "label": "createKibanaRequest", + "description": [], + "signature": [ + "

({ path, headers, params, body, query, method, socket, routeTags, routeAuthRequired, validation, kibanaRouteOptions, kibanaRequestState, auth, }?: ", + "RequestFixtureOptions", + " | undefined) => ", + "KibanaRequest", + "" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createKibanaRequest.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "RequestFixtureOptions", + " | undefined" + ], + "path": "node_modules/@types/kbn__core-http-router-server-mocks/index.d.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createRawRequest", + "type": "Function", + "tags": [], + "label": "createRawRequest", + "description": [], + "signature": [ + "(customization?: ", + "DeepPartialObject", + "<", + "Request", + "> | undefined) => ", + "Request" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createRawRequest.$1", + "type": "Object", + "tags": [], + "label": "customization", + "description": [], + "signature": [ + "DeepPartialObject", + "<", + "Request", + "> | undefined" + ], + "path": "node_modules/@types/kbn__hapi-mocks/index.d.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createResponseFactory", + "type": "Function", + "tags": [], + "label": "createResponseFactory", + "description": [], + "signature": [ + "() => jest.Mocked<", + "KibanaResponseFactory", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createLifecycleResponseFactory", + "type": "Function", + "tags": [], + "label": "createLifecycleResponseFactory", + "description": [], + "signature": [ + "() => jest.Mocked<", + "LifecycleResponseFactory", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServerMock.createToolkit", + "type": "Function", + "tags": [], + "label": "createToolkit", + "description": [], + "signature": [ + "() => ToolkitMock" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_server.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock", + "type": "Object", + "tags": [], + "label": "httpServiceMock", + "description": [], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createBasePath", + "type": "Function", + "tags": [], + "label": "createBasePath", + "description": [], + "signature": [ + "(serverBasePath?: string, publicBaseUrl?: string) => BasePathMocked" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createBasePath.$1", + "type": "string", + "tags": [], + "label": "serverBasePath", + "description": [], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createBasePath.$2", + "type": "string", + "tags": [], + "label": "publicBaseUrl", + "description": [], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false + } + ] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createAuth", + "type": "Function", + "tags": [], + "label": "createAuth", + "description": [], + "signature": [ + "() => AuthMocked" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createInternalPrebootContract", + "type": "Function", + "tags": [], + "label": "createInternalPrebootContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.InternalHttpServicePrebootMock", + "text": "InternalHttpServicePrebootMock" + } + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createPrebootContract", + "type": "Function", + "tags": [], + "label": "createPrebootContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.HttpServicePrebootMock", + "text": "HttpServicePrebootMock" + } + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createInternalSetupContract", + "type": "Function", + "tags": [], + "label": "createInternalSetupContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.InternalHttpServiceSetupMock", + "text": "InternalHttpServiceSetupMock" + } + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createSetupContract", + "type": "Function", + "tags": [], + "label": "createSetupContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.HttpServiceSetupMock", + "text": "HttpServiceSetupMock" + }, + "" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createInternalStartContract", + "type": "Function", + "tags": [], + "label": "createInternalStartContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.InternalHttpServiceStartMock", + "text": "InternalHttpServiceStartMock" + } + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createStartContract", + "type": "Function", + "tags": [], + "label": "createStartContract", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/core-http-server-mocks", + "scope": "server", + "docId": "kibKbnCoreHttpServerMocksPluginApi", + "section": "def-server.HttpServiceStartMock", + "text": "HttpServiceStartMock" + } + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createOnPreAuthToolkit", + "type": "Function", + "tags": [], + "label": "createOnPreAuthToolkit", + "description": [], + "signature": [ + "() => jest.Mocked<", + "OnPreAuthToolkit", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createOnPostAuthToolkit", + "type": "Function", + "tags": [], + "label": "createOnPostAuthToolkit", + "description": [], + "signature": [ + "() => jest.Mocked<", + "OnPostAuthToolkit", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createOnPreResponseToolkit", + "type": "Function", + "tags": [], + "label": "createOnPreResponseToolkit", + "description": [], + "signature": [ + "() => jest.Mocked<", + "OnPreResponseToolkit", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createOnPreRoutingToolkit", + "type": "Function", + "tags": [], + "label": "createOnPreRoutingToolkit", + "description": [], + "signature": [ + "() => jest.Mocked<", + "OnPreRoutingToolkit", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createAuthToolkit", + "type": "Function", + "tags": [], + "label": "createAuthToolkit", + "description": [], + "signature": [ + "() => jest.Mocked<", + "AuthToolkit", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createAuthHeaderStorage", + "type": "Function", + "tags": [], + "label": "createAuthHeaderStorage", + "description": [], + "signature": [ + "() => jest.Mocked<", + "IAuthHeadersStorage", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createRouter", + "type": "Function", + "tags": [], + "label": "createRouter", + "description": [], + "signature": [ + "({ routerPath }?: { routerPath?: string | undefined; } | undefined) => ", + "RouterMock" + ], + "path": "packages/core/http/core-http-server-mocks/src/http_service.mock.ts", + "deprecated": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.httpServiceMock.createRouter.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "{ routerPath?: string | undefined; } | undefined" + ], + "path": "node_modules/@types/kbn__core-http-router-server-mocks/index.d.ts", + "deprecated": false + } + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.sessionStorageMock", + "type": "Object", + "tags": [], + "label": "sessionStorageMock", + "description": [], + "path": "packages/core/http/core-http-server-mocks/src/cookie_session_storage.mocks.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.sessionStorageMock.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [], + "signature": [ + "() => jest.Mocked<", + "SessionStorage", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/cookie_session_storage.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "@kbn/core-http-server-mocks", + "id": "def-server.sessionStorageMock.createFactory", + "type": "Function", + "tags": [], + "label": "createFactory", + "description": [], + "signature": [ + "() => DeepMocked<", + "SessionStorageFactory", + ">" + ], + "path": "packages/core/http/core-http-server-mocks/src/cookie_session_storage.mocks.ts", + "deprecated": false, + "returnComment": [], + "children": [] + } + ], + "initialIsOpen": false + } + ] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx new file mode 100644 index 0000000000000..c516312a3b173 --- /dev/null +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -0,0 +1,33 @@ +--- +id: kibKbnCoreHttpServerMocksPluginApi +slug: /kibana-dev-docs/api/kbn-core-http-server-mocks +title: "@kbn/core-http-server-mocks" +image: https://source.unsplash.com/400x175/?github +summary: API docs for the @kbn/core-http-server-mocks plugin +date: 2022-07-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] +warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. +--- +import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 41 | 0 | 37 | 0 | + +## Server + +### Objects + + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index fd5dc5578ec45..aa6d11478fe41 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-i18n-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 451a717d03e00..a0fd4df5a9477 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx index e1277bff51595..b47b634ce27c2 100644 --- a/api_docs/kbn_core_injected_metadata_browser.mdx +++ b/api_docs/kbn_core_injected_metadata_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser title: "@kbn/core-injected-metadata-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-injected-metadata-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 315b6ccb8dd93..60a73253e7339 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 1e2f604a6658a..1271bdaa68042 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 6c2e940096f8a..6f0eec690a19c 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 41a4a645ccbb6..643eb7e439c80 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 1b2f3c80de467..7baf8f68460bd 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server_internal.devdocs.json b/api_docs/kbn_core_node_server_internal.devdocs.json index 1937ba5e72c7d..0e598b07cd930 100644 --- a/api_docs/kbn_core_node_server_internal.devdocs.json +++ b/api_docs/kbn_core_node_server_internal.devdocs.json @@ -49,7 +49,7 @@ "ObjectType", "<{ roles: ", "Type", - "<(\"ui\" | \"background_tasks\")[] | \"*\"[]>; }>" + "<\"*\"[] | (\"ui\" | \"background_tasks\")[]>; }>" ], "path": "packages/core/node/core-node-server-internal/src/node_config.ts", "deprecated": false diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 5885b29b2c8c8..5cadea53c1ad2 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 9e667be321173..9b902ede606eb 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index b109431d1dbad..c5b4f7fd3a743 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-preboot-server plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index ed3173fb57216..da8147070af3c 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 09957ca3e6854..d34910c499bec 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index c3a60618f7845..bfa6185b08084 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser-internal plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 3a7174fc1b2e3..af0cf0d8eb376 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 7c0e6e7648ffa..f9666b549b956 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/crypto plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 6017c04753893..5dc3a3a9ce3d7 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/crypto-browser plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 87f44ac0da128..ff8d5e58a4b30 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/datemath plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 0889027b5ed49..42af03db50d80 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-errors plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 759f8039981f8..b397c9ca8b990 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-runner plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 2d5e8095c3ffd..7f40c05c56b03 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-proc-runner plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 2a578260588bf..90779a5021782 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 00ef15c27f6c6..5e8a7dd11f985 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/doc-links plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 1745e95ece2ba..9954cf11e03ed 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/docs-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 59a8a0413c64c..33ed18985a880 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-archiver plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 65d64b1d89a75..fb1b50360c1a2 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-errors plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 9084761693e28..9e2abca838898 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-query plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 46381bd6e4ed9..395685fc79323 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/eslint-plugin-imports plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 851a8217b16ca..94e56499a960e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/field-types plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index c1e107406b828..40e5082986662 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/find-used-node-modules plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index b77f7771f716b..b256d678f979c 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/generate plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index c9dfd16d549fe..e4ede6274d832 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/handlebars plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 74193484aaa01..e65a0d5610c8e 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/hapi-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_home_sample_data_cards.mdx b/api_docs/kbn_home_sample_data_cards.mdx index ff0d667da085f..b9dcbec9e5980 100644 --- a/api_docs/kbn_home_sample_data_cards.mdx +++ b/api_docs/kbn_home_sample_data_cards.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-cards title: "@kbn/home-sample-data-cards" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/home-sample-data-cards plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-cards'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index c8164c7778e15..e352cba531780 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/i18n plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 95f220bd9fb5b..0ce4b91ab8488 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/import-resolver plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index ea07bac765030..7ac13aed307e1 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/interpreter plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 2b5ce56a5d60f..85956d04c0326 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/io-ts-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index a994586c8a74e..abf0e153fb8fc 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/jest-serializers plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_kibana_json_schema.mdx b/api_docs/kbn_kibana_json_schema.mdx index e351775e76cee..16c8895f92067 100644 --- a/api_docs/kbn_kibana_json_schema.mdx +++ b/api_docs/kbn_kibana_json_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-json-schema title: "@kbn/kibana-json-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/kibana-json-schema plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-json-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index d2b10fc180773..937e89a6f60bb 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index e6ebec63e1632..0375141e756fd 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging-mocks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 28115f56adc24..fe260609be7c3 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/mapbox-gl plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index d9073ce0d303d..2326cb5088e7e 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-agg-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index a9e31ddb35448..8cddd1bca6fa2 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-is-populated-object plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index f9f2be975e065..8899e289794ea 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-string-hash plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index c51c233e79489..ab1d72895d2ab 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/monaco plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 26d65a3ead693..e12739a0389a8 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 401301b348c9e..4306f86b1cbc2 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index f57e25cf322cb..a6bbf05299d66 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_discovery.mdx b/api_docs/kbn_plugin_discovery.mdx index 55e9a6b95abc0..bb0a1cbeb1d81 100644 --- a/api_docs/kbn_plugin_discovery.mdx +++ b/api_docs/kbn_plugin_discovery.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-discovery title: "@kbn/plugin-discovery" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-discovery plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-discovery'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index e4578b1f4a432..29e0dbe26454d 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-generator plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 4374d72505a63..a469596277018 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-helpers plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_pm.mdx b/api_docs/kbn_pm.mdx index da5a74d30c957..a6ddd54dbaa4c 100644 --- a/api_docs/kbn_pm.mdx +++ b/api_docs/kbn_pm.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-pm title: "@kbn/pm" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/pm plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/pm'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index ca8e694697cd0..472f8f650e343 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/react-field plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 5482e0bedb1a2..69a31da2c9fbc 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/rule-data-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_scalability_simulation_generator.mdx b/api_docs/kbn_scalability_simulation_generator.mdx index e79d76f12349e..6732b843b90f3 100644 --- a/api_docs/kbn_scalability_simulation_generator.mdx +++ b/api_docs/kbn_scalability_simulation_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-scalability-simulation-generator title: "@kbn/scalability-simulation-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/scalability-simulation-generator plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scalability-simulation-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index e8ccd05d48c9a..bbbfaf383c906 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 6c944bcd5e19e..c5b943774e8e0 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-es-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 6728b6ba14dee..ac1c7b8967aa3 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 347d01b914dbc..4ae789c8cccc6 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 833b86fa341b0..51ffe4adef099 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 762606a0b72b1..52ec4ab06d2cd 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 71a19be9283bf..09f6659d3c294 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index b85e37444435f..2af92d9d20ef3 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-api plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index fe27d37be1ed7..0a7a1a861d403 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-constants plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 36797c388c072..e373f97a3eaf3 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 192b8ec9d7554..4112405b146b6 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 26020f321d906..c506a01635d44 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-rules plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 39c4712d09079..53b3e62b0d9ad 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-t-grid plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index bb30474236d0c..26df2ef43dede 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 2ae808a2f4544..ea74768f25ac3 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-http-tools plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index a8d94e51fd268..ef73fedb99385 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-route-repository plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 4fc6f96dc869a..45d7af90368e6 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 3120a76d22182..0ad1ee7db478b 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_components.mdx b/api_docs/kbn_shared_ux_components.mdx index 55b064588053a..63abc719681ba 100644 --- a/api_docs/kbn_shared_ux_components.mdx +++ b/api_docs/kbn_shared_ux_components.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-components title: "@kbn/shared-ux-components" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-components plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-components'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index b2c92e8913396..08c60b30869e6 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index d1c4b518a2b54..0fb75e8e5ce02 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index ec5eb2ca715e7..f2e65d846dd67 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 3cd347e515853..282815be4cdf2 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_services.mdx b/api_docs/kbn_shared_ux_services.mdx index 0d2aefce71fdc..929788630e809 100644 --- a/api_docs/kbn_shared_ux_services.mdx +++ b/api_docs/kbn_shared_ux_services.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-services title: "@kbn/shared-ux-services" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-services plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-services'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_storybook.mdx b/api_docs/kbn_shared_ux_storybook.mdx index 42b4f931b1d85..ee95534091753 100644 --- a/api_docs/kbn_shared_ux_storybook.mdx +++ b/api_docs/kbn_shared_ux_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook title: "@kbn/shared-ux-storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-storybook plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 711fb0e0cd990..1032117e3abb1 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-utility plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx index 5ae42cf4f2d29..109cb2d509e91 100644 --- a/api_docs/kbn_sort_package_json.mdx +++ b/api_docs/kbn_sort_package_json.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json title: "@kbn/sort-package-json" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/sort-package-json plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 00e47f058bb0e..963cde0877b05 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/std plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index a3912ad4534f4..cbc555b6edf9f 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/stdio-dev-helpers plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 6bd0a35d7781a..576de95c0b823 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/storybook plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 01f7ecfa62fa7..0d6717d1bf28e 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/telemetry-tools plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index 0304ca46ffea1..2fdec23b80a59 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -3008,7 +3008,7 @@ "\nDetermine if a service is avaliable" ], "signature": [ - "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" + "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\" | \"dedicatedTaskRunner\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", "deprecated": false, @@ -3021,7 +3021,7 @@ "label": "serviceName", "description": [], "signature": [ - "\"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\"" + "\"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\" | \"dedicatedTaskRunner\"" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", "deprecated": false, @@ -3038,7 +3038,7 @@ "label": "hasService", "description": [], "signature": [ - "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" + "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\" | \"dedicatedTaskRunner\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", "deprecated": false, @@ -3068,7 +3068,7 @@ "label": "hasService", "description": [], "signature": [ - "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" + "{ (serviceName: \"log\" | \"config\" | \"lifecycle\" | \"dockerServers\" | \"esVersion\" | \"dedicatedTaskRunner\"): true; (serviceName: K): serviceName is K; (serviceName: string): serviceName is Extract; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", "deprecated": false, @@ -3134,6 +3134,8 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -3198,6 +3200,8 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -3262,6 +3266,8 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -3326,6 +3332,8 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -3390,6 +3398,8 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -3454,6 +3464,74 @@ "section": "def-server.EsVersion", "text": "EsVersion" }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", + "; (serviceName: T): ServiceMap[T]; }" + ], + "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/test", + "id": "def-server.GenericFtrProviderContext.getService.$1", + "type": "string", + "tags": [], + "label": "serviceName", + "description": [], + "signature": [ + "\"dedicatedTaskRunner\"" + ], + "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/test", + "id": "def-server.GenericFtrProviderContext.getService", + "type": "Function", + "tags": [], + "label": "getService", + "description": [], + "signature": [ + "{ (serviceName: \"config\"): ", + { + "pluginId": "@kbn/test", + "scope": "server", + "docId": "kibKbnTestPluginApi", + "section": "def-server.Config", + "text": "Config" + }, + "; (serviceName: \"log\"): ", + "ToolingLog", + "; (serviceName: \"lifecycle\"): ", + { + "pluginId": "@kbn/test", + "scope": "server", + "docId": "kibKbnTestPluginApi", + "section": "def-server.Lifecycle", + "text": "Lifecycle" + }, + "; (serviceName: \"dockerServers\"): ", + { + "pluginId": "@kbn/test", + "scope": "server", + "docId": "kibKbnTestPluginApi", + "section": "def-server.DockerServersService", + "text": "DockerServersService" + }, + "; (serviceName: \"esVersion\"): ", + { + "pluginId": "@kbn/test", + "scope": "server", + "docId": "kibKbnTestPluginApi", + "section": "def-server.EsVersion", + "text": "EsVersion" + }, + "; (serviceName: \"dedicatedTaskRunner\"): ", + "DedicatedTaskRunner", "; (serviceName: T): ServiceMap[T]; }" ], "path": "packages/kbn-test/src/functional_test_runner/public_types.ts", @@ -4085,17 +4163,6 @@ "deprecated": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/test", - "id": "def-server.KIBANA_ROOT", - "type": "string", - "tags": [], - "label": "KIBANA_ROOT", - "description": [], - "path": "packages/kbn-test/src/functional_tests/lib/paths.ts", - "deprecated": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/test", "id": "def-server.ProvidedType", diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index e02a0e7631088..100a2b0809468 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact Operations for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 251 | 5 | 210 | 10 | +| 252 | 5 | 211 | 11 | ## Server diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index e5a7fbdfff162..7d52dc054c9e4 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test-jest-helpers plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index f5328706fcf4b..2ab7c2e09048d 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/tooling-log plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx index f243d4dc40658..bdea1cff0e372 100644 --- a/api_docs/kbn_type_summarizer.mdx +++ b/api_docs/kbn_type_summarizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer title: "@kbn/type-summarizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/type-summarizer plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx index 82bdca5e9d8b2..b1b9ead231e46 100644 --- a/api_docs/kbn_type_summarizer_core.mdx +++ b/api_docs/kbn_type_summarizer_core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core title: "@kbn/type-summarizer-core" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/type-summarizer-core plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 3bb61421b625d..59448572ff829 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/typed-react-router-config plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 1b007f581dd8f..855b1423815ef 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ui-theme plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 6464c4216069e..d4061ca811b7e 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index f1ca30178f685..3fb921d16e6bb 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types-jest plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 66520bf1db066..57327df0012ce 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index ca0fd397bc94c..893bd46e05684 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaOverview plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 921e088a13418..0f34d3ce4eb49 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1114,15 +1114,15 @@ }, { "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx" + "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" }, { "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx" + "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" }, { "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx" + "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" }, { "plugin": "enterpriseSearch", @@ -1136,18 +1136,6 @@ "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/error_connecting/error_connecting.tsx" }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/shared/layout/page_template.tsx" - }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/app_search/components/error_connecting/error_connecting.tsx" @@ -4391,13 +4379,7 @@ " | undefined; fatalErrors?: ", "FatalErrorsSetup", " | undefined; deprecations?: ", - { - "pluginId": "core", - "scope": "public", - "docId": "kibCorePluginApi", - "section": "def-public.DeprecationsServiceStart", - "text": "DeprecationsServiceStart" - }, + "DeprecationsServiceStart", " | undefined; theme?: ", "ThemeServiceStart", " | undefined; injectedMetadata?: ", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 3c4b6ed0309fc..52f3d687d2aa2 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaReact plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index e57d0e2d3b29e..7e229a785ea75 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaUtils plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 736bf513869f4..4925d77903fe7 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github summary: API docs for the kubernetesSecurity plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 990dbbafbda78..406a04922c602 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -1007,10 +1007,10 @@ }, { "parentPluginId": "lens", - "id": "def-public.DataLayerArgs.hide", + "id": "def-public.DataLayerArgs.simpleView", "type": "CompoundType", "tags": [], - "label": "hide", + "label": "simpleView", "description": [], "signature": [ "boolean | undefined" @@ -5402,10 +5402,10 @@ }, { "parentPluginId": "lens", - "id": "def-public.XYAnnotationLayerConfig.hide", + "id": "def-public.XYAnnotationLayerConfig.simpleView", "type": "CompoundType", "tags": [], - "label": "hide", + "label": "simpleView", "description": [], "signature": [ "boolean | undefined" @@ -5889,10 +5889,10 @@ }, { "parentPluginId": "lens", - "id": "def-public.XYDataLayerConfig.hide", + "id": "def-public.XYDataLayerConfig.simpleView", "type": "CompoundType", "tags": [], - "label": "hide", + "label": "simpleView", "description": [], "signature": [ "boolean | undefined" @@ -9944,7 +9944,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined) => ", { @@ -9974,7 +9974,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 1c49503e62394..c85080551c808 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github summary: API docs for the lens plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 331b37523bb0b..354f9509d85b8 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseApiGuard plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 7d70dd7118c5b..7f2c726743dec 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseManagement plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index dce399078a361..1b60079a59977 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github summary: API docs for the licensing plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index c5bf01ce7e4e4..14e1fd3a97cb9 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github summary: API docs for the lists plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/management.mdx b/api_docs/management.mdx index d0fe3a0d4d7c6..9d5cc8eb94663 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github summary: API docs for the management plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index f25dab745052a..4732fd45134ad 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -644,6 +644,21 @@ "children": [], "returnComment": [] }, + { + "parentPluginId": "maps", + "id": "def-public.MapEmbeddable._getIsFilterByMapExtent", + "type": "Function", + "tags": [], + "label": "_getIsFilterByMapExtent", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", + "deprecated": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "maps", "id": "def-public.MapEmbeddable._gotoSynchronizedLocation", @@ -1093,25 +1108,25 @@ }, { "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setMapExtentFilter", + "id": "def-public.MapEmbeddable._setMapExtentFilter", "type": "Function", "tags": [], - "label": "setMapExtentFilter", + "label": "_setMapExtentFilter", "description": [], "signature": [ - "() => void" + "(() => void) & _.Cancelable" ], "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", "deprecated": false, - "children": [], - "returnComment": [] + "returnComment": [], + "children": [] }, { "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.clearMapExtentFilter", + "id": "def-public.MapEmbeddable._clearMapExtentFilter", "type": "Function", "tags": [], - "label": "clearMapExtentFilter", + "label": "_clearMapExtentFilter", "description": [], "signature": [ "() => void" diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index c3af9f2b2b8ce..5533f216bc311 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github summary: API docs for the maps plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [GIS](https://github.com/orgs/elastic/teams/kibana-gis) for questions re | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 249 | 0 | 248 | 24 | +| 250 | 0 | 249 | 24 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 8d4fa80184619..b2f1b093fe708 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github summary: API docs for the mapsEms plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 7cf5e6f08934f..b8c74a83791fa 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github summary: API docs for the ml plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 9a96f5fb71459..378819242c8ba 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoring plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index dd904b036cb13..19e39fc9ab761 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoringCollection plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index c34729aae4333..8d158347118e6 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github summary: API docs for the navigation plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 9fd49bf331ce3..1b26ead546787 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github summary: API docs for the newsfeed plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index b7ed67de04c43..58534e319fad7 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -205,7 +205,7 @@ "section": "def-public.ObservabilityRuleTypeFormatter", "text": "ObservabilityRuleTypeFormatter" }, - " | undefined; list: () => string[]; } & { getFormatter: () => () => string; registerFormatter: () => void; }" + " | undefined; list: () => string[]; } & { getFormatter: () => () => string; registerFormatter: () => void; list: () => string[]; }" ], "path": "x-pack/plugins/observability/public/rules/observability_rule_type_registry_mock.ts", "deprecated": false, @@ -3364,60 +3364,99 @@ }, { "parentPluginId": "observability", - "id": "def-public.ObservabilityPublicPluginsStart.features", + "id": "def-public.ObservabilityPublicPluginsStart.sharedUX", "type": "Object", "tags": [], - "label": "features", + "label": "sharedUX", "description": [], "signature": [ - "{ getFeatures: () => Promise<", { - "pluginId": "features", - "scope": "common", - "docId": "kibFeaturesPluginApi", - "section": "def-common.KibanaFeature", - "text": "KibanaFeature" - }, - "[]>; }" + "pluginId": "sharedUX", + "scope": "public", + "docId": "kibSharedUXPluginApi", + "section": "def-public.SharedUXPluginStart", + "text": "SharedUXPluginStart" + } ], "path": "x-pack/plugins/observability/public/plugin.ts", "deprecated": false }, { "parentPluginId": "observability", - "id": "def-public.ObservabilityPublicPluginsStart.kibanaFeatures", - "type": "Array", + "id": "def-public.ObservabilityPublicPluginsStart.ruleTypeRegistry", + "type": "Object", "tags": [], - "label": "kibanaFeatures", + "label": "ruleTypeRegistry", "description": [], "signature": [ + "{ list: () => ", { - "pluginId": "features", + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "alerting", "scope": "common", - "docId": "kibFeaturesPluginApi", - "section": "def-common.KibanaFeature", - "text": "KibanaFeature" + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" }, - "[]" + ">[]; get: (id: string) => ", + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">; register: (objectType: ", + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">) => void; has: (id: string) => boolean; }" ], "path": "x-pack/plugins/observability/public/plugin.ts", "deprecated": false }, { "parentPluginId": "observability", - "id": "def-public.ObservabilityPublicPluginsStart.sharedUX", + "id": "def-public.ObservabilityPublicPluginsStart.actionTypeRegistry", "type": "Object", "tags": [], - "label": "sharedUX", + "label": "actionTypeRegistry", "description": [], "signature": [ - { - "pluginId": "sharedUX", - "scope": "public", - "docId": "kibSharedUXPluginApi", - "section": "def-public.SharedUXPluginStart", - "text": "SharedUXPluginStart" - } + "{ list: () => ", + "ActionTypeModel", + "[]; get: (id: string) => ", + "ActionTypeModel", + "; register: (objectType: ", + "ActionTypeModel", + ") => void; has: (id: string) => boolean; }" ], "path": "x-pack/plugins/observability/public/plugin.ts", "deprecated": false diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 71cfee396b9d1..befddb468d6e4 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github summary: API docs for the observability plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 52aac69572b83..b56428d38b910 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github summary: API docs for the osquery plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 80e714e48ffa2..f42c92bf244c1 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -3,7 +3,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory summary: Directory of public APIs available through plugins or packages. -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -12,13 +12,13 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 335 | 276 | 36 | +| 345 | 285 | 36 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 27414 | 172 | 19519 | 1433 | +| 27567 | 175 | 19645 | 1459 | ## Plugin Directory @@ -26,7 +26,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex |--------------|----------------|-----------|--------------|----------|---------------|--------| | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 241 | 0 | 236 | 19 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 19 | 1 | -| | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 12 | 0 | 0 | 0 | +| | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 9 | 0 | 0 | 1 | | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 365 | 0 | 356 | 20 | | | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 40 | 0 | 40 | 55 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | @@ -38,14 +38,14 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 6 | 0 | 6 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 13 | 0 | 13 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 206 | 0 | 198 | 7 | -| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2489 | 9 | 746 | 25 | +| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2472 | 6 | 724 | 22 | | crossClusterReplication | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 102 | 0 | 83 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 143 | 0 | 141 | 12 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 52 | 0 | 51 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3075 | 34 | 2402 | 21 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | This plugin provides the ability to create data views via a modal flyout from any kibana app | 14 | 0 | 7 | 0 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Reusable data view field editor across Kibana | 42 | 0 | 37 | 3 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | This plugin provides the ability to create data views via a modal flyout from any kibana app | 15 | 0 | 7 | 0 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Reusable data view field editor across Kibana | 41 | 0 | 36 | 3 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data view management app | 2 | 0 | 2 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 938 | 1 | 199 | 1 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 28 | 3 | 24 | 1 | @@ -76,7 +76,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 222 | 0 | 95 | 2 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Index pattern fields and ambiguous values formatters | 288 | 5 | 249 | 3 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 | -| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1522 | 8 | 1390 | 10 | +| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1525 | 8 | 1393 | 10 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | globalSearchProviders | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | @@ -102,7 +102,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Security detections response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 198 | 0 | 90 | 49 | | logstash | [Logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | - | 41 | 0 | 41 | 6 | -| | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 249 | 0 | 248 | 24 | +| | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 250 | 0 | 249 | 24 | | | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 67 | 0 | 67 | 0 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 251 | 10 | 78 | 31 | | | [Stack Monitoring](https://github.com/orgs/elastic/teams/stack-monitoring-ui) | - | 11 | 0 | 9 | 1 | @@ -142,7 +142,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 447 | 1 | 342 | 32 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 412 | 0 | 391 | 40 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 407 | 0 | 386 | 42 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 130 | 0 | 91 | 11 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 205 | 0 | 142 | 9 | | | [Unified Search](https://github.com/orgs/elastic/teams/kibana-app-services) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 82 | 2 | 78 | 13 | @@ -206,6 +206,10 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Owner missing] | - | 7 | 0 | 7 | 0 | | | [Owner missing] | - | 3 | 0 | 3 | 0 | | | [Owner missing] | - | 15 | 0 | 13 | 0 | +| | [Owner missing] | - | 9 | 0 | 3 | 0 | +| | [Owner missing] | - | 6 | 0 | 6 | 0 | +| | [Owner missing] | - | 4 | 0 | 4 | 0 | +| | [Owner missing] | - | 17 | 0 | 9 | 0 | | | [Owner missing] | - | 4 | 0 | 4 | 0 | | | [Owner missing] | - | 4 | 0 | 4 | 0 | | | [Owner missing] | - | 5 | 0 | 2 | 0 | @@ -225,7 +229,12 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Owner missing] | - | 10 | 0 | 10 | 0 | | | [Owner missing] | - | 16 | 0 | 16 | 0 | | | [Owner missing] | - | 4 | 0 | 0 | 0 | +| | [Owner missing] | - | 10 | 1 | 10 | 0 | +| | [Owner missing] | - | 25 | 5 | 25 | 1 | +| | [Owner missing] | - | 7 | 0 | 7 | 1 | | | [Owner missing] | - | 392 | 1 | 154 | 0 | +| | [Owner missing] | - | 54 | 0 | 48 | 2 | +| | [Owner missing] | - | 41 | 0 | 37 | 0 | | | [Owner missing] | - | 4 | 0 | 2 | 0 | | | [Owner missing] | - | 3 | 0 | 3 | 0 | | | [Owner missing] | - | 8 | 2 | 6 | 0 | @@ -314,7 +323,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Owner missing] | - | 4 | 0 | 2 | 0 | | | Operations | - | 38 | 2 | 21 | 0 | | | [Owner missing] | - | 2 | 0 | 2 | 0 | -| | Operations | - | 251 | 5 | 210 | 10 | +| | Operations | - | 252 | 5 | 211 | 11 | | | [Owner missing] | - | 135 | 8 | 103 | 2 | | | [Owner missing] | - | 72 | 0 | 55 | 0 | | | [Owner missing] | - | 8 | 0 | 2 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index c7b08aab4bd73..04d1978da0585 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github summary: API docs for the presentationUtil plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 59c7c219a1602..234251ac33a92 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github summary: API docs for the remoteClusters plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 8d73fbaa1f36a..0e0dfa097fa0a 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github summary: API docs for the reporting plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index deb418b833fe3..a75cacfcc1572 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github summary: API docs for the rollup plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index db25b33fb89f9..d6e20d8034ea6 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github summary: API docs for the ruleRegistry plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index e0a004928b4b2..22edf2e545f0e 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github summary: API docs for the runtimeFields plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 2792e2107d074..89d4585144a26 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjects plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 4d25d3bf28f50..fd466c3c3a99b 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsManagement plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 5b61e650b0976..d5ddfca5055d9 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTagging plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 8f7e57b1e2718..e0aead29fe244 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTaggingOss plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 7b042ea1f93c6..8525bfa3cc6ca 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotMode plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 51a7e1a61919f..346eb39633f9b 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotting plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 17da37f5902c4..f48eba18053c2 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -2401,13 +2401,7 @@ "label": "errors", "description": [], "signature": [ - { - "pluginId": "core", - "scope": "server", - "docId": "kibCorePluginApi", - "section": "def-server.DeprecationsDetails", - "text": "DeprecationsDetails" - }, + "DeprecationsDetails", "[] | undefined" ], "path": "x-pack/plugins/security/common/model/deprecations.ts", diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 434d136388f5e..4d47b746b500c 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github summary: API docs for the security plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index d1d77eae3d5fc..31aaf47e64dfd 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github summary: API docs for the securitySolution plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index da2c2cf09a878..5541e10a3b3bb 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github summary: API docs for the sessionView plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/share.mdx b/api_docs/share.mdx index b6a02d17aecc4..feea0969781ec 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github summary: API docs for the share plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/shared_u_x.mdx b/api_docs/shared_u_x.mdx index de326e69e0fe2..6ae95456986e7 100644 --- a/api_docs/shared_u_x.mdx +++ b/api_docs/shared_u_x.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sharedUX title: "sharedUX" image: https://source.unsplash.com/400x175/?github summary: API docs for the sharedUX plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sharedUX'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 2d533df972c65..8e903897b9a35 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github summary: API docs for the snapshotRestore plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 2082447ea3258..7ce756b9afaa2 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github summary: API docs for the spaces plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index e5cce413d231b..ae5f9513f9769 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the stackAlerts plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 2ca6c69bacca9..84a68efa150be 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the taskManager plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index b0a927943f987..a96031bcd465d 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetry plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 5ed1647e3fd4e..ff5555bf4f259 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionManager plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 421ef5b38c9a8..e3c006af01c2c 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionXpack plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 3d33d343a8620..3a039df3de72d 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryManagementSection plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index c384f9da142fc..1d765a9f54761 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github summary: API docs for the timelines plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index a8e0315881b2d..52625666bf734 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github summary: API docs for the transform plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 21cdbb34c1e45..308ee72116682 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1647,7 +1647,7 @@ "label": "useLoadRuleTypes", "description": [], "signature": [ - "({ filteredSolutions }: RuleTypesProps) => { ruleTypes: ", + "({ filteredRuleTypes }: RuleTypesProps) => { ruleTypes: ", { "pluginId": "triggersActionsUi", "scope": "public", @@ -1656,13 +1656,7 @@ "text": "RuleType" }, "[]; error: string | null; ruleTypeIndex: ", - { - "pluginId": "triggersActionsUi", - "scope": "public", - "docId": "kibTriggersActionsUiPluginApi", - "section": "def-public.RuleTypeIndex", - "text": "RuleTypeIndex" - }, + "RuleTypeIndex", "; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_types.ts", @@ -1673,7 +1667,7 @@ "id": "def-public.useLoadRuleTypes.$1", "type": "Object", "tags": [], - "label": "{ filteredSolutions }", + "label": "{ filteredRuleTypes }", "description": [], "signature": [ "RuleTypesProps" @@ -2906,105 +2900,16 @@ "deprecated": false, "children": [], "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem", - "type": "Interface", - "tags": [], - "label": "RuleTableItem", - "description": [], - "signature": [ - { - "pluginId": "triggersActionsUi", - "scope": "public", - "docId": "kibTriggersActionsUiPluginApi", - "section": "def-public.RuleTableItem", - "text": "RuleTableItem" - }, - " extends ", - { - "pluginId": "triggersActionsUi", - "scope": "public", - "docId": "kibTriggersActionsUiPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.ruleType", - "type": "string", - "tags": [], - "label": "ruleType", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.index", - "type": "number", - "tags": [], - "label": "index", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.actionsCount", - "type": "number", - "tags": [], - "label": "actionsCount", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.isEditable", - "type": "boolean", - "tags": [], - "label": "isEditable", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.enabledInLicense", - "type": "boolean", - "tags": [], - "label": "enabledInLicense", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTableItem.showIntervalWarning", - "type": "CompoundType", + "id": "def-public.RuleDefinitionProps.filteredRuleTypes", + "type": "Array", "tags": [], - "label": "showIntervalWarning", + "label": "filteredRuleTypes", "description": [], "signature": [ - "boolean | undefined" + "string[] | undefined" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false @@ -4268,35 +4173,27 @@ }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleStatus", + "id": "def-public.RulesListVisibleColumns", "type": "Type", "tags": [], - "label": "RuleStatus", + "label": "RulesListVisibleColumns", "description": [], "signature": [ - "\"disabled\" | \"enabled\" | \"snoozed\"" + "\"ruleName\" | \"ruleTags\" | \"ruleExecutionStatusLastDate\" | \"ruleSnoozeNotify\" | \"ruleScheduleInterval\" | \"ruleExecutionStatusLastDuration\" | \"ruleExecutionPercentile\" | \"ruleExecutionSuccessRatio\" | \"ruleExecutionStatus\" | \"ruleExecutionState\"" ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "path": "x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_column_selector.tsx", "deprecated": false, "initialIsOpen": false }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.RuleTypeIndex", + "id": "def-public.RuleStatus", "type": "Type", "tags": [], - "label": "RuleTypeIndex", + "label": "RuleStatus", "description": [], "signature": [ - "Map>" + "\"disabled\" | \"enabled\" | \"snoozed\"" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false, @@ -5772,30 +5669,28 @@ }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesListNotifyBadge", + "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesList", "type": "Function", "tags": [], - "label": "getRulesListNotifyBadge", + "label": "getRulesList", "description": [], "signature": [ "(props: ", - "RulesListNotifyBadgeProps", - ") => React.ReactElement<", - "RulesListNotifyBadgeProps", - ", string | React.JSXElementConstructor>" + "RulesListProps", + ") => React.ReactElement>" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, "children": [ { "parentPluginId": "triggersActionsUi", - "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesListNotifyBadge.$1", + "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesList.$1", "type": "Object", "tags": [], "label": "props", "description": [], "signature": [ - "RulesListNotifyBadgeProps" + "RulesListProps" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, @@ -5806,17 +5701,36 @@ }, { "parentPluginId": "triggersActionsUi", - "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesList", + "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesListNotifyBadge", "type": "Function", "tags": [], - "label": "getRulesList", + "label": "getRulesListNotifyBadge", "description": [], "signature": [ - "() => React.ReactElement>" + "(props: ", + "RulesListNotifyBadgeProps", + ") => React.ReactElement<", + "RulesListNotifyBadgeProps", + ", string | React.JSXElementConstructor>" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, - "children": [], + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.TriggersAndActionsUIPublicPluginStart.getRulesListNotifyBadge.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "RulesListNotifyBadgeProps" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", + "deprecated": false, + "isRequired": true + } + ], "returnComment": [] }, { diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index c5522864a1c75..75f8479dac735 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github summary: API docs for the triggersActionsUi plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 412 | 0 | 391 | 40 | +| 407 | 0 | 386 | 42 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 49db9908f5e09..97fb23e83f3df 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActions plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 176c8a902aa9c..bb8880d47c606 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActionsEnhanced plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 31a4820f9da14..0cd501995770f 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 40f91935ccaeb..29766e609bf00 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch.autocomplete plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 257045a1a7cd8..1fad07a494c85 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github summary: API docs for the urlForwarding plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 68a4cf6640fa6..dd8818245282a 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the usageCollection plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index c59920507b2c0..34058194ec5d3 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github summary: API docs for the ux plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 643412cbea7b5..ec8236e6f5118 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the visDefaultEditor plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 73b3fd805469b..407ea28ce7063 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeGauge plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 8fced74534107..926a05ae26c60 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeHeatmap plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_pie.devdocs.json b/api_docs/vis_type_pie.devdocs.json index 04d01630e4108..e7612bd29b859 100644 --- a/api_docs/vis_type_pie.devdocs.json +++ b/api_docs/vis_type_pie.devdocs.json @@ -90,7 +90,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; }" ], diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 6f2df2634dae4..be74dcbeb159e 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypePie plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 399fdf3d04609..791bed4ef1d41 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTable plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 35ceba01e9d4c..05c0f109bd2c9 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimelion plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 0e79bc87dad38..9ae9fa6db9d2b 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimeseries plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 9c7e5004768fd..3ebbe662877aa 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVega plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 63b6b57590f6d..58c34f869c85b 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVislib plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 7ddcc5d5423f9..faf14dab5c609 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeXy plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 07a10571b64cb..d647aaa69542f 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -1306,7 +1306,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; source?: string | undefined; sourceParams?: ", "SerializableRecord", @@ -4919,7 +4919,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", ">; }" ], @@ -6104,7 +6104,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined) => { id?: string | undefined; params?: Record | undefined; } | undefined" ], @@ -6168,7 +6168,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined" ], @@ -6267,7 +6267,7 @@ "section": "def-common.SerializedFieldFormat", "text": "SerializedFieldFormat" }, - "<", + "<{}, ", "SerializableRecord", "> | undefined; source?: string | undefined; sourceParams?: ", "SerializableRecord", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 13b8faa002999..0622481dda318 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github summary: API docs for the visualizations plugin -date: 2022-07-13 +date: 2022-07-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- From 6110d1b66008192b816f96886aa9d8ae37e7dece Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Thu, 14 Jul 2022 09:12:58 +0100 Subject: [PATCH 36/96] Refactoring network DNS to use useSearchStrategy (#136005) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../security_solution/network/dns/index.ts | 7 - .../components/network_dns_table/mock.ts | 52 ------- .../containers/network_dns/index.test.tsx | 68 +++++++-- .../network/containers/network_dns/index.tsx | 137 +++++------------- .../pages/navigation/dns_query_tab_body.tsx | 1 - 5 files changed, 95 insertions(+), 170 deletions(-) diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts index 54c1b418f83bd..cb0fa20deb36d 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/network/dns/index.ts @@ -28,7 +28,6 @@ export interface NetworkDnsStrategyResponse extends IEsSearchResponse { totalCount: number; pageInfo: PageInfoPaginated; inspect?: Maybe; - histogram?: Maybe; } export interface NetworkDnsEdges { @@ -45,12 +44,6 @@ export interface NetworkDnsItem { uniqueDomains?: Maybe; } -export interface MatrixOverOrdinalHistogramData { - x: string; - y: number; - g: string; -} - export interface NetworkDnsBuckets { key: string; doc_count: number; diff --git a/x-pack/plugins/security_solution/public/network/components/network_dns_table/mock.ts b/x-pack/plugins/security_solution/public/network/components/network_dns_table/mock.ts index 3fa4ddd3fc9c0..2af67776534b2 100644 --- a/x-pack/plugins/security_solution/public/network/components/network_dns_table/mock.ts +++ b/x-pack/plugins/security_solution/public/network/components/network_dns_table/mock.ts @@ -126,57 +126,5 @@ export const mockData: NetworkDnsStrategyResponse = { fakeTotalCount: 50, showMorePagesIndicator: true, }, - histogram: [ - { - x: 'nflxvideo.net', - g: 'nflxvideo.net', - y: 12546, - }, - { - x: 'apple.com', - g: 'apple.com', - y: 31687, - }, - { - x: 'googlevideo.com', - g: 'googlevideo.com', - y: 16292, - }, - { - x: 'netflix.com', - g: 'netflix.com', - y: 218193, - }, - { - x: 'samsungcloudsolution.com', - g: 'samsungcloudsolution.com', - y: 11702, - }, - { - x: 'doubleclick.net', - g: 'doubleclick.net', - y: 14372, - }, - { - x: 'digitalocean.com', - g: 'digitalocean.com', - y: 4111, - }, - { - x: 'samsungelectronics.com', - g: 'samsungelectronics.com', - y: 36592, - }, - { - x: 'google.com', - g: 'google.com', - y: 8072, - }, - { - x: 'samsungcloudsolution.net', - g: 'samsungcloudsolution.net', - y: 11518, - }, - ], rawResponse: {} as NetworkDnsStrategyResponse['rawResponse'], }; diff --git a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.test.tsx b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.test.tsx index af634f629fedd..34272cd7cbccf 100644 --- a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.test.tsx +++ b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.test.tsx @@ -8,25 +8,73 @@ import { act, renderHook } from '@testing-library/react-hooks'; import { TestProviders } from '../../../common/mock'; import { ID, useNetworkDns } from '.'; -import { NetworkType } from '../../store/model'; +import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; + +jest.mock('../../../common/containers/use_search_strategy', () => ({ + useSearchStrategy: jest.fn(), +})); +const mockUseSearchStrategy = useSearchStrategy as jest.Mock; +const mockSearch = jest.fn(); + +const props = { + docValueFields: [], + endDate: '2020-07-08T08:20:18.966Z', + id: ID, + indexNames: ['auditbeat-*'], + skip: false, + startDate: '2020-07-07T08:20:18.966Z', +}; describe('useNetworkDns', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockUseSearchStrategy.mockReturnValue({ + loading: false, + result: { + edges: [], + totalCount: -1, + pageInfo: { + activePage: 0, + fakeTotalCount: 0, + showMorePagesIndicator: false, + }, + }, + search: mockSearch, + refetch: jest.fn(), + inspect: {}, + }); + }); + + it('runs search', () => { + renderHook(() => useNetworkDns(props), { + wrapper: TestProviders, + }); + + expect(mockSearch).toHaveBeenCalled(); + }); + + it('does not run search when skip = true', () => { + const localProps = { + ...props, + skip: true, + }; + renderHook(() => useNetworkDns(localProps), { + wrapper: TestProviders, + }); + + expect(mockSearch).not.toHaveBeenCalled(); + }); + it('skip = true will cancel any running request', () => { - const abortSpy = jest.spyOn(AbortController.prototype, 'abort'); const localProps = { - docValueFields: [], - startDate: '2020-07-07T08:20:18.966Z', - endDate: '2020-07-08T08:20:18.966Z', - id: `${ID}-${NetworkType.page}`, - indexNames: ['cool'], - type: NetworkType.page, - skip: false, + ...props, }; const { rerender } = renderHook(() => useNetworkDns(localProps), { wrapper: TestProviders, }); localProps.skip = true; act(() => rerender()); - expect(abortSpy).toHaveBeenCalledTimes(4); + expect(mockUseSearchStrategy).toHaveBeenCalledTimes(3); + expect(mockUseSearchStrategy.mock.calls[2][0].abort).toEqual(true); }); }); diff --git a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx index e13036cc0d3bc..28dc7e657191c 100644 --- a/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx +++ b/x-pack/plugins/security_solution/public/network/containers/network_dns/index.tsx @@ -5,37 +5,29 @@ * 2.0. */ -import { noop } from 'lodash/fp'; -import { useState, useEffect, useCallback, useMemo, useRef } from 'react'; +import { useState, useEffect, useCallback, useMemo } from 'react'; import deepEqual from 'fast-deep-equal'; -import { Subscription } from 'rxjs'; -import { isCompleteResponse, isErrorResponse } from '@kbn/data-plugin/common'; import type { ESTermQuery } from '../../../../common/typed_json'; import type { inputsModel } from '../../../common/store'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; -import { useKibana } from '../../../common/lib/kibana'; import { createFilter } from '../../../common/containers/helpers'; import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers'; -import type { networkModel } from '../../store'; import { networkSelectors } from '../../store'; import type { DocValueFields, NetworkDnsRequestOptions, - NetworkDnsStrategyResponse, - MatrixOverOrdinalHistogramData, NetworkDnsEdges, PageInfoPaginated, } from '../../../../common/search_strategy'; import { NetworkQueries } from '../../../../common/search_strategy'; import * as i18n from './translations'; -import { getInspectResponse } from '../../../helpers'; import type { InspectResponse } from '../../../types'; -import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; export const ID = 'networkDnsQuery'; -export interface NetworkDnsArgs { +export interface NetworkDnsResponse { id: string; inspect: InspectResponse; isInspected: boolean; @@ -45,14 +37,12 @@ export interface NetworkDnsArgs { refetch: inputsModel.Refetch; stackByField?: string; totalCount: number; - histogram: MatrixOverOrdinalHistogramData[]; } interface UseNetworkDns { id: string; docValueFields: DocValueFields[]; indexNames: string[]; - type: networkModel.NetworkType; filterQuery?: ESTermQuery | string; endDate: string; startDate: string; @@ -67,15 +57,9 @@ export const useNetworkDns = ({ indexNames, skip, startDate, - type, -}: UseNetworkDns): [boolean, NetworkDnsArgs] => { +}: UseNetworkDns): [boolean, NetworkDnsResponse] => { const getNetworkDnsSelector = useMemo(() => networkSelectors.dnsSelector(), []); const { activePage, sort, isPtrIncluded, limit } = useDeepEqualSelector(getNetworkDnsSelector); - const { data } = useKibana().services; - const refetch = useRef(noop); - const abortCtrl = useRef(new AbortController()); - const searchSubscription$ = useRef(new Subscription()); - const [loading, setLoading] = useState(false); const [networkDnsRequest, setNetworkDnsRequest] = useState(null); @@ -95,76 +79,39 @@ export const useNetworkDns = ({ [limit] ); - const [networkDnsResponse, setNetworkDnsResponse] = useState({ - networkDns: [], - histogram: [], - id, - inspect: { - dsl: [], - response: [], + const { + loading, + result: response, + search, + refetch, + inspect, + } = useSearchStrategy({ + factoryQueryType: NetworkQueries.dns, + initialResult: { + edges: [], + totalCount: -1, + pageInfo: { + activePage: 0, + fakeTotalCount: 0, + showMorePagesIndicator: false, + }, }, - isInspected: false, - loadPage: wrappedLoadMore, - pageInfo: { - activePage: 0, - fakeTotalCount: 0, - showMorePagesIndicator: false, - }, - refetch: refetch.current, - totalCount: -1, + errorMessage: i18n.ERROR_NETWORK_DNS, + abort: skip, }); - const { addError, addWarning } = useAppToasts(); - - const networkDnsSearch = useCallback( - (request: NetworkDnsRequestOptions | null) => { - if (request == null || skip) { - return; - } - - const asyncSearch = async () => { - abortCtrl.current = new AbortController(); - setLoading(true); - searchSubscription$.current = data.search - .search(request, { - strategy: 'securitySolutionSearchStrategy', - abortSignal: abortCtrl.current.signal, - }) - .subscribe({ - next: (response) => { - if (isCompleteResponse(response)) { - setLoading(false); - setNetworkDnsResponse((prevResponse) => ({ - ...prevResponse, - networkDns: response.edges, - inspect: getInspectResponse(response, prevResponse.inspect), - pageInfo: response.pageInfo, - refetch: refetch.current, - totalCount: response.totalCount, - histogram: response.histogram ?? prevResponse.histogram, - })); - searchSubscription$.current.unsubscribe(); - } else if (isErrorResponse(response)) { - setLoading(false); - addWarning(i18n.ERROR_NETWORK_DNS); - searchSubscription$.current.unsubscribe(); - } - }, - error: (msg) => { - setLoading(false); - addError(msg, { - title: i18n.FAIL_NETWORK_DNS, - }); - searchSubscription$.current.unsubscribe(); - }, - }); - }; - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); - asyncSearch(); - refetch.current = asyncSearch; - }, - [data.search, addError, addWarning, skip] + const networkDnsResponse = useMemo( + () => ({ + id, + inspect, + isInspected: false, + loadPage: wrappedLoadMore, + networkDns: response.edges, + pageInfo: response.pageInfo, + refetch, + totalCount: response.totalCount, + }), + [id, inspect, refetch, response.edges, response.pageInfo, response.totalCount, wrappedLoadMore] ); useEffect(() => { @@ -202,20 +149,10 @@ export const useNetworkDns = ({ ]); useEffect(() => { - networkDnsSearch(networkDnsRequest); - return () => { - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); - }; - }, [networkDnsRequest, networkDnsSearch]); - - useEffect(() => { - if (skip) { - setLoading(false); - searchSubscription$.current.unsubscribe(); - abortCtrl.current.abort(); + if (!skip && networkDnsRequest) { + search(networkDnsRequest); } - }, [skip]); + }, [networkDnsRequest, search, skip]); return [loading, networkDnsResponse]; }; diff --git a/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx b/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx index 971c424d78fe1..ee423b0343088 100644 --- a/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx +++ b/x-pack/plugins/security_solution/public/network/pages/navigation/dns_query_tab_body.tsx @@ -89,7 +89,6 @@ const DnsQueryTabBodyComponent: React.FC = ({ indexNames, skip: querySkip, startDate, - type, }); const getTitle = useCallback( From 4e8a0719a34dbf25a1463713c4f5f64ce3fb462a Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Thu, 14 Jul 2022 10:39:30 +0200 Subject: [PATCH 37/96] [Enterprise Search] Adds connector status and fixes configuration page (#136317) --- .../common/types/connector_package.ts | 12 --- .../types/connectors.ts} | 30 +++++-- .../enterprise_search/common/types/indices.ts | 5 +- ...pdate_connector_configuration_api_logic.ts | 3 +- .../update_connector_scheduling_api_logic.ts | 2 +- .../api/index/fetch_index_api_logic.ts | 52 +---------- .../connector/api_key_configuration.tsx | 26 +----- .../connector/connector_configuration.tsx | 90 +++++++++++++++++-- .../connector_configuration_config.tsx | 35 +++++++- .../connector_configuration_logic.ts | 2 +- .../connector/connector_scheduling_logic.ts | 2 +- .../enterprise_search_content/types.ts | 30 ++++++- .../lib/connectors/add_connector.test.ts | 7 +- .../server/lib/connectors/add_connector.ts | 14 +-- .../server/lib/connectors/fetch_connectors.ts | 16 ++-- .../update_connector_configuration.ts | 16 +++- .../connectors/update_connector_scheduling.ts | 6 +- .../server/lib/indices/generate_api_key.ts | 4 +- .../routes/enterprise_search/connectors.ts | 2 +- 19 files changed, 213 insertions(+), 141 deletions(-) delete mode 100644 x-pack/plugins/enterprise_search/common/types/connector_package.ts rename x-pack/plugins/enterprise_search/{server/types/connector.ts => common/types/connectors.ts} (61%) diff --git a/x-pack/plugins/enterprise_search/common/types/connector_package.ts b/x-pack/plugins/enterprise_search/common/types/connector_package.ts deleted file mode 100644 index 2051360b733f4..0000000000000 --- a/x-pack/plugins/enterprise_search/common/types/connector_package.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface ConnectorPackage { - id: string; - indexName: string; - name: string; -} diff --git a/x-pack/plugins/enterprise_search/server/types/connector.ts b/x-pack/plugins/enterprise_search/common/types/connectors.ts similarity index 61% rename from x-pack/plugins/enterprise_search/server/types/connector.ts rename to x-pack/plugins/enterprise_search/common/types/connectors.ts index 95e1e6876e4a8..bdeac44734286 100644 --- a/x-pack/plugins/enterprise_search/server/types/connector.ts +++ b/x-pack/plugins/enterprise_search/common/types/connectors.ts @@ -7,30 +7,44 @@ export interface KeyValuePair { label: string; - value: string | null; + value: string; } -export type ConnectorConfiguration = Record; +export type ConnectorConfiguration = Record; export interface ConnectorScheduling { enabled: boolean; interval: string; } +export enum ConnectorStatus { + CREATED = 'created', + NEEDS_CONFIGURATION = 'needs_configuration', + CONFIGURED = 'configured', + CONNECTED = 'connected', + ERROR = 'error', +} + +export enum SyncStatus { + IN_PROGRESS = 'in_progress', + COMPLETED = 'completed', + ERROR = 'error', +} export interface Connector { api_key_id: string | null; configuration: ConnectorConfiguration; - created_at: string | null; + id: string; index_name: string; last_seen: string | null; last_synced: string | null; - scheduling: ConnectorScheduling; + scheduling: { + enabled: boolean; + interval: string; // crontab syntax + }; service_type: string | null; - status: string | null; + status: ConnectorStatus; sync_error: string | null; sync_now: boolean; sync_status: string | null; } -export interface ConnectorWithId extends Connector { - id: string; -} +export type ConnectorDocument = Omit; diff --git a/x-pack/plugins/enterprise_search/common/types/indices.ts b/x-pack/plugins/enterprise_search/common/types/indices.ts index 485c2274a5f20..4b3007c36ec1d 100644 --- a/x-pack/plugins/enterprise_search/common/types/indices.ts +++ b/x-pack/plugins/enterprise_search/common/types/indices.ts @@ -14,9 +14,9 @@ import { export interface ElasticsearchIndex { health?: HealthStatus; - status?: IndicesStatsIndexMetadataState; + name: IndexName; - uuid?: Uuid; + status?: IndicesStatsIndexMetadataState; total: { docs: { count: number; @@ -26,4 +26,5 @@ export interface ElasticsearchIndex { size_in_bytes: string; }; }; + uuid?: Uuid; } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_configuration_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_configuration_api_logic.ts index 91c6495f3cdfb..49373a45eb99c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_configuration_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_configuration_api_logic.ts @@ -5,11 +5,10 @@ * 2.0. */ +import { ConnectorConfiguration } from '../../../../../common/types/connectors'; import { createApiLogic } from '../../../shared/api_logic/create_api_logic'; import { HttpLogic } from '../../../shared/http'; -import { ConnectorConfiguration } from '../index/fetch_index_api_logic'; - export interface PostConnectorConfigurationArgs { configuration: ConnectorConfiguration; indexId: string; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_scheduling_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_scheduling_api_logic.ts index 47679ee1caa0e..eebbd2b2bedf4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_scheduling_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/update_connector_scheduling_api_logic.ts @@ -5,9 +5,9 @@ * 2.0. */ +import { ConnectorScheduling } from '../../../../../common/types/connectors'; import { createApiLogic } from '../../../shared/api_logic/create_api_logic'; import { HttpLogic } from '../../../shared/http'; -import { ConnectorScheduling } from '../index/fetch_index_api_logic'; export interface UpdateConnectorSchedulingArgs { connectorId: string; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/fetch_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/fetch_index_api_logic.ts index adfd99a8a2d24..87ab8ecc700ba 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/fetch_index_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/fetch_index_api_logic.ts @@ -7,57 +7,7 @@ import { createApiLogic } from '../../../shared/api_logic/create_api_logic'; import { HttpLogic } from '../../../shared/http'; - -export interface KeyValuePair { - label: string; - value: string; -} - -export type ConnectorConfiguration = Record; -export interface ConnectorScheduling { - enabled: boolean; - interval: string; -} - -export interface Connector { - api_key_id: string | null; - configuration: ConnectorConfiguration; - created_at: string | null; - id: string; - index_name: string; - last_seen: string | null; - last_synced: string | null; - scheduling: { - enabled: boolean; - interval: string; // crontab syntax - }; - service_type: string | null; - status: string; - sync_error: string | null; - sync_now: boolean; - sync_status: string | null; -} - -export interface Crawler { - domains: []; -} - -export interface IndexData { - connector?: Connector; - crawler?: Crawler; - index: { - aliases: string[]; - health: string; - name: string; - total: { - docs: { - count: number; - deleted: number; - }; - }; - uuid: string; - }; -} +import { IndexData } from '../../types'; export const fetchIndex = async ({ indexName }: { indexName: string }) => { const route = `/internal/enterprise_search/indices/${indexName}`; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/api_key_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/api_key_configuration.tsx index e53ffac0d4393..d4b8c82909e9f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/api_key_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/api_key_configuration.tsx @@ -16,7 +16,6 @@ import { EuiButton, EuiLink, EuiSpacer, - EuiCallOut, EuiConfirmModal, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -72,7 +71,7 @@ export const ApiKeyConfig: React.FC<{ hasApiKey: boolean; indexName: string }> = confirmButtonText={i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.confirmButton.label', { - defaultMessage: 'Generate an Elasticsearch API key', + defaultMessage: 'Generate API key', } )} defaultFocusedButton="confirm" @@ -81,7 +80,7 @@ export const ApiKeyConfig: React.FC<{ hasApiKey: boolean; indexName: string }> = 'xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description', { defaultMessage: - 'Generating a new Elasticsearch API key will invalidate the previous key. Are you sure you want to generate a new Elasticsearch API key? This can not be undone.', + 'Generating a new API key will invalidate the previous key. Are you sure you want to generate a new API key? This can not be undone.', } )} @@ -96,7 +95,7 @@ export const ApiKeyConfig: React.FC<{ hasApiKey: boolean; indexName: string }> = 'xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description', { defaultMessage: - 'Keep your Elasticsearch API key somewhere safe while you configure your connector. Generating a new Elasticsearch API key will invalidate the previous key.', + 'Keep your Elasticsearch API key somewhere safe while you configure your connector.', } )} @@ -134,25 +133,6 @@ export const ApiKeyConfig: React.FC<{ hasApiKey: boolean; indexName: string }> = )} - {hasApiKey && ( - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.warning.description', - { - defaultMessage: - 'Generating a new Elasticsearch API key will invalidate the previous key.', - } - )} - - - )} ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx index e41761e01dcfd..8243f901b70f8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx @@ -7,14 +7,11 @@ import React from 'react'; -import { useParams } from 'react-router-dom'; - import { useValues } from 'kea'; import { EuiText, EuiFlexGroup, - EuiButton, EuiFlexItem, EuiLink, EuiPanel, @@ -24,17 +21,26 @@ import { import { i18n } from '@kbn/i18n'; +import { ConnectorStatus } from '../../../../../../common/types/connectors'; +import { generateEncodedPath } from '../../../../shared/encode_path_params'; +import { EuiButtonTo } from '../../../../shared/react_router_helpers'; + import { GenerateConnectorApiKeyApiLogic } from '../../../api/connector_package/generate_connector_api_key_api_logic'; import { FetchIndexApiLogic } from '../../../api/index/fetch_index_api_logic'; +import { SEARCH_INDEX_TAB_PATH } from '../../../routes'; import { ApiKey } from '../../api_key/api_key'; +import { IndexNameLogic } from '../index_name_logic'; + +import { SearchIndexTabId } from '../search_index'; + import { ApiKeyConfig } from './api_key_configuration'; import { ConnectorConfigurationConfig } from './connector_configuration_config'; export const ConnectorConfiguration: React.FC = () => { const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic); const { data: indexData } = useValues(FetchIndexApiLogic); - const { indexName } = useParams<{ indexName: string }>(); + const { indexName } = useValues(IndexNameLogic); const indexId = indexData?.connector?.id ?? ''; const hasApiKey = !!(indexData?.connector?.api_key_id ?? apiKeyData); @@ -42,7 +48,9 @@ export const ConnectorConfiguration: React.FC = () => { const ConnectorConfig: React.FC = () => indexData?.connector ? ( @@ -50,6 +58,41 @@ export const ConnectorConfiguration: React.FC = () => { <> ); + const ScheduleStep: React.FC = () => ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description', + { + defaultMessage: + 'To start a sync you need to set a schedule. Once done your documents will begin to sync.', + } + )} + + + + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label', + { + defaultMessage: 'Set schedule and sync', + } + )} + + + + + + ); + const ConnectorPackage: React.FC = () => ( @@ -65,14 +108,14 @@ export const ConnectorConfiguration: React.FC = () => { - + {i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.button.label', { defaultMessage: 'Clone and deploy connector package', } )} - + @@ -82,7 +125,7 @@ export const ConnectorConfiguration: React.FC = () => { label={i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.apiKey.label', { - defaultMessage: 'Connector package ID', + defaultMessage: 'Connector ID', } )} /> @@ -116,7 +159,11 @@ export const ConnectorConfiguration: React.FC = () => { }, { children: , - status: 'incomplete', + status: + !indexData?.connector?.status || + indexData.connector.status === ConnectorStatus.CREATED + ? 'incomplete' + : 'complete', title: i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title', { @@ -127,7 +174,11 @@ export const ConnectorConfiguration: React.FC = () => { }, { children: , - status: 'incomplete', + status: + indexData?.connector?.status && + indexData.connector.status === ConnectorStatus.CONNECTED + ? 'complete' + : 'incomplete', title: i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.connect.title', { @@ -136,6 +187,17 @@ export const ConnectorConfiguration: React.FC = () => { ), titleSize: 'xs', }, + { + children: , + status: indexData?.connector?.scheduling.enabled ? 'complete' : 'incomplete', + title: i18n.translate( + 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title', + { + defaultMessage: 'Set a schedule and start a sync', + } + ), + titleSize: 'xs', + }, ]} /> @@ -191,6 +253,16 @@ export const ConnectorConfiguration: React.FC = () => { )} + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.configurationConnector.support.feedback.label', + { + defaultMessage: 'Custom connector feedback', + } + )} + + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx index 233207d6cf427..c1927aeea0dfc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx @@ -12,32 +12,38 @@ import { useActions, useValues } from 'kea'; import { EuiButton, EuiButtonEmpty, + EuiCodeBlock, EuiDescriptionList, EuiFieldText, EuiFlexGroup, EuiFlexItem, EuiForm, EuiFormRow, + EuiSpacer, EuiText, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { Status } from '../../../../../../common/types/api'; +import { ConnectorConfiguration } from '../../../../../../common/types/connectors'; import { isNotNullish } from '../../../../../../common/utils/is_not_nullish'; import { ConnectorConfigurationApiLogic } from '../../../api/connector_package/update_connector_configuration_api_logic'; -import { ConnectorConfiguration } from '../../../api/index/fetch_index_api_logic'; import { ConnectorConfigurationLogic } from './connector_configuration_logic'; interface ConnectorConfigurationConfigArgs { + apiKey: string | undefined; configuration: ConnectorConfiguration; + connectorId: string; indexId: string; indexName: string; } export const ConnectorConfigurationConfig: React.FC = ({ + apiKey, configuration, + connectorId, indexId, indexName, }) => { @@ -54,6 +60,19 @@ export const ConnectorConfigurationConfig: React.FC + {`${ + apiKey + ? `elasticsearch: + api_key: "${apiKey}" +` + : '' + }connector_package_id: "${connectorId}" +`} + + ); + const form = ( { @@ -122,6 +141,7 @@ export const ConnectorConfigurationConfig: React.FC ({ description: value ?? '--', title: label })); + const display = ( @@ -158,6 +178,19 @@ export const ConnectorConfigurationConfig: React.FC + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.configurationConnector.yml.description', + { + defaultMessage: + 'Use this YAML sample with your Elastic API key and Connector id to get going faster', + } + )} + + + {ymlBlock} + {displayList.length > 0 && fields} ); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_logic.ts index cb4bfe2e5621f..ecbbb2616f88b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_logic.ts @@ -9,6 +9,7 @@ import { kea, MakeLogicType } from 'kea'; import { i18n } from '@kbn/i18n'; +import { ConnectorConfiguration } from '../../../../../../common/types/connectors'; import { Actions } from '../../../../shared/api_logic/create_api_logic'; import { clearFlashMessages, @@ -21,7 +22,6 @@ import { PostConnectorConfigurationArgs, PostConnectorConfigurationResponse, } from '../../../api/connector_package/update_connector_configuration_api_logic'; -import { ConnectorConfiguration } from '../../../api/index/fetch_index_api_logic'; type ConnectorConfigurationActions = Pick< Actions, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling_logic.ts index 6ab8072d27ecf..a6adb47ff88ee 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling_logic.ts @@ -9,6 +9,7 @@ import { kea, MakeLogicType } from 'kea'; import { i18n } from '@kbn/i18n'; +import { ConnectorScheduling } from '../../../../../../common/types/connectors'; import { Actions } from '../../../../shared/api_logic/create_api_logic'; import { clearFlashMessages, @@ -20,7 +21,6 @@ import { UpdateConnectorSchedulingApiLogic, UpdateConnectorSchedulingArgs, } from '../../../api/connector_package/update_connector_scheduling_api_logic'; -import { ConnectorScheduling } from '../../../api/index/fetch_index_api_logic'; type ConnectorSchedulingActions = Pick< Actions, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts index 5ada08728e468..b6c88caf63ed6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts @@ -12,11 +12,35 @@ import { HealthStatus } from '@elastic/elasticsearch/lib/api/types'; +import { Connector } from '../../../common/types/connectors'; + export interface SearchIndex { - name: string; - elasticsearch_index_name: string; + data_ingestion: 'connected' | 'incomplete'; document_count: number; + elasticsearch_index_name: string; health: HealthStatus; - data_ingestion: 'connected' | 'incomplete'; + name: string; + storage: string; } + +export interface Crawler { + domains: []; +} + +export interface IndexData { + connector?: Connector; + crawler?: Crawler; + index: { + aliases: string[]; + health: string; + name: string; + total: { + docs: { + count: number; + deleted: number; + }; + }; + uuid: string; + }; +} diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts index aa4290e241a2f..fbc8924e499cd 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts @@ -8,6 +8,7 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { CONNECTORS_INDEX } from '../..'; +import { ConnectorStatus } from '../../../common/types/connectors'; import { setupConnectorsIndices } from '../../index_management/setup_indices'; @@ -42,13 +43,12 @@ describe('addConnector lib function', () => { document: { api_key_id: null, configuration: {}, - created_at: null, index_name: 'index_name', last_seen: null, last_synced: null, scheduling: { enabled: false, interval: '* * * * *' }, service_type: null, - status: 'not connected', + status: ConnectorStatus.CREATED, sync_error: null, sync_now: false, sync_status: null, @@ -73,13 +73,12 @@ describe('addConnector lib function', () => { document: { api_key_id: null, configuration: {}, - created_at: null, index_name: 'index_name', last_seen: null, last_synced: null, scheduling: { enabled: false, interval: '* * * * *' }, service_type: null, - status: 'not connected', + status: ConnectorStatus.CREATED, sync_error: null, sync_now: false, sync_status: null, diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts index c416d698157da..8314b3ac059b0 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts @@ -8,13 +8,18 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { CONNECTORS_INDEX } from '../..'; +import { ConnectorDocument, ConnectorStatus } from '../../../common/types/connectors'; import { setupConnectorsIndices } from '../../index_management/setup_indices'; -import { Connector } from '../../types/connector'; import { isIndexNotFoundException } from '../../utils/identify_exceptions'; +export const createConnectorsIndex = async (client: IScopedClusterClient): Promise => { + const index = CONNECTORS_INDEX; + await client.asCurrentUser.indices.create({ index }); +}; + const createConnector = async ( index: string, - document: Connector, + document: ConnectorDocument, client: IScopedClusterClient ): Promise<{ id: string; index_name: string }> => { const result = await client.asCurrentUser.index({ @@ -31,16 +36,15 @@ export const addConnector = async ( input: { index_name: string } ): Promise<{ id: string; index_name: string }> => { const index = CONNECTORS_INDEX; - const document: Connector = { + const document: ConnectorDocument = { api_key_id: null, configuration: {}, - created_at: null, index_name: input.index_name, last_seen: null, last_synced: null, scheduling: { enabled: false, interval: '* * * * *' }, service_type: null, - status: 'not connected', + status: ConnectorStatus.CREATED, sync_error: null, sync_now: false, sync_status: null, diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/fetch_connectors.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/fetch_connectors.ts index 6c33baa1064c2..eaeeaff88003a 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/fetch_connectors.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/fetch_connectors.ts @@ -8,18 +8,18 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { CONNECTORS_INDEX } from '../..'; +import { Connector, ConnectorDocument } from '../../../common/types/connectors'; import { isNotNullish } from '../../../common/utils/is_not_nullish'; import { setupConnectorsIndices } from '../../index_management/setup_indices'; -import { Connector, ConnectorWithId } from '../../types/connector'; import { isIndexNotFoundException } from '../../utils/identify_exceptions'; export const fetchConnectorById = async ( client: IScopedClusterClient, connectorId: string -): Promise => { +): Promise => { try { - const connectorResult = await client.asCurrentUser.get({ + const connectorResult = await client.asCurrentUser.get({ id: connectorId, index: CONNECTORS_INDEX, }); @@ -37,9 +37,9 @@ export const fetchConnectorById = async ( export const fetchConnectorByIndexName = async ( client: IScopedClusterClient, indexName: string -): Promise => { +): Promise => { try { - const connectorResult = await client.asCurrentUser.search({ + const connectorResult = await client.asCurrentUser.search({ index: CONNECTORS_INDEX, query: { term: { 'index_name.keyword': indexName } }, }); @@ -58,9 +58,9 @@ export const fetchConnectorByIndexName = async ( } }; -export const fetchConnectors = async (client: IScopedClusterClient): Promise => { +export const fetchConnectors = async (client: IScopedClusterClient): Promise => { try { - const connectorResult = await client.asCurrentUser.search({ + const connectorResult = await client.asCurrentUser.search({ from: 0, index: CONNECTORS_INDEX, query: { match_all: {} }, @@ -69,7 +69,7 @@ export const fetchConnectors = async (client: IScopedClusterClient): Promise= 1000) { - const newConnectorResult = await client.asCurrentUser.search({ + const newConnectorResult = await client.asCurrentUser.search({ from: 0, index: CONNECTORS_INDEX, query: { match_all: {} }, diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_configuration.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_configuration.ts index 4ad3b0c993c2a..77feda4b7ff5b 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_configuration.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_configuration.ts @@ -10,21 +10,29 @@ import { i18n } from '@kbn/i18n'; import { CONNECTORS_INDEX } from '../..'; -import { Connector, ConnectorConfiguration } from '../../types/connector'; +import { + ConnectorConfiguration, + ConnectorDocument, + ConnectorStatus, +} from '../../../common/types/connectors'; export const updateConnectorConfiguration = async ( client: IScopedClusterClient, connectorId: string, configuration: ConnectorConfiguration ) => { - const connectorResult = await client.asCurrentUser.get({ + const connectorResult = await client.asCurrentUser.get({ id: connectorId, index: CONNECTORS_INDEX, }); const connector = connectorResult._source; if (connector) { - return await client.asCurrentUser.index({ - document: { ...connector, configuration }, + const status = + connector.status === ConnectorStatus.NEEDS_CONFIGURATION + ? ConnectorStatus.CONFIGURED + : connector.status; + return await client.asCurrentUser.index({ + document: { ...connector, configuration, status }, id: connectorId, index: CONNECTORS_INDEX, }); diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts index 4fde352d4030e..3fe7e602148b5 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts @@ -10,20 +10,20 @@ import { i18n } from '@kbn/i18n'; import { CONNECTORS_INDEX } from '../..'; -import { Connector, ConnectorScheduling } from '../../types/connector'; +import { ConnectorDocument, ConnectorScheduling } from '../../../common/types/connectors'; export const updateConnectorScheduling = async ( client: IScopedClusterClient, connectorId: string, scheduling: ConnectorScheduling ) => { - const connectorResult = await client.asCurrentUser.get({ + const connectorResult = await client.asCurrentUser.get({ id: connectorId, index: CONNECTORS_INDEX, }); const connector = connectorResult._source; if (connector) { - return await client.asCurrentUser.index({ + return await client.asCurrentUser.index({ document: { ...connector, scheduling }, id: connectorId, index: CONNECTORS_INDEX, diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/generate_api_key.ts b/x-pack/plugins/enterprise_search/server/lib/indices/generate_api_key.ts index dfa2558449cdd..a38ea61e9e36e 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/generate_api_key.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/generate_api_key.ts @@ -8,7 +8,7 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { CONNECTORS_INDEX } from '../..'; -import { Connector } from '../../types/connector'; +import { ConnectorDocument } from '../../../common/types/connectors'; export const generateApiKey = async (client: IScopedClusterClient, indexName: string) => { const apiKeyResult = await client.asCurrentUser.security.createApiKey({ @@ -25,7 +25,7 @@ export const generateApiKey = async (client: IScopedClusterClient, indexName: st }, }, }); - const connectorResult = await client.asCurrentUser.search({ + const connectorResult = await client.asCurrentUser.search({ index: CONNECTORS_INDEX, query: { term: { 'index_name.keyword': indexName } }, }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts index 9e6337211c5e3..8ee32ab55b688 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts @@ -45,7 +45,7 @@ export function registerConnectorRoutes({ router }: RouteDependencies) { validate: { body: schema.recordOf( schema.string(), - schema.object({ label: schema.string(), value: schema.nullable(schema.string()) }) + schema.object({ label: schema.string(), value: schema.string() }) ), params: schema.object({ connectorId: schema.string(), From 3055fbe69c84cbb5aab15bfe796badda27a45be8 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Thu, 14 Jul 2022 11:31:06 +0200 Subject: [PATCH 38/96] [Fleet] Configure source URI in global settings and in agent policy settings (#136263) * [Fleet] Configure source URI in global settings and in agent policy settings * Add some tests and data-test-subj * Test getCountsForDownloadSource * Fix default artifacts URI * Add default column and fix required parameter in openapi specs --- .../fleet/common/constants/download_source.ts | 5 +- .../components/schemas/download_sources.yaml | 1 - .../plugins/fleet/common/services/routes.ts | 12 ++ .../types/rest_spec/download_sources.ts | 11 +- .../agent_policy_advanced_fields/hooks.tsx | 54 +++++- .../agent_policy_advanced_fields/index.tsx | 50 ++++- .../components/settings/index.tsx | 3 + .../download_source_flyout/confirm_update.tsx | 75 ++++++++ .../download_source_flyout/index.test.tsx | 52 +++++ .../download_source_flyout/index.tsx | 179 ++++++++++++++++++ .../services/get_count.test.tsx | 74 ++++++++ .../services/get_count.tsx | 45 +++++ .../use_delete_download_source.tsx | 118 ++++++++++++ .../use_download_source_flyout_form.test.tsx | 48 +++++ .../use_download_source_flyout_form.tsx | 144 ++++++++++++++ .../download_source_table/index.tsx | 140 ++++++++++++++ .../settings_page/agent_binary_section.tsx | 62 ++++++ .../components/settings_page/index.tsx | 12 +- .../fleet/sections/settings/index.tsx | 41 +++- .../fleet/public/constants/page_paths.ts | 17 +- .../hooks/use_request/download_source.ts | 55 ++++++ .../fleet/public/hooks/use_request/index.ts | 1 + x-pack/plugins/fleet/public/services/index.ts | 1 + x-pack/plugins/fleet/public/types/index.ts | 4 + .../plugins/fleet/server/constants/index.ts | 2 +- .../cloud_preconfiguration.test.ts.snap | 2 +- .../fleet/server/services/download_source.ts | 6 +- .../apis/download_sources/crud.ts | 8 +- 28 files changed, 1196 insertions(+), 26 deletions(-) create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/confirm_update.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.test.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.test.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_delete_download_source.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.test.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_table/index.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/agent_binary_section.tsx create mode 100644 x-pack/plugins/fleet/public/hooks/use_request/download_source.ts diff --git a/x-pack/plugins/fleet/common/constants/download_source.ts b/x-pack/plugins/fleet/common/constants/download_source.ts index 22959ed7023bb..76b6f2ce397ab 100644 --- a/x-pack/plugins/fleet/common/constants/download_source.ts +++ b/x-pack/plugins/fleet/common/constants/download_source.ts @@ -5,8 +5,9 @@ * 2.0. */ -// Default URL used to download Elastic Agent -export const DEFAULT_DOWNLOAD_SOURCE = 'https://artifacts.elastic.co'; +// Default source URI used to download Elastic Agent +export const DEFAULT_DOWNLOAD_SOURCE_URI = + 'https://artifacts.elastic.co/downloads/beats/elastic-agent'; export const DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE = 'ingest-download-sources'; diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/download_sources.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/download_sources.yaml index d963e82089303..969f5851294d8 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/download_sources.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/download_sources.yaml @@ -10,7 +10,6 @@ properties: host: type: string required: - - id - is_default - name - host diff --git a/x-pack/plugins/fleet/common/services/routes.ts b/x-pack/plugins/fleet/common/services/routes.ts index 9e6b27703bd2f..faadef1a95c9e 100644 --- a/x-pack/plugins/fleet/common/services/routes.ts +++ b/x-pack/plugins/fleet/common/services/routes.ts @@ -20,6 +20,7 @@ import { APP_API_ROUTES, K8S_API_ROUTES, PRECONFIGURATION_API_ROUTES, + DOWNLOAD_SOURCE_API_ROUTES, } from '../constants'; export const epmRouteService = { @@ -231,3 +232,14 @@ export const enrollmentAPIKeyRouteService = { export const setupRouteService = { getSetupPath: () => SETUP_API_ROUTE, }; + +export const downloadSourceRoutesService = { + getInfoPath: (downloadSourceId: string) => + DOWNLOAD_SOURCE_API_ROUTES.INFO_PATTERN.replace('{sourceId}', downloadSourceId), + getUpdatePath: (downloadSourceId: string) => + DOWNLOAD_SOURCE_API_ROUTES.UPDATE_PATTERN.replace('{sourceId}', downloadSourceId), + getListPath: () => DOWNLOAD_SOURCE_API_ROUTES.LIST_PATTERN, + getDeletePath: (downloadSourceId: string) => + DOWNLOAD_SOURCE_API_ROUTES.DELETE_PATTERN.replace('{sourceId}', downloadSourceId), + getCreatePath: () => DOWNLOAD_SOURCE_API_ROUTES.CREATE_PATTERN, +}; diff --git a/x-pack/plugins/fleet/common/types/rest_spec/download_sources.ts b/x-pack/plugins/fleet/common/types/rest_spec/download_sources.ts index 13af84f372c2f..bb66908b3bddd 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/download_sources.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/download_sources.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { DownloadSourceBase } from '../models'; +import type { DownloadSourceBase, DownloadSource } from '../models'; import type { ListResult } from './common'; @@ -28,18 +28,17 @@ export interface PutDownloadSourceRequest { outputId: string; }; body: { - id: string; name: string; - hosts: string; + host: string; is_default?: boolean; }; } export interface PostDownloadSourceRequest { body: { - id: string; + id?: string; name: string; - hosts: string; + host: string; is_default?: boolean; }; } @@ -48,4 +47,4 @@ export interface PutDownloadSourceResponse { item: DownloadSourceBase; } -export type GetDownloadSourceResponse = ListResult; +export type GetDownloadSourceResponse = ListResult; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx index 47c2db3db05a9..ba8d0bf5d568f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiText, EuiSpacer } from '@elastic/eui'; -import { useGetOutputs, useLicense } from '../../../../hooks'; +import { useGetOutputs, useLicense, useGetDownloadSources } from '../../../../hooks'; import { LICENCE_FOR_PER_POLICY_OUTPUT, FLEET_APM_PACKAGE, @@ -20,6 +20,7 @@ import type { NewAgentPolicy, AgentPolicy } from '../../../../types'; // The super select component do not support null or '' as a value export const DEFAULT_OUTPUT_VALUE = '@@##DEFAULT_OUTPUT_VALUE##@@'; +export const DEFAULT_DOWNLOAD_SOURCE_VALUE = '@@##DEFAULT_DOWNLOAD_SOURCE_VALUE##@@'; function getOutputLabel(name: string, disabledMessage?: React.ReactNode) { if (!disabledMessage) { @@ -136,3 +137,54 @@ export function useOutputOptions(agentPolicy: Partial) { + const downloadSourcesRequest = useGetDownloadSources(); + + const dataDownloadSourceOptions = useMemo(() => { + if (downloadSourcesRequest.isLoading || !downloadSourcesRequest.data) { + return []; + } + + const defaultDownloadSource = downloadSourcesRequest.data.items.find((item) => item.is_default); + const defaultDownloadSourceName = defaultDownloadSource?.name; + + return [ + getDefaultDownloadSource(defaultDownloadSourceName), + ...downloadSourcesRequest.data.items + .filter((item) => !item.is_default) + .map((item) => { + return { + value: item.id, + inputDisplay: item.name, + }; + }), + ]; + }, [downloadSourcesRequest]); + + return useMemo( + () => ({ + dataDownloadSourceOptions, + isLoading: downloadSourcesRequest.isLoading, + }), + [dataDownloadSourceOptions, downloadSourcesRequest.isLoading] + ); +} + +function getDefaultDownloadSource( + defaultDownloadSourceName?: string, + defaultDownloadSourceDisabled?: boolean, + defaultDownloadSourceDisabledMessage?: React.ReactNode +) { + return { + inputDisplay: getOutputLabel( + i18n.translate('xpack.fleet.agentPolicy.downloadSourcesOptions.defaultOutputText', { + defaultMessage: 'Default (currently {defaultDownloadSourceName})', + values: { defaultDownloadSourceName }, + }), + defaultDownloadSourceDisabledMessage + ), + value: DEFAULT_DOWNLOAD_SOURCE_VALUE, + disabled: defaultDownloadSourceDisabled, + }; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx index e1c6bbafa21a7..3662465054c49 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx @@ -33,7 +33,12 @@ import type { ValidationResults } from '../agent_policy_validation'; import { policyHasFleetServer } from '../../../../services'; -import { useOutputOptions, DEFAULT_OUTPUT_VALUE } from './hooks'; +import { + useOutputOptions, + useDownloadSourcesOptions, + DEFAULT_OUTPUT_VALUE, + DEFAULT_DOWNLOAD_SOURCE_VALUE, +} from './hooks'; interface Props { agentPolicy: Partial; @@ -57,6 +62,8 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = monitoringOutputOptions, isLoading: isLoadingOptions, } = useOutputOptions(agentPolicy); + const { dataDownloadSourceOptions, isLoading: isLoadingDownloadSources } = + useDownloadSourcesOptions(agentPolicy); // agent monitoring checkbox group can appear multiple times in the DOM, ids have to be unique to work correctly const monitoringCheckboxIdSuffix = Date.now(); @@ -361,6 +368,46 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = /> + + + + } + description={ + + } + > + + { + updateAgentPolicy({ + download_source_id: e !== DEFAULT_DOWNLOAD_SOURCE_VALUE ? e : null, + }); + }} + options={dataDownloadSourceOptions} + data-test-subj="agentPolicyForm.downloadSource.select" + /> + + {isEditing && 'id' in agentPolicy && !agentPolicy.is_managed ? ( = {(deleteAgentPolicyPrompt) => { return ( deleteAgentPolicyPrompt(agentPolicy.id!, onDelete)} > diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx index 13b7135d0c095..87614fc6413c8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx @@ -85,6 +85,8 @@ export const SettingsView = memo<{ agentPolicy: AgentPolicy }>( data_output_id, // eslint-disable-next-line @typescript-eslint/naming-convention monitoring_output_id, + // eslint-disable-next-line @typescript-eslint/naming-convention + download_source_id, } = agentPolicy; const { data, error } = await sendUpdateAgentPolicy(agentPolicy.id, { name, @@ -94,6 +96,7 @@ export const SettingsView = memo<{ agentPolicy: AgentPolicy }>( unenroll_timeout, data_output_id, monitoring_output_id, + download_source_id, }); if (data) { notifications.toasts.addSuccess( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/confirm_update.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/confirm_update.tsx new file mode 100644 index 0000000000000..cdc2e00736333 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/confirm_update.tsx @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import type { DownloadSource } from '../../../../types'; + +import type { useConfirmModal } from '../../hooks/use_confirm_modal'; + +import { getCountsForDownloadSource } from './services/get_count'; + +interface ConfirmDescriptionProps { + downloadSource: DownloadSource; + agentCount: number; + agentPolicyCount: number; +} + +const ConfirmDescription: React.FunctionComponent = ({ + downloadSource, + agentCount, + agentPolicyCount, +}) => ( + {downloadSource.name}, + agents: ( + + + + ), + policies: ( + + + + ), + }} + /> +); + +export async function confirmUpdate( + downloadSource: DownloadSource, + confirm: ReturnType['confirm'] +) { + const { agentCount, agentPolicyCount } = await getCountsForDownloadSource(downloadSource); + return confirm( + , + + ); +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.test.tsx new file mode 100644 index 0000000000000..464d0601ced2b --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.test.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import type { DownloadSource } from '../../../../types'; +import { createFleetTestRendererMock } from '../../../../../../mock'; + +import { EditDownloadSourceFlyout } from '.'; + +jest.mock('../../../../../../hooks/use_fleet_status', () => ({ + FleetStatusProvider: (props: any) => { + return props.children; + }, + useFleetStatus: jest.fn().mockReturnValue({}), +})); + +function renderFlyout(downloadSource?: DownloadSource) { + const renderer = createFleetTestRendererMock(); + + const comp = renderer.render( + {}} /> + ); + + return { comp }; +} +describe('EditOutputFlyout', () => { + it('should render the flyout if there is no download source provided', async () => { + const { comp } = renderFlyout(); + expect(comp.queryByLabelText('Name')).not.toBeNull(); + expect(comp.queryByLabelText('Host')).not.toBeNull(); + expect(comp.queryByPlaceholderText('Specify name')).not.toBeNull(); + expect(comp.queryByPlaceholderText('Specify host')).not.toBeNull(); + }); + + it('should render the flyout if the provided download source is valid', async () => { + const { comp } = renderFlyout({ + name: 'New Host', + host: 'https://test-registry.co/path', + id: 'test-ds-1', + is_default: false, + }); + expect(comp.queryByLabelText('Name')).not.toBeNull(); + expect(comp.queryByLabelText('Host')).not.toBeNull(); + expect(comp.queryByDisplayValue('New Host')).not.toBeNull(); + expect(comp.queryByDisplayValue('https://test-registry.co/path')).not.toBeNull(); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx new file mode 100644 index 0000000000000..2ede5f992bc02 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx @@ -0,0 +1,179 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutHeader, + EuiTitle, + EuiFlyoutFooter, + EuiFlexGroup, + EuiFlexItem, + EuiButtonEmpty, + EuiButton, + EuiForm, + EuiFormRow, + EuiFieldText, + EuiLink, + EuiSwitch, + EuiSpacer, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import type { DownloadSource } from '../../../../types'; +import { FLYOUT_MAX_WIDTH } from '../../constants'; +import { useBreadcrumbs, useStartServices } from '../../../../hooks'; + +import { useDowloadSourceFlyoutForm } from './use_download_source_flyout_form'; + +export interface EditDownloadSourceFlyoutProps { + downloadSource?: DownloadSource; + onClose: () => void; +} + +export const EditDownloadSourceFlyout: React.FunctionComponent = ({ + onClose, + downloadSource, +}) => { + useBreadcrumbs('settings'); + const form = useDowloadSourceFlyoutForm(onClose, downloadSource); + const inputs = form.inputs; + const { docLinks } = useStartServices(); + + return ( + + + +

+ {!downloadSource ? ( + + ) : ( + + )} +

+ + + + + + } + {...inputs.nameInput.formRowProps} + > + + + + + + ), + }} + /> + } + label={ + + } + > + + + + + + } + /> + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.test.tsx new file mode 100644 index 0000000000000..fb40dcce75945 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.test.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DownloadSource } from '../../../../../types'; +import { sendGetAgents, sendGetAgentPolicies } from '../../../../../hooks'; + +import { getCountsForDownloadSource } from './get_count'; + +jest.mock('../../../../../hooks', () => ({ + ...jest.requireActual('../../../../../hooks'), + sendGetAgents: jest.fn(), + sendGetAgentPolicies: jest.fn(), +})); + +const mockedSendGetAgents = sendGetAgents as jest.Mock; +const mockedSendGetAgentPolicies = sendGetAgentPolicies as jest.Mock; + +describe('getCountsForDownloadSource', () => { + const downloadSource: DownloadSource = { + name: 'New Host', + host: 'https://test-registry.co/path', + id: 'test-ds-1', + is_default: false, + }; + + beforeEach(async () => { + const mapAgents = (ids: string[]) => + ids.map((agent) => ({ + id: agent, + active: true, + policy_id: 'policy1', + local_metadata: { host: { hostname: agent } }, + })); + mockedSendGetAgents.mockResolvedValueOnce({ + data: { + items: mapAgents(['agent1', 'agent2', 'agent3', 'agent4', 'agent5']), + total: 6, + totalInactive: 0, + }, + }); + + mockedSendGetAgentPolicies.mockResolvedValueOnce({ + data: { + items: [ + { + name: 'Agent policy 1', + namespace: 'default', + description: '', + monitoring_enabled: ['logs', 'metrics'], + download_source_id: 'test-ds-1', + }, + { + name: 'Agent policy 2', + namespace: 'default', + description: '', + monitoring_enabled: ['logs', 'metrics'], + download_source_id: 'test-ds-1', + }, + ], + }, + }); + }); + + it('return agentPolicyCount and agentCount', async () => { + expect(await getCountsForDownloadSource(downloadSource)).toEqual({ + agentCount: 6, + agentPolicyCount: 2, + }); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx new file mode 100644 index 0000000000000..ce9428771c0e4 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { sendGetAgentPolicies, sendGetAgents } from '../../../../../hooks'; +import type { DownloadSource } from '../../../../../types'; +import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../../../constants'; + +export async function getCountsForDownloadSource(downloadSource: DownloadSource) { + let kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:"${downloadSource.id}"`; + if (downloadSource.is_default) { + kuery += ` or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)`; + } + const agentPolicies = await sendGetAgentPolicies({ + kuery, + page: 1, + perPage: SO_SEARCH_LIMIT, + }); + + if (agentPolicies.error) { + throw agentPolicies.error; + } + const agentPolicyCount = agentPolicies.data?.items?.length ?? 0; + + let agentCount = 0; + if (agentPolicyCount > 0) { + const agents = await sendGetAgents({ + page: 1, + perPage: 0, + showInactive: false, + kuery: agentPolicies.data?.items.map((policy) => `policy_id:"${policy.id}"`).join(' or '), + }); + + if (agents.error) { + throw agents.error; + } + + agentCount = agents.data?.total ?? 0; + } + + return { agentPolicyCount, agentCount }; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_delete_download_source.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_delete_download_source.tsx new file mode 100644 index 0000000000000..ecd3130499572 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_delete_download_source.tsx @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; + +import { sendDeleteDownloadSource, useStartServices } from '../../../../hooks'; +import type { DownloadSource } from '../../../../types'; + +import { useConfirmModal } from '../../hooks/use_confirm_modal'; + +import { getCountsForDownloadSource } from './services/get_count'; + +const ConfirmTitle = () => ( + +); + +interface ConfirmDeleteDescriptionProps { + downloadSource: DownloadSource; + agentCount: number; + agentPolicyCount: number; +} + +const ConfirmDeleteDescription: React.FunctionComponent = ({ + downloadSource, + agentCount, + agentPolicyCount, +}) => ( + {downloadSource.name}, + agents: ( + + + + ), + policies: ( + + + + ), + }} + /> +); + +export function useDeleteDownloadSource(onSuccess: () => void) { + const { confirm } = useConfirmModal(); + const { notifications } = useStartServices(); + const deleteDownloadSource = useCallback( + async (downloadSource: DownloadSource) => { + try { + const { agentCount, agentPolicyCount } = await getCountsForDownloadSource(downloadSource); + + const isConfirmed = await confirm( + , + , + { + buttonColor: 'danger', + confirmButtonText: i18n.translate( + 'xpack.fleet.settings.deleteDownloadSource.confirmButtonLabel', + { + defaultMessage: 'Delete and deploy', + } + ), + } + ); + + if (!isConfirmed) { + return; + } + + const res = await sendDeleteDownloadSource(downloadSource.id); + + if (res.error) { + throw res.error; + } + + onSuccess(); + } catch (err) { + notifications.toasts.addError(err, { + title: i18n.translate('xpack.fleet.settings.deleteDownloadSource.errorToastTitle', { + defaultMessage: 'Error deleting agent binary source.', + }), + }); + } + }, + [confirm, notifications.toasts, onSuccess] + ); + + return { deleteDownloadSource }; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.test.tsx new file mode 100644 index 0000000000000..25136b0cb16db --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.test.tsx @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { validateHost } from './use_download_source_flyout_form'; + +describe('Download source form validation', () => { + describe('validateHost', () => { + it('should not work without any urls', () => { + const res = validateHost(''); + + expect(res).toEqual(['Host is required']); + }); + + it('should work with valid url with https protocol', () => { + const res = validateHost('https://test.co:9200'); + + expect(res).toBeUndefined(); + }); + + it('should work with valid url with http protocol', () => { + const res = validateHost('http://test.co'); + + expect(res).toBeUndefined(); + }); + + it('should work with valid url with path', () => { + const res = validateHost('http://test.co/download'); + + expect(res).toBeUndefined(); + }); + + it('should return an error with invalid url', () => { + const res = validateHost('toto'); + + expect(res).toEqual(['Invalid URL']); + }); + + it('should return an error with url with invalid port', () => { + const res = validateHost('https://test.fr:qwerty9200'); + + expect(res).toEqual(['Invalid URL']); + }); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.tsx new file mode 100644 index 0000000000000..ea965646cd6be --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/use_download_source_flyout_form.tsx @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useState } from 'react'; + +import { i18n } from '@kbn/i18n'; + +import { + sendPostDownloadSource, + useInput, + useSwitchInput, + useStartServices, + sendPutDownloadSource, +} from '../../../../hooks'; +import type { DownloadSource, PostDownloadSourceRequest } from '../../../../types'; +import { useConfirmModal } from '../../hooks/use_confirm_modal'; + +import { confirmUpdate } from './confirm_update'; + +export function useDowloadSourceFlyoutForm(onSuccess: () => void, downloadSource?: DownloadSource) { + const [isLoading, setIsloading] = useState(false); + const { notifications } = useStartServices(); + const { confirm } = useConfirmModal(); + + const nameInput = useInput(downloadSource?.name ?? '', validateName); + + const defaultDownloadSourceInput = useSwitchInput( + downloadSource?.is_default ?? false, + downloadSource?.is_default + ); + + const hostInput = useInput(downloadSource?.host ?? '', validateHost); + + const inputs = { + nameInput, + hostInput, + defaultDownloadSourceInput, + }; + + const hasChanged = Object.values(inputs).some((input) => input.hasChanged); + + const validate = useCallback(() => { + const nameInputValid = nameInput.validate(); + const hostValid = hostInput.validate(); + + return nameInputValid && hostValid; + }, [nameInput, hostInput]); + + const submit = useCallback(async () => { + try { + if (!validate()) { + return; + } + setIsloading(true); + + const data: PostDownloadSourceRequest['body'] = { + name: nameInput.value, + host: hostInput.value, + is_default: defaultDownloadSourceInput.value, + }; + + if (downloadSource) { + // Update + if (!(await confirmUpdate(downloadSource, confirm))) { + setIsloading(false); + return; + } + + const res = await sendPutDownloadSource(downloadSource.id, data); + if (res.error) { + throw res.error; + } + } else { + // Create + const res = await sendPostDownloadSource(data); + if (res.error) { + throw res.error; + } + } + + onSuccess(); + setIsloading(false); + } catch (err) { + setIsloading(false); + notifications.toasts.addError(err, { + title: i18n.translate('xpack.fleet.settings.dowloadSourceFlyoutForm.errorToastTitle', { + defaultMessage: 'Error while saving binary source', + }), + }); + } + }, [ + confirm, + defaultDownloadSourceInput.value, + downloadSource, + hostInput.value, + nameInput.value, + notifications.toasts, + onSuccess, + validate, + ]); + + return { + inputs, + submit, + isLoading, + isDisabled: isLoading || (downloadSource && !hasChanged), + }; +} + +function validateName(value: string) { + if (!value || value === '') { + return [ + i18n.translate('xpack.fleet.settings.dowloadSourceFlyoutForm.nameIsRequiredErrorMessage', { + defaultMessage: 'Name is required', + }), + ]; + } +} + +export function validateHost(value: string) { + try { + if (!value || value === '') { + return [ + i18n.translate('xpack.fleet.settings.dowloadSourceFlyoutForm.HostIsRequiredErrorMessage', { + defaultMessage: 'Host is required', + }), + ]; + } + const urlParsed = new URL(value); + if (!['http:', 'https:'].includes(urlParsed.protocol)) { + throw new Error('Invalid protocol'); + } + } catch (error) { + return [ + i18n.translate('xpack.fleet.settings.dowloadSourceFlyoutForm.hostError', { + defaultMessage: 'Invalid URL', + }), + ]; + } +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_table/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_table/index.tsx new file mode 100644 index 0000000000000..87034bf900fda --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_table/index.tsx @@ -0,0 +1,140 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import styled from 'styled-components'; +import { EuiBasicTable, EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiCheckbox } from '@elastic/eui'; +import type { EuiBasicTableColumn } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { useLink } from '../../../../hooks'; +import type { DownloadSource } from '../../../../types'; + +export interface DownloadSourceTableProps { + downloadSources: DownloadSource[]; + deleteDownloadSource: (ds: DownloadSource) => void; +} + +const NameFlexItemWithMaxWidth = styled(EuiFlexItem)` + max-width: 250px; +`; + +// Allow child to be truncated +const FlexGroupWithMinWidth = styled(EuiFlexGroup)` + min-width: 0px; +`; + +export const DownloadSourceTable: React.FunctionComponent = ({ + downloadSources, + deleteDownloadSource, +}) => { + const { getHref } = useLink(); + + const columns = useMemo((): Array> => { + return [ + { + render: (downloadSource: DownloadSource) => ( + + +

+ {downloadSource.name} +

+
+
+ ), + width: '288px', + name: i18n.translate('xpack.fleet.settings.downloadSourcesTable.nameColumnTitle', { + defaultMessage: 'Name', + }), + }, + { + truncateText: true, + render: (downloadSource: DownloadSource) => ( + + +

+ {downloadSource.host} +

+
+
+ ), + name: i18n.translate('xpack.fleet.settings.downloadSourcesTable.hostColumnTitle', { + defaultMessage: 'Host', + }), + }, + { + render: (downloadSource: DownloadSource) => ( + undefined} + /> + ), + width: '200px', + name: i18n.translate('xpack.fleet.settings.downloadSourcesTable.defaultColumnTitle', { + defaultMessage: 'Default', + }), + }, + { + width: '68px', + render: (downloadSource: DownloadSource) => { + const isDeleteVisible = !downloadSource.is_default; + + return ( + + + {isDeleteVisible && ( + deleteDownloadSource(downloadSource)} + title={i18n.translate( + 'xpack.fleet.settings.downloadSourceSection.deleteButtonTitle', + { + defaultMessage: 'Delete', + } + )} + data-test-subj="editDownloadSourceTable.delete.btn" + /> + )} + + + + + + ); + }, + name: i18n.translate('xpack.fleet.settings.downloadSourceSection.actionsColumnTitle', { + defaultMessage: 'Actions', + }), + }, + ]; + }, [deleteDownloadSource, getHref]); + + return ; +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/agent_binary_section.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/agent_binary_section.tsx new file mode 100644 index 0000000000000..ae9a42a7b2144 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/agent_binary_section.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiTitle, EuiText, EuiSpacer, EuiButtonEmpty } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { useLink } from '../../../../hooks'; +import type { DownloadSource } from '../../../../types'; +import { DownloadSourceTable } from '../download_source_table'; + +export interface AgentBinarySectionProps { + downloadSources: DownloadSource[]; + deleteDownloadSource: (ds: DownloadSource) => void; +} + +export const AgentBinarySection: React.FunctionComponent = ({ + downloadSources, + deleteDownloadSource, +}) => { + const { getHref } = useLink(); + + return ( + <> + +

+ +

+
+ + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/index.tsx index 7749e3304a6ea..4c5db21725639 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/settings_page/index.tsx @@ -8,21 +8,26 @@ import React from 'react'; import { EuiSpacer } from '@elastic/eui'; -import type { Output, Settings } from '../../../../types'; +import type { Output, Settings, DownloadSource } from '../../../../types'; import { SettingsSection } from './settings_section'; import { OutputSection } from './output_section'; +import { AgentBinarySection } from './agent_binary_section'; export interface SettingsPageProps { settings: Settings; outputs: Output[]; deleteOutput: (output: Output) => void; + downloadSources: DownloadSource[]; + deleteDownloadSource: (ds: DownloadSource) => void; } export const SettingsPage: React.FunctionComponent = ({ settings, outputs, deleteOutput, + downloadSources, + deleteDownloadSource, }) => { return ( <> @@ -30,6 +35,11 @@ export const SettingsPage: React.FunctionComponent = ({ + + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx index c586e88261940..7a94d9ef4bc79 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx @@ -9,7 +9,7 @@ import React, { useCallback } from 'react'; import { EuiPortal } from '@elastic/eui'; import { Router, Route, Switch, useHistory, Redirect } from 'react-router-dom'; -import { useBreadcrumbs, useGetOutputs, useGetSettings } from '../../hooks'; +import { useBreadcrumbs, useGetOutputs, useGetSettings, useGetDownloadSources } from '../../hooks'; import { FLEET_ROUTING_PATHS, pagePathGetters } from '../../constants'; import { DefaultLayout } from '../../layouts'; import { Loading } from '../../components'; @@ -19,6 +19,8 @@ import { withConfirmModalProvider } from './hooks/use_confirm_modal'; import { FleetServerHostsFlyout } from './components/fleet_server_hosts_flyout'; import { EditOutputFlyout } from './components/edit_output_flyout'; import { useDeleteOutput } from './hooks/use_delete_output'; +import { EditDownloadSourceFlyout } from './components/download_source_flyout'; +import { useDeleteDownloadSource } from './components/download_source_flyout/use_delete_download_source'; export const SettingsApp = withConfirmModalProvider(() => { useBreadcrumbs('settings'); @@ -26,23 +28,29 @@ export const SettingsApp = withConfirmModalProvider(() => { const settings = useGetSettings(); const outputs = useGetOutputs(); + const downloadSources = useGetDownloadSources(); const { deleteOutput } = useDeleteOutput(outputs.resendRequest); + const { deleteDownloadSource } = useDeleteDownloadSource(downloadSources.resendRequest); const resendSettingsRequest = settings.resendRequest; const resendOutputRequest = outputs.resendRequest; + const resendDownloadSourceRequest = downloadSources.resendRequest; const onCloseCallback = useCallback(() => { resendSettingsRequest(); resendOutputRequest(); + resendDownloadSourceRequest(); history.replace(pagePathGetters.settings()[1]); - }, [history, resendSettingsRequest, resendOutputRequest]); + }, [resendSettingsRequest, resendOutputRequest, resendDownloadSourceRequest, history]); if ( (settings.isLoading && settings.isInitialRequest) || !settings.data?.item || (outputs.isLoading && outputs.isInitialRequest) || - !outputs.data?.items + !outputs.data?.items || + (downloadSources.isLoading && downloadSources.isInitialRequest) || + !downloadSources.data?.items ) { return ( @@ -71,7 +79,6 @@ export const SettingsApp = withConfirmModalProvider(() => { {(route: { match: { params: { outputId: string } } }) => { const output = outputs.data?.items.find((o) => route.match.params.outputId === o.id); - if (!output) { return ; } @@ -83,12 +90,38 @@ export const SettingsApp = withConfirmModalProvider(() => { ); }} + + + + + + + {(route: { match: { params: { downloadSourceId: string } } }) => { + const downloadSource = downloadSources.data?.items.find( + (o) => route.match.params.downloadSourceId === o.id + ); + if (!downloadSource) { + return ; + } + + return ( + + + + ); + }} + ); diff --git a/x-pack/plugins/fleet/public/constants/page_paths.ts b/x-pack/plugins/fleet/public/constants/page_paths.ts index e7134f8549e27..479110f2f0142 100644 --- a/x-pack/plugins/fleet/public/constants/page_paths.ts +++ b/x-pack/plugins/fleet/public/constants/page_paths.ts @@ -18,6 +18,7 @@ export type StaticPage = | 'settings' | 'settings_edit_fleet_server_hosts' | 'settings_create_outputs' + | 'settings_create_download_sources' | 'debug'; export type DynamicPage = @@ -38,7 +39,8 @@ export type DynamicPage = | 'agent_list' | 'agent_details' | 'agent_details_logs' - | 'settings_edit_outputs'; + | 'settings_edit_outputs' + | 'settings_edit_download_sources'; export type Page = StaticPage | DynamicPage; @@ -68,6 +70,8 @@ export const FLEET_ROUTING_PATHS = { settings_edit_fleet_server_hosts: '/settings/edit-fleet-server-hosts', settings_create_outputs: '/settings/create-outputs', settings_edit_outputs: '/settings/outputs/:outputId', + settings_create_download_sources: '/settings/create-download-sources', + settings_edit_download_sources: '/settings/downloadSources/:downloadSourceId', debug: '/_debug', // TODO: Move this to the integrations app @@ -191,6 +195,17 @@ export const pagePathGetters: { FLEET_BASE_PATH, FLEET_ROUTING_PATHS.settings_edit_outputs.replace(':outputId', outputId as string), ], + settings_edit_download_sources: ({ downloadSourceId }) => [ + FLEET_BASE_PATH, + FLEET_ROUTING_PATHS.settings_edit_download_sources.replace( + ':downloadSourceId', + downloadSourceId as string + ), + ], settings_create_outputs: () => [FLEET_BASE_PATH, FLEET_ROUTING_PATHS.settings_create_outputs], + settings_create_download_sources: () => [ + FLEET_BASE_PATH, + FLEET_ROUTING_PATHS.settings_create_download_sources, + ], debug: () => [FLEET_BASE_PATH, FLEET_ROUTING_PATHS.debug], }; diff --git a/x-pack/plugins/fleet/public/hooks/use_request/download_source.ts b/x-pack/plugins/fleet/public/hooks/use_request/download_source.ts new file mode 100644 index 0000000000000..2b213501170e1 --- /dev/null +++ b/x-pack/plugins/fleet/public/hooks/use_request/download_source.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { downloadSourceRoutesService } from '../../services'; +import type { + GetDownloadSourceResponse, + PostDownloadSourceRequest, + PutDownloadSourceRequest, +} from '../../types'; + +import { useRequest, sendRequest } from './use_request'; + +export function useGetDownloadSources() { + return useRequest({ + method: 'get', + path: downloadSourceRoutesService.getListPath(), + }); +} + +export function useDefaultDownloadSource() { + const downloadSourcesRequest = useGetDownloadSources(); + const downloadSource = downloadSourcesRequest.data?.items.find((o) => o.is_default); + + return { downloadSource, refresh: downloadSourcesRequest.resendRequest }; +} + +export function sendPutDownloadSource( + downloadSourceId: string, + body: PutDownloadSourceRequest['body'] +) { + return sendRequest({ + method: 'put', + path: downloadSourceRoutesService.getUpdatePath(downloadSourceId), + body, + }); +} + +export function sendPostDownloadSource(body: PostDownloadSourceRequest['body']) { + return sendRequest({ + method: 'post', + path: downloadSourceRoutesService.getCreatePath(), + body, + }); +} + +export function sendDeleteDownloadSource(downloadSourceId: string) { + return sendRequest({ + method: 'delete', + path: downloadSourceRoutesService.getDeletePath(downloadSourceId), + }); +} diff --git a/x-pack/plugins/fleet/public/hooks/use_request/index.ts b/x-pack/plugins/fleet/public/hooks/use_request/index.ts index 2f700052acd7b..1ca5297cb22a2 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/index.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/index.ts @@ -17,3 +17,4 @@ export * from './settings'; export * from './setup'; export * from './app'; export * from './ingest_pipelines'; +export * from './download_source'; diff --git a/x-pack/plugins/fleet/public/services/index.ts b/x-pack/plugins/fleet/public/services/index.ts index 094fe2b66c6c9..b7760134172a9 100644 --- a/x-pack/plugins/fleet/public/services/index.ts +++ b/x-pack/plugins/fleet/public/services/index.ts @@ -40,6 +40,7 @@ export { validationHasErrors, countValidationErrors, getStreamsForInputType, + downloadSourceRoutesService, } from '../../common'; export * from './package_verification'; export * from './pkg_key_from_package_info'; diff --git a/x-pack/plugins/fleet/public/types/index.ts b/x-pack/plugins/fleet/public/types/index.ts index 2cd27e81be9d8..3b02839957b33 100644 --- a/x-pack/plugins/fleet/public/types/index.ts +++ b/x-pack/plugins/fleet/public/types/index.ts @@ -23,6 +23,7 @@ export type { PackagePolicyConfigRecordEntry, PackagePolicyPackage, Output, + DownloadSource, DataStream, Settings, CurrentUpgrade, @@ -121,6 +122,9 @@ export type { PackageSpecCategory, UpdatePackageRequest, UpdatePackageResponse, + GetDownloadSourceResponse, + PostDownloadSourceRequest, + PutDownloadSourceRequest, } from '../../common'; export { entries, ElasticsearchAssetType, KibanaAssetType, InstallStatus } from '../../common'; diff --git a/x-pack/plugins/fleet/server/constants/index.ts b/x-pack/plugins/fleet/server/constants/index.ts index 3123f2910ed54..b86b636059152 100644 --- a/x-pack/plugins/fleet/server/constants/index.ts +++ b/x-pack/plugins/fleet/server/constants/index.ts @@ -61,7 +61,7 @@ export { USER_SETTINGS_TEMPLATE_SUFFIX, PACKAGE_TEMPLATE_SUFFIX, // Download sources - DEFAULT_DOWNLOAD_SOURCE, + DEFAULT_DOWNLOAD_SOURCE_URI, DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, DEFAULT_DOWNLOAD_SOURCE_ID, } from '../../common'; diff --git a/x-pack/plugins/fleet/server/integration_tests/__snapshots__/cloud_preconfiguration.test.ts.snap b/x-pack/plugins/fleet/server/integration_tests/__snapshots__/cloud_preconfiguration.test.ts.snap index fc2ce4eb7145e..ff918248ffb57 100644 --- a/x-pack/plugins/fleet/server/integration_tests/__snapshots__/cloud_preconfiguration.test.ts.snap +++ b/x-pack/plugins/fleet/server/integration_tests/__snapshots__/cloud_preconfiguration.test.ts.snap @@ -4,7 +4,7 @@ exports[`Fleet preconfiguration reset Preconfigured cloud policy With a full pre Object { "agent": Object { "download": Object { - "source_uri": "https://artifacts.elastic.co", + "source_uri": "https://artifacts.elastic.co/downloads/beats/elastic-agent", }, "monitoring": Object { "enabled": false, diff --git a/x-pack/plugins/fleet/server/services/download_source.ts b/x-pack/plugins/fleet/server/services/download_source.ts index c189ac1a23019..7a6df1d67a7f8 100644 --- a/x-pack/plugins/fleet/server/services/download_source.ts +++ b/x-pack/plugins/fleet/server/services/download_source.ts @@ -8,7 +8,7 @@ import type { SavedObjectsClientContract, SavedObject } from '@kbn/core/server'; import { DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, - DEFAULT_DOWNLOAD_SOURCE, + DEFAULT_DOWNLOAD_SOURCE_URI, DEFAULT_DOWNLOAD_SOURCE_ID, } from '../constants'; @@ -151,9 +151,9 @@ class DownloadSourceService { if (!defaultDS) { const newDefaultDS: DownloadSourceBase = { - name: 'default', + name: 'Elastic Artifacts', is_default: true, - host: DEFAULT_DOWNLOAD_SOURCE, + host: DEFAULT_DOWNLOAD_SOURCE_URI, }; return await this.create(soClient, newDefaultDS, { diff --git a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts index af9a109ed62ce..e8afeec2632c5 100644 --- a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts @@ -50,9 +50,9 @@ export default function (providerContext: FtrProviderContext) { expect(downloadSource.items[0]).to.eql({ id: 'fleet-default-download-source', - name: 'default', + name: 'Elastic Artifacts', is_default: true, - host: 'https://artifacts.elastic.co', + host: 'https://artifacts.elastic.co/downloads/beats/elastic-agent', }); }); }); @@ -66,9 +66,9 @@ export default function (providerContext: FtrProviderContext) { expect(downloadSource).to.eql({ item: { id: 'fleet-default-download-source', - name: 'default', + name: 'Elastic Artifacts', is_default: true, - host: 'https://artifacts.elastic.co', + host: 'https://artifacts.elastic.co/downloads/beats/elastic-agent', }, }); }); From a410ec9aafe552aa59e34dd2f40dd71cf41599e0 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 14 Jul 2022 10:33:12 +0100 Subject: [PATCH 39/96] [Archive Migrations] x-pack..kibana_scripted_fields_on_logstash (#136264) * [Archive Migrations] x-pack..kibana_scripted_fields_on_logstash Replaces the old es archive with kbn archive. Change test to use new archive. Helps with: https://github.com/elastic/kibana/issues/102552 * Drop --- .../apps/discover/async_scripted_fields.js | 6 +- .../data.json.gz | Bin 2803 -> 0 bytes .../mappings.json | 2717 ----------------- .../kibana_scripted_fields_on_logstash.json | 35 + 4 files changed, 38 insertions(+), 2720 deletions(-) delete mode 100644 x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/data.json.gz delete mode 100644 x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/mappings.json create mode 100644 x-pack/test/functional/fixtures/kbn_archiver/kibana_scripted_fields_on_logstash.json diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.js b/x-pack/test/functional/apps/discover/async_scripted_fields.js index 2c18051405964..ba670ad78aa32 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.js +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.js @@ -23,8 +23,8 @@ export default function ({ getService, getPageObjects }) { this.tags(['skipFirefox']); before(async function () { - await esArchiver.load( - 'x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash' + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/kibana_scripted_fields_on_logstash' ); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await security.testUser.setRoles(['test_logstash_reader', 'global_discover_read']); @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }) { await kibanaServer.uiSettings.replace({}); await kibanaServer.uiSettings.update({}); await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); - await esArchiver.load('x-pack/test/functional/es_archives/empty_kibana'); + await kibanaServer.savedObjects.cleanStandardList(); await security.testUser.restoreDefaults(); }); diff --git a/x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/data.json.gz b/x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/data.json.gz deleted file mode 100644 index 1e57c64f2d7df50ea09c021584b890c953d78cb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2803 zcmd6p`9Bj51INkD+{Ys2zHc?gzC`k6Gb1Exa^ECGsOGB3mboG$M2#pEqGA|1rx0?? z)!b)Bj?Cu!eO}Km&!6yoUa!wD@1H)uy+1NoZkGS#6z`^M@NJ5L1f$43aTG{FVVCGR z(DK5_T1w#XR>;&HKZSHoc{v_$QzwzP^D)0?fhIxRBY<7PDT(d+nX_ZRZrhxGp5Ge*j$MG-1$NOE(P7 zhajfD1)Q}UOU5M42}u=!9!f<5;@2ee%fb)(y%%2E^;bkCO7N2Gs!*fX(^i+u)9gk=)-s8AGF6I-N4p^VoItzLc0g=1Bl3|XRaIh zduvG{KP{4u^%N=LE*!W;jeX+%y|tg6fzO)Eo6;S1n0!i2*3Zt`j#awby{|rIxGcl@ zff+(iFKh2GDk|>o3>qkBXL&!s8S06DrJ-jXpQFLmX%7C8m@9Lw*leM!gA6XZ=Y_n^ z_jb@PeEL!!f1B*D4h+dE@! z^x+ET6TS*J$Qw0+IlJq>*V2sLoQ(S7fTQw*UrUWYsi;nW{t{Hj>t!&e;N+y!CI$(8 z%Alh8<%1!o%<}V8VXG~zyQ$5WCV%-^maqGD#I@G+nQTLD2e zvkVM{&di+YXPsjIghiEi-lr*PYz8dKp74bUIwRk=&2&8-d2FpKH_n%FrpvU*Yax9? z25!t~%+eBd85F?|$EN#d$TOwQmdQQC+jOGggr)86*4oaZHl%ytt3kW0ONd^9BPxFV zrSx4vpx0RjG;>_h&oCXl(J`-s3M-b1=8)7v-d^S&Sb9~nAiiyv)gcbLS<&2KdhbqE zIXvQbIn>9zKlGdXH_B^NuX&==0v#Hexm<{K>`#!U}kFpnbZ3KQT zf{1^S#@dP%b2h*25I~gI`#BcL3`MnmXkf30j-4QATcy{t>Goy8=vUfg_zl%3nJt!2Ao)pTbTpo8+dc)(m>d6wb*U0Ww8E5^?UVIq(iLCcqlqjUBow44^0 zU;z!}7|w>=i6#|4VHQ32UJFKw&|;?7L0P9ACT+LyU-+!h0iQ!T`D06?;X8{!n5-i@ zcBJuj!BB_Xx&T#j6TaLLUmYy*C?+>dt#tNEyQu^UxDpt20MP7xxAx^B3)4s5N-}DIEgIf&6-@r>Gz%*JtQ;vwfF&da_=p zsI*7KF9}DcX}er`%2zxvJ55c>*ZiG^8o0?zUMkr2B&J z)u=-sBJimNGM)$*x2Tog&1iRM@OQCa?9*G}$nh3X)AWVn z0wpoXIHX+=d{YRo{-A25x)PSGECclkI)n39B~HM-wttoW{^1d8zFMwwa`F7pZfm`E ziR*#C80&T$ldayzHn6HhDY@k+LBj04PNKR7=b?Zq?hUfK6k6MVHHG({$i?e#Ci|{C z->@yie(PVa0b#QW=TQOO|CcmQ1?L8vBqV{OvC>JI2Rq?UX4U?mt z(7Bi*fe6I64D{*P{;Nw<2Q+_a_U*n5pD-pDL9fMzq%)S__v~0|kkc`q-xPnuaae@l zVk9bG^o;NgkeG%h?G`i94CbV`L`KXz4c&fQ@n4$N%Rvelei5ye1tRr!OAMt2w zub0g1VE8GcSD~OZHf@NYdP5Dw1a$|a8GMIg8%aThC`?+R9uy!?E}9wmRmHz!VfhD< CVon19 diff --git a/x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/mappings.json b/x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/mappings.json deleted file mode 100644 index e0dd6d90eacb4..0000000000000 --- a/x-pack/test/functional/es_archives/kibana_scripted_fields_on_logstash/mappings.json +++ /dev/null @@ -1,2717 +0,0 @@ -{ - "type": "index", - "value": { - "aliases": { - ".kibana": { - } - }, - "index": ".kibana_1", - "mappings": { - "_meta": { - "migrationMappingPropertyHashes": { - "action": "6e96ac5e648f57523879661ea72525b7", - "action_task_params": "a9d49f184ee89641044be0ca2950fa3a", - "alert": "7b44fba6773e37c806ce290ea9b7024e", - "apm-indices": "9bb9b2bf1fa636ed8619cbab5ce6a1dd", - "apm-telemetry": "3525d7c22c42bc80f5e6e9cb3f2b26a2", - "application_usage_totals": "c897e4310c5f24b07caaff3db53ae2c1", - "application_usage_transactional": "965839e75f809fefe04f92dc4d99722a", - "canvas-element": "7390014e1091044523666d97247392fc", - "canvas-workpad": "b0a1706d356228dbdcb4a17e6b9eb231", - "cases": "08b8b110dbca273d37e8aef131ecab61", - "cases-comments": "c2061fb929f585df57425102fa928b4b", - "cases-configure": "42711cbb311976c0687853f4c1354572", - "cases-user-actions": "32277330ec6b721abe3b846cfd939a71", - "config": "ae24d22d5986d04124cc6568f771066f", - "dashboard": "d00f614b29a80360e1190193fd333bab", - "file-upload-telemetry": "0ed4d3e1983d1217a30982630897092e", - "graph-workspace": "cd7ba1330e6682e9cc00b78850874be1", - "index-pattern": "66eccb05066c5a89924f48a9e9736499", - "infrastructure-ui-source": "ddc0ecb18383f6b26101a2fadb2dab0c", - "inventory-view": "5299b67717e96502c77babf1c16fd4d3", - "kql-telemetry": "d12a98a6f19a2d273696597547e064ee", - "lens": "21c3ea0763beb1ecb0162529706b88c5", - "lens-ui-telemetry": "509bfa5978586998e05f9e303c07a327", - "maps-telemetry": "268da3a48066123fc5baf35abaa55014", - "metrics-explorer-view": "53c5365793677328df0ccb6138bf3cdd", - "migrationVersion": "4a1746014a75ade3a714e1db5763276f", - "ml-telemetry": "257fd1d4b4fdbb9cb4b8a3b27da201e9", - "namespace": "2f4316de49999235636386fe51dc06c1", - "namespaces": "2f4316de49999235636386fe51dc06c1", - "query": "11aaeb7f5f7fa5bb43f25e18ce26e7d9", - "references": "7997cf5a56cc02bdc9c93361bde732b0", - "sample-data-telemetry": "7d3cfeb915303c9641c59681967ffeb4", - "search": "181661168bbadd1eff5902361e2a0d5c", - "server": "ec97f1c5da1a19609a60874e5af1100c", - "siem-detection-engine-rule-actions": "6569b288c169539db10cb262bf79de18", - "siem-detection-engine-rule-status": "ae783f41c6937db6b7a2ef5c93a9e9b0", - "siem-ui-timeline": "f2d929253ecd06ffbac78b4047f45a86", - "siem-ui-timeline-note": "8874706eedc49059d4cf0f5094559084", - "siem-ui-timeline-pinned-event": "20638091112f0e14f0e443d512301c29", - "space": "c5ca8acafa0beaa4d08d014a97b6bc6b", - "telemetry": "36a616f7026dfa617d6655df850fe16d", - "tsvb-validation-telemetry": "3a37ef6c8700ae6fc97d5c7da00e9215", - "type": "2f4316de49999235636386fe51dc06c1", - "ui-metric": "0d409297dc5ebe1e3a1da691c6ee32e3", - "updated_at": "00da57df13e94e9d98437d13ace4bfe0", - "upgrade-assistant-reindex-operation": "296a89039fc4260292be36b1b005d8f2", - "upgrade-assistant-telemetry": "56702cec857e0a9dacfb696655b4ff7b", - "uptime-dynamic-settings": "a6f3af21b612339cbe6eecc1e5a60871", - "url": "b675c3be8d76ecf029294d51dc7ec65d", - "visualization": "52d7a13ad68a150c4525b292d23e12cc" - } - }, - "dynamic": "strict", - "properties": { - "action": { - "properties": { - "actionTypeId": { - "type": "keyword" - }, - "config": { - "enabled": false, - "type": "object" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "secrets": { - "type": "binary" - } - } - }, - "action_task_params": { - "properties": { - "actionId": { - "type": "keyword" - }, - "apiKey": { - "type": "binary" - }, - "params": { - "enabled": false, - "type": "object" - } - } - }, - "alert": { - "properties": { - "actions": { - "properties": { - "actionRef": { - "type": "keyword" - }, - "actionTypeId": { - "type": "keyword" - }, - "group": { - "type": "keyword" - }, - "params": { - "enabled": false, - "type": "object" - } - }, - "type": "nested" - }, - "alertTypeId": { - "type": "keyword" - }, - "apiKey": { - "type": "binary" - }, - "apiKeyOwner": { - "type": "keyword" - }, - "consumer": { - "type": "keyword" - }, - "createdAt": { - "type": "date" - }, - "createdBy": { - "type": "keyword" - }, - "enabled": { - "type": "boolean" - }, - "muteAll": { - "type": "boolean" - }, - "mutedInstanceIds": { - "type": "keyword" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "params": { - "enabled": false, - "type": "object" - }, - "schedule": { - "properties": { - "interval": { - "type": "keyword" - } - } - }, - "scheduledTaskId": { - "type": "keyword" - }, - "tags": { - "type": "keyword" - }, - "throttle": { - "type": "keyword" - }, - "updatedBy": { - "type": "keyword" - } - } - }, - "apm-indices": { - "properties": { - "error": { - "type": "keyword" - }, - "metric": { - "type": "keyword" - }, - "onboarding": { - "type": "keyword" - }, - "sourcemap": { - "type": "keyword" - }, - "span": { - "type": "keyword" - }, - "transaction": { - "type": "keyword" - } - } - }, - "apm-telemetry": { - "properties": { - "agents": { - "properties": { - "dotnet": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "go": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "java": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "js-base": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "nodejs": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "python": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "ruby": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "rum-js": { - "properties": { - "agent": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "framework": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "language": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "composite": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } - }, - "cardinality": { - "properties": { - "transaction": { - "properties": { - "name": { - "properties": { - "all_agents": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "rum": { - "properties": { - "1d": { - "type": "long" - } - } - } - } - } - } - }, - "user_agent": { - "properties": { - "original": { - "properties": { - "all_agents": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "rum": { - "properties": { - "1d": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "counts": { - "properties": { - "agent_configuration": { - "properties": { - "all": { - "type": "long" - } - } - }, - "error": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - }, - "max_error_groups_per_service": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "max_transaction_groups_per_service": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "metric": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - }, - "onboarding": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - }, - "services": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "sourcemap": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - }, - "span": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - }, - "traces": { - "properties": { - "1d": { - "type": "long" - } - } - }, - "transaction": { - "properties": { - "1d": { - "type": "long" - }, - "all": { - "type": "long" - } - } - } - } - }, - "has_any_services": { - "type": "boolean" - }, - "indices": { - "properties": { - "all": { - "properties": { - "total": { - "properties": { - "docs": { - "properties": { - "count": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "type": "long" - } - } - } - } - } - } - }, - "shards": { - "properties": { - "total": { - "type": "long" - } - } - } - } - }, - "integrations": { - "properties": { - "ml": { - "properties": { - "all_jobs_count": { - "type": "long" - } - } - } - } - }, - "retainment": { - "properties": { - "error": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "metric": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "onboarding": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "span": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "transaction": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "services_per_agent": { - "properties": { - "dotnet": { - "null_value": 0, - "type": "long" - }, - "go": { - "null_value": 0, - "type": "long" - }, - "java": { - "null_value": 0, - "type": "long" - }, - "js-base": { - "null_value": 0, - "type": "long" - }, - "nodejs": { - "null_value": 0, - "type": "long" - }, - "python": { - "null_value": 0, - "type": "long" - }, - "ruby": { - "null_value": 0, - "type": "long" - }, - "rum-js": { - "null_value": 0, - "type": "long" - } - } - }, - "tasks": { - "properties": { - "agent_configuration": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "agents": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "cardinality": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "groupings": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "indices_stats": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "integrations": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "processor_events": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "services": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "versions": { - "properties": { - "took": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "version": { - "properties": { - "apm_server": { - "properties": { - "major": { - "type": "long" - }, - "minor": { - "type": "long" - }, - "patch": { - "type": "long" - } - } - } - } - } - } - }, - "application_usage_totals": { - "properties": { - "appId": { - "type": "keyword" - }, - "minutesOnScreen": { - "type": "float" - }, - "numberOfClicks": { - "type": "long" - } - } - }, - "application_usage_transactional": { - "properties": { - "appId": { - "type": "keyword" - }, - "minutesOnScreen": { - "type": "float" - }, - "numberOfClicks": { - "type": "long" - }, - "timestamp": { - "type": "date" - } - } - }, - "canvas-element": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "content": { - "type": "text" - }, - "help": { - "type": "text" - }, - "image": { - "type": "text" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "canvas-workpad": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "cases": { - "properties": { - "closed_at": { - "type": "date" - }, - "closed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "description": { - "type": "text" - }, - "external_service": { - "properties": { - "connector_id": { - "type": "keyword" - }, - "connector_name": { - "type": "keyword" - }, - "external_id": { - "type": "keyword" - }, - "external_title": { - "type": "text" - }, - "external_url": { - "type": "text" - }, - "pushed_at": { - "type": "date" - }, - "pushed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "status": { - "type": "keyword" - }, - "tags": { - "type": "keyword" - }, - "title": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-comments": { - "properties": { - "comment": { - "type": "text" - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "pushed_at": { - "type": "date" - }, - "pushed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-configure": { - "properties": { - "closure_type": { - "type": "keyword" - }, - "connector_id": { - "type": "keyword" - }, - "connector_name": { - "type": "keyword" - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-user-actions": { - "properties": { - "action": { - "type": "keyword" - }, - "action_at": { - "type": "date" - }, - "action_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "action_field": { - "type": "keyword" - }, - "new_value": { - "type": "text" - }, - "old_value": { - "type": "text" - } - } - }, - "config": { - "dynamic": "true", - "properties": { - "accessibility:disableAnimations": { - "type": "boolean" - }, - "buildNum": { - "type": "keyword" - }, - "dateFormat:tz": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "defaultIndex": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "timepicker:quickRanges": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "dashboard": { - "properties": { - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "optionsJSON": { - "type": "text" - }, - "panelsJSON": { - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "type": "keyword" - }, - "pause": { - "type": "boolean" - }, - "section": { - "type": "integer" - }, - "value": { - "type": "integer" - } - } - }, - "timeFrom": { - "type": "keyword" - }, - "timeRestore": { - "type": "boolean" - }, - "timeTo": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "file-upload-telemetry": { - "properties": { - "filesUploadedTotalCount": { - "type": "long" - } - } - }, - "graph-workspace": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "numLinks": { - "type": "integer" - }, - "numVertices": { - "type": "integer" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "wsState": { - "type": "text" - } - } - }, - "index-pattern": { - "properties": { - "fieldFormatMap": { - "type": "text" - }, - "fields": { - "type": "text" - }, - "intervalName": { - "type": "keyword" - }, - "notExpandable": { - "type": "boolean" - }, - "sourceFilters": { - "type": "text" - }, - "timeFieldName": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "type": { - "type": "keyword" - }, - "typeMeta": { - "type": "keyword" - } - } - }, - "infrastructure-ui-source": { - "properties": { - "description": { - "type": "text" - }, - "fields": { - "properties": { - "container": { - "type": "keyword" - }, - "host": { - "type": "keyword" - }, - "pod": { - "type": "keyword" - }, - "tiebreaker": { - "type": "keyword" - }, - "timestamp": { - "type": "keyword" - } - } - }, - "logAlias": { - "type": "keyword" - }, - "logColumns": { - "properties": { - "fieldColumn": { - "properties": { - "field": { - "type": "keyword" - }, - "id": { - "type": "keyword" - } - } - }, - "messageColumn": { - "properties": { - "id": { - "type": "keyword" - } - } - }, - "timestampColumn": { - "properties": { - "id": { - "type": "keyword" - } - } - } - }, - "type": "nested" - }, - "metricAlias": { - "type": "keyword" - }, - "name": { - "type": "text" - } - } - }, - "inventory-view": { - "properties": { - "accountId": { - "type": "keyword" - }, - "autoBounds": { - "type": "boolean" - }, - "autoReload": { - "type": "boolean" - }, - "boundsOverride": { - "properties": { - "max": { - "type": "integer" - }, - "min": { - "type": "integer" - } - } - }, - "customMetrics": { - "properties": { - "aggregation": { - "type": "keyword" - }, - "field": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "label": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "customOptions": { - "properties": { - "field": { - "type": "keyword" - }, - "text": { - "type": "keyword" - } - }, - "type": "nested" - }, - "filterQuery": { - "properties": { - "expression": { - "type": "keyword" - }, - "kind": { - "type": "keyword" - } - } - }, - "groupBy": { - "properties": { - "field": { - "type": "keyword" - }, - "label": { - "type": "keyword" - } - }, - "type": "nested" - }, - "metric": { - "properties": { - "aggregation": { - "type": "keyword" - }, - "field": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "label": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "name": { - "type": "keyword" - }, - "nodeType": { - "type": "keyword" - }, - "region": { - "type": "keyword" - }, - "time": { - "type": "long" - }, - "view": { - "type": "keyword" - } - } - }, - "kql-telemetry": { - "properties": { - "optInCount": { - "type": "long" - }, - "optOutCount": { - "type": "long" - } - } - }, - "lens": { - "properties": { - "expression": { - "index": false, - "type": "keyword" - }, - "state": { - "type": "flattened" - }, - "title": { - "type": "text" - }, - "visualizationType": { - "type": "keyword" - } - } - }, - "lens-ui-telemetry": { - "properties": { - "count": { - "type": "integer" - }, - "date": { - "type": "date" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "map": { - "properties": { - "bounds": { - "dynamic": false, - "properties": {} - }, - "description": { - "type": "text" - }, - "layerListJSON": { - "type": "text" - }, - "mapStateJSON": { - "type": "text" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "maps-telemetry": { - "properties": { - "attributesPerMap": { - "properties": { - "dataSourcesCount": { - "properties": { - "avg": { - "type": "long" - }, - "max": { - "type": "long" - }, - "min": { - "type": "long" - } - } - }, - "emsVectorLayersCount": { - "dynamic": "true", - "type": "object" - }, - "layerTypesCount": { - "dynamic": "true", - "type": "object" - }, - "layersCount": { - "properties": { - "avg": { - "type": "long" - }, - "max": { - "type": "long" - }, - "min": { - "type": "long" - } - } - } - } - }, - "indexPatternsWithGeoFieldCount": { - "type": "long" - }, - "mapsTotalCount": { - "type": "long" - }, - "settings": { - "properties": { - "showMapVisualizationTypes": { - "type": "boolean" - } - } - }, - "timeCaptured": { - "type": "date" - } - } - }, - "metrics-explorer-view": { - "properties": { - "chartOptions": { - "properties": { - "stack": { - "type": "boolean" - }, - "type": { - "type": "keyword" - }, - "yAxisMode": { - "type": "keyword" - } - } - }, - "currentTimerange": { - "properties": { - "from": { - "type": "keyword" - }, - "interval": { - "type": "keyword" - }, - "to": { - "type": "keyword" - } - } - }, - "name": { - "type": "keyword" - }, - "options": { - "properties": { - "aggregation": { - "type": "keyword" - }, - "filterQuery": { - "type": "keyword" - }, - "groupBy": { - "type": "keyword" - }, - "limit": { - "type": "integer" - }, - "metrics": { - "properties": { - "aggregation": { - "type": "keyword" - }, - "color": { - "type": "keyword" - }, - "field": { - "type": "keyword" - }, - "label": { - "type": "keyword" - } - }, - "type": "nested" - } - } - } - } - }, - "migrationVersion": { - "dynamic": "true", - "properties": { - "index-pattern": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "space": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "ml-telemetry": { - "properties": { - "file_data_visualizer": { - "properties": { - "index_creation_count": { - "type": "long" - } - } - } - } - }, - "namespace": { - "type": "keyword" - }, - "namespaces": { - "type": "keyword" - }, - "query": { - "properties": { - "description": { - "type": "text" - }, - "filters": { - "enabled": false, - "type": "object" - }, - "query": { - "properties": { - "language": { - "type": "keyword" - }, - "query": { - "index": false, - "type": "keyword" - } - } - }, - "timefilter": { - "enabled": false, - "type": "object" - }, - "title": { - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "sample-data-telemetry": { - "properties": { - "installCount": { - "type": "long" - }, - "unInstallCount": { - "type": "long" - } - } - }, - "search": { - "properties": { - "columns": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "sort": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "server": { - "properties": { - "uuid": { - "type": "keyword" - } - } - }, - "siem-detection-engine-rule-actions": { - "properties": { - "actions": { - "properties": { - "action_type_id": { - "type": "keyword" - }, - "group": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "params": { - "enabled": false, - "type": "object" - } - } - }, - "alertThrottle": { - "type": "keyword" - }, - "ruleAlertId": { - "type": "keyword" - }, - "ruleThrottle": { - "type": "keyword" - } - } - }, - "siem-detection-engine-rule-status": { - "properties": { - "alertId": { - "type": "keyword" - }, - "bulkCreateTimeDurations": { - "type": "float" - }, - "gap": { - "type": "text" - }, - "lastFailureAt": { - "type": "date" - }, - "lastFailureMessage": { - "type": "text" - }, - "lastLookBackDate": { - "type": "date" - }, - "lastSuccessAt": { - "type": "date" - }, - "lastSuccessMessage": { - "type": "text" - }, - "searchAfterTimeDurations": { - "type": "float" - }, - "status": { - "type": "keyword" - }, - "statusDate": { - "type": "date" - } - } - }, - "siem-ui-timeline": { - "properties": { - "columns": { - "properties": { - "aggregatable": { - "type": "boolean" - }, - "category": { - "type": "keyword" - }, - "columnHeaderType": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "example": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "indexes": { - "type": "keyword" - }, - "name": { - "type": "text" - }, - "placeholder": { - "type": "text" - }, - "searchable": { - "type": "boolean" - }, - "type": { - "type": "keyword" - } - } - }, - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "dataProviders": { - "properties": { - "and": { - "properties": { - "enabled": { - "type": "boolean" - }, - "excluded": { - "type": "boolean" - }, - "id": { - "type": "keyword" - }, - "kqlQuery": { - "type": "text" - }, - "name": { - "type": "text" - }, - "queryMatch": { - "properties": { - "displayField": { - "type": "text" - }, - "displayValue": { - "type": "text" - }, - "field": { - "type": "text" - }, - "operator": { - "type": "text" - }, - "value": { - "type": "text" - } - } - } - } - }, - "enabled": { - "type": "boolean" - }, - "excluded": { - "type": "boolean" - }, - "id": { - "type": "keyword" - }, - "kqlQuery": { - "type": "text" - }, - "name": { - "type": "text" - }, - "queryMatch": { - "properties": { - "displayField": { - "type": "text" - }, - "displayValue": { - "type": "text" - }, - "field": { - "type": "text" - }, - "operator": { - "type": "text" - }, - "value": { - "type": "text" - } - } - } - } - }, - "dateRange": { - "properties": { - "end": { - "type": "date" - }, - "start": { - "type": "date" - } - } - }, - "description": { - "type": "text" - }, - "eventType": { - "type": "keyword" - }, - "favorite": { - "properties": { - "favoriteDate": { - "type": "date" - }, - "fullName": { - "type": "text" - }, - "keySearch": { - "type": "text" - }, - "userName": { - "type": "text" - } - } - }, - "filters": { - "properties": { - "exists": { - "type": "text" - }, - "match_all": { - "type": "text" - }, - "meta": { - "properties": { - "alias": { - "type": "text" - }, - "controlledBy": { - "type": "text" - }, - "disabled": { - "type": "boolean" - }, - "field": { - "type": "text" - }, - "formattedValue": { - "type": "text" - }, - "index": { - "type": "keyword" - }, - "key": { - "type": "keyword" - }, - "negate": { - "type": "boolean" - }, - "params": { - "type": "text" - }, - "type": { - "type": "keyword" - }, - "value": { - "type": "text" - } - } - }, - "missing": { - "type": "text" - }, - "query": { - "type": "text" - }, - "range": { - "type": "text" - }, - "script": { - "type": "text" - } - } - }, - "kqlMode": { - "type": "keyword" - }, - "kqlQuery": { - "properties": { - "filterQuery": { - "properties": { - "kuery": { - "properties": { - "expression": { - "type": "text" - }, - "kind": { - "type": "keyword" - } - } - }, - "serializedQuery": { - "type": "text" - } - } - } - } - }, - "savedQueryId": { - "type": "keyword" - }, - "sort": { - "properties": { - "columnId": { - "type": "keyword" - }, - "sortDirection": { - "type": "keyword" - } - } - }, - "templateTimelineId": { - "type": "text" - }, - "templateTimelineVersion": { - "type": "integer" - }, - "timelineType": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "siem-ui-timeline-note": { - "properties": { - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "eventId": { - "type": "keyword" - }, - "note": { - "type": "text" - }, - "timelineId": { - "type": "keyword" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "siem-ui-timeline-pinned-event": { - "properties": { - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "eventId": { - "type": "keyword" - }, - "timelineId": { - "type": "keyword" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "space": { - "properties": { - "_reserved": { - "type": "boolean" - }, - "color": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "disabledFeatures": { - "type": "keyword" - }, - "imageUrl": { - "index": false, - "type": "text" - }, - "initials": { - "type": "keyword" - }, - "name": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "spaceId": { - "type": "keyword" - }, - "telemetry": { - "properties": { - "allowChangingOptInStatus": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - }, - "lastReported": { - "type": "date" - }, - "lastVersionChecked": { - "type": "keyword" - }, - "reportFailureCount": { - "type": "integer" - }, - "reportFailureVersion": { - "type": "keyword" - }, - "sendUsageFrom": { - "type": "keyword" - }, - "userHasSeenNotice": { - "type": "boolean" - } - } - }, - "tsvb-validation-telemetry": { - "properties": { - "failedRequests": { - "type": "long" - } - } - }, - "type": { - "type": "keyword" - }, - "ui-metric": { - "properties": { - "count": { - "type": "integer" - } - } - }, - "updated_at": { - "type": "date" - }, - "upgrade-assistant-reindex-operation": { - "properties": { - "errorMessage": { - "type": "keyword" - }, - "indexName": { - "type": "keyword" - }, - "lastCompletedStep": { - "type": "integer" - }, - "locked": { - "type": "date" - }, - "newIndexName": { - "type": "keyword" - }, - "reindexOptions": { - "properties": { - "openAndClose": { - "type": "boolean" - }, - "queueSettings": { - "properties": { - "queuedAt": { - "type": "long" - }, - "startedAt": { - "type": "long" - } - } - } - } - }, - "reindexTaskId": { - "type": "keyword" - }, - "reindexTaskPercComplete": { - "type": "float" - }, - "runningReindexCount": { - "type": "integer" - }, - "status": { - "type": "integer" - } - } - }, - "upgrade-assistant-telemetry": { - "properties": { - "features": { - "properties": { - "deprecation_logging": { - "properties": { - "enabled": { - "null_value": true, - "type": "boolean" - } - } - } - } - }, - "ui_open": { - "properties": { - "cluster": { - "null_value": 0, - "type": "long" - }, - "indices": { - "null_value": 0, - "type": "long" - }, - "overview": { - "null_value": 0, - "type": "long" - } - } - }, - "ui_reindex": { - "properties": { - "close": { - "null_value": 0, - "type": "long" - }, - "open": { - "null_value": 0, - "type": "long" - }, - "start": { - "null_value": 0, - "type": "long" - }, - "stop": { - "null_value": 0, - "type": "long" - } - } - } - } - }, - "uptime-dynamic-settings": { - "properties": { - "certThresholds": { - "properties": { - "age": { - "type": "long" - }, - "expiration": { - "type": "long" - } - } - }, - "heartbeatIndices": { - "type": "keyword" - } - } - }, - "url": { - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "url": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "visualization": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "savedSearchRefName": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "type": "text" - } - } - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "number_of_replicas": "0", - "number_of_shards": "1" - } - } - } -} diff --git a/x-pack/test/functional/fixtures/kbn_archiver/kibana_scripted_fields_on_logstash.json b/x-pack/test/functional/fixtures/kbn_archiver/kibana_scripted_fields_on_logstash.json new file mode 100644 index 0000000000000..b9316cd311b19 --- /dev/null +++ b/x-pack/test/functional/fixtures/kbn_archiver/kibana_scripted_fields_on_logstash.json @@ -0,0 +1,35 @@ +{ + "attributes": { + "fieldFormatMap": "{\"sharedFail\":{\"id\":\"string\",\"params\":{\"parsedUrl\":{\"origin\":\"http://localhost:5620\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"}}}}", + "fields": "[{\"name\":\"@message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@message.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@message\"}}},{\"name\":\"@tags\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@tags.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@tags\"}}},{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"esTypes\":[\"_type\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"agent\"}}},{\"name\":\"bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"extension\"}}},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headings\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headings.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"headings\"}}},{\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"name\":\"id\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index\"}}},{\"name\":\"ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"links\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"links\"}}},{\"name\":\"machine.os\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"machine.os\"}}},{\"name\":\"machine.ram\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"esTypes\":[\"double\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:section\"}}},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:tag\"}}},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:description\"}}},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image\"}}},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:height\"}}},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:width\"}}},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:site_name\"}}},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:title\"}}},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:type\"}}},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:url\"}}},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:card\"}}},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:description\"}}},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:image\"}}},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:site\"}}},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:title\"}}},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.url\"}}},{\"name\":\"request\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"request\"}}},{\"name\":\"response\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"response\"}}},{\"name\":\"spaces\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"spaces.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"spaces\"}}},{\"name\":\"type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"url\"}}},{\"name\":\"utc_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xss\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"xss\"}}},{\"name\":\"sharedFail\",\"type\":\"string\",\"count\":1,\"scripted\":true,\"script\":\"if (doc['response.raw'].value == '200') { return 'good ' + doc['url.raw'].value } else { return 'bad ' + doc['machine.os.raw'].value } \",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]", + "timeFieldName": "@timestamp", + "title": "logsta*" + }, + "coreMigrationVersion": "8.4.0", + "id": "da2aebe0-913d-11ea-bf44-c796fb3350db", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "updated_at": "2020-05-08T15:09:15.796Z", + "version": "WzE1LDJd" +} + +{ + "attributes": { + "fieldFormatMap": "{\"goodScript\":{\"id\":\"string\",\"params\":{\"parsedUrl\":{\"origin\":\"http://localhost:5620\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"}}},\"goodScript2\":{\"id\":\"string\",\"params\":{\"parsedUrl\":{\"origin\":\"http://localhost:5620\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"}}}}", + "fields": "[{\"name\":\"@message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@message.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@message\"}}},{\"name\":\"@tags\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@tags.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@tags\"}}},{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"esTypes\":[\"_type\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"agent\"}}},{\"name\":\"bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"extension\"}}},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headings\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headings.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"headings\"}}},{\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"name\":\"id\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index\"}}},{\"name\":\"ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"links\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"links\"}}},{\"name\":\"machine.os\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"machine.os\"}}},{\"name\":\"machine.ram\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"esTypes\":[\"double\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:section\"}}},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:tag\"}}},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:description\"}}},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image\"}}},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:height\"}}},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:width\"}}},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:site_name\"}}},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:title\"}}},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:type\"}}},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:url\"}}},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:card\"}}},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:description\"}}},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:image\"}}},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:site\"}}},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:title\"}}},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.url\"}}},{\"name\":\"request\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"request\"}}},{\"name\":\"response\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"response\"}}},{\"name\":\"spaces\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"spaces.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"spaces\"}}},{\"name\":\"type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"url\"}}},{\"name\":\"utc_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xss\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"xss\"}}},{\"name\":\"goodScript\",\"type\":\"string\",\"count\":1,\"scripted\":true,\"script\":\"if (doc['response.raw'].value == '200') { if (doc['url.raw'].size() > 0) { return 'good ' + doc['url.raw'].value } else { return 'good' } } else { if (doc['machine.os.raw'].size() > 0) { return 'bad ' + doc['machine.os.raw'].value } else { return 'bad' } }\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"goodScript2\",\"type\":\"string\",\"count\":1,\"scripted\":true,\"script\":\"if (doc['url.raw'].size() > 0) { String tempString = \\\"\\\"; for ( int i = (doc['url.raw'].value.length() - 1); i >= 0 ; i--) { tempString = tempString + (doc['url.raw'].value).charAt(i); } return tempString; } else { return \\\"emptyUrl\\\"; }\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.4.0", + "id": "eddf62c0-85bb-11ea-a555-0b6139dddc19", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "updated_at": "2020-04-23T23:41:56.266Z", + "version": "WzksMl0=" +} \ No newline at end of file From 818b0ca4590502d8345d28cf01b2bd1690d21fe0 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Thu, 14 Jul 2022 11:33:44 +0200 Subject: [PATCH 40/96] [Security Solution] Refactor timerange to use global query string (#135998) * Refactor timerange to use global query string --- .../ml/ml_conditional_links.spec.ts | 26 +- .../cypress/integration/urls/state.spec.ts | 12 +- .../public/app/home/index.test.tsx | 230 +++++++++++++++++- .../public/app/home/index.tsx | 7 +- .../navigation/breadcrumbs/index.test.ts | 38 +-- .../components/navigation/helpers.test.tsx | 73 ++++++ .../common/components/navigation/helpers.ts | 15 +- .../components/navigation/index.test.tsx | 22 -- .../common/components/navigation/index.tsx | 1 - .../navigation/tab_navigation/index.test.tsx | 23 -- .../navigation/tab_navigation/types.ts | 2 - .../navigation/use_get_url_search.tsx | 11 +- .../__snapshots__/index.test.tsx.snap | 44 ++-- .../index.test.tsx | 4 +- .../index.tsx | 1 - .../use_primary_navigation.tsx | 2 - .../components/search_bar/index.test.tsx | 103 +++++++- .../common/components/search_bar/index.tsx | 3 +- .../common/components/url_state/helpers.ts | 35 --- .../components/url_state/index.test.tsx | 145 +---------- .../url_state/index_mocked.test.tsx | 178 +------------- .../url_state/initialize_redux_by_url.tsx | 98 +------- .../components/url_state/test_dependencies.ts | 94 ------- .../common/components/url_state/types.ts | 4 +- .../components/url_state/use_url_state.tsx | 14 -- .../use_init_search_bar_url_params.ts | 14 +- .../use_init_timerange_url_params.ts | 129 ++++++++++ .../use_sync_timerange_url_param.ts | 34 +++ .../use_update_timerange_on_page_change.ts | 75 ++++++ .../public/common/hooks/use_url_state.ts | 18 ++ .../field_renderers.test.tsx.snap | 4 +- 31 files changed, 742 insertions(+), 717 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/components/navigation/helpers.test.tsx create mode 100644 x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_timerange_url_params.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/search_bar/use_sync_timerange_url_param.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/search_bar/use_update_timerange_on_page_change.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_url_state.ts diff --git a/x-pack/plugins/security_solution/cypress/integration/ml/ml_conditional_links.spec.ts b/x-pack/plugins/security_solution/cypress/integration/ml/ml_conditional_links.spec.ts index c016a6bf45e1c..8e2bd7ba2bb4d 100644 --- a/x-pack/plugins/security_solution/cypress/integration/ml/ml_conditional_links.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/ml/ml_conditional_links.spec.ts @@ -97,7 +97,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlNetworkSingleIpNullKqlQuery); cy.url().should( 'include', - 'app/security/network/ip/127.0.0.1/source?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))' + 'app/security/network/ip/127.0.0.1/source?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))' ); }); @@ -105,7 +105,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlNetworkSingleIpKqlQuery); cy.url().should( 'include', - '/app/security/network/ip/127.0.0.1/source?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)' + '/app/security/network/ip/127.0.0.1/source?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))' ); }); @@ -113,7 +113,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlNetworkMultipleIpNullKqlQuery); cy.url().should( 'include', - 'app/security/network/flows?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27((source.ip:%20%22127.0.0.1%22%20or%20destination.ip:%20%22127.0.0.1%22)%20or%20(source.ip:%20%22127.0.0.2%22%20or%20destination.ip:%20%22127.0.0.2%22))%27)' + 'app/security/network/flows?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27((source.ip:%20%22127.0.0.1%22%20or%20destination.ip:%20%22127.0.0.1%22)%20or%20(source.ip:%20%22127.0.0.2%22%20or%20destination.ip:%20%22127.0.0.2%22))%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))' ); }); @@ -121,7 +121,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlNetworkMultipleIpKqlQuery); cy.url().should( 'include', - '/app/security/network/flows?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27((source.ip:%20%22127.0.0.1%22%20or%20destination.ip:%20%22127.0.0.1%22)%20or%20(source.ip:%20%22127.0.0.2%22%20or%20destination.ip:%20%22127.0.0.2%22))%20and%20((process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22))%27)' + '/app/security/network/flows?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27((source.ip:%20%22127.0.0.1%22%20or%20destination.ip:%20%22127.0.0.1%22)%20or%20(source.ip:%20%22127.0.0.2%22%20or%20destination.ip:%20%22127.0.0.2%22))%20and%20((process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22))%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))' ); }); @@ -129,7 +129,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlNetworkNullKqlQuery); cy.url().should( 'include', - '/app/security/network/flows?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))' + '/app/security/network/flows?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))' ); }); @@ -138,7 +138,7 @@ describe('ml conditional links', () => { cy.url().should( 'include', - `/app/security/network/flows?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)` + `/app/security/network/flows?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-08-28T11:00:00.000Z%27,kind:absolute,to:%272019-08-28T13:59:59.999Z%27)))` ); }); @@ -146,7 +146,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostSingleHostNullKqlQuery); cy.url().should( 'include', - '/app/security/hosts/siem-windows/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))' + '/app/security/hosts/siem-windows/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -154,7 +154,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostSingleHostKqlQueryVariable); cy.url().should( 'include', - '/app/security/hosts/siem-windows/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))' + '/app/security/hosts/siem-windows/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -162,7 +162,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostSingleHostKqlQuery); cy.url().should( 'include', - '/app/security/hosts/siem-windows/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)' + '/app/security/hosts/siem-windows/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -170,7 +170,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostMultiHostNullKqlQuery); cy.url().should( 'include', - '/app/security/hosts/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(host.name:%20%22siem-windows%22%20or%20host.name:%20%22siem-suricata%22)%27)' + '/app/security/hosts/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(host.name:%20%22siem-windows%22%20or%20host.name:%20%22siem-suricata%22)%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -178,7 +178,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostMultiHostKqlQuery); cy.url().should( 'include', - '/app/security/hosts/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(host.name:%20%22siem-windows%22%20or%20host.name:%20%22siem-suricata%22)%20and%20((process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22))%27)' + '/app/security/hosts/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(host.name:%20%22siem-windows%22%20or%20host.name:%20%22siem-suricata%22)%20and%20((process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22))%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -186,7 +186,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostVariableHostNullKqlQuery); cy.url().should( 'include', - '/app/security/hosts/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))' + '/app/security/hosts/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); @@ -194,7 +194,7 @@ describe('ml conditional links', () => { visitWithoutDateRange(mlHostVariableHostKqlQuery); cy.url().should( 'include', - '/app/security/hosts/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)' + '/app/security/hosts/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!(%27auditbeat-*%27)))&query=(language:kuery,query:%27(process.name:%20%22conhost.exe%22%20or%20process.name:%20%22sc.exe%22)%27)&timerange=(global:(linkTo:!(timeline),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)),timeline:(linkTo:!(global),timerange:(from:%272019-06-06T06:00:00.000Z%27,kind:absolute,to:%272019-06-07T05:59:59.999Z%27)))' ); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/urls/state.spec.ts b/x-pack/plugins/security_solution/cypress/integration/urls/state.spec.ts index 16cbacae403c3..f30816d455070 100644 --- a/x-pack/plugins/security_solution/cypress/integration/urls/state.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/urls/state.spec.ts @@ -216,7 +216,7 @@ describe('url state', () => { cy.get(NETWORK).should( 'have.attr', 'href', - `/app/security/network?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2019-08-01T20:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2019-08-01T20:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'source.ip:%20%2210.142.0.9%22%20')` + `/app/security/network?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'source.ip:%20%2210.142.0.9%22%20')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2019-08-01T20:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2019-08-01T20:33:29.186Z')))` ); }); @@ -229,12 +229,12 @@ describe('url state', () => { cy.get(HOSTS).should( 'have.attr', 'href', - `/app/security/hosts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'host.name:%20%22siem-kibana%22%20')` + `/app/security/hosts?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'host.name:%20%22siem-kibana%22%20')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))` ); cy.get(NETWORK).should( 'have.attr', 'href', - `/app/security/network?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'host.name:%20%22siem-kibana%22%20')` + `/app/security/network?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'host.name:%20%22siem-kibana%22%20')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))` ); cy.get(HOSTS_NAMES).first().should('have.text', 'siem-kibana'); @@ -245,7 +245,7 @@ describe('url state', () => { cy.get(ANOMALIES_TAB).should( 'have.attr', 'href', - "/app/security/hosts/siem-kibana/anomalies?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')" + "/app/security/hosts/siem-kibana/anomalies?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')" ); cy.get(BREADCRUMBS) @@ -253,14 +253,14 @@ describe('url state', () => { .should( 'have.attr', 'href', - `/app/security/hosts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')` + `/app/security/hosts?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))` ); cy.get(BREADCRUMBS) .eq(2) .should( 'have.attr', 'href', - `/app/security/hosts/siem-kibana?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))&sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')` + `/app/security/hosts/siem-kibana?sourcerer=(default:(id:security-solution-default,selectedPatterns:!('auditbeat-*')))&query=(language:kuery,query:'agent.type:%20%22auditbeat%22%20')&timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')),timeline:(linkTo:!(global),timerange:(from:'2019-08-01T20:03:29.186Z',kind:absolute,to:'2023-01-01T21:33:29.186Z')))` ); }); diff --git a/x-pack/plugins/security_solution/public/app/home/index.test.tsx b/x-pack/plugins/security_solution/public/app/home/index.test.tsx index 851f72a71c475..a81b6069381c2 100644 --- a/x-pack/plugins/security_solution/public/app/home/index.test.tsx +++ b/x-pack/plugins/security_solution/public/app/home/index.test.tsx @@ -20,13 +20,25 @@ import { TestProviders, } from '../../common/mock'; import { inputsActions } from '../../common/store/inputs'; -import { setSearchBarFilter } from '../../common/store/inputs/actions'; +import { + setSearchBarFilter, + setAbsoluteRangeDatePicker, + setRelativeRangeDatePicker, +} from '../../common/store/inputs/actions'; import { coreMock } from '@kbn/core/public/mocks'; import type { Filter } from '@kbn/es-query'; import { createStore } from '../../common/store'; +import type { TimeRange, UrlInputsModel } from '../../common/store/inputs/model'; +import { SecurityPageName } from '../types'; jest.mock('../../common/store/inputs/actions'); +const mockRouteSpy = jest.fn().mockReturnValue([{ pageName: 'hosts' }]); + +jest.mock('../../common/utils/route/use_route_spy', () => ({ + useRouteSpy: () => mockRouteSpy(), +})); + const DummyComponent = ({ children }: { children: React.ReactNode }) => <>{children}; const mockedUseInitializeUrlParam = jest.fn(); @@ -51,9 +63,14 @@ jest.mock('../../common/utils/global_query_string', () => { jest.mock('../../common/components/drag_and_drop/drag_drop_context_wrapper', () => ({ DragDropContextWrapper: DummyComponent, })); + jest.mock('./template_wrapper', () => ({ SecuritySolutionTemplateWrapper: DummyComponent, })); +const DATE_TIME_NOW = '2020-01-01T00:00:00.000Z'; +jest.mock('../../common/components/super_date_picker', () => ({ + formatDate: (date: string) => DATE_TIME_NOW, +})); jest.mock('react-router-dom', () => { const original = jest.requireActual('react-router-dom'); @@ -102,6 +119,9 @@ jest.mock('../../common/lib/kibana', () => { }, }, }), + KibanaServices: { + get: jest.fn(() => ({ uiSettings: { get: () => ({ from: 'now-24h', to: 'now' }) } })), + }, }; }); @@ -118,6 +138,7 @@ jest.mock('react-redux', () => { describe('HomePage', () => { beforeEach(() => { jest.clearAllMocks(); + mockedUseInitializeUrlParam.mockImplementation(jest.fn()); mockedFilterManager.setFilters([]); }); @@ -291,4 +312,211 @@ describe('HomePage', () => { ]); }); }); + + describe('Timerange', () => { + it('sets global absolute timerange initial value in the store', () => { + const timerange: TimeRange = { + from: '2020-07-07T08:20:18.966Z', + fromStr: undefined, + kind: 'absolute', + to: '2020-07-08T08:20:18.966Z', + toStr: undefined, + }; + + const state: UrlInputsModel = { + global: { + [CONSTANTS.timerange]: timerange, + linkTo: ['timeline'], + }, + timeline: { + [CONSTANTS.timerange]: timerange, + linkTo: ['global'], + }, + }; + + mockUseInitializeUrlParam(CONSTANTS.timerange, state); + + render( + + + + + + ); + + expect(setAbsoluteRangeDatePicker).toHaveBeenCalledWith({ + from: timerange.from, + to: timerange.to, + kind: timerange.kind, + id: 'global', + }); + + expect(setAbsoluteRangeDatePicker).toHaveBeenCalledWith({ + from: timerange.from, + to: timerange.to, + kind: timerange.kind, + id: 'timeline', + }); + }); + + it('sets updated relative timerange initial value in the store', () => { + const timerange: TimeRange = { + from: '2019-01-01T00:00:00.000Z', + fromStr: 'now-1d/d', + kind: 'relative', + to: '2019-01-01T00:00:00.000Z', + toStr: 'now-1d/d', + }; + + const state: UrlInputsModel = { + global: { + [CONSTANTS.timerange]: timerange, + linkTo: ['timeline'], + }, + timeline: { + [CONSTANTS.timerange]: timerange, + linkTo: ['global'], + }, + }; + + mockUseInitializeUrlParam(CONSTANTS.timerange, state); + + render( + + + + + + ); + + expect(setRelativeRangeDatePicker).toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'global', + }); + + expect(setRelativeRangeDatePicker).toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'timeline', + }); + }); + + it('update timerange when navigating to alerts page', () => { + const timerange: TimeRange = { + from: '2019-01-01T00:00:00.000Z', + fromStr: 'now-1d/d', + kind: 'relative', + to: '2019-01-01T00:00:00.000Z', + toStr: 'now-1d/d', + }; + + const mockstate = { + ...mockGlobalState, + inputs: { + ...mockGlobalState.inputs, + global: { + ...mockGlobalState.inputs.global, + timerange, + }, + timeline: { + ...mockGlobalState.inputs.timeline, + timerange, + }, + }, + }; + + const { storage } = createSecuritySolutionStorageMock(); + const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + + const TestComponent = () => ( + + + + + + ); + + const { rerender } = render(); + jest.clearAllMocks(); + + // simulate page navigation + mockRouteSpy.mockReturnValueOnce([{ pageName: SecurityPageName.alerts }]); + rerender(); + + expect(setRelativeRangeDatePicker).toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'global', + }); + + expect(setRelativeRangeDatePicker).toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'timeline', + }); + }); + + it('does not update timerange when navigating to hosts page', () => { + const timerange: TimeRange = { + from: '2019-01-01T00:00:00.000Z', + fromStr: 'now-1d/d', + kind: 'relative', + to: '2019-01-01T00:00:00.000Z', + toStr: 'now-1d/d', + }; + + const mockstate = { + ...mockGlobalState, + inputs: { + ...mockGlobalState.inputs, + global: { + ...mockGlobalState.inputs.global, + timerange, + }, + timeline: { + ...mockGlobalState.inputs.timeline, + timerange, + }, + }, + }; + + const { storage } = createSecuritySolutionStorageMock(); + const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + + const TestComponent = () => ( + + + + + + ); + + // mockedUseInitializeUrlParam.mockImplementation(jest.fn()); + const { rerender } = render(); + jest.clearAllMocks(); + + // simulate page navigation + mockRouteSpy.mockReturnValueOnce([{ pageName: SecurityPageName.hosts }]); + rerender(); + + expect(setRelativeRangeDatePicker).not.toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'global', + }); + + expect(setRelativeRangeDatePicker).not.toHaveBeenCalledWith({ + ...timerange, + to: DATE_TIME_NOW, + from: DATE_TIME_NOW, + id: 'timeline', + }); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/app/home/index.tsx b/x-pack/plugins/security_solution/public/app/home/index.tsx index e0827887a7ebc..da3cb0c92ab9a 100644 --- a/x-pack/plugins/security_solution/public/app/home/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/index.tsx @@ -11,6 +11,7 @@ import { useLocation } from 'react-router-dom'; import type { AppLeaveHandler, AppMountParameters } from '@kbn/core/public'; import { DragDropContextWrapper } from '../../common/components/drag_and_drop/drag_drop_context_wrapper'; import { SecuritySolutionAppWrapper } from '../../common/components/page'; + import { HelpMenu } from '../../common/components/help_menu'; import { UseUrlState } from '../../common/components/url_state'; import { navTabs } from './home_navigations'; @@ -23,8 +24,7 @@ import { useUpgradeSecurityPackages } from '../../common/hooks/use_upgrade_secur import { GlobalHeader } from './global_header'; import { SecuritySolutionTemplateWrapper } from './template_wrapper'; import { ConsoleManager } from '../../management/components/console/components/console_manager'; -import { useSyncGlobalQueryString } from '../../common/utils/global_query_string'; -import { useInitSearchBarUrlParams } from '../../common/hooks/search_bar/use_init_search_bar_url_params'; +import { useUrlState } from '../../common/hooks/use_url_state'; interface HomePageProps { children: React.ReactNode; @@ -38,9 +38,8 @@ const HomePageComponent: React.FC = ({ setHeaderActionMenu, }) => { const { pathname } = useLocation(); - useSyncGlobalQueryString(); useInitSourcerer(getScopeFromPath(pathname)); - useInitSearchBarUrlParams(); + useUrlState(); const { browserFields, indexPattern } = useSourcererDataView(getScopeFromPath(pathname)); // side effect: this will attempt to upgrade the endpoint package if it is not up to date diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.test.ts b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.test.ts index c67bcc4ab1051..674a609e7f71a 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.test.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.test.ts @@ -79,28 +79,6 @@ const getMockObject = ( isOpen: false, graphEventId: '', }, - timerange: { - global: { - linkTo: ['timeline'], - timerange: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - }, - timeline: { - linkTo: ['global'], - timerange: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - }, - }, }, }; }); @@ -470,17 +448,17 @@ describe('Navigation Breadcrumbs', () => { expect(setBreadcrumbsMock).toBeCalledWith([ expect.objectContaining({ text: 'Security', - href: "securitySolutionUI/get_started?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))", + href: 'securitySolutionUI/get_started', onClick: expect.any(Function), }), expect.objectContaining({ text: 'Hosts', - href: "securitySolutionUI/hosts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))", + href: 'securitySolutionUI/hosts', onClick: expect.any(Function), }), expect.objectContaining({ text: 'siem-kibana', - href: "securitySolutionUI/hosts/siem-kibana?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))", + href: 'securitySolutionUI/hosts/siem-kibana', onClick: expect.any(Function), }), { @@ -790,28 +768,26 @@ describe('Navigation Breadcrumbs', () => { chromeMock, navigateToUrlMock ); - const searchString = - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))"; expect(setBreadcrumbsMock).toBeCalledWith([ expect.objectContaining({ text: 'Security', - href: `securitySolutionUI/get_started${searchString}`, + href: 'securitySolutionUI/get_started', onClick: expect.any(Function), }), expect.objectContaining({ text: 'Explore', - href: `securitySolutionUI/explore`, + href: 'securitySolutionUI/explore', onClick: expect.any(Function), }), expect.objectContaining({ text: 'Hosts', - href: `securitySolutionUI/hosts${searchString}`, + href: 'securitySolutionUI/hosts', onClick: expect.any(Function), }), expect.objectContaining({ text: 'siem-kibana', - href: `securitySolutionUI/hosts/siem-kibana${searchString}`, + href: 'securitySolutionUI/hosts/siem-kibana', onClick: expect.any(Function), }), { diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/helpers.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/helpers.test.tsx new file mode 100644 index 0000000000000..bb9fa228fb018 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/navigation/helpers.test.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CONSTANTS } from '../url_state/constants'; +import type { SearchNavTab } from './types'; +import { TimelineTabs } from '../../../../common/types/timeline'; +import { getSearch } from './helpers'; + +describe('helpers', () => { + it('returns the search string', () => { + const serachNavTab: SearchNavTab = { urlKey: 'host', isDetailPage: false }; + const globalQueryString = 'test=123'; + const urlState = { + [CONSTANTS.timeline]: { + activeTab: TimelineTabs.query, + id: '123', + isOpen: false, + }, + }; + + expect(getSearch(serachNavTab, urlState, globalQueryString)).toEqual( + "?timeline=(activeTab:query,id:'123',isOpen:!f)&test=123" + ); + }); + + it('returns an empty string when global globalQueryString and urlState are empty', () => { + const serachNavTab: SearchNavTab = { urlKey: 'host', isDetailPage: false }; + const globalQueryString = ''; + const urlState = { + [CONSTANTS.timeline]: { + activeTab: TimelineTabs.query, + id: '', + isOpen: false, + }, + }; + + expect(getSearch(serachNavTab, urlState, globalQueryString)).toEqual(''); + }); + + it('returns the search string when global globalQueryString is empty', () => { + const serachNavTab: SearchNavTab = { urlKey: 'host', isDetailPage: false }; + const globalQueryString = ''; + const urlState = { + [CONSTANTS.timeline]: { + activeTab: TimelineTabs.query, + id: '123', + isOpen: false, + }, + }; + + expect(getSearch(serachNavTab, urlState, globalQueryString)).toEqual( + "?timeline=(activeTab:query,id:'123',isOpen:!f)" + ); + }); + + it('returns the search string when global urlState is empty', () => { + const serachNavTab: SearchNavTab = { urlKey: 'host', isDetailPage: false }; + const globalQueryString = 'test=123'; + const urlState = { + [CONSTANTS.timeline]: { + activeTab: TimelineTabs.query, + id: '', + isOpen: false, + }, + }; + + expect(getSearch(serachNavTab, urlState, globalQueryString)).toEqual('?test=123'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/helpers.ts b/x-pack/plugins/security_solution/public/common/components/navigation/helpers.ts index ba42d8478e646..b0d9573008655 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/helpers.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/helpers.ts @@ -8,6 +8,7 @@ import type { Location } from 'history'; import type { Filter, Query } from '@kbn/es-query'; +import { isEmpty } from 'lodash/fp'; import type { UrlInputsModel } from '../../store/inputs/model'; import type { TimelineUrl } from '../../../timelines/store/timeline/model'; import { CONSTANTS } from '../url_state/constants'; @@ -31,11 +32,11 @@ export const getSearch = ( ): string => { if (tab && tab.urlKey != null && !isAdministration(tab.urlKey)) { // TODO: Temporary code while we are migrating all query strings to global_query_string_manager - if (globalQueryString.length > 0) { - return `${getUrlStateSearch(urlState)}&${globalQueryString}`; - } else { - return getUrlStateSearch(urlState); - } + const urlStateSearch = getQueryStringFromLocation(getUrlStateSearch(urlState)); + const isNotEmpty = (e: string) => !isEmpty(e); + const search = [urlStateSearch, globalQueryString].filter(isNotEmpty).join('&'); + + return search.length > 0 ? `?${search}` : ''; } return ''; @@ -46,9 +47,7 @@ export const getUrlStateSearch = (urlState: UrlState): string => (myLocation: Location, urlKey: KeyUrlState) => { let urlStateToReplace: Filter[] | Query | TimelineUrl | UrlInputsModel | string = ''; - if (urlKey === CONSTANTS.timerange) { - urlStateToReplace = urlState[CONSTANTS.timerange]; - } else if (urlKey === CONSTANTS.timeline && urlState[CONSTANTS.timeline] != null) { + if (urlKey === CONSTANTS.timeline && urlState[CONSTANTS.timeline] != null) { const timeline = urlState[CONSTANTS.timeline]; if (timeline.id === '') { urlStateToReplace = ''; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/index.test.tsx index b2aa13a2293ff..521f87ffd034f 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/index.test.tsx @@ -69,28 +69,6 @@ describe('SIEM Navigation', () => { tabName: HostsTableType.authentications, navTabs, urlState: { - [CONSTANTS.timerange]: { - global: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['timeline'], - }, - timeline: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['global'], - }, - }, [CONSTANTS.timeline]: { activeTab: TimelineTabs.query, id: '', diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/index.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/index.tsx index 3526817f9d52f..41f1dd11caf49 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/index.tsx @@ -84,7 +84,6 @@ export const TabNavigationComponent: React.FC< pathName={pathName} tabName={tabName} timeline={urlState.timeline} - timerange={urlState.timerange} /> ); } diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/index.test.tsx index 315b324bf7aca..adfb86cf311d2 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/index.test.tsx @@ -65,29 +65,6 @@ describe('Table Navigation', () => { hasMlUserPermissions: mockHasMlUserPermissions, isRiskyHostsEnabled: mockRiskyHostEnabled, }), - - [CONSTANTS.timerange]: { - global: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['timeline'], - }, - timeline: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['global'], - }, - }, [CONSTANTS.timeline]: { activeTab: TimelineTabs.query, id: '', diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/types.ts b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/types.ts index 5b36c4fb1deef..74804bdd9ee85 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/types.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/types.ts @@ -5,7 +5,6 @@ * 2.0. */ -import type { UrlInputsModel } from '../../../store/inputs/model'; import type { CONSTANTS } from '../../url_state/constants'; import type { TimelineUrl } from '../../../../timelines/store/timeline/model'; import type { SecuritySolutionTabNavigationProps } from '../types'; @@ -15,7 +14,6 @@ export interface TabNavigationProps extends SecuritySolutionTabNavigationProps { pathName: string; pageName: string; tabName: SiemRouteType | undefined; - [CONSTANTS.timerange]: UrlInputsModel; [CONSTANTS.timeline]: TimelineUrl; } diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_get_url_search.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_get_url_search.tsx index 9e4b1612eebd0..00c8541784e51 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_get_url_search.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_get_url_search.tsx @@ -5,11 +5,12 @@ * 2.0. */ +import { isEmpty } from 'lodash/fp'; import { useCallback, useMemo } from 'react'; import { useDeepEqualSelector } from '../../hooks/use_selector'; import { useGlobalQueryString } from '../../utils/global_query_string'; -import { makeMapStateToProps } from '../url_state/helpers'; +import { getQueryStringFromLocation, makeMapStateToProps } from '../url_state/helpers'; import { getSearch, getUrlStateSearch } from './helpers'; import type { SearchNavTab } from './types'; @@ -31,11 +32,11 @@ export const useGetUrlStateQueryString = () => { const globalQueryString = useGlobalQueryString(); const getUrlStateQueryString = useCallback(() => { // TODO: Temporary code while we are migrating all query strings to global_query_string_manager - if (globalQueryString.length > 0) { - return `${getUrlStateSearch(urlState)}&${globalQueryString}`; - } + const urlStateSearch = getQueryStringFromLocation(getUrlStateSearch(urlState)); + const isNotEmpty = (e: string) => !isEmpty(e); + const search = [urlStateSearch, globalQueryString].filter(isNotEmpty).join('&'); - return getUrlStateSearch(urlState); + return search.length > 0 ? `?${search}` : ''; }, [urlState, globalQueryString]); return getUrlStateQueryString; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap index 8e752eccd06b9..22de526739c17 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap @@ -8,10 +8,10 @@ Object { "id": "main", "items": Array [ Object { - "data-href": "securitySolutionUI/get_started?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/get_started", "data-test-subj": "navigation-get_started", "disabled": false, - "href": "securitySolutionUI/get_started?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/get_started", "id": "get_started", "isSelected": false, "name": "Get started", @@ -24,20 +24,20 @@ Object { "id": "dashboards", "items": Array [ Object { - "data-href": "securitySolutionUI/overview?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/overview", "data-test-subj": "navigation-overview", "disabled": false, - "href": "securitySolutionUI/overview?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/overview", "id": "overview", "isSelected": false, "name": "Overview", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/detection_response?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/detection_response", "data-test-subj": "navigation-detection_response", "disabled": false, - "href": "securitySolutionUI/detection_response?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/detection_response", "id": "detection_response", "isSelected": false, "name": "Detection & Response", @@ -50,30 +50,30 @@ Object { "id": "detect", "items": Array [ Object { - "data-href": "securitySolutionUI/alerts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/alerts", "data-test-subj": "navigation-alerts", "disabled": false, - "href": "securitySolutionUI/alerts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/alerts", "id": "alerts", "isSelected": false, "name": "Alerts", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/rules?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/rules", "data-test-subj": "navigation-rules", "disabled": false, - "href": "securitySolutionUI/rules?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/rules", "id": "rules", "isSelected": false, "name": "Rules", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/exceptions?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/exceptions", "data-test-subj": "navigation-exceptions", "disabled": false, - "href": "securitySolutionUI/exceptions?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/exceptions", "id": "exceptions", "isSelected": false, "name": "Exception lists", @@ -86,30 +86,30 @@ Object { "id": "explore", "items": Array [ Object { - "data-href": "securitySolutionUI/hosts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/hosts", "data-test-subj": "navigation-hosts", "disabled": false, - "href": "securitySolutionUI/hosts?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/hosts", "id": "hosts", "isSelected": true, "name": "Hosts", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/network?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/network", "data-test-subj": "navigation-network", "disabled": false, - "href": "securitySolutionUI/network?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/network", "id": "network", "isSelected": false, "name": "Network", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/users?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/users", "data-test-subj": "navigation-users", "disabled": false, - "href": "securitySolutionUI/users?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/users", "id": "users", "isSelected": false, "name": "Users", @@ -122,20 +122,20 @@ Object { "id": "investigate", "items": Array [ Object { - "data-href": "securitySolutionUI/timelines?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/timelines", "data-test-subj": "navigation-timelines", "disabled": false, - "href": "securitySolutionUI/timelines?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/timelines", "id": "timelines", "isSelected": false, "name": "Timelines", "onClick": [Function], }, Object { - "data-href": "securitySolutionUI/cases?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/cases", "data-test-subj": "navigation-cases", "disabled": false, - "href": "securitySolutionUI/cases?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/cases", "id": "cases", "isSelected": false, "name": "Cases", diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.test.tsx index bc81b788a5880..0c545ec83a6ef 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.test.tsx @@ -169,10 +169,10 @@ describe('useSecuritySolutionNavigation', () => { ); expect(caseNavItem).toMatchInlineSnapshot(` Object { - "data-href": "securitySolutionUI/cases?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "data-href": "securitySolutionUI/cases", "data-test-subj": "navigation-cases", "disabled": false, - "href": "securitySolutionUI/cases?timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))", + "href": "securitySolutionUI/cases", "id": "cases", "isSelected": false, "name": "Cases", diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.tsx index 4dd00b1efc218..0243c0c926a94 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/index.tsx @@ -76,6 +76,5 @@ export const useSecuritySolutionNavigation = () => { pageName, tabName, timeline: urlState.timeline, - timerange: urlState.timerange, }); }; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_primary_navigation.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_primary_navigation.tsx index 538163acb6009..b71cd8caee292 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_primary_navigation.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_primary_navigation.tsx @@ -23,7 +23,6 @@ export const usePrimaryNavigation = ({ pageName, tabName, timeline, - timerange, }: PrimaryNavigationProps): KibanaPageTemplateProps['solutionNav'] => { const isGroupedNavigationEnabled = useIsGroupedNavigationEnabled(); const mapLocationToTab = useCallback( @@ -47,7 +46,6 @@ export const usePrimaryNavigation = ({ navTabs, selectedTabId, timeline, - timerange, }); return { diff --git a/x-pack/plugins/security_solution/public/common/components/search_bar/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/search_bar/index.test.tsx index 81a12d77b39b0..f33b5b57912dd 100644 --- a/x-pack/plugins/security_solution/public/common/components/search_bar/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/search_bar/index.test.tsx @@ -186,7 +186,7 @@ describe('SearchBarComponent', () => { expect(mockUpdateUrlParam).toHaveBeenCalledWith(savedQuery.id); }); - it('calls useUpdateUrlParam when query state changes', async () => { + it('calls useUpdateUrlParam when query query changes', async () => { const { storage } = createSecuritySolutionStorageMock(); const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); @@ -278,4 +278,105 @@ describe('SearchBarComponent', () => { expect(mockUpdateUrlParam).toHaveBeenCalledWith(savedQuery.id); }); }); + + describe('Timerange', () => { + it('calls useUpdateUrlParam when global timerange changes', async () => { + const { storage } = createSecuritySolutionStorageMock(); + const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + + render( + + + + ); + + jest.clearAllMocks(); + + const newTimerange = { + from: '2020-07-07T08:20:18.966Z', + fromStr: 'now-24h', + kind: 'relative', + to: '2020-07-08T08:20:18.966Z', + toStr: 'now', + }; + + store.dispatch( + inputsActions.setRelativeRangeDatePicker({ id: 'global' as InputsModelId, ...newTimerange }) + ); + + await waitFor(() => { + expect(mockUpdateUrlParam).toHaveBeenCalledWith( + expect.objectContaining({ + global: { + linkTo: ['timeline'], + timerange: newTimerange, + }, + }) + ); + }); + }); + + it('calls useUpdateUrlParam when timeline timerange changes', async () => { + const { storage } = createSecuritySolutionStorageMock(); + const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + + render( + + + + ); + + jest.clearAllMocks(); + + const newTimerange = { + from: '2020-07-07T08:20:18.966Z', + fromStr: 'now-24h', + kind: 'relative', + to: '2020-07-08T08:20:18.966Z', + toStr: 'now', + }; + + store.dispatch( + inputsActions.setRelativeRangeDatePicker({ + id: 'timeline' as InputsModelId, + ...newTimerange, + }) + ); + + await waitFor(() => { + expect(mockUpdateUrlParam).toHaveBeenCalledWith( + expect.objectContaining({ + timeline: { + linkTo: ['global'], + timerange: newTimerange, + }, + }) + ); + }); + }); + + it('initializes timerange URL param with redux date on mount', async () => { + const { storage } = createSecuritySolutionStorageMock(); + const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + jest.clearAllMocks(); + render( + + + + ); + + expect(mockUpdateUrlParam.mock.calls[3]).toEqual([ + { + global: { + timerange: mockGlobalState.inputs.global.timerange, + linkTo: mockGlobalState.inputs.global.linkTo, + }, + timeline: { + timerange: mockGlobalState.inputs.timeline.timerange, + linkTo: mockGlobalState.inputs.timeline.linkTo, + }, + }, + ]); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx index c2e367aed59ab..e833f1f1a5dbd 100644 --- a/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/search_bar/index.tsx @@ -19,7 +19,6 @@ import type { FilterManager, SavedQuery } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { OnTimeChangeProps } from '@elastic/eui'; - import { inputsActions } from '../../store/inputs'; import type { InputsRange } from '../../store/inputs/model'; import type { InputsModelId } from '../../store/inputs/constants'; @@ -41,6 +40,7 @@ import { usersActions } from '../../../users/store'; import { hostsActions } from '../../../hosts/store'; import { networkActions } from '../../../network/store'; import { useSyncSearchBarUrlParams } from '../../hooks/search_bar/use_sync_search_bar_url_param'; +import { useSyncTimerangeUrlParam } from '../../hooks/search_bar/use_sync_timerange_url_param'; interface SiemSearchBarProps { id: InputsModelId; @@ -92,6 +92,7 @@ export const SearchBarComponent = memo( }, [dispatch]); useSyncSearchBarUrlParams(); + useSyncTimerangeUrlParam(); useEffect(() => { if (fromStr != null && toStr != null) { diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/helpers.ts b/x-pack/plugins/security_solution/public/common/components/url_state/helpers.ts index e8719ae8d0968..f045053cd4f29 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/helpers.ts +++ b/x-pack/plugins/security_solution/public/common/components/url_state/helpers.ts @@ -14,11 +14,8 @@ import { url } from '@kbn/kibana-utils-plugin/public'; import { TimelineId, TimelineTabs } from '../../../../common/types/timeline'; import { SecurityPageName } from '../../../app/types'; import type { State } from '../../store'; -import { inputsSelectors } from '../../store'; -import type { UrlInputsModel } from '../../store/inputs/model'; import type { TimelineUrl } from '../../../timelines/store/timeline/model'; import { timelineSelectors } from '../../../timelines/store/timeline'; -import { formatDate } from '../super_date_picker'; import type { NavTab } from '../navigation/types'; import type { UrlStateType } from './constants'; import { CONSTANTS } from './constants'; @@ -123,13 +120,8 @@ export const getTitle = (pageName: string, navTabs: Record): str }; export const makeMapStateToProps = () => { - const getInputsSelector = inputsSelectors.inputsSelector(); const getTimeline = timelineSelectors.getTimelineByIdSelector(); const mapStateToProps = (state: State) => { - const inputState = getInputsSelector(state); - const { linkTo: globalLinkTo, timerange: globalTimerange } = inputState.global; - const { linkTo: timelineLinkTo, timerange: timelineTimerange } = inputState.timeline; - const flyoutTimeline = getTimeline(state, TimelineId.active); const timeline = flyoutTimeline != null @@ -143,16 +135,6 @@ export const makeMapStateToProps = () => { return { urlState: { - [CONSTANTS.timerange]: { - global: { - [CONSTANTS.timerange]: globalTimerange, - linkTo: globalLinkTo, - }, - timeline: { - [CONSTANTS.timerange]: timelineTimerange, - linkTo: timelineLinkTo, - }, - }, [CONSTANTS.timeline]: timeline, }, }; @@ -161,23 +143,6 @@ export const makeMapStateToProps = () => { return mapStateToProps; }; -export const updateTimerangeUrl = ( - timeRange: UrlInputsModel, - isFirstPageLoad: boolean -): UrlInputsModel => { - if (timeRange.global.timerange.kind === 'relative') { - timeRange.global.timerange.from = formatDate(timeRange.global.timerange.fromStr); - timeRange.global.timerange.to = formatDate(timeRange.global.timerange.toStr, { roundUp: true }); - } - if (timeRange.timeline.timerange.kind === 'relative' && isFirstPageLoad) { - timeRange.timeline.timerange.from = formatDate(timeRange.timeline.timerange.fromStr); - timeRange.timeline.timerange.to = formatDate(timeRange.timeline.timerange.toStr, { - roundUp: true, - }); - } - return timeRange; -}; - export const isQueryStateEmpty = ( queryState: ValueUrlState | undefined | null, urlKey: KeyUrlState diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/url_state/index.test.tsx index 912ae85c048d9..88b75e88dd27a 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/url_state/index.test.tsx @@ -12,17 +12,9 @@ import { HookWrapper } from '../../mock'; import { SecurityPageName } from '../../../app/types'; import type { RouteSpyState } from '../../utils/route/types'; import { CONSTANTS } from './constants'; -import { - getMockPropsObj, - mockHistory, - mockSetAbsoluteRangeDatePicker, - mockSetRelativeRangeDatePicker, - testCases, - getMockProps, -} from './test_dependencies'; +import { getMockPropsObj, mockHistory, getMockProps } from './test_dependencies'; import type { UrlStateContainerPropTypes } from './types'; import { useUrlStateHooks } from './use_url_state'; -import { waitFor } from '@testing-library/react'; import { useLocation } from 'react-router-dom'; import { updateAppLinks } from '../../links'; import { links } from '../../links/app_links'; @@ -109,79 +101,6 @@ describe('UrlStateContainer', () => { }); describe('handleInitialize', () => { - describe('URL state updates redux', () => { - describe('relative timerange actions are called with correct data on component mount', () => { - test.each(testCases)( - '%o', - (page, namespaceLower, namespaceUpper, examplePath, type, pageName, detailName) => { - mockProps = getMockPropsObj({ - page, - examplePath, - namespaceLower, - pageName, - detailName, - }).relativeTimeSearch.undefinedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - mount( useUrlStateHooks(args)} />); - - expect(mockSetRelativeRangeDatePicker.mock.calls[1][0]).toEqual({ - from: '2020-01-01T00:00:00.000Z', - fromStr: 'now-1d/d', - kind: 'relative', - to: '2020-01-01T00:00:00.000Z', - toStr: 'now-1d/d', - id: 'global', - }); - - expect(mockSetRelativeRangeDatePicker.mock.calls[0][0]).toEqual({ - from: '2020-01-01T00:00:00.000Z', - fromStr: 'now-15m', - kind: 'relative', - to: '2020-01-01T00:00:00.000Z', - toStr: 'now', - id: 'timeline', - }); - } - ); - }); - - describe('absolute timerange actions are called with correct data on component mount', () => { - test.each(testCases)( - '%o', - (page, namespaceLower, namespaceUpper, examplePath, type, pageName, detailName) => { - mockProps = getMockPropsObj({ page, examplePath, namespaceLower, pageName, detailName }) - .absoluteTimeSearch.undefinedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - mount( useUrlStateHooks(args)} />); - - expect(mockSetAbsoluteRangeDatePicker.mock.calls[1][0]).toEqual({ - from: '2019-05-01T18:40:12.685Z', - kind: 'absolute', - to: '2019-05-02T18:40:16.082Z', - id: 'global', - }); - - expect(mockSetAbsoluteRangeDatePicker.mock.calls[0][0]).toEqual({ - from: '2019-05-01T18:40:12.685Z', - kind: 'absolute', - to: '2019-05-02T18:40:16.082Z', - id: 'timeline', - }); - } - ); - }); - }); - it("it doesn't update URL state when pathName and browserPAth are out of sync", () => { mockProps = getMockPropsObj({ page: CONSTANTS.networkPage, @@ -267,66 +186,4 @@ describe('UrlStateContainer', () => { expect(mockHistory.replace.mock.calls[0][0].search).not.toContain('timeline='); }); }); - - describe('After Initialization, keep Relative Date up to date for global only on alerts page', () => { - test.each(testCases)( - '%o', - async (page, namespaceLower, namespaceUpper, examplePath, type, pageName, detailName) => { - mockProps = getMockPropsObj({ - page, - examplePath, - namespaceLower, - pageName, - detailName, - }).relativeTimeSearch.undefinedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - const wrapper = mount( - useUrlStateHooks(args)} /> - ); - - wrapper.setProps({ - hookProps: getMockPropsObj({ - page: CONSTANTS.hostsPage, - examplePath: '/hosts', - namespaceLower: 'hosts', - pageName: SecurityPageName.hosts, - detailName: undefined, - }).relativeTimeSearch.undefinedQuery, - }); - wrapper.update(); - - if (CONSTANTS.alertsPage === page) { - await waitFor(() => { - expect(mockSetRelativeRangeDatePicker.mock.calls[3][0]).toEqual({ - from: '2020-01-01T00:00:00.000Z', - fromStr: 'now-1d/d', - kind: 'relative', - to: '2020-01-01T00:00:00.000Z', - toStr: 'now-1d/d', - id: 'global', - }); - - expect(mockSetRelativeRangeDatePicker.mock.calls[2][0]).toEqual({ - from: 1558732849370, - fromStr: 'now-15m', - kind: 'relative', - to: 1558733749370, - toStr: 'now', - id: 'timeline', - }); - }); - } else { - await waitFor(() => { - // There is no change in url state, so that's expected we only have two actions - expect(mockSetRelativeRangeDatePicker.mock.calls.length).toEqual(2); - }); - } - } - ); - }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/index_mocked.test.tsx b/x-pack/plugins/security_solution/public/common/components/url_state/index_mocked.test.tsx index 8d9fa294c41b1..6729b19f235d7 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/index_mocked.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/url_state/index_mocked.test.tsx @@ -12,7 +12,7 @@ import { HookWrapper } from '../../mock/hook_wrapper'; import { SecurityPageName } from '../../../app/types'; import { CONSTANTS } from './constants'; -import { getFilterQuery, getMockPropsObj, mockHistory, testCases } from './test_dependencies'; +import { getFilterQuery, getMockPropsObj, mockHistory } from './test_dependencies'; import type { UrlStateContainerPropTypes } from './types'; import { useUrlStateHooks } from './use_url_state'; import { useLocation } from 'react-router-dom'; @@ -77,62 +77,6 @@ describe('UrlStateContainer - lodash.throttle mocked to test update url', () => }); describe('componentDidUpdate', () => { - test('timerange redux state updates the url', () => { - mockProps = getMockPropsObj({ - page: CONSTANTS.networkPage, - examplePath: '/network', - namespaceLower: 'network', - pageName: SecurityPageName.network, - detailName: undefined, - }).noSearch.definedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - const wrapper = mount( - useUrlStateHooks(args)} /> - ); - - const newUrlState = { - ...mockProps.urlState, - [CONSTANTS.timerange]: { - global: { - [CONSTANTS.timerange]: { - from: '2020-07-07T08:20:18.966Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2020-07-08T08:20:18.966Z', - toStr: 'now', - }, - linkTo: ['timeline'], - }, - timeline: { - [CONSTANTS.timerange]: { - from: '2020-07-07T08:20:18.966Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2020-07-08T08:20:18.966Z', - toStr: 'now', - }, - linkTo: ['global'], - }, - }, - }; - - wrapper.setProps({ hookProps: { ...mockProps, urlState: newUrlState } }); - wrapper.update(); - expect(mockHistory.replace.mock.calls[1][0]).toStrictEqual({ - hash: '', - pathname: '/network', - search: expect.stringContaining( - "timerange=(global:(linkTo:!(timeline),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2020-07-07T08:20:18.966Z',fromStr:now-24h,kind:relative,to:'2020-07-08T08:20:18.966Z',toStr:now)))" - ), - state: '', - }); - }); - test('timelineID redux state updates the url', () => { mockProps = getMockPropsObj({ page: CONSTANTS.networkPage, @@ -163,8 +107,7 @@ describe('UrlStateContainer - lodash.throttle mocked to test update url', () => expect(mockHistory.replace.mock.calls[1][0]).toStrictEqual({ hash: '', pathname: '/network', - search: - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))&timeline=(id:hello_timeline_id,isOpen:!t)", + search: '?timeline=(id:hello_timeline_id,isOpen:!t)', state: '', }); }); @@ -327,121 +270,4 @@ describe('UrlStateContainer - lodash.throttle mocked to test update url', () => }); }); }); - - describe('handleInitialize', () => { - describe('Redux updates URL state', () => { - describe('Timerange url state is set when not defined on component mount', () => { - test.each(testCases)( - '%o', - (page, namespaceLower, namespaceUpper, examplePath, type, pageName, detailName) => { - mockProps = getMockPropsObj({ page, examplePath, namespaceLower, pageName, detailName }) - .noSearch.undefinedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - mount( useUrlStateHooks(args)} />); - - expect(mockHistory.replace.mock.calls[0][0]).toEqual({ - hash: '', - pathname: examplePath, - search: - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))", - state: '', - }); - } - ); - - test('url state is set from redux data when location updates and initialization', () => { - mockProps = getMockPropsObj({ - page: CONSTANTS.hostsPage, - examplePath: '/hosts', - namespaceLower: 'hosts', - pageName: SecurityPageName.hosts, - detailName: undefined, - }).noSearch.undefinedQuery; - const updatedProps = getMockPropsObj({ - page: CONSTANTS.networkPage, - examplePath: '/network', - namespaceLower: 'network', - pageName: SecurityPageName.network, - detailName: undefined, - }).noSearch.definedQuery; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - const wrapper = mount( - useUrlStateHooks(args)} /> - ); - - expect(mockHistory.replace.mock.calls[0][0].search).toEqual( - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))" - ); - - (useLocation as jest.Mock).mockReturnValue({ - pathname: updatedProps.pathName, - search: mockProps.search, - }); - - wrapper.setProps({ hookProps: updatedProps }); - - wrapper.update(); - - expect(mockHistory.replace.mock.calls[1][0].search).toEqual( - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))" - ); - }); - - test("doesn't update url state on administration page", () => { - mockProps = getMockPropsObj({ - page: CONSTANTS.hostsPage, - examplePath: '/hosts', - namespaceLower: 'hosts', - pageName: SecurityPageName.hosts, - detailName: undefined, - }).noSearch.undefinedQuery; - - const updatedMockProps = { - ...getMockPropsObj({ - ...mockProps, - page: CONSTANTS.unknown, - examplePath: MANAGEMENT_PATH, - namespaceLower: 'administration', - pageName: SecurityPageName.administration, - detailName: undefined, - }).noSearch.definedQuery, - }; - - (useLocation as jest.Mock).mockReturnValue({ - pathname: mockProps.pathName, - search: mockProps.search, - }); - - const wrapper = mount( - useUrlStateHooks(args)} /> - ); - - expect(mockHistory.replace.mock.calls[0][0].search).toEqual( - "?timerange=(global:(linkTo:!(timeline),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)),timeline:(linkTo:!(global),timerange:(from:'2019-05-16T23:10:43.696Z',fromStr:now-24h,kind:relative,to:'2019-05-17T23:10:43.697Z',toStr:now)))" - ); - - (useLocation as jest.Mock).mockReturnValue({ - pathname: updatedMockProps.pathName, - search: mockProps.search, - }); - - wrapper.setProps({ hookProps: updatedMockProps }); - - wrapper.update(); - - expect(mockHistory.replace.mock.calls[1][0].search).toEqual('?'); - }); - }); - }); - }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/initialize_redux_by_url.tsx b/x-pack/plugins/security_solution/public/common/components/url_state/initialize_redux_by_url.tsx index 187b1aadedcd4..7d404cf687f91 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/initialize_redux_by_url.tsx +++ b/x-pack/plugins/security_solution/public/common/components/url_state/initialize_redux_by_url.tsx @@ -5,23 +5,11 @@ * 2.0. */ -import { get, isEmpty } from 'lodash/fp'; -import type { Dispatch } from 'redux'; - import { useCallback, useMemo } from 'react'; import { useDispatch } from 'react-redux'; -import { inputsActions } from '../../store/actions'; -import type { InputsModelId, TimeRangeKinds } from '../../store/inputs/constants'; -import type { - UrlInputsModel, - LinkTo, - AbsoluteTimeRange, - RelativeTimeRange, -} from '../../store/inputs/model'; import type { TimelineUrl } from '../../../timelines/store/timeline/model'; import { CONSTANTS } from './constants'; import { decodeRisonUrlState } from './helpers'; -import { normalizeTimeRange } from './normalize_time_range'; import type { SetInitialStateFromUrl } from './types'; import { queryTimelineById, @@ -31,7 +19,6 @@ import { timelineActions } from '../../../timelines/store/timeline'; export const useSetInitialStateFromUrl = () => { const dispatch = useDispatch(); - const updateTimeline = useMemo(() => dispatchUpdateTimeline(dispatch), [dispatch]); const updateTimelineIsLoading = useMemo( @@ -43,10 +30,6 @@ export const useSetInitialStateFromUrl = () => { const setInitialStateFromUrl = useCallback( ({ urlStateToUpdate }: SetInitialStateFromUrl) => { urlStateToUpdate.forEach(({ urlKey, newUrlStateString }) => { - if (urlKey === CONSTANTS.timerange) { - updateTimerange(newUrlStateString, dispatch); - } - if (urlKey === CONSTANTS.timeline) { const timeline = decodeRisonUrlState(newUrlStateString); if (timeline != null && timeline.id !== '') { @@ -63,87 +46,8 @@ export const useSetInitialStateFromUrl = () => { } }); }, - [dispatch, updateTimeline, updateTimelineIsLoading] + [updateTimeline, updateTimelineIsLoading] ); return Object.freeze({ setInitialStateFromUrl, updateTimeline, updateTimelineIsLoading }); }; - -const updateTimerange = (newUrlStateString: string, dispatch: Dispatch) => { - const timerangeStateData = decodeRisonUrlState(newUrlStateString); - - const globalId: InputsModelId = 'global'; - const globalLinkTo: LinkTo = { linkTo: get('global.linkTo', timerangeStateData) }; - const globalType: TimeRangeKinds = get('global.timerange.kind', timerangeStateData); - - const timelineId: InputsModelId = 'timeline'; - const timelineLinkTo: LinkTo = { linkTo: get('timeline.linkTo', timerangeStateData) }; - const timelineType: TimeRangeKinds = get('timeline.timerange.kind', timerangeStateData); - - if (isEmpty(globalLinkTo.linkTo)) { - dispatch(inputsActions.removeGlobalLinkTo()); - } else { - dispatch(inputsActions.addGlobalLinkTo({ linkToId: 'timeline' })); - } - - if (isEmpty(timelineLinkTo.linkTo)) { - dispatch(inputsActions.removeTimelineLinkTo()); - } else { - dispatch(inputsActions.addTimelineLinkTo({ linkToId: 'global' })); - } - - if (timelineType) { - if (timelineType === 'absolute') { - const absoluteRange = normalizeTimeRange( - get('timeline.timerange', timerangeStateData) - ); - - dispatch( - inputsActions.setAbsoluteRangeDatePicker({ - ...absoluteRange, - id: timelineId, - }) - ); - } - - if (timelineType === 'relative') { - const relativeRange = normalizeTimeRange( - get('timeline.timerange', timerangeStateData) - ); - - dispatch( - inputsActions.setRelativeRangeDatePicker({ - ...relativeRange, - id: timelineId, - }) - ); - } - } - - if (globalType) { - if (globalType === 'absolute') { - const absoluteRange = normalizeTimeRange( - get('global.timerange', timerangeStateData) - ); - - dispatch( - inputsActions.setAbsoluteRangeDatePicker({ - ...absoluteRange, - id: globalId, - }) - ); - } - if (globalType === 'relative') { - const relativeRange = normalizeTimeRange( - get('global.timerange', timerangeStateData) - ); - - dispatch( - inputsActions.setRelativeRangeDatePicker({ - ...relativeRange, - id: globalId, - }) - ); - } - } -}; diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/test_dependencies.ts b/x-pack/plugins/security_solution/public/common/components/url_state/test_dependencies.ts index 2e7b1b4b99a4b..9a3dd5f7d2896 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/test_dependencies.ts +++ b/x-pack/plugins/security_solution/public/common/components/url_state/test_dependencies.ts @@ -12,8 +12,6 @@ import { inputsActions } from '../../store/actions'; import { CONSTANTS } from './constants'; import type { UrlStateContainerPropTypes, LocationTypes } from './types'; -import { networkModel } from '../../../network/store'; -import { hostsModel } from '../../../hosts/store'; import { HostsTableType } from '../../../hosts/store/model'; import { TimelineTabs } from '../../../../common/types/timeline'; @@ -91,28 +89,6 @@ export const defaultProps: UrlStateContainerPropTypes = { title: 'filebeat-*,packetbeat-*', }, urlState: { - [CONSTANTS.timerange]: { - global: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['timeline'], - }, - timeline: { - [CONSTANTS.timerange]: { - from: '2019-05-16T23:10:43.696Z', - fromStr: 'now-24h', - kind: 'relative', - to: '2019-05-17T23:10:43.697Z', - toStr: 'now', - }, - linkTo: ['global'], - }, - }, [CONSTANTS.timeline]: { activeTab: TimelineTabs.query, id: '', @@ -262,73 +238,3 @@ export const getMockPropsObj = ({ page, examplePath, pageName, detailName }: Get ), }, }); - -// silly that this needs to be an array and not an object -// https://jestjs.io/docs/en/api#testeachtable-name-fn-timeout -export const testCases: Array< - [LocationTypes, string, string, string, string | null, SecurityPageName, undefined | string] -> = [ - [ - /* page */ CONSTANTS.networkPage, - /* namespaceLower */ 'network', - /* namespaceUpper */ 'Network', - /* pathName */ '/network', - /* type */ networkModel.NetworkType.page, - /* pageName */ SecurityPageName.network, - /* detailName */ undefined, - ], - [ - /* page */ CONSTANTS.hostsPage, - /* namespaceLower */ 'hosts', - /* namespaceUpper */ 'Hosts', - /* pathName */ '/hosts', - /* type */ hostsModel.HostsType.page, - /* pageName */ SecurityPageName.hosts, - /* detailName */ undefined, - ], - [ - /* page */ CONSTANTS.hostsDetails, - /* namespaceLower */ 'hosts', - /* namespaceUpper */ 'Hosts', - /* pathName */ '/hosts/siem-es', - /* type */ hostsModel.HostsType.details, - /* pageName */ SecurityPageName.hosts, - /* detailName */ 'host-test', - ], - [ - /* page */ CONSTANTS.networkDetails, - /* namespaceLower */ 'network', - /* namespaceUpper */ 'Network', - /* pathName */ '/network/ip/100.90.80', - /* type */ networkModel.NetworkType.details, - /* pageName */ SecurityPageName.network, - /* detailName */ '100.90.80', - ], - [ - /* page */ CONSTANTS.overviewPage, - /* namespaceLower */ 'overview', - /* namespaceUpper */ 'Overview', - /* pathName */ '/overview', - /* type */ null, - /* pageName */ SecurityPageName.overview, - /* detailName */ undefined, - ], - [ - /* page */ CONSTANTS.timelinePage, - /* namespaceLower */ 'timeline', - /* namespaceUpper */ 'Timeline', - /* pathName */ '/timeline', - /* type */ null, - /* pageName */ SecurityPageName.timelines, - /* detailName */ undefined, - ], - [ - /* page */ CONSTANTS.kubernetesPage, - /* namespaceLower */ 'kubernetes', - /* namespaceUpper */ 'Kubernetes', - /* pathName */ '/kubernetes', - /* type */ null, - /* pageName */ SecurityPageName.kubernetes, - /* detailName */ undefined, - ], -]; diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/types.ts b/x-pack/plugins/security_solution/public/common/components/url_state/types.ts index 01aa4fdd2c410..6c74320ce237c 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/types.ts +++ b/x-pack/plugins/security_solution/public/common/components/url_state/types.ts @@ -7,7 +7,6 @@ import type { DataViewBase } from '@kbn/es-query'; import type { FilterManager, SavedQueryService } from '@kbn/data-plugin/public'; -import type { UrlInputsModel } from '../../store/inputs/model'; import type { TimelineUrl } from '../../../timelines/store/timeline/model'; import type { RouteSpyState } from '../../utils/route/types'; import type { SecurityNav } from '../navigation/types'; @@ -15,7 +14,7 @@ import type { SecurityNav } from '../navigation/types'; import type { UrlStateType } from './constants'; import { CONSTANTS } from './constants'; -export const ALL_URL_STATE_KEYS: KeyUrlState[] = [CONSTANTS.timerange, CONSTANTS.timeline]; +export const ALL_URL_STATE_KEYS: KeyUrlState[] = [CONSTANTS.timeline]; export const isAdministration = (urlKey: UrlStateType): boolean => 'administration' === urlKey; @@ -33,7 +32,6 @@ export type LocationTypes = | CONSTANTS.unknown; export interface UrlState { - [CONSTANTS.timerange]: UrlInputsModel; [CONSTANTS.timeline]: TimelineUrl; } export type KeyUrlState = keyof UrlState; diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/use_url_state.tsx b/x-pack/plugins/security_solution/public/common/components/url_state/use_url_state.tsx index 2cb24c4430427..0be72ef931101 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/use_url_state.tsx +++ b/x-pack/plugins/security_solution/public/common/components/url_state/use_url_state.tsx @@ -25,7 +25,6 @@ import { isDetectionsPages, encodeRisonUrlState, isQueryStateEmpty, - updateTimerangeUrl, } from './helpers'; import type { UrlStateContainerPropTypes, @@ -38,7 +37,6 @@ import type { } from './types'; import { ALL_URL_STATE_KEYS, isAdministration } from './types'; import type { TimelineUrl } from '../../../timelines/store/timeline/model'; -import type { UrlInputsModel } from '../../store/inputs/model'; import { queryTimelineByIdOnUrlChange } from './query_timeline_by_id_on_url_change'; import { getLinkInfo } from '../../links'; import { useIsGroupedNavigationEnabled } from '../navigation/helpers'; @@ -97,7 +95,6 @@ export const useUrlStateHooks = ({ const stateToUpdate = getUpdateToFormatUrlStateString({ isFirstPageLoad, newUrlStateString, - updateTimerange: isDetectionsPages(pageName) || isFirstPageLoad, urlKey, }); @@ -227,12 +224,10 @@ const getQueryStringKeyValue = ({ search, urlKey }: { search: string; urlKey: st export const getUpdateToFormatUrlStateString = ({ isFirstPageLoad, newUrlStateString, - updateTimerange, urlKey, }: { isFirstPageLoad: boolean; newUrlStateString: string; - updateTimerange: boolean; urlKey: KeyUrlState; }): ReplaceStateInLocation | undefined => { if (isQueryStateEmpty(decodeRisonUrlState(newUrlStateString), urlKey)) { @@ -240,16 +235,7 @@ export const getUpdateToFormatUrlStateString = ({ urlStateToReplace: '', urlStateKey: urlKey, }; - } else if (urlKey === CONSTANTS.timerange && updateTimerange) { - const queryState = decodeRisonUrlState(newUrlStateString); - if (queryState != null && queryState.global != null) { - return { - urlStateToReplace: updateTimerangeUrl(queryState, isFirstPageLoad), - urlStateKey: urlKey, - }; - } } - return undefined; }; const isTimelinePresentInUrlStateString = (urlStateString: string, timeline: TimelineUrl) => { diff --git a/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_search_bar_url_params.ts b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_search_bar_url_params.ts index 0424b86619bb2..608f38b7428a9 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_search_bar_url_params.ts +++ b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_search_bar_url_params.ts @@ -14,7 +14,7 @@ import { inputsActions } from '../../store/inputs'; import { useInitializeUrlParam } from '../../utils/global_query_string'; import { CONSTANTS } from '../../components/url_state/constants'; -export const useInitSearchBarUrlParams = () => { +export const useInitSearchBarFromUrlParams = () => { const dispatch = useDispatch(); const { filterManager, savedQueries } = useKibana().services.data.query; const getGlobalFiltersQuerySelector = useMemo( @@ -23,7 +23,7 @@ export const useInitSearchBarUrlParams = () => { ); const filtersFromStore = useSelector(getGlobalFiltersQuerySelector); - const onInitializeAppQueryUrlParam = useCallback( + const onInitializeAppQueryFromUrlParam = useCallback( (initialState: Query | null) => { if (initialState != null) { dispatch( @@ -38,7 +38,7 @@ export const useInitSearchBarUrlParams = () => { [dispatch] ); - const onInitializeFiltersUrlParam = useCallback( + const onInitializeFiltersFromUrlParam = useCallback( (initialState: Filter[] | null) => { if (initialState != null) { filterManager.setFilters(initialState); @@ -63,7 +63,7 @@ export const useInitSearchBarUrlParams = () => { [filterManager, dispatch, filtersFromStore] ); - const onInitializeSavedQueryUrlParam = useCallback( + const onInitializeSavedQueryFromUrlParam = useCallback( (savedQueryId: string | null) => { if (savedQueryId != null && savedQueryId !== '') { savedQueries.getSavedQuery(savedQueryId).then((savedQueryData) => { @@ -91,7 +91,7 @@ export const useInitSearchBarUrlParams = () => { [dispatch, filterManager, savedQueries] ); - useInitializeUrlParam(CONSTANTS.appQuery, onInitializeAppQueryUrlParam); - useInitializeUrlParam(CONSTANTS.filters, onInitializeFiltersUrlParam); - useInitializeUrlParam(CONSTANTS.savedQuery, onInitializeSavedQueryUrlParam); + useInitializeUrlParam(CONSTANTS.appQuery, onInitializeAppQueryFromUrlParam); + useInitializeUrlParam(CONSTANTS.filters, onInitializeFiltersFromUrlParam); + useInitializeUrlParam(CONSTANTS.savedQuery, onInitializeSavedQueryFromUrlParam); }; diff --git a/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_timerange_url_params.ts b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_timerange_url_params.ts new file mode 100644 index 0000000000000..2d5c00aa600f5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_init_timerange_url_params.ts @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback } from 'react'; +import { get, isEmpty } from 'lodash/fp'; +import { useDispatch } from 'react-redux'; +import type { Dispatch } from 'redux'; +import type { InputsModelId, TimeRangeKinds } from '../../store/inputs/constants'; +import type { + AbsoluteTimeRange, + LinkTo, + RelativeTimeRange, + UrlInputsModel, +} from '../../store/inputs/model'; +import { normalizeTimeRange } from '../../components/url_state/normalize_time_range'; +import { inputsActions } from '../../store/inputs'; +import { formatDate } from '../../components/super_date_picker'; +import { useInitializeUrlParam } from '../../utils/global_query_string'; +import { CONSTANTS } from '../../components/url_state/constants'; + +export const useInitTimerangeFromUrlParam = () => { + const dispatch = useDispatch(); + + const onInitialize = useCallback( + (initialState: UrlInputsModel | null) => + initializeTimerangeFromUrlParam(initialState, dispatch), + [dispatch] + ); + + useInitializeUrlParam(CONSTANTS.timerange, onInitialize); +}; + +const initializeTimerangeFromUrlParam = ( + initialState: UrlInputsModel | null, + dispatch: Dispatch +) => { + if (initialState != null) { + const globalId: InputsModelId = 'global'; + const globalLinkTo: LinkTo = { linkTo: get('global.linkTo', initialState) }; + const globalType: TimeRangeKinds = get('global.timerange.kind', initialState); + + const timelineId: InputsModelId = 'timeline'; + const timelineLinkTo: LinkTo = { linkTo: get('timeline.linkTo', initialState) }; + const timelineType: TimeRangeKinds = get('timeline.timerange.kind', initialState); + + if (isEmpty(globalLinkTo.linkTo)) { + dispatch(inputsActions.removeGlobalLinkTo()); + } else { + dispatch(inputsActions.addGlobalLinkTo({ linkToId: 'timeline' })); + } + + if (isEmpty(timelineLinkTo.linkTo)) { + dispatch(inputsActions.removeTimelineLinkTo()); + } else { + dispatch(inputsActions.addTimelineLinkTo({ linkToId: 'global' })); + } + + if (timelineType) { + if (timelineType === 'absolute') { + const absoluteRange = normalizeTimeRange( + get('timeline.timerange', initialState) + ); + + dispatch( + inputsActions.setAbsoluteRangeDatePicker({ + ...absoluteRange, + id: timelineId, + }) + ); + } + + if (timelineType === 'relative') { + const relativeRange = normalizeTimeRange( + get('timeline.timerange', initialState) + ); + + // Updates date values when timerange is relative + relativeRange.from = formatDate(relativeRange.fromStr); + relativeRange.to = formatDate(relativeRange.toStr, { + roundUp: true, + }); + + dispatch( + inputsActions.setRelativeRangeDatePicker({ + ...relativeRange, + id: timelineId, + }) + ); + } + } + + if (globalType) { + if (globalType === 'absolute') { + const absoluteRange = normalizeTimeRange( + get('global.timerange', initialState) + ); + + dispatch( + inputsActions.setAbsoluteRangeDatePicker({ + ...absoluteRange, + id: globalId, + }) + ); + } + if (globalType === 'relative') { + const relativeRange = normalizeTimeRange( + get('global.timerange', initialState) + ); + + // Updates date values when timerange is relative + relativeRange.from = formatDate(relativeRange.fromStr); + relativeRange.to = formatDate(relativeRange.toStr, { + roundUp: true, + }); + + dispatch( + inputsActions.setRelativeRangeDatePicker({ + ...relativeRange, + id: globalId, + }) + ); + } + } + } +}; diff --git a/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_sync_timerange_url_param.ts b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_sync_timerange_url_param.ts new file mode 100644 index 0000000000000..a14299b7f2267 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_sync_timerange_url_param.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useEffect, useMemo } from 'react'; +import { useSelector } from 'react-redux'; +import type { UrlInputsModel } from '../../store/inputs/model'; +import { inputsSelectors } from '../../store/inputs'; +import { useUpdateUrlParam } from '../../utils/global_query_string'; +import { CONSTANTS } from '../../components/url_state/constants'; + +export const useSyncTimerangeUrlParam = () => { + const updateTimerangeUrlParam = useUpdateUrlParam(CONSTANTS.timerange); + const getInputSelector = useMemo(() => inputsSelectors.inputsSelector(), []); + const inputState = useSelector(getInputSelector); + + const { linkTo: globalLinkTo, timerange: globalTimerange } = inputState.global; + const { linkTo: timelineLinkTo, timerange: timelineTimerange } = inputState.timeline; + + useEffect(() => { + updateTimerangeUrlParam({ + global: { + [CONSTANTS.timerange]: globalTimerange, + linkTo: globalLinkTo, + }, + timeline: { + [CONSTANTS.timerange]: timelineTimerange, + linkTo: timelineLinkTo, + }, + }); + }, [updateTimerangeUrlParam, globalLinkTo, globalTimerange, timelineLinkTo, timelineTimerange]); +}; diff --git a/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_update_timerange_on_page_change.ts b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_update_timerange_on_page_change.ts new file mode 100644 index 0000000000000..79fdc5ddd2c12 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/search_bar/use_update_timerange_on_page_change.ts @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect, useMemo } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import usePrevious from 'react-use/lib/usePrevious'; +import type { SecurityPageName } from '../../../app/types'; +import { formatDate } from '../../components/super_date_picker'; +import { isDetectionsPages } from '../../components/url_state/helpers'; +import { inputsSelectors } from '../../store'; +import { inputsActions } from '../../store/inputs'; +import type { InputsModelId } from '../../store/inputs/constants'; +import { useRouteSpy } from '../../utils/route/use_route_spy'; + +const globalId: InputsModelId = 'global'; +const timelineId: InputsModelId = 'timeline'; + +/** + * Update relative time ranges when navigating between pages. + * + * Ex: When 'toStr' is 'now' and we navigate to a new page, it updates `to` with the present date-time. + * + * * It does not update the time range on the landing page. + * * It only updates the time range when navigating to detection pages for performance reasons. + */ +export const useUpdateTimerangeOnPageChange = () => { + const [{ pageName }] = useRouteSpy(); + const dispatch = useDispatch(); + const previousPage = usePrevious(pageName); + const getInputSelector = useMemo(() => inputsSelectors.inputsSelector(), []); + const inputState = useSelector(getInputSelector); + + const { timerange: globalTimerange } = inputState.global; + const { timerange: timelineTimerange } = inputState.timeline; + + useEffect(() => { + if (isNavigatingToDetections(pageName, previousPage)) { + if (timelineTimerange.kind === 'relative') { + dispatch( + inputsActions.setRelativeRangeDatePicker({ + ...timelineTimerange, + from: formatDate(timelineTimerange.fromStr), + to: formatDate(timelineTimerange.toStr, { + roundUp: true, + }), + id: timelineId, + }) + ); + } + + if (globalTimerange.kind === 'relative') { + dispatch( + inputsActions.setRelativeRangeDatePicker({ + ...globalTimerange, + from: formatDate(globalTimerange.fromStr), + to: formatDate(globalTimerange.toStr, { + roundUp: true, + }), + + id: globalId, + }) + ); + } + } + }, [pageName, previousPage, dispatch, timelineTimerange, globalTimerange]); +}; + +const isNavigatingToDetections = ( + pageName: SecurityPageName | undefined, + previousPage: SecurityPageName | undefined +) => pageName && previousPage && previousPage !== pageName && isDetectionsPages(pageName); diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_url_state.ts b/x-pack/plugins/security_solution/public/common/hooks/use_url_state.ts new file mode 100644 index 0000000000000..f9e964fff54ed --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_url_state.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useSyncGlobalQueryString } from '../utils/global_query_string'; +import { useInitSearchBarFromUrlParams } from './search_bar/use_init_search_bar_url_params'; +import { useInitTimerangeFromUrlParam } from './search_bar/use_init_timerange_url_params'; +import { useUpdateTimerangeOnPageChange } from './search_bar/use_update_timerange_on_page_change'; + +export const useUrlState = () => { + useSyncGlobalQueryString(); + useInitSearchBarFromUrlParams(); + useInitTimerangeFromUrlParam(); + useUpdateTimerangeOnPageChange(); +}; diff --git a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap index 1d8d5322c235b..063ebe2952cc0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap @@ -146,7 +146,7 @@ exports[`Field Renderers #hostIdRenderer it renders correctly against snapshot 1
raspberrypi @@ -201,7 +201,7 @@ exports[`Field Renderers #hostNameRenderer it renders correctly against snapshot raspberrypi From fce0739d2a5cd332ead6f14f71ed7581db82ace7 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 14 Jul 2022 10:36:35 +0100 Subject: [PATCH 41/96] [Archive Migrations] Migrate discover for visual regression (#136222) * [Archive Migrations] Migrate discover for visual regression Add archive. Make the test use the new archive. * Drop archive. * Archive was in the wrong place. * Cr fixup. --- .../fixtures/es_archiver/discover/data.json | 64 --- .../es_archiver/discover/mappings.json | 445 ------------------ .../discover/visual_regression.json | 51 ++ .../tests/discover/chart_visualization.ts | 10 +- 4 files changed, 58 insertions(+), 512 deletions(-) delete mode 100644 test/functional/fixtures/es_archiver/discover/data.json delete mode 100644 test/functional/fixtures/es_archiver/discover/mappings.json create mode 100644 test/functional/fixtures/kbn_archiver/discover/visual_regression.json diff --git a/test/functional/fixtures/es_archiver/discover/data.json b/test/functional/fixtures/es_archiver/discover/data.json deleted file mode 100644 index 14a9f0559c6f3..0000000000000 --- a/test/functional/fixtures/es_archiver/discover/data.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "doc", - "value": { - "id": "index-pattern:logstash-*", - "index": ".kibana", - "source": { - "coreMigrationVersion": "7.14.0", - "index-pattern": { - "fieldAttrs": "{\"referer\":{\"customLabel\":\"Referer custom\"}}", - "fields": "[{\"name\":\"@message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@message.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@message\"}}},{\"name\":\"@tags\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@tags.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@tags\"}}},{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"agent\"}}},{\"name\":\"bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"extension\"}}},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headings\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headings.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"headings\"}}},{\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"name\":\"id\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index\"}}},{\"name\":\"ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"links\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"links\"}}},{\"name\":\"machine.os\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"machine.os\"}}},{\"name\":\"machine.ram\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"esTypes\":[\"double\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"nestedField.child\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"nested\":{\"path\":\"nestedField\"}}},{\"name\":\"phpmemory\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:section\"}}},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:tag\"}}},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:description\"}}},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image\"}}},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:height\"}}},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:width\"}}},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:site_name\"}}},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:title\"}}},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:type\"}}},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:url\"}}},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:card\"}}},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:description\"}}},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:image\"}}},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:site\"}}},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:title\"}}},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.url\"}}},{\"name\":\"request\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"request\"}}},{\"name\":\"response\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"response\"}}},{\"name\":\"spaces\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"spaces.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"spaces\"}}},{\"name\":\"type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"url\"}}},{\"name\":\"utc_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xss\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"xss\"}}}]", - "timeFieldName": "@timestamp", - "title": "logstash-*" - }, - "migrationVersion": { - "index-pattern": "7.11.0" - }, - "references": [ - ], - "type": "index-pattern" - }, - "type": "_doc" - } -} - -{ - "type": "doc", - "value": { - "id": "search:ab12e3c0-f231-11e6-9486-733b1ac9221a", - "index": ".kibana", - "source": { - "coreMigrationVersion": "7.14.0", - "migrationVersion": { - "search": "7.9.3" - }, - "references": [ - { - "id": "logstash-*", - "name": "kibanaSavedObjectMeta.searchSourceJSON.index", - "type": "index-pattern" - } - ], - "search": { - "columns": [ - "_source" - ], - "description": "A Saved Search Description", - "hits": 0, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"highlightAll\":true,\"filter\":[],\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" - }, - "sort": [ - [ - "@timestamp", - "desc" - ] - ], - "title": "A Saved Search", - "version": 1 - }, - "type": "search" - }, - "type": "_doc" - } -} \ No newline at end of file diff --git a/test/functional/fixtures/es_archiver/discover/mappings.json b/test/functional/fixtures/es_archiver/discover/mappings.json deleted file mode 100644 index 33bc746c84c8c..0000000000000 --- a/test/functional/fixtures/es_archiver/discover/mappings.json +++ /dev/null @@ -1,445 +0,0 @@ -{ - "type": "index", - "value": { - "aliases": { - ".kibana_$KIBANA_PACKAGE_VERSION": {}, - ".kibana": {} - }, - "index": ".kibana_$KIBANA_PACKAGE_VERSION_001", - "mappings": { - "_meta": { - "migrationMappingPropertyHashes": { - "application_usage_daily": "43b8830d5d0df85a6823d290885fc9fd", - "application_usage_totals": "3d1b76c39bfb2cc8296b024d73854724", - "application_usage_transactional": "3d1b76c39bfb2cc8296b024d73854724", - "config": "c63748b75f39d0c54de12d12c1ccbc20", - "core-usage-stats": "3d1b76c39bfb2cc8296b024d73854724", - "coreMigrationVersion": "2f4316de49999235636386fe51dc06c1", - "dashboard": "40554caf09725935e2c02e02563a2d07", - "index-pattern": "45915a1ad866812242df474eb0479052", - "kql-telemetry": "d12a98a6f19a2d273696597547e064ee", - "legacy-url-alias": "6155300fd11a00e23d5cbaa39f0fce0a", - "migrationVersion": "4a1746014a75ade3a714e1db5763276f", - "namespace": "2f4316de49999235636386fe51dc06c1", - "namespaces": "2f4316de49999235636386fe51dc06c1", - "originId": "2f4316de49999235636386fe51dc06c1", - "query": "11aaeb7f5f7fa5bb43f25e18ce26e7d9", - "references": "7997cf5a56cc02bdc9c93361bde732b0", - "sample-data-telemetry": "7d3cfeb915303c9641c59681967ffeb4", - "search": "db2c00e39b36f40930a3b9fc71c823e1", - "search-telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "telemetry": "36a616f7026dfa617d6655df850fe16d", - "type": "2f4316de49999235636386fe51dc06c1", - "ui-counter": "0d409297dc5ebe1e3a1da691c6ee32e3", - "ui-metric": "0d409297dc5ebe1e3a1da691c6ee32e3", - "updated_at": "00da57df13e94e9d98437d13ace4bfe0", - "url": "c7f66a0df8b1b52f17c28c4adb111105", - "usage-counters": "8cc260bdceffec4ffc3ad165c97dc1b4", - "visualization": "f819cf6636b75c9e76ba733a0c6ef355" - } - }, - "dynamic": "strict", - "properties": { - "application_usage_daily": { - "dynamic": "false", - "properties": { - "timestamp": { - "type": "date" - } - } - }, - "application_usage_totals": { - "dynamic": "false", - "type": "object" - }, - "application_usage_transactional": { - "dynamic": "false", - "type": "object" - }, - "config": { - "dynamic": "false", - "properties": { - "buildNum": { - "type": "keyword" - } - } - }, - "core-usage-stats": { - "dynamic": "false", - "type": "object" - }, - "coreMigrationVersion": { - "type": "keyword" - }, - "dashboard": { - "properties": { - "description": { - "type": "text" - }, - "hits": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "optionsJSON": { - "index": false, - "type": "text" - }, - "panelsJSON": { - "index": false, - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "pause": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "section": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "value": { - "doc_values": false, - "index": false, - "type": "integer" - } - } - }, - "timeFrom": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "timeRestore": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "timeTo": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "index-pattern": { - "dynamic": "false", - "properties": { - "title": { - "type": "text" - }, - "type": { - "type": "keyword" - } - } - }, - "kql-telemetry": { - "properties": { - "optInCount": { - "type": "long" - }, - "optOutCount": { - "type": "long" - } - } - }, - "legacy-url-alias": { - "dynamic": "false", - "properties": { - "disabled": { - "type": "boolean" - }, - "sourceId": { - "type": "keyword" - }, - "targetType": { - "type": "keyword" - } - } - }, - "migrationVersion": { - "dynamic": "true", - "properties": { - "index-pattern": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "search": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "namespace": { - "type": "keyword" - }, - "namespaces": { - "type": "keyword" - }, - "originId": { - "type": "keyword" - }, - "query": { - "properties": { - "description": { - "type": "text" - }, - "filters": { - "enabled": false, - "type": "object" - }, - "query": { - "properties": { - "language": { - "type": "keyword" - }, - "query": { - "index": false, - "type": "keyword" - } - } - }, - "timefilter": { - "enabled": false, - "type": "object" - }, - "title": { - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "sample-data-telemetry": { - "properties": { - "installCount": { - "type": "long" - }, - "unInstallCount": { - "type": "long" - } - } - }, - "search": { - "properties": { - "columns": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "description": { - "type": "text" - }, - "grid": { - "enabled": false, - "type": "object" - }, - "hideChart": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "hits": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "sort": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "search-telemetry": { - "dynamic": "false", - "type": "object" - }, - "server": { - "dynamic": "false", - "type": "object" - }, - "telemetry": { - "properties": { - "allowChangingOptInStatus": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - }, - "lastReported": { - "type": "date" - }, - "lastVersionChecked": { - "type": "keyword" - }, - "reportFailureCount": { - "type": "integer" - }, - "reportFailureVersion": { - "type": "keyword" - }, - "sendUsageFrom": { - "type": "keyword" - }, - "userHasSeenNotice": { - "type": "boolean" - } - } - }, - "type": { - "type": "keyword" - }, - "ui-counter": { - "properties": { - "count": { - "type": "integer" - } - } - }, - "ui-metric": { - "properties": { - "count": { - "type": "integer" - } - } - }, - "updated_at": { - "type": "date" - }, - "url": { - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "url": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "usage-counters": { - "dynamic": "false", - "properties": { - "domainId": { - "type": "keyword" - } - } - }, - "visualization": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "savedSearchRefName": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "index": false, - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "index": false, - "type": "text" - } - } - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "number_of_replicas": "0", - "number_of_shards": "1", - "priority": "10", - "refresh_interval": "1s", - "routing_partition_size": "1" - } - } - } -} \ No newline at end of file diff --git a/test/functional/fixtures/kbn_archiver/discover/visual_regression.json b/test/functional/fixtures/kbn_archiver/discover/visual_regression.json new file mode 100644 index 0000000000000..c3782679b4809 --- /dev/null +++ b/test/functional/fixtures/kbn_archiver/discover/visual_regression.json @@ -0,0 +1,51 @@ +{ + "attributes": { + "fieldAttrs": "{\"referer\":{\"customLabel\":\"Referer custom\"}}", + "fields": "[{\"name\":\"@message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@message.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@message\"}}},{\"name\":\"@tags\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@tags.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@tags\"}}},{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"agent\"}}},{\"name\":\"bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"extension\"}}},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headings\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headings.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"headings\"}}},{\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"name\":\"id\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"index\"}}},{\"name\":\"ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"links\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"links\"}}},{\"name\":\"machine.os\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"machine.os\"}}},{\"name\":\"machine.ram\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"esTypes\":[\"double\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"nestedField.child\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"nested\":{\"path\":\"nestedField\"}}},{\"name\":\"phpmemory\",\"type\":\"number\",\"esTypes\":[\"long\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:section\"}}},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.article:tag\"}}},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:description\"}}},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image\"}}},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:height\"}}},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:image:width\"}}},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:site_name\"}}},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:title\"}}},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:type\"}}},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.og:url\"}}},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:card\"}}},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:description\"}}},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:image\"}}},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:site\"}}},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.twitter:title\"}}},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"relatedContent.url\"}}},{\"name\":\"request\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"request\"}}},{\"name\":\"response\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"response\"}}},{\"name\":\"spaces\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"spaces.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"spaces\"}}},{\"name\":\"type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"url\"}}},{\"name\":\"utc_time\",\"type\":\"date\",\"esTypes\":[\"date\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xss\",\"type\":\"string\",\"esTypes\":[\"text\"],\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"xss\"}}}]", + "timeFieldName": "@timestamp", + "title": "logstash-*" + }, + "coreMigrationVersion": "8.4.0", + "id": "logstash-*", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "version": "WzQsMV0=" +} + +{ + "attributes": { + "columns": [ + "_source" + ], + "description": "A Saved Search Description", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"highlightAll\":true,\"filter\":[],\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}" + }, + "sort": [ + [ + "@timestamp", + "desc" + ] + ], + "title": "A Saved Search", + "version": 1 + }, + "coreMigrationVersion": "8.4.0", + "id": "ab12e3c0-f231-11e6-9486-733b1ac9221a", + "migrationVersion": { + "search": "8.0.0" + }, + "references": [ + { + "id": "logstash-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "search", + "version": "WzUsMV0=" +} diff --git a/test/visual_regression/tests/discover/chart_visualization.ts b/test/visual_regression/tests/discover/chart_visualization.ts index 389a0a4b6a314..f8390064732b9 100644 --- a/test/visual_regression/tests/discover/chart_visualization.ts +++ b/test/visual_regression/tests/discover/chart_visualization.ts @@ -24,7 +24,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('discover', function describeIndexTests() { before(async function () { - await esArchiver.load('test/functional/fixtures/es_archiver/discover'); + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.importExport.load( + 'test/functional/fixtures/kbn_archiver/discover/visual_regression' + ); // and load a set of makelogs data await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); @@ -33,8 +36,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.timePicker.setDefaultAbsoluteRange(); }); - after(function unloadMakelogs() { - return esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + after(async function unloadMakelogs() { + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.savedObjects.cleanStandardList(); }); async function refreshDiscover() { From ccaa38e7f1f90efa33c742220ff2faaa47c0c753 Mon Sep 17 00:00:00 2001 From: Muhammad Ibragimov <53621505+mibragimov@users.noreply.github.com> Date: Thu, 14 Jul 2022 14:50:28 +0500 Subject: [PATCH 42/96] [Console] Close autocomplete popup when navigating away from Console (#136268) * [Console] Close autocomplete popup when navigating away from Console * Fix type checks Co-authored-by: Muhammad Ibragimov --- .../containers/editor/legacy/console_editor/editor.tsx | 2 ++ .../models/legacy_core_editor/legacy_core_editor.ts | 4 ++++ src/plugins/console/public/types/core_editor.ts | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx index e999c079b490f..76e91baa8e21e 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx @@ -233,6 +233,8 @@ function EditorUI({ initialTextValue, setEditorInstance }: EditorProps) { autocompleteInfo.clearSubscriptions(); window.removeEventListener('hashchange', onHashChange); if (editorInstanceRef.current) { + // Close autocomplete popup on unmount + editorInstanceRef.current?.getCoreEditor().detachCompleter(); editorInstanceRef.current.getCoreEditor().destroy(); } }; diff --git a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts index 2208de4a9dff3..45d6eb42a9693 100644 --- a/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts +++ b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts @@ -228,6 +228,10 @@ export class LegacyCoreEditor implements CoreEditor { ); } + detachCompleter() { + return (this.editor as unknown as { completer: { detach(): void } }).completer.detach(); + } + private forceRetokenize() { const session = this.editor.getSession(); return new Promise((resolve) => { diff --git a/src/plugins/console/public/types/core_editor.ts b/src/plugins/console/public/types/core_editor.ts index aa048256421bb..1c9d6352914a2 100644 --- a/src/plugins/console/public/types/core_editor.ts +++ b/src/plugins/console/public/types/core_editor.ts @@ -288,4 +288,9 @@ export interface CoreEditor { * Add folds at given ranges */ addFoldsAtRanges(foldRanges: Range[]): void; + + /** + * Detach autocomplete + */ + detachCompleter(): void; } From d35a687c2977aa30d5abd0b233ff2b7c6703cacd Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Thu, 14 Jul 2022 12:07:50 +0200 Subject: [PATCH 43/96] [Security] Dashboards table in landing page (#136221) * dashboard landing cards * useSecurityDashboards hook implementation * useSecurityDashboards hook implementation * add savedObjectsTagging to security * tests implemented * rename section titles * remove test code * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * PR suggestions Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/security_solution/kibana.json | 3 +- .../dashboards/dashboards_table.tsx | 36 ++++ .../containers/dashboards/translations.ts | 19 ++ .../use_security_dashboards.test.tsx | 203 ++++++++++++++++++ .../dashboards/use_security_dashboards.tsx | 121 +++++++++++ .../common/lib/kibana/__mocks__/index.ts | 5 + .../components/landing_links_images.test.tsx | 29 ++- .../components/landing_links_images.tsx | 73 ++++++- .../landing_pages/pages/dashboards.test.tsx | 128 +++++++++++ .../public/landing_pages/pages/dashboards.tsx | 25 ++- .../landing_pages/pages/translations.ts | 14 ++ .../security_solution/public/plugin.tsx | 11 +- .../plugins/security_solution/public/types.ts | 9 + 13 files changed, 663 insertions(+), 13 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/components/dashboards/dashboards_table.tsx create mode 100644 x-pack/plugins/security_solution/public/common/containers/dashboards/translations.ts create mode 100644 x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.test.tsx create mode 100644 x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.tsx create mode 100644 x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx diff --git a/x-pack/plugins/security_solution/kibana.json b/x-pack/plugins/security_solution/kibana.json index 756856c55c2f7..21684957598aa 100644 --- a/x-pack/plugins/security_solution/kibana.json +++ b/x-pack/plugins/security_solution/kibana.json @@ -42,7 +42,8 @@ "home", "telemetry", "dataViewFieldEditor", - "osquery" + "osquery", + "savedObjectsTaggingOss" ], "server": true, "ui": true, diff --git a/x-pack/plugins/security_solution/public/common/components/dashboards/dashboards_table.tsx b/x-pack/plugins/security_solution/public/common/components/dashboards/dashboards_table.tsx new file mode 100644 index 0000000000000..c59828002717d --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/dashboards/dashboards_table.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Search } from '@elastic/eui'; +import { EuiInMemoryTable } from '@elastic/eui'; +import { + useSecurityDashboardsTableItems, + useDashboardsTableColumns, +} from '../../containers/dashboards/use_security_dashboards'; + +const DASHBOARDS_TABLE_SEARCH: Search = { + box: { + incremental: true, + }, +} as const; + +export const DashboardsTable: React.FC = () => { + const items = useSecurityDashboardsTableItems(); + const columns = useDashboardsTableColumns(); + + return ( + + ); +}; diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/translations.ts b/x-pack/plugins/security_solution/public/common/containers/dashboards/translations.ts new file mode 100644 index 0000000000000..58254aa8fe9f6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/translations.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const DASHBOARD_TITLE = i18n.translate('xpack.securitySolution.dashboards.title', { + defaultMessage: 'Title', +}); + +export const DASHBOARDS_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.dashboards.description', + { + defaultMessage: 'Description', + } +); diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.test.tsx b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.test.tsx new file mode 100644 index 0000000000000..e626ee8863f18 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.test.tsx @@ -0,0 +1,203 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { renderHook, act } from '@testing-library/react-hooks'; +import { render } from '@testing-library/react'; +import type { DashboardStart } from '@kbn/dashboard-plugin/public'; +import { EuiBasicTable } from '@elastic/eui'; +import { useKibana } from '../../lib/kibana'; +import { TestProviders } from '../../mock/test_providers'; +import type { DashboardTableItem } from './use_security_dashboards'; +import { + useDashboardsTableColumns, + useSecurityDashboardsTableItems, +} from './use_security_dashboards'; + +jest.mock('../../lib/kibana'); + +const TAG_ID = 'securityTagId'; +const basicResponse: DashboardTableItem[] = [ + { + id: 'dashboardId1', + type: 'dashboard', + attributes: { + title: 'title1', + description: 'description1', + }, + references: [{ type: 'tag', id: TAG_ID, name: 'tagName' }], + }, + { + id: 'dashboardId2', + type: 'dashboard', + attributes: { + title: 'title2', + description: 'description2', + }, + references: [{ type: 'tag', id: TAG_ID, name: 'tagName' }], + }, +]; + +const renderUseSecurityDashboardsTableItems = async () => { + const renderedHook = renderHook(() => useSecurityDashboardsTableItems(), { + wrapper: TestProviders, + }); + await act(async () => { + // needed to let dashboard items to be updated from saved objects response + await renderedHook.waitForNextUpdate(); + }); + return renderedHook; +}; + +const renderUseDashboardsTableColumns = () => + renderHook(() => useDashboardsTableColumns(), { + wrapper: TestProviders, + }); + +describe('Security Dashboards hooks', () => { + const mockSavedObjectsFind = useKibana().services.savedObjects.client.find as jest.Mock; + mockSavedObjectsFind.mockImplementation(async (req) => { + if (req.type === 'tag') { + return { savedObjects: [{ id: TAG_ID }] }; + } else if (req.type === 'dashboard') { + return { savedObjects: basicResponse }; + } + return { savedObjects: [] }; + }); + + const mockGetRedirectUrl = jest.fn(() => '/path'); + useKibana().services.dashboard = { + locator: { getRedirectUrl: mockGetRedirectUrl }, + } as unknown as DashboardStart; + + const mockTaggingGetTableColumnDefinition = useKibana().services.savedObjectsTagging?.ui + .getTableColumnDefinition as jest.Mock; + const tagsColumn = { + field: 'id', // set existing field to prevent test error + name: 'Tags', + 'data-test-subj': 'dashboard-tags-field', + }; + mockTaggingGetTableColumnDefinition.mockReturnValue(tagsColumn); + + afterEach(() => { + mockTaggingGetTableColumnDefinition.mockClear(); + mockGetRedirectUrl.mockClear(); + mockSavedObjectsFind.mockClear(); + }); + + describe('useSecurityDashboardsTableItems', () => { + afterEach(() => { + mockSavedObjectsFind.mockClear(); + }); + + it('should request when renders', async () => { + await renderUseSecurityDashboardsTableItems(); + + expect(mockSavedObjectsFind).toHaveBeenCalledTimes(2); + expect(mockSavedObjectsFind).toHaveBeenCalledWith( + expect.objectContaining({ type: 'tag', search: 'security' }) + ); + expect(mockSavedObjectsFind).toHaveBeenCalledWith( + expect.objectContaining({ type: 'dashboard', hasReference: { id: TAG_ID, type: 'tag' } }) + ); + }); + + it('should not re-request when re-rendered', async () => { + const { rerender } = await renderUseSecurityDashboardsTableItems(); + + expect(mockSavedObjectsFind).toHaveBeenCalledTimes(2); + act(() => rerender()); + expect(mockSavedObjectsFind).toHaveBeenCalledTimes(2); + }); + + it('returns a memoized value', async () => { + const { result, rerender } = await renderUseSecurityDashboardsTableItems(); + + const result1 = result.current; + act(() => rerender()); + const result2 = result.current; + + expect(result1).toBe(result2); + }); + + it('should return dashboard items', async () => { + const { result } = await renderUseSecurityDashboardsTableItems(); + + const [dashboard1, dashboard2] = basicResponse; + expect(result.current).toStrictEqual([ + { + ...dashboard1, + title: dashboard1.attributes.title, + description: dashboard1.attributes.description, + }, + { + ...dashboard2, + title: dashboard2.attributes.title, + description: dashboard2.attributes.description, + }, + ]); + }); + }); + + describe('useDashboardsTableColumns', () => { + it('should call getTableColumnDefinition to get tags column', () => { + renderUseDashboardsTableColumns(); + expect(mockTaggingGetTableColumnDefinition).toHaveBeenCalled(); + }); + + it('should return dashboard columns', () => { + const { result } = renderUseDashboardsTableColumns(); + + expect(result.current).toEqual([ + expect.objectContaining({ + field: 'title', + name: 'Title', + }), + expect.objectContaining({ + field: 'description', + name: 'Description', + }), + expect.objectContaining(tagsColumn), + ]); + }); + + it('returns a memoized value', async () => { + const { result, rerender } = await renderUseSecurityDashboardsTableItems(); + + const result1 = result.current; + act(() => rerender()); + const result2 = result.current; + + expect(result1).toBe(result2); + }); + }); + + it('should render a table with consistent items and columns', async () => { + const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: columnsResult } = renderUseDashboardsTableColumns(); + + const result = render( + , + { + wrapper: TestProviders, + } + ); + + expect(result.getAllByText('Title').length).toBeGreaterThan(0); + expect(result.getAllByText('Description').length).toBeGreaterThan(0); + expect(result.getAllByText('Tags').length).toBeGreaterThan(0); + + expect(result.getByText('title1')).toBeInTheDocument(); + expect(result.getByText('description1')).toBeInTheDocument(); + expect(result.getByText('title2')).toBeInTheDocument(); + expect(result.getByText('description2')).toBeInTheDocument(); + + expect(result.queryAllByTestId('dashboard-title-field')).toHaveLength(2); + expect(result.queryAllByTestId('dashboard-description-field')).toHaveLength(2); + expect(result.queryAllByTestId('dashboard-tags-field')).toHaveLength(2); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.tsx b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.tsx new file mode 100644 index 0000000000000..19f05918d5278 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards.tsx @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { MouseEventHandler } from 'react'; +import React, { useState, useEffect, useMemo, useCallback } from 'react'; +import type { EuiBasicTableColumn } from '@elastic/eui'; +import type { SavedObjectAttributes } from '@kbn/securitysolution-io-ts-alerting-types'; +import type { SavedObjectsClientContract, SavedObject } from '@kbn/core/public'; +import { LinkAnchor } from '../../components/links'; +import { useKibana, useNavigateTo } from '../../lib/kibana'; +import * as i18n from './translations'; + +export interface DashboardTableItem extends SavedObject { + title?: string; + description?: string; +} + +const SECURITY_TAG_NAME = 'security' as const; +const EMPTY_DESCRIPTION = '-' as const; + +const getSecurityDashboardItems = async ( + savedObjectsClient: SavedObjectsClientContract +): Promise => { + if (savedObjectsClient) { + const tagResponse = await savedObjectsClient.find({ + type: 'tag', + searchFields: ['name'], + search: SECURITY_TAG_NAME, + }); + + const tagId = tagResponse.savedObjects[0]?.id; + + if (tagId) { + const dashboardsResponse = await savedObjectsClient.find({ + type: 'dashboard', + hasReference: { id: tagId, type: 'tag' }, + }); + + return dashboardsResponse.savedObjects.map((item) => ({ + ...item, + title: item.attributes.title?.toString() ?? undefined, + description: item.attributes.description?.toString() ?? undefined, + })); + } + } + return []; +}; + +export const useSecurityDashboardsTableItems = () => { + const [dashboardItems, setDashboardItems] = useState([]); + + const { + savedObjects: { client: savedObjectsClient }, + } = useKibana().services; + + useEffect(() => { + let ignore = false; + const fetchDashboards = async () => { + const items = await getSecurityDashboardItems(savedObjectsClient); + if (!ignore) { + setDashboardItems(items); + } + }; + + fetchDashboards(); + return () => { + ignore = true; + }; + }, [savedObjectsClient]); + + return dashboardItems; +}; + +export const useDashboardsTableColumns = (): Array> => { + const { savedObjectsTagging, dashboard: { locator } = {} } = useKibana().services; + const { navigateTo } = useNavigateTo(); + + const getNavigationHandler = useCallback( + (href: string): MouseEventHandler => + (ev) => { + ev.preventDefault(); + navigateTo({ url: href }); + }, + [navigateTo] + ); + + const columns = useMemo( + (): Array> => [ + { + field: 'title', + name: i18n.DASHBOARD_TITLE, + 'data-test-subj': 'dashboard-title-field', + render: (title: string, { id }) => { + const href = locator?.getRedirectUrl({ dashboardId: id }); + return href ? ( + + {title} + + ) : ( + title + ); + }, + }, + { + field: 'description', + name: i18n.DASHBOARDS_DESCRIPTION, + 'data-test-subj': 'dashboard-description-field', + render: (description: string) => description || EMPTY_DESCRIPTION, + }, + // adds the tags table column based on the saved object items + ...(savedObjectsTagging ? [savedObjectsTagging.ui.getTableColumnDefinition()] : []), + ], + [getNavigationHandler, locator, savedObjectsTagging] + ); + + return columns; +}; diff --git a/x-pack/plugins/security_solution/public/common/lib/kibana/__mocks__/index.ts b/x-pack/plugins/security_solution/public/common/lib/kibana/__mocks__/index.ts index 11fdb39b5315a..ae3e7bdcef3f7 100644 --- a/x-pack/plugins/security_solution/public/common/lib/kibana/__mocks__/index.ts +++ b/x-pack/plugins/security_solution/public/common/lib/kibana/__mocks__/index.ts @@ -53,6 +53,11 @@ export const useKibana = jest.fn().mockReturnValue({ }, }, timelines: createTGridMocks(), + savedObjectsTagging: { + ui: { + getTableColumnDefinition: jest.fn(), + }, + }, }, }); export const useUiSetting = jest.fn(createUseUiSettingMock()); diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx index 377c7efe0e3fe..b14e62f222576 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { SecurityPageName } from '../../app/types'; import type { NavLinkItem } from '../../common/components/navigation/types'; import { TestProviders } from '../../common/mock'; -import { LandingLinksImages } from './landing_links_images'; +import { LandingLinksImages, LandingImageCards } from './landing_links_images'; const DEFAULT_NAV_ITEM: NavLinkItem = { id: SecurityPageName.overview, @@ -57,3 +57,30 @@ describe('LandingLinksImages', () => { expect(getByTestId('LandingLinksImage')).toHaveAttribute('src', image); }); }); + +describe('LandingImageCards', () => { + it('renders', () => { + const title = 'test label'; + + const { queryByText } = render( + + + + ); + + expect(queryByText(title)).toBeInTheDocument(); + }); + + it('renders image', () => { + const image = 'test_image.jpeg'; + const title = 'TEST_LABEL'; + + const { getByTestId } = render( + + + + ); + + expect(getByTestId('LandingImageCard-image')).toHaveAttribute('src', image); + }); +}); diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx index 9a6787083f848..5f54d4c53693f 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx @@ -4,13 +4,21 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiImage, EuiPanel, EuiText, EuiTitle } from '@elastic/eui'; +import { + EuiCard, + EuiFlexGroup, + EuiFlexItem, + EuiImage, + EuiPanel, + EuiText, + EuiTitle, +} from '@elastic/eui'; import React from 'react'; import styled from 'styled-components'; import { withSecuritySolutionLink } from '../../common/components/links'; import type { NavLinkItem } from '../../common/components/navigation/types'; -interface LandingLinksImagesProps { +interface LandingImagesProps { items: NavLinkItem[]; } @@ -31,13 +39,13 @@ const StyledFlexItem = styled(EuiFlexItem)` align-items: center; `; -const SecuritySolutionLink = withSecuritySolutionLink(Link); - const Content = styled(EuiFlexItem)` padding-left: ${({ theme }) => theme.eui.euiSizeS}; `; -export const LandingLinksImages: React.FC = ({ items }) => ( +const SecuritySolutionLink = withSecuritySolutionLink(Link); + +export const LandingLinksImages: React.FC = ({ items }) => ( {items.map(({ title, description, image, id }) => ( @@ -71,3 +79,58 @@ export const LandingLinksImages: React.FC = ({ items }) ))} ); + +const LandingImageCardItem = styled(EuiFlexItem)` + max-width: 364px; +`; + +const LandingCardDescripton = styled(EuiText)` + padding-top: ${({ theme }) => theme.eui.euiSizeXS}; +`; + +// Needed to use the primary color in the title underlining on hover +const PrimaryTitleCard = styled(EuiCard)` + .euiCard__title { + color: ${(props) => props.theme.eui.euiColorPrimary}; + } +`; + +const SecuritySolutionCard = withSecuritySolutionLink(PrimaryTitleCard); + +export const LandingImageCards: React.FC = React.memo(({ items }) => ( + + {items.map(({ id, image, title, description }) => ( + + + ) + } + title={ + +

{title}

+
+ } + description={ + + {description} + + } + /> +
+ ))} +
+)); + +LandingImageCards.displayName = 'LandingImageCards'; diff --git a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx new file mode 100644 index 0000000000000..81f2c59e9bd85 --- /dev/null +++ b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { fireEvent, render } from '@testing-library/react'; +import React from 'react'; +import { SecurityPageName } from '../../app/types'; +import { TestProviders } from '../../common/mock'; +import { DashboardsLandingPage } from './dashboards'; +import type { NavLinkItem } from '../../common/components/navigation/types'; + +jest.mock('../../common/utils/route/spy_routes', () => ({ SpyRoute: () => null })); + +const OVERVIEW_ITEM_LABEL = 'Overview'; +const DETECTION_RESPONSE_ITEM_LABEL = 'Detection & Response'; + +const defaultAppDashboardsLink: NavLinkItem = { + id: SecurityPageName.dashboardsLanding, + title: 'Dashboards', + links: [ + { + id: SecurityPageName.overview, + title: OVERVIEW_ITEM_LABEL, + description: '', + icon: 'testIcon1', + }, + { + id: SecurityPageName.detectionAndResponse, + title: DETECTION_RESPONSE_ITEM_LABEL, + description: '', + icon: 'testIcon2', + }, + ], +}; + +const mockAppManageLink = jest.fn(() => defaultAppDashboardsLink); +jest.mock('../../common/components/navigation/nav_links', () => ({ + useAppRootNavLink: () => mockAppManageLink(), +})); + +const dashboardTableItems = [ + { + id: 'id 1', + title: 'dashboard title 1', + description: 'dashboard desc 1', + }, + { + id: 'id 2', + title: 'dashboard title 2', + description: 'dashboard desc 2', + }, +]; +const mockUseSecurityDashboardsTableItems = jest.fn(() => dashboardTableItems); +jest.mock('../../common/containers/dashboards/use_security_dashboards', () => { + const actual = jest.requireActual('../../common/containers/dashboards/use_security_dashboards'); + return { + ...actual, + useSecurityDashboardsTableItems: () => mockUseSecurityDashboardsTableItems(), + }; +}); + +const renderDashboardLanding = () => render(, { wrapper: TestProviders }); + +describe('Dashboards landing', () => { + it('should render items', () => { + const { queryByText } = renderDashboardLanding(); + + expect(queryByText(OVERVIEW_ITEM_LABEL)).toBeInTheDocument(); + expect(queryByText(DETECTION_RESPONSE_ITEM_LABEL)).toBeInTheDocument(); + }); + + it('should render items in the same order as defined', () => { + mockAppManageLink.mockReturnValueOnce({ + ...defaultAppDashboardsLink, + }); + const { queryAllByTestId } = renderDashboardLanding(); + + const renderedItems = queryAllByTestId('LandingImageCard-item'); + + expect(renderedItems[0]).toHaveTextContent(OVERVIEW_ITEM_LABEL); + expect(renderedItems[1]).toHaveTextContent(DETECTION_RESPONSE_ITEM_LABEL); + }); + + it('should not render items if all items filtered', () => { + mockAppManageLink.mockReturnValueOnce({ + ...defaultAppDashboardsLink, + links: [], + }); + const { queryByText } = renderDashboardLanding(); + + expect(queryByText(OVERVIEW_ITEM_LABEL)).not.toBeInTheDocument(); + expect(queryByText(DETECTION_RESPONSE_ITEM_LABEL)).not.toBeInTheDocument(); + }); + + it('should render dashboards table', () => { + const result = renderDashboardLanding(); + + expect(result.getByTestId('dashboards-table')).toBeInTheDocument(); + }); + + it('should render dashboards table rows', () => { + const result = renderDashboardLanding(); + + expect(mockUseSecurityDashboardsTableItems).toHaveBeenCalled(); + + expect(result.queryAllByText(dashboardTableItems[0].title).length).toBeGreaterThan(0); + expect(result.queryAllByText(dashboardTableItems[0].description).length).toBeGreaterThan(0); + + expect(result.queryAllByText(dashboardTableItems[1].title).length).toBeGreaterThan(0); + expect(result.queryAllByText(dashboardTableItems[1].description).length).toBeGreaterThan(0); + }); + + it('should render dashboards table rows filtered by search term', () => { + const result = renderDashboardLanding(); + + const input = result.getByRole('searchbox'); + fireEvent.change(input, { target: { value: dashboardTableItems[0].title } }); + + expect(result.queryAllByText(dashboardTableItems[0].title).length).toBeGreaterThan(0); + expect(result.queryAllByText(dashboardTableItems[0].description).length).toBeGreaterThan(0); + + expect(result.queryByText(dashboardTableItems[1].title)).not.toBeInTheDocument(); + expect(result.queryByText(dashboardTableItems[1].description)).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx index 1d46aa6706a26..15afdedb4dd93 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx @@ -4,22 +4,39 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { EuiHorizontalRule, EuiSpacer, EuiTitle } from '@elastic/eui'; import React from 'react'; import { SecurityPageName } from '../../app/types'; +import { DashboardsTable } from '../../common/components/dashboards/dashboards_table'; import { HeaderPage } from '../../common/components/header_page'; import { useAppRootNavLink } from '../../common/components/navigation/nav_links'; import { SecuritySolutionPageWrapper } from '../../common/components/page_wrapper'; import { SpyRoute } from '../../common/utils/route/spy_routes'; -import { LandingLinksImages } from '../components/landing_links_images'; -import { DASHBOARDS_PAGE_TITLE } from './translations'; +import { LandingImageCards } from '../components/landing_links_images'; +import * as i18n from './translations'; export const DashboardsLandingPage = () => { const dashboardLinks = useAppRootNavLink(SecurityPageName.dashboardsLanding)?.links ?? []; return ( - - + + + + +

{i18n.DASHBOARDS_PAGE_SECTION_DEFAULT}

+
+ + + + + +

{i18n.DASHBOARDS_PAGE_SECTION_CUSTOM}

+
+ + + +
); diff --git a/x-pack/plugins/security_solution/public/landing_pages/pages/translations.ts b/x-pack/plugins/security_solution/public/landing_pages/pages/translations.ts index 4986c6b5f31ec..9b8b8f71ce509 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/pages/translations.ts +++ b/x-pack/plugins/security_solution/public/landing_pages/pages/translations.ts @@ -21,6 +21,20 @@ export const DASHBOARDS_PAGE_TITLE = i18n.translate( } ); +export const DASHBOARDS_PAGE_SECTION_DEFAULT = i18n.translate( + 'xpack.securitySolution.landing.dashboards.section.default', + { + defaultMessage: 'DEFAULT', + } +); + +export const DASHBOARDS_PAGE_SECTION_CUSTOM = i18n.translate( + 'xpack.securitySolution.landing.dashboards.section.custom', + { + defaultMessage: 'CUSTOM', + } +); + export const MANAGE_PAGE_TITLE = i18n.translate('xpack.securitySolution.landing.manage.pageTitle', { defaultMessage: 'Manage', }); diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 986667363f7b6..39892dcd9b3ea 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -31,6 +31,7 @@ import type { AppObservableLibs, SubPlugins, StartedSubPlugins, + StartPluginsDependencies, } from './types'; import { initTelemetry } from './common/lib/telemetry'; import { KibanaServices } from './common/lib/kibana/services'; @@ -94,7 +95,10 @@ export class Plugin implements IPlugin, plugins: SetupPlugins): PluginSetup { + public setup( + core: CoreSetup, + plugins: SetupPlugins + ): PluginSetup { initTelemetry( { usageCollection: plugins.usageCollection, @@ -122,13 +126,16 @@ export class Plugin implements IPlugin = (async () => { - const [coreStart, startPlugins] = await core.getStartServices(); + const [coreStart, startPluginsDeps] = await core.getStartServices(); const { apm } = await import('@elastic/apm-rum'); + const { savedObjectsTaggingOss, ...startPlugins } = startPluginsDeps; + const services: StartServices = { ...coreStart, ...startPlugins, apm, + savedObjectsTagging: savedObjectsTaggingOss.getTaggingApi(), storage: this.storage, security: plugins.security, }; diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts index 1a32eefa983e9..d1b6875635372 100644 --- a/x-pack/plugins/security_solution/public/types.ts +++ b/x-pack/plugins/security_solution/public/types.ts @@ -34,6 +34,10 @@ import type { DashboardStart } from '@kbn/dashboard-plugin/public'; import type { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { ApmBase } from '@elastic/apm-rum'; +import type { + SavedObjectsTaggingApi, + SavedObjectTaggingOssPluginStart, +} from '@kbn/saved-objects-tagging-oss-plugin/public'; import type { ResolverPluginSetup } from './resolver/types'; import type { Inspect } from '../common/search_strategy'; import type { Detections } from './detections'; @@ -83,10 +87,15 @@ export interface StartPlugins { security: SecurityPluginSetup; } +export interface StartPluginsDependencies extends StartPlugins { + savedObjectsTaggingOss: SavedObjectTaggingOssPluginStart; +} + export type StartServices = CoreStart & StartPlugins & { storage: Storage; apm: ApmBase; + savedObjectsTagging?: SavedObjectsTaggingApi; }; export interface PluginSetup { From ac434b3433c82d2e267746c8598972d2f1fdcbca Mon Sep 17 00:00:00 2001 From: Pete Harverson Date: Thu, 14 Jul 2022 11:33:58 +0100 Subject: [PATCH 44/96] [ML] Add action to view datafeed counts chart to jobs list rows (#136274) * [ML] Add action to view datafeed counts chart to jobs list rows * [ML] Update functional tests for permissions and job actions * [ML] Edit to test in job_table service message * [ML] Update translations * [ML] type change in datafeed_chart_flyout --- .../annotations_table/annotations_table.js | 30 ++++++- .../datafeed_chart_flyout.tsx | 86 +++++++++++++++++++ .../components/datafeed_chart_flyout/index.ts | 2 +- .../components/job_actions/management.js | 21 +++++ .../components/job_details/job_details.js | 33 +++---- .../job_details/job_details_pane.js | 2 +- .../components/jobs_list/jobs_list.js | 2 + .../jobs_list_view/jobs_list_view.js | 16 +++- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../apps/ml/permissions/full_ml_access.ts | 2 + .../apps/ml/permissions/read_ml_access.ts | 16 +++- .../test/functional/services/ml/job_table.ts | 25 ++++++ 14 files changed, 209 insertions(+), 32 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js index bbf5dc81768a1..a0a364e3af0f8 100644 --- a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js +++ b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js @@ -51,6 +51,7 @@ import { ML_APP_LOCATOR, ML_PAGES } from '../../../../../common/constants/locato import { timeFormatter } from '../../../../../common/util/date_utils'; import { MlAnnotationUpdatesContext } from '../../../contexts/ml/ml_annotation_updates_context'; import { DatafeedChartFlyout } from '../../../jobs/jobs_list/components/datafeed_chart_flyout'; +import { RevertModelSnapshotFlyout } from '../../model_snapshots/revert_model_snapshot_flyout'; const editAnnotationsText = ( ); @@ -72,9 +73,14 @@ const CURRENT_SERIES = 'current_series'; class AnnotationsTableUI extends Component { static propTypes = { annotations: PropTypes.array, + annotationUpdatesService: PropTypes.object.isRequired, jobs: PropTypes.array, + detectors: PropTypes.array, isSingleMetricViewerLinkVisible: PropTypes.bool, isNumberBadgeVisible: PropTypes.bool, + refreshJobList: PropTypes.func, + chartDetails: PropTypes.object, + kibana: PropTypes.object, }; constructor(props) { @@ -91,6 +97,8 @@ class AnnotationsTableUI extends Component { ? this.props.jobs[0].job_id : undefined, datafeedFlyoutVisible: false, + modelSnapshot: null, + revertSnapshotFlyoutVisible: false, datafeedEnd: null, }; this.sorting = { @@ -727,10 +735,30 @@ class AnnotationsTableUI extends Component { datafeedFlyoutVisible: false, }); }} + onModelSnapshotAnnotationClick={(modelSnapshot) => { + this.setState({ + modelSnapshot, + revertSnapshotFlyoutVisible: true, + datafeedFlyoutVisible: false, + }); + }} end={this.state.datafeedEnd} jobId={this.state.jobId} /> ) : null} + {this.state.revertSnapshotFlyoutVisible === true && this.state.modelSnapshot !== null ? ( + { + this.setState({ + revertSnapshotFlyoutVisible: false, + }); + }} + refresh={this.props.refreshJobList ?? (() => {})} + /> + ) : null} ); } diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/datafeed_chart_flyout.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/datafeed_chart_flyout.tsx index cce322156af3a..8c4b96207b3a5 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/datafeed_chart_flyout.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/datafeed_chart_flyout.tsx @@ -50,12 +50,14 @@ import { DATAFEED_STATE } from '../../../../../../common/constants/states'; import { CombinedJobWithStats, ModelSnapshot, + MlSummaryJob, } from '../../../../../../common/types/anomaly_detection_jobs'; import { JobMessage } from '../../../../../../common/types/audit_message'; import { LineAnnotationDatumWithModelSnapshot } from '../../../../../../common/types/results'; import { useToastNotificationService } from '../../../../services/toast_notification_service'; import { useMlApiContext } from '../../../../contexts/kibana'; import { useCurrentEuiTheme } from '../../../../components/color_range_legend'; +import { RevertModelSnapshotFlyout } from '../../../../components/model_snapshots/revert_model_snapshot_flyout'; import { JobMessagesPane } from '../job_details/job_messages_pane'; import { EditQueryDelay } from './edit_query_delay'; import { CHART_DIRECTION, ChartDirectionType, CHART_SIZE } from './constants'; @@ -595,3 +597,87 @@ export const DatafeedChartFlyout: FC = ({ ); }; + +type ShowFunc = (jobUpdate: MlSummaryJob) => void; + +interface JobListDatafeedChartFlyoutProps { + setShowFunction: (showFunc: ShowFunc) => void; + unsetShowFunction: () => void; + refreshJobs(): void; +} + +/** + * Component to wire the datafeed chart flyout with the Job list view. + * @param setShowFunction function to show the flyout + * @param unsetShowFunction function called when flyout is closed + * @param refreshJobs function to refresh the jobs list + * @constructor + */ +export const JobListDatafeedChartFlyout: FC = ({ + setShowFunction, + unsetShowFunction, + refreshJobs, +}) => { + const [isVisible, setIsVisible] = useState(false); + const [job, setJob] = useState(); + const [jobWithStats, setJobWithStats] = useState(); + + const [isRevertModelSnapshotFlyoutVisible, setIsRevertModelSnapshotFlyoutVisible] = + useState(false); + const [snapshot, setSnapshot] = useState(null); + + const showFlyoutCallback = useCallback((jobUpdate: MlSummaryJob) => { + setJob(jobUpdate); + setIsVisible(true); + }, []); + + const showRevertModelSnapshot = useCallback(async () => { + // Need to load the full job with stats, as the model snapshot + // flyout needs the timestamp of the last result. + const fullJob: CombinedJobWithStats = await loadFullJob(job!.id); + setJobWithStats(fullJob); + setIsRevertModelSnapshotFlyoutVisible(true); + }, [job]); + + useEffect(() => { + setShowFunction(showFlyoutCallback); + return () => { + unsetShowFunction(); + }; + }, []); + + if (isVisible === true && job !== undefined) { + return ( + setIsVisible(false)} + onModelSnapshotAnnotationClick={(modelSnapshot) => { + setIsVisible(false); + setSnapshot(modelSnapshot); + showRevertModelSnapshot(); + }} + end={job.latestResultsTimestampMs || Date.now()} + jobId={job.id} + /> + ); + } + + if ( + isRevertModelSnapshotFlyoutVisible === true && + jobWithStats !== undefined && + snapshot !== null + ) { + return ( + { + setIsRevertModelSnapshotFlyoutVisible(false); + }} + refresh={refreshJobs} + /> + ); + } + + return null; +}; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/index.ts b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/index.ts index ba1b6ae0b9707..1606c9491dee9 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/index.ts +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/datafeed_chart_flyout/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { DatafeedChartFlyout } from './datafeed_chart_flyout'; +export { DatafeedChartFlyout, JobListDatafeedChartFlyout } from './datafeed_chart_flyout'; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js index 5b8b4b386213d..29045ad826bdf 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js @@ -23,6 +23,7 @@ import { isManagedJob } from '../../../jobs_utils'; export function actionsMenuContent( showEditJobFlyout, + showDatafeedChartFlyout, showDeleteJobModal, showResetJobModal, showStartDatafeedModal, @@ -34,6 +35,7 @@ export function actionsMenuContent( const canCreateJob = checkPermission('canCreateJob') && mlNodesAvailable(); const canUpdateJob = checkPermission('canUpdateJob'); const canDeleteJob = checkPermission('canDeleteJob'); + const canGetDatafeeds = checkPermission('canGetDatafeeds'); const canUpdateDatafeed = checkPermission('canUpdateDatafeed'); const canStartStopDatafeed = checkPermission('canStartStopDatafeed') && mlNodesAvailable(); const canCloseJob = checkPermission('canCloseJob') && mlNodesAvailable(); @@ -152,6 +154,25 @@ export function actionsMenuContent( }, 'data-test-subj': 'mlActionButtonCloneJob', }, + { + name: i18n.translate('xpack.ml.jobsList.managementActions.viewDatafeedCountsLabel', { + defaultMessage: 'View datafeed counts', + }), + description: i18n.translate( + 'xpack.ml.jobsList.managementActions.viewDatafeedCountsDescription', + { + defaultMessage: 'View datafeed counts', + } + ), + icon: 'visAreaStacked', + enabled: () => canGetDatafeeds, + available: () => canGetDatafeeds, + onClick: (item) => { + showDatafeedChartFlyout(item); + closeMenu(); + }, + 'data-test-subj': 'mlActionButtonViewDatafeedChart', + }, { name: i18n.translate('xpack.ml.jobsList.managementActions.editJobLabel', { defaultMessage: 'Edit job', diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js index 5a62800a6ce39..8d98052eab26c 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js @@ -9,7 +9,7 @@ import PropTypes from 'prop-types'; import React, { Component, Fragment } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import { EuiButtonIcon, EuiTabbedContent, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; +import { EuiButtonEmpty, EuiTabbedContent, EuiLoadingSpinner } from '@elastic/eui'; import { extractJobDetails } from './extract_job_details'; import { JsonPane } from './json_tab'; @@ -84,27 +84,20 @@ export class JobDetailsUI extends Component { } = extractJobDetails(job, basePath, refreshJobList); datafeed.titleAction = ( - + + this.setState({ + datafeedChartFlyoutVisible: true, + }) } + iconType="visAreaStacked" + size="s" > - - this.setState({ - datafeedChartFlyoutVisible: true, - }) - } + - + ); const tabs = [ @@ -248,7 +241,7 @@ export class JobDetailsUI extends Component { }), content: ( - + ), diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details_pane.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details_pane.js index 4046f4d5d8071..c70c049dd7489 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details_pane.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details_pane.js @@ -44,7 +44,7 @@ function Section({ section }) { return ( - +

{section.title}

diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js index a475f39a8c10b..09a783dd5ad7f 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js @@ -330,6 +330,7 @@ export class JobsList extends Component { ), actions: actionsMenuContent( this.props.showEditJobFlyout, + this.props.showDatafeedChartFlyout, this.props.showDeleteJobModal, this.props.showResetJobModal, this.props.showStartDatafeedModal, @@ -406,6 +407,7 @@ JobsList.propTypes = { toggleRow: PropTypes.func.isRequired, selectJobChange: PropTypes.func.isRequired, showEditJobFlyout: PropTypes.func, + showDatafeedChartFlyout: PropTypes.func, showDeleteJobModal: PropTypes.func, showStartDatafeedModal: PropTypes.func, showCloseJobsConfirmModal: PropTypes.func, diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js index 5e65a9bec23d6..0eb7f810932fb 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js @@ -14,6 +14,7 @@ import { JobsList } from '../jobs_list'; import { JobDetails } from '../job_details'; import { JobFilterBar } from '../job_filter_bar'; import { EditJobFlyout } from '../edit_job_flyout'; +import { JobListDatafeedChartFlyout } from '../datafeed_chart_flyout'; import { DeleteJobModal } from '../delete_job_modal'; import { ResetJobModal } from '../reset_job_modal'; import { StartDatafeedModal } from '../start_datafeed_modal'; @@ -53,6 +54,7 @@ export class JobsListView extends Component { this.updateFunctions = {}; this.showEditJobFlyout = () => {}; + this.showDatafeedChartFlyout = () => {}; this.showStopDatafeedsConfirmModal = () => {}; this.showCloseJobsConfirmModal = () => {}; this.showDeleteJobModal = () => {}; @@ -178,6 +180,13 @@ export class JobsListView extends Component { this.showEditJobFlyout = () => {}; }; + setShowDatafeedChartFlyoutFunction = (func) => { + this.showDatafeedChartFlyout = func; + }; + unsetShowDatafeedChartFlyoutFunction = () => { + this.showDatafeedChartFlyout = () => {}; + }; + setShowStopDatafeedsConfirmModalFunction = (func) => { this.showStopDatafeedsConfirmModal = func; }; @@ -437,6 +446,7 @@ export class JobsListView extends Component { toggleRow={this.toggleRow} selectJobChange={this.selectJobChange} showEditJobFlyout={this.showEditJobFlyout} + showDatafeedChartFlyout={this.showDatafeedChartFlyout} showDeleteJobModal={this.showDeleteJobModal} showResetJobModal={this.showResetJobModal} showCloseJobsConfirmModal={this.showCloseJobsConfirmModal} @@ -459,13 +469,17 @@ export class JobsListView extends Component { refreshJobs={() => this.refreshJobSummaryList(true)} allJobIds={jobIds} /> + this.refreshJobSummaryList(true)} + /> this.refreshJobSummaryList(true)} allJobIds={jobIds} /> - Date: Thu, 14 Jul 2022 13:35:35 +0300 Subject: [PATCH 45/96] [Cloud Posture] Refactor status and query logic out of CspPageTemplate (#136104) --- .../components/cloud_posture_page.test.tsx | 276 ++++++++++++++++++ .../public/components/cloud_posture_page.tsx | 193 ++++++++++++ .../public/components/csp_loading_state.tsx | 1 + .../components/csp_page_template.test.tsx | 250 +--------------- .../public/components/csp_page_template.tsx | 178 +---------- .../public/components/translations.ts | 36 --- .../compliance_dashboard.test.tsx | 19 +- .../compliance_dashboard.tsx | 88 +++--- .../compliance_dashboard/test_subjects.ts | 2 +- .../public/pages/findings/findings.tsx | 79 ++--- .../public/pages/rules/index.tsx | 39 +-- .../public/pages/rules/rules.test.tsx | 28 -- .../translations/translations/fr-FR.json | 10 - .../translations/translations/ja-JP.json | 10 - .../translations/translations/zh-CN.json | 10 - 15 files changed, 590 insertions(+), 629 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.test.tsx create mode 100644 x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx delete mode 100644 x-pack/plugins/cloud_security_posture/public/components/translations.ts diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.test.tsx new file mode 100644 index 0000000000000..3ca9e9cf2d02c --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.test.tsx @@ -0,0 +1,276 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Chance from 'chance'; +import { useCisKubernetesIntegration } from '../common/api/use_cis_kubernetes_integration'; +import { + DEFAULT_NO_DATA_TEST_SUBJECT, + ERROR_STATE_TEST_SUBJECT, + isCommonError, + LOADING_STATE_TEST_SUBJECT, + PACKAGE_NOT_INSTALLED_TEST_SUBJECT, +} from './cloud_posture_page'; +import { createReactQueryResponse } from '../test/fixtures/react_query'; +import { TestProvider } from '../test/test_provider'; +import { coreMock } from '@kbn/core/public/mocks'; +import { render, screen } from '@testing-library/react'; +import React, { ComponentProps } from 'react'; +import { UseQueryResult } from 'react-query'; +import { CloudPosturePage } from './cloud_posture_page'; +import { NoDataPage } from '@kbn/kibana-react-plugin/public'; + +const chance = new Chance(); +jest.mock('../common/api/use_cis_kubernetes_integration'); + +describe('', () => { + beforeEach(() => { + jest.resetAllMocks(); + // if package installation status is 'not_installed', CloudPosturePage will render a noDataConfig prompt + (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ + isSuccess: true, + isLoading: false, + data: { item: { status: 'installed' } }, + })); + }); + + const renderCloudPosturePage = ( + props: ComponentProps = { children: null } + ) => { + const mockCore = coreMock.createStart(); + + render( + + + + ); + }; + + it('renders children if integration is installed', () => { + const children = chance.sentence(); + renderCloudPosturePage({ children }); + + expect(screen.getByText(children)).toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders integrations installation prompt if integration is not installed', () => { + (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ + isSuccess: true, + isLoading: false, + data: { item: { status: 'not_installed' } }, + })); + + const children = chance.sentence(); + renderCloudPosturePage({ children }); + + expect(screen.getByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders default loading state when the integration query is loading', () => { + (useCisKubernetesIntegration as jest.Mock).mockImplementation( + () => + createReactQueryResponse({ + status: 'loading', + }) as unknown as UseQueryResult + ); + + const children = chance.sentence(); + renderCloudPosturePage({ children }); + + expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders default error state when the integration query has an error', () => { + (useCisKubernetesIntegration as jest.Mock).mockImplementation( + () => + createReactQueryResponse({ + status: 'error', + error: new Error('error'), + }) as unknown as UseQueryResult + ); + + const children = chance.sentence(); + renderCloudPosturePage({ children }); + + expect(screen.getByTestId(ERROR_STATE_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders default loading text when query isLoading', () => { + const query = createReactQueryResponse({ + status: 'loading', + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ children, query }); + + expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders default loading text when query is idle', () => { + const query = createReactQueryResponse({ + status: 'idle', + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ children, query }); + + expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders default error texts when query isError', () => { + const error = chance.sentence(); + const message = chance.sentence(); + const statusCode = chance.integer(); + + const query = createReactQueryResponse({ + status: 'error', + error: { + body: { + error, + message, + statusCode, + }, + }, + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ children, query }); + + [error, message, statusCode].forEach((text) => + expect(screen.getByText(text, { exact: false })).toBeInTheDocument() + ); + expect(screen.getByTestId(ERROR_STATE_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('prefers custom error render', () => { + const error = chance.sentence(); + const message = chance.sentence(); + const statusCode = chance.integer(); + + const query = createReactQueryResponse({ + status: 'error', + error: { + body: { + error, + message, + statusCode, + }, + }, + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ + children, + query, + errorRender: (err) =>
{isCommonError(err) && err.body.message}
, + }); + + expect(screen.getByText(message)).toBeInTheDocument(); + [error, statusCode].forEach((text) => expect(screen.queryByText(text)).not.toBeInTheDocument()); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('prefers custom loading render', () => { + const loading = chance.sentence(); + + const query = createReactQueryResponse({ + status: 'loading', + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ + children, + query, + loadingRender: () =>
{loading}
, + }); + + expect(screen.getByText(loading)).toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('renders no data prompt when query data is undefined', () => { + const query = createReactQueryResponse({ + status: 'success', + data: undefined, + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ children, query }); + + expect(screen.getByTestId(DEFAULT_NO_DATA_TEST_SUBJECT)).toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); + + it('prefers custom no data prompt', () => { + const pageTitle = chance.sentence(); + const solution = chance.sentence(); + const docsLink = chance.sentence(); + const noDataRenderer = () => ( + + ); + + const query = createReactQueryResponse({ + status: 'success', + data: undefined, + }) as unknown as UseQueryResult; + + const children = chance.sentence(); + renderCloudPosturePage({ + children, + query, + noDataRenderer, + }); + + expect(screen.getByText(pageTitle)).toBeInTheDocument(); + expect(screen.getAllByText(solution, { exact: false })[0]).toBeInTheDocument(); + expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByText(children)).not.toBeInTheDocument(); + expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx new file mode 100644 index 0000000000000..e56795d3b1380 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import type { UseQueryResult } from 'react-query'; +import { EuiEmptyPrompt } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { NoDataPage } from '@kbn/kibana-react-plugin/public'; +import { css } from '@emotion/react'; +import { CspLoadingState } from './csp_loading_state'; +import { useCisKubernetesIntegration } from '../common/api/use_cis_kubernetes_integration'; +import { useCISIntegrationLink } from '../common/navigation/use_navigate_to_cis_integration'; + +export const LOADING_STATE_TEST_SUBJECT = 'cloud_posture_page_loading'; +export const ERROR_STATE_TEST_SUBJECT = 'cloud_posture_page_error'; +export const PACKAGE_NOT_INSTALLED_TEST_SUBJECT = 'cloud_posture_page_package_not_installed'; +export const DEFAULT_NO_DATA_TEST_SUBJECT = 'cloud_posture_page_no_data'; + +interface CommonError { + body: { + error: string; + message: string; + statusCode: number; + }; +} + +export const isCommonError = (error: unknown): error is CommonError => { + if ( + !(error as any)?.body || + !(error as any)?.body?.error || + !(error as any)?.body?.message || + !(error as any)?.body?.statusCode + ) { + return false; + } + + return true; +}; + +const packageNotInstalledRenderer = (cisIntegrationLink?: string) => ( + +); + +const defaultLoadingRenderer = () => ( + + + +); + +const defaultErrorRenderer = (error: unknown) => ( + + + + } + body={ + isCommonError(error) ? ( +

+ +

+ ) : undefined + } + /> +); + +const defaultNoDataRenderer = () => { + return ( + + ); +}; + +interface CloudPosturePageProps { + children: React.ReactNode; + query?: UseQueryResult; + loadingRender?: () => React.ReactNode; + errorRender?: (error: TError) => React.ReactNode; + noDataRenderer?: () => React.ReactNode; +} + +export const CloudPosturePage = ({ + children, + query, + loadingRender = defaultLoadingRenderer, + errorRender = defaultErrorRenderer, + noDataRenderer = defaultNoDataRenderer, +}: CloudPosturePageProps) => { + const cisKubernetesPackageInfo = useCisKubernetesIntegration(); + const cisIntegrationLink = useCISIntegrationLink(); + + const render = () => { + if (cisKubernetesPackageInfo.isError) { + return defaultErrorRenderer(cisKubernetesPackageInfo.error); + } + + if (cisKubernetesPackageInfo.isLoading || cisKubernetesPackageInfo.isIdle) { + return defaultLoadingRenderer(); + } + + if (cisKubernetesPackageInfo.data.item.status !== 'installed') { + return packageNotInstalledRenderer(cisIntegrationLink); + } + + if (!query) { + return children; + } + + if (query.isError) { + return errorRender(query.error); + } + + if (query.isLoading || query.isIdle) { + return loadingRender(); + } + + if (!query.data) { + return noDataRenderer(); + } + + return children; + }; + + return <>{render()}; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/csp_loading_state.tsx b/x-pack/plugins/cloud_security_posture/public/components/csp_loading_state.tsx index 21a01c9f52ace..7b2e9f0f03ae7 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/csp_loading_state.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/csp_loading_state.tsx @@ -18,6 +18,7 @@ export const CspLoadingState: React.FunctionComponent<{ ['data-test-subj']?: str { it('maps navigation items to side navigation items', () => { const navigationItem = createNavigationItemFixture(); @@ -52,230 +31,3 @@ describe('getSideNavItems', () => { expect(sideNavItems).toHaveLength(0); }); }); - -describe('', () => { - beforeEach(() => { - jest.resetAllMocks(); - // if package installation status is 'not_installed', CspPageTemplate will render a noDataConfig prompt - (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ - isSuccess: true, - isLoading: false, - data: { item: { status: 'installed' } }, - })); - }); - - const renderCspPageTemplate = (props: ComponentProps = {}) => { - const mockCore = coreMock.createStart(); - - render( - - - - ); - }; - - it('renders children if integration is installed', () => { - const children = chance.sentence(); - renderCspPageTemplate({ children }); - - expect(screen.getByText(children)).toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('renders integrations installation prompt if integration is not installed', () => { - (useCisKubernetesIntegration as jest.Mock).mockImplementation(() => ({ - isSuccess: true, - isLoading: false, - data: { item: { status: 'not_installed' } }, - })); - - const children = chance.sentence(); - renderCspPageTemplate({ children }); - - Object.values(PACKAGE_NOT_INSTALLED_TEXT).forEach((text) => - expect(screen.getAllByText(text)[0]).toBeInTheDocument() - ); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - }); - - it('renders default loading text when query isLoading', () => { - const query = createReactQueryResponse({ - status: 'loading', - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ children, query }); - - expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('renders default loading text when query is idle', () => { - const query = createReactQueryResponse({ - status: 'idle', - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ children, query }); - - expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('renders default error texts when query isError', () => { - const error = chance.sentence(); - const message = chance.sentence(); - const statusCode = chance.integer(); - - const query = createReactQueryResponse({ - status: 'error', - error: { - body: { - error, - message, - statusCode, - }, - }, - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ children, query }); - - [error, message, statusCode].forEach((text) => - expect(screen.getByText(text, { exact: false })).toBeInTheDocument() - ); - expect(screen.getByTestId(ERROR_STATE_TEST_SUBJECT)).toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('prefers custom error render', () => { - const error = chance.sentence(); - const message = chance.sentence(); - const statusCode = chance.integer(); - - const query = createReactQueryResponse({ - status: 'error', - error: { - body: { - error, - message, - statusCode, - }, - }, - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ - children, - query, - errorRender: (err) =>
{isCommonError(err) && err.body.message}
, - }); - - expect(screen.getByText(message)).toBeInTheDocument(); - [error, statusCode].forEach((text) => expect(screen.queryByText(text)).not.toBeInTheDocument()); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('prefers custom loading render', () => { - const loading = chance.sentence(); - - const query = createReactQueryResponse({ - status: 'loading', - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ - children, - query, - loadingRender: () =>
{loading}
, - }); - - expect(screen.getByText(loading)).toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('renders noDataConfig prompt when query data is undefined', () => { - const query = createReactQueryResponse({ - status: 'success', - data: undefined, - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ children, query }); - - expect(screen.getByText(DEFAULT_NO_DATA_TEXT.PAGE_TITLE)).toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); - - it('prefers custom noDataConfig prompt', () => { - const pageTitle = chance.sentence(); - const solution = chance.sentence(); - const docsLink = chance.sentence(); - - const query = createReactQueryResponse({ - status: 'success', - data: undefined, - }) as unknown as UseQueryResult; - - const children = chance.sentence(); - renderCspPageTemplate({ - children, - query, - noDataConfig: { pageTitle, solution, docsLink, actions: {} }, - }); - - expect(screen.getByText(pageTitle)).toBeInTheDocument(); - expect(screen.getAllByText(solution, { exact: false })[0]).toBeInTheDocument(); - expect(screen.queryByTestId(LOADING_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - expect(screen.queryByText(children)).not.toBeInTheDocument(); - expect(screen.queryByTestId(ERROR_STATE_TEST_SUBJECT)).not.toBeInTheDocument(); - packageNotInstalledUniqueTexts.forEach((text) => - expect(screen.queryByText(text)).not.toBeInTheDocument() - ); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/public/components/csp_page_template.tsx b/x-pack/plugins/cloud_security_posture/public/components/csp_page_template.tsx index 24ac368b0ec01..7a6d4272edbc3 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/csp_page_template.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/csp_page_template.tsx @@ -5,45 +5,18 @@ * 2.0. */ import React from 'react'; -import type { UseQueryResult } from 'react-query'; import { NavLink } from 'react-router-dom'; -import { EuiEmptyPrompt, EuiErrorBoundary, EuiTitle } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { KibanaPageTemplate, type KibanaPageTemplateProps } from '@kbn/kibana-react-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { EuiErrorBoundary } from '@elastic/eui'; +import { KibanaPageTemplate, type KibanaPageTemplateProps } from '@kbn/shared-ux-components'; import { allNavigationItems } from '../common/navigation/constants'; import type { CspNavigationItem } from '../common/navigation/types'; -import { CspLoadingState } from './csp_loading_state'; -import { - CLOUD_SECURITY_POSTURE, - DEFAULT_NO_DATA_TEXT, - PACKAGE_NOT_INSTALLED_TEXT, -} from './translations'; -import { useCisKubernetesIntegration } from '../common/api/use_cis_kubernetes_integration'; -import { useCISIntegrationLink } from '../common/navigation/use_navigate_to_cis_integration'; - -export interface CommonError { - body: { - error: string; - message: string; - statusCode: number; - }; -} - -export const isCommonError = (x: any): x is CommonError => { - if (!('body' in x)) return false; - - const { - body: { error, message, statusCode }, - } = x; - - return !!(error && message && statusCode); -}; const activeItemStyle = { fontWeight: 700 }; export const getSideNavItems = ( navigationItems: Record -): NonNullable['items'] => +): NonNullable['items']> => Object.entries(navigationItems) .filter(([_, navigationItem]) => !navigationItem.disabled) .map(([id, navigationItem]) => ({ @@ -58,7 +31,9 @@ export const getSideNavItems = ( const DEFAULT_PAGE_PROPS: KibanaPageTemplateProps = { solutionNav: { - name: CLOUD_SECURITY_POSTURE, + name: i18n.translate('xpack.csp.cspPageTemplate.navigationTitle', { + defaultMessage: 'Cloud Security Posture', + }), items: getSideNavItems({ dashboard: allNavigationItems.dashboard, findings: allNavigationItems.findings, @@ -68,146 +43,13 @@ const DEFAULT_PAGE_PROPS: KibanaPageTemplateProps = { restrictWidth: false, }; -export const DEFAULT_NO_DATA_CONFIG: KibanaPageTemplateProps['noDataConfig'] = { - pageTitle: DEFAULT_NO_DATA_TEXT.PAGE_TITLE, - solution: DEFAULT_NO_DATA_TEXT.SOLUTION, - // TODO: Add real docs link once we have it - docsLink: 'https://www.elastic.co/guide/index.html', - logo: 'logoSecurity', - actions: {}, -}; - -export const LOADING_STATE_TEST_SUBJECT = 'csp_page_template_loading'; -export const ERROR_STATE_TEST_SUBJECT = 'csp_page_template_error'; - -const getPackageNotInstalledNoDataConfig = ( - cisIntegrationLink?: string -): KibanaPageTemplateProps['noDataConfig'] => ({ - pageTitle: PACKAGE_NOT_INSTALLED_TEXT.PAGE_TITLE, - solution: PACKAGE_NOT_INSTALLED_TEXT.SOLUTION, - // TODO: Add real docs link once we have it - docsLink: 'https://www.elastic.co/guide/index.html', - logo: 'logoSecurity', - actions: { - elasticAgent: { - href: cisIntegrationLink, - isDisabled: !cisIntegrationLink, - title: PACKAGE_NOT_INSTALLED_TEXT.BUTTON_TITLE, - description: PACKAGE_NOT_INSTALLED_TEXT.DESCRIPTION, - }, - }, -}); - -const DefaultLoading = () => ( - - - -); - -const DefaultError = (error: unknown) => ( - - -

- -

-
- {isCommonError(error) && ( - <> - -
- -
-
- -
- -
-
- - )} - - } - /> -); - export const CspPageTemplate = ({ - query, children, - loadingRender = DefaultLoading, - errorRender = DefaultError, ...kibanaPageTemplateProps -}: KibanaPageTemplateProps & { - loadingRender?: () => React.ReactNode; - errorRender?: (error: TError) => React.ReactNode; - query?: UseQueryResult; -}) => { - const cisKubernetesPackageInfo = useCisKubernetesIntegration(); - const cisIntegrationLink = useCISIntegrationLink(); - - const getNoDataConfig = (): KibanaPageTemplateProps['noDataConfig'] => { - if (cisKubernetesPackageInfo.data?.item.status !== 'installed') { - return getPackageNotInstalledNoDataConfig(cisIntegrationLink); - } - - // when query was successful, but data is undefined - if (query?.isSuccess && !query?.data) { - return kibanaPageTemplateProps.noDataConfig || DEFAULT_NO_DATA_CONFIG; - } - - return kibanaPageTemplateProps.noDataConfig; - }; - - const getTemplate = (): KibanaPageTemplateProps['template'] => { - if (query?.isLoading || query?.isError || cisKubernetesPackageInfo.isLoading) - return 'centeredContent'; - - return kibanaPageTemplateProps.template || 'default'; - }; - - const render = () => { - if (query?.isLoading || query?.isIdle || cisKubernetesPackageInfo.isLoading) { - return loadingRender(); - } - if (query?.isError) return errorRender(query.error); - if (query?.isSuccess) return children; - - return children; - }; - +}: KibanaPageTemplateProps) => { return ( - - - <>{render()} - + + {children} ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/components/translations.ts b/x-pack/plugins/cloud_security_posture/public/components/translations.ts deleted file mode 100644 index 84d1ae489f8ea..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/components/translations.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { i18n } from '@kbn/i18n'; - -export const PACKAGE_NOT_INSTALLED_TEXT = { - PAGE_TITLE: i18n.translate('xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle', { - defaultMessage: 'Install Integration to get started', - }), - SOLUTION: i18n.translate('xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel', { - defaultMessage: 'Cloud Security Posture', - }), - BUTTON_TITLE: i18n.translate('xpack.csp.cspPageTemplate.packageNotInstalled.buttonLabel', { - defaultMessage: 'Add a CIS integration', - }), - DESCRIPTION: i18n.translate('xpack.csp.cspPageTemplate.packageNotInstalled.description', { - defaultMessage: - 'Use our CIS Kubernetes Benchmark integration to measure your Kubernetes cluster setup against the CIS recommendations.', - }), -}; - -export const DEFAULT_NO_DATA_TEXT = { - PAGE_TITLE: i18n.translate('xpack.csp.cspPageTemplate.defaultNoDataConfig.pageTitle', { - defaultMessage: 'No data found', - }), - SOLUTION: i18n.translate('xpack.csp.cspPageTemplate.defaultNoDataConfig.solutionNameLabel', { - defaultMessage: 'Cloud Security Posture', - }), -}; - -export const CLOUD_SECURITY_POSTURE = i18n.translate('xpack.csp.cspPageTemplate.navigationTitle', { - defaultMessage: 'Cloud Security Posture', -}); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx index 4b25fe3c8b175..71362c2c92525 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { createReactQueryResponse } from '../../test/fixtures/react_query'; import React from 'react'; import { coreMock } from '@kbn/core/public/mocks'; import { render, screen } from '@testing-library/react'; @@ -13,7 +14,7 @@ import { ComplianceDashboard } from '..'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; import { useCisKubernetesIntegration } from '../../common/api/use_cis_kubernetes_integration'; import { useComplianceDashboardDataApi } from '../../common/api/use_compliance_dashboard_data_api'; -import { DASHBOARD_PAGE_HEADER, MISSING_FINDINGS_NO_DATA_CONFIG } from './test_subjects'; +import { DASHBOARD_CONTAINER, MISSING_FINDINGS_NO_DATA_CONFIG } from './test_subjects'; jest.mock('../../common/api/use_setup_status_api'); jest.mock('../../common/api/use_cis_kubernetes_integration'); @@ -196,17 +197,17 @@ describe('', () => { }; it('shows noDataConfig when latestFindingsIndexStatus is inapplicable', () => { - (useCspSetupStatusApi as jest.Mock).mockImplementation(() => ({ - data: { latestFindingsIndexStatus: 'inapplicable' }, - })); - (useComplianceDashboardDataApi as jest.Mock).mockImplementation(() => ({ - data: undefined, - })); + (useCspSetupStatusApi as jest.Mock).mockImplementation(() => + createReactQueryResponse({ status: 'success', data: 'inapplicable' }) + ); + (useComplianceDashboardDataApi as jest.Mock).mockImplementation(() => + createReactQueryResponse({ status: 'success', data: undefined }) + ); renderComplianceDashboardPage(); expect(screen.queryByTestId(MISSING_FINDINGS_NO_DATA_CONFIG)).toBeInTheDocument(); - expect(screen.queryByTestId(DASHBOARD_PAGE_HEADER)).not.toBeInTheDocument(); + expect(screen.queryByTestId(DASHBOARD_CONTAINER)).not.toBeInTheDocument(); }); it('shows dashboard when latestFindingsIndexStatus is applicable', () => { @@ -225,6 +226,6 @@ describe('', () => { renderComplianceDashboardPage(); expect(screen.queryByTestId(MISSING_FINDINGS_NO_DATA_CONFIG)).not.toBeInTheDocument(); - expect(screen.getByTestId(DASHBOARD_PAGE_HEADER)).toBeInTheDocument(); + expect(screen.getByTestId(DASHBOARD_CONTAINER)).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx index e0ba90441ea74..606d7671125da 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx @@ -7,10 +7,12 @@ import React from 'react'; import { EuiSpacer, EuiIcon } from '@elastic/eui'; -import { type KibanaPageTemplateProps } from '@kbn/kibana-react-plugin/public'; +import { NoDataPage } from '@kbn/kibana-react-plugin/public'; import { UseQueryResult } from 'react-query'; import { i18n } from '@kbn/i18n'; -import { DASHBOARD_PAGE_HEADER, MISSING_FINDINGS_NO_DATA_CONFIG } from './test_subjects'; +import { css } from '@emotion/react'; +import { CloudPosturePage } from '../../components/cloud_posture_page'; +import { DASHBOARD_CONTAINER, MISSING_FINDINGS_NO_DATA_CONFIG } from './test_subjects'; import { allNavigationItems } from '../../common/navigation/constants'; import { useCspBreadcrumbs } from '../../common/navigation/use_csp_breadcrumbs'; import { SummarySection } from './dashboard_sections/summary_section'; @@ -19,31 +21,39 @@ import { useComplianceDashboardDataApi } from '../../common/api'; import { CspPageTemplate } from '../../components/csp_page_template'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; -const getNoDataConfig = (onClick: () => void): KibanaPageTemplateProps['noDataConfig'] => ({ - 'data-test-subj': MISSING_FINDINGS_NO_DATA_CONFIG, - pageTitle: i18n.translate('xpack.csp.dashboard.noDataConfig.pageTitle', { - defaultMessage: 'Cloud Posture Dashboard', - }), - solution: i18n.translate('xpack.csp.dashboard.noDataConfig.solutionNameTitle', { - defaultMessage: 'Cloud Security Posture', - }), - // TODO: Add real docs link once we have it - docsLink: 'https://www.elastic.co/guide/index.html', - logo: 'logoSecurity', - actions: { - dashboardNoDataCard: { - icon: , - onClick, - title: i18n.translate('xpack.csp.dashboard.noDataConfig.actionTitle', { - defaultMessage: 'Try Again', - }), - description: i18n.translate('xpack.csp.dashboard.noDataConfig.actionDescription', { - defaultMessage: - "The cloud posture dashboard can't be presented since there are no findings. This can happen due to the agent not being installed yet, or since data is still being processed.", - }), - }, - }, -}); +const NoData = ({ onClick }: { onClick: () => void }) => ( + , + onClick, + title: i18n.translate('xpack.csp.dashboard.noDataConfig.actionTitle', { + defaultMessage: 'Try Again', + }), + description: i18n.translate('xpack.csp.dashboard.noDataConfig.actionDescription', { + defaultMessage: + "The cloud posture dashboard can't be presented since there are no findings. This can happen due to the agent not being installed yet, or since data is still being processed.", + }), + }, + }} + /> +); export const ComplianceDashboard = () => { const getInfo = useCspSetupStatusApi(); @@ -51,6 +61,7 @@ export const ComplianceDashboard = () => { const getDashboardData = useComplianceDashboardDataApi({ enabled: isFindingsIndexApplicable, }); + useCspBreadcrumbs([allNavigationItems.dashboard]); const pageQuery: UseQueryResult = isFindingsIndexApplicable ? getDashboardData : getInfo; @@ -58,23 +69,24 @@ export const ComplianceDashboard = () => { return ( - {getDashboardData.data && ( - <> - - - - - - )} + + {isFindingsIndexApplicable ? ( +
+ + + + +
+ ) : ( + + )} +
); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/test_subjects.ts index 04cf7a1398114..6e0ca5773b7fc 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/test_subjects.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/test_subjects.ts @@ -6,4 +6,4 @@ */ export const MISSING_FINDINGS_NO_DATA_CONFIG = 'missing-findings-no-data-config'; -export const DASHBOARD_PAGE_HEADER = 'dashboard-page-header'; +export const DASHBOARD_CONTAINER = 'dashboard-container'; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx index 599ab03545a2c..a8220c752b27f 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx @@ -7,6 +7,7 @@ import React from 'react'; import type { UseQueryResult } from 'react-query'; import { Redirect, Switch, Route, useLocation } from 'react-router-dom'; +import { CloudPosturePage } from '../../components/cloud_posture_page'; import { useFindingsEsPit } from './es_pit/use_findings_es_pit'; import { FindingsEsPitContext } from './es_pit/findings_es_pit_context'; import { useLatestFindingsDataView } from '../../common/api/use_latest_findings_data_view'; @@ -21,48 +22,50 @@ export const Findings = () => { // TODO: Consider splitting the PIT window so that each "group by" view has its own PIT const { pitQuery, pitIdRef, setPitId } = useFindingsEsPit('findings'); - let queryForPageTemplate: UseQueryResult = dataViewQuery; + let queryForSetupStatus: UseQueryResult = dataViewQuery; if (pitQuery.isError || pitQuery.isLoading || pitQuery.isIdle) { - queryForPageTemplate = pitQuery; + queryForSetupStatus = pitQuery; } return ( - - , - setPitId, - }} - > - - ( - - )} - /> - } - /> - } - /> - } - /> - - + + + , + setPitId, + }} + > + + ( + + )} + /> + } + /> + } + /> + } + /> + + + ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx index 6b9953e429d9f..65de13726ced3 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx @@ -7,19 +7,18 @@ import React, { useMemo } from 'react'; import { generatePath, Link, RouteComponentProps } from 'react-router-dom'; -import { EuiTextColor, EuiEmptyPrompt, EuiButtonEmpty, EuiFlexGroup } from '@elastic/eui'; -import * as t from 'io-ts'; -import type { KibanaPageTemplateProps } from '@kbn/kibana-react-plugin/public'; +import { EuiTextColor, EuiButtonEmpty, EuiFlexGroup } from '@elastic/eui'; +import type { KibanaPageTemplateProps } from '@kbn/shared-ux-components'; import { FormattedMessage } from '@kbn/i18n-react'; import { pagePathGetters } from '@kbn/fleet-plugin/public'; import { RulesContainer, type PageUrlParams } from './rules_container'; import { allNavigationItems } from '../../common/navigation/constants'; import { useCspBreadcrumbs } from '../../common/navigation/use_csp_breadcrumbs'; import { CspNavigationItem } from '../../common/navigation/types'; -import { extractErrorMessage } from '../../../common/utils/helpers'; import { useCspIntegrationInfo } from './use_csp_integration'; import { CspPageTemplate } from '../../components/csp_page_template'; import { useKibana } from '../../common/hooks/use_kibana'; +import { CloudPosturePage } from '../../components/cloud_posture_page'; const getRulesBreadcrumbs = (name?: string): CspNavigationItem[] => [allNavigationItems.benchmarks, { ...allNavigationItems.rules, name }].filter( @@ -93,34 +92,10 @@ export const Rules = ({ match: { params } }: RouteComponentProps) ); return ( - } - > - + + + + ); }; - -// react-query puts the response data on the 'error' object -const bodyError = t.type({ - body: t.type({ - message: t.string, - }), -}); - -const extractErrorBodyMessage = (err: unknown) => { - if (bodyError.is(err)) return err.body.message; - return extractErrorMessage(err); -}; - -const RulesErrorPrompt = ({ error }: { error: string }) => ( - {error}, - }} - /> -); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx index 0acf17dc8005f..2056173d99f88 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules.test.tsx @@ -6,7 +6,6 @@ */ import React from 'react'; -import { LOADING_STATE_TEST_SUBJECT } from '../../components/csp_page_template'; import { Rules } from '.'; import { render, screen } from '@testing-library/react'; import { QueryClient } from 'react-query'; @@ -79,33 +78,6 @@ describe('', () => { expect(useCspIntegrationInfo).toHaveBeenCalledWith(params); }); - it('displays error state when request had an error', async () => { - const Component = getTestComponent({ packagePolicyId: '1', policyId: '2' }); - const request = createReactQueryResponse({ - status: 'error', - error: new Error('some error message'), - }); - - (useCspIntegrationInfo as jest.Mock).mockReturnValue(request); - - render(); - - expect(await screen.findByText(request.error?.message!)).toBeInTheDocument(); - }); - - it('displays loading state when request is pending', () => { - const Component = getTestComponent({ packagePolicyId: '21', policyId: '22' }); - const request = createReactQueryResponse({ - status: 'loading', - }); - - (useCspIntegrationInfo as jest.Mock).mockReturnValue(request); - - render(); - - expect(screen.getByTestId(LOADING_STATE_TEST_SUBJECT)).toBeInTheDocument(); - }); - it('displays success state when result request is resolved', async () => { const Component = getTestComponent({ packagePolicyId: '21', policyId: '22' }); const request = createReactQueryResponse({ diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 5f685e8958e29..e36d4abb75a1c 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10439,14 +10439,7 @@ "xpack.csp.cspHealthBadge.criticalLabel": "Critique", "xpack.csp.cspHealthBadge.healthyLabel": "Intègre", "xpack.csp.cspHealthBadge.warningLabel": "Avertissement", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.pageTitle": "Aucune donnée trouvée", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.solutionNameLabel": "Niveau de sécurité du cloud", - "xpack.csp.cspPageTemplate.loadingDescription": "Chargement...", "xpack.csp.cspPageTemplate.navigationTitle": "Niveau de sécurité du cloud", - "xpack.csp.cspPageTemplate.packageNotInstalled.buttonLabel": "Ajouter une intégration CIS", - "xpack.csp.cspPageTemplate.packageNotInstalled.description": "Utilisez notre intégration CIS Kubernetes Benchmark pour mesurer votre configuration de cluster Kubernetes par rapport aux recommandations du CIS.", - "xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "Installer l'intégration pour commencer", - "xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "Niveau de sécurité du cloud", "xpack.csp.cspSettings.rules": "Règles de sécurité du CSP - ", "xpack.csp.dashboard.risksTable.cisSectionColumnLabel": "Section CIS", "xpack.csp.expandColumnDescriptionLabel": "Développer", @@ -10466,9 +10459,6 @@ "xpack.csp.findings.resourceFindings.backToResourcesPageButtonLabel": "Retour à la vue de regroupement par ressource", "xpack.csp.findings.searchBar.searchPlaceholder": "Rechercher dans les résultats (par ex. rule.section.keyword : \"serveur d'API\")", "xpack.csp.navigation.cloudPostureBreadcrumbLabel": "Niveau du cloud", - "xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}", - "xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}", - "xpack.csp.pageTemplate.loadErrorMessage": "Nous n'avons pas pu récupérer vos données sur le niveau de sécurité du cloud.", "xpack.csp.rules.activateAllButtonLabel": "Activer {count, plural, one {# règle} other {# règles}}", "xpack.csp.rules.clearSelectionButtonLabel": "Effacer la sélection", "xpack.csp.rules.deactivateAllButtonLabel": "Désactiver {count, plural, one {# règle} other {# règles}}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ccc7ddeff55c2..cc42d39638c58 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10431,14 +10431,7 @@ "xpack.csp.cspHealthBadge.criticalLabel": "重大", "xpack.csp.cspHealthBadge.healthyLabel": "正常", "xpack.csp.cspHealthBadge.warningLabel": "警告", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.pageTitle": "データが見つかりません", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.solutionNameLabel": "クラウドセキュリティ態勢", - "xpack.csp.cspPageTemplate.loadingDescription": "読み込み中...", "xpack.csp.cspPageTemplate.navigationTitle": "クラウドセキュリティ態勢", - "xpack.csp.cspPageTemplate.packageNotInstalled.buttonLabel": "CIS統合を追加", - "xpack.csp.cspPageTemplate.packageNotInstalled.description": "CIS Kubernetes Benchmark統合は、CISの推奨事項に照らしてKubernetesクラスター設定を測定します。", - "xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "開始するには統合をインストールしてください", - "xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "クラウドセキュリティ態勢", "xpack.csp.cspSettings.rules": "CSPセキュリティルール - ", "xpack.csp.dashboard.risksTable.cisSectionColumnLabel": "CISセクション", "xpack.csp.expandColumnDescriptionLabel": "拡張", @@ -10458,9 +10451,6 @@ "xpack.csp.findings.resourceFindings.backToResourcesPageButtonLabel": "リソース別グループビューに戻る", "xpack.csp.findings.searchBar.searchPlaceholder": "検索結果(例:rule.section.keyword:\"API Server\")", "xpack.csp.navigation.cloudPostureBreadcrumbLabel": "クラウド態勢", - "xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}", - "xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}", - "xpack.csp.pageTemplate.loadErrorMessage": "クラウドセキュリティ態勢データを取得できませんでした", "xpack.csp.rules.activateAllButtonLabel": "{count, plural, other {#個のルール}}をアクティブ化", "xpack.csp.rules.clearSelectionButtonLabel": "選択した項目をクリア", "xpack.csp.rules.deactivateAllButtonLabel": "{count, plural, other {#個のルール}}を非アクティブ化", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 0dc9363d378b1..a0848f0acf9ad 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10446,14 +10446,7 @@ "xpack.csp.cspHealthBadge.criticalLabel": "紧急", "xpack.csp.cspHealthBadge.healthyLabel": "运行正常", "xpack.csp.cspHealthBadge.warningLabel": "警告", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.pageTitle": "未找到任何数据", - "xpack.csp.cspPageTemplate.defaultNoDataConfig.solutionNameLabel": "云安全态势", - "xpack.csp.cspPageTemplate.loadingDescription": "正在加载……", "xpack.csp.cspPageTemplate.navigationTitle": "云安全态势", - "xpack.csp.cspPageTemplate.packageNotInstalled.buttonLabel": "添加 CIS 集成", - "xpack.csp.cspPageTemplate.packageNotInstalled.description": "使用我们的 CIS Kubernetes 基准集成根据 CIS 建议衡量 Kubernetes 集群设置。", - "xpack.csp.cspPageTemplate.packageNotInstalled.pageTitle": "安装集成以开始", - "xpack.csp.cspPageTemplate.packageNotInstalled.solutionNameLabel": "云安全态势", "xpack.csp.cspSettings.rules": "CSP 安全规则 - ", "xpack.csp.dashboard.risksTable.cisSectionColumnLabel": "CIS 部分", "xpack.csp.expandColumnDescriptionLabel": "展开", @@ -10473,9 +10466,6 @@ "xpack.csp.findings.resourceFindings.backToResourcesPageButtonLabel": "返回到按资源视图分组", "xpack.csp.findings.searchBar.searchPlaceholder": "搜索结果(例如,rule.section.keyword:“APM 服务器”)", "xpack.csp.navigation.cloudPostureBreadcrumbLabel": "云态势", - "xpack.csp.pageTemplate.errorDetails.errorBodyTitle": "{body}", - "xpack.csp.pageTemplate.errorDetails.errorCodeTitle": "{error} {statusCode}", - "xpack.csp.pageTemplate.loadErrorMessage": "我们无法提取您的云安全态势数据", "xpack.csp.rules.activateAllButtonLabel": "激活 {count, plural, other {# 个规则}}", "xpack.csp.rules.clearSelectionButtonLabel": "清除所选内容", "xpack.csp.rules.deactivateAllButtonLabel": "停用 {count, plural, other {# 个规则}}", From b58d07e05be3c759c4a7c9e3c29f1a8de027f5ff Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Thu, 14 Jul 2022 13:29:09 +0200 Subject: [PATCH 46/96] [Stack Monitoring] Add OpenTelemetry metrics to Monitoring Collection plugin (#135999) * Add otel metrics to alerting plugin * clean up otel poc * Bump @opentelemetry/api-metrics and @opentelemetry/exporter-metrics-otlp-grpc versions to 0.30.0 * Add integration test for prometheus endpoint; improve reademe.md * Fix tsconfig.base.json missing entries * Bump @opentelemetry/sdk-metrics-base; clean up * Rename PrometheusExporter properties * Readme formatting tweaks * Fix incorrect path * Remove grpc dependency * Add grpc back for handling auth headers * Fix comment positioning * Include authenticated OTLP in readme * Extract dynamic route into a new file * Enable otlp logging and compatibility with env vars * Enable OTEL_EXPORTER_OTLP_ENDPOINT env var Co-authored-by: Mat Schaffer Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + package.json | 8 + test/common/config.js | 2 + .../fixtures/plugins/otel_metrics/kibana.json | 15 ++ .../plugins/otel_metrics/server/index.ts | 11 ++ .../otel_metrics/server/monitoring/metrics.ts | 19 +++ .../plugins/otel_metrics/server/plugin.ts | 28 ++++ .../server/routes/generate_otel_metrics.ts | 23 +++ .../otel_metrics/server/routes/index.ts | 9 + tsconfig.base.json | 2 + .../plugins/monitoring_collection/README.md | 137 ++++++++++++++- .../monitoring_collection/server/config.ts | 13 ++ .../monitoring_collection/server/constants.ts | 2 + .../monitoring_collection/server/lib/index.ts | 1 + .../server/lib/prometheus_exporter.ts | 73 ++++++++ .../monitoring_collection/server/plugin.ts | 102 ++++++++++- .../get_metrics_by_type.test.ts} | 4 +- .../v1/dynamic_route/get_metrics_by_type.ts} | 7 +- .../routes/api/v1/dynamic_route/index.ts | 7 + .../server/routes/api/v1/index.ts | 8 + .../api/v1/prometheus/get_metrics.test.ts | 32 ++++ .../routes/api/v1/prometheus/get_metrics.ts | 33 ++++ .../server/routes/api/v1/prometheus/index.ts | 7 + .../server/routes/index.ts | 2 +- x-pack/test/api_integration/apis/index.ts | 1 + .../apis/monitoring_collection/index.ts | 14 ++ .../apis/monitoring_collection/prometheus.ts | 24 +++ x-pack/test/api_integration/config.ts | 1 + yarn.lock | 158 +++++++++++++++++- 29 files changed, 727 insertions(+), 17 deletions(-) create mode 100644 test/common/fixtures/plugins/otel_metrics/kibana.json create mode 100644 test/common/fixtures/plugins/otel_metrics/server/index.ts create mode 100644 test/common/fixtures/plugins/otel_metrics/server/monitoring/metrics.ts create mode 100644 test/common/fixtures/plugins/otel_metrics/server/plugin.ts create mode 100644 test/common/fixtures/plugins/otel_metrics/server/routes/generate_otel_metrics.ts create mode 100644 test/common/fixtures/plugins/otel_metrics/server/routes/index.ts create mode 100644 x-pack/plugins/monitoring_collection/server/lib/prometheus_exporter.ts rename x-pack/plugins/monitoring_collection/server/routes/{dynamic_route.test.ts => api/v1/dynamic_route/get_metrics_by_type.test.ts} (97%) rename x-pack/plugins/monitoring_collection/server/routes/{dynamic_route.ts => api/v1/dynamic_route/get_metrics_by_type.ts} (86%) create mode 100644 x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/index.ts create mode 100644 x-pack/plugins/monitoring_collection/server/routes/api/v1/index.ts create mode 100644 x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.test.ts create mode 100644 x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.ts create mode 100644 x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/index.ts create mode 100644 x-pack/test/api_integration/apis/monitoring_collection/index.ts create mode 100644 x-pack/test/api_integration/apis/monitoring_collection/prometheus.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 793805005de8b..421a239e3b0df 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -116,6 +116,7 @@ /x-pack/plugins/monitoring/ @elastic/infra-monitoring-ui /x-pack/test/functional/apps/monitoring @elastic/infra-monitoring-ui /x-pack/test/api_integration/apis/monitoring @elastic/infra-monitoring-ui +/x-pack/test/api_integration/apis/monitoring_collection @elastic/infra-monitoring-ui # Fleet /fleet_packages.json @elastic/fleet diff --git a/package.json b/package.json index b56a4d1e803aa..a0cab1288d620 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "@emotion/css": "^11.9.0", "@emotion/react": "^11.9.0", "@emotion/serialize": "^1.0.3", + "@grpc/grpc-js": "^1.6.7", "@hapi/accept": "^5.0.2", "@hapi/boom": "^9.1.4", "@hapi/cookie": "^11.0.2", @@ -284,6 +285,13 @@ "@mapbox/mapbox-gl-draw": "1.3.0", "@mapbox/mapbox-gl-rtl-text": "0.2.3", "@mapbox/vector-tile": "1.3.1", + "@opentelemetry/api": "^1.1.0", + "@opentelemetry/api-metrics": "^0.30.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "^0.30.0", + "@opentelemetry/exporter-prometheus": "^0.30.0", + "@opentelemetry/resources": "^1.4.0", + "@opentelemetry/sdk-metrics-base": "^0.30.0", + "@opentelemetry/semantic-conventions": "^1.4.0", "@reduxjs/toolkit": "^1.6.1", "@slack/webhook": "^5.0.4", "@turf/along": "6.0.1", diff --git a/test/common/config.js b/test/common/config.js index 5079d32909ff5..f69afd4e789b5 100644 --- a/test/common/config.js +++ b/test/common/config.js @@ -51,6 +51,8 @@ export default function () { `--server.maxPayload=1679958`, // newsfeed mock service `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'newsfeed')}`, + // otel mock service + `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'otel_metrics')}`, `--newsfeed.service.urlRoot=${servers.kibana.protocol}://${servers.kibana.hostname}:${servers.kibana.port}`, `--newsfeed.service.pathTemplate=/api/_newsfeed-FTS-external-service-simulators/kibana/v{VERSION}.json`, // code coverage reporting plugin diff --git a/test/common/fixtures/plugins/otel_metrics/kibana.json b/test/common/fixtures/plugins/otel_metrics/kibana.json new file mode 100644 index 0000000000000..f9cc773c1fe0a --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/kibana.json @@ -0,0 +1,15 @@ +{ + "id": "openTelemetryInstrumentedPlugin", + "owner": { + "name": "Stack Monitoring", + "githubTeam": "stack-monitoring-ui" + }, + "version": "1.0.0", + "kibanaVersion": "kibana", + "requiredPlugins": [ + "monitoringCollection" + ], + "optionalPlugins": [], + "server": true, + "ui": false +} \ No newline at end of file diff --git a/test/common/fixtures/plugins/otel_metrics/server/index.ts b/test/common/fixtures/plugins/otel_metrics/server/index.ts new file mode 100644 index 0000000000000..eb5f587592cae --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/server/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenTelemetryUsageTest } from './plugin'; + +export const plugin = () => new OpenTelemetryUsageTest(); diff --git a/test/common/fixtures/plugins/otel_metrics/server/monitoring/metrics.ts b/test/common/fixtures/plugins/otel_metrics/server/monitoring/metrics.ts new file mode 100644 index 0000000000000..044cd7bee5441 --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/server/monitoring/metrics.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Counter, Meter } from '@opentelemetry/api-metrics'; + +export class Metrics { + requestCounter: Counter; + + constructor(meter: Meter) { + this.requestCounter = meter.createCounter('request_count', { + description: 'Counts total number of requests', + }); + } +} diff --git a/test/common/fixtures/plugins/otel_metrics/server/plugin.ts b/test/common/fixtures/plugins/otel_metrics/server/plugin.ts new file mode 100644 index 0000000000000..65dec472b94f9 --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/server/plugin.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { CoreSetup, Plugin } from '@kbn/core/server'; +import { metrics } from '@opentelemetry/api-metrics'; +import { generateOtelMetrics } from './routes'; +import { Metrics } from './monitoring/metrics'; + +export class OpenTelemetryUsageTest implements Plugin { + private metrics: Metrics; + + constructor() { + this.metrics = new Metrics(metrics.getMeter('dummyMetric')); + } + + public setup(core: CoreSetup) { + const router = core.http.createRouter(); + generateOtelMetrics(router, this.metrics); + } + + public start() {} + public stop() {} +} diff --git a/test/common/fixtures/plugins/otel_metrics/server/routes/generate_otel_metrics.ts b/test/common/fixtures/plugins/otel_metrics/server/routes/generate_otel_metrics.ts new file mode 100644 index 0000000000000..6809059ca1472 --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/server/routes/generate_otel_metrics.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { IKibanaResponse, IRouter } from '@kbn/core/server'; +import { Metrics } from '../monitoring/metrics'; + +export const generateOtelMetrics = (router: IRouter, metrics: Metrics) => { + router.post( + { + path: '/api/generate_otel_metrics', + validate: {}, + }, + async function (_context, _req, res): Promise> { + metrics.requestCounter.add(1); + return res.ok({}); + } + ); +}; diff --git a/test/common/fixtures/plugins/otel_metrics/server/routes/index.ts b/test/common/fixtures/plugins/otel_metrics/server/routes/index.ts new file mode 100644 index 0000000000000..49ac53bcf5412 --- /dev/null +++ b/test/common/fixtures/plugins/otel_metrics/server/routes/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './generate_otel_metrics'; diff --git a/tsconfig.base.json b/tsconfig.base.json index 9946503830c70..c4a2d579dee9a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -201,6 +201,8 @@ "@kbn/coverage-fixtures-plugin/*": ["test/common/fixtures/plugins/coverage/*"], "@kbn/newsfeed-fixtures-plugin": ["test/common/fixtures/plugins/newsfeed"], "@kbn/newsfeed-fixtures-plugin/*": ["test/common/fixtures/plugins/newsfeed/*"], + "@kbn/open-telemetry-instrumented-plugin": ["test/common/fixtures/plugins/otel_metrics"], + "@kbn/open-telemetry-instrumented-plugin/*": ["test/common/fixtures/plugins/otel_metrics/*"], "@kbn/kbn-tp-run-pipeline-plugin": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline"], "@kbn/kbn-tp-run-pipeline-plugin/*": ["test/interpreter_functional/plugins/kbn_tp_run_pipeline/*"], "@kbn/app-link-test-plugin": ["test/plugin_functional/plugins/app_link_test"], diff --git a/x-pack/plugins/monitoring_collection/README.md b/x-pack/plugins/monitoring_collection/README.md index 1f2d2984af886..1f9cadf40ee7b 100644 --- a/x-pack/plugins/monitoring_collection/README.md +++ b/x-pack/plugins/monitoring_collection/README.md @@ -2,4 +2,139 @@ ## Plugin -This plugin allows for other plugins to add data to Kibana stack monitoring documents. \ No newline at end of file +This plugin allows for other plugins to add data to Kibana stack monitoring documents. + +## OpenTelemetry Metrics + +### Enable Prometheus endpoint with Elastic Agent Prometheus input + +1. Start [local setup with fleet](../fleet/README.md#running-fleet-server-locally-in-a-container) or a cloud cluster +2. Start Kibana +3. Set up a new agent policy and enroll a new agent in your local machine +4. Install the Prometheus Metrics package + 1. Set **Hosts** with `localhost:5601` + 2. Set **Metrics Path** with `/(BASEPATH)/api/monitoring_collection/v1/prometheus` + 3. Remove the values from **Bearer Token File** and **SSL Certificate Authorities** + 4. Set **Username** and **Password** with `elastic` and `changeme` +5. Add the following configuration to `kibana.dev.yml` + + ```yml + # Enable the prometheus exporter + monitoring_collection.opentelemetry.metrics: + prometheus.enabled: true + ``` + +### Enable OpenTelemetry Metrics API exported as OpenTelemetry Protocol over GRPC + +1. Start [local setup with fleet](../fleet/README.md#running-fleet-server-locally-in-a-container) or a cloud cluster +2. Start Kibana +3. Set up a new agent policy and enroll a new agent in your local machine +4. Install Elastic APM package listening on `localhost:8200` without authentication +5. Add the following configuration to `kibana.dev.yml` + + ```yml + # Enable the OTLP exporter + monitoring_collection.opentelemetry.metrics: + otlp.url: "http://127.0.0.1:8200" + ``` + +You can also provide headers for OTLP endpoints that require authentication: + +```yml +# Enable the OTLP exporter to an authenticated APM endpoint +monitoring_collection.opentelemetry.metrics: + otlp: + url: "https://DEPLOYMENT.apm.REGION.PROVIDER.elastic-cloud.com" + headers: + Authorization: "Bearer SECRET_TOKEN" +``` + +Alternatively, OTLP Exporter can be configured using environment variables `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` and `OTEL_EXPORTER_OTLP_METRICS_HEADERS`. [See OTLP Exporter docs](https://opentelemetry.io/docs/reference/specification/protocol/exporter/) for details. + +It's possible to configure logging for the OTLP integration. If not informed, the default will be `info` + +```yml +monitoring_collection.opentelemetry.metrics: + logLevel: warn | info | debug | warn | none | verbose | all +``` + +For connection-level debug information you can set these variables: + +```bash +export GRPC_NODE_TRACE="xds_client,xds_resolver,cds_balancer,eds_balancer,priority,weighted_target,round_robin,resolving_load_balancer,subchannel,keepalive,dns_resolver,fault_injection,http_filter,csds" +export GRPC_NODE_VERBOSITY=DEBUG +``` + +See the [grpc-node docs](https://github.com/grpc/grpc-node/blob/master/doc/environment_variables.md) for details and other settings. + +### Example of how to instrument the code + +* First, we need to define what metrics we want to instrument with OpenTelemetry + + ```ts + import { Counter, Meter } from '@opentelemetry/api-metrics'; + + export class FooApiMeters { + requestCount: Counter; + + constructor(meter: Meter) { + this.requestCount = meter.createCounter('request_count', { + description: 'Counts total number of requests', + }); + } + } + ``` + + In this example we're using a `Counter` metric, but [OpenTelemetry SDK](https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_api_metrics.Meter.html) provides there are other options to record metrics + +* Initialize meter in the plugin setup and pass it to the relevant components that will be instrumented. In this case, we want to instrument `FooApi` routes. + + ```ts + import { IRouter } from '@kbn/core/server'; + import { FooApiMeters } from './foo_api_meters'; + import { metrics } from '@opentelemetry/api-metrics'; + + export class FooApiPlugin implements Plugin { + private metrics: Metrics; + private libs: { router: IRouter, metrics: FooApiMeters}; + + constructor() { + this.metrics = new Metrics(metrics.getMeter('kibana.fooApi')); + } + + public setup(core: CoreSetup) { + const router = core.http.createRouter(); + + this.libs = { + router, + metrics: this.metrics + } + + initMetricsAPIRoute(this.libs); + } + } + ``` + + `monitoring_collection` plugins has to be initialized before the plugin that will be instrumented. If for some reason the instrumentation doesn't record any metrics, make sure `monitoring_collection` is included in the list of `requiredPlugins`. e.g: + + ```json + "requiredPlugins": [ + "monitoringCollection" + ], + ``` + +* Lastly we can use the `metrics` object to instrument the code + + ```ts + export const initMetricsAPIRoute = (libs: { router: IRouter, metrics: FooApiMeters}) => { + router.get( + { + path: '/api/foo', + validate: {}, + }, + async function (_context, _req, res) { + metrics.requestCount.add(1); + return res.ok({}); + } + ); + ``` \ No newline at end of file diff --git a/x-pack/plugins/monitoring_collection/server/config.ts b/x-pack/plugins/monitoring_collection/server/config.ts index 275d2f31e505d..5eda950ebe7f1 100644 --- a/x-pack/plugins/monitoring_collection/server/config.ts +++ b/x-pack/plugins/monitoring_collection/server/config.ts @@ -9,6 +9,19 @@ import { schema, TypeOf } from '@kbn/config-schema'; export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: true }), + opentelemetry: schema.object({ + metrics: schema.object({ + otlp: schema.object({ + url: schema.maybe(schema.string()), + headers: schema.maybe(schema.recordOf(schema.string(), schema.string())), + exportIntervalMillis: schema.number({ defaultValue: 10000 }), + logLevel: schema.string({ defaultValue: 'info' }), + }), + prometheus: schema.object({ + enabled: schema.boolean({ defaultValue: false }), + }), + }), + }), }); export type MonitoringCollectionConfig = ReturnType; diff --git a/x-pack/plugins/monitoring_collection/server/constants.ts b/x-pack/plugins/monitoring_collection/server/constants.ts index 86231dec6c6c2..92b43a9d80e48 100644 --- a/x-pack/plugins/monitoring_collection/server/constants.ts +++ b/x-pack/plugins/monitoring_collection/server/constants.ts @@ -5,3 +5,5 @@ * 2.0. */ export const TYPE_ALLOWLIST = ['node_rules', 'cluster_rules', 'node_actions', 'cluster_actions']; + +export const MONITORING_COLLECTION_BASE_PATH = '/api/monitoring_collection'; diff --git a/x-pack/plugins/monitoring_collection/server/lib/index.ts b/x-pack/plugins/monitoring_collection/server/lib/index.ts index 0c39a62ab359c..34c1fce763bdc 100644 --- a/x-pack/plugins/monitoring_collection/server/lib/index.ts +++ b/x-pack/plugins/monitoring_collection/server/lib/index.ts @@ -7,3 +7,4 @@ export { getKibanaStats } from './get_kibana_stats'; export { getESClusterUuid } from './get_es_cluster_uuid'; +export { PrometheusExporter } from './prometheus_exporter'; diff --git a/x-pack/plugins/monitoring_collection/server/lib/prometheus_exporter.ts b/x-pack/plugins/monitoring_collection/server/lib/prometheus_exporter.ts new file mode 100644 index 0000000000000..fc4359609bf34 --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/lib/prometheus_exporter.ts @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AggregationTemporality, MetricReader } from '@opentelemetry/sdk-metrics-base'; +import { + PrometheusExporter as OpenTelemetryPrometheusExporter, + ExporterConfig, + PrometheusSerializer, +} from '@opentelemetry/exporter-prometheus'; +import { KibanaResponseFactory } from '@kbn/core/server'; + +export class PrometheusExporter extends MetricReader { + private readonly prefix?: string; + private readonly appendTimestamp: boolean; + private serializer: PrometheusSerializer; + + constructor(config: ExporterConfig = {}) { + super(); + this.prefix = config.prefix || OpenTelemetryPrometheusExporter.DEFAULT_OPTIONS.prefix; + this.appendTimestamp = + typeof config.appendTimestamp === 'boolean' + ? config.appendTimestamp + : OpenTelemetryPrometheusExporter.DEFAULT_OPTIONS.appendTimestamp; + + this.serializer = new PrometheusSerializer(this.prefix, this.appendTimestamp); + } + + selectAggregationTemporality(): AggregationTemporality { + return AggregationTemporality.CUMULATIVE; + } + + protected onForceFlush(): Promise { + return Promise.resolve(undefined); + } + + protected onShutdown(): Promise { + return Promise.resolve(undefined); + } + + /** + * Responds to incoming message with current state of all metrics. + */ + public async exportMetrics(res: KibanaResponseFactory) { + try { + const collectionResult = await this.collect(); + const { resourceMetrics, errors } = collectionResult; + if (errors.length) { + return res.customError({ + statusCode: 500, + body: `PrometheusExporter: Metrics collection errors ${errors}`, + }); + } + const result = this.serializer.serialize(resourceMetrics); + if (result === '') { + return res.noContent(); + } + return res.ok({ + body: result, + }); + } catch (error) { + return res.customError({ + statusCode: 500, + body: { + message: `PrometheusExporter: Failed to export metrics ${error}`, + }, + }); + } + } +} diff --git a/x-pack/plugins/monitoring_collection/server/plugin.ts b/x-pack/plugins/monitoring_collection/server/plugin.ts index e1c3a5064a579..1c30a8439cf3c 100644 --- a/x-pack/plugins/monitoring_collection/server/plugin.ts +++ b/x-pack/plugins/monitoring_collection/server/plugin.ts @@ -6,10 +6,24 @@ */ import { JsonObject } from '@kbn/utility-types'; -import { CoreSetup, Plugin, PluginInitializerContext, Logger } from '@kbn/core/server'; +import { + CoreSetup, + Plugin, + PluginInitializerContext, + Logger, + ServiceStatus, +} from '@kbn/core/server'; import { MakeSchemaFrom } from '@kbn/usage-collection-plugin/server'; -import { ServiceStatus } from '@kbn/core/server'; -import { registerDynamicRoute } from './routes'; +import { metrics } from '@opentelemetry/api-metrics'; +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc'; +import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics-base'; +import { Resource } from '@opentelemetry/resources'; +import { diag, DiagLogger, DiagLogLevel } from '@opentelemetry/api'; +import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; +import * as grpc from '@grpc/grpc-js'; +import { PrometheusExporter } from './lib/prometheus_exporter'; +import { MonitoringCollectionConfig } from './config'; +import { registerDynamicRoute, registerV1PrometheusRoute, PROMETHEUS_PATH } from './routes'; import { TYPE_ALLOWLIST } from './constants'; export interface MonitoringCollectionSetup { @@ -27,12 +41,25 @@ export interface Metric { export class MonitoringCollectionPlugin implements Plugin { private readonly initializerContext: PluginInitializerContext; private readonly logger: Logger; + private readonly config: MonitoringCollectionConfig; + private readonly otlpLogger: DiagLogger; private metrics: Record> = {}; - constructor(initializerContext: PluginInitializerContext) { + private prometheusExporter?: PrometheusExporter; + + constructor(initializerContext: PluginInitializerContext) { this.initializerContext = initializerContext; this.logger = initializerContext.logger.get(); + this.config = initializerContext.config.get(); + + this.otlpLogger = { + debug: (message) => this.logger.debug(message), + error: (message) => this.logger.error(message), + info: (message) => this.logger.info(message), + warn: (message) => this.logger.warn(message), + verbose: (message) => this.logger.trace(message), + }; } async getMetric(type: string) { @@ -46,19 +73,28 @@ export class MonitoringCollectionPlugin implements Plugin; core.status.overall$.subscribe((newStatus) => { status = newStatus; }); + if (this.prometheusExporter) { + registerV1PrometheusRoute({ router, prometheusExporter: this.prometheusExporter }); + } + registerDynamicRoute({ router, config: { kibanaIndex, - kibanaVersion: this.initializerContext.env.packageInfo.version, - server: core.http.getServerInfo(), - uuid: this.initializerContext.env.instanceUuid, + kibanaVersion, + server, + uuid, }, getStatus: () => status, getMetric: async (type: string) => { @@ -85,6 +121,58 @@ export class MonitoringCollectionPlugin implements Plugin { jest.resetAllMocks(); }); -jest.mock('../lib', () => ({ +jest.mock('../../../../lib', () => ({ getESClusterUuid: () => 'clusterA', getKibanaStats: () => ({ name: 'myKibana' }), })); diff --git a/x-pack/plugins/monitoring_collection/server/routes/dynamic_route.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/get_metrics_by_type.ts similarity index 86% rename from x-pack/plugins/monitoring_collection/server/routes/dynamic_route.ts rename to x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/get_metrics_by_type.ts index 944037dd17a7b..4d18eeb6ec922 100644 --- a/x-pack/plugins/monitoring_collection/server/routes/dynamic_route.ts +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/get_metrics_by_type.ts @@ -7,8 +7,9 @@ import { JsonObject } from '@kbn/utility-types'; import { schema } from '@kbn/config-schema'; import { IRouter, ServiceStatus } from '@kbn/core/server'; -import { getESClusterUuid, getKibanaStats } from '../lib'; -import { MetricResult } from '../plugin'; +import { getESClusterUuid, getKibanaStats } from '../../../../lib'; +import { MetricResult } from '../../../../plugin'; +import { MONITORING_COLLECTION_BASE_PATH } from '../../../../constants'; export function registerDynamicRoute({ router, @@ -34,7 +35,7 @@ export function registerDynamicRoute({ }) { router.get( { - path: `/api/monitoring_collection/{type}`, + path: `${MONITORING_COLLECTION_BASE_PATH}/{type}`, options: { authRequired: true, tags: ['api'], // ensures that unauthenticated calls receive a 401 rather than a 302 redirect to login page diff --git a/x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/index.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/index.ts new file mode 100644 index 0000000000000..973d525b9a77b --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/dynamic_route/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export * from './get_metrics_by_type'; diff --git a/x-pack/plugins/monitoring_collection/server/routes/api/v1/index.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/index.ts new file mode 100644 index 0000000000000..e5a70f3f79abc --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export { registerDynamicRoute } from './dynamic_route'; +export { registerV1PrometheusRoute, PROMETHEUS_PATH } from './prometheus'; diff --git a/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.test.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.test.ts new file mode 100644 index 0000000000000..b136d982992c4 --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.test.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RequestHandlerContext } from '@kbn/core/server'; +import { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; +import { registerV1PrometheusRoute } from '.'; +import { PrometheusExporter } from '../../../../lib'; + +describe('Prometheus route', () => { + it('forwards the request to the prometheus exporter', async () => { + const router = httpServiceMock.createRouter(); + const prometheusExporter = { + exportMetrics: jest.fn(), + } as Partial as PrometheusExporter; + + registerV1PrometheusRoute({ router, prometheusExporter }); + + const [, handler] = router.get.mock.calls[0]; + + const context = {} as jest.Mocked; + const req = httpServerMock.createKibanaRequest(); + const factory = httpServerMock.createResponseFactory(); + + await handler(context, req, factory); + + expect(prometheusExporter.exportMetrics).toHaveBeenCalledWith(factory); + }); +}); diff --git a/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.ts new file mode 100644 index 0000000000000..6977be155a4fb --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/get_metrics.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IRouter } from '@kbn/core/server'; +import { MONITORING_COLLECTION_BASE_PATH } from '../../../../constants'; +import { PrometheusExporter } from '../../../../lib'; + +export const PROMETHEUS_PATH = `${MONITORING_COLLECTION_BASE_PATH}/v1/prometheus`; +export function registerV1PrometheusRoute({ + router, + prometheusExporter, +}: { + router: IRouter; + prometheusExporter: PrometheusExporter; +}) { + router.get( + { + path: PROMETHEUS_PATH, + options: { + authRequired: true, + tags: ['api'], // ensures that unauthenticated calls receive a 401 rather than a 302 redirect to login page + }, + validate: {}, + }, + async (_context, _req, res) => { + return prometheusExporter.exportMetrics(res); + } + ); +} diff --git a/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/index.ts b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/index.ts new file mode 100644 index 0000000000000..5b99f51c94511 --- /dev/null +++ b/x-pack/plugins/monitoring_collection/server/routes/api/v1/prometheus/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export * from './get_metrics'; diff --git a/x-pack/plugins/monitoring_collection/server/routes/index.ts b/x-pack/plugins/monitoring_collection/server/routes/index.ts index eb96ce19f764e..29cd177990593 100644 --- a/x-pack/plugins/monitoring_collection/server/routes/index.ts +++ b/x-pack/plugins/monitoring_collection/server/routes/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { registerDynamicRoute } from './dynamic_route'; +export { registerV1PrometheusRoute, PROMETHEUS_PATH, registerDynamicRoute } from './api/v1'; diff --git a/x-pack/test/api_integration/apis/index.ts b/x-pack/test/api_integration/apis/index.ts index 6bec2ebe80a13..46b10af2a52b3 100644 --- a/x-pack/test/api_integration/apis/index.ts +++ b/x-pack/test/api_integration/apis/index.ts @@ -36,5 +36,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./watcher')); loadTestFile(require.resolve('./logs_ui')); loadTestFile(require.resolve('./osquery')); + loadTestFile(require.resolve('./monitoring_collection')); }); } diff --git a/x-pack/test/api_integration/apis/monitoring_collection/index.ts b/x-pack/test/api_integration/apis/monitoring_collection/index.ts new file mode 100644 index 0000000000000..e89bd44963c03 --- /dev/null +++ b/x-pack/test/api_integration/apis/monitoring_collection/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Monitoring Collection', function taskManagerSuite() { + loadTestFile(require.resolve('./prometheus')); + }); +} diff --git a/x-pack/test/api_integration/apis/monitoring_collection/prometheus.ts b/x-pack/test/api_integration/apis/monitoring_collection/prometheus.ts new file mode 100644 index 0000000000000..0ac13dda92cb5 --- /dev/null +++ b/x-pack/test/api_integration/apis/monitoring_collection/prometheus.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('Prometheus endpoint', () => { + it('returns prometheus scraped metrics', async () => { + await supertest.post('/api/generate_otel_metrics').set('kbn-xsrf', 'foo').expect(200); + const response = await supertest.get('/api/monitoring_collection/v1/prometheus').expect(200); + + expect(response.text.replace(/\s+/g, ' ')).to.match( + /^# HELP request_count_total Counts total number of requests # TYPE request_count_total counter request_count_total [0-9]/ + ); + }); + }); +} diff --git a/x-pack/test/api_integration/config.ts b/x-pack/test/api_integration/config.ts index 8cc5fb6f57d42..ca3795e812ee2 100644 --- a/x-pack/test/api_integration/config.ts +++ b/x-pack/test/api_integration/config.ts @@ -37,6 +37,7 @@ export async function getApiIntegrationConfig({ readConfigFile }: FtrConfigProvi '--xpack.ruleRegistry.write.cache.enabled=false', '--xpack.uptime.service.password=test', '--xpack.uptime.service.username=localKibanaIntegrationTestsUser', + '--monitoring_collection.opentelemetry.metrics.prometheus.enabled=true', ], }, esTestCluster: { diff --git a/yarn.lock b/yarn.lock index 47a0d08a5b1c7..7a09d8caa1dfb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1997,6 +1997,25 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@grpc/grpc-js@^1.5.9", "@grpc/grpc-js@^1.6.7": + version "1.6.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.7.tgz#4c4fa998ff719fe859ac19fe977fdef097bb99aa" + integrity sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw== + dependencies: + "@grpc/proto-loader" "^0.6.4" + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.6.4", "@grpc/proto-loader@^0.6.9": + version "0.6.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.13.tgz#008f989b72a40c60c96cd4088522f09b05ac66bc" + integrity sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^6.11.3" + yargs "^16.2.0" + "@gulp-sourcemaps/identity-map@1.X": version "1.0.2" resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" @@ -4431,11 +4450,120 @@ "@mattiasbuelens/web-streams-adapter" "~0.1.0" web-streams-polyfill "~3.0.3" -"@opentelemetry/api@^1.1.0": +"@opentelemetry/api-metrics@0.30.0", "@opentelemetry/api-metrics@^0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-metrics/-/api-metrics-0.30.0.tgz#b5defd10756e81d1c7ce8669ff8a8d2465ba0be8" + integrity sha512-jSb7iiYPY+DSUKIyzfGt0a5K1QGzWY5fSWtUB8Alfi27NhQGHBeuYYC5n9MaBP/HNWw5GpEIhXGEYCF9Pf8IEg== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.1.0.tgz#563539048255bbe1a5f4f586a4a10a1bb737f44a" integrity sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ== +"@opentelemetry/core@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.4.0.tgz#26839ab9e36583a174273a1e1c5b33336c163725" + integrity sha512-faq50VFEdyC7ICAOlhSi+yYZ+peznnGjTJToha9R63i9fVopzpKrkZt7AIdXUmz2+L2OqXrcJs7EIdN/oDyr5w== + dependencies: + "@opentelemetry/semantic-conventions" "1.4.0" + +"@opentelemetry/exporter-metrics-otlp-grpc@^0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.30.0.tgz#4117d07b94302ef407dc7625a1b599de308c5476" + integrity sha512-02WEAA3X7A6qveCYISr6mvg8eKl9NeNdZytQiAexzAIItW/ncN3mxmbuf8VVZHNPBe6osisSzxhPpFH3G6Gh+w== + dependencies: + "@grpc/grpc-js" "^1.5.9" + "@grpc/proto-loader" "^0.6.9" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/exporter-metrics-otlp-http" "0.30.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.30.0" + "@opentelemetry/otlp-transformer" "0.30.0" + "@opentelemetry/resources" "1.4.0" + "@opentelemetry/sdk-metrics-base" "0.30.0" + +"@opentelemetry/exporter-metrics-otlp-http@0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.30.0.tgz#9d87e4c3e796e14109ac83e6d4ce5bad215c2a1e" + integrity sha512-2NFR/D9jih1TtEnEyD7oIMR47yb9Kuy5v2x+Fu19vv2gTf1HOhdA+LT4SpkxH+dUixEnDw8n11XBIa/uhNfq3Q== + dependencies: + "@opentelemetry/api-metrics" "0.30.0" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/otlp-exporter-base" "0.30.0" + "@opentelemetry/otlp-transformer" "0.30.0" + "@opentelemetry/resources" "1.4.0" + "@opentelemetry/sdk-metrics-base" "0.30.0" + +"@opentelemetry/exporter-prometheus@^0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.30.0.tgz#f81322d3cb000170e716bc76820600d5649be538" + integrity sha512-y0SXvpzoKR+Tk/UL6F1f7vAcCzqpCDP/cTEa+Z7sX57aEG0HDXLQiLmAgK/BHqcEN5MFQMZ+MDVDsUrvpa6/Jw== + dependencies: + "@opentelemetry/api-metrics" "0.30.0" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/sdk-metrics-base" "0.30.0" + +"@opentelemetry/otlp-exporter-base@0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.30.0.tgz#5f278b3529d38311dbdfc1ebcb764f5e5126e548" + integrity sha512-+dJnj2MSd3tsk+ooEw+0bF+dJs/NjGEVnCB3/FYxnUFaW9cCBbQQyt6X3YQYtYrEx4EEiTlwrW8pUpB1tsup7A== + dependencies: + "@opentelemetry/core" "1.4.0" + +"@opentelemetry/otlp-grpc-exporter-base@0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.30.0.tgz#3fa07667ddf604a028583a2a138b8b4ba8fa9bb0" + integrity sha512-86fuhZ7Z2un3L5Kd7jbH1oEn92v9DD92teErnYRXqYB/qyO61OLxaY6WxH9KOjmbs5CgCdLQ5bvED3wWDe3r7w== + dependencies: + "@grpc/grpc-js" "^1.5.9" + "@grpc/proto-loader" "^0.6.9" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/otlp-exporter-base" "0.30.0" + +"@opentelemetry/otlp-transformer@0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.30.0.tgz#d81e1ae68dfb31d66cd4ca03ca965cdaa2e2b288" + integrity sha512-BTLXyBPBlCQCG4tXYZjlso4pT+gGpnTjzkFYTPYs52fO5DMWvYHlV8ST/raOIqX7wsamiH2zeqJ9W91017MtdA== + dependencies: + "@opentelemetry/api-metrics" "0.30.0" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/resources" "1.4.0" + "@opentelemetry/sdk-metrics-base" "0.30.0" + "@opentelemetry/sdk-trace-base" "1.4.0" + +"@opentelemetry/resources@1.4.0", "@opentelemetry/resources@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.4.0.tgz#5e23b0d7976158861059dec17e0ee36a35a5ab85" + integrity sha512-Q3pI5+pCM+Ur7YwK9GbG89UBipwJbfmuzSPAXTw964ZHFzSrz+JAgrETC9rqsUOYdUlj/V7LbRMG5bo72xE0Xw== + dependencies: + "@opentelemetry/core" "1.4.0" + "@opentelemetry/semantic-conventions" "1.4.0" + +"@opentelemetry/sdk-metrics-base@0.30.0", "@opentelemetry/sdk-metrics-base@^0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.30.0.tgz#242d9260a89a1ac2bf1e167b3fda758f3883c769" + integrity sha512-3BDg1MYDInDyGvy+bSH8OuCX5nsue7omH6Y2eidCGTTDYRPxDmq9tsRJxnTUepoMAvWX+1sTwZ4JqTFmc1z8Mw== + dependencies: + "@opentelemetry/api-metrics" "0.30.0" + "@opentelemetry/core" "1.4.0" + "@opentelemetry/resources" "1.4.0" + lodash.merge "4.6.2" + +"@opentelemetry/sdk-trace-base@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.4.0.tgz#e54d09c1258cd53d3fe726053ed1cbda9d74f023" + integrity sha512-l7EEjcOgYlKWK0hfxz4Jtkkk2DuGiqBDWmRZf7g2Is9RVneF1IgcrbYZTKGaVfBKA7lPuVtUiQ2qTv3R+dKJrw== + dependencies: + "@opentelemetry/core" "1.4.0" + "@opentelemetry/resources" "1.4.0" + "@opentelemetry/semantic-conventions" "1.4.0" + +"@opentelemetry/semantic-conventions@1.4.0", "@opentelemetry/semantic-conventions@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz#facf2c67d6063b9918d5a5e3fdf25f3a30d547b6" + integrity sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ== + "@percy/agent@^0.28.6": version "0.28.6" resolved "https://registry.yarnpkg.com/@percy/agent/-/agent-0.28.6.tgz#b220fab6ddcf63ae4e6c343108ba6955a772ce1c" @@ -7363,6 +7491,11 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/lru-cache@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" @@ -7530,7 +7663,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@12.20.24", "@types/node@16.11.41", "@types/node@>= 8", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10", "@types/node@^14.14.31": +"@types/node@*", "@types/node@12.20.24", "@types/node@16.11.41", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10", "@types/node@^14.14.31": version "16.11.41" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.41.tgz#88eb485b1bfdb4c224d878b7832239536aa2f813" integrity sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ== @@ -23953,6 +24086,25 @@ protobufjs@6.8.8: "@types/node" "^10.1.0" long "^4.0.0" +protobufjs@^6.11.3: + version "6.11.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" + integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + protocol-buffers-schema@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" @@ -30903,7 +31055,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: +yargs@16.2.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From e3722862ba485a99158e4ca098ce499918cc59a9 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Thu, 14 Jul 2022 13:56:18 +0100 Subject: [PATCH 47/96] [ML] Fixing start datafeed modal overflow (#136292) --- .../start_datafeed_modal.js | 2 +- .../_time_range_selector.scss | 4 -- .../time_range_selector.js | 54 ++++++++++--------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js index c5bb63b96fdd2..c4c53b00591f4 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js @@ -143,7 +143,7 @@ export class StartDatafeedModal extends Component { modal = ( diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/_time_range_selector.scss b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/_time_range_selector.scss index 65a72a1d4a48d..faa69e90ecab5 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/_time_range_selector.scss +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/_time_range_selector.scss @@ -1,9 +1,6 @@ // stylelint-disable selector-no-qualifying-type // SASSTODO: Looks like this could use a rewrite. Needs selectors .time-range-selector { - .time-range-section-container { - display: flex; - } .time-range-section-title { font-weight: bold; margin-bottom: $euiSizeS; @@ -46,7 +43,6 @@ } .body { display: block; - height: 315px; } } & > li.has-body.active { diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js index 4300a918b948f..05e8e60abc4fb 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js @@ -9,7 +9,7 @@ import './_time_range_selector.scss'; import PropTypes from 'prop-types'; import React, { Component, useState, useEffect } from 'react'; -import { EuiDatePicker, EuiFieldText, EuiSpacer } from '@elastic/eui'; +import { EuiDatePicker, EuiFieldText, EuiSpacer, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; @@ -181,30 +181,34 @@ export class TimeRangeSelector extends Component { ) : null} -
- - } - items={startItems} - switchState={this.state.startTab} - switchFunc={this.setStartTab} - /> - - } - items={endItems} - switchState={this.state.endTab} - switchFunc={this.setEndTab} - /> -
+ + + + } + items={startItems} + switchState={this.state.startTab} + switchFunc={this.setStartTab} + /> + + + + } + items={endItems} + switchState={this.state.endTab} + switchFunc={this.setEndTab} + /> + +
); } From 9a4eca0a148ddbddadb8d585b06472a46065a583 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Thu, 14 Jul 2022 08:01:33 -0500 Subject: [PATCH 48/96] [data views] Enforce uniqueness by name instead of index pattern (#136071) * data view uniqueness by name --- .github/CODEOWNERS | 1 + .../data_view_editor_flyout_content.tsx | 14 ++--- .../components/form_fields/name_field.tsx | 55 +++++++++++++++++-- .../form_fields/timestamp_field.tsx | 8 +-- .../components/form_fields/title_field.tsx | 28 +--------- .../public/components/form_schema.ts | 1 + .../common/data_views/data_views.ts | 14 +++-- src/plugins/data_views/common/utils.ts | 18 +++--- .../rest_api_routes/create_data_view.ts | 2 +- .../server/saved_objects/data_views.ts | 5 +- .../create_index_pattern/main.ts | 2 +- .../map_object_to_result.test.ts | 4 +- .../saved_objects/map_object_to_result.ts | 4 +- .../kbn_archiver/global_search/basic.json | 3 +- .../global_search/global_search_providers.ts | 2 +- 15 files changed, 92 insertions(+), 69 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 421a239e3b0df..481415fc584b0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -273,6 +273,7 @@ /src/plugins/saved_objects_tagging_oss @elastic/kibana-core /config/kibana.yml @elastic/kibana-core /typings/ @elastic/kibana-core +/x-pack/plugins/global_search_providers @elastic/kibana-core /x-pack/plugins/banners/ @elastic/kibana-core /x-pack/plugins/features/ @elastic/kibana-core /x-pack/plugins/licensing/ @elastic/kibana-core diff --git a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx index 744e3824e3c68..3c1305d8e7860 100644 --- a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx +++ b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx @@ -193,10 +193,11 @@ const IndexPatternEditorFlyoutContentComponent = ({ useEffect(() => { loadSources(); const getTitles = async () => { - const indexPatternTitles = await dataViews.getTitles(editData ? true : false); + const dataViewListItems = await dataViews.getIdsWithTitle(editData ? true : false); + const indexPatternNames = dataViewListItems.map((item) => item.name || item.title); setExistingIndexPatterns( - editData ? indexPatternTitles.filter((v) => v !== editData.title) : indexPatternTitles + editData ? indexPatternNames.filter((v) => v !== editData.name) : indexPatternNames ); setIsLoadingIndexPatterns(false); }; @@ -226,9 +227,7 @@ const IndexPatternEditorFlyoutContentComponent = ({ const currentLoadingTimestampFieldsIdx = ++currentLoadingTimestampFieldsRef.current; let timestampOptions: TimestampOption[] = []; const isValidResult = - !existingIndexPatterns.includes(query) && - matchedIndices.exactMatchedIndices.length > 0 && - !isLoadingMatchedIndices; + matchedIndices.exactMatchedIndices.length > 0 && !isLoadingMatchedIndices; if (isValidResult) { setIsLoadingTimestampFields(true); const getFieldsOptions: GetFieldsOptions = { @@ -249,7 +248,6 @@ const IndexPatternEditorFlyoutContentComponent = ({ return timestampOptions; }, [ - existingIndexPatterns, dataViews, requireTimestampField, rollupIndex, @@ -380,7 +378,7 @@ const IndexPatternEditorFlyoutContentComponent = ({ - + @@ -388,7 +386,6 @@ const IndexPatternEditorFlyoutContentComponent = ({ diff --git a/src/plugins/data_view_editor/public/components/form_fields/name_field.tsx b/src/plugins/data_view_editor/public/components/form_fields/name_field.tsx index 8b6a0cfb74b70..f2236abad5ec7 100644 --- a/src/plugins/data_view_editor/public/components/form_fields/name_field.tsx +++ b/src/plugins/data_view_editor/public/components/form_fields/name_field.tsx @@ -6,20 +6,66 @@ * Side Public License, v 1. */ -import React, { ChangeEvent } from 'react'; +import React, { ChangeEvent, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiFieldText } from '@elastic/eui'; -import { DataView, UseField } from '../../shared_imports'; +import { + DataView, + UseField, + ValidationConfig, + FieldConfig, + getFieldValidityAndErrorMessage, +} from '../../shared_imports'; import { IndexPatternConfig } from '../../types'; +import { schema } from '../form_schema'; interface NameFieldProps { editData?: DataView; + existingDataViewNames: string[]; } -export const NameField = ({ editData }: NameFieldProps) => { +interface GetNameConfigArgs { + namesNotAllowed: string[]; +} + +const createNameNoDupesValidator = ( + namesNotAllowed: string[] +): ValidationConfig<{}, string, string> => ({ + validator: ({ value }) => { + if (namesNotAllowed.includes(value)) { + return { + message: i18n.translate('indexPatternEditor.dataViewExists.ValidationErrorMessage', { + defaultMessage: 'A data view with this name already exists.', + }), + }; + } + }, +}); + +const getNameConfig = ({ namesNotAllowed }: GetNameConfigArgs): FieldConfig => { + const nameFieldConfig = schema.name; + + const validations = [...nameFieldConfig.validations, createNameNoDupesValidator(namesNotAllowed)]; + + return { + ...nameFieldConfig!, + validations, + }; +}; + +export const NameField = ({ editData, existingDataViewNames }: NameFieldProps) => { + const config = useMemo( + () => + getNameConfig({ + namesNotAllowed: existingDataViewNames, + }), + [existingDataViewNames] + ); + return ( path="name" + config={config} componentProps={{ euiFieldProps: { 'aria-label': i18n.translate('indexPatternEditor.form.nameAriaLabel', { @@ -29,8 +75,9 @@ export const NameField = ({ editData }: NameFieldProps) => { }} > {(field) => { + const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); return ( - + ) => { diff --git a/src/plugins/data_view_editor/public/components/form_fields/timestamp_field.tsx b/src/plugins/data_view_editor/public/components/form_fields/timestamp_field.tsx index dd9d4f7117453..ce36d1e1fdc99 100644 --- a/src/plugins/data_view_editor/public/components/form_fields/timestamp_field.tsx +++ b/src/plugins/data_view_editor/public/components/form_fields/timestamp_field.tsx @@ -24,7 +24,6 @@ import { schema } from '../form_schema'; interface Props { options: TimestampOption[]; isLoadingOptions: boolean; - isExistingIndexPattern: boolean; isLoadingMatchedIndices: boolean; hasMatchedIndices: boolean; } @@ -73,7 +72,6 @@ const timestampFieldHelp = i18n.translate('indexPatternEditor.editor.form.timeFi export const TimestampField = ({ options = [], isLoadingOptions = false, - isExistingIndexPattern, isLoadingMatchedIndices, hasMatchedIndices, }: Props) => { @@ -85,11 +83,7 @@ export const TimestampField = ({ const selectTimestampHelp = options.length ? timestampFieldHelp : ''; const timestampNoFieldsHelp = - options.length === 0 && - !isExistingIndexPattern && - !isLoadingMatchedIndices && - !isLoadingOptions && - hasMatchedIndices + options.length === 0 && !isLoadingMatchedIndices && !isLoadingOptions && hasMatchedIndices ? noTimestampOptionText : ''; diff --git a/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx b/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx index 29bb64bb53997..6c41700ead531 100644 --- a/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx +++ b/src/plugins/data_view_editor/public/components/form_fields/title_field.tsx @@ -30,7 +30,6 @@ interface RefreshMatchedIndicesResult { } interface TitleFieldProps { - existingIndexPatterns: string[]; isRollup: boolean; matchedIndices: MatchedItem[]; rollupIndicesCapabilities: RollupIndicesCapsResponse; @@ -55,20 +54,6 @@ const mustMatchError = { }), }; -const createTitlesNoDupesValidator = ( - namesNotAllowed: string[] -): ValidationConfig<{}, string, string> => ({ - validator: ({ value }) => { - if (namesNotAllowed.includes(value)) { - return { - message: i18n.translate('indexPatternEditor.dataViewExists.ValidationErrorMessage', { - defaultMessage: 'An index pattern with this name already exists.', - }), - }; - } - }, -}); - interface MatchesValidatorArgs { rollupIndicesCapabilities: Record; refreshMatchedIndices: (title: string) => Promise; @@ -122,7 +107,6 @@ const createMatchesIndicesValidator = ({ }); interface GetTitleConfigArgs { - namesNotAllowed: string[]; isRollup: boolean; matchedIndices: MatchedItem[]; rollupIndicesCapabilities: RollupIndicesCapsResponse; @@ -130,7 +114,6 @@ interface GetTitleConfigArgs { } const getTitleConfig = ({ - namesNotAllowed, isRollup, rollupIndicesCapabilities, refreshMatchedIndices, @@ -145,7 +128,6 @@ const getTitleConfig = ({ refreshMatchedIndices, isRollup, }), - createTitlesNoDupesValidator(namesNotAllowed), ]; return { @@ -155,7 +137,6 @@ const getTitleConfig = ({ }; export const TitleField = ({ - existingIndexPatterns, isRollup, matchedIndices, rollupIndicesCapabilities, @@ -166,19 +147,12 @@ export const TitleField = ({ const fieldConfig = useMemo( () => getTitleConfig({ - namesNotAllowed: existingIndexPatterns, isRollup, matchedIndices, rollupIndicesCapabilities, refreshMatchedIndices, }), - [ - existingIndexPatterns, - isRollup, - matchedIndices, - rollupIndicesCapabilities, - refreshMatchedIndices, - ] + [isRollup, matchedIndices, rollupIndicesCapabilities, refreshMatchedIndices] ); return ( diff --git a/src/plugins/data_view_editor/public/components/form_schema.ts b/src/plugins/data_view_editor/public/components/form_schema.ts index 9af41592dcbfe..98c3a3b5322eb 100644 --- a/src/plugins/data_view_editor/public/components/form_schema.ts +++ b/src/plugins/data_view_editor/public/components/form_schema.ts @@ -50,6 +50,7 @@ export const schema = { defaultMessage: 'Name', }), defaultValue: '', + validations: [], }, timestampField: { label: i18n.translate('indexPatternEditor.editor.form.timeFieldLabel', { diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index a92f18029bd4a..12a06b9a98fa7 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -33,7 +33,7 @@ import { } from '../types'; import { META_FIELDS, SavedObject } from '..'; import { DataViewMissingIndices } from '../lib'; -import { findByTitle } from '../utils'; +import { findByName } from '../utils'; import { DuplicateDataViewError, DataViewInsufficientAccessError } from '../errors'; const MAX_ATTEMPTS_TO_RESOLVE_CONFLICTS = 3; @@ -772,12 +772,17 @@ export class DataViewsService { * @param skipFetchFields if true, will not fetch fields * @returns DataView */ - async create({ id, ...restOfSpec }: DataViewSpec, skipFetchFields = false): Promise { + async create( + { id, name, title, ...restOfSpec }: DataViewSpec, + skipFetchFields = false + ): Promise { const shortDotsEnable = await this.config.get(FORMATS_UI_SETTINGS.SHORT_DOTS_ENABLE); const metaFields = await this.config.get(META_FIELDS); const spec = { id: id ?? uuid.v4(), + title, + name: name || title, ...restOfSpec, }; @@ -821,12 +826,13 @@ export class DataViewsService { if (!(await this.getCanSave())) { throw new DataViewInsufficientAccessError(); } - const dupe = await findByTitle(this.savedObjectsClient, dataView.title); + const dupe = await findByName(this.savedObjectsClient, dataView.getName()); + if (dupe) { if (override) { await this.delete(dupe.id); } else { - throw new DuplicateDataViewError(`Duplicate data view: ${dataView.title}`); + throw new DuplicateDataViewError(`Duplicate data view: ${dataView.getName()}`); } } diff --git a/src/plugins/data_views/common/utils.ts b/src/plugins/data_views/common/utils.ts index 98f55d6265d27..c12e6c71c92ba 100644 --- a/src/plugins/data_views/common/utils.ts +++ b/src/plugins/data_views/common/utils.ts @@ -12,22 +12,22 @@ import type { SavedObjectsClientCommon } from './types'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from './constants'; /** - * Returns an object matching a given title + * Returns an object matching a given name * * @param client {SavedObjectsClientCommon} - * @param title {string} - * @returns {Promise} + * @param name {string} + * @returns {SavedObject|undefined} */ -export async function findByTitle(client: SavedObjectsClientCommon, title: string) { - if (title) { +export async function findByName(client: SavedObjectsClientCommon, name: string) { + if (name) { const savedObjects = await client.find({ type: DATA_VIEW_SAVED_OBJECT_TYPE, perPage: 10, - search: `"${title}"`, - searchFields: ['title'], - fields: ['title'], + search: `"${name}"`, + searchFields: ['name'], + fields: ['name'], }); - return savedObjects.find((obj) => obj.attributes.title.toLowerCase() === title.toLowerCase()); + return savedObjects ? savedObjects[0] : undefined; } } diff --git a/src/plugins/data_views/server/rest_api_routes/create_data_view.ts b/src/plugins/data_views/server/rest_api_routes/create_data_view.ts index c0b01329f5866..00897c364e085 100644 --- a/src/plugins/data_views/server/rest_api_routes/create_data_view.ts +++ b/src/plugins/data_views/server/rest_api_routes/create_data_view.ts @@ -113,7 +113,7 @@ const registerCreateDataViewRouteFactory = const dataView = await createDataView({ dataViewsService, usageCollection, - spec: spec as DataViewSpec, + spec: { ...spec, name: spec.name || spec.title } as DataViewSpec, override: body.override, refreshFields: body.refresh_fields, counterName: `${req.route.method} ${path}`, diff --git a/src/plugins/data_views/server/saved_objects/data_views.ts b/src/plugins/data_views/server/saved_objects/data_views.ts index 6319911f3bfd5..064302e2b6fe6 100644 --- a/src/plugins/data_views/server/saved_objects/data_views.ts +++ b/src/plugins/data_views/server/saved_objects/data_views.ts @@ -18,10 +18,10 @@ export const dataViewSavedObjectType: SavedObjectsType = { management: { displayName: 'data view', icon: 'indexPatternApp', - defaultSearchField: 'title', + defaultSearchField: 'name', importableAndExportable: true, getTitle(obj) { - return obj.attributes.title; + return obj.attributes.name || obj.attributes.title; }, getEditUrl(obj) { return `/management/kibana/dataViews/dataView/${encodeURIComponent(obj.id)}`; @@ -38,6 +38,7 @@ export const dataViewSavedObjectType: SavedObjectsType = { properties: { title: { type: 'text' }, type: { type: 'keyword' }, + name: { type: 'text' }, }, }, migrations: indexPatternSavedObjectTypeMigrations as any, diff --git a/test/api_integration/apis/index_patterns/index_pattern_crud/create_index_pattern/main.ts b/test/api_integration/apis/index_patterns/index_pattern_crud/create_index_pattern/main.ts index 43c9696fd11f8..6b6a84e539da3 100644 --- a/test/api_integration/apis/index_patterns/index_pattern_crud/create_index_pattern/main.ts +++ b/test/api_integration/apis/index_patterns/index_pattern_crud/create_index_pattern/main.ts @@ -243,7 +243,7 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body[config.serviceKey].fieldAttrs.foo.customLabel).to.be('test'); }); - describe('when creating index pattern with existing title', () => { + describe('when creating index pattern with existing name', () => { it('returns error, by default', async () => { const title = `foo-${Date.now()}-${Math.random()}*`; const response1 = await supertest.post(config.path).send({ diff --git a/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.test.ts b/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.test.ts index 7f5a894a32e53..13d6803f1ccdf 100644 --- a/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.test.ts +++ b/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.test.ts @@ -153,6 +153,7 @@ describe('mapToResults', () => { management: { defaultSearchField: 'excerpt', getInAppUrl: (obj) => ({ path: `/type-c/${obj.id}`, uiCapabilitiesPath: 'test.typeC' }), + getTitle: (obj) => `${obj.attributes.title} ${obj.attributes.name}`, }, }) ); @@ -204,6 +205,7 @@ describe('mapToResults', () => { { excerpt: 'titleC', title: 'foo', + name: 'name', }, [ { name: 'tag A', type: 'tag', id: '1' }, @@ -235,7 +237,7 @@ describe('mapToResults', () => { }, { id: 'resultC', - title: 'titleC', + title: 'foo name', type: 'typeC', url: '/type-c/resultC', score: 42, diff --git a/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.ts b/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.ts index 676c92fba0b4c..bc993129435cb 100644 --- a/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.ts +++ b/x-pack/plugins/global_search_providers/server/providers/saved_objects/map_object_to_result.ts @@ -41,7 +41,7 @@ export const mapToResult = ( object: SavedObjectsFindResult, type: SavedObjectsType ): GlobalSearchProviderResult => { - const { defaultSearchField, getInAppUrl } = type.management ?? {}; + const { defaultSearchField, getInAppUrl, getTitle } = type.management ?? {}; if (defaultSearchField === undefined || getInAppUrl === undefined) { throw new Error('Trying to map an object from a type without management metadata'); } @@ -49,7 +49,7 @@ export const mapToResult = ( id: object.id, // defaultSearchField is dynamic and not 'directly' bound to the generic type of the SavedObject // so we are forced to cast the attributes to any to access the properties associated with it. - title: (object.attributes as any)[defaultSearchField], + title: getTitle ? getTitle(object) : (object.attributes as any)[defaultSearchField], type: object.type, icon: type.management?.icon ?? undefined, url: getInAppUrl(object).path, diff --git a/x-pack/test/functional/fixtures/kbn_archiver/global_search/basic.json b/x-pack/test/functional/fixtures/kbn_archiver/global_search/basic.json index 49f26e7429870..081589750929a 100644 --- a/x-pack/test/functional/fixtures/kbn_archiver/global_search/basic.json +++ b/x-pack/test/functional/fixtures/kbn_archiver/global_search/basic.json @@ -66,7 +66,8 @@ "attributes": { "fields": "[{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]", "timeFieldName": "@timestamp", - "title": "logstash-*" + "title": "logstash-*", + "name": "logstash-*" }, "coreMigrationVersion": "8.4.0", "id": "logstash-*", diff --git a/x-pack/test/plugin_functional/test_suites/global_search/global_search_providers.ts b/x-pack/test/plugin_functional/test_suites/global_search/global_search_providers.ts index 047b852612ecf..daf1821ef5c05 100644 --- a/x-pack/test/plugin_functional/test_suites/global_search/global_search_providers.ts +++ b/x-pack/test/plugin_functional/test_suites/global_search/global_search_providers.ts @@ -40,7 +40,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.savedObjects.cleanStandardList(); }); - it('can search for index patterns', async () => { + it('can search for data views', async () => { const results = await findResultsWithApi('type:index-pattern logstash'); expect(results.length).to.be(1); expect(results[0].type).to.be('index-pattern'); From 274c2c7478292c6b0368024b47a02b93db8c99e0 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Thu, 14 Jul 2022 09:13:03 -0400 Subject: [PATCH 49/96] Comment out code around triggering the command input history (#136320) - Comments out Responder's command input history and defers this functionality to a future release. --- .../components/command_input/command_input.test.tsx | 12 ++++++++---- .../components/command_input/command_input.tsx | 13 +++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx index 42990db6e48ce..a06d6ae7c38b7 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.test.tsx @@ -92,14 +92,16 @@ describe('When entering data into the Console input', () => { expect(getFooterText()).toEqual('Unknown command abc'); }); - it('should display the input history popover when UP key is pressed', async () => { + // FIXME:PT uncomment once task OLM task #4384 is implemented + it.skip('should display the input history popover when UP key is pressed', async () => { render(); await showInputHistoryPopover(); expect(renderResult.getByTestId('test-inputHistorySelector')).not.toBeNull(); }); - describe('and when the command input history popover is opened', () => { + // FIXME:PT uncomment once task OLM task #4384 is implemented + describe.skip('and when the command input history popover is opened', () => { const renderWithInputHistory = async (inputText: string = '') => { render(); enterCommand('help'); @@ -237,7 +239,8 @@ describe('When entering data into the Console input', () => { expect(getFooterText()).toEqual('cmd1 '); }); - it('should return original cursor position if input history is closed with no selection', async () => { + // FIXME:PT uncomment once task OLM task #4384 is implemented + it.skip('should return original cursor position if input history is closed with no selection', async () => { typeKeyboardKey('{Enter}'); // add `isolate` to the input history typeKeyboardKey('release'); @@ -262,7 +265,8 @@ describe('When entering data into the Console input', () => { expect(getRightOfCursorText()).toEqual('elease'); }); - it('should reset cursor position to default (at end) if a selection is done from input history', async () => { + // FIXME:PT uncomment once task OLM task #4384 is implemented + it.skip('should reset cursor position to default (at end) if a selection is done from input history', async () => { typeKeyboardKey('{Enter}'); // add `isolate` to the input history typeKeyboardKey('release'); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx index 9c5d528c46659..89ba5f6561435 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx @@ -131,12 +131,13 @@ export const CommandInput = memo(({ prompt = '', focusRef, .. const keyCode = eventDetails.keyCode; // UP arrow key - if (keyCode === 38) { - dispatch({ type: 'removeFocusFromKeyCapture' }); - dispatch({ type: 'updateInputPopoverState', payload: { show: 'input-history' } }); - - return; - } + // FIXME:PT to be addressed via OLM task #4384 + // if (keyCode === 38) { + // dispatch({ type: 'removeFocusFromKeyCapture' }); + // dispatch({ type: 'updateInputPopoverState', payload: { show: 'input-history' } }); + // + // return; + // } // Update the store with the updated text that was entered dispatch({ From 21a9b24fed46c7a21a0abe4a825363424c84650b Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 14 Jul 2022 10:48:47 -0300 Subject: [PATCH 50/96] [Discover] Improve support for pinned filters in surrounding documents (#135722) * [Discover] Update surrounding documents to support global filters * [Discover] Finish adding support for global filters in surrounding documents * [Discover] Fix broken jest tests * [Discover] Fixed null initial global state in surrounding documents * [Discover] Fix issue with null filters when query param gets cleared, and add functional tests for changes * [Discover] Remove filterManager from useEffect dependencies * [Discover] Fix 'cannot read properties of undefined' toast when navigating between surrounding documents while filters are present * [Discover] Fix typo in createInitialGlobalState, and clear current app filters when leaving surrounding documents so they don't appear on other screens * [Discover] Fix issue where Discover breadcrumb link breaks in surrounding documents after filters have been added or modified * [Discover] Add support for syncing the current pinned filters in surrounding documents to the Discover breadcrumb link * Revert "[Discover] Add support for syncing the current pinned filters in surrounding documents to the Discover breadcrumb link" This reverts commit 651a0fcb4b68a766e27bbd4077b77e4377fe4556. * [Discover] Undo change to clear local filters when leaving Surrounding documents --- .../application/context/context_app.test.tsx | 2 + .../application/context/context_app.tsx | 12 ++- .../context/hooks/use_context_app_fetch.tsx | 24 +++--- .../context/hooks/use_context_app_state.ts | 43 +++++------ .../context/services/context_state.test.ts | 10 ++- .../context/services/context_state.ts | 73 ++++++++++++++++--- .../public/hooks/use_navigation_props.tsx | 9 ++- test/functional/apps/context/_filters.ts | 63 ++++++++++++++++ 8 files changed, 184 insertions(+), 52 deletions(-) diff --git a/src/plugins/discover/public/application/context/context_app.test.tsx b/src/plugins/discover/public/application/context/context_app.test.tsx index 828ec0d0eeb1a..032e815690d70 100644 --- a/src/plugins/discover/public/application/context/context_app.test.tsx +++ b/src/plugins/discover/public/application/context/context_app.test.tsx @@ -21,6 +21,7 @@ import { uiSettingsMock } from '../../__mocks__/ui_settings'; import { themeServiceMock } from '@kbn/core/public/mocks'; import { LocalStorageMock } from '../../__mocks__/local_storage_mock'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; const mockFilterManager = createFilterManagerMock(); const mockNavigationPlugin = { ui: { TopNavMenu: mockTopNavMenu } }; @@ -28,6 +29,7 @@ const mockNavigationPlugin = { ui: { TopNavMenu: mockTopNavMenu } }; describe('ContextApp test', () => { const services = { data: { + ...dataPluginMock.createStartContract(), search: { searchSource: { createEmpty: jest.fn(), diff --git a/src/plugins/discover/public/application/context/context_app.tsx b/src/plugins/discover/public/application/context/context_app.tsx index ee7203e3c780c..74f5910a4dec3 100644 --- a/src/plugins/discover/public/application/context/context_app.tsx +++ b/src/plugins/discover/public/application/context/context_app.tsx @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; import { DOC_TABLE_LEGACY, SEARCH_FIELDS_FROM_SOURCE } from '../../../common'; import { ContextErrorMessage } from './components/context_error_message'; import { LoadingStatus } from './services/context_query_state'; -import { AppState, isEqualFilters } from './services/context_state'; +import { AppState, GlobalState, isEqualFilters } from './services/context_state'; import { useColumns } from '../../hooks/use_data_grid_columns'; import { useContextAppState } from './hooks/use_context_app_state'; import { useContextAppFetch } from './hooks/use_context_app_fetch'; @@ -52,8 +52,9 @@ export const ContextApp = ({ indexPattern, anchorId }: ContextAppProps) => { /** * Context app state */ - const { appState, setAppState } = useContextAppState({ services }); + const { appState, globalState, setAppState } = useContextAppState({ services }); const prevAppState = useRef(); + const prevGlobalState = useRef({ filters: [] }); /** * Context fetched state @@ -85,13 +86,18 @@ export const ContextApp = ({ indexPattern, anchorId }: ContextAppProps) => { fetchSurroundingRows(SurrDocType.PREDECESSORS); } else if (prevAppState.current.successorCount !== appState.successorCount) { fetchSurroundingRows(SurrDocType.SUCCESSORS); - } else if (!isEqualFilters(prevAppState.current.filters, appState.filters)) { + } else if ( + !isEqualFilters(prevAppState.current.filters, appState.filters) || + !isEqualFilters(prevGlobalState.current.filters, globalState.filters) + ) { fetchContextRows(); } prevAppState.current = cloneDeep(appState); + prevGlobalState.current = cloneDeep(globalState); }, [ appState, + globalState, anchorId, fetchContextRows, fetchAllRows, diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx index 1201526da0821..ee6773507b932 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx @@ -130,17 +130,19 @@ export function useContextAppFetch({ try { setState({ [statusKey]: { value: LoadingStatus.LOADING } }); - const rows = await fetchSurroundingDocs( - type, - indexPattern, - anchor, - tieBreakerField, - SortDirection.desc, - count, - filters, - data, - useNewFieldsApi - ); + const rows = anchor.id + ? await fetchSurroundingDocs( + type, + indexPattern, + anchor, + tieBreakerField, + SortDirection.desc, + count, + filters, + data, + useNewFieldsApi + ) + : []; setState({ [type]: rows, [statusKey]: { value: LoadingStatus.LOADED } }); } catch (error) { setState(createError(statusKey, FailureReason.UNKNOWN, error)); diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts index 9accdb363af92..594ef3d3ffd4c 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts @@ -7,13 +7,12 @@ */ import { useEffect, useMemo, useState } from 'react'; -import { cloneDeep } from 'lodash'; import { CONTEXT_DEFAULT_SIZE_SETTING } from '../../../../common'; import { DiscoverServices } from '../../../build_services'; -import { AppState, getState } from '../services/context_state'; +import { AppState, getState, GlobalState } from '../services/context_state'; export function useContextAppState({ services }: { services: DiscoverServices }) { - const { uiSettings: config, history, core, filterManager } = services; + const { uiSettings: config, history, core } = services; const stateContainer = useMemo(() => { return getState({ @@ -22,10 +21,14 @@ export function useContextAppState({ services }: { services: DiscoverServices }) history: history(), toasts: core.notifications.toasts, uiSettings: config, + data: services.data, }); - }, [config, history, core.notifications.toasts]); + }, [config, history, core.notifications.toasts, services.data]); - const [appState, setState] = useState(stateContainer.appState.getState()); + const [appState, setAppState] = useState(stateContainer.appState.getState()); + const [globalState, setGlobalState] = useState( + stateContainer.globalState.getState() + ); /** * Sync with app state container @@ -38,32 +41,24 @@ export function useContextAppState({ services }: { services: DiscoverServices }) useEffect(() => { const unsubscribeAppState = stateContainer.appState.subscribe((newState) => { - setState((prevState) => ({ ...prevState, ...newState })); + const newStateEnsureFilter = { ...newState, filters: newState.filters ?? [] }; + setAppState((prevState) => ({ ...prevState, ...newStateEnsureFilter })); }); - return () => unsubscribeAppState(); - }, [stateContainer, setState]); - - /** - * Take care of filters - */ - useEffect(() => { - const filters = stateContainer.appState.getState().filters; - if (filters) { - filterManager.setAppFilters(cloneDeep(filters)); - } - - const { setFilters } = stateContainer; - const filterObservable = filterManager.getUpdates$().subscribe(() => { - setFilters(filterManager); + const unsubscribeGlobalState = stateContainer.globalState.subscribe((newState) => { + const newStateEnsureFilter = { ...newState, filters: newState.filters ?? [] }; + setGlobalState((prevState) => ({ ...prevState, ...newStateEnsureFilter })); }); - return () => filterObservable.unsubscribe(); - }, [filterManager, stateContainer]); + return () => { + unsubscribeAppState(); + unsubscribeGlobalState(); + }; + }, [stateContainer, setAppState]); return { appState, - stateContainer, + globalState, setAppState: stateContainer.setAppState, }; } diff --git a/src/plugins/discover/public/application/context/services/context_state.test.ts b/src/plugins/discover/public/application/context/services/context_state.test.ts index 4e64ff206647e..a420b8d08e0b6 100644 --- a/src/plugins/discover/public/application/context/services/context_state.test.ts +++ b/src/plugins/discover/public/application/context/services/context_state.test.ts @@ -13,7 +13,10 @@ import { createBrowserHistory, History } from 'history'; import { FilterManager } from '@kbn/data-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; import { SEARCH_FIELDS_FROM_SOURCE } from '../../../../common'; +import { discoverServiceMock } from '../../../__mocks__/services'; +discoverServiceMock.data.query.filterManager.getAppFilters = jest.fn(() => []); +discoverServiceMock.data.query.filterManager.getGlobalFilters = jest.fn(() => []); const setupMock = coreMock.createSetup(); describe('Test Discover Context State', () => { @@ -30,6 +33,7 @@ describe('Test Discover Context State', () => { get: (key: string) => (key === SEARCH_FIELDS_FROM_SOURCE ? true : ['_source']) as unknown as T, } as IUiSettingsClient, + data: discoverServiceMock.data, }); state.startSync(); }); @@ -47,7 +51,11 @@ describe('Test Discover Context State', () => { "successorCount": 4, } `); - expect(state.globalState.getState()).toMatchInlineSnapshot(`null`); + expect(state.globalState.getState()).toMatchInlineSnapshot(` + Object { + "filters": Array [], + } + `); expect(state.startSync).toBeDefined(); expect(state.stopSync).toBeDefined(); expect(state.getFilters()).toStrictEqual([]); diff --git a/src/plugins/discover/public/application/context/services/context_state.ts b/src/plugins/discover/public/application/context/services/context_state.ts index 77fa33faa14c8..9739b5bc0fde4 100644 --- a/src/plugins/discover/public/application/context/services/context_state.ts +++ b/src/plugins/discover/public/application/context/services/context_state.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { isEqual } from 'lodash'; +import { cloneDeep, isEqual } from 'lodash'; import { History } from 'history'; import { NotificationsStart, IUiSettingsClient } from '@kbn/core/public'; -import { Filter, compareFilters, COMPARE_ALL_OPTIONS } from '@kbn/es-query'; +import { Filter, compareFilters, COMPARE_ALL_OPTIONS, FilterStateStore } from '@kbn/es-query'; import { createStateContainer, createKbnUrlStateStorage, @@ -18,7 +18,7 @@ import { ReduxLikeStateContainer, } from '@kbn/kibana-utils-plugin/public'; -import { FilterManager } from '@kbn/data-plugin/public'; +import { connectToQueryState, DataPublicPluginStart, FilterManager } from '@kbn/data-plugin/public'; import { handleSourceColumnState } from '../../../utils/state_helpers'; export interface AppState { @@ -46,7 +46,7 @@ export interface AppState { sort?: string[][]; } -interface GlobalState { +export interface GlobalState { /** * Array of filters */ @@ -78,6 +78,11 @@ export interface GetStateParams { * core ui settings service */ uiSettings: IUiSettingsClient; + + /** + * data service + */ + data: DataPublicPluginStart; } export interface GetStateReturn { @@ -128,6 +133,7 @@ export function getState({ history, toasts, uiSettings, + data, }: GetStateParams): GetStateReturn { const stateStorage = createKbnUrlStateStorage({ useHash: storeInSessionStorage, @@ -135,14 +141,20 @@ export function getState({ ...(toasts && withNotifyOnErrors(toasts)), }); - const globalStateInitial = stateStorage.get(GLOBAL_STATE_URL_KEY) as GlobalState; + const globalStateFromUrl = stateStorage.get(GLOBAL_STATE_URL_KEY) as GlobalState; + const globalStateInitial = createInitialGlobalState(globalStateFromUrl); const globalStateContainer = createStateContainer(globalStateInitial); const appStateFromUrl = stateStorage.get(APP_STATE_URL_KEY) as AppState; const appStateInitial = createInitialAppState(defaultSize, appStateFromUrl, uiSettings); const appStateContainer = createStateContainer(appStateInitial); - const { start, stop } = syncStates([ + const getAllFilters = () => [ + ...getFilters(globalStateContainer.getState()), + ...getFilters(appStateContainer.getState()), + ]; + + const { start: startSyncingStates, stop: stopSyncingStates } = syncStates([ { storageKey: GLOBAL_STATE_URL_KEY, stateContainer: { @@ -173,11 +185,33 @@ export function getState({ }, ]); + let stopSyncingFilters = () => {}; + return { globalState: globalStateContainer, appState: appStateContainer, - startSync: start, - stopSync: stop, + startSync: () => { + data.query.filterManager.setFilters(cloneDeep(getAllFilters())); + + const stopSyncingAppFilters = connectToQueryState(data.query, appStateContainer, { + filters: FilterStateStore.APP_STATE, + }); + const stopSyncingGlobalFilters = connectToQueryState(data.query, globalStateContainer, { + filters: FilterStateStore.GLOBAL_STATE, + }); + + stopSyncingFilters = () => { + stopSyncingAppFilters(); + stopSyncingGlobalFilters(); + }; + + startSyncingStates(); + }, + stopSync: () => { + stopSyncingFilters(); + stopSyncingFilters = () => {}; + stopSyncingStates(); + }, setAppState: (newState: Partial) => { const oldState = appStateContainer.getState(); const mergedState = { ...oldState, ...newState }; @@ -186,10 +220,7 @@ export function getState({ stateStorage.set(APP_STATE_URL_KEY, mergedState, { replace: true }); } }, - getFilters: () => [ - ...getFilters(globalStateContainer.getState()), - ...getFilters(appStateContainer.getState()), - ], + getFilters: getAllFilters, setFilters: (filterManager: FilterManager) => { // global state filters const globalFilters = filterManager.getGlobalFilters(); @@ -282,3 +313,21 @@ function createInitialAppState( uiSettings ); } + +/** + * Helper function to return the initial global state, which is a merged object of url state and + * default state + */ +function createInitialGlobalState(urlState: GlobalState): GlobalState { + const defaultState: GlobalState = { + filters: [], + }; + if (typeof urlState !== 'object') { + return defaultState; + } + + return { + ...defaultState, + ...urlState, + }; +} diff --git a/src/plugins/discover/public/hooks/use_navigation_props.tsx b/src/plugins/discover/public/hooks/use_navigation_props.tsx index 56720776b1553..a62df3f09e2fe 100644 --- a/src/plugins/discover/public/hooks/use_navigation_props.tsx +++ b/src/plugins/discover/public/hooks/use_navigation_props.tsx @@ -66,7 +66,14 @@ const getCurrentBreadcrumbs = ( export const useMainRouteBreadcrumb = () => { // useRef needed to retrieve initial breadcrumb link from the push state without updates - return useRef(useHistory().location.state?.breadcrumb).current; + const breadcrumb = useRef(); + const history = useHistory(); + + if (history.location.state?.breadcrumb) { + breadcrumb.current = history.location.state.breadcrumb; + } + + return breadcrumb.current; }; export const useNavigationProps = ({ diff --git a/test/functional/apps/context/_filters.ts b/test/functional/apps/context/_filters.ts index e8a8675e85f82..8c77d4fd013c1 100644 --- a/test/functional/apps/context/_filters.ts +++ b/test/functional/apps/context/_filters.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; const TEST_INDEX_PATTERN = 'logstash-*'; @@ -19,6 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const testSubjects = getService('testSubjects'); const retry = getService('retry'); + const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'context']); @@ -75,5 +77,66 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return await filterBar.hasFilter(TEST_ANCHOR_FILTER_FIELD, 'exists', true); }); }); + + const addPinnedFilter = async () => { + await filterBar.addFilter(TEST_ANCHOR_FILTER_FIELD, 'IS', TEST_ANCHOR_FILTER_VALUE); + await filterBar.toggleFilterPinned(TEST_ANCHOR_FILTER_FIELD); + }; + + const everyFieldMatches = async (matches: (field: string[]) => boolean) => { + const fields = await dataGrid.getFields(); + return fields.every(matches); + }; + + it('should update the data grid when a pinned filter is modified', async function () { + await addPinnedFilter(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + expect(await everyFieldMatches((field) => field[2] === TEST_ANCHOR_FILTER_VALUE)).to.be(true); + await filterBar.toggleFilterNegated(TEST_ANCHOR_FILTER_FIELD); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + expect(await everyFieldMatches((field) => field[2] === TEST_ANCHOR_FILTER_VALUE)).to.be( + false + ); + }); + + const expectFiltersToExist = async () => { + expect(await filterBar.getFilterCount()).to.be(2); + expect( + await filterBar.hasFilter(TEST_ANCHOR_FILTER_FIELD, TEST_ANCHOR_FILTER_VALUE, true, true) + ).to.be(true); + expect(await filterBar.hasFilter('extension', 'png')).to.be(true); + expect( + await everyFieldMatches( + (field) => field[1] === 'png' && field[2] === TEST_ANCHOR_FILTER_VALUE + ) + ).to.be(true); + }; + + it('should preserve filters when the page is refreshed', async function () { + await addPinnedFilter(); + await filterBar.addFilter('extension', 'IS', 'png'); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + await expectFiltersToExist(); + await browser.refresh(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + await expectFiltersToExist(); + }); + + it('should update filters when navigating forward and backward in history', async () => { + await filterBar.addFilter('extension', 'IS', 'png'); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + expect(await filterBar.getFilterCount()).to.be(1); + expect(await filterBar.hasFilter('extension', 'png')).to.be(true); + expect(await everyFieldMatches((field) => field[1] === 'png')).to.be(true); + await browser.goBack(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + expect(await filterBar.getFilterCount()).to.be(0); + expect(await everyFieldMatches((field) => field[1] === 'png')).to.be(false); + await browser.goForward(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + expect(await filterBar.getFilterCount()).to.be(1); + expect(await filterBar.hasFilter('extension', 'png')).to.be(true); + expect(await everyFieldMatches((field) => field[1] === 'png')).to.be(true); + }); }); } From 9888244e2cb577d5fd318bd5980dcc221b4cb48b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Thu, 14 Jul 2022 15:58:57 +0200 Subject: [PATCH 51/96] [EBT] Add Telemetry Labels (#135682) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + src/plugins/telemetry/public/mocks.ts | 1 + src/plugins/telemetry/public/plugin.ts | 16 +++++++++ src/plugins/telemetry/server/config/config.ts | 4 +++ src/plugins/telemetry/server/config/index.ts | 1 + .../server/config/telemetry_labels.ts | 33 +++++++++++++++++++ src/plugins/telemetry/server/plugin.ts | 16 ++++++++- ...telemetry_management_section.test.tsx.snap | 1 + .../telemetry_management_section.test.tsx | 7 ++++ .../test_suites/core_plugins/rendering.ts | 11 +++++++ 10 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/plugins/telemetry/server/config/telemetry_labels.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 481415fc584b0..670fc3a7a4cac 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -332,6 +332,7 @@ /packages/kbn-handlebars/ @elastic/kibana-security /packages/core/http/core-http-server-internal/src/csp/ @elastic/kibana-security @elastic/kibana-core /src/plugins/interactive_setup/ @elastic/kibana-security +/src/plugins/telemetry/server/config/telemetry_labels.ts @elastic/kibana-security /test/interactive_setup_api_integration/ @elastic/kibana-security /test/interactive_setup_functional/ @elastic/kibana-security /test/plugin_functional/test_suites/core_plugins/rendering.ts @elastic/kibana-security diff --git a/src/plugins/telemetry/public/mocks.ts b/src/plugins/telemetry/public/mocks.ts index 7c74d8f7d8813..42225703163e6 100644 --- a/src/plugins/telemetry/public/mocks.ts +++ b/src/plugins/telemetry/public/mocks.ts @@ -40,6 +40,7 @@ export function mockTelemetryService({ allowChangingOptInStatus: true, telemetryNotifyUserAboutOptInDefault: true, userCanChangeSettings: true, + labels: {}, ...configOverride, }; diff --git a/src/plugins/telemetry/public/plugin.ts b/src/plugins/telemetry/public/plugin.ts index d6d0288cbb0bf..6bf53d59cb215 100644 --- a/src/plugins/telemetry/public/plugin.ts +++ b/src/plugins/telemetry/public/plugin.ts @@ -21,6 +21,7 @@ import type { ScreenshotModePluginSetup } from '@kbn/screenshot-mode-plugin/publ import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import { ElasticV3BrowserShipper } from '@kbn/analytics-shippers-elastic-v3-browser'; +import { of } from 'rxjs'; import { TelemetrySender, TelemetryService, TelemetryNotifications } from './services'; import type { TelemetrySavedObjectAttributes, @@ -104,6 +105,8 @@ export interface TelemetryPluginConfig { userCanChangeSettings?: boolean; /** Should we hide the privacy statement notice? Useful on some environments, e.g. Cloud */ hidePrivacyStatement?: boolean; + /** Extra labels to add to the telemetry context */ + labels: Record; } function getTelemetryConstants(docLinks: DocLinksStart): TelemetryConstants { @@ -146,6 +149,19 @@ export class TelemetryPlugin implements Plugin, Type<'staging'>] = [ schema.literal('prod'), @@ -32,6 +33,8 @@ const configSchema = schema.object({ sendUsageFrom: schema.oneOf([schema.literal('server'), schema.literal('browser')], { defaultValue: 'server', }), + // Used for extra enrichment of telemetry + labels: labelsSchema, }); export type TelemetryConfigType = TypeOf; @@ -45,6 +48,7 @@ export const config: PluginConfigDescriptor = { sendUsageFrom: true, sendUsageTo: true, hidePrivacyStatement: true, + labels: true, }, deprecations: () => [ (cfg) => { diff --git a/src/plugins/telemetry/server/config/index.ts b/src/plugins/telemetry/server/config/index.ts index 19ccd73e17fcd..da368f2cbd1aa 100644 --- a/src/plugins/telemetry/server/config/index.ts +++ b/src/plugins/telemetry/server/config/index.ts @@ -8,3 +8,4 @@ export { config } from './config'; export type { TelemetryConfigType } from './config'; +export type { TelemetryConfigLabels } from './telemetry_labels'; diff --git a/src/plugins/telemetry/server/config/telemetry_labels.ts b/src/plugins/telemetry/server/config/telemetry_labels.ts new file mode 100644 index 0000000000000..f8cf7e6575866 --- /dev/null +++ b/src/plugins/telemetry/server/config/telemetry_labels.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +/** + * Labels to enrich the context of the telemetry generated. + * When adding new keys, bear in mind that this info is exposed + * to the browser **even to unauthenticated pages**. + */ +export const labelsSchema = schema.object( + { + branch: schema.maybe(schema.string()), + ciBuildJobId: schema.maybe(schema.string()), + ciBuildId: schema.maybe(schema.string()), + ciBuildNumber: schema.maybe(schema.number()), + ftrConfig: schema.maybe(schema.string()), + git_rev: schema.maybe(schema.string()), + isPr: schema.maybe(schema.boolean()), + prId: schema.maybe(schema.string()), + journeyName: schema.maybe(schema.string()), + testBuildId: schema.maybe(schema.string()), + testJobId: schema.maybe(schema.string()), + }, + { defaultValue: {} } +); + +export type TelemetryConfigLabels = TypeOf; diff --git a/src/plugins/telemetry/server/plugin.ts b/src/plugins/telemetry/server/plugin.ts index cf2f7710e8729..9fe6ad52a8c3e 100644 --- a/src/plugins/telemetry/server/plugin.ts +++ b/src/plugins/telemetry/server/plugin.ts @@ -19,6 +19,7 @@ import { takeUntil, tap, shareReplay, + map, } from 'rxjs'; import { ElasticV3ServerShipper } from '@kbn/analytics-shippers-elastic-v3-server'; @@ -45,7 +46,7 @@ import { registerTelemetryUsageCollector, registerTelemetryPluginUsageCollector, } from './collectors'; -import type { TelemetryConfigType } from './config'; +import type { TelemetryConfigLabels, TelemetryConfigType } from './config'; import { FetcherTask } from './fetcher'; import { getTelemetrySavedObject, TelemetrySavedObject } from './telemetry_repository'; import { OPT_IN_POLL_INTERVAL_MS } from '../common/constants'; @@ -157,6 +158,19 @@ export class TelemetryPlugin implements Plugin({ + name: 'telemetry labels', + context$: this.config$.pipe(map(({ labels }) => ({ labels }))), + schema: { + labels: { + type: 'pass_through', + _meta: { + description: 'Custom labels added to the telemetry.labels config in the kibana.yml', + }, + }, + }, + }); + const config$ = this.config$; const isDev = this.isDev; registerCollection(telemetryCollectionManager); diff --git a/src/plugins/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap b/src/plugins/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap index 9cd03e02f36dc..f590a5c82a79b 100644 --- a/src/plugins/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap +++ b/src/plugins/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap @@ -264,6 +264,7 @@ exports[`TelemetryManagementSectionComponent renders null because allowChangingO "defaultConfig": Object { "allowChangingOptInStatus": false, "banner": true, + "labels": Object {}, "optIn": true, "sendUsageFrom": "browser", "sendUsageTo": "staging", diff --git a/src/plugins/telemetry_management_section/public/components/telemetry_management_section.test.tsx b/src/plugins/telemetry_management_section/public/components/telemetry_management_section.test.tsx index f747e9c6194db..7576c0f35b6a9 100644 --- a/src/plugins/telemetry_management_section/public/components/telemetry_management_section.test.tsx +++ b/src/plugins/telemetry_management_section/public/components/telemetry_management_section.test.tsx @@ -30,6 +30,7 @@ describe('TelemetryManagementSectionComponent', () => { allowChangingOptInStatus: true, optIn: true, sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -61,6 +62,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: false, sendUsageFrom: 'browser', sendUsageTo: 'staging', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -112,6 +114,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: false, sendUsageTo: 'staging', sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -157,6 +160,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: true, sendUsageTo: 'staging', sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -193,6 +197,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: false, sendUsageTo: 'staging', sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -233,6 +238,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: false, sendUsageTo: 'staging', sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, @@ -280,6 +286,7 @@ describe('TelemetryManagementSectionComponent', () => { optIn: false, sendUsageTo: 'staging', sendUsageFrom: 'browser', + labels: {}, }, isScreenshotMode: false, reportOptInStatusChange: false, diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 1e71c304165c5..5381d212598d9 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -143,6 +143,17 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'newsfeed.service.urlRoot (string)', 'telemetry.allowChangingOptInStatus (boolean)', 'telemetry.banner (boolean)', + 'telemetry.labels.branch (string)', + 'telemetry.labels.ciBuildId (string)', + 'telemetry.labels.ciBuildJobId (string)', + 'telemetry.labels.ciBuildNumber (number)', + 'telemetry.labels.ftrConfig (string)', + 'telemetry.labels.git_rev (string)', + 'telemetry.labels.isPr (boolean)', + 'telemetry.labels.journeyName (string)', + 'telemetry.labels.prId (string)', + 'telemetry.labels.testBuildId (string)', + 'telemetry.labels.testJobId (string)', 'telemetry.hidePrivacyStatement (boolean)', 'telemetry.optIn (boolean)', 'telemetry.sendUsageFrom (alternatives)', From fe1b7e8cf94ddc1bc3c3b1a514a5769d5832274c Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 14 Jul 2022 09:21:27 -0500 Subject: [PATCH 52/96] Revert "unskip test (#134549)" This reverts commit 8f369db749b1bbb5d8b89e01a889535b7d30cf53. --- .../synthetics/public/legacy_uptime/pages/overview.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/pages/overview.test.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/pages/overview.test.tsx index b3aa4714fa664..30ea0e361580a 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/pages/overview.test.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/pages/overview.test.tsx @@ -9,7 +9,8 @@ import React from 'react'; import { OverviewPageComponent } from './overview'; import { render } from '../lib/helper/rtl_helpers'; -describe('MonitorPage', () => { +// FLAKY: https://github.com/elastic/kibana/issues/131346 +describe.skip('MonitorPage', () => { it('renders expected elements for valid props', async () => { const { findByText, findByPlaceholderText } = render(); From 3d582f33f575b96d3434467b88f3ef5b5073054b Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 14 Jul 2022 09:38:32 -0500 Subject: [PATCH 53/96] Bump html-loader to 1.3.2 (#136360) --- package.json | 2 +- yarn.lock | 144 +++++++++++++-------------------------------------- 2 files changed, 36 insertions(+), 110 deletions(-) diff --git a/package.json b/package.json index a0cab1288d620..44111b5550366 100644 --- a/package.json +++ b/package.json @@ -1066,7 +1066,7 @@ "has-ansi": "^3.0.0", "hdr-histogram-js": "^1.2.0", "html": "1.0.0", - "html-loader": "^0.5.5", + "html-loader": "^1.3.2", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-path-inside": "^3.0.2", diff --git a/yarn.lock b/yarn.lock index 7a09d8caa1dfb..25e8f56335861 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9582,11 +9582,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= - ast-types@^0.13.2: version "0.13.3" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" @@ -10868,14 +10863,6 @@ callsites@^3.1.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - camel-case@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" @@ -11211,7 +11198,7 @@ classnames@2.2.6, classnames@2.x, classnames@^2.2.5, classnames@^2.2.6: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== -clean-css@4.2.x, clean-css@^4.2.3: +clean-css@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== @@ -11600,11 +11587,6 @@ commander@2, commander@^2.19.0, commander@^2.20.0, commander@^2.7.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - commander@7, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -13709,20 +13691,20 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.0, domhandler@^4.2.2: +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.0, domhandler@^4.2.0, domhandler@^4.2.2: version "4.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: domelementtype "^2.2.0" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== - dependencies: - domelementtype "^2.2.0" - domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -13746,7 +13728,7 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0, domutils@^2.8.0: +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -14374,14 +14356,6 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" -es6-templates@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - integrity sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ= - dependencies: - recast "~0.11.12" - through "~2.3.6" - es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" @@ -14766,11 +14740,6 @@ esprima@~1.0.4: resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" @@ -15269,11 +15238,6 @@ fastest-stable-stringify@^1.0.1: resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz#9122d406d4c9d98bea644a6b6853d5874b87b028" integrity sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg= -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - integrity sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg= - fastq@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" @@ -16992,7 +16956,7 @@ hdr-histogram-js@^1.2.0: base64-js "^1.2.0" pako "^1.0.3" -he@1.2.0, he@1.2.x, he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -17139,18 +17103,17 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-loader@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" - integrity sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog== +html-loader@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" + integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== dependencies: - es6-templates "^0.2.3" - fastparse "^1.1.1" - html-minifier "^3.5.8" - loader-utils "^1.1.0" - object-assign "^4.1.1" + html-minifier-terser "^5.1.1" + htmlparser2 "^4.1.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" -html-minifier-terser@^5.0.1: +html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== @@ -17163,19 +17126,6 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" -html-minifier@^3.5.8: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - html-tags@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" @@ -17235,6 +17185,16 @@ htmlparser2@^3.10.0: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" @@ -20425,11 +20385,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - lower-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" @@ -21661,13 +21616,6 @@ nise@^1.5.2: lolex "^5.0.1" path-to-regexp "^1.7.0" -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - no-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" @@ -22681,13 +22629,6 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - param-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" @@ -23903,7 +23844,7 @@ prismjs@^1.22.0, prismjs@~1.25.0, prismjs@~1.27.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== -private@^0.1.8, private@~0.1.5: +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -25314,16 +25255,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recast@~0.11.12: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -25573,7 +25504,7 @@ rehype-stringify@^8.0.0: dependencies: hast-util-to-html "^7.1.1" -relateurl@0.2.x, relateurl@^0.2.7: +relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -27064,7 +26995,7 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -28354,7 +28285,7 @@ through2@^4.0.2: dependencies: readable-stream "3" -"through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6: +"through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -28936,7 +28867,7 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" integrity sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg== -uglify-js@3.4.x, uglify-js@^3.1.4, uglify-js@^3.14.3: +uglify-js@^3.1.4, uglify-js@^3.14.3: version "3.14.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.4.tgz#68756f17d1b90b9d289341736cb9a567d6882f90" integrity sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA== @@ -29382,11 +29313,6 @@ update-notifier@^5.1.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" From 623808cba3d029486dbd4bc3fdad91679f8bd61f Mon Sep 17 00:00:00 2001 From: Byron Hulcher Date: Thu, 14 Jul 2022 10:57:41 -0400 Subject: [PATCH 54/96] Fix path of internal endpoint for enterprise search crawler domain validation (#136400) --- .../server/routes/enterprise_search/crawler/crawler.test.ts | 2 +- .../server/routes/enterprise_search/crawler/crawler.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts index 3891f4023feb0..60be99f7a8073 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts @@ -430,7 +430,7 @@ describe('crawler routes', () => { it('creates a request to enterprise search', () => { expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({ - path: '/api/ent/v1/internal/crawler/validate_url', + path: '/api/ent/v1/internal/crawler2/validate_url', }); }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts index 652f72318074e..34138780583be 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts @@ -42,7 +42,7 @@ export function registerCrawlerRoutes(routeDependencies: RouteDependencies) { }, }, enterpriseSearchRequestHandler.createRequest({ - path: '/api/ent/v1/internal/crawler/validate_url', + path: '/api/ent/v1/internal/crawler2/validate_url', }) ); From ff2e2550ba4527540d54a07924926ec352ad42a9 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 14 Jul 2022 11:02:25 -0400 Subject: [PATCH 55/96] [8.4] [Kubernetes Security] Rename charts toggle and fix count widgets alignment and tooltip (#136238) * Rename widgets toggle to charts toggle and update translation * Fix count widget small screen alignment and tooltip Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../common/translations.ts | 8 +- .../components/charts_toggle/index.test.tsx | 54 +++ .../public/components/charts_toggle/index.tsx | 29 ++ .../components/count_widget/index.test.tsx | 6 +- .../public/components/count_widget/index.tsx | 39 +-- .../public/components/count_widget/styles.ts | 2 - .../kubernetes_security_routes/index.tsx | 309 +++++++++--------- .../kubernetes_security_routes/styles.ts | 2 +- .../components/widgets_toggle/index.test.tsx | 57 ---- .../components/widgets_toggle/index.tsx | 29 -- .../public/utils/add_commas_to_number.test.ts | 35 ++ .../public/utils/add_commas_to_number.ts | 16 + 12 files changed, 310 insertions(+), 276 deletions(-) create mode 100644 x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.test.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.tsx delete mode 100644 x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.test.tsx delete mode 100644 x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.test.ts create mode 100644 x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.ts diff --git a/x-pack/plugins/kubernetes_security/common/translations.ts b/x-pack/plugins/kubernetes_security/common/translations.ts index d13bf8be60265..0264be3e55bd5 100644 --- a/x-pack/plugins/kubernetes_security/common/translations.ts +++ b/x-pack/plugins/kubernetes_security/common/translations.ts @@ -22,12 +22,12 @@ export const SEARCH_GROUP_SORT_BY = i18n.translate('xpack.kubernetesSecurity.sea defaultMessage: 'Sort by', }); -export const WIDGET_TOGGLE_SHOW = i18n.translate('xpack.kubernetesSecurity.widgetsToggle.show', { - defaultMessage: 'Show widgets', +export const CHART_TOGGLE_SHOW = i18n.translate('xpack.kubernetesSecurity.chartsToggle.show', { + defaultMessage: 'Show charts', }); -export const WIDGET_TOGGLE_HIDE = i18n.translate('xpack.kubernetesSecurity.widgetsToggle.hide', { - defaultMessage: 'Hide widgets', +export const CHART_TOGGLE_HIDE = i18n.translate('xpack.kubernetesSecurity.chartsToggle.hide', { + defaultMessage: 'Hide charts', }); export const COUNT_WIDGET_CLUSTERS = i18n.translate( diff --git a/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.test.tsx new file mode 100644 index 0000000000000..e0d8249326d55 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.test.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { AppContextTestRender, createAppRootMockRenderer } from '../../test'; +import { CHART_TOGGLE_SHOW, CHART_TOGGLE_HIDE } from '../../../common/translations'; +import { ChartsToggle, TOGGLE_TEST_ID } from '.'; + +describe('ChartsToggle component', () => { + let render: () => ReturnType; + let renderResult: ReturnType; + let mockedContext: AppContextTestRender; + const handleToggleHideCharts = jest.fn(); + + beforeEach(() => { + mockedContext = createAppRootMockRenderer(); + }); + + describe('When ChartsToggle is mounted', () => { + it('show "hide charts" text when shouldHideCharts is false', async () => { + renderResult = mockedContext.render( + + ); + + expect(renderResult.getByText(CHART_TOGGLE_HIDE)).toBeVisible(); + }); + it('show "show charts" text when shouldHideCharts is true', async () => { + renderResult = mockedContext.render( + + ); + + expect(renderResult.getByText(CHART_TOGGLE_SHOW)).toBeVisible(); + }); + it('shouldHideCharts defaults to false when not provided', async () => { + renderResult = mockedContext.render( + + ); + + expect(renderResult.getByText(CHART_TOGGLE_HIDE)).toBeVisible(); + }); + it('clicking the toggle fires the callback', async () => { + renderResult = mockedContext.render( + + ); + + renderResult.queryByTestId(TOGGLE_TEST_ID)?.click(); + expect(handleToggleHideCharts).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.tsx b/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.tsx new file mode 100644 index 0000000000000..d38d1fed3c7aa --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/charts_toggle/index.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiButtonEmpty } from '@elastic/eui'; +import { CHART_TOGGLE_SHOW, CHART_TOGGLE_HIDE } from '../../../common/translations'; + +export const TOGGLE_TEST_ID = 'kubernetesSecurity:chartToggle'; + +interface ChartsToggleDeps { + handleToggleHideCharts: () => void; + shouldHideCharts?: boolean; +} + +export const ChartsToggle = ({ + handleToggleHideCharts, + shouldHideCharts = false, +}: ChartsToggleDeps) => ( + + {shouldHideCharts ? CHART_TOGGLE_SHOW : CHART_TOGGLE_HIDE} + +); diff --git a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.test.tsx index 72d087f47d364..a0fbe2c90c690 100644 --- a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.test.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { AppContextTestRender, createAppRootMockRenderer } from '../../test'; import { GlobalFilter } from '../../types'; -import { CountWidget, LOADING_TEST_ID, TOOLTIP_TEST_ID } from '.'; +import { CountWidget, LOADING_TEST_ID, TOOLTIP_TEST_ID, VALUE_TEST_ID } from '.'; import { useFetchCountWidgetData } from './hooks'; import { fireEvent, waitFor } from '@testing-library/dom'; @@ -137,9 +137,9 @@ describe('CountWidget component', () => { isLoading: false, })); render(); - fireEvent.mouseOver(renderResult.getByText('Info')); + fireEvent.mouseOver(renderResult.getByTestId(VALUE_TEST_ID)); await waitFor(() => renderResult.getByTestId(TOOLTIP_TEST_ID)); - expect(renderResult.queryByText(MOCK_DATA_THOUSAND.pages[0])).toBeTruthy(); + expect(renderResult.queryByText('5,236')).toBeTruthy(); }); }); }); diff --git a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx index 5e5f5eacc374f..534187057b5e9 100644 --- a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx @@ -6,9 +6,10 @@ */ import React, { useMemo } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiText, EuiLoadingSpinner, EuiIconTip } from '@elastic/eui'; +import { EuiText, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; import { useStyles } from './styles'; import type { IndexPattern, GlobalFilter } from '../../types'; +import { addCommasToNumber } from '../../utils/add_commas_to_number'; import { addTimerangeToQuery } from '../../utils/add_timerange_to_query'; import { useFetchCountWidgetData } from './hooks'; import { addResourceTypeToFilterQuery, numberFormatter } from './helpers'; @@ -16,6 +17,7 @@ import { COUNT_WIDGET_KEY_PODS } from '../../../common/constants'; export const LOADING_TEST_ID = 'kubernetesSecurity:countWidgetLoading'; export const TOOLTIP_TEST_ID = 'kubernetesSecurity:countWidgetTooltip'; +export const VALUE_TEST_ID = 'kubernetesSecurity:countWidgetValue'; export interface CountWidgetDeps { title: string; @@ -60,26 +62,21 @@ export const CountWidget = ({ return (
-
- {title} - -
- - - - {isLoading ? ( - - ) : ( - formattedNumber - )} - - - +
{title}
+ + + {isLoading ? ( + + ) : ( + formattedNumber + )} + +
); }; diff --git a/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts b/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts index abd89925b5cf3..b02f30fa952fa 100644 --- a/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts +++ b/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts @@ -31,8 +31,6 @@ export const useStyles = () => { const dataInfo: CSSObject = { marginBottom: size.xs, - display: 'flex', - alignItems: 'center', height: '18px', fontSize: size.l, fontWeight: font.weight.bold, diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx index 182873f954d8d..7be342a782d98 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx @@ -36,7 +36,7 @@ import { AggregateResult } from '../../../common/types/aggregate'; import { useLastUpdated } from '../../hooks'; import { useStyles } from './styles'; import { TreeViewContainer } from '../tree_view_container'; -import { WidgetsToggle } from '../widgets_toggle'; +import { ChartsToggle } from '../charts_toggle'; import { COUNT_WIDGET_CLUSTERS, COUNT_WIDGET_NAMESPACE, @@ -51,7 +51,7 @@ const KubernetesSecurityRoutesComponent = ({ globalFilter, renderSessionsView, }: KubernetesSecurityDeps) => { - const [shouldHideWidgets, setShouldHideWidgets] = useLocalStorage( + const [shouldHideCharts, setShouldHideCharts] = useLocalStorage( LOCAL_STORAGE_HIDE_WIDGETS_KEY, false ); @@ -82,9 +82,9 @@ const KubernetesSecurityRoutesComponent = ({ [] ); - const handleToggleHideWidgets = useCallback(() => { - setShouldHideWidgets(!shouldHideWidgets); - }, [setShouldHideWidgets, shouldHideWidgets]); + const handleToggleHideCharts = useCallback(() => { + setShouldHideCharts(!shouldHideCharts); + }, [setShouldHideCharts, shouldHideCharts]); return ( @@ -98,171 +98,162 @@ const KubernetesSecurityRoutesComponent = ({
{lastUpdated}
-
- {!shouldHideWidgets && ( + {!shouldHideCharts && ( <> - + - - - - - - - - - - - - - - - - - + - - - - - - - - } + + + + + + + + + + + + + + + + + + + - - } - widgetKey="sessionsPercentage" - indexPattern={indexPattern} - globalFilter={globalFilter} - dataValueMap={{ - true: { - name: i18n.translate( - 'xpack.kubernetesSecurity.sessionChart.interactive', - { - defaultMessage: 'Interactive', - } - ), - fieldName: ENTRY_LEADER_INTERACTIVE, - color: euiThemeVars.euiColorVis0, - }, - false: { - name: i18n.translate( - 'xpack.kubernetesSecurity.sessionChart.nonInteractive', - { - defaultMessage: 'Non-interactive', - } - ), - fieldName: ENTRY_LEADER_INTERACTIVE, - color: euiThemeVars.euiColorVis1, - shouldHideFilter: true, - }, - }} - groupedBy={ENTRY_LEADER_INTERACTIVE} - countBy={ENTRY_LEADER_ENTITY_ID} - onReduce={onReduceInteractiveAggs} - /> - - - - - - - - } + } + /> + + } + widgetKey="sessionsPercentage" + indexPattern={indexPattern} + globalFilter={globalFilter} + dataValueMap={{ + true: { + name: i18n.translate( + 'xpack.kubernetesSecurity.sessionChart.interactive', + { + defaultMessage: 'Interactive', + } + ), + fieldName: ENTRY_LEADER_INTERACTIVE, + color: euiThemeVars.euiColorVis0, + }, + false: { + name: i18n.translate( + 'xpack.kubernetesSecurity.sessionChart.nonInteractive', + { + defaultMessage: 'Non-interactive', + } + ), + fieldName: ENTRY_LEADER_INTERACTIVE, + color: euiThemeVars.euiColorVis1, + shouldHideFilter: true, + }, + }} + groupedBy={ENTRY_LEADER_INTERACTIVE} + countBy={ENTRY_LEADER_ENTITY_ID} + onReduce={onReduceInteractiveAggs} + /> + + + + + + + - - } - widgetKey="rootLoginPercentage" - indexPattern={indexPattern} - globalFilter={globalFilter} - dataValueMap={{ - '0': { - name: i18n.translate('xpack.kubernetesSecurity.entryUserChart.root', { - defaultMessage: 'Root', - }), - fieldName: ENTRY_LEADER_USER_ID, - color: euiThemeVars.euiColorVis2, - }, - nonRoot: { - name: i18n.translate( - 'xpack.kubernetesSecurity.entryUserChart.nonRoot', - { - defaultMessage: 'Non-root', - } - ), - fieldName: ENTRY_LEADER_USER_ID, - color: euiThemeVars.euiColorVis3, - shouldHideFilter: true, - }, - }} - groupedBy={ENTRY_LEADER_USER_ID} - countBy={ENTRY_LEADER_ENTITY_ID} - onReduce={onReduceRootAggs} - /> - - + } + /> + + } + widgetKey="rootLoginPercentage" + indexPattern={indexPattern} + globalFilter={globalFilter} + dataValueMap={{ + '0': { + name: i18n.translate('xpack.kubernetesSecurity.entryUserChart.root', { + defaultMessage: 'Root', + }), + fieldName: ENTRY_LEADER_USER_ID, + color: euiThemeVars.euiColorVis2, + }, + nonRoot: { + name: i18n.translate('xpack.kubernetesSecurity.entryUserChart.nonRoot', { + defaultMessage: 'Non-root', + }), + fieldName: ENTRY_LEADER_USER_ID, + color: euiThemeVars.euiColorVis3, + shouldHideFilter: true, + }, + }} + groupedBy={ENTRY_LEADER_USER_ID} + countBy={ENTRY_LEADER_ENTITY_ID} + onReduce={onReduceRootAggs} + /> diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts index 889f99715393b..49e41b4cbca38 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts @@ -59,7 +59,7 @@ export const useStyles = () => { }; const countWidgets: CSSObject = { - margin: size.l, + marginBottom: size.l, }; const widgetHolder: CSSObject = { diff --git a/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.test.tsx deleted file mode 100644 index cb2db24d28faf..0000000000000 --- a/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.test.tsx +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { AppContextTestRender, createAppRootMockRenderer } from '../../test'; -import { WIDGET_TOGGLE_SHOW, WIDGET_TOGGLE_HIDE } from '../../../common/translations'; -import { WidgetsToggle, TOGGLE_TEST_ID } from '.'; - -describe('WidgetsToggle component', () => { - let render: () => ReturnType; - let renderResult: ReturnType; - let mockedContext: AppContextTestRender; - const handleToggleHideWidgets = jest.fn(); - - beforeEach(() => { - mockedContext = createAppRootMockRenderer(); - }); - - describe('When PercentWidget is mounted', () => { - it('show "hide widgets" text when shouldHideWidgets is false', async () => { - renderResult = mockedContext.render( - - ); - - expect(renderResult.getByText(WIDGET_TOGGLE_HIDE)).toBeVisible(); - }); - it('show "show widgets" text when shouldHideWidgets is true', async () => { - renderResult = mockedContext.render( - - ); - - expect(renderResult.getByText(WIDGET_TOGGLE_SHOW)).toBeVisible(); - }); - it('shouldHideWidgets defaults to false when not provided', async () => { - renderResult = mockedContext.render( - - ); - - expect(renderResult.getByText(WIDGET_TOGGLE_HIDE)).toBeVisible(); - }); - it('clicking the toggle fires the callback', async () => { - renderResult = mockedContext.render( - - ); - - renderResult.queryByTestId(TOGGLE_TEST_ID)?.click(); - expect(handleToggleHideWidgets).toHaveBeenCalledTimes(1); - }); - }); -}); diff --git a/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.tsx b/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.tsx deleted file mode 100644 index 5a31b8504f8ab..0000000000000 --- a/x-pack/plugins/kubernetes_security/public/components/widgets_toggle/index.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { EuiButtonEmpty } from '@elastic/eui'; -import { WIDGET_TOGGLE_SHOW, WIDGET_TOGGLE_HIDE } from '../../../common/translations'; - -export const TOGGLE_TEST_ID = 'kubernetesSecurity:widgetToggle'; - -interface WidgetsToggleDeps { - handleToggleHideWidgets: () => void; - shouldHideWidgets?: boolean; -} - -export const WidgetsToggle = ({ - handleToggleHideWidgets, - shouldHideWidgets = false, -}: WidgetsToggleDeps) => ( - - {shouldHideWidgets ? WIDGET_TOGGLE_SHOW : WIDGET_TOGGLE_HIDE} - -); diff --git a/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.test.ts b/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.test.ts new file mode 100644 index 0000000000000..03faf16921c1b --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { addCommasToNumber } from './add_commas_to_number'; + +describe('addCommasToNumber(num)', () => { + it('works for a number without needing a comma', () => { + expect(addCommasToNumber(123)).toEqual('123'); + }); + it('works for a number that needs a comma', () => { + expect(addCommasToNumber(1234)).toEqual('1,234'); + }); + it('works for a number that needs multiple commas', () => { + expect(addCommasToNumber(123456789)).toEqual('123,456,789'); + }); + it('works for negative number', () => { + expect(addCommasToNumber(-10)).toEqual('-10'); + }); + it('works for negative number with commas', () => { + expect(addCommasToNumber(-10000)).toEqual('-10,000'); + }); + it('works for NaN', () => { + expect(addCommasToNumber(NaN)).toEqual('NaN'); + }); + it('works for Infinity', () => { + expect(addCommasToNumber(Infinity)).toEqual('Infinity'); + }); + it('works for zero', () => { + expect(addCommasToNumber(0)).toEqual('0'); + }); +}); diff --git a/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.ts b/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.ts new file mode 100644 index 0000000000000..3e440ab8c9226 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/utils/add_commas_to_number.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * Add commas as thousands separators to a number. + * + * @param {Number} num + * @return {String} num in string with commas as thousands separaters + */ +export function addCommasToNumber(num: number) { + return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); +} From 495d64694b7d7ddbb97d9f1e7f1a22bd9e917030 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 14 Jul 2022 10:22:37 -0500 Subject: [PATCH 56/96] skip suite failing es promotion. #136412 --- x-pack/test/api_integration/apis/uptime/rest/index_status.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/uptime/rest/index_status.ts b/x-pack/test/api_integration/apis/uptime/rest/index_status.ts index 620621274a078..6526278bb8a46 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/index_status.ts +++ b/x-pack/test/api_integration/apis/uptime/rest/index_status.ts @@ -10,7 +10,8 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; import { expectFixtureEql } from './helper/expect_fixture_eql'; export default function ({ getService }: FtrProviderContext) { - describe('docCount query', () => { + // Failing ES Promotion: https://github.com/elastic/kibana/issues/136412 + describe.skip('docCount query', () => { const supertest = getService('supertest'); it(`will fetch the index's count`, async () => { From 2aa000b9ea54784716bc7d5656386685b29a9c63 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 14 Jul 2022 16:31:35 +0100 Subject: [PATCH 57/96] [Archive Migrations] x-pack..lens/reporting (#136262) --- .../apps/lens/group3/lens_reporting.ts | 8 +- .../es_archives/lens/reporting/data.json.gz | Bin 4542 -> 0 bytes .../es_archives/lens/reporting/mappings.json | 1261 ----------------- .../fixtures/kbn_archiver/lens/reporting.json | 491 +++++++ 4 files changed, 496 insertions(+), 1264 deletions(-) delete mode 100644 x-pack/test/functional/es_archives/lens/reporting/data.json.gz delete mode 100644 x-pack/test/functional/es_archives/lens/reporting/mappings.json create mode 100644 x-pack/test/functional/fixtures/kbn_archiver/lens/reporting.json diff --git a/x-pack/test/functional/apps/lens/group3/lens_reporting.ts b/x-pack/test/functional/apps/lens/group3/lens_reporting.ts index 2cbb55ae03d97..dd54475efff32 100644 --- a/x-pack/test/functional/apps/lens/group3/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group3/lens_reporting.ts @@ -11,13 +11,15 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common', 'dashboard', 'reporting', 'timePicker']); const es = getService('es'); - const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); const listingTable = getService('listingTable'); const security = getService('security'); describe('lens reporting', () => { before(async () => { - await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/lens/reporting'); + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/lens/reporting' + ); await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); await security.testUser.setRoles( [ @@ -30,7 +32,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/lens/reporting'); + await kibanaServer.savedObjects.cleanStandardList(); await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings(); await es.deleteByQuery({ index: '.reporting-*', diff --git a/x-pack/test/functional/es_archives/lens/reporting/data.json.gz b/x-pack/test/functional/es_archives/lens/reporting/data.json.gz deleted file mode 100644 index 3c06824f606462a44aabd3a24b000cc4a6975cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4542 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 Date: Thu, 14 Jul 2022 10:45:25 -0500 Subject: [PATCH 58/96] Remove api-{extractor,documenter} (#136357) With the merges of https://github.com/elastic/kibana/pull/134313 and https://github.com/elastic/kibana/pull/135163 we no longer use these dependencies. --- api-documenter.json | 4 - package.json | 2 - src/dev/precommit_hook/casing_check_config.js | 3 - yarn.lock | 171 ++---------------- 4 files changed, 12 insertions(+), 168 deletions(-) delete mode 100644 api-documenter.json diff --git a/api-documenter.json b/api-documenter.json deleted file mode 100644 index a2303b939c8ec..0000000000000 --- a/api-documenter.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "newlineKind": "lf", - "outputTarget": "markdown" -} diff --git a/package.json b/package.json index 44111b5550366..5f7e4a706b826 100644 --- a/package.json +++ b/package.json @@ -609,8 +609,6 @@ "@kbn/type-summarizer-core": "link:bazel-bin/packages/kbn-type-summarizer-core", "@loaders.gl/polyfills": "^2.3.5", "@mapbox/vector-tile": "1.3.1", - "@microsoft/api-documenter": "7.13.68", - "@microsoft/api-extractor": "7.18.19", "@octokit/rest": "^16.35.0", "@openpgp/web-stream-tools": "^0.0.10", "@percy/agent": "^0.28.6", diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index b16dc39c4f50b..0c65b924f14b1 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -53,9 +53,6 @@ export const IGNORE_FILE_GLOBS = [ '**/preview-body.html', '**/preview-head.html', - // filename required by api-extractor - 'api-documenter.json', - // filename must match upstream filenames from lodash 'packages/elastic-safer-lodash-set/**/*', diff --git a/yarn.lock b/yarn.lock index 25e8f56335861..20a306f722661 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4013,61 +4013,6 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@microsoft/api-documenter@7.13.68": - version "7.13.68" - resolved "https://registry.yarnpkg.com/@microsoft/api-documenter/-/api-documenter-7.13.68.tgz#c1e144764cac0684adefe78fd848d78c3f374681" - integrity sha512-cRjwK1TDyGxFGgCsRG8G0Yi3Z4akvfWgw1pWAxKFbm7ajlQQGZcHPnb+n4lKlSeQ5g/cxc7hcdw54Mvisne9Bg== - dependencies: - "@microsoft/api-extractor-model" "7.13.16" - "@microsoft/tsdoc" "0.13.2" - "@rushstack/node-core-library" "3.43.2" - "@rushstack/ts-command-line" "4.10.4" - colors "~1.2.1" - js-yaml "~3.13.1" - resolve "~1.17.0" - -"@microsoft/api-extractor-model@7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.13.16.tgz#1d67541ebbcea32672c5fdd9392dc1579b2fc23a" - integrity sha512-ttdxVXsTWL5dd26W1YNLe3LgDsE0EE273aZlcLe58W0opymBybCYU1Mn+OHQM8BuErrdvdN8LdpWAAbkiOEN/Q== - dependencies: - "@microsoft/tsdoc" "0.13.2" - "@microsoft/tsdoc-config" "~0.15.2" - "@rushstack/node-core-library" "3.43.2" - -"@microsoft/api-extractor@7.18.19": - version "7.18.19" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.18.19.tgz#f09afc1c210aa67e2f3f34b0a68281a12f144541" - integrity sha512-aY+/XR7PtQXtnqNPFRs3/+iVRlQJpo6uLTjO2g7PqmnMywl3GBU3bCgAlV/khZtAQbIs6Le57XxmSE6rOqbcfg== - dependencies: - "@microsoft/api-extractor-model" "7.13.16" - "@microsoft/tsdoc" "0.13.2" - "@microsoft/tsdoc-config" "~0.15.2" - "@rushstack/node-core-library" "3.43.2" - "@rushstack/rig-package" "0.3.5" - "@rushstack/ts-command-line" "4.10.4" - colors "~1.2.1" - lodash "~4.17.15" - resolve "~1.17.0" - semver "~7.3.0" - source-map "~0.6.1" - typescript "~4.4.2" - -"@microsoft/tsdoc-config@~0.15.2": - version "0.15.2" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz#eb353c93f3b62ab74bdc9ab6f4a82bcf80140f14" - integrity sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA== - dependencies: - "@microsoft/tsdoc" "0.13.2" - ajv "~6.12.6" - jju "~1.4.0" - resolve "~1.19.0" - -"@microsoft/tsdoc@0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz#3b0efb6d3903bd49edb073696f60e90df08efb26" - integrity sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg== - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -4731,39 +4676,6 @@ redux-thunk "^2.3.0" reselect "^4.0.0" -"@rushstack/node-core-library@3.43.2": - version "3.43.2" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.43.2.tgz#f067371a94fd92ed8f9d9aa8201c5e9e17a19f0f" - integrity sha512-b7AEhSf6CvZgvuDcWMFDeKx2mQSn9AVnMQVyxNxFeHCtLz3gJicqCOlw2GOXM8HKh6PInLdil/NVCDcstwSrIw== - dependencies: - "@types/node" "12.20.24" - colors "~1.2.1" - fs-extra "~7.0.1" - import-lazy "~4.0.0" - jju "~1.4.0" - resolve "~1.17.0" - semver "~7.3.0" - timsort "~0.3.0" - z-schema "~3.18.3" - -"@rushstack/rig-package@0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.3.5.tgz#7ddab0994647837bab8fdef26f990f1774d82e78" - integrity sha512-CvqWw+E81U5lRBN/lUj7Ngr/XQa/PPb2jAS5QcLP7WL+IMUl+3+Cc2qYrsDoB4zke81kz+usWGmBQpBzGMLmAA== - dependencies: - resolve "~1.17.0" - strip-json-comments "~3.1.1" - -"@rushstack/ts-command-line@4.10.4": - version "4.10.4" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.10.4.tgz#05142b74e5cb207d3dd9b935c82f80d7fcb68042" - integrity sha512-4T5ao4UgDb6LmiRj4GumvG3VT/p6RSMgl7TN7S58ifaAGN2GeTNBajFCDdJs9QQP0d/4tA5p0SFzT7Ps5Byirg== - dependencies: - "@types/argparse" "1.0.38" - argparse "~1.0.9" - colors "~1.2.1" - string-argv "~0.3.1" - "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -6039,11 +5951,6 @@ dependencies: "@types/glob" "*" -"@types/argparse@1.0.38": - version "1.0.38" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== - "@types/aria-query@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" @@ -7663,7 +7570,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@12.20.24", "@types/node@16.11.41", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10", "@types/node@^14.14.31": +"@types/node@*", "@types/node@16.11.41", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=8.9.0", "@types/node@^10.1.0", "@types/node@^14.0.10", "@types/node@^14.14.31": version "16.11.41" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.41.tgz#88eb485b1bfdb4c224d878b7832239536aa2f813" integrity sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ== @@ -8959,7 +8866,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.11.0, ajv@^6.12.5, ajv@~6.12.6: +ajv@^6.11.0, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -9292,7 +9199,7 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^1.0.7, argparse@~1.0.9: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -11542,11 +11449,6 @@ colors@1.4.0, colors@^1.3.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colors@~1.2.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - colorspace@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.1.tgz#9ac2491e1bc6f8fb690e2176814f8d091636d972" @@ -15805,7 +15707,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.0, fs-extra@^7.0.1, fs-extra@~7.0.1: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -17493,7 +17395,7 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -import-lazy@^4.0.0, import-lazy@~4.0.0: +import-lazy@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== @@ -17912,7 +17814,7 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.1.0, is-core-module@^2.2.0, is-core-module@^2.6.0, is-core-module@^2.8.1: +is-core-module@^2.2.0, is-core-module@^2.6.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -19246,11 +19148,6 @@ jimp@^0.14.0: "@jimp/types" "^0.14.0" regenerator-runtime "^0.13.3" -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - joi@*, joi@^17.3.0, joi@^17.4.0: version "17.4.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20" @@ -19358,14 +19255,6 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@~3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -20143,7 +20032,7 @@ lodash.flattendeep@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.get@^4.0.0, lodash.get@^4.4.2: +lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= @@ -20263,7 +20152,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@>4.17.4, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.10, lodash@~4.17.15: +lodash@>4.17.4, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -25960,21 +25849,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@~1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@~1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -26444,7 +26318,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@~7.3.0, semver@~7.3.2: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@~7.3.2: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -27447,11 +27321,6 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= -string-argv@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - string-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" @@ -27671,7 +27540,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -28332,7 +28201,7 @@ timm@^1.6.1: resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.1.tgz#5f8aafc932248c76caf2c6af60542a32d3c30701" integrity sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg== -timsort@^0.3.0, timsort@~0.3.0: +timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= @@ -28852,7 +28721,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@4.6.3, typescript@^3.3.3333, typescript@^3.5.3, typescript@^4.5.5, typescript@~4.4.2: +typescript@4.6.3, typescript@^3.3.3333, typescript@^3.5.3, typescript@^4.5.5: version "4.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== @@ -29595,11 +29464,6 @@ validator@^13.6.0, validator@^13.7.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== -validator@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" - integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== - value-equal@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" @@ -31134,17 +30998,6 @@ z-schema@^5.0.1: optionalDependencies: commander "^2.7.1" -z-schema@~3.18.3: - version "3.18.4" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" - integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== - dependencies: - lodash.get "^4.0.0" - lodash.isequal "^4.0.0" - validator "^8.0.0" - optionalDependencies: - commander "^2.7.1" - zip-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" From f7d030fa64ba4ddae103e9c99b74eda004e20b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20S=C3=A1nchez?= Date: Thu, 14 Jul 2022 17:50:56 +0200 Subject: [PATCH 59/96] [Security Solution] [Endpoint] Responder new help panel design (#136106) * Help panel restyling and add copy command functionality * Adds tooltip and clean code * Use theme props instead hardcoded ones and adds import type * Fix unit test increasing array length due generic common args * freeze static objects * Moves code to utils file and use
    for numbered list * Moves utils file into /service folder * UI adjustments according mocks * Removes padding. Set function in UseCallback. Removes EuiTextColor. Reduce padding-bottom size. Removes unnecessary grow prop * Fixes border radius --- .../console/components/command_list.tsx | 256 ++++++++++++++++-- .../console/components/console_header.tsx | 31 ++- .../handle_execute_command.test.tsx | 3 +- .../side_panel/side_panel_content_layout.tsx | 9 +- .../side_panel/side_panel_content_manager.tsx | 65 ++++- .../side_panel/side_panel_flex_item.tsx | 14 +- .../management/components/console/console.tsx | 65 +++-- .../console/service/builtin_commands.tsx | 25 ++ .../components/console/service/utils.ts | 30 ++ .../management/components/console/types.ts | 10 +- ...point_response_actions_console_commands.ts | 27 ++ 11 files changed, 457 insertions(+), 78 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/components/console/service/utils.ts diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx index 9b3052336b790..13e0d06d7a41c 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx @@ -5,28 +5,63 @@ * 2.0. */ -import React, { memo, useMemo } from 'react'; +import React, { memo, useMemo, useCallback } from 'react'; +import styled from 'styled-components'; +import { groupBy, sortBy } from 'lodash'; import { EuiBadge, + EuiBasicTable, + EuiButtonIcon, EuiCode, EuiDescriptionList, EuiFlexGroup, + EuiFlexGrid, EuiFlexItem, EuiSpacer, EuiText, - EuiTextColor, + EuiCallOut, + EuiLink, + EuiToolTip, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { CommandDefinition } from '../types'; import { useTestIdGenerator } from '../../../hooks/use_test_id_generator'; import { useDataTestSubj } from '../hooks/state_selectors/use_data_test_subj'; +import { useConsoleStateDispatch } from '../hooks/state_selectors/use_console_state_dispatch'; +import { COMMON_ARGS, HELP_GROUPS } from '../service/builtin_commands'; +import { getCommandNameWithArgs } from '../service/utils'; + +// @ts-expect-error TS2769 +const StyledEuiBasicTable = styled(EuiBasicTable)` + margin-top: ${({ theme: { eui } }) => eui.euiSizeS}; + .euiTableHeaderCell { + .euiTableCellContent__text { + color: ${({ theme: { eui } }) => eui.euiTextColor}; + font-size: ${({ theme: { eui } }) => eui.euiFontSize}; + padding-bottom: ${({ theme: { eui } }) => eui.euiSizeS}; + padding-left: ${({ theme: { eui } }) => eui.euiSizeS}; + } + } +`; + +const StyledEuiCallOut = styled(EuiCallOut)` + margin: ${({ theme: { eui } }) => eui.euiSize}; + border-radius: ${({ theme: { eui } }) => eui.euiSizeXS}; +`; + +const StyledEuiFlexGroup = styled(EuiFlexGroup)` + padding-left: ${({ theme: { eui } }) => eui.euiSizeS}; +`; export interface CommandListProps { commands: CommandDefinition[]; + display?: 'default' | 'table'; } -export const CommandList = memo(({ commands }) => { +export const CommandList = memo(({ commands, display = 'default' }) => { const getTestId = useTestIdGenerator(useDataTestSubj()); + const dispatch = useConsoleStateDispatch(); const footerMessage = useMemo(() => { return ( @@ -41,26 +76,207 @@ export const CommandList = memo(({ commands }) => { ); }, []); + const otherCommandsGroupLabel = i18n.translate( + 'xpack.securitySolution.console.commandList.otherCommandsGroup.label', + { + defaultMessage: 'Other commands', + } + ); + + const updateInputText = useCallback( + (text) => () => { + dispatch({ + type: 'updateInputTextEnteredState', + payload: () => { + return { + textEntered: text, + }; + }, + }); + }, + [dispatch] + ); + + const commandsByGroups = useMemo(() => { + return Object.values(groupBy(commands, 'helpGroupLabel')).reduce( + (acc, current) => { + if (current[0].helpGroupPosition !== undefined) { + // If it already exists just move it to the end + if (acc[current[0].helpGroupPosition]) { + acc[acc.length] = acc[current[0].helpGroupPosition]; + } + + acc[current[0].helpGroupPosition] = sortBy(current, 'helpCommandPosition'); + } else if (current.length) { + acc.push(current); + } + return acc; + }, + [] + ); + }, [commands]); + + const getTableItems = useCallback( + ( + commandsByGroup: CommandDefinition[] + ): Array<{ + [key: string]: { name: string; about: React.ElementType | string }; + }> => { + if (commandsByGroup[0].helpGroupLabel === HELP_GROUPS.supporting.label) { + return [...COMMON_ARGS, ...commandsByGroup].map((command) => ({ + [commandsByGroup[0]?.helpGroupLabel ?? otherCommandsGroupLabel]: command, + })); + } + return commandsByGroup.map((command) => ({ + [commandsByGroup[0]?.helpGroupLabel ?? otherCommandsGroupLabel]: command, + })); + }, + [otherCommandsGroupLabel] + ); + + const getTableColumns = useCallback( + (commandsByGroup) => { + return [ + { + field: commandsByGroup[0]?.helpGroupLabel ?? otherCommandsGroupLabel, + name: commandsByGroup[0]?.helpGroupLabel ?? otherCommandsGroupLabel, + render: (command: CommandDefinition) => { + const commandNameWithArgs = getCommandNameWithArgs(command); + return ( + + + {commandNameWithArgs}, + description: ( + <> + + + {command.about} + + + ), + }, + ]} + data-test-subj={getTestId('commandList-command')} + /> + + {/* Show EuiButtonIcon if is a command */} + {command.RenderComponent && ( + + + + + + )} + + ); + }, + }, + ]; + }, + [getTestId, otherCommandsGroupLabel, updateInputText] + ); + + if (display === 'table') { + const calloutItems = [ + , + , + , + ]; + + const callout = ( + + } + > +
      + {calloutItems.map((item, index) => ( +
    1. + {item} +
    2. + ))} +
    + {/* //TODO: Add link to the read more page */} + + + +
    + ); + + return ( + <> + {commandsByGroups.map((commandsByGroup) => ( + + ))} + + {callout} + + ); + } + return ( <> - - {commands.map(({ name, about }) => { - return ( - - {name}, description: about }]} - data-test-subj={getTestId('commandList-command')} - /> - - ); - })} - - - - - {footerMessage} + {commandsByGroups.map((commandsByGroup) => { + const groupLabel = commandsByGroup[0].helpGroupLabel; + const groupedCommands = + groupLabel === HELP_GROUPS.supporting.label + ? [...commandsByGroup, ...COMMON_ARGS] + : commandsByGroup; + return ( + + {groupedCommands.map((command) => { + return ( + + {getCommandNameWithArgs(command)}, + description: <>{command.about}, + }, + ]} + data-test-subj={getTestId('commandList-command')} + /> + + ); + })} + + ); + })} + + + {footerMessage} ); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx index 058486e13f0ab..b26b53fd7c2ac 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_header.tsx @@ -6,7 +6,8 @@ */ import React, { memo, useCallback } from 'react'; -import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { useConsoleStateDispatch } from '../hooks/state_selectors/use_console_state_dispatch'; import { useWithSidePanel } from '../hooks/state_selectors/use_with_side_panel'; @@ -40,17 +41,23 @@ export const ConsoleHeader = memo(({ TitleComponent }) => { {TitleComponent ? : ''} - - - + {!isHelpOpen && ( + + + + + + )} ); }); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx index 2c7f30a83cd5c..2bb52f04109c9 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx @@ -34,7 +34,8 @@ describe('When a Console command is entered by the user', () => { await waitFor(() => { expect(renderResult.getAllByTestId('test-commandList-command')).toHaveLength( // `+2` to account for builtin commands - commands.length + 2 + // `+2` to account for builtin generic args + commands.length + 4 ); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_layout.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_layout.tsx index fc086ce22be0e..82b9fdf5fb849 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_layout.tsx @@ -8,12 +8,17 @@ import type { ReactNode } from 'react'; import React, { memo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule } from '@elastic/eui'; +import styled from 'styled-components'; export interface SidePanelContentLayoutProps { children: ReactNode; headerContent?: ReactNode; } +const StyledEuiFlexItemNoPadding = styled(EuiFlexItem)` + padding: 0 !important; +`; + /** * A layout component for displaying content in the right-side panel of the console */ @@ -34,9 +39,9 @@ export const SidePanelContentLayout = memo( )} - +
    {children}
    -
    + ); } diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_manager.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_manager.tsx index 376564ab896a7..7ba9cdedeea23 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_manager.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_content_manager.tsx @@ -6,37 +6,82 @@ */ import type { ReactNode } from 'react'; -import React, { memo, useMemo } from 'react'; -import { EuiText } from '@elastic/eui'; +import React, { memo, useMemo, useCallback } from 'react'; +import styled from 'styled-components'; +import { + EuiText, + EuiIcon, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + EuiButtonIcon, + EuiTitle, +} from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; import { CommandList } from '../command_list'; import { useWithCommandList } from '../../hooks/state_selectors/use_with_command_list'; import { SidePanelContentLayout } from './side_panel_content_layout'; import { useWithSidePanel } from '../../hooks/state_selectors/use_with_side_panel'; +import { useConsoleStateDispatch } from '../../hooks/state_selectors/use_console_state_dispatch'; + +const StyledEuiTitle = styled(EuiTitle)` + color: ${({ theme: { eui } }) => eui.euiTextSubduedColor}; +`; export const SidePanelContentManager = memo(() => { + const dispatch = useConsoleStateDispatch(); const commands = useWithCommandList(); const show = useWithSidePanel().show; + const closeHelpPanel = useCallback(() => { + dispatch({ + type: 'showSidePanel', + payload: { show: null }, + }); + }, [dispatch]); + const panelHeader: ReactNode = useMemo(() => { if (show === 'help') { return ( - - + <> + + + +

    + +

    +
    +
    + + + +
    + + }} /> -
    -
    +
    + ); } return null; - }, [show]); + }, [show, closeHelpPanel]); const panelBody: ReactNode = useMemo(() => { if (show === 'help') { - return ; + return ; } return null; diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_flex_item.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_flex_item.tsx index 20cca6401f633..f2c1cc2f3e192 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_flex_item.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/side_panel/side_panel_flex_item.tsx @@ -6,10 +6,18 @@ */ import React, { memo } from 'react'; -import { EuiFlexItem } from '@elastic/eui'; +import styled from 'styled-components'; +import { EuiFlexItem, transparentize } from '@elastic/eui'; import { SidePanelContentManager } from './side_panel_content_manager'; import { useWithSidePanel } from '../../hooks/state_selectors/use_with_side_panel'; +const StyledEuiFlexItemWhite = styled(EuiFlexItem)` + background-color: ${({ theme: { eui } }) => eui.euiHeaderBackgroundColor} !important; + border-radius: ${({ theme: { eui } }) => `0 ${eui.euiSizeXS} ${eui.euiSizeXS} 0`}; + box-shadow: 0 ${({ theme: { eui } }) => eui.euiSizeXS} ${({ theme: { eui } }) => eui.euiSizeXS} + ${({ theme: { eui } }) => transparentize(eui.euiShadowColor, 0.04)}; +`; + export const SidePanelFlexItem = memo((props) => { const isPanelOpened = Boolean(useWithSidePanel().show); @@ -18,9 +26,9 @@ export const SidePanelFlexItem = memo((props) => { } return ( - + - + ); }); SidePanelFlexItem.displayName = 'SidePanelFlexItem'; diff --git a/x-pack/plugins/security_solution/public/management/components/console/console.tsx b/x-pack/plugins/security_solution/public/management/components/console/console.tsx index e8fa86ffda83a..37850e888b126 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/console.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/console.tsx @@ -40,7 +40,7 @@ const ConsoleWindow = styled.div` &-container { padding: ${({ theme: { eui } }) => eui.euiSizeL} ${({ theme: { eui } }) => eui.euiSizeL} - ${({ theme: { eui } }) => eui.euiSizeS} ${({ theme: { eui } }) => eui.euiSizeL}; + ${({ theme: { eui } }) => eui.euiSizeS} ${({ theme: { eui } }) => eui.euiSizeM}; } &-header { @@ -139,46 +139,53 @@ export const Console = memo( dataTestSubj={commonProps['data-test-subj']} > - - - - + + + + + + - - - + - -
    + - -
    -
    - - - - - + +
    + +
    +
    + + + + + + +
    - - {}
    + {}
    diff --git a/x-pack/plugins/security_solution/public/management/components/console/service/builtin_commands.tsx b/x-pack/plugins/security_solution/public/management/components/console/service/builtin_commands.tsx index 485b43115e19b..4906143ff2c36 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/service/builtin_commands.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/service/builtin_commands.tsx @@ -10,6 +10,29 @@ import { ClearCommand } from '../components/builtin_commands/clear_command'; import { HelpCommand } from '../components/builtin_commands/help_command'; import type { CommandDefinition } from '../types'; +export const HELP_GROUPS = Object.freeze({ + supporting: { + label: i18n.translate('xpack.securitySolution.console.builtInCommands.groups.supporting', { + defaultMessage: 'Supporting commands & syntaxes', + }), + }, +}); + +export const COMMON_ARGS = Object.freeze([ + { + name: '--comment', + about: i18n.translate('xpack.securitySolution.console.commandList.commonArgs.comment', { + defaultMessage: 'Add comment to any action Ex: isolate --comment your comment', + }), + }, + { + name: '--help', + about: i18n.translate('xpack.securitySolution.console.commandList.commonArgs.help', { + defaultMessage: 'Command assistance Ex: isolate --help', + }), + }, +]); + export const getBuiltinCommands = (): CommandDefinition[] => { return [ { @@ -18,6 +41,7 @@ export const getBuiltinCommands = (): CommandDefinition[] => { defaultMessage: 'View list of available commands', }), RenderComponent: HelpCommand, + helpGroupLabel: HELP_GROUPS.supporting.label, }, { name: 'cls', @@ -25,6 +49,7 @@ export const getBuiltinCommands = (): CommandDefinition[] => { defaultMessage: 'Clear the console buffer', }), RenderComponent: ClearCommand, + helpGroupLabel: HELP_GROUPS.supporting.label, }, ]; }; diff --git a/x-pack/plugins/security_solution/public/management/components/console/service/utils.ts b/x-pack/plugins/security_solution/public/management/components/console/service/utils.ts new file mode 100644 index 0000000000000..faf7d12d12f80 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/console/service/utils.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CommandArgs, CommandDefinition } from '../types'; + +export const getCommandNameWithArgs = (command: Partial) => { + if (!command.mustHaveArgs || !command.args) { + return command.name; + } + + let hasAnExclusiveOrArg = false; + const primaryArgs = Object.entries(command.args).reduce((acc, [key, value]) => { + if (value.required) { + acc[key] = value; + return acc; + } + if (value.exclusiveOr && !hasAnExclusiveOrArg) { + hasAnExclusiveOrArg = true; + acc[key] = value; + return acc; + } + return acc; + }, {}); + + return `${command.name} --${Object.keys(primaryArgs).join(' --')}`; +}; diff --git a/x-pack/plugins/security_solution/public/management/components/console/types.ts b/x-pack/plugins/security_solution/public/management/components/console/types.ts index dc3ff45f161e3..d929a8a4b4984 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/types.ts +++ b/x-pack/plugins/security_solution/public/management/components/console/types.ts @@ -35,11 +35,19 @@ export interface CommandArgs { export interface CommandDefinition { name: string; - about: string; + about: ComponentType | string; /** * The Component that will be used to render the Command */ RenderComponent: CommandExecutionComponent; + /** Will be used to sort the commands when building the output for the `help` command */ + helpCommandPosition?: number; + + /** A grouping label for the command */ + helpGroupLabel?: string; + + /** Used only when command help "grouping" is detected. Used to sort the groups of commands */ + helpGroupPosition?: number; /** * If defined, this command's use of `--help` will be displayed using this component instead of * the console's built in output. diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/endpoint_response_actions_console_commands.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/endpoint_response_actions_console_commands.ts index fec61d55c5e52..1a8476fb9c51c 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/endpoint_response_actions_console_commands.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/endpoint_response_actions_console_commands.ts @@ -23,6 +23,15 @@ const emptyArgumentValidator = (argData: ParsedArgData) => { } }; +const HELP_GROUPS = Object.freeze({ + responseActions: { + position: 0, + label: i18n.translate('xpack.securitySolution.endpointConsoleCommands.groups.responseActions', { + defaultMessage: 'Response actions', + }), + }, +}); + export const getEndpointResponseActionsConsoleCommands = ( endpointAgentId: string ): CommandDefinition[] => { @@ -48,6 +57,9 @@ export const getEndpointResponseActionsConsoleCommands = ( ), }, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 0, }, { name: 'release', @@ -70,6 +82,9 @@ export const getEndpointResponseActionsConsoleCommands = ( ), }, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 1, }, { name: 'kill-process', @@ -114,6 +129,9 @@ export const getEndpointResponseActionsConsoleCommands = ( validate: emptyArgumentValidator, }, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 4, }, { name: 'suspend-process', @@ -161,6 +179,9 @@ export const getEndpointResponseActionsConsoleCommands = ( validate: emptyArgumentValidator, }, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 5, }, { name: 'status', @@ -171,6 +192,9 @@ export const getEndpointResponseActionsConsoleCommands = ( meta: { endpointId: endpointAgentId, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 2, }, { name: 'processes', @@ -193,6 +217,9 @@ export const getEndpointResponseActionsConsoleCommands = ( ), }, }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 3, }, ]; }; From fb4c2bcc88215cd798352cf3b2d492edc4a17fc1 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 14 Jul 2022 09:07:20 -0700 Subject: [PATCH 60/96] [DOCS] Reduce execution terminology in actions readme (#136342) Co-authored-by: Gidi Meir Morris --- x-pack/plugins/actions/README.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/actions/README.md b/x-pack/plugins/actions/README.md index 3c5c459d5a780..c9b60be5e8c14 100644 --- a/x-pack/plugins/actions/README.md +++ b/x-pack/plugins/actions/README.md @@ -3,11 +3,11 @@ The Kibana actions plugin provides a framework to create executable actions. You can: - Register an action type and associate a JavaScript function to run when actions - are executed. + are generated. - Get a list of registered action types - Create an action from an action type and encrypted configuration object. - Get a list of actions that have been created. -- Execute an action, passing it a parameter object. +- Trigger an action, passing it a parameter object. - Perform CRUD operations on actions. --- @@ -81,13 +81,13 @@ Table of Contents **Action Type**: A programatically defined integration with another service, with an expected set of configuration and parameters properties, typically defined with a schema. Plugins can add new action types. -**Action**: A configuration object associated with an action type, that is ready to be executed. The configuration is persisted via Saved Objects, and some/none/all of the configuration properties can be stored encrypted. +**Action**: A configuration object associated with an action type, that is ready to run. The configuration is persisted via Saved Objects, and some/none/all of the configuration properties can be stored encrypted. ## Usage 1. Develop and register an action type (see [Action types -> Example](#example)). 2. Create an action by using the [RESTful API](#restful-api). -3. Use alerts to execute actions or execute manually (see [Firing actions](#firing-actions)). +3. Use alerting rules to generate actions or trigger them manually (see [Firing actions](#firing-actions)). ## Kibana Actions Configuration @@ -99,7 +99,8 @@ Built-In-Actions are configured using the _xpack.actions_ namespace under _kiban #### **allowedHosts** configuration -- You can use the string "*" in the **allowedHosts** configuration in place of a specific hostname to enable Kibana to target any URL, but keep in mind the potential to use such a feature to execute [SSRF](https://www.owasp.org/index.php/Server_Side_Request_Forgery) attacks from your server. +- You can use the string "*" in the **allowedHosts** configuration in place of a specific hostname to enable Kibana to target any URL, but keep in mind the potential to use such a feature to launch [SSRF](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) attacks from your server. + - The **allowedHosts** configuration applies to built-in action types (such as Slack and PagerDuty). While the _PagerDuty Action Type_ has been configured to support the service's Events API (at _https://events.pagerduty.com/v2/enqueue_, which you can read about in [Pagerduty's documentation](https://v2.developer.pagerduty.com/docs/events-api-v2)), the PagerDuty domain must still be included in the allowedHosts configuration before the action can be used. @@ -130,28 +131,28 @@ The following table describes the properties of the `options` object. | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | | id | Unique identifier for the action type. For convention, ids starting with `.` are reserved for built in action types. We recommend using a convention like `.mySpecialAction` for your action types. | string | | name | A user-friendly name for the action type. These will be displayed in dropdowns when chosing action types. | string | -| maxAttempts | The maximum number of times this action will attempt to execute when scheduled. | number | +| maxAttempts | The maximum number of times this action will attempt to run when scheduled. | number | | minimumLicenseRequired | The license required to use the action type. | string | | validate.params | When developing an action type, it needs to accept parameters to know what to do with the action. (Example `to`, `from`, `subject`, `body` of an email). See the current built-in email action type for an example of the state-of-the-art validation.

    Technically, the value of this property should have a property named `validate()` which is a function that takes a params object to validate and returns a sanitized version of that object to pass to the execution function. Validation errors should be thrown from the `validate()` function and will be available as an error message | schema / validation function | | validate.config | Similar to params, a config may be required when creating an action (for example `host` and `port` for an email server). | schema / validation function | | validate.secrets | Similar to params, a secrets object may be required when creating an action (for example `user` and `password` for an email server). | schema / validation function | -| executor | This is where the code of an action type lives. This is a function gets called for executing an action from either alerting or manually by using the exposed function (see firing actions). For full details, see executor section below. | Function | +| executor | This is where the code of an action type lives. This is a function gets called for generating an action from either alerting or manually by using the exposed function (see firing actions). For full details, see executor section below. | Function | | renderParameterTemplates | Optionally define a function to provide custom rendering for this action type. | Function | **Important** - The config object is persisted in ElasticSearch and updated via the ElasticSearch update document API. This API allows "partial updates" - and this can cause issues with the encryption used on specified properties. So, a `validate()` function should return values for all configuration properties, so that partial updates do not occur. Setting property values to `null` rather than `undefined`, or not including a property in the config object, is all you need to do to ensure partial updates won't occur. ### Executor -This is the primary function for an action type. Whenever the action needs to execute, this function will perform the action. It receives a variety of parameters. The following table describes the properties that the executor receives. +This is the primary function for an action type. Whenever the action needs to run, this function will perform the action. It receives a variety of parameters. The following table describes the properties that the executor receives. **executor(options)** | Property | Description | | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| actionId | The action saved object id that the action type is executing for. | +| actionId | The action saved object id that the connector is generating. | | config | The action configuration. If you would like to validate the config before being passed to the executor, define `validate.config` within the action type. | | secrets | The decrypted secrets object given to an action. This comes from the action saved object that is partially or fully encrypted within the data store. If you would like to validate the secrets object before being passed to the executor, define `validate.secrets` within the action type. | -| params | Parameters for the execution. These will be given at execution time by either an alert or manually provided when calling the plugin provided execute function. | +| params | Parameters for the action. These will be given at run time by either an alert or manually provided when calling the plugin provided execute function. | | services.scopedClusterClient | Use this to do Elasticsearch queries on the cluster Kibana connects to. Serves the same purpose as the normal IClusterClient, but exposes an additional `asCurrentUser` method that doesn't use credentials of the Kibana internal user (as `asInternalUser` does) to request Elasticsearch API, but rather passes HTTP headers extracted from the current user request to the API instead. | | services.savedObjectsClient | This is an instance of the saved objects client. This provides the ability to do CRUD on any saved objects within the same space the alert lives in.

    The scope of the saved objects client is tied to the user in context calling the execute API or the API key provided to the execute plugin function (only when security isenabled). | | services.log(tags, [data], [timestamp]) | Use this to create server logs. (This is the same function as server.log) | @@ -176,7 +177,7 @@ By providing the user's Request you'll receive an instance of the ActionsClient const actionsClient = server.plugins.actions.getActionsClientWithRequest(request); ``` -Once you have a scoped ActionsClient you can execute an action by caling either the `enqueueExecution` which will schedule the action to run later or the `execute` apis which will run it immediately and return the result respectively. +Once you have a scoped ActionsClient you can generate an action by calling either the `enqueueExecution` which will schedule the action to run later or the `execute` apis which will run it immediately and return the result respectively. ### actionsClient.enqueueExecution(options) @@ -191,7 +192,7 @@ The following table describes the properties of the `options` object. | Property | Description | Type | | -------- | ------------------------------------------------------------------------------------------------------ | ---------------- | -| id | The id of the action you want to execute. | string | +| id | The id of the action you want to run. | string | | params | The `params` value to give the action type executor. | object | | spaceId | The space id the action is within. | string | | apiKey | The Elasticsearch API key to use for context. (Note: only required and used when security is enabled). | string | @@ -225,7 +226,7 @@ The following table describes the properties of the `options` object. | Property | Description | Type | | -------- | ------------------------------------------------------------------------------------- | ---------------- | -| id | The id of the action you want to execute. | string | +| id | The id of the action you want to generate. | string | | params | The `params` value to give the action type executor. | object | | source | The source of the execution, either an HTTP request or a reference to a Saved Object. | object, optional | From 17daa51d821fc7b7e762569d2c5c545ced8b1780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Istv=C3=A1n=20Zolt=C3=A1n=20Szab=C3=B3?= Date: Thu, 14 Jul 2022 18:27:42 +0200 Subject: [PATCH 61/96] [ML] Adjust screenshot creation scenario for regression results (#136411) * [ML] Modifies screenshot creation for flights-regression-results. --- .../apps/ml_docs/data_frame_analytics/regression.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/test/screenshot_creation/apps/ml_docs/data_frame_analytics/regression.ts b/x-pack/test/screenshot_creation/apps/ml_docs/data_frame_analytics/regression.ts index ea59c68088363..de3dee3a47905 100644 --- a/x-pack/test/screenshot_creation/apps/ml_docs/data_frame_analytics/regression.ts +++ b/x-pack/test/screenshot_creation/apps/ml_docs/data_frame_analytics/regression.ts @@ -123,8 +123,14 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsResults.expandFeatureImportanceSection(false); await ml.dataFrameAnalyticsResults.expandScatterplotMatrixSection(false); await ml.dataFrameAnalyticsResults.scrollAnalysisIntoView(); + await ml.dataFrameAnalyticsResults.enableResultsTablePreviewHistogramCharts(true); await mlScreenshots.removeFocusFromElement(); - await mlScreenshots.takeScreenshot('flights-regression-results', screenshotDirectories); + await mlScreenshots.takeScreenshot( + 'flights-regression-results', + screenshotDirectories, + 1500, + 1300 + ); await ml.testExecution.logTestStep('expand feature importance section and take screenshot'); await ml.dataFrameAnalyticsResults.expandFeatureImportanceSection(true); From 8e7d411aa457fbd7e766c03e36aacefb3ab50267 Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Thu, 14 Jul 2022 09:59:24 -0700 Subject: [PATCH 62/96] Migrates core uiSettings client-side service to packages (#136354) --- package.json | 10 ++ packages/BUILD.bazel | 10 ++ .../BUILD.bazel | 113 ++++++++++++++++++ .../README.md | 3 + .../jest.config.js | 13 ++ .../package.json | 8 ++ .../src}/http_test_setup.ts | 0 .../src/index.ts | 10 ++ .../tsconfig.json | 18 +++ .../BUILD.bazel | 113 ++++++++++++++++++ .../README.md | 3 + .../jest.config.js | 13 ++ .../package.json | 8 ++ .../ui_settings_api.test.ts.snap | 0 .../ui_settings_client.test.ts.snap | 0 .../src}/index.ts | 1 - .../src}/ui_settings_api.test.ts | 2 +- .../src}/ui_settings_api.ts | 2 +- .../src}/ui_settings_client.test.ts | 0 .../src}/ui_settings_client.ts | 4 +- .../src}/ui_settings_service.test.ts | 0 .../src}/ui_settings_service.ts | 2 +- .../tsconfig.json | 18 +++ .../BUILD.bazel | 111 +++++++++++++++++ .../core-ui-settings-browser-mocks/README.md | 3 + .../jest.config.js | 13 ++ .../package.json | 8 ++ .../src/index.ts | 9 ++ .../src}/ui_settings_service.mock.ts | 4 +- .../tsconfig.json | 18 +++ .../core-ui-settings-browser/BUILD.bazel | 108 +++++++++++++++++ .../core-ui-settings-browser/README.md | 3 + .../core-ui-settings-browser/jest.config.js | 13 ++ .../core-ui-settings-browser/package.json | 8 ++ .../core-ui-settings-browser/src/index.ts | 9 ++ .../core-ui-settings-browser/src}/types.ts | 4 +- .../core-ui-settings-browser/tsconfig.json | 18 +++ .../core-ui-settings-common/BUILD.bazel | 107 +++++++++++++++++ .../core-ui-settings-common/README.md | 3 + .../core-ui-settings-common/jest.config.js | 13 ++ .../core-ui-settings-common/package.json | 8 ++ .../core-ui-settings-common/src/index.ts | 15 +++ .../src}/ui_settings.ts | 4 +- .../core-ui-settings-common/tsconfig.json | 18 +++ src/core/public/chrome/chrome_service.test.ts | 2 +- src/core/public/core_app/core_app.ts | 2 +- .../core_app/errors/url_overflow.test.ts | 4 +- .../public/core_app/errors/url_overflow.tsx | 2 +- src/core/public/core_system.test.mocks.ts | 4 +- src/core/public/core_system.ts | 2 +- src/core/public/index.ts | 9 +- .../integrations/integrations_service.test.ts | 2 +- .../integrations/integrations_service.ts | 2 +- .../moment/moment_service.test.ts | 2 +- .../integrations/moment/moment_service.ts | 2 +- .../styles/styles_service.test.ts | 2 +- .../integrations/styles/styles_service.ts | 2 +- src/core/public/mocks.ts | 4 +- .../notifications/notifications_service.ts | 2 +- .../notifications/toasts/toasts_api.test.ts | 2 +- .../notifications/toasts/toasts_api.tsx | 2 +- .../toasts/toasts_service.test.tsx | 2 +- .../notifications/toasts/toasts_service.tsx | 2 +- .../overlays/banners/banners_service.test.ts | 2 +- .../overlays/banners/banners_service.tsx | 2 +- .../banners/user_banner_service.test.ts | 2 +- .../overlays/banners/user_banner_service.tsx | 2 +- src/core/public/overlays/overlay_service.ts | 2 +- .../public/plugins/plugins_service.test.ts | 2 +- src/core/public/types.ts | 2 +- src/core/server/ui_settings/types.ts | 10 +- src/core/types/index.ts | 8 +- .../data_views_api_client.test.mock.ts | 2 +- ...thorized_response_http_interceptor.test.ts | 2 +- yarn.lock | 40 +++++++ 75 files changed, 927 insertions(+), 48 deletions(-) create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/README.md create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/jest.config.js create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json rename {src/core/test_helpers => packages/core/test-helpers/core-test-helpers-http-setup-browser/src}/http_test_setup.ts (100%) create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/src/index.ts create mode 100644 packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json create mode 100644 packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel create mode 100644 packages/core/ui-settings/core-ui-settings-browser-internal/README.md create mode 100644 packages/core/ui-settings/core-ui-settings-browser-internal/jest.config.js create mode 100644 packages/core/ui-settings/core-ui-settings-browser-internal/package.json rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/__snapshots__/ui_settings_api.test.ts.snap (100%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/__snapshots__/ui_settings_client.test.ts.snap (100%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/index.ts (87%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_api.test.ts (98%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_api.ts (98%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_client.test.ts (100%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_client.ts (96%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_service.test.ts (100%) rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-internal/src}/ui_settings_service.ts (96%) create mode 100644 packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/README.md create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/jest.config.js create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/package.json create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/src/index.ts rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser-mocks/src}/ui_settings_service.mock.ts (91%) create mode 100644 packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json create mode 100644 packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel create mode 100644 packages/core/ui-settings/core-ui-settings-browser/README.md create mode 100644 packages/core/ui-settings/core-ui-settings-browser/jest.config.js create mode 100644 packages/core/ui-settings/core-ui-settings-browser/package.json create mode 100644 packages/core/ui-settings/core-ui-settings-browser/src/index.ts rename {src/core/public/ui_settings => packages/core/ui-settings/core-ui-settings-browser/src}/types.ts (96%) create mode 100644 packages/core/ui-settings/core-ui-settings-browser/tsconfig.json create mode 100644 packages/core/ui-settings/core-ui-settings-common/BUILD.bazel create mode 100644 packages/core/ui-settings/core-ui-settings-common/README.md create mode 100644 packages/core/ui-settings/core-ui-settings-common/jest.config.js create mode 100644 packages/core/ui-settings/core-ui-settings-common/package.json create mode 100644 packages/core/ui-settings/core-ui-settings-common/src/index.ts rename {src/core/types => packages/core/ui-settings/core-ui-settings-common/src}/ui_settings.ts (96%) create mode 100644 packages/core/ui-settings/core-ui-settings-common/tsconfig.json diff --git a/package.json b/package.json index 5f7e4a706b826..9294089cb355a 100644 --- a/package.json +++ b/package.json @@ -208,9 +208,14 @@ "@kbn/core-preboot-server": "link:bazel-bin/packages/core/preboot/core-preboot-server", "@kbn/core-preboot-server-internal": "link:bazel-bin/packages/core/preboot/core-preboot-server-internal", "@kbn/core-preboot-server-mocks": "link:bazel-bin/packages/core/preboot/core-preboot-server-mocks", + "@kbn/core-test-helpers-http-setup-browser": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser", "@kbn/core-theme-browser": "link:bazel-bin/packages/core/theme/core-theme-browser", "@kbn/core-theme-browser-internal": "link:bazel-bin/packages/core/theme/core-theme-browser-internal", "@kbn/core-theme-browser-mocks": "link:bazel-bin/packages/core/theme/core-theme-browser-mocks", + "@kbn/core-ui-settings-browser": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser", + "@kbn/core-ui-settings-browser-internal": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal", + "@kbn/core-ui-settings-browser-mocks": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks", + "@kbn/core-ui-settings-common": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-common", "@kbn/crypto": "link:bazel-bin/packages/kbn-crypto", "@kbn/crypto-browser": "link:bazel-bin/packages/kbn-crypto-browser", "@kbn/datemath": "link:bazel-bin/packages/kbn-datemath", @@ -791,9 +796,14 @@ "@types/kbn__core-preboot-server-mocks": "link:bazel-bin/packages/core/preboot/core-preboot-server-mocks/npm_module_types", "@types/kbn__core-public-internal-base": "link:bazel-bin/packages/core/public/internal-base/npm_module_types", "@types/kbn__core-server-internal-base": "link:bazel-bin/packages/core/server/internal-base/npm_module_types", + "@types/kbn__core-test-helpers-http-setup-browser": "link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser/npm_module_types", "@types/kbn__core-theme-browser": "link:bazel-bin/packages/core/theme/core-theme-browser/npm_module_types", "@types/kbn__core-theme-browser-internal": "link:bazel-bin/packages/core/theme/core-theme-browser-internal/npm_module_types", "@types/kbn__core-theme-browser-mocks": "link:bazel-bin/packages/core/theme/core-theme-browser-mocks/npm_module_types", + "@types/kbn__core-ui-settings-browser": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser/npm_module_types", + "@types/kbn__core-ui-settings-browser-internal": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal/npm_module_types", + "@types/kbn__core-ui-settings-browser-mocks": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks/npm_module_types", + "@types/kbn__core-ui-settings-common": "link:bazel-bin/packages/core/ui-settings/core-ui-settings-common/npm_module_types", "@types/kbn__crypto": "link:bazel-bin/packages/kbn-crypto/npm_module_types", "@types/kbn__crypto-browser": "link:bazel-bin/packages/kbn-crypto-browser/npm_module_types", "@types/kbn__datemath": "link:bazel-bin/packages/kbn-datemath/npm_module_types", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index 96786d77dd80f..fb1f7a6bdb146 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -76,9 +76,14 @@ filegroup( "//packages/core/preboot/core-preboot-server-internal:build", "//packages/core/preboot/core-preboot-server-mocks:build", "//packages/core/preboot/core-preboot-server:build", + "//packages/core/test-helpers/core-test-helpers-http-setup-browser:build", "//packages/core/theme/core-theme-browser-internal:build", "//packages/core/theme/core-theme-browser-mocks:build", "//packages/core/theme/core-theme-browser:build", + "//packages/core/ui-settings/core-ui-settings-browser-internal:build", + "//packages/core/ui-settings/core-ui-settings-browser-mocks:build", + "//packages/core/ui-settings/core-ui-settings-browser:build", + "//packages/core/ui-settings/core-ui-settings-common:build", "//packages/elastic-apm-synthtrace:build", "//packages/elastic-safer-lodash-set:build", "//packages/home/sample_data_cards:build", @@ -277,9 +282,14 @@ filegroup( "//packages/core/preboot/core-preboot-server-internal:build_types", "//packages/core/preboot/core-preboot-server-mocks:build_types", "//packages/core/preboot/core-preboot-server:build_types", + "//packages/core/test-helpers/core-test-helpers-http-setup-browser:build_types", "//packages/core/theme/core-theme-browser-internal:build_types", "//packages/core/theme/core-theme-browser-mocks:build_types", "//packages/core/theme/core-theme-browser:build_types", + "//packages/core/ui-settings/core-ui-settings-browser-internal:build_types", + "//packages/core/ui-settings/core-ui-settings-browser-mocks:build_types", + "//packages/core/ui-settings/core-ui-settings-browser:build_types", + "//packages/core/ui-settings/core-ui-settings-common:build_types", "//packages/elastic-apm-synthtrace:build_types", "//packages/elastic-safer-lodash-set:build_types", "//packages/home/sample_data_cards:build_types", diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel b/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel new file mode 100644 index 0000000000000..b802747956bda --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/BUILD.bazel @@ -0,0 +1,113 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-test-helpers-http-setup-browser" +PKG_REQUIRE_NAME = "@kbn/core-test-helpers-http-setup-browser" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "//packages/core/execution-context/core-execution-context-browser-mocks", + "//packages/core/fatal-errors/core-fatal-errors-browser-mocks", + "//packages/core/injected-metadata/core-injected-metadata-browser-mocks", + "//packages/core/http/core-http-browser-internal" +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "//packages/core/execution-context/core-execution-context-browser-mocks:npm_module_types", + "//packages/core/fatal-errors/core-fatal-errors-browser-mocks:npm_module_types", + "//packages/core/injected-metadata/core-injected-metadata-browser-mocks:npm_module_types", + "//packages/core/http/core-http-browser-internal:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/README.md b/packages/core/test-helpers/core-test-helpers-http-setup-browser/README.md new file mode 100644 index 0000000000000..f4e1825d67d05 --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/README.md @@ -0,0 +1,3 @@ +# @kbn/core-test-helpers-http-setup-browser + +This package contains Core's browser-side test helpers. diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/jest.config.js b/packages/core/test-helpers/core-test-helpers-http-setup-browser/jest.config.js new file mode 100644 index 0000000000000..06aa6045ec68b --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/test-helpers/core-test-helpers-http-setup-browser'], +}; diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json b/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json new file mode 100644 index 0000000000000..b6c321f96c8fc --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-test-helpers-http-setup-browser", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/src/core/test_helpers/http_test_setup.ts b/packages/core/test-helpers/core-test-helpers-http-setup-browser/src/http_test_setup.ts similarity index 100% rename from src/core/test_helpers/http_test_setup.ts rename to packages/core/test-helpers/core-test-helpers-http-setup-browser/src/http_test_setup.ts diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/src/index.ts b/packages/core/test-helpers/core-test-helpers-http-setup-browser/src/index.ts new file mode 100644 index 0000000000000..db5c37cc1ecac --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/src/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { SetupTap } from './http_test_setup'; +export { setup } from './http_test_setup'; diff --git a/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json b/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/test-helpers/core-test-helpers-http-setup-browser/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel new file mode 100644 index 0000000000000..79c90204e03c2 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/BUILD.bazel @@ -0,0 +1,113 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-ui-settings-browser-internal" +PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser-internal" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "@npm//rxjs", + "@npm//lodash", + "//packages/core/test-helpers/core-test-helpers-http-setup-browser" +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//rxjs", + "@npm//lodash", + "//packages/core/test-helpers/core-test-helpers-http-setup-browser:npm_module_types", + "//packages/core/http/core-http-browser:npm_module_types", + "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/README.md b/packages/core/ui-settings/core-ui-settings-browser-internal/README.md new file mode 100644 index 0000000000000..0ca0464803902 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/README.md @@ -0,0 +1,3 @@ +# @kbn/core-ui-settings-browser-internal + +This package contains the internal types and implementation for Core's browser-side uiSettings service. diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/jest.config.js b/packages/core/ui-settings/core-ui-settings-browser-internal/jest.config.js new file mode 100644 index 0000000000000..286747d11869e --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/ui-settings/core-ui-settings-browser-internal'], +}; diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/package.json b/packages/core/ui-settings/core-ui-settings-browser-internal/package.json new file mode 100644 index 0000000000000..a333808e2fe63 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-ui-settings-browser-internal", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/src/core/public/ui_settings/__snapshots__/ui_settings_api.test.ts.snap b/packages/core/ui-settings/core-ui-settings-browser-internal/src/__snapshots__/ui_settings_api.test.ts.snap similarity index 100% rename from src/core/public/ui_settings/__snapshots__/ui_settings_api.test.ts.snap rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/__snapshots__/ui_settings_api.test.ts.snap diff --git a/src/core/public/ui_settings/__snapshots__/ui_settings_client.test.ts.snap b/packages/core/ui-settings/core-ui-settings-browser-internal/src/__snapshots__/ui_settings_client.test.ts.snap similarity index 100% rename from src/core/public/ui_settings/__snapshots__/ui_settings_client.test.ts.snap rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/__snapshots__/ui_settings_client.test.ts.snap diff --git a/src/core/public/ui_settings/index.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/index.ts similarity index 87% rename from src/core/public/ui_settings/index.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/index.ts index 7c7bdae34a3c1..b57cef6053106 100644 --- a/src/core/public/ui_settings/index.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/src/index.ts @@ -8,4 +8,3 @@ export { UiSettingsService } from './ui_settings_service'; export type { UiSettingsClient } from './ui_settings_client'; -export type { UiSettingsState, IUiSettingsClient } from './types'; diff --git a/src/core/public/ui_settings/ui_settings_api.test.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.test.ts similarity index 98% rename from src/core/public/ui_settings/ui_settings_api.test.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.test.ts index d5f0f1175b9e5..c250b78d68ce5 100644 --- a/src/core/public/ui_settings/ui_settings_api.test.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.test.ts @@ -11,7 +11,7 @@ import fetchMock from 'fetch-mock/es5/client'; import * as Rx from 'rxjs'; import { takeUntil, toArray } from 'rxjs/operators'; -import { setup as httpSetup } from '../../test_helpers/http_test_setup'; +import { setup as httpSetup } from '@kbn/core-test-helpers-http-setup-browser'; import { UiSettingsApi } from './ui_settings_api'; function setup() { diff --git a/src/core/public/ui_settings/ui_settings_api.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.ts similarity index 98% rename from src/core/public/ui_settings/ui_settings_api.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.ts index 0428de810cca9..2686307357723 100644 --- a/src/core/public/ui_settings/ui_settings_api.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_api.ts @@ -9,7 +9,7 @@ import { BehaviorSubject } from 'rxjs'; import type { HttpSetup } from '@kbn/core-http-browser'; -import type { UiSettingsState } from './types'; +import type { UiSettingsState } from '@kbn/core-ui-settings-browser'; export interface UiSettingsApiResponse { settings: UiSettingsState; diff --git a/src/core/public/ui_settings/ui_settings_client.test.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_client.test.ts similarity index 100% rename from src/core/public/ui_settings/ui_settings_client.test.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_client.test.ts diff --git a/src/core/public/ui_settings/ui_settings_client.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_client.ts similarity index 96% rename from src/core/public/ui_settings/ui_settings_client.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_client.ts index 979f6be5ebe2c..d5b6b7f1513b2 100644 --- a/src/core/public/ui_settings/ui_settings_client.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_client.ts @@ -10,8 +10,8 @@ import { cloneDeep, defaultsDeep } from 'lodash'; import { Observable, Subject, concat, defer, of } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { UserProvidedValues, PublicUiSettingsParams } from '../../server/types'; -import { IUiSettingsClient, UiSettingsState } from './types'; +import { UserProvidedValues, PublicUiSettingsParams } from '@kbn/core-ui-settings-common'; +import { IUiSettingsClient, UiSettingsState } from '@kbn/core-ui-settings-browser'; import { UiSettingsApi } from './ui_settings_api'; diff --git a/src/core/public/ui_settings/ui_settings_service.test.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_service.test.ts similarity index 100% rename from src/core/public/ui_settings/ui_settings_service.test.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_service.test.ts diff --git a/src/core/public/ui_settings/ui_settings_service.ts b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_service.ts similarity index 96% rename from src/core/public/ui_settings/ui_settings_service.ts rename to packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_service.ts index 5117ac3247af8..3ff66d8216967 100644 --- a/src/core/public/ui_settings/ui_settings_service.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/src/ui_settings_service.ts @@ -11,9 +11,9 @@ import { Subject } from 'rxjs'; import type { InternalInjectedMetadataSetup } from '@kbn/core-injected-metadata-browser-internal'; import type { HttpSetup } from '@kbn/core-http-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { UiSettingsApi } from './ui_settings_api'; import { UiSettingsClient } from './ui_settings_client'; -import type { IUiSettingsClient } from './types'; export interface UiSettingsServiceDeps { http: HttpSetup; diff --git a/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-internal/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel new file mode 100644 index 0000000000000..c9c564ccc620a --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/BUILD.bazel @@ -0,0 +1,111 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-ui-settings-browser-mocks" +PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser-mocks" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "@npm//rxjs", + "//packages/core/ui-settings/core-ui-settings-browser-internal" +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//rxjs", + "//packages/kbn-utility-types:npm_module_types", + "//packages/core/ui-settings/core-ui-settings-browser-internal:npm_module_types", + "//packages/core/ui-settings/core-ui-settings-browser:npm_module_types", +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/README.md b/packages/core/ui-settings/core-ui-settings-browser-mocks/README.md new file mode 100644 index 0000000000000..15e17139c444f --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/README.md @@ -0,0 +1,3 @@ +# @kbn/core-ui-settings-browser-mocks + +This package contains the mocks for the browser-side uiSettings service. diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/jest.config.js b/packages/core/ui-settings/core-ui-settings-browser-mocks/jest.config.js new file mode 100644 index 0000000000000..a585eb84171ea --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/ui-settings/core-ui-settings-browser-mocks'], +}; diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json b/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json new file mode 100644 index 0000000000000..7d88d26720d3f --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-ui-settings-browser-mocks", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/src/index.ts b/packages/core/ui-settings/core-ui-settings-browser-mocks/src/index.ts new file mode 100644 index 0000000000000..1eaa0bff3a4c7 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/src/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { uiSettingsServiceMock } from './ui_settings_service.mock'; diff --git a/src/core/public/ui_settings/ui_settings_service.mock.ts b/packages/core/ui-settings/core-ui-settings-browser-mocks/src/ui_settings_service.mock.ts similarity index 91% rename from src/core/public/ui_settings/ui_settings_service.mock.ts rename to packages/core/ui-settings/core-ui-settings-browser-mocks/src/ui_settings_service.mock.ts index d0633c4fca1fc..834a86d03e049 100644 --- a/src/core/public/ui_settings/ui_settings_service.mock.ts +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/src/ui_settings_service.mock.ts @@ -8,8 +8,8 @@ import * as Rx from 'rxjs'; import type { PublicMethodsOf } from '@kbn/utility-types'; -import { UiSettingsService } from '.'; -import { IUiSettingsClient } from './types'; +import type { UiSettingsService } from '@kbn/core-ui-settings-browser-internal'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; const createSetupContractMock = () => { const setupContract: jest.Mocked = { diff --git a/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser-mocks/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel new file mode 100644 index 0000000000000..fb495d492646f --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/BUILD.bazel @@ -0,0 +1,108 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-ui-settings-browser" +PKG_REQUIRE_NAME = "@kbn/core-ui-settings-browser" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ + "@npm//rxjs", +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "@npm//rxjs", + "//packages/core/ui-settings/core-ui-settings-common:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/ui-settings/core-ui-settings-browser/README.md b/packages/core/ui-settings/core-ui-settings-browser/README.md new file mode 100644 index 0000000000000..7bc7eb409096b --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/README.md @@ -0,0 +1,3 @@ +# @kbn/core-ui-settings-browser + +This package contains the public types for the browser-side ui-settings service. diff --git a/packages/core/ui-settings/core-ui-settings-browser/jest.config.js b/packages/core/ui-settings/core-ui-settings-browser/jest.config.js new file mode 100644 index 0000000000000..7ab068830f85d --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/ui-settings/core-ui-settings-browser'], +}; diff --git a/packages/core/ui-settings/core-ui-settings-browser/package.json b/packages/core/ui-settings/core-ui-settings-browser/package.json new file mode 100644 index 0000000000000..e40aeeac64196 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-ui-settings-browser", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/core/ui-settings/core-ui-settings-browser/src/index.ts b/packages/core/ui-settings/core-ui-settings-browser/src/index.ts new file mode 100644 index 0000000000000..99150ded40035 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/src/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { UiSettingsState, IUiSettingsClient } from './types'; diff --git a/src/core/public/ui_settings/types.ts b/packages/core/ui-settings/core-ui-settings-browser/src/types.ts similarity index 96% rename from src/core/public/ui_settings/types.ts rename to packages/core/ui-settings/core-ui-settings-browser/src/types.ts index 243ac82ed14ab..4d23814c2b35d 100644 --- a/src/core/public/ui_settings/types.ts +++ b/packages/core/ui-settings/core-ui-settings-browser/src/types.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { Observable } from 'rxjs'; -import { PublicUiSettingsParams, UserProvidedValues } from '../../server/types'; +import type { Observable } from 'rxjs'; +import type { PublicUiSettingsParams, UserProvidedValues } from '@kbn/core-ui-settings-common'; /** @public */ export interface UiSettingsState { diff --git a/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json b/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json new file mode 100644 index 0000000000000..4c665fe2ba49a --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-browser/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node", + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel b/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel new file mode 100644 index 0000000000000..92ffc8188cae5 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/BUILD.bazel @@ -0,0 +1,107 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "jsts_transpiler", "pkg_npm", "pkg_npm_types", "ts_project") + +PKG_DIRNAME = "core-ui-settings-common" +PKG_REQUIRE_NAME = "@kbn/core-ui-settings-common" + +SOURCE_FILES = glob( + [ + "src/**/*.ts", + "src/**/*.tsx", + ], + exclude = [ + "**/*.test.*", + "**/*.stories.*", + ], +) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +RUNTIME_DEPS = [ +] + +TYPES_DEPS = [ + "@npm//@types/node", + "@npm//@types/jest", + "//packages/kbn-config-schema:npm_module_types", + "//packages/kbn-analytics:npm_module_types" +] + +jsts_transpiler( + name = "target_node", + srcs = SRCS, + build_pkg_name = package_name(), +) + +jsts_transpiler( + name = "target_web", + srcs = SRCS, + build_pkg_name = package_name(), + web = True, +) + +ts_config( + name = "tsconfig", + src = "tsconfig.json", + deps = [ + "//:tsconfig.base.json", + "//:tsconfig.bazel.json", + ], +) + +ts_project( + name = "tsc_types", + args = ['--pretty'], + srcs = SRCS, + deps = TYPES_DEPS, + declaration = True, + declaration_map = True, + emit_declaration_only = True, + out_dir = "target_types", + root_dir = "src", + tsconfig = ":tsconfig", +) + +js_library( + name = PKG_DIRNAME, + srcs = NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS + [":target_node", ":target_web"], + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +pkg_npm_types( + name = "npm_module_types", + srcs = SRCS, + deps = [":tsc_types"], + package_name = PKG_REQUIRE_NAME, + tsconfig = ":tsconfig", + visibility = ["//visibility:public"], +) + +filegroup( + name = "build_types", + srcs = [":npm_module_types"], + visibility = ["//visibility:public"], +) diff --git a/packages/core/ui-settings/core-ui-settings-common/README.md b/packages/core/ui-settings/core-ui-settings-common/README.md new file mode 100644 index 0000000000000..aa9cf61a0bc88 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/README.md @@ -0,0 +1,3 @@ +# @kbn/core-ui-settings-common + +This package contains the common types for Core's uiSettings service. diff --git a/packages/core/ui-settings/core-ui-settings-common/jest.config.js b/packages/core/ui-settings/core-ui-settings-common/jest.config.js new file mode 100644 index 0000000000000..1d7330c330d26 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/packages/core/ui-settings/core-ui-settings-common'], +}; diff --git a/packages/core/ui-settings/core-ui-settings-common/package.json b/packages/core/ui-settings/core-ui-settings-common/package.json new file mode 100644 index 0000000000000..1476582f96d07 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/core-ui-settings-common", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "browser": "./target_web/index.js", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/core/ui-settings/core-ui-settings-common/src/index.ts b/packages/core/ui-settings/core-ui-settings-common/src/index.ts new file mode 100644 index 0000000000000..da84668311cd2 --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/src/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export type { + UiSettingsType, + DeprecationSettings, + UiSettingsParams, + PublicUiSettingsParams, + UserProvidedValues, +} from './ui_settings'; diff --git a/src/core/types/ui_settings.ts b/packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts similarity index 96% rename from src/core/types/ui_settings.ts rename to packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts index 469f43327e498..ea1e5f92a7491 100644 --- a/src/core/types/ui_settings.ts +++ b/packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -import { Type } from '@kbn/config-schema'; -import { UiCounterMetricType } from '@kbn/analytics'; +import type { Type } from '@kbn/config-schema'; +import type { UiCounterMetricType } from '@kbn/analytics'; /** * UI element type to represent the settings. diff --git a/packages/core/ui-settings/core-ui-settings-common/tsconfig.json b/packages/core/ui-settings/core-ui-settings-common/tsconfig.json new file mode 100644 index 0000000000000..39d3c7097814a --- /dev/null +++ b/packages/core/ui-settings/core-ui-settings-common/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "rootDir": "src", + "stripInternal": false, + "types": [ + "jest", + "node" + ] + }, + "include": [ + "src/**/*" + ] +} diff --git a/src/core/public/chrome/chrome_service.test.ts b/src/core/public/chrome/chrome_service.test.ts index f5d276ef25172..737b561bed8e3 100644 --- a/src/core/public/chrome/chrome_service.test.ts +++ b/src/core/public/chrome/chrome_service.test.ts @@ -16,7 +16,7 @@ import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { App, PublicAppInfo } from '../application'; import { applicationServiceMock } from '../application/application_service.mock'; import { notificationServiceMock } from '../notifications/notifications_service.mock'; -import { uiSettingsServiceMock } from '../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { ChromeService } from './chrome_service'; import { getAppInfo } from '../application/utils'; diff --git a/src/core/public/core_app/core_app.ts b/src/core/public/core_app/core_app.ts index 82ae595f86477..d834ece6e76cf 100644 --- a/src/core/public/core_app/core_app.ts +++ b/src/core/public/core_app/core_app.ts @@ -11,6 +11,7 @@ import type { CoreContext } from '@kbn/core-base-browser-internal'; import type { InternalInjectedMetadataSetup } from '@kbn/core-injected-metadata-browser-internal'; import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import type { HttpSetup, HttpStart } from '@kbn/core-http-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { type InternalApplicationSetup, type InternalApplicationStart, @@ -18,7 +19,6 @@ import { type AppMountParameters, } from '../application'; import type { NotificationsSetup, NotificationsStart } from '../notifications'; -import type { IUiSettingsClient } from '../ui_settings'; import { renderApp as renderErrorApp, setupPublicBaseUrlConfigWarning, diff --git a/src/core/public/core_app/errors/url_overflow.test.ts b/src/core/public/core_app/errors/url_overflow.test.ts index 0e166e5d5e7ee..e68b80931d2ec 100644 --- a/src/core/public/core_app/errors/url_overflow.test.ts +++ b/src/core/public/core_app/errors/url_overflow.test.ts @@ -11,9 +11,9 @@ import type { IBasePath } from '@kbn/core-http-browser'; import { BasePath } from '@kbn/core-http-browser-internal'; import { notificationServiceMock } from '../../notifications/notifications_service.mock'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import type { IToasts } from '../../notifications'; -import type { IUiSettingsClient } from '../../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { setupUrlOverflowDetection, URL_MAX_LENGTH, URL_WARNING_LENGTH } from './url_overflow'; diff --git a/src/core/public/core_app/errors/url_overflow.tsx b/src/core/public/core_app/errors/url_overflow.tsx index f2a525a9c2e68..4925cf18c0f77 100644 --- a/src/core/public/core_app/errors/url_overflow.tsx +++ b/src/core/public/core_app/errors/url_overflow.tsx @@ -13,9 +13,9 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { IBasePath } from '@kbn/core-http-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { mountReactNode } from '../../utils'; import { IToasts } from '../../notifications'; -import { IUiSettingsClient } from '../../ui_settings'; const IE_REGEX = /(; ?MSIE |Edge\/\d|Trident\/[\d+\.]+;.*rv:*11\.\d+)/; export const IS_IE = IE_REGEX.test(window.navigator.userAgent); diff --git a/src/core/public/core_system.test.mocks.ts b/src/core/public/core_system.test.mocks.ts index 0d46af80b34eb..baf4c28401c06 100644 --- a/src/core/public/core_system.test.mocks.ts +++ b/src/core/public/core_system.test.mocks.ts @@ -18,7 +18,7 @@ import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { notificationServiceMock } from './notifications/notifications_service.mock'; import { overlayServiceMock } from './overlays/overlay_service.mock'; import { pluginsServiceMock } from './plugins/plugins_service.mock'; -import { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { renderingServiceMock } from './rendering/rendering_service.mock'; import { integrationsServiceMock } from './integrations/integrations_service.mock'; import { coreAppMock } from './core_app/core_app.mock'; @@ -76,7 +76,7 @@ export const MockUiSettingsService = uiSettingsServiceMock.create(); export const UiSettingsServiceConstructor = jest .fn() .mockImplementation(() => MockUiSettingsService); -jest.doMock('./ui_settings', () => ({ +jest.doMock('@kbn/core-ui-settings-browser-internal', () => ({ UiSettingsService: UiSettingsServiceConstructor, })); diff --git a/src/core/public/core_system.ts b/src/core/public/core_system.ts index 834927ae7f541..710d7b90c4c30 100644 --- a/src/core/public/core_system.ts +++ b/src/core/public/core_system.ts @@ -23,13 +23,13 @@ import { ExecutionContextService } from '@kbn/core-execution-context-browser-int import type { FatalErrorsSetup } from '@kbn/core-fatal-errors-browser'; import { FatalErrorsService } from '@kbn/core-fatal-errors-browser-internal'; import { HttpService } from '@kbn/core-http-browser-internal'; +import { UiSettingsService } from '@kbn/core-ui-settings-browser-internal'; import { DeprecationsService } from '@kbn/core-deprecations-browser-internal'; import { CoreSetup, CoreStart } from '.'; import { ChromeService } from './chrome'; import { NotificationsService } from './notifications'; import { OverlayService } from './overlays'; import { PluginsService } from './plugins'; -import { UiSettingsService } from './ui_settings'; import { ApplicationService } from './application'; import { RenderingService } from './rendering'; import { SavedObjectsService } from './saved_objects'; diff --git a/src/core/public/index.ts b/src/core/public/index.ts index b3ffc84a51f58..ccde84105ea89 100644 --- a/src/core/public/index.ts +++ b/src/core/public/index.ts @@ -42,6 +42,7 @@ import type { FatalErrorsStart, FatalErrorInfo, } from '@kbn/core-fatal-errors-browser'; +import type { UiSettingsState, IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { DeprecationsServiceStart } from '@kbn/core-deprecations-browser'; import type { ChromeBadge, @@ -73,7 +74,6 @@ import type { PluginInitializerContext, PluginOpaqueId, } from './plugins'; -import type { UiSettingsState, IUiSettingsClient } from './ui_settings'; import type { ApplicationSetup, Capabilities, ApplicationStart } from './application'; import type { SavedObjectsStart } from './saved_objects'; @@ -82,7 +82,12 @@ export type { DomainDeprecationDetails } from '@kbn/core-deprecations-common'; export type { CoreContext } from '@kbn/core-base-browser-internal'; export type { CoreSystem } from './core_system'; export { DEFAULT_APP_CATEGORIES, APP_WRAPPER_CLASS } from '../utils'; -export type { AppCategory, UiSettingsParams, UserProvidedValues, UiSettingsType } from '../types'; +export type { AppCategory } from '../types'; +export type { + UiSettingsParams, + UserProvidedValues, + UiSettingsType, +} from '@kbn/core-ui-settings-common'; export type { AnalyticsServiceSetup, AnalyticsServiceStart } from '@kbn/core-analytics-browser'; export type { diff --git a/src/core/public/integrations/integrations_service.test.ts b/src/core/public/integrations/integrations_service.test.ts index 9543012833feb..a98e5bf1d7bc2 100644 --- a/src/core/public/integrations/integrations_service.test.ts +++ b/src/core/public/integrations/integrations_service.test.ts @@ -9,7 +9,7 @@ import { styleServiceMock, momentServiceMock } from './integrations_service.test.mocks'; import { IntegrationsService } from './integrations_service'; -import { uiSettingsServiceMock } from '../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; describe('IntegrationsService', () => { test('it wires up styles and moment', async () => { diff --git a/src/core/public/integrations/integrations_service.ts b/src/core/public/integrations/integrations_service.ts index e03546998ba7e..ca01e1b86ce7e 100644 --- a/src/core/public/integrations/integrations_service.ts +++ b/src/core/public/integrations/integrations_service.ts @@ -7,7 +7,7 @@ */ import type { CoreService } from '@kbn/core-base-browser-internal'; -import { IUiSettingsClient } from '../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { MomentService } from './moment'; import { StylesService } from './styles'; diff --git a/src/core/public/integrations/moment/moment_service.test.ts b/src/core/public/integrations/moment/moment_service.test.ts index 4e7c345e7e05d..d3c4d44f100e8 100644 --- a/src/core/public/integrations/moment/moment_service.test.ts +++ b/src/core/public/integrations/moment/moment_service.test.ts @@ -8,7 +8,7 @@ import { momentMock } from './moment_service.test.mocks'; import { MomentService } from './moment_service'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { BehaviorSubject } from 'rxjs'; describe('MomentService', () => { diff --git a/src/core/public/integrations/moment/moment_service.ts b/src/core/public/integrations/moment/moment_service.ts index 0f58c8d7fb19f..633223864f202 100644 --- a/src/core/public/integrations/moment/moment_service.ts +++ b/src/core/public/integrations/moment/moment_service.ts @@ -11,7 +11,7 @@ import { merge, Subscription } from 'rxjs'; import { tap } from 'rxjs/operators'; import type { CoreService } from '@kbn/core-base-browser-internal'; -import { IUiSettingsClient } from '../../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; interface StartDeps { uiSettings: IUiSettingsClient; diff --git a/src/core/public/integrations/styles/styles_service.test.ts b/src/core/public/integrations/styles/styles_service.test.ts index 5fae4b976c59e..20625dcbc3b94 100644 --- a/src/core/public/integrations/styles/styles_service.test.ts +++ b/src/core/public/integrations/styles/styles_service.test.ts @@ -11,7 +11,7 @@ import { BehaviorSubject } from 'rxjs'; jest.mock('!!raw-loader!./disable_animations.css', () => 'MOCK DISABLE ANIMATIONS CSS'); import { StylesService } from './styles_service'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; describe('StylesService', () => { const flushPromises = () => new Promise((resolve) => setTimeout(resolve, 100)); diff --git a/src/core/public/integrations/styles/styles_service.ts b/src/core/public/integrations/styles/styles_service.ts index 3e8f02739a8d0..9bbed46ff12f5 100644 --- a/src/core/public/integrations/styles/styles_service.ts +++ b/src/core/public/integrations/styles/styles_service.ts @@ -9,7 +9,7 @@ import { Subscription } from 'rxjs'; import type { CoreService } from '@kbn/core-base-browser-internal'; -import { IUiSettingsClient } from '../../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; // @ts-expect-error import disableAnimationsCss from '!!raw-loader!./disable_animations.css'; diff --git a/src/core/public/mocks.ts b/src/core/public/mocks.ts index 97f3af9f33cca..73e4a5a80fbde 100644 --- a/src/core/public/mocks.ts +++ b/src/core/public/mocks.ts @@ -17,6 +17,7 @@ import { executionContextServiceMock } from '@kbn/core-execution-context-browser import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { fatalErrorsServiceMock } from '@kbn/core-fatal-errors-browser-mocks'; import { httpServiceMock } from '@kbn/core-http-browser-mocks'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { deprecationsServiceMock } from '@kbn/core-deprecations-browser-mocks'; import type { PluginInitializerContext, AppMountParameters } from '.'; // Import values from their individual modules instead. @@ -25,7 +26,6 @@ import { applicationServiceMock } from './application/application_service.mock'; import { chromeServiceMock } from './chrome/chrome_service.mock'; import { notificationServiceMock } from './notifications/notifications_service.mock'; import { overlayServiceMock } from './overlays/overlay_service.mock'; -import { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; import { savedObjectsServiceMock } from './saved_objects/saved_objects_service.mock'; export { injectedMetadataServiceMock } from '@kbn/core-injected-metadata-browser-mocks'; @@ -39,7 +39,7 @@ export { httpServiceMock } from '@kbn/core-http-browser-mocks'; export { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; export { notificationServiceMock } from './notifications/notifications_service.mock'; export { overlayServiceMock } from './overlays/overlay_service.mock'; -export { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; +export { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; export { savedObjectsServiceMock } from './saved_objects/saved_objects_service.mock'; export { scopedHistoryMock } from './application/scoped_history.mock'; export { applicationServiceMock } from './application/application_service.mock'; diff --git a/src/core/public/notifications/notifications_service.ts b/src/core/public/notifications/notifications_service.ts index 859e21de5ffed..6a5a5f81f1a40 100644 --- a/src/core/public/notifications/notifications_service.ts +++ b/src/core/public/notifications/notifications_service.ts @@ -11,8 +11,8 @@ import { i18n } from '@kbn/i18n'; import { Subscription } from 'rxjs'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { ToastsService, ToastsSetup, ToastsStart } from './toasts'; -import { IUiSettingsClient } from '../ui_settings'; import { OverlayStart } from '../overlays'; export interface SetupDeps { diff --git a/src/core/public/notifications/toasts/toasts_api.test.ts b/src/core/public/notifications/toasts/toasts_api.test.ts index d6b67bdb63f7a..ec07f32d2f1c9 100644 --- a/src/core/public/notifications/toasts/toasts_api.test.ts +++ b/src/core/public/notifications/toasts/toasts_api.test.ts @@ -10,7 +10,7 @@ import { firstValueFrom } from 'rxjs'; import { ToastsApi } from './toasts_api'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; async function getCurrentToasts(toasts: ToastsApi) { diff --git a/src/core/public/notifications/toasts/toasts_api.tsx b/src/core/public/notifications/toasts/toasts_api.tsx index ecf32d442931c..f78927c7f7579 100644 --- a/src/core/public/notifications/toasts/toasts_api.tsx +++ b/src/core/public/notifications/toasts/toasts_api.tsx @@ -12,10 +12,10 @@ import * as Rx from 'rxjs'; import { omitBy, isUndefined } from 'lodash'; import type { I18nStart } from '@kbn/core-i18n-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { ErrorToast } from './error_toast'; import { MountPoint } from '../../types'; import { mountReactNode } from '../../utils'; -import { IUiSettingsClient } from '../../ui_settings'; import { OverlayStart } from '../../overlays'; /** diff --git a/src/core/public/notifications/toasts/toasts_service.test.tsx b/src/core/public/notifications/toasts/toasts_service.test.tsx index d2694d076e8c0..a6854f679d086 100644 --- a/src/core/public/notifications/toasts/toasts_service.test.tsx +++ b/src/core/public/notifications/toasts/toasts_service.test.tsx @@ -12,7 +12,7 @@ import { ToastsService } from './toasts_service'; import { ToastsApi } from './toasts_api'; import { overlayServiceMock } from '../../overlays/overlay_service.mock'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; const mockI18n: any = { Context: function I18nContext() { diff --git a/src/core/public/notifications/toasts/toasts_service.tsx b/src/core/public/notifications/toasts/toasts_service.tsx index 63edd56085797..692e6ec9dd504 100644 --- a/src/core/public/notifications/toasts/toasts_service.tsx +++ b/src/core/public/notifications/toasts/toasts_service.tsx @@ -12,7 +12,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import { CoreContextProvider } from '@kbn/core-theme-browser-internal'; -import { IUiSettingsClient } from '../../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { GlobalToastList } from './global_toast_list'; import { ToastsApi, IToasts } from './toasts_api'; import { OverlayStart } from '../../overlays'; diff --git a/src/core/public/overlays/banners/banners_service.test.ts b/src/core/public/overlays/banners/banners_service.test.ts index d3093879f8715..69f30d99b9826 100644 --- a/src/core/public/overlays/banners/banners_service.test.ts +++ b/src/core/public/overlays/banners/banners_service.test.ts @@ -9,7 +9,7 @@ import { OverlayBannersService, OverlayBannersStart } from './banners_service'; import { take } from 'rxjs/operators'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; describe('OverlayBannersService', () => { let service: OverlayBannersStart; diff --git a/src/core/public/overlays/banners/banners_service.tsx b/src/core/public/overlays/banners/banners_service.tsx index a5436d21ef45e..11bc995c059f8 100644 --- a/src/core/public/overlays/banners/banners_service.tsx +++ b/src/core/public/overlays/banners/banners_service.tsx @@ -11,9 +11,9 @@ import { BehaviorSubject, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import type { I18nStart } from '@kbn/core-i18n-browser'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { PriorityMap } from './priority_map'; import { BannersList } from './banners_list'; -import { IUiSettingsClient } from '../../ui_settings'; import { MountPoint } from '../../types'; import { UserBannerService } from './user_banner_service'; diff --git a/src/core/public/overlays/banners/user_banner_service.test.ts b/src/core/public/overlays/banners/user_banner_service.test.ts index 52d6d00171261..e0a46cbb7fd6a 100644 --- a/src/core/public/overlays/banners/user_banner_service.test.ts +++ b/src/core/public/overlays/banners/user_banner_service.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { uiSettingsServiceMock } from '../../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { UserBannerService } from './user_banner_service'; import { overlayBannersServiceMock } from './banners_service.mock'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; diff --git a/src/core/public/overlays/banners/user_banner_service.tsx b/src/core/public/overlays/banners/user_banner_service.tsx index 175d43ea8ba59..7d3c9eab9b17f 100644 --- a/src/core/public/overlays/banners/user_banner_service.tsx +++ b/src/core/public/overlays/banners/user_banner_service.tsx @@ -15,7 +15,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiCallOut, EuiButton, EuiLoadingSpinner } from '@elastic/eui'; import type { I18nStart } from '@kbn/core-i18n-browser'; -import { IUiSettingsClient } from '../../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { OverlayBannersStart } from './banners_service'; interface StartDeps { diff --git a/src/core/public/overlays/overlay_service.ts b/src/core/public/overlays/overlay_service.ts index 35e839b0e175b..07a8cbea29a37 100644 --- a/src/core/public/overlays/overlay_service.ts +++ b/src/core/public/overlays/overlay_service.ts @@ -8,7 +8,7 @@ import type { ThemeServiceStart } from '@kbn/core-theme-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; -import { IUiSettingsClient } from '../ui_settings'; +import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { OverlayBannersStart, OverlayBannersService } from './banners'; import { FlyoutService, OverlayFlyoutStart } from './flyout'; import { ModalService, OverlayModalStart } from './modal'; diff --git a/src/core/public/plugins/plugins_service.test.ts b/src/core/public/plugins/plugins_service.test.ts index d6b7810f44cd6..dbc3fd253a1c1 100644 --- a/src/core/public/plugins/plugins_service.test.ts +++ b/src/core/public/plugins/plugins_service.test.ts @@ -34,7 +34,7 @@ import { applicationServiceMock } from '../application/application_service.mock' import { overlayServiceMock } from '../overlays/overlay_service.mock'; import { chromeServiceMock } from '../chrome/chrome_service.mock'; import { fatalErrorsServiceMock } from '@kbn/core-fatal-errors-browser-mocks'; -import { uiSettingsServiceMock } from '../ui_settings/ui_settings_service.mock'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import type { CoreSetup, CoreStart, PluginInitializerContext } from '..'; import { savedObjectsServiceMock } from '../saved_objects/saved_objects_service.mock'; diff --git a/src/core/public/types.ts b/src/core/public/types.ts index 5b594373e3523..8df8b2c10f179 100644 --- a/src/core/public/types.ts +++ b/src/core/public/types.ts @@ -11,7 +11,7 @@ export type { PublicUiSettingsParams, UserProvidedValues, UiSettingsType, -} from '../types'; +} from '@kbn/core-ui-settings-common'; /** * A function that should mount DOM content inside the provided container element diff --git a/src/core/server/ui_settings/types.ts b/src/core/server/ui_settings/types.ts index c442e37c4b022..a7405e8b75731 100644 --- a/src/core/server/ui_settings/types.ts +++ b/src/core/server/ui_settings/types.ts @@ -5,16 +5,20 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import { + UiSettingsParams, + UserProvidedValues, + PublicUiSettingsParams, +} from '@kbn/core-ui-settings-common'; import { SavedObjectsClientContract } from '../saved_objects/types'; -import { UiSettingsParams, UserProvidedValues, PublicUiSettingsParams } from '../../types'; export type { UiSettingsParams, - PublicUiSettingsParams, DeprecationSettings, + PublicUiSettingsParams, UiSettingsType, UserProvidedValues, -} from '../../types'; +} from '@kbn/core-ui-settings-common'; /** * Server-side client that provides access to the advanced settings stored in elasticsearch. diff --git a/src/core/types/index.ts b/src/core/types/index.ts index 7b9df84770365..005e5fb611cfb 100644 --- a/src/core/types/index.ts +++ b/src/core/types/index.ts @@ -12,6 +12,12 @@ */ export * from './capabilities'; export * from './app_category'; -export * from './ui_settings'; export * from './saved_objects'; export type { KibanaExecutionContext } from '@kbn/core-execution-context-common'; +export type { + UiSettingsType, + DeprecationSettings, + UiSettingsParams, + PublicUiSettingsParams, + UserProvidedValues, +} from '@kbn/core-ui-settings-common'; diff --git a/src/plugins/data_views/public/data_views/data_views_api_client.test.mock.ts b/src/plugins/data_views/public/data_views/data_views_api_client.test.mock.ts index 5880bd9fd36fa..fd12291a2bc16 100644 --- a/src/plugins/data_views/public/data_views/data_views_api_client.test.mock.ts +++ b/src/plugins/data_views/public/data_views/data_views_api_client.test.mock.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { setup } from '@kbn/core/test_helpers/http_test_setup'; +import { setup } from '@kbn/core-test-helpers-http-setup-browser'; export const { http } = setup((injectedMetadata) => { injectedMetadata.getBasePath.mockReturnValue('/hola/daro/'); diff --git a/x-pack/plugins/security/public/session/unauthorized_response_http_interceptor.test.ts b/x-pack/plugins/security/public/session/unauthorized_response_http_interceptor.test.ts index d82a041a4fe28..b77ceb6bf1882 100644 --- a/x-pack/plugins/security/public/session/unauthorized_response_http_interceptor.test.ts +++ b/x-pack/plugins/security/public/session/unauthorized_response_http_interceptor.test.ts @@ -8,8 +8,8 @@ // @ts-ignore import fetchMock from 'fetch-mock/es5/client'; +import { setup } from '@kbn/core-test-helpers-http-setup-browser'; import { applicationServiceMock } from '@kbn/core/public/mocks'; -import { setup } from '@kbn/core/test_helpers/http_test_setup'; import { SessionExpired } from './session_expired'; import { UnauthorizedResponseHttpInterceptor } from './unauthorized_response_http_interceptor'; diff --git a/yarn.lock b/yarn.lock index 20a306f722661..f8f09a1dab087 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3319,6 +3319,10 @@ version "0.0.0" uid "" +"@kbn/core-test-helpers-http-setup-browser@link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser": + version "0.0.0" + uid "" + "@kbn/core-theme-browser-internal@link:bazel-bin/packages/core/theme/core-theme-browser-internal": version "0.0.0" uid "" @@ -3331,6 +3335,22 @@ version "0.0.0" uid "" +"@kbn/core-ui-settings-browser-internal@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal": + version "0.0.0" + uid "" + +"@kbn/core-ui-settings-browser-mocks@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks": + version "0.0.0" + uid "" + +"@kbn/core-ui-settings-browser@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser": + version "0.0.0" + uid "" + +"@kbn/core-ui-settings-common@link:bazel-bin/packages/core/ui-settings/core-ui-settings-common": + version "0.0.0" + uid "" + "@kbn/crypto-browser@link:bazel-bin/packages/kbn-crypto-browser": version "0.0.0" uid "" @@ -6978,6 +6998,10 @@ version "0.0.0" uid "" +"@types/kbn__core-test-helpers-http-setup-browser@link:bazel-bin/packages/core/test-helpers/core-test-helpers-http-setup-browser/npm_module_types": + version "0.0.0" + uid "" + "@types/kbn__core-theme-browser-internal@link:bazel-bin/packages/core/theme/core-theme-browser-internal/npm_module_types": version "0.0.0" uid "" @@ -6990,6 +7014,22 @@ version "0.0.0" uid "" +"@types/kbn__core-ui-settings-browser-internal@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-internal/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-ui-settings-browser-mocks@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser-mocks/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-ui-settings-browser@link:bazel-bin/packages/core/ui-settings/core-ui-settings-browser/npm_module_types": + version "0.0.0" + uid "" + +"@types/kbn__core-ui-settings-common@link:bazel-bin/packages/core/ui-settings/core-ui-settings-common/npm_module_types": + version "0.0.0" + uid "" + "@types/kbn__crypto-browser@link:bazel-bin/packages/kbn-crypto-browser/npm_module_types": version "0.0.0" uid "" From 4e043fb9034800d88574c8d4e42e2fba4cf0f204 Mon Sep 17 00:00:00 2001 From: Rashmi Kulkarni Date: Thu, 14 Jul 2022 10:03:32 -0700 Subject: [PATCH 63/96] trying to unskip a flaky test (#136353) --- x-pack/test/accessibility/apps/tags.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/x-pack/test/accessibility/apps/tags.ts b/x-pack/test/accessibility/apps/tags.ts index dd992b191e436..2d0e9278e7e7d 100644 --- a/x-pack/test/accessibility/apps/tags.ts +++ b/x-pack/test/accessibility/apps/tags.ts @@ -15,10 +15,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const toasts = getService('toasts'); + const kibanaServer = getService('kibanaServer'); - // FLAKY: https://github.com/elastic/kibana/issues/136033 - describe.skip('Kibana Tags Page Accessibility', () => { + describe('Kibana Tags Page Accessibility', () => { before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, }); @@ -34,6 +35,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.home.removeSampleDataSet('flights'); + await kibanaServer.savedObjects.cleanStandardList(); }); it('tags main page meets a11y validations', async () => { @@ -72,8 +74,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await a11y.testAppSnapshot(); }); - // https://github.com/elastic/kibana/issues/135985 inconsistent test failure - it.skip('tag assignment panel meets a11y requirements', async () => { + it('tag assignment panel meets a11y requirements', async () => { await testSubjects.click('euiCollapsedItemActionsButton'); const actionOnTag = 'assign'; await PageObjects.tagManagement.clickActionItem(actionOnTag); @@ -81,14 +82,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('tag management page with connections column populated meets a11y requirements', async () => { - await testSubjects.click('euiCollapsedItemActionsButton'); - const actionOnTag = 'assign'; - await PageObjects.tagManagement.clickActionItem(actionOnTag); await testSubjects.click('assignFlyout-selectAllButton'); - await testSubjects.click('assignFlyoutConfirmButton'); await toasts.dismissAllToasts(); - await retry.try(async () => { await a11y.testAppSnapshot(); }); From a91aeb42ffef8d34f1fa0c8af81877e9dfa7f66a Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 14 Jul 2022 12:03:49 -0500 Subject: [PATCH 64/96] Remove percy based visual regression tests (#136359) * Remove percy based visual regression tests These have been disabled for ~3 years, the agent is deprecated, and our snapshot environment is inactive. * [CI] Auto-commit changed files from 'yarn kbn run build -i @kbn/pm' * update codeowners Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/ftr_configs.yml | 2 - .eslintrc.js | 1 - .github/CODEOWNERS | 1 - package.json | 1 - packages/kbn-pm/dist/index.js | 88 ++-- test/visual_regression/config.ts | 30 -- .../visual_regression/ftr_provider_context.ts | 15 - test/visual_regression/services/index.ts | 15 - .../services/visual_testing/index.ts | 9 - .../visual_testing/take_percy_snapshot.js | 102 ----- .../services/visual_testing/visual_testing.ts | 114 ----- test/visual_regression/tests/console_app.ts | 71 --- .../tests/discover/chart_visualization.ts | 117 ----- .../visual_regression/tests/discover/index.ts | 25 -- test/visual_regression/tests/vega/index.ts | 25 -- .../tests/vega/vega_map_visualization.ts | 39 -- x-pack/test/visual_regression/config.ts | 31 -- .../ftr_provider_context.d.ts | 13 - x-pack/test/visual_regression/page_objects.ts | 10 - x-pack/test/visual_regression/services.ts | 14 - .../tests/canvas/fullscreen.js | 25 -- .../visual_regression/tests/canvas/index.js | 30 -- .../visual_regression/tests/infra/index.js | 19 - .../tests/infra/saved_views.js | 87 ---- .../tests/infra/waffle_map.js | 27 -- .../visual_regression/tests/login_page.ts | 58 --- .../visual_regression/tests/maps/index.js | 61 --- .../tests/maps/vector_styling.js | 49 --- yarn.lock | 415 +----------------- 29 files changed, 66 insertions(+), 1428 deletions(-) delete mode 100644 test/visual_regression/config.ts delete mode 100644 test/visual_regression/ftr_provider_context.ts delete mode 100644 test/visual_regression/services/index.ts delete mode 100644 test/visual_regression/services/visual_testing/index.ts delete mode 100644 test/visual_regression/services/visual_testing/take_percy_snapshot.js delete mode 100644 test/visual_regression/services/visual_testing/visual_testing.ts delete mode 100644 test/visual_regression/tests/console_app.ts delete mode 100644 test/visual_regression/tests/discover/chart_visualization.ts delete mode 100644 test/visual_regression/tests/discover/index.ts delete mode 100644 test/visual_regression/tests/vega/index.ts delete mode 100644 test/visual_regression/tests/vega/vega_map_visualization.ts delete mode 100644 x-pack/test/visual_regression/config.ts delete mode 100644 x-pack/test/visual_regression/ftr_provider_context.d.ts delete mode 100644 x-pack/test/visual_regression/page_objects.ts delete mode 100644 x-pack/test/visual_regression/services.ts delete mode 100644 x-pack/test/visual_regression/tests/canvas/fullscreen.js delete mode 100644 x-pack/test/visual_regression/tests/canvas/index.js delete mode 100644 x-pack/test/visual_regression/tests/infra/index.js delete mode 100644 x-pack/test/visual_regression/tests/infra/saved_views.js delete mode 100644 x-pack/test/visual_regression/tests/infra/waffle_map.js delete mode 100644 x-pack/test/visual_regression/tests/login_page.ts delete mode 100644 x-pack/test/visual_regression/tests/maps/index.js delete mode 100644 x-pack/test/visual_regression/tests/maps/vector_styling.js diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 39a8b8b9f0a66..ef21725869c3e 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -44,8 +44,6 @@ disabled: - x-pack/plugins/observability/e2e/synthetics_run.ts # Configs that exist but weren't running in CI when this file was introduced - - test/visual_regression/config.ts - - x-pack/test/visual_regression/config.ts - x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts - x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/telemetry/config.ts - x-pack/test/alerting_api_integration/spaces_only_legacy/config.ts diff --git a/.eslintrc.js b/.eslintrc.js index 385d241e52fff..9ed08807b8e23 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -702,7 +702,6 @@ module.exports = { 'test/*/config_open.ts', 'test/*/*.config.ts', 'test/*/{tests,test_suites,apis,apps}/**/*', - 'test/visual_regression/tests/**/*', 'x-pack/test/*/{tests,test_suites,apis,apps}/**/*', 'x-pack/test/*/*config.*ts', 'x-pack/test/saved_object_api_integration/*/apis/**/*', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 670fc3a7a4cac..8b0af587e0032 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -210,7 +210,6 @@ /x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis /x-pack/test/functional/apps/maps/ @elastic/kibana-gis /x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis -/x-pack/test/visual_regression/tests/maps/index.js @elastic/kibana-gis /x-pack/plugins/stack_alerts/server/alert_types/geo_containment @elastic/kibana-gis /x-pack/plugins/stack_alerts/public/alert_types/geo_containment @elastic/kibana-gis #CC# /x-pack/plugins/file_upload @elastic/kibana-gis diff --git a/package.json b/package.json index 9294089cb355a..42da0114078f0 100644 --- a/package.json +++ b/package.json @@ -616,7 +616,6 @@ "@mapbox/vector-tile": "1.3.1", "@octokit/rest": "^16.35.0", "@openpgp/web-stream-tools": "^0.0.10", - "@percy/agent": "^0.28.6", "@storybook/addon-a11y": "^6.4.22", "@storybook/addon-actions": "^6.4.22", "@storybook/addon-controls": "^6.4.22", diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index 647e8a8d4bbbe..e9e0fd88618fe 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -23844,7 +23844,7 @@ module.exports.sync = (patterns, {force, dryRun, cwd = process.cwd(), ...options "use strict"; -const indentString = __webpack_require__("../../node_modules/del/node_modules/indent-string/index.js"); +const indentString = __webpack_require__("../../node_modules/indent-string/index.js"); const cleanStack = __webpack_require__("../../node_modules/clean-stack/index.js"); const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); @@ -24257,49 +24257,6 @@ module.exports = { }; -/***/ }), - -/***/ "../../node_modules/del/node_modules/indent-string/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = (string, count = 1, options) => { - options = { - indent: ' ', - includeEmptyLines: false, - ...options - }; - - if (typeof string !== 'string') { - throw new TypeError( - `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` - ); - } - - if (typeof count !== 'number') { - throw new TypeError( - `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` - ); - } - - if (typeof options.indent !== 'string') { - throw new TypeError( - `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` - ); - } - - if (count === 0) { - return string; - } - - const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; - - return string.replace(regex, options.indent.repeat(count)); -}; - - /***/ }), /***/ "../../node_modules/del/node_modules/p-map/index.js": @@ -34349,6 +34306,49 @@ if ( }()); +/***/ }), + +/***/ "../../node_modules/indent-string/index.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = (string, count = 1, options) => { + options = { + indent: ' ', + includeEmptyLines: false, + ...options + }; + + if (typeof string !== 'string') { + throw new TypeError( + `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` + ); + } + + if (typeof count !== 'number') { + throw new TypeError( + `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` + ); + } + + if (typeof options.indent !== 'string') { + throw new TypeError( + `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` + ); + } + + if (count === 0) { + return string; + } + + const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + + return string.replace(regex, options.indent.repeat(count)); +}; + + /***/ }), /***/ "../../node_modules/inflight/inflight.js": diff --git a/test/visual_regression/config.ts b/test/visual_regression/config.ts deleted file mode 100644 index 294848246e7c8..0000000000000 --- a/test/visual_regression/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrConfigProviderContext } from '@kbn/test'; -import { services } from './services'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); - - return { - ...functionalConfig.getAll(), - - testFiles: [ - require.resolve('./tests/console_app'), - require.resolve('./tests/discover'), - require.resolve('./tests/vega'), - ], - - services, - - junit: { - reportName: 'Kibana Visual Regression Tests', - }, - }; -} diff --git a/test/visual_regression/ftr_provider_context.ts b/test/visual_regression/ftr_provider_context.ts deleted file mode 100644 index 28bedd1ca6bc3..0000000000000 --- a/test/visual_regression/ftr_provider_context.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { GenericFtrProviderContext, GenericFtrService } from '@kbn/test'; - -import { pageObjects } from '../functional/page_objects'; -import { services } from './services'; - -export type FtrProviderContext = GenericFtrProviderContext; -export class FtrService extends GenericFtrService {} diff --git a/test/visual_regression/services/index.ts b/test/visual_regression/services/index.ts deleted file mode 100644 index 9aefe1f8de780..0000000000000 --- a/test/visual_regression/services/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { services as functionalServices } from '../../functional/services'; -import { VisualTestingService } from './visual_testing'; - -export const services = { - ...functionalServices, - visualTesting: VisualTestingService, -}; diff --git a/test/visual_regression/services/visual_testing/index.ts b/test/visual_regression/services/visual_testing/index.ts deleted file mode 100644 index 156e3814d8a1d..0000000000000 --- a/test/visual_regression/services/visual_testing/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export * from './visual_testing'; diff --git a/test/visual_regression/services/visual_testing/take_percy_snapshot.js b/test/visual_regression/services/visual_testing/take_percy_snapshot.js deleted file mode 100644 index 5325765c8d06b..0000000000000 --- a/test/visual_regression/services/visual_testing/take_percy_snapshot.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { readFileSync } from 'fs'; -import { agentJsFilename } from '@percy/agent/dist/utils/sdk-utils'; - -export function takePercySnapshot(show, hide) { - if (!window.PercyAgent) { - return false; - } - - // add percy styles to hide/show specific elements - const styleElement = document.createElement('style'); - styleElement.appendChild( - document.createTextNode(` - .hideInPercy { - visibility: hidden; - - .showInPercy { - visibility: visible; - } - } - - .showInPercy { - visibility: visible; - - .hideInPercy { - visibility: hidden; - } - } - `) - ); - document.head.appendChild(styleElement); - - const add = (selectors, className) => { - for (const selector of selectors) { - for (const element of document.querySelectorAll(selector)) { - element.classList.add(className); - } - } - }; - - const remove = (selectors, className) => { - for (const selector of selectors) { - for (const element of document.querySelectorAll(selector)) { - element.classList.remove(className); - } - } - }; - - // set Percy visibility on elements - add(hide, 'hideInPercy'); - if (show.length > 0) { - // hide the body by default - add(['body'], 'hideInPercy'); - add(show, 'showInPercy'); - } - - // convert canvas elements into static images - const replacements = []; - for (const canvas of document.querySelectorAll('canvas')) { - const image = document.createElement('img'); - image.classList.value = canvas.classList.value; - image.src = canvas.toDataURL(); - image.style.cssText = window.getComputedStyle(canvas).cssText; - canvas.parentElement.replaceChild(image, canvas); - replacements.push({ canvas, image }); - } - - try { - const agent = new window.PercyAgent({ - handleAgentCommunication: false, - }); - - // cache the dom snapshot containing the images - return agent.snapshot(document, { - widths: [document.documentElement.clientWidth], - }); - } finally { - // restore replaced canvases - for (const { image, canvas } of replacements) { - image.parentElement.replaceChild(canvas, image); - } - - // restore element visibility - document.head.removeChild(styleElement); - remove(['body'], 'hideInPercy'); - remove(show, 'showInPercy'); - remove(hide, 'hideInPercy'); - } -} - -export const takePercySnapshotWithAgent = ` - ${readFileSync(agentJsFilename(), 'utf8')} - - return (${takePercySnapshot.toString()}).apply(null, arguments); -`; diff --git a/test/visual_regression/services/visual_testing/visual_testing.ts b/test/visual_regression/services/visual_testing/visual_testing.ts deleted file mode 100644 index 59c601e6a2b6e..0000000000000 --- a/test/visual_regression/services/visual_testing/visual_testing.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { postSnapshot } from '@percy/agent/dist/utils/sdk-utils'; -import testSubjSelector from '@kbn/test-subj-selector'; -import { Test } from '@kbn/test'; -import { kibanaPackageJson as pkg } from '@kbn/utils'; -import { FtrService, FtrProviderContext } from '../../ftr_provider_context'; - -// @ts-ignore internal js that is passed to the browser as is -import { takePercySnapshot, takePercySnapshotWithAgent } from './take_percy_snapshot'; - -export const DEFAULT_OPTIONS = { - widths: [1200], -}; - -export interface SnapshotOptions { - /** - * name to append to visual test name - */ - name?: string; - /** - * test subject selectiors to __show__ in screenshot - */ - show?: string[]; - /** - * test subject selectiors to __hide__ in screenshot - */ - hide?: string[]; -} - -const statsCache = new WeakMap(); - -function getStats(test: Test) { - if (!statsCache.has(test)) { - statsCache.set(test, { - snapshotCount: 0, - }); - } - - return statsCache.get(test)!; -} - -export class VisualTestingService extends FtrService { - private readonly browser = this.ctx.getService('browser'); - private readonly log = this.ctx.getService('log'); - - private currentTest: Test | undefined; - - constructor(ctx: FtrProviderContext) { - super(ctx); - - this.ctx.getService('lifecycle').beforeEachTest.add((test) => { - this.currentTest = test; - }); - } - - public async snapshot(options: SnapshotOptions = {}) { - if (process.env.DISABLE_VISUAL_TESTING) { - this.log.warning( - 'Capturing of percy snapshots disabled, would normally capture a snapshot here!' - ); - return; - } - - this.log.debug('Capturing percy snapshot'); - - if (!this.currentTest) { - throw new Error('unable to determine current test'); - } - - const [domSnapshot, url] = await Promise.all([ - this.getSnapshot(options.show, options.hide), - this.browser.getCurrentUrl(), - ]); - const stats = getStats(this.currentTest); - stats.snapshotCount += 1; - - const { name } = options; - const success = await postSnapshot({ - name: `${this.currentTest.fullTitle()} [${name ? name : stats.snapshotCount}]`, - url, - domSnapshot, - clientInfo: `kibana-ftr:${pkg.version}`, - ...DEFAULT_OPTIONS, - }); - - if (!success) { - throw new Error('Percy snapshot failed'); - } - } - - private async getSnapshot(show: string[] = [], hide: string[] = []) { - const showSelectors = show.map(testSubjSelector); - const hideSelectors = hide.map(testSubjSelector); - const snapshot = await this.browser.execute<[string[], string[]], string | false>( - takePercySnapshot, - showSelectors, - hideSelectors - ); - return snapshot !== false - ? snapshot - : await this.browser.execute<[string[], string[]], string>( - takePercySnapshotWithAgent, - showSelectors, - hideSelectors - ); - } -} diff --git a/test/visual_regression/tests/console_app.ts b/test/visual_regression/tests/console_app.ts deleted file mode 100644 index 2c2351b76ad4f..0000000000000 --- a/test/visual_regression/tests/console_app.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../ftr_provider_context'; - -const DEFAULT_REQUEST = ` - -GET _search -{ - "query": { - "match_all": {} - } -} - -`.trim(); - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const retry = getService('retry'); - const log = getService('log'); - const visualTesting = getService('visualTesting'); - const PageObjects = getPageObjects(['common', 'console']); - - describe.skip('console app', function describeIndexTests() { - before(async () => { - log.debug('navigateTo console'); - await PageObjects.common.navigateToApp('console'); - }); - - it('should show the default request', async () => { - // collapse the help pane because we only get the VISIBLE TEXT, not the part that is scrolled - await PageObjects.console.collapseHelp(); - await retry.try(async () => { - const actualRequest = await PageObjects.console.getRequest(); - log.debug(actualRequest); - expect(actualRequest.trim()).to.eql(DEFAULT_REQUEST); - }); - - await visualTesting.snapshot(); - }); - - it('default request response should include `"timed_out" : false`', async () => { - const expectedResponseContains = '"timed_out" : false,'; - await PageObjects.console.clickPlay(); - await retry.try(async () => { - const actualResponse = await PageObjects.console.getResponse(); - log.debug(actualResponse); - expect(actualResponse).to.contain(expectedResponseContains); - }); - }); - - it('settings should allow changing the text size', async () => { - await PageObjects.console.setFontSizeSetting(20); - await retry.try(async () => { - // the settings are not applied synchronously, so we retry for a time - expect(await PageObjects.console.getRequestFontSize()).to.be('20px'); - }); - - await PageObjects.console.setFontSizeSetting(24); - await retry.try(async () => { - // the settings are not applied synchronously, so we retry for a time - expect(await PageObjects.console.getRequestFontSize()).to.be('24px'); - }); - }); - }); -} diff --git a/test/visual_regression/tests/discover/chart_visualization.ts b/test/visual_regression/tests/discover/chart_visualization.ts deleted file mode 100644 index f8390064732b9..0000000000000 --- a/test/visual_regression/tests/discover/chart_visualization.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import expect from '@kbn/expect'; - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const retry = getService('retry'); - const esArchiver = getService('esArchiver'); - const browser = getService('browser'); - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); - const visualTesting = getService('visualTesting'); - const defaultSettings = { - defaultIndex: 'logstash-*', - 'discover:sampleSize': 1, - }; - - describe('discover', function describeIndexTests() { - before(async function () { - await kibanaServer.savedObjects.cleanStandardList(); - await kibanaServer.importExport.load( - 'test/functional/fixtures/kbn_archiver/discover/visual_regression' - ); - - // and load a set of makelogs data - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await kibanaServer.uiSettings.replace(defaultSettings); - await PageObjects.common.navigateToApp('discover'); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - }); - - after(async function unloadMakelogs() { - await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); - await kibanaServer.savedObjects.cleanStandardList(); - }); - - async function refreshDiscover() { - await browser.refresh(); - await PageObjects.header.awaitKibanaChrome(); - await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await PageObjects.discover.waitForChartLoadingComplete(1); - } - - async function takeSnapshot() { - await refreshDiscover(); - await visualTesting.snapshot({ - show: ['discoverChart'], - }); - } - - describe('query', function () { - this.tags(['skipFirefox']); - - it('should show bars in the correct time zone', async function () { - await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Hour', async function () { - await PageObjects.discover.setChartInterval('Hour'); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Day', async function () { - await PageObjects.discover.setChartInterval('Day'); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Week', async function () { - await PageObjects.discover.setChartInterval('Week'); - await takeSnapshot(); - }); - - it('browser back button should show previous interval Day', async function () { - await browser.goBack(); - await retry.try(async function tryingForTime() { - const actualInterval = await PageObjects.discover.getChartInterval(); - expect(actualInterval).to.be('Day'); - }); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Month', async function () { - await PageObjects.discover.setChartInterval('Month'); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Year', async function () { - await PageObjects.discover.setChartInterval('Year'); - await takeSnapshot(); - }); - - it('should show correct data for chart interval Auto', async function () { - await PageObjects.discover.setChartInterval('Auto'); - await takeSnapshot(); - }); - }); - - describe('time zone switch', () => { - it('should show bars in the correct time zone after switching', async function () { - await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'America/Phoenix' }); - await refreshDiscover(); - await PageObjects.timePicker.setDefaultAbsoluteRange(); - await takeSnapshot(); - }); - }); - }); -} diff --git a/test/visual_regression/tests/discover/index.ts b/test/visual_regression/tests/discover/index.ts deleted file mode 100644 index 9142a430f963b..0000000000000 --- a/test/visual_regression/tests/discover/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { DEFAULT_OPTIONS } from '../../services/visual_testing/visual_testing'; -import { FtrProviderContext } from '../../ftr_provider_context'; - -// Width must be the same as visual_testing or canvas image widths will get skewed -const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; - -export default function ({ getService, loadTestFile }: FtrProviderContext) { - const browser = getService('browser'); - - describe('discover app', function () { - before(function () { - return browser.setWindowSize(SCREEN_WIDTH, 1000); - }); - - loadTestFile(require.resolve('./chart_visualization')); - }); -} diff --git a/test/visual_regression/tests/vega/index.ts b/test/visual_regression/tests/vega/index.ts deleted file mode 100644 index 9ab4e199439a4..0000000000000 --- a/test/visual_regression/tests/vega/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { DEFAULT_OPTIONS } from '../../services/visual_testing/visual_testing'; -import { FtrProviderContext } from '../../ftr_provider_context'; - -// Width must be the same as visual_testing or canvas image widths will get skewed -const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; - -export default function ({ getService, loadTestFile }: FtrProviderContext) { - const browser = getService('browser'); - - describe('vega app', function () { - before(function () { - return browser.setWindowSize(SCREEN_WIDTH, 1000); - }); - - loadTestFile(require.resolve('./vega_map_visualization')); - }); -} diff --git a/test/visual_regression/tests/vega/vega_map_visualization.ts b/test/visual_regression/tests/vega/vega_map_visualization.ts deleted file mode 100644 index d891e7f2bab6b..0000000000000 --- a/test/visual_regression/tests/vega/vega_map_visualization.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const esArchiver = getService('esArchiver'); - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'visualize', 'visChart', 'visEditor', 'vegaChart']); - const visualTesting = getService('visualTesting'); - - describe('vega chart in visualize app', () => { - before(async () => { - await esArchiver.loadIfNeeded( - 'test/functional/fixtures/es_archiver/kibana_sample_data_flights' - ); - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/visualize.json'); - }); - - after(async () => { - await esArchiver.unload('test/functional/fixtures/es_archiver/kibana_sample_data_flights'); - await kibanaServer.importExport.unload( - 'test/functional/fixtures/kbn_archiver/visualize.json' - ); - }); - - it('should show map with vega layer', async function () { - await PageObjects.visualize.gotoVisualizationLandingPage(); - await PageObjects.visualize.openSavedVisualization('VegaMap'); - await PageObjects.visChart.waitForVisualizationRenderingStabilized(); - await visualTesting.snapshot(); - }); - }); -} diff --git a/x-pack/test/visual_regression/config.ts b/x-pack/test/visual_regression/config.ts deleted file mode 100644 index c7f0d8203833e..0000000000000 --- a/x-pack/test/visual_regression/config.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FtrConfigProviderContext } from '@kbn/test'; - -import { services } from './services'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); - - return { - ...functionalConfig.getAll(), - - testFiles: [ - require.resolve('./tests/canvas'), - require.resolve('./tests/login_page'), - require.resolve('./tests/maps'), - require.resolve('./tests/infra'), - ], - - services, - - junit: { - reportName: 'X-Pack Visual Regression Tests', - }, - }; -} diff --git a/x-pack/test/visual_regression/ftr_provider_context.d.ts b/x-pack/test/visual_regression/ftr_provider_context.d.ts deleted file mode 100644 index 24f5087ef7fe2..0000000000000 --- a/x-pack/test/visual_regression/ftr_provider_context.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { GenericFtrProviderContext } from '@kbn/test'; - -import { pageObjects } from './page_objects'; -import { services } from './services'; - -export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test/visual_regression/page_objects.ts b/x-pack/test/visual_regression/page_objects.ts deleted file mode 100644 index c8b0c9050dbb9..0000000000000 --- a/x-pack/test/visual_regression/page_objects.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { pageObjects } from '../functional/page_objects'; - -export { pageObjects }; diff --git a/x-pack/test/visual_regression/services.ts b/x-pack/test/visual_regression/services.ts deleted file mode 100644 index 7d58bd3f35b32..0000000000000 --- a/x-pack/test/visual_regression/services.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { services as ossVisualRegressionServices } from '../../../test/visual_regression/services'; -import { services as functionalServices } from '../functional/services'; - -export const services = { - ...functionalServices, - visualTesting: ossVisualRegressionServices.visualTesting, -}; diff --git a/x-pack/test/visual_regression/tests/canvas/fullscreen.js b/x-pack/test/visual_regression/tests/canvas/fullscreen.js deleted file mode 100644 index 6a20db5bccdec..0000000000000 --- a/x-pack/test/visual_regression/tests/canvas/fullscreen.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'canvas']); - const visualTesting = getService('visualTesting'); - - describe('fullscreen', () => { - it('workpad should display properly in fullscreen mode', async () => { - await PageObjects.common.navigateToApp('canvas', { - hash: '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1', - }); - - await PageObjects.canvas.enterFullscreen(); - - await PageObjects.canvas.waitForWorkpadElements(); - - await visualTesting.snapshot(); - }); - }); -} diff --git a/x-pack/test/visual_regression/tests/canvas/index.js b/x-pack/test/visual_regression/tests/canvas/index.js deleted file mode 100644 index 20a262fef10fe..0000000000000 --- a/x-pack/test/visual_regression/tests/canvas/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { DEFAULT_OPTIONS } from '../../../../../test/visual_regression/services/visual_testing/visual_testing'; - -const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; - -export default function ({ loadTestFile, getService }) { - const esArchiver = getService('esArchiver'); - const browser = getService('browser'); - - describe('canvas app visual regression', function () { - before(async () => { - await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); - await esArchiver.load('x-pack/test/functional/es_archives/canvas/default'); - - await browser.setWindowSize(SCREEN_WIDTH, 1000); - }); - - after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/canvas/default'); - }); - - loadTestFile(require.resolve('./fullscreen')); - }); -} diff --git a/x-pack/test/visual_regression/tests/infra/index.js b/x-pack/test/visual_regression/tests/infra/index.js deleted file mode 100644 index 13669c50953f9..0000000000000 --- a/x-pack/test/visual_regression/tests/infra/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export default function ({ loadTestFile, getService }) { - const browser = getService('browser'); - - describe.skip('InfraUI Visual Regression', function () { - before(async () => { - await browser.setWindowSize(1600, 1000); - }); - - loadTestFile(require.resolve('./waffle_map')); - loadTestFile(require.resolve('./saved_views')); - }); -} diff --git a/x-pack/test/visual_regression/tests/infra/saved_views.js b/x-pack/test/visual_regression/tests/infra/saved_views.js deleted file mode 100644 index a2fb3fda206da..0000000000000 --- a/x-pack/test/visual_regression/tests/infra/saved_views.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { DATES } from '../../../functional/apps/infra/constants'; -const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'infraHome', 'infraMetricsExplorer']); - const visualTesting = getService('visualTesting'); - const esArchiver = getService('esArchiver'); - - describe('saved views', () => { - before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - describe('Inverntory Test save functionality', () => { - it('should have save and load controls', async () => { - await PageObjects.common.navigateToApp('infraOps'); - await PageObjects.infraHome.goToTime(DATE_WITH_DATA); - await PageObjects.infraHome.getSaveViewButton(); - await PageObjects.infraHome.getLoadViewsButton(); - await visualTesting.snapshot(); - }); - - it('should open flyout list', async () => { - await PageObjects.infraHome.openSaveViewsFlyout(); - await visualTesting.snapshot(); - await PageObjects.infraHome.closeSavedViewFlyout(); - }); - - it('should open saved view modal', async () => { - await PageObjects.infraHome.openCreateSaveViewModal(); - await visualTesting.snapshot(); - }); - - it('should be able to enter a view name', async () => { - await PageObjects.infraHome.openEnterViewNameAndSave(); - await visualTesting.snapshot(); - }); - - it('should see a saved view in list', async () => { - await PageObjects.infraHome.openSaveViewsFlyout(); - await visualTesting.snapshot(); - }); - }); - - describe('Metric Explorer Test Saved Views', () => { - before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - describe('save functionality', () => { - it('should have saved views component', async () => { - await PageObjects.common.navigateToApp('infraOps'); - await PageObjects.infraHome.goToMetricExplorer(); - await PageObjects.infraSavedViews.getSavedViewsButton(); - await PageObjects.infraSavedViews.ensureViewIsLoaded('Default view'); - await visualTesting.snapshot(); - }); - - it('should open popover', async () => { - await PageObjects.infraSavedViews.clickSavedViewsButton(); - await visualTesting.snapshot(); - await PageObjects.infraSavedViews.closeSavedViewsPopover(); - }); - - it('should create new saved view and load it', async () => { - await PageObjects.infraSavedViews.clickSavedViewsButton(); - await PageObjects.infraSavedViews.clickSaveNewViewButton(); - await PageObjects.infraSavedViews.getCreateSavedViewModal(); - await PageObjects.infraSavedViews.createNewSavedView('view1'); - await PageObjects.infraSavedViews.ensureViewIsLoaded('view1'); - await visualTesting.snapshot(); - }); - - it('should new views should be listed in the load views list', async () => { - await PageObjects.infraSavedViews.clickSavedViewsButton(); - await PageObjects.infraSavedViews.clickLoadViewButton(); - await PageObjects.infraSavedViews.ensureViewIsLoadable('view1'); - await visualTesting.snapshot(); - await PageObjects.infraSavedViews.closeSavedViewsLoadModal(); - }); - }); - }); - }); -} diff --git a/x-pack/test/visual_regression/tests/infra/waffle_map.js b/x-pack/test/visual_regression/tests/infra/waffle_map.js deleted file mode 100644 index 70aaf89a059eb..0000000000000 --- a/x-pack/test/visual_regression/tests/infra/waffle_map.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { DATES } from '../../../functional/apps/infra/constants'; -const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['common', 'infraHome']); - const visualTesting = getService('visualTesting'); - const esArchiver = getService('esArchiver'); - - describe('waffle map', () => { - before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); - - it('should just work', async () => { - await PageObjects.common.navigateToApp('infraOps'); - await PageObjects.infraHome.goToTime(DATE_WITH_DATA); - await PageObjects.infraHome.getWaffleMap(); - await visualTesting.snapshot(); - }); - }); -} diff --git a/x-pack/test/visual_regression/tests/login_page.ts b/x-pack/test/visual_regression/tests/login_page.ts deleted file mode 100644 index 34e1132134744..0000000000000 --- a/x-pack/test/visual_regression/tests/login_page.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FtrProviderContext } from '../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const esArchiver = getService('esArchiver'); - const visualTesting = getService('visualTesting'); - const testSubjects = getService('testSubjects'); - const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'security']); - - describe.skip('Security', () => { - describe('Login Page', () => { - before(async () => { - await esArchiver.load('x-pack/test/functional/es_archives/empty_kibana'); - await PageObjects.security.forceLogout(); - }); - - after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/empty_kibana'); - }); - - afterEach(async () => { - // NOTE: Logout needs to happen before anything else to avoid flaky behavior - await PageObjects.security.forceLogout(); - }); - - it('renders login page', async () => { - await PageObjects.common.navigateToApp('login'); - - await retry.waitFor( - 'login page visible', - async () => await testSubjects.exists('loginSubmit') - ); - - await visualTesting.snapshot(); - }); - - it('renders failed login', async () => { - await PageObjects.security.loginPage.login('wrong-user', 'wrong-password', { - expectSuccess: false, - }); - - await retry.waitFor( - 'login error visible', - async () => await testSubjects.exists('loginErrorMessage') - ); - - await visualTesting.snapshot(); - }); - }); - }); -} diff --git a/x-pack/test/visual_regression/tests/maps/index.js b/x-pack/test/visual_regression/tests/maps/index.js deleted file mode 100644 index 9d53d70ad2abc..0000000000000 --- a/x-pack/test/visual_regression/tests/maps/index.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export default function ({ loadTestFile, getService }) { - const kibanaServer = getService('kibanaServer'); - const esArchiver = getService('esArchiver'); - const browser = getService('browser'); - const log = getService('log'); - const supertest = getService('supertest'); - - describe('maps app visual regression', function () { - before(async () => { - await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); - await kibanaServer.importExport.load( - 'x-pack/test/functional/fixtures/kbn_archiver/maps.json' - ); - // Functional tests verify behavior when referenced index pattern saved objects can not be found. - // However, saved object import fails when reference saved objects can not be found. - // To prevent import errors, index pattern saved object references exist during import - // but are then deleted afterwards to enable testing of missing reference index pattern saved objects. - - log.info('Delete index pattern'); - log.debug('id: ' + 'idThatDoesNotExitForESGeoGridSource'); - log.debug('id: ' + 'idThatDoesNotExitForESSearchSource'); - log.debug('id: ' + 'idThatDoesNotExitForESJoinSource'); - await supertest - .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESGeoGridSource') - .set('kbn-xsrf', 'true') - .expect(200); - - await supertest - .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESSearchSource') - .set('kbn-xsrf', 'true') - .expect(200); - - await supertest - .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESJoinSource') - .set('kbn-xsrf', 'true') - .expect(200); - - await esArchiver.load('x-pack/test/functional/es_archives/maps/data'); - await kibanaServer.uiSettings.replace({ - defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', - }); - await browser.setWindowSize(1600, 1000); - }); - - after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/maps/data'); - await kibanaServer.importExport.unload( - 'x-pack/test/functional/fixtures/kbn_archiver/maps.json' - ); - }); - - loadTestFile(require.resolve('./vector_styling')); - }); -} diff --git a/x-pack/test/visual_regression/tests/maps/vector_styling.js b/x-pack/test/visual_regression/tests/maps/vector_styling.js deleted file mode 100644 index 092ae603117d9..0000000000000 --- a/x-pack/test/visual_regression/tests/maps/vector_styling.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export default function ({ getPageObjects, getService }) { - const PageObjects = getPageObjects(['maps']); - const visualTesting = getService('visualTesting'); - - describe('vector styling', () => { - describe('symbolize as icon', () => { - before(async () => { - await PageObjects.maps.loadSavedMap('vector styling icon demo'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); - }); - - it('should symbolize points as icons with expected color, size, and orientation', async () => { - await visualTesting.snapshot(); - }); - }); - - describe('dynamic coloring', () => { - before(async () => { - await PageObjects.maps.loadSavedMap('join and dynamic coloring demo'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); - }); - - it('should symbolize fill color with custom steps from join value and border color with dynamic color ramp from prop value', async () => { - await visualTesting.snapshot(); - }); - }); - - describe('dynamic line coloring', () => { - before(async () => { - await PageObjects.maps.loadSavedMap('pew pew demo'); - await PageObjects.maps.enterFullScreen(); - await PageObjects.maps.closeLegend(); - }); - - it('should symbolize pew pew lines', async () => { - await visualTesting.snapshot(); - }); - }); - }); -} diff --git a/yarn.lock b/yarn.lock index f8f09a1dab087..a7f74c0b215b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4087,90 +4087,6 @@ dependencies: mkdirp "^1.0.4" -"@oclif/color@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.0.0.tgz#54939bbd16d1387511bf1a48ccda1a417248e6a9" - integrity sha512-KKd3W7eNwfNF061tr663oUNdt8EMnfuyf5Xv55SGWA1a0rjhWqS/32P7OeB7CbXcJUBdfVrPyR//1afaW12AWw== - dependencies: - ansi-styles "^3.2.1" - supports-color "^5.4.0" - tslib "^1" - -"@oclif/command@1.5.19", "@oclif/command@^1.5.13", "@oclif/command@^1.5.3": - version "1.5.19" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.5.19.tgz#13f472450eb83bd6c6871a164c03eadb5e1a07ed" - integrity sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ== - dependencies: - "@oclif/config" "^1" - "@oclif/errors" "^1.2.2" - "@oclif/parser" "^3.8.3" - "@oclif/plugin-help" "^2" - debug "^4.1.1" - semver "^5.6.0" - -"@oclif/config@^1": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.13.0.tgz#fc2bd82a9cb30a73faf7d2aa5ae937c719492bd1" - integrity sha512-ttb4l85q7SBx+WlUJY4A9eXLgv4i7hGDNGaXnY9fDKrYD7PBMwNOQ3Ssn2YT2yARAjyOxVE/5LfcwhQGq4kzqg== - dependencies: - debug "^4.1.1" - tslib "^1.9.3" - -"@oclif/errors@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.2.2.tgz#9d8f269b15f13d70aa93316fed7bebc24688edc2" - integrity sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg== - dependencies: - clean-stack "^1.3.0" - fs-extra "^7.0.0" - indent-string "^3.2.0" - strip-ansi "^5.0.0" - wrap-ansi "^4.0.0" - -"@oclif/linewrap@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" - integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== - -"@oclif/parser@^3.8.3": - version "3.8.4" - resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.4.tgz#1a90fc770a42792e574fb896325618aebbe8c9e4" - integrity sha512-cyP1at3l42kQHZtqDS3KfTeyMvxITGwXwH1qk9ktBYvqgMp5h4vHT+cOD74ld3RqJUOZY/+Zi9lb4Tbza3BtuA== - dependencies: - "@oclif/linewrap" "^1.0.0" - chalk "^2.4.2" - tslib "^1.9.3" - -"@oclif/plugin-help@^2": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-2.2.0.tgz#8dfc1c80deae47a205fbc70b018747ba93f31cc3" - integrity sha512-56iIgE7NQfwy/ZrWrvrEfJGb5rrMUt409yoQGw4feiU101UudA1btN1pbUbcKBr7vY9KFeqZZcftXEGxOp7zBg== - dependencies: - "@oclif/command" "^1.5.13" - chalk "^2.4.1" - indent-string "^3.2.0" - lodash.template "^4.4.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - widest-line "^2.0.1" - wrap-ansi "^4.0.0" - -"@oclif/plugin-not-found@^1.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-1.2.2.tgz#3e601f6e4264d7a0268cd03c152d90aa9c0cec6d" - integrity sha512-SPlmiJFmTFltQT/owdzQwKgq6eq5AEKVwVK31JqbzK48bRWvEL1Ye60cgztXyZ4bpPn2Fl+KeL3FWFQX41qJuA== - dependencies: - "@oclif/color" "^0.0.0" - "@oclif/command" "^1.5.3" - cli-ux "^4.9.0" - fast-levenshtein "^2.0.6" - lodash "^4.17.11" - -"@oclif/screen@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" - integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== - "@octokit/app@^2.2.2": version "2.2.2" resolved "https://registry.yarnpkg.com/@octokit/app/-/app-2.2.2.tgz#a1b8248f64159eeccbe4000d888fdae4163c4ad8" @@ -4529,34 +4445,6 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz#facf2c67d6063b9918d5a5e3fdf25f3a30d547b6" integrity sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ== -"@percy/agent@^0.28.6": - version "0.28.6" - resolved "https://registry.yarnpkg.com/@percy/agent/-/agent-0.28.6.tgz#b220fab6ddcf63ae4e6c343108ba6955a772ce1c" - integrity sha512-SDAyBiUmfQMVTayjvEjQ0IJIA7Y3AoeyWn0jmUxNOMRRIJWo4lQJghfhFCgzCkhXDCm67NMN2nAQAsvXrlIdkQ== - dependencies: - "@oclif/command" "1.5.19" - "@oclif/config" "^1" - "@oclif/plugin-help" "^2" - "@oclif/plugin-not-found" "^1.2" - axios "^0.21.1" - body-parser "^1.18.3" - colors "^1.3.2" - cors "^2.8.4" - cosmiconfig "^5.2.1" - cross-spawn "^7.0.2" - deepmerge "^4.0.0" - express "^4.16.3" - follow-redirects "1.12.1" - generic-pool "^3.7.1" - globby "^10.0.1" - image-size "^0.8.2" - js-yaml "^3.13.1" - percy-client "^3.2.0" - puppeteer "^5.3.1" - retry-axios "^1.0.1" - which "^2.0.1" - winston "^3.0.0" - "@pmmmwh/react-refresh-webpack-plugin@^0.5.1": version "0.5.5" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.5.tgz#e77aac783bd079f548daa0a7f080ab5b5a9741ca" @@ -8790,11 +8678,6 @@ agent-base@4: dependencies: es6-promisify "^5.0.0" -agent-base@5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" - integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -8965,7 +8848,7 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: +ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -9065,11 +8948,6 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - antlr4ts-cli@^0.5.0-alpha.3: version "0.5.0-alpha.3" resolved "https://registry.yarnpkg.com/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.3.tgz#1f581b2a3c840d3921a2f3b1e739e48c7e7c18cd" @@ -10163,12 +10041,7 @@ blob-util@^2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== -bluebird-retry@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.11.0.tgz#1289ab22cbbc3a02587baad35595351dd0c1c047" - integrity sha1-EomrIsu8OgJYe6rTVZU1HdDBwEc= - -bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: +bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -10183,7 +10056,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -body-parser@1.19.0, body-parser@^1.18.3: +body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -10898,14 +10771,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - case-sensitive-paths-webpack-plugin@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" @@ -11152,11 +11017,6 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-stack@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" - integrity sha1-noIVAa6XmYbEax1m0tQy2y/UrjE= - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -11219,33 +11079,6 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cli-ux@^4.9.0: - version "4.9.3" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-4.9.3.tgz#4c3e070c1ea23eef010bbdb041192e0661be84ce" - integrity sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA== - dependencies: - "@oclif/errors" "^1.2.2" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.3" - ansi-escapes "^3.1.0" - ansi-styles "^3.2.1" - cardinal "^2.1.1" - chalk "^2.4.1" - clean-stack "^2.0.0" - extract-stack "^1.0.0" - fs-extra "^7.0.0" - hyperlinker "^1.0.0" - indent-string "^3.2.0" - is-wsl "^1.1.0" - lodash "^4.17.11" - password-prompt "^1.0.7" - semver "^5.6.0" - strip-ansi "^5.0.0" - supports-color "^5.5.0" - supports-hyperlinks "^1.0.1" - treeify "^1.1.0" - tslib "^1.9.3" - cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -11484,7 +11317,7 @@ colorette@^1.2.0, colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@1.4.0, colors@^1.3.2: +colors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -11877,14 +11710,6 @@ core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cors@^2.8.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - cosmiconfig@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" @@ -11895,7 +11720,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -13119,7 +12944,7 @@ deep-object-diff@^1.1.0: resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== -deepmerge@3.2.0, deepmerge@^2.1.1, deepmerge@^4.0.0, deepmerge@^4.2.2: +deepmerge@3.2.0, deepmerge@^2.1.1, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -13400,11 +13225,6 @@ detective@^5.0.2, detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" -devtools-protocol@0.0.818844: - version "0.0.818844" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" - integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== - devtools-protocol@0.0.901419: version "0.0.901419" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.901419.tgz#79b5459c48fe7e1c5563c02bd72f8fec3e0cebcd" @@ -13640,7 +13460,7 @@ domhandler@^3.0.0: dependencies: domelementtype "^2.0.1" -domhandler@^4.0.0, domhandler@^4.0, domhandler@^4.2.0, domhandler@^4.2.2: +domhandler@^4.0, domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: version "4.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== @@ -13704,7 +13524,7 @@ dotenv@^16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== -dotenv@^8.0.0, dotenv@^8.1.0: +dotenv@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -14257,11 +14077,6 @@ es6-map@^0.1.5: es6-symbol "~3.1.1" event-emitter "~0.3.5" -es6-promise-pool@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz#147c612b36b47f105027f9d2bf54a598a99d9ccb" - integrity sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs= - es6-promise@^4.0.3, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -14672,7 +14487,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -14955,7 +14770,7 @@ expose-loader@^0.7.5: resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f" integrity sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw== -express@^4.16.3, express@^4.17.1: +express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -15034,12 +14849,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-stack@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-1.0.0.tgz#b97acaf9441eea2332529624b732fc5a1c8165fa" - integrity sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo= - -extract-zip@2.0.1, extract-zip@^2.0.0, extract-zip@^2.0.1: +extract-zip@2.0.1, extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -15538,11 +15348,6 @@ folktale@2.3.2: resolved "https://registry.yarnpkg.com/folktale/-/folktale-2.3.2.tgz#38231b039e5ef36989920cbf805bf6b227bf4fd4" integrity sha512-+8GbtQBwEqutP0v3uajDDoN64K2ehmHd0cjlghhxh0WpcfPzAIjPA03e1VvHlxL02FVGR0A6lwXsNQKn3H1RNQ== -follow-redirects@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" - integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== - follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" @@ -15577,11 +15382,6 @@ foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= -foreachasync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/foreachasync/-/foreachasync-3.0.0.tgz#5502987dc8714be3392097f32e0071c9dee07cf6" - integrity sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY= - foreground-child@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" @@ -15747,7 +15547,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -15917,11 +15717,6 @@ geckodriver@^3.0.1: https-proxy-agent "5.0.0" tar "6.1.11" -generic-pool@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.7.1.tgz#36fe5bb83e7e0e032e5d32cd05dc00f5ff119aa8" - integrity sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w== - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -16663,11 +16458,6 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -17285,14 +17075,6 @@ https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" - integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== - dependencies: - agent-base "5" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -17305,11 +17087,6 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - hyphenate-style-name@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -17383,13 +17160,6 @@ image-q@^1.1.1: resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= -image-size@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.8.3.tgz#f0b568857e034f29baffd37013587f2c0cad8b46" - integrity sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg== - dependencies: - queue "6.0.1" - immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -17461,7 +17231,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -19537,11 +19307,6 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -jssha@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/jssha/-/jssha-2.3.1.tgz#147b2125369035ca4b2f7d210dc539f009b3de9a" - integrity sha1-FHshJTaQNcpLL30hDcU58Amz3po= - jsts@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/jsts/-/jsts-1.6.2.tgz#c0efc885edae06ae84f78cbf2a0110ba929c5925" @@ -20027,11 +19792,6 @@ lodash-es@^4.17.11, lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -20157,21 +19917,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -21962,7 +21707,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.X, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.X, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -22729,14 +22474,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -password-prompt@^1.0.7: - version "1.1.2" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" - integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== - dependencies: - ansi-escapes "^3.1.0" - cross-spawn "^6.0.5" - path-browserify@0.0.1, path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" @@ -22895,21 +22632,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -percy-client@^3.2.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/percy-client/-/percy-client-3.7.0.tgz#780e7d780c7f646e59ffb6ee9d3d16e8237851ff" - integrity sha512-5levWR/nfVuSDL9YPN9Sn1M41I2/FmC/FndhD84s6W+mrVC4mB0cc9cT9F58hLuh7/133I/YvyI9Vc6NN41+2g== - dependencies: - bluebird "^3.5.1" - bluebird-retry "^0.11.0" - dotenv "^8.1.0" - es6-promise-pool "^2.5.0" - jssha "^2.1.0" - regenerator-runtime "^0.13.1" - request "^2.87.0" - request-promise "^4.2.2" - walk "^2.3.14" - performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -23810,7 +23532,7 @@ progress@^1.1.8: resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= -progress@^2.0.0, progress@^2.0.1, progress@^2.0.3: +progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -23993,7 +23715,7 @@ proxy-from-env@1.0.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= -proxy-from-env@1.1.0, proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: +proxy-from-env@1.1.0, proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== @@ -24099,24 +23821,6 @@ puppeteer@^10.2.0: unbzip2-stream "1.3.3" ws "7.4.6" -puppeteer@^5.3.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00" - integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg== - dependencies: - debug "^4.1.0" - devtools-protocol "0.0.818844" - extract-zip "^2.0.0" - https-proxy-agent "^4.0.0" - node-fetch "^2.6.1" - pkg-dir "^4.2.0" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^3.0.2" - tar-fs "^2.0.0" - unbzip2-stream "^1.3.3" - ws "^7.2.3" - q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -24175,13 +23879,6 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -queue@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.1.tgz#abd5a5b0376912f070a25729e0b6a7d565683791" - integrity sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg== - dependencies: - inherits "~2.0.3" - quick-format-unescaped@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz#6d6b66b8207aa2b35eef12be1421bb24c428f652" @@ -25209,13 +24906,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= - dependencies: - esprima "~4.0.0" - reduce-reducers@*, reduce-reducers@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reduce-reducers/-/reduce-reducers-1.0.4.tgz#fb77e751a9eb0201760ac5a605ca8c9c2d0537f8" @@ -25332,7 +25022,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -25688,13 +25378,6 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== - dependencies: - lodash "^4.17.11" - request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -25711,17 +25394,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request-promise@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.4.tgz#1c5ed0d71441e38ad58c7ce4ea4ea5b06d54b310" - integrity sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.2" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.44.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.44.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -25938,11 +25611,6 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry-axios@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-1.0.1.tgz#c1e465126416d8aee7a0a2d4be28401cc0135029" - integrity sha512-aVnENElFbdmbsv1WbTi610Ukdper88yUPz4Y3eg/DUyHV7vNaLrj9orB6FOjvmFoXL9wZvbMAsOD87BmcyBVOw== - retry@0.12.0, retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -27804,7 +27472,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -27825,14 +27493,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -28604,7 +28264,7 @@ tslib@2.3.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@~2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@^1, tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -28804,14 +28464,6 @@ unbzip2-stream@1.3.3: buffer "^5.2.1" through "^2.3.8" -unbzip2-stream@^1.3.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -29522,7 +29174,7 @@ variable-diff@1.1.0: chalk "^1.1.1" object-assign "^4.0.1" -vary@^1, vary@~1.1.2: +vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= @@ -30048,13 +29700,6 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walk@^2.3.14: - version "2.3.14" - resolved "https://registry.yarnpkg.com/walk/-/walk-2.3.14.tgz#60ec8631cfd23276ae1e7363ce11d626452e1ef3" - integrity sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg== - dependencies: - foreachasync "^3.0.0" - walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -30456,13 +30101,6 @@ wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -30491,7 +30129,7 @@ winston-transport@^4.4.2, winston-transport@^4.5.0: readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@^3.0.0, winston@^3.3.3: +winston@^3.3.3: version "3.5.1" resolved "https://registry.yarnpkg.com/winston/-/winston-3.5.1.tgz#b25cc899d015836dbf8c583dec8c4c4483a0da2e" integrity sha512-tbRtVy+vsSSCLcZq/8nXZaOie/S2tPXPFt4be/Q3vI/WtYwm7rrwidxVw2GRa38FIXcJ1kUM6MOZ9Jmnk3F3UA== @@ -30573,15 +30211,6 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" - integrity sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg== - dependencies: - ansi-styles "^3.2.0" - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" From 44d29d26892b6598c63118e731e3689471ab2735 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Thu, 14 Jul 2022 20:46:09 +0300 Subject: [PATCH 65/96] [Visualizations] Fix 'Data View' value is not populated when re-creating a visualization (#136305) * [UnifiedSearch] Fix 'Data View' value is not populated when re-creating a visualization * version -> isPersisted() Co-authored-by: Joe Reuter --- src/plugins/visualizations/public/visualize_app/utils/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/visualizations/public/visualize_app/utils/utils.ts b/src/plugins/visualizations/public/visualize_app/utils/utils.ts index 70ffae134aacf..f122b301af1f8 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/utils.ts +++ b/src/plugins/visualizations/public/visualize_app/utils/utils.ts @@ -102,5 +102,5 @@ export function getVizEditorOriginatingAppUrl(history: History) { } export function isFallbackDataView(dataView?: DataView): dataView is DataView { - return Boolean(dataView && !Object.keys(dataView.getOriginalSavedObjectBody() ?? {}).length); + return Boolean(dataView && !dataView.isPersisted()); } From 8ed5aaf92d171ac60944d3f7bfe00fc10f441edd Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 14 Jul 2022 12:57:22 -0500 Subject: [PATCH 66/96] skip flaky suite. #136272 --- .../policy_response/policy_response_wrapper.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/management/components/policy_response/policy_response_wrapper.test.tsx b/x-pack/plugins/security_solution/public/management/components/policy_response/policy_response_wrapper.test.tsx index dbd604d4c2c54..a4ef569c0a0c5 100644 --- a/x-pack/plugins/security_solution/public/management/components/policy_response/policy_response_wrapper.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/policy_response/policy_response_wrapper.test.tsx @@ -23,7 +23,8 @@ import { useGetEndpointDetails } from '../../hooks'; jest.mock('../../hooks/endpoint/use_get_endpoint_policy_response'); jest.mock('../../hooks/endpoint/use_get_endpoint_details'); -describe('when on the policy response', () => { +// FLAKY: https://github.com/elastic/kibana/issues/136272 +describe.skip('when on the policy response', () => { const docGenerator = new EndpointDocGenerator(); const createPolicyResponse = ( overallStatus: HostPolicyResponseActionStatus = HostPolicyResponseActionStatus.success, From 7231d7c5a18cb4e88f0acbcc38d90c668c4d10b4 Mon Sep 17 00:00:00 2001 From: Spencer Date: Thu, 14 Jul 2022 13:14:59 -0500 Subject: [PATCH 67/96] [ftr] use correct script path when running outside of repo root (#136397) --- packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts index 76346f3618a51..54e01a6b7916b 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_kibana_server.ts @@ -68,7 +68,7 @@ export async function runKibanaServer({ }; const prefixArgs = devMode - ? [Path.relative(process.cwd(), Path.resolve(REPO_ROOT, 'scripts/kibana'))] + ? [Path.relative(procRunnerOpts.cwd, Path.resolve(REPO_ROOT, 'scripts/kibana'))] : []; const buildArgs: string[] = config.get('kbnTestServer.buildArgs') || []; From 93f6f897950fbb14e0c625bdb23b67fc094fb618 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 14 Jul 2022 11:45:39 -0700 Subject: [PATCH 68/96] Add open API specification for get case API (#136315) --- docs/api/cases/cases-api-get-case.asciidoc | 84 +- .../plugins/cases/docs/openapi/bundled.json | 1834 ++++++++++++----- .../plugins/cases/docs/openapi/bundled.yaml | 581 +++++- .../examples/get_case_response.yaml | 44 + ...t_status.yaml => get_status_response.yaml} | 0 .../cases/docs/openapi/entrypoint.yaml | 8 +- .../openapi/paths/api@cases@{caseid}.yaml | 35 + .../paths/s@{spaceid}@api@cases@{caseid}.yaml | 36 + 8 files changed, 2001 insertions(+), 621 deletions(-) create mode 100644 x-pack/plugins/cases/docs/openapi/components/examples/get_case_response.yaml rename x-pack/plugins/cases/docs/openapi/components/examples/{get_status.yaml => get_status_response.yaml} (100%) create mode 100644 x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}.yaml create mode 100644 x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}.yaml diff --git a/docs/api/cases/cases-api-get-case.asciidoc b/docs/api/cases/cases-api-get-case.asciidoc index 70cc7f5bab60c..d7bc316a7346d 100644 --- a/docs/api/cases/cases-api-get-case.asciidoc +++ b/docs/api/cases/cases-api-get-case.asciidoc @@ -4,7 +4,7 @@ Get case ++++ -Returns a specified case. +Returns information about a case. === {api-request-title} @@ -17,7 +17,7 @@ Returns a specified case. You must have `read` privileges for the *Cases* feature in the *Management*, *{observability}*, or *Security* section of the <>, depending on the -`owner` of the cases you're seeking. +`owner` of the case you're seeking. === {api-path-parms-title} @@ -42,11 +42,11 @@ default space is used. === {api-examples-title} -Returns case ID `a18b38a0-71b0-11ea-a0b2-c51ea50a58e2` without comments: +Returns case ID `31cdada0-02c1-11ed-85f2-4f7c222ca2fa`: [source,sh] -------------------------------------------------- -GET api/cases/a18b38a0-71b0-11ea-a0b2-c51ea50a58e2 +GET api/cases/31cdada0-02c1-11ed-85f2-4f7c222ca2fa -------------------------------------------------- // KIBANA @@ -55,49 +55,39 @@ The API returns a JSON object with the retrieved case. For example: [source,json] -------------------------------------------------- { - "id": "a18b38a0-71b0-11ea-a0b2-c51ea50a58e2", - "version": "Wzk4LDFd", - "comments": [], - "totalComment": 0, - "totalAlerts": 0, - "closed_at": null, - "closed_by": null, - "created_at": "2020-03-29T11:30:02.658Z", - "created_by": { - "email": "ahunley@imf.usa.gov", - "full_name": "Alan Hunley", - "username": "ahunley" - }, - "external_service": null, - "updated_at": "2020-03-29T12:01:50.244Z", - "updated_by": { - "full_name": "Classified", - "email": "classified@hms.oo.gov.uk", - "username": "M" - }, - "description": "James Bond clicked on a highly suspicious email banner advertising cheap holidays for underpaid civil servants. Operation bubblegum is active. Repeat - operation bubblegum is now active!", - "title": "This case will self-destruct in 5 seconds", - "status": "open", - "connector": { - "id": "131d4448-abe0-4789-939d-8ef60680b498", - "name": "My connector", - "type": ".jira", - "fields": { - "issueType": "10006", - "priority": "High", - } - }, - "settings": { - "syncAlerts": true - }, - "owner": "securitySolution", - "severity": "low", - "duration": null, <1> - "tags": [ - "phishing", - "social engineering", - "bubblegum" - ] + "id":"31cdada0-02c1-11ed-85f2-4f7c222ca2fa", + "version":"WzM2LDFd", + "comments":[{ + "id":"2134c1d0-02c2-11ed-85f2-4f7c222ca2fa", + "version":"WzM3LDFd", + "type":"user", + "owner":"cases", + "comment":"A new comment", + "created_at":"2022-07-13T15:40:32.335Z", + "created_by":{"email":null,"full_name":null,"username":"elastic"}, + "pushed_at":null, + "pushed_by":null, + "updated_at":null, + "updated_by":null + }], + "totalComment":1, + "totalAlerts":0, + "title":"Case title 1", + "tags":["tag 1"], + "settings":{"syncAlerts":true}, + "owner":"cases", + "description":"A case description", + "duration":null, <1> + "severity":"low", + "closed_at":null, + "closed_by":null, + "created_at":"2022-07-13T15:33:50.604Z", + "created_by":{"username":"elastic","email":null,"full_name":null}, + "status":"open", + "updated_at":"2022-07-13T15:40:32.335Z", + "updated_by":{"full_name":null,"email":null,"username":"elastic"}, + "connector":{"id":"none","name":"none","type":".none","fields":null}, + "external_service":null } -------------------------------------------------- <1> Duration represents the elapsed time from the creation of the case to its diff --git a/x-pack/plugins/cases/docs/openapi/bundled.json b/x-pack/plugins/cases/docs/openapi/bundled.json index ef89279600760..9482e4489d875 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.json +++ b/x-pack/plugins/cases/docs/openapi/bundled.json @@ -2699,44 +2699,30 @@ } ] }, - "/api/cases/{caseId}/comments": { - "post": { - "summary": "Adds a comment or alert to a case in the default space.", - "operationId": "addCaseCommentDefaultSpace", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", + "/api/cases/{caseId}": { + "get": { + "summary": "Retrieves information about a case in the default space.", + "operationId": "getCaseDefaultSpace", + "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're seeking.\n", "tags": [ "cases", "kibana" ], "parameters": [ { - "$ref": "#/components/parameters/kbn_xsrf" + "$ref": "#/components/parameters/case_id" }, { - "$ref": "#/components/parameters/case_id" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/add_alert_comment_request_properties" - }, - { - "$ref": "#/components/schemas/add_user_comment_request_properties" - } - ] - }, - "examples": { - "createCaseCommentRequest": { - "$ref": "#/components/examples/add_comment_request" - } - } + "in": "query", + "name": "includeComments", + "description": "Determines whether case comments are returned.", + "deprecated": true, + "schema": { + "type": "boolean", + "default": true } } - }, + ], "responses": { "200": { "description": "Indicates a successful call.", @@ -3013,8 +2999,8 @@ } }, "examples": { - "createCaseCommentResponse": { - "$ref": "#/components/examples/add_comment_response" + "getCaseResponse": { + "$ref": "#/components/examples/get_case_response" } } } @@ -3027,37 +3013,17 @@ } ] }, - "delete": { - "summary": "Deletes all comments and alerts from a case in the default space.", - "operationId": "deleteCaseCommentsDefaultSpace", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", - "tags": [ - "cases", - "kibana" - ], - "parameters": [ - { - "$ref": "#/components/parameters/kbn_xsrf" - }, - { - "$ref": "#/components/parameters/case_id" - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "patch": { - "summary": "Updates a comment or alert in a case in the default space.", - "operationId": "updateCaseCommentDefaultSpace", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating. NOTE: You cannot change the comment type or the owner of a comment.\n", + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/cases/{caseId}/comments": { + "post": { + "summary": "Adds a comment or alert to a case in the default space.", + "operationId": "addCaseCommentDefaultSpace", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", "tags": [ "cases", "kibana" @@ -3076,16 +3042,16 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/update_alert_comment_request_properties" + "$ref": "#/components/schemas/add_alert_comment_request_properties" }, { - "$ref": "#/components/schemas/update_user_comment_request_properties" + "$ref": "#/components/schemas/add_user_comment_request_properties" } ] }, "examples": { - "updateCaseCommentRequest": { - "$ref": "#/components/examples/update_comment_request" + "createCaseCommentRequest": { + "$ref": "#/components/examples/add_comment_request" } } } @@ -3367,8 +3333,8 @@ } }, "examples": { - "updateCaseCommentResponse": { - "$ref": "#/components/examples/update_comment_response" + "createCaseCommentResponse": { + "$ref": "#/components/examples/add_comment_response" } } } @@ -3381,59 +3347,9 @@ } ] }, - "get": { - "summary": "Retrieves all the comments from a case in the default space.", - "operationId": "getAllCaseCommentsDefaultSpace", - "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", - "tags": [ - "cases", - "kibana" - ], - "deprecated": true, - "parameters": [ - { - "$ref": "#/components/parameters/case_id" - } - ], - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json; charset=utf-8": { - "schema": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/alert_comment_response_properties" - }, - { - "$ref": "#/components/schemas/user_comment_response_properties" - } - ] - } - } - }, - "examples": {} - } - } - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "/api/cases/{caseId}/comments/{commentId}": { "delete": { - "summary": "Deletes a comment or alert from a case in the default space.", - "operationId": "deleteCaseCommentDefaultSpace", + "summary": "Deletes all comments and alerts from a case in the default space.", + "operationId": "deleteCaseCommentsDefaultSpace", "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", @@ -3445,9 +3361,6 @@ }, { "$ref": "#/components/parameters/case_id" - }, - { - "$ref": "#/components/parameters/comment_id" } ], "responses": { @@ -3461,239 +3374,56 @@ } ] }, - "get": { - "summary": "Retrieves a comment from a case in the default space.", - "operationId": "getCaseCommentDefaultSpace", - "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", + "patch": { + "summary": "Updates a comment or alert in a case in the default space.", + "operationId": "updateCaseCommentDefaultSpace", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating. NOTE: You cannot change the comment type or the owner of a comment.\n", "tags": [ "cases", "kibana" ], "parameters": [ { - "$ref": "#/components/parameters/case_id" + "$ref": "#/components/parameters/kbn_xsrf" }, { - "$ref": "#/components/parameters/comment_id" + "$ref": "#/components/parameters/case_id" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/update_alert_comment_request_properties" + }, + { + "$ref": "#/components/schemas/update_user_comment_request_properties" + } + ] + }, + "examples": { + "updateCaseCommentRequest": { + "$ref": "#/components/examples/update_comment_request" + } + } + } + } + }, "responses": { "200": { "description": "Indicates a successful call.", "content": { "application/json; charset=utf-8": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/alert_comment_response_properties" - }, - { - "$ref": "#/components/schemas/user_comment_response_properties" - } - ] - }, - "examples": { - "getCaseCommentResponse": { - "$ref": "#/components/examples/get_comment_response" - } - } - } - } - } - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "/s/{spaceId}/api/cases": { - "post": { - "summary": "Creates a case.", - "operationId": "createCase", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", - "tags": [ - "cases", - "kibana" - ], - "parameters": [ - { - "$ref": "#/components/parameters/kbn_xsrf" - }, - { - "$ref": "#/components/parameters/space_id" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "connector": { - "description": "An object that contains the connector configuration.", - "type": "object", - "properties": { - "fields": { - "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", - "nullable": true, - "type": "object", - "properties": { - "caseId": { - "description": "The case identifier for Swimlane connectors.", - "type": "string" - }, - "category": { - "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", - "type": "string" - }, - "destIp": { - "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", - "type": "string" - }, - "impact": { - "description": "The effect an incident had on business for ServiceNow ITSM connectors.", - "type": "string" - }, - "issueType": { - "description": "The type of issue for Jira connectors.", - "type": "string" - }, - "issueTypes": { - "description": "The type of incident for IBM Resilient connectors.", - "type": "array", - "items": { - "type": "number" - } - }, - "malwareHash": { - "description": "A comma-separated list of malware hashes for ServiceNow SecOps connectors.", - "type": "string" - }, - "malwareUrl": { - "description": "A comma-separated list of malware URLs for ServiceNow SecOps connectors.", - "type": "string" - }, - "parent": { - "description": "The key of the parent issue, when the issue type is sub-task for Jira connectors.", - "type": "string" - }, - "priority": { - "description": "The priority of the issue for Jira and ServiceNow SecOps connectors.", - "type": "string" - }, - "severity": { - "description": "The severity of the incident for ServiceNow ITSM connectors.", - "type": "string" - }, - "severityCode": { - "description": "The severity code of the incident for IBM Resilient connectors.", - "type": "number" - }, - "sourceIp": { - "description": "A comma-separated list of source IPs for ServiceNow SecOps connectors.", - "type": "string" - }, - "subcategory": { - "description": "The subcategory of the incident for ServiceNow ITSM connectors.", - "type": "string" - }, - "urgency": { - "description": "The extent to which the incident resolution can be delayed for ServiceNow ITSM connectors.", - "type": "string" - } - }, - "example": null - }, - "id": { - "description": "The identifier for the connector. To create a case without a connector, use `none`.", - "type": "string", - "example": "none" - }, - "name": { - "description": "The name of the connector. To create a case without a connector, use `none`.", - "type": "string", - "example": "none" - }, - "type": { - "$ref": "#/components/schemas/connector_types" - } - }, - "required": [ - "fields", - "id", - "name", - "type" - ] - }, - "description": { - "description": "The description for the case.", - "type": "string" - }, - "owner": { - "$ref": "#/components/schemas/owners" - }, - "settings": { - "description": "An object that contains the case settings.", - "type": "object", - "properties": { - "syncAlerts": { - "description": "Turns alert syncing on or off.", - "type": "boolean" - } - } - }, - "severity": { - "$ref": "#/components/schemas/severity_property" - }, - "tags": { - "description": "The words and phrases that help categorize cases. It can be an empty array.", - "type": "array", - "items": { - "type": "string" - } - }, - "title": { - "description": "A title for the case.", - "type": "string" - } - }, - "required": [ - "connector", - "description", - "owner", - "settings", - "tags", - "title" - ] - }, - "examples": { - "createCaseRequest": { - "$ref": "#/components/examples/create_case_request" - } - } - } - } - }, - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json; charset=utf-8": { - "schema": { - "type": "object", - "properties": { - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "example": null + "type": "object", + "properties": { + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null }, "closed_by": { "type": "object", @@ -3957,8 +3687,8 @@ } }, "examples": { - "createCaseResponse": { - "$ref": "#/components/examples/create_case_response" + "updateCaseCommentResponse": { + "$ref": "#/components/examples/update_comment_response" } } } @@ -3971,10 +3701,60 @@ } ] }, + "get": { + "summary": "Retrieves all the comments from a case in the default space.", + "operationId": "getAllCaseCommentsDefaultSpace", + "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", + "tags": [ + "cases", + "kibana" + ], + "deprecated": true, + "parameters": [ + { + "$ref": "#/components/parameters/case_id" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/alert_comment_response_properties" + }, + { + "$ref": "#/components/schemas/user_comment_response_properties" + } + ] + } + } + }, + "examples": {} + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/api/cases/{caseId}/comments/{commentId}": { "delete": { - "summary": "Deletes one or more cases.", - "operationId": "deleteCase", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", + "summary": "Deletes a comment or alert from a case in the default space.", + "operationId": "deleteCaseCommentDefaultSpace", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", "tags": [ "cases", "kibana" @@ -3984,17 +3764,10 @@ "$ref": "#/components/parameters/kbn_xsrf" }, { - "$ref": "#/components/parameters/space_id" + "$ref": "#/components/parameters/case_id" }, { - "name": "ids", - "description": "The cases that you want to removed. All non-ASCII characters must be URL encoded.", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "example": "d4e7abb0-b462-11ec-9a8d-698504725a43" + "$ref": "#/components/parameters/comment_id" } ], "responses": { @@ -4008,54 +3781,601 @@ } ] }, - "patch": { - "summary": "Updates one or more cases.", - "operationId": "updateCase", - "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating.\n", + "get": { + "summary": "Retrieves a comment from a case in the default space.", + "operationId": "getCaseCommentDefaultSpace", + "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases with the comments you're seeking.\n", "tags": [ "cases", "kibana" ], "parameters": [ { - "$ref": "#/components/parameters/kbn_xsrf" + "$ref": "#/components/parameters/case_id" }, { - "$ref": "#/components/parameters/space_id" + "$ref": "#/components/parameters/comment_id" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "cases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "connector": { - "description": "An object that contains the connector configuration.", - "type": "object", - "properties": { - "fields": { - "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", - "nullable": true, - "type": "object", - "properties": { - "caseId": { - "description": "The case identifier for Swimlane connectors.", - "type": "string" - }, - "category": { - "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", - "type": "string" - }, - "destIp": { - "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", - "type": "string" - }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/alert_comment_response_properties" + }, + { + "$ref": "#/components/schemas/user_comment_response_properties" + } + ] + }, + "examples": { + "getCaseCommentResponse": { + "$ref": "#/components/examples/get_comment_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/s/{spaceId}/api/cases": { + "post": { + "summary": "Creates a case.", + "operationId": "createCase", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating.\n", + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "connector": { + "description": "An object that contains the connector configuration.", + "type": "object", + "properties": { + "fields": { + "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", + "nullable": true, + "type": "object", + "properties": { + "caseId": { + "description": "The case identifier for Swimlane connectors.", + "type": "string" + }, + "category": { + "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", + "type": "string" + }, + "destIp": { + "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "impact": { + "description": "The effect an incident had on business for ServiceNow ITSM connectors.", + "type": "string" + }, + "issueType": { + "description": "The type of issue for Jira connectors.", + "type": "string" + }, + "issueTypes": { + "description": "The type of incident for IBM Resilient connectors.", + "type": "array", + "items": { + "type": "number" + } + }, + "malwareHash": { + "description": "A comma-separated list of malware hashes for ServiceNow SecOps connectors.", + "type": "string" + }, + "malwareUrl": { + "description": "A comma-separated list of malware URLs for ServiceNow SecOps connectors.", + "type": "string" + }, + "parent": { + "description": "The key of the parent issue, when the issue type is sub-task for Jira connectors.", + "type": "string" + }, + "priority": { + "description": "The priority of the issue for Jira and ServiceNow SecOps connectors.", + "type": "string" + }, + "severity": { + "description": "The severity of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "severityCode": { + "description": "The severity code of the incident for IBM Resilient connectors.", + "type": "number" + }, + "sourceIp": { + "description": "A comma-separated list of source IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "subcategory": { + "description": "The subcategory of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "urgency": { + "description": "The extent to which the incident resolution can be delayed for ServiceNow ITSM connectors.", + "type": "string" + } + }, + "example": null + }, + "id": { + "description": "The identifier for the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "name": { + "description": "The name of the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "type": { + "$ref": "#/components/schemas/connector_types" + } + }, + "required": [ + "fields", + "id", + "name", + "type" + ] + }, + "description": { + "description": "The description for the case.", + "type": "string" + }, + "owner": { + "$ref": "#/components/schemas/owners" + }, + "settings": { + "description": "An object that contains the case settings.", + "type": "object", + "properties": { + "syncAlerts": { + "description": "Turns alert syncing on or off.", + "type": "boolean" + } + } + }, + "severity": { + "$ref": "#/components/schemas/severity_property" + }, + "tags": { + "description": "The words and phrases that help categorize cases. It can be an empty array.", + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "description": "A title for the case.", + "type": "string" + } + }, + "required": [ + "connector", + "description", + "owner", + "settings", + "tags", + "title" + ] + }, + "examples": { + "createCaseRequest": { + "$ref": "#/components/examples/create_case_request" + } + } + } + } + }, + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "object", + "properties": { + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "closed_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "nullable": true, + "example": null + }, + "comments": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/alert_comment_response_properties" + }, + { + "$ref": "#/components/schemas/user_comment_response_properties" + } + ] + }, + "example": [] + }, + "connector": { + "type": "object", + "properties": { + "fields": { + "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", + "nullable": true, + "type": "object", + "properties": { + "caseId": { + "description": "The case identifier for Swimlane connectors.", + "type": "string" + }, + "category": { + "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", + "type": "string" + }, + "destIp": { + "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "impact": { + "description": "The effect an incident had on business for ServiceNow ITSM connectors.", + "type": "string" + }, + "issueType": { + "description": "The type of issue for Jira connectors.", + "type": "string" + }, + "issueTypes": { + "description": "The type of incident for IBM Resilient connectors.", + "type": "array", + "items": { + "type": "number" + } + }, + "malwareHash": { + "description": "A comma-separated list of malware hashes for ServiceNow SecOps connectors.", + "type": "string" + }, + "malwareUrl": { + "description": "A comma-separated list of malware URLs for ServiceNow SecOps connectors.", + "type": "string" + }, + "parent": { + "description": "The key of the parent issue, when the issue type is sub-task for Jira connectors.", + "type": "string" + }, + "priority": { + "description": "The priority of the issue for Jira and ServiceNow SecOps connectors.", + "type": "string" + }, + "severity": { + "description": "The severity of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "severityCode": { + "description": "The severity code of the incident for IBM Resilient connectors.", + "type": "number" + }, + "sourceIp": { + "description": "A comma-separated list of source IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "subcategory": { + "description": "The subcategory of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "urgency": { + "description": "The extent to which the incident resolution can be delayed for ServiceNow ITSM connectors.", + "type": "string" + } + }, + "example": null + }, + "id": { + "description": "The identifier for the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "name": { + "description": "The name of the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "type": { + "$ref": "#/components/schemas/connector_types" + } + } + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2022-05-13T09:16:17.416Z" + }, + "created_by": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": null + }, + "full_name": { + "type": "string", + "example": null + }, + "username": { + "type": "string", + "example": "elastic" + } + } + }, + "description": { + "type": "string", + "example": "A case description." + }, + "duration": { + "type": "integer", + "description": "The elapsed time from the creation of the case to its closure (in seconds). If the case has not been closed, the duration is set to null. If the case was closed after less than half a second, the duration is rounded down to zero.\n", + "example": 120 + }, + "external_service": { + "type": "object", + "properties": { + "connector_id": { + "type": "string" + }, + "connector_name": { + "type": "string" + }, + "external_id": { + "type": "string" + }, + "external_title": { + "type": "string" + }, + "external_url": { + "type": "string" + }, + "pushed_at": { + "type": "string", + "format": "date-time" + }, + "pushed_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "nullable": true, + "example": null + } + } + }, + "id": { + "type": "string", + "example": "66b9aa00-94fa-11ea-9f74-e7e108796192" + }, + "owner": { + "$ref": "#/components/schemas/owners" + }, + "settings": { + "type": "object", + "properties": { + "syncAlerts": { + "type": "boolean", + "example": true + } + } + }, + "severity": { + "$ref": "#/components/schemas/severity_property" + }, + "status": { + "$ref": "#/components/schemas/status" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "tag-1" + ] + }, + "title": { + "type": "string", + "example": "Case title 1" + }, + "totalAlerts": { + "type": "integer", + "example": 0 + }, + "totalComment": { + "type": "integer", + "example": 0 + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "updated_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "nullable": true, + "example": null + }, + "version": { + "type": "string", + "example": "WzUzMiwxXQ==" + } + } + }, + "examples": { + "createCaseResponse": { + "$ref": "#/components/examples/create_case_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "delete": { + "summary": "Deletes one or more cases.", + "operationId": "deleteCase", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're deleting.\n", + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + }, + { + "name": "ids", + "description": "The cases that you want to removed. All non-ASCII characters must be URL encoded.", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "example": "d4e7abb0-b462-11ec-9a8d-698504725a43" + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "patch": { + "summary": "Updates one or more cases.", + "operationId": "updateCase", + "description": "You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're updating.\n", + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "$ref": "#/components/parameters/space_id" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "connector": { + "description": "An object that contains the connector configuration.", + "type": "object", + "properties": { + "fields": { + "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", + "nullable": true, + "type": "object", + "properties": { + "caseId": { + "description": "The case identifier for Swimlane connectors.", + "type": "string" + }, + "category": { + "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", + "type": "string" + }, + "destIp": { + "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", + "type": "string" + }, "impact": { "description": "The effect an incident had on business for ServiceNow ITSM connectors.", "type": "string" @@ -5979,47 +6299,228 @@ "schema": { "type": "array", "items": { - "type": "object", - "properties": { - "actionTypeId": { - "$ref": "#/components/schemas/connector_types" - }, - "config": { - "type": "object", - "properties": { - "apiUrl": { - "type": "string" - }, - "projectKey": { - "type": "string" - } - }, - "additionalProperties": true - }, - "id": { - "type": "string" - }, - "isDeprecated": { - "type": "boolean" - }, - "isMissingSecrets": { - "type": "boolean" - }, - "isPreconfigured": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "referencedByCount": { - "type": "integer" - } - } + "type": "object", + "properties": { + "actionTypeId": { + "$ref": "#/components/schemas/connector_types" + }, + "config": { + "type": "object", + "properties": { + "apiUrl": { + "type": "string" + }, + "projectKey": { + "type": "string" + } + }, + "additionalProperties": true + }, + "id": { + "type": "string" + }, + "isDeprecated": { + "type": "boolean" + }, + "isMissingSecrets": { + "type": "boolean" + }, + "isPreconfigured": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "referencedByCount": { + "type": "integer" + } + } + } + }, + "examples": { + "findConnectorResponse": { + "$ref": "#/components/examples/find_connector_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/s/{spaceId}/api/cases/reporters": { + "get": { + "summary": "Returns information about the users who opened cases.", + "operationId": "getCaseReporters", + "description": "You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases. The API returns information about the users as they existed at the time of the case creation, including their name, full name, and email address. If any of those details change thereafter or if a user is deleted, the information returned by this API is unchanged.\n", + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/space_id" + }, + { + "$ref": "#/components/parameters/owner" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + }, + "examples": { + "getReportersResponse": { + "$ref": "#/components/examples/get_reporters_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/s/{spaceId}/api/cases/status": { + "get": { + "summary": "Returns the number of cases that are open, closed, and in progress.", + "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", + "deprecated": true, + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/space_id" + }, + { + "$ref": "#/components/parameters/owner" + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "object", + "properties": { + "count_closed_cases": { + "type": "integer" + }, + "count_in_progress_cases": { + "type": "integer" + }, + "count_open_cases": { + "type": "integer" + } + } + }, + "examples": { + "getStatusResponse": { + "$ref": "#/components/examples/get_status_response" + } + } + } + } + } + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "servers": [ + { + "url": "https://localhost:5601" + } + ] + }, + "/s/{spaceId}/api/cases/tags": { + "get": { + "summary": "Aggregates and returns a list of case tags.", + "operationId": "getCaseTags", + "description": "You must have read privileges for the **Cases*** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", + "tags": [ + "cases", + "kibana" + ], + "parameters": [ + { + "$ref": "#/components/parameters/space_id" + }, + { + "in": "query", + "name": "owner", + "description": "A filter to limit the retrieved case statistics to a specific set of applications. If this parameter is omitted, the response contains tags from all cases that the user has access to read.", + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/owners" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/owners" + } + } + ] + } + } + ], + "responses": { + "200": { + "description": "Indicates a successful call.", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "type": "string" } }, "examples": { - "findConnectorResponse": { - "$ref": "#/components/examples/find_connector_response" + "getTagsResponse": { + "$ref": "#/components/examples/get_tags_response" } } } @@ -6038,21 +6539,31 @@ } ] }, - "/s/{spaceId}/api/cases/reporters": { + "/s/{spaceId}/api/cases/{caseId}": { "get": { - "summary": "Returns information about the users who opened cases.", - "operationId": "getCaseReporters", - "description": "You must have read privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases. The API returns information about the users as they existed at the time of the case creation, including their name, full name, and email address. If any of those details change thereafter or if a user is deleted, the information returned by this API is unchanged.\n", + "summary": "Retrieves information about a case.", + "operationId": "getCase", + "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're seeking.\n", "tags": [ "cases", "kibana" ], "parameters": [ + { + "$ref": "#/components/parameters/case_id" + }, { "$ref": "#/components/parameters/space_id" }, { - "$ref": "#/components/parameters/owner" + "in": "query", + "name": "includeComments", + "description": "Determines whether case comments are returned.", + "deprecated": true, + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -6061,146 +6572,278 @@ "content": { "application/json; charset=utf-8": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "email": { - "type": "string" + "type": "object", + "properties": { + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "closed_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } }, - "full_name": { + "nullable": true, + "example": null + }, + "comments": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/alert_comment_response_properties" + }, + { + "$ref": "#/components/schemas/user_comment_response_properties" + } + ] + }, + "example": [] + }, + "connector": { + "type": "object", + "properties": { + "fields": { + "description": "An object containing the connector fields. To create a case without a connector, specify null. If you want to omit any individual field, specify null as its value.", + "nullable": true, + "type": "object", + "properties": { + "caseId": { + "description": "The case identifier for Swimlane connectors.", + "type": "string" + }, + "category": { + "description": "The category of the incident for ServiceNow ITSM and ServiceNow SecOps connectors.", + "type": "string" + }, + "destIp": { + "description": "A comma-separated list of destination IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "impact": { + "description": "The effect an incident had on business for ServiceNow ITSM connectors.", + "type": "string" + }, + "issueType": { + "description": "The type of issue for Jira connectors.", + "type": "string" + }, + "issueTypes": { + "description": "The type of incident for IBM Resilient connectors.", + "type": "array", + "items": { + "type": "number" + } + }, + "malwareHash": { + "description": "A comma-separated list of malware hashes for ServiceNow SecOps connectors.", + "type": "string" + }, + "malwareUrl": { + "description": "A comma-separated list of malware URLs for ServiceNow SecOps connectors.", + "type": "string" + }, + "parent": { + "description": "The key of the parent issue, when the issue type is sub-task for Jira connectors.", + "type": "string" + }, + "priority": { + "description": "The priority of the issue for Jira and ServiceNow SecOps connectors.", + "type": "string" + }, + "severity": { + "description": "The severity of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "severityCode": { + "description": "The severity code of the incident for IBM Resilient connectors.", + "type": "number" + }, + "sourceIp": { + "description": "A comma-separated list of source IPs for ServiceNow SecOps connectors.", + "type": "string" + }, + "subcategory": { + "description": "The subcategory of the incident for ServiceNow ITSM connectors.", + "type": "string" + }, + "urgency": { + "description": "The extent to which the incident resolution can be delayed for ServiceNow ITSM connectors.", + "type": "string" + } + }, + "example": null + }, + "id": { + "description": "The identifier for the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "name": { + "description": "The name of the connector. To create a case without a connector, use `none`.", + "type": "string", + "example": "none" + }, + "type": { + "$ref": "#/components/schemas/connector_types" + } + } + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2022-05-13T09:16:17.416Z" + }, + "created_by": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": null + }, + "full_name": { + "type": "string", + "example": null + }, + "username": { + "type": "string", + "example": "elastic" + } + } + }, + "description": { + "type": "string", + "example": "A case description." + }, + "duration": { + "type": "integer", + "description": "The elapsed time from the creation of the case to its closure (in seconds). If the case has not been closed, the duration is set to null. If the case was closed after less than half a second, the duration is rounded down to zero.\n", + "example": 120 + }, + "external_service": { + "type": "object", + "properties": { + "connector_id": { + "type": "string" + }, + "connector_name": { + "type": "string" + }, + "external_id": { + "type": "string" + }, + "external_title": { + "type": "string" + }, + "external_url": { + "type": "string" + }, + "pushed_at": { + "type": "string", + "format": "date-time" + }, + "pushed_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "nullable": true, + "example": null + } + } + }, + "id": { + "type": "string", + "example": "66b9aa00-94fa-11ea-9f74-e7e108796192" + }, + "owner": { + "$ref": "#/components/schemas/owners" + }, + "settings": { + "type": "object", + "properties": { + "syncAlerts": { + "type": "boolean", + "example": true + } + } + }, + "severity": { + "$ref": "#/components/schemas/severity_property" + }, + "status": { + "$ref": "#/components/schemas/status" + }, + "tags": { + "type": "array", + "items": { "type": "string" }, - "username": { - "type": "string" - } - } - } - }, - "examples": { - "getReportersResponse": { - "$ref": "#/components/examples/get_reporters_response" - } - } - } - } - } - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "/s/{spaceId}/api/cases/status": { - "get": { - "summary": "Returns the number of cases that are open, closed, and in progress.", - "description": "You must have `read` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", - "deprecated": true, - "tags": [ - "cases", - "kibana" - ], - "parameters": [ - { - "$ref": "#/components/parameters/space_id" - }, - { - "$ref": "#/components/parameters/owner" - } - ], - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json; charset=utf-8": { - "schema": { - "type": "object", - "properties": { - "count_closed_cases": { - "type": "integer" + "example": [ + "tag-1" + ] }, - "count_in_progress_cases": { - "type": "integer" + "title": { + "type": "string", + "example": "Case title 1" }, - "count_open_cases": { - "type": "integer" + "totalAlerts": { + "type": "integer", + "example": 0 + }, + "totalComment": { + "type": "integer", + "example": 0 + }, + "updated_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "example": null + }, + "updated_by": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "nullable": true, + "example": null + }, + "version": { + "type": "string", + "example": "WzUzMiwxXQ==" } } }, "examples": { - "getStatusResponse": { - "$ref": "#/components/examples/get_status_response" - } - } - } - } - } - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "servers": [ - { - "url": "https://localhost:5601" - } - ] - }, - "/s/{spaceId}/api/cases/tags": { - "get": { - "summary": "Aggregates and returns a list of case tags.", - "operationId": "getCaseTags", - "description": "You must have read privileges for the **Cases*** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the cases you're seeking.\n", - "tags": [ - "cases", - "kibana" - ], - "parameters": [ - { - "$ref": "#/components/parameters/space_id" - }, - { - "in": "query", - "name": "owner", - "description": "A filter to limit the retrieved case statistics to a specific set of applications. If this parameter is omitted, the response contains tags from all cases that the user has access to read.", - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/owners" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/owners" - } - } - ] - } - } - ], - "responses": { - "200": { - "description": "Indicates a successful call.", - "content": { - "application/json; charset=utf-8": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - }, - "examples": { - "getTagsResponse": { - "$ref": "#/components/examples/get_tags_response" + "getCaseResponse": { + "$ref": "#/components/examples/get_case_response" } } } @@ -7857,6 +8500,67 @@ "tag 2" ] }, + "get_case_response": { + "summary": "Retrieves information about a case including its comments.", + "value": { + "id": "31cdada0-02c1-11ed-85f2-4f7c222ca2fa", + "version": "WzM2LDFd", + "comments": [ + { + "id": "2134c1d0-02c2-11ed-85f2-4f7c222ca2fa", + "version": "WzM3LDFd", + "type": "user", + "owner": "cases", + "comment": "A new comment", + "created_at": "2022-07-13T15:40:32.335Z", + "created_by": { + "email": null, + "full_name": null, + "username": "elastic" + }, + "pushed_at": null, + "pushed_by": null, + "updated_at": null, + "updated_by": null + } + ], + "totalComment": 1, + "totalAlerts": 0, + "title": "Case title 1", + "tags": [ + "tag 1" + ], + "settings": { + "syncAlerts": true + }, + "owner": "cases", + "description": "A case description", + "duration": null, + "severity": "low", + "closed_at": null, + "closed_by": null, + "created_at": "2022-07-13T15:33:50.604Z", + "created_by": { + "username": "elastic", + "email": null, + "full_name": null + }, + "status": "open", + "updated_at": "2022-07-13T15:40:32.335Z", + "updated_by": { + "full_name": null, + "email": null, + "username": "elastic" + }, + "connector": { + "id": "none", + "name": "none", + "type": ".none", + "fields": null + }, + "external_service": null + } + }, "add_comment_request": { "summary": "Adds a comment to a case.", "value": { diff --git a/x-pack/plugins/cases/docs/openapi/bundled.yaml b/x-pack/plugins/cases/docs/openapi/bundled.yaml index 57b3c4647887c..57b01b3f05365 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.yaml +++ b/x-pack/plugins/cases/docs/openapi/bundled.yaml @@ -2259,6 +2259,266 @@ paths: - url: https://localhost:5601 servers: - url: https://localhost:5601 + /api/cases/{caseId}: + get: + summary: Retrieves information about a case in the default space. + operationId: getCaseDefaultSpace + description: > + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're seeking. + tags: + - cases + - kibana + parameters: + - $ref: '#/components/parameters/case_id' + - in: query + name: includeComments + description: Determines whether case comments are returned. + deprecated: true + schema: + type: boolean + default: true + responses: + '200': + description: Indicates a successful call. + content: + application/json; charset=utf-8: + schema: + type: object + properties: + closed_at: + type: string + format: date-time + nullable: true + example: null + closed_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + comments: + type: array + items: + oneOf: + - $ref: >- + #/components/schemas/alert_comment_response_properties + - $ref: >- + #/components/schemas/user_comment_response_properties + example: [] + connector: + type: object + properties: + fields: + description: >- + An object containing the connector fields. To create a + case without a connector, specify null. If you want to + omit any individual field, specify null as its value. + nullable: true + type: object + properties: + caseId: + description: The case identifier for Swimlane connectors. + type: string + category: + description: >- + The category of the incident for ServiceNow ITSM + and ServiceNow SecOps connectors. + type: string + destIp: + description: >- + A comma-separated list of destination IPs for + ServiceNow SecOps connectors. + type: string + impact: + description: >- + The effect an incident had on business for + ServiceNow ITSM connectors. + type: string + issueType: + description: The type of issue for Jira connectors. + type: string + issueTypes: + description: The type of incident for IBM Resilient connectors. + type: array + items: + type: number + malwareHash: + description: >- + A comma-separated list of malware hashes for + ServiceNow SecOps connectors. + type: string + malwareUrl: + description: >- + A comma-separated list of malware URLs for + ServiceNow SecOps connectors. + type: string + parent: + description: >- + The key of the parent issue, when the issue type + is sub-task for Jira connectors. + type: string + priority: + description: >- + The priority of the issue for Jira and ServiceNow + SecOps connectors. + type: string + severity: + description: >- + The severity of the incident for ServiceNow ITSM + connectors. + type: string + severityCode: + description: >- + The severity code of the incident for IBM + Resilient connectors. + type: number + sourceIp: + description: >- + A comma-separated list of source IPs for + ServiceNow SecOps connectors. + type: string + subcategory: + description: >- + The subcategory of the incident for ServiceNow + ITSM connectors. + type: string + urgency: + description: >- + The extent to which the incident resolution can be + delayed for ServiceNow ITSM connectors. + type: string + example: null + id: + description: >- + The identifier for the connector. To create a case + without a connector, use `none`. + type: string + example: none + name: + description: >- + The name of the connector. To create a case without a + connector, use `none`. + type: string + example: none + type: + $ref: '#/components/schemas/connector_types' + created_at: + type: string + format: date-time + example: '2022-05-13T09:16:17.416Z' + created_by: + type: object + properties: + email: + type: string + example: null + full_name: + type: string + example: null + username: + type: string + example: elastic + description: + type: string + example: A case description. + duration: + type: integer + description: > + The elapsed time from the creation of the case to its + closure (in seconds). If the case has not been closed, the + duration is set to null. If the case was closed after less + than half a second, the duration is rounded down to zero. + example: 120 + external_service: + type: object + properties: + connector_id: + type: string + connector_name: + type: string + external_id: + type: string + external_title: + type: string + external_url: + type: string + pushed_at: + type: string + format: date-time + pushed_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + id: + type: string + example: 66b9aa00-94fa-11ea-9f74-e7e108796192 + owner: + $ref: '#/components/schemas/owners' + settings: + type: object + properties: + syncAlerts: + type: boolean + example: true + severity: + $ref: '#/components/schemas/severity_property' + status: + $ref: '#/components/schemas/status' + tags: + type: array + items: + type: string + example: + - tag-1 + title: + type: string + example: Case title 1 + totalAlerts: + type: integer + example: 0 + totalComment: + type: integer + example: 0 + updated_at: + type: string + format: date-time + nullable: true + example: null + updated_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + version: + type: string + example: WzUzMiwxXQ== + examples: + getCaseResponse: + $ref: '#/components/examples/get_case_response' + servers: + - url: https://localhost:5601 + servers: + - url: https://localhost:5601 /api/cases/{caseId}/comments: post: summary: Adds a comment or alert to a case in the default space. @@ -5139,12 +5399,273 @@ paths: - url: https://localhost:5601 servers: - url: https://localhost:5601 - /s/{spaceId}/api/cases/{caseId}/comments: - post: - summary: Adds a comment or alert to a case. - operationId: addCaseComment + /s/{spaceId}/api/cases/{caseId}: + get: + summary: Retrieves information about a case. + operationId: getCase description: > - You must have `all` privileges for the **Cases** feature in the + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're seeking. + tags: + - cases + - kibana + parameters: + - $ref: '#/components/parameters/case_id' + - $ref: '#/components/parameters/space_id' + - in: query + name: includeComments + description: Determines whether case comments are returned. + deprecated: true + schema: + type: boolean + default: true + responses: + '200': + description: Indicates a successful call. + content: + application/json; charset=utf-8: + schema: + type: object + properties: + closed_at: + type: string + format: date-time + nullable: true + example: null + closed_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + comments: + type: array + items: + oneOf: + - $ref: >- + #/components/schemas/alert_comment_response_properties + - $ref: >- + #/components/schemas/user_comment_response_properties + example: [] + connector: + type: object + properties: + fields: + description: >- + An object containing the connector fields. To create a + case without a connector, specify null. If you want to + omit any individual field, specify null as its value. + nullable: true + type: object + properties: + caseId: + description: The case identifier for Swimlane connectors. + type: string + category: + description: >- + The category of the incident for ServiceNow ITSM + and ServiceNow SecOps connectors. + type: string + destIp: + description: >- + A comma-separated list of destination IPs for + ServiceNow SecOps connectors. + type: string + impact: + description: >- + The effect an incident had on business for + ServiceNow ITSM connectors. + type: string + issueType: + description: The type of issue for Jira connectors. + type: string + issueTypes: + description: The type of incident for IBM Resilient connectors. + type: array + items: + type: number + malwareHash: + description: >- + A comma-separated list of malware hashes for + ServiceNow SecOps connectors. + type: string + malwareUrl: + description: >- + A comma-separated list of malware URLs for + ServiceNow SecOps connectors. + type: string + parent: + description: >- + The key of the parent issue, when the issue type + is sub-task for Jira connectors. + type: string + priority: + description: >- + The priority of the issue for Jira and ServiceNow + SecOps connectors. + type: string + severity: + description: >- + The severity of the incident for ServiceNow ITSM + connectors. + type: string + severityCode: + description: >- + The severity code of the incident for IBM + Resilient connectors. + type: number + sourceIp: + description: >- + A comma-separated list of source IPs for + ServiceNow SecOps connectors. + type: string + subcategory: + description: >- + The subcategory of the incident for ServiceNow + ITSM connectors. + type: string + urgency: + description: >- + The extent to which the incident resolution can be + delayed for ServiceNow ITSM connectors. + type: string + example: null + id: + description: >- + The identifier for the connector. To create a case + without a connector, use `none`. + type: string + example: none + name: + description: >- + The name of the connector. To create a case without a + connector, use `none`. + type: string + example: none + type: + $ref: '#/components/schemas/connector_types' + created_at: + type: string + format: date-time + example: '2022-05-13T09:16:17.416Z' + created_by: + type: object + properties: + email: + type: string + example: null + full_name: + type: string + example: null + username: + type: string + example: elastic + description: + type: string + example: A case description. + duration: + type: integer + description: > + The elapsed time from the creation of the case to its + closure (in seconds). If the case has not been closed, the + duration is set to null. If the case was closed after less + than half a second, the duration is rounded down to zero. + example: 120 + external_service: + type: object + properties: + connector_id: + type: string + connector_name: + type: string + external_id: + type: string + external_title: + type: string + external_url: + type: string + pushed_at: + type: string + format: date-time + pushed_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + id: + type: string + example: 66b9aa00-94fa-11ea-9f74-e7e108796192 + owner: + $ref: '#/components/schemas/owners' + settings: + type: object + properties: + syncAlerts: + type: boolean + example: true + severity: + $ref: '#/components/schemas/severity_property' + status: + $ref: '#/components/schemas/status' + tags: + type: array + items: + type: string + example: + - tag-1 + title: + type: string + example: Case title 1 + totalAlerts: + type: integer + example: 0 + totalComment: + type: integer + example: 0 + updated_at: + type: string + format: date-time + nullable: true + example: null + updated_by: + type: object + properties: + email: + type: string + full_name: + type: string + username: + type: string + nullable: true + example: null + version: + type: string + example: WzUzMiwxXQ== + examples: + getCaseResponse: + $ref: '#/components/examples/get_case_response' + servers: + - url: https://localhost:5601 + servers: + - url: https://localhost:5601 + /s/{spaceId}/api/cases/{caseId}/comments: + post: + summary: Adds a comment or alert to a case. + operationId: addCaseComment + description: > + You must have `all` privileges for the **Cases** feature in the **Management**, **Observability**, or **Security** section of the Kibana feature privileges, depending on the owner of the case you're creating. tags: @@ -6432,6 +6953,56 @@ components: - security - tag 1 - tag 2 + get_case_response: + summary: Retrieves information about a case including its comments. + value: + id: 31cdada0-02c1-11ed-85f2-4f7c222ca2fa + version: WzM2LDFd + comments: + - id: 2134c1d0-02c2-11ed-85f2-4f7c222ca2fa + version: WzM3LDFd + type: user + owner: cases + comment: A new comment + created_at: '2022-07-13T15:40:32.335Z' + created_by: + email: null + full_name: null + username: elastic + pushed_at: null + pushed_by: null + updated_at: null + updated_by: null + totalComment: 1 + totalAlerts: 0 + title: Case title 1 + tags: + - tag 1 + settings: + syncAlerts: true + owner: cases + description: A case description + duration: null + severity: low + closed_at: null + closed_by: null + created_at: '2022-07-13T15:33:50.604Z' + created_by: + username: elastic + email: null + full_name: null + status: open + updated_at: '2022-07-13T15:40:32.335Z' + updated_by: + full_name: null + email: null + username: elastic + connector: + id: none + name: none + type: .none + fields: null + external_service: null add_comment_request: summary: Adds a comment to a case. value: diff --git a/x-pack/plugins/cases/docs/openapi/components/examples/get_case_response.yaml b/x-pack/plugins/cases/docs/openapi/components/examples/get_case_response.yaml new file mode 100644 index 0000000000000..936a21a5cfc70 --- /dev/null +++ b/x-pack/plugins/cases/docs/openapi/components/examples/get_case_response.yaml @@ -0,0 +1,44 @@ +summary: Retrieves information about a case including its comments. +value: + { + "id":"31cdada0-02c1-11ed-85f2-4f7c222ca2fa", + "version":"WzM2LDFd", + "comments":[{ + "id":"2134c1d0-02c2-11ed-85f2-4f7c222ca2fa", + "version":"WzM3LDFd", + "type":"user", + "owner":"cases", + "comment":"A new comment", + "created_at":"2022-07-13T15:40:32.335Z", + "created_by":{ + "email":null, + "full_name":null, + "username":"elastic" + }, + "pushed_at":null, + "pushed_by":null, + "updated_at":null, + "updated_by":null + }], + "totalComment":1, + "totalAlerts":0, + "title":"Case title 1", + "tags":["tag 1"], + "settings":{"syncAlerts":true}, + "owner":"cases", + "description":"A case description", + "duration":null, + "severity":"low", + "closed_at":null, + "closed_by":null, + "created_at":"2022-07-13T15:33:50.604Z", + "created_by":{"username":"elastic","email":null,"full_name":null},"status":"open", + "updated_at":"2022-07-13T15:40:32.335Z", + "updated_by":{"full_name":null,"email":null,"username":"elastic"},"connector":{ + "id":"none", + "name":"none", + "type":".none", + "fields":null + }, + "external_service":null + } \ No newline at end of file diff --git a/x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml b/x-pack/plugins/cases/docs/openapi/components/examples/get_status_response.yaml similarity index 100% rename from x-pack/plugins/cases/docs/openapi/components/examples/get_status.yaml rename to x-pack/plugins/cases/docs/openapi/components/examples/get_status_response.yaml diff --git a/x-pack/plugins/cases/docs/openapi/entrypoint.yaml b/x-pack/plugins/cases/docs/openapi/entrypoint.yaml index c32112eacbda0..7e05b510d5375 100644 --- a/x-pack/plugins/cases/docs/openapi/entrypoint.yaml +++ b/x-pack/plugins/cases/docs/openapi/entrypoint.yaml @@ -35,8 +35,8 @@ paths: $ref: 'paths/api@cases@status.yaml' '/api/cases/tags': $ref: 'paths/api@cases@tags.yaml' -# '/api/cases/{caseId}': -# $ref: 'paths/api@cases@{caseid}.yaml' + '/api/cases/{caseId}': + $ref: 'paths/api@cases@{caseid}.yaml' # '/api/cases/{caseId}/alerts': # $ref: 'paths/api@cases@{caseid}@alerts.yaml' '/api/cases/{caseId}/comments': @@ -66,8 +66,8 @@ paths: $ref: 'paths/s@{spaceid}@api@cases@status.yaml' '/s/{spaceId}/api/cases/tags': $ref: 'paths/s@{spaceid}@api@cases@tags.yaml' - # '/s/{spaceId}/api/cases/{caseId}': - # $ref: 'paths/s@{spaceid}@api@cases@{caseid}.yaml' + '/s/{spaceId}/api/cases/{caseId}': + $ref: 'paths/s@{spaceid}@api@cases@{caseid}.yaml' # '/s/{spaceId}/api/cases/{caseId}/alerts': # $ref: 'paths/s@{spaceid}@api@cases@{caseid}@alerts.yaml' '/s/{spaceId}/api/cases/{caseId}/comments': diff --git a/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}.yaml new file mode 100644 index 0000000000000..7290e5f5fdfba --- /dev/null +++ b/x-pack/plugins/cases/docs/openapi/paths/api@cases@{caseid}.yaml @@ -0,0 +1,35 @@ +get: + summary: Retrieves information about a case in the default space. + operationId: getCaseDefaultSpace + description: > + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're seeking. + tags: + - cases + - kibana + parameters: + - $ref: ../components/parameters/case_id.yaml + - in: query + name: includeComments + description: Determines whether case comments are returned. + deprecated: true + schema: + type: boolean + default: true + responses: + '200': + description: Indicates a successful call. + content: + application/json; charset=utf-8: + schema: + type: object + properties: + $ref: '../components/schemas/case_response_properties.yaml' + examples: + getCaseResponse: + $ref: '../components/examples/get_case_response.yaml' + servers: + - url: https://localhost:5601 +servers: + - url: https://localhost:5601 diff --git a/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}.yaml b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}.yaml new file mode 100644 index 0000000000000..30c33a27a37f6 --- /dev/null +++ b/x-pack/plugins/cases/docs/openapi/paths/s@{spaceid}@api@cases@{caseid}.yaml @@ -0,0 +1,36 @@ +get: + summary: Retrieves information about a case. + operationId: getCase + description: > + You must have `read` privileges for the **Cases** feature in the + **Management**, **Observability**, or **Security** section of the Kibana + feature privileges, depending on the owner of the case you're seeking. + tags: + - cases + - kibana + parameters: + - $ref: ../components/parameters/case_id.yaml + - $ref: '../components/parameters/space_id.yaml' + - in: query + name: includeComments + description: Determines whether case comments are returned. + deprecated: true + schema: + type: boolean + default: true + responses: + '200': + description: Indicates a successful call. + content: + application/json; charset=utf-8: + schema: + type: object + properties: + $ref: '../components/schemas/case_response_properties.yaml' + examples: + getCaseResponse: + $ref: '../components/examples/get_case_response.yaml' + servers: + - url: https://localhost:5601 +servers: + - url: https://localhost:5601 From d351c92b1a70f195eae73fd29da7c53773354247 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 14 Jul 2022 12:57:58 -0600 Subject: [PATCH 69/96] [Maps] change EMS tile layer display name to 'Basemap' (#136393) * [Maps] change EMS basemap display name to 'Basemap' * add tooltip content * revert getLayerTypeIconName deletion * change i18n tag * rename * eslint * fix functional tests * Update x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com> --- ...ile_layer.ts => ems_vector_tile_layer.tsx} | 13 +++++++++++- .../sources/ems_tms_source/ems_tms_source.tsx | 12 +++++++++-- .../apps/maps/group1/sample_data.js | 6 +++--- .../test/functional/page_objects/gis_page.ts | 5 +++++ .../upgrade/apps/maps/maps_smoke_tests.ts | 6 +++--- .../upgrade/services/maps_upgrade_services.ts | 21 ------------------- 6 files changed, 33 insertions(+), 30 deletions(-) rename x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/{ems_vector_tile_layer.ts => ems_vector_tile_layer.tsx} (97%) diff --git a/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.ts b/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx similarity index 97% rename from x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.ts rename to x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx index 05009abc7793b..bedf997566ec2 100644 --- a/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.ts +++ b/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx @@ -5,13 +5,15 @@ * 2.0. */ +import React from 'react'; import type { Map as MbMap, LayerSpecification, StyleSpecification } from '@kbn/mapbox-gl'; import { type blendMode, type EmsSpriteSheet, TMSService } from '@elastic/ems-client'; import { i18n } from '@kbn/i18n'; import _ from 'lodash'; +import { EuiIcon } from '@elastic/eui'; // @ts-expect-error import { RGBAImage } from './image_utils'; -import { AbstractLayer } from '../layer'; +import { AbstractLayer, type LayerIcon } from '../layer'; import { AUTOSELECT_EMS_LOCALE, NO_EMS_LOCALE, @@ -486,6 +488,15 @@ export class EmsVectorTileLayer extends AbstractLayer { return 'grid'; } + getLayerIcon(): LayerIcon { + return { + icon: , + tooltipContent: i18n.translate('xpack.maps.emsVectorTileLayer.layerDescription', { + defaultMessage: `Reference map provided by Elastic Maps Service (EMS).`, + }), + }; + } + isBasemap(order: number) { return order === 0; } diff --git a/x-pack/plugins/maps/public/classes/sources/ems_tms_source/ems_tms_source.tsx b/x-pack/plugins/maps/public/classes/sources/ems_tms_source/ems_tms_source.tsx index 6874820d561f7..cc094bc6caeef 100644 --- a/x-pack/plugins/maps/public/classes/sources/ems_tms_source/ems_tms_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/ems_tms_source/ems_tms_source.tsx @@ -66,7 +66,7 @@ export class EMSTMSSource extends AbstractSource implements ITMSSource { } async getImmutableProperties() { - const displayName = await this.getDisplayName(); + const tileServiceName = await this._getTileServiceName(); const autoSelectMsg = i18n.translate('xpack.maps.source.emsTile.isAutoSelectLabel', { defaultMessage: 'autoselect based on Kibana theme', }); @@ -80,7 +80,9 @@ export class EMSTMSSource extends AbstractSource implements ITMSSource { label: i18n.translate('xpack.maps.source.emsTile.serviceId', { defaultMessage: `Tile service`, }), - value: this._descriptor.isAutoSelect ? `${displayName} - ${autoSelectMsg}` : displayName, + value: this._descriptor.isAutoSelect + ? `${tileServiceName} - ${autoSelectMsg}` + : tileServiceName, }, ]; @@ -114,6 +116,12 @@ export class EMSTMSSource extends AbstractSource implements ITMSSource { } async getDisplayName() { + return i18n.translate('xpack.maps.source.emsTile.basemapLabel', { + defaultMessage: 'Basemap', + }); + } + + async _getTileServiceName() { try { const emsTMSService = await this._getEMSTMSService(); return emsTMSService.getDisplayName(); diff --git a/x-pack/test/functional/apps/maps/group1/sample_data.js b/x-pack/test/functional/apps/maps/group1/sample_data.js index a8ebc8ec6ba85..d9ef08ef712f1 100644 --- a/x-pack/test/functional/apps/maps/group1/sample_data.js +++ b/x-pack/test/functional/apps/maps/group1/sample_data.js @@ -68,7 +68,7 @@ export default function ({ getPageObjects, getService, updateBaselines }) { describe('ecommerce', () => { before(async () => { await PageObjects.maps.loadSavedMap('[eCommerce] Orders by Country'); - await PageObjects.maps.toggleLayerVisibility('Road map - desaturated'); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await PageObjects.maps.toggleLayerVisibility('United Kingdom'); await PageObjects.maps.toggleLayerVisibility('France'); await PageObjects.maps.toggleLayerVisibility('United States'); @@ -96,7 +96,7 @@ export default function ({ getPageObjects, getService, updateBaselines }) { describe('flights', () => { before(async () => { await PageObjects.maps.loadSavedMap('[Flights] Origin Time Delayed'); - await PageObjects.maps.toggleLayerVisibility('Road map - desaturated'); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); await PageObjects.maps.enterFullScreen(); await PageObjects.maps.closeLegend(); @@ -121,7 +121,7 @@ export default function ({ getPageObjects, getService, updateBaselines }) { before(async () => { await PageObjects.maps.loadSavedMap('[Logs] Total Requests and Bytes'); await PageObjects.maps.toggleLayerVisibility('Total Requests by Destination'); - await PageObjects.maps.toggleLayerVisibility('Road map - desaturated'); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); await PageObjects.maps.enterFullScreen(); await PageObjects.maps.closeLegend(); diff --git a/x-pack/test/functional/page_objects/gis_page.ts b/x-pack/test/functional/page_objects/gis_page.ts index e1b55d5eefe05..8e5e78a6154e7 100644 --- a/x-pack/test/functional/page_objects/gis_page.ts +++ b/x-pack/test/functional/page_objects/gis_page.ts @@ -302,6 +302,11 @@ export class GisPageObject extends FtrService { await this.testSubjects.click('layerVisibilityToggleButton'); } + // In 8.4, EMS basemap layers no longer use EMS tile service name, instead using "Basemap" + async toggleEmsBasemapLayerVisibility() { + await this.toggleLayerVisibility('Basemap'); + } + async openLegend() { const isOpen = await this.testSubjects.exists('mapLayerTOC'); if (isOpen === false) { diff --git a/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts b/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts index 334b4ce965905..db8e624ac4356 100644 --- a/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts +++ b/x-pack/test/upgrade/apps/maps/maps_smoke_tests.ts @@ -110,7 +110,7 @@ export default function ({ await PageObjects.home.launchSampleMap('ecommerce'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.maps.waitForLayersToLoad(); - await mapsHelper.toggleLayerVisibilityRoadMap(); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await PageObjects.maps.toggleLayerVisibility('United Kingdom'); await PageObjects.maps.toggleLayerVisibility('France'); await PageObjects.maps.toggleLayerVisibility('United States'); @@ -138,7 +138,7 @@ export default function ({ await PageObjects.home.launchSampleMap('flights'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.maps.waitForLayersToLoad(); - await mapsHelper.toggleLayerVisibilityRoadMap(); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); await PageObjects.maps.enterFullScreen(); await PageObjects.maps.closeLegend(); @@ -162,7 +162,7 @@ export default function ({ await PageObjects.home.launchSampleMap('logs'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.maps.waitForLayersToLoad(); - await mapsHelper.toggleLayerVisibilityRoadMap(); + await PageObjects.maps.toggleEmsBasemapLayerVisibility(); await mapsHelper.toggleLayerVisibilityTotalRequests(); await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); await PageObjects.maps.enterFullScreen(); diff --git a/x-pack/test/upgrade/services/maps_upgrade_services.ts b/x-pack/test/upgrade/services/maps_upgrade_services.ts index 28eafafc8663a..97adb3ca9ea8a 100644 --- a/x-pack/test/upgrade/services/maps_upgrade_services.ts +++ b/x-pack/test/upgrade/services/maps_upgrade_services.ts @@ -25,27 +25,6 @@ export function MapsHelper({ getPageObjects, getService }: FtrProviderContext) { } }, - // In v8.0, the default base map switched from bright to desaturated. - // https://github.com/elastic/kibana/pull/116179 - // Maps created before this change will have a base map called "Road map" - // Maps created after this change will have a base map called "Road map - desaturated" - // toggleLayerVisibilityRoadMap will toggle layer visibility for either value - async toggleLayerVisibilityRoadMap() { - const isRoadMapDesaturated = await testSubjects.exists( - 'layerTocActionsPanelToggleButtonRoad_map_-_desaturated' - ); - const isRoadMap = await testSubjects.exists('layerTocActionsPanelToggleButtonRoad_map'); - if (!isRoadMapDesaturated && !isRoadMap) { - throw new Error('Layer road map not found'); - } - if (isRoadMapDesaturated) { - await this.toggleLayerVisibility('Road map - desaturated'); - } - if (isRoadMap) { - await this.toggleLayerVisibility('Road map'); - } - }, - // In v7.16, e-commerce sample data was re-worked so that geo.src field to match country code of geo.coordinates // https://github.com/elastic/kibana/pull/110885 // Maps created before this change will have a layer called "Total Requests by Country" From 86a16274eb73ce6cede7cebd98745e8a8de90535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Istv=C3=A1n=20Zolt=C3=A1n=20Szab=C3=B3?= Date: Thu, 14 Jul 2022 20:59:22 +0200 Subject: [PATCH 70/96] [ML] Changes Learn more link URL on start deployment modal (#136381) --- packages/kbn-doc-links/src/get_doc_links.ts | 2 +- .../trained_models/models_management/models_list.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index ee2fb5143e92b..67bfabcbd0984 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -396,7 +396,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { classificationAucRoc: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-dfa-classification.html#ml-dfanalytics-class-aucroc`, setUpgradeMode: `${ELASTICSEARCH_DOCS}ml-set-upgrade-mode.html`, trainedModels: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-trained-models.html`, - startTrainedModelsDeploymentQueryParams: `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/reference/${DOC_LINK_VERSION}/start-trained-model-deployment.html#start-trained-model-deployment-query-params`, + startTrainedModelsDeployment: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-nlp-deploy-models.html#ml-nlp-deploy-model`, }, transforms: { guide: `${ELASTICSEARCH_DOCS}transforms.html`, diff --git a/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx b/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx index c8143a5c283e4..0c8f1aec7d97d 100644 --- a/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx @@ -94,7 +94,7 @@ export const ModelsList: FC = ({ } = useMlKibana(); const urlLocator = useMlLocator()!; - const startModelDeploymentDocUrl = docLinks.links.ml.startTrainedModelsDeploymentQueryParams; + const startModelDeploymentDocUrl = docLinks.links.ml.startTrainedModelsDeployment; useTimefilter({ timeRangeSelector: false, autoRefreshSelector: true }); From 26ce11cb2c5b85c95225eceb2539a8921d06145d Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Thu, 14 Jul 2022 12:04:53 -0700 Subject: [PATCH 71/96] [8.4][Kubernetes Security]Kubernetes widget Container Images Session (#134972) * base commit for container name session widget * Cleaned up + implemented suggestions from Jack and Paulo * Used Datagrid instead of table for this widget, TODO: Fix TS error ,styling fixes, Unit test * some clean up * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * some CSS updates * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * WIP, need to add infinite scroll * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * added infinite scroll, TODO: cleanup + Unit test * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * added Unit test * updated aggregate.ts * moved rendering filter button logic to another another component to prevent rerendering entire table * fixing CI failures * attempt to fix CI failures * more fixes for Check Types failure * undefined error fix? * more Check Types failure fixes * updated type in percent widget * addressed PR comments + added unit test for helper component * moved helper unit test to its own file, added loading progress bar * [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' * addressing PR comments * fetched latest main and added paulo's fix to aggregate route test * [CI] Auto-commit changed files from 'node scripts/precommit_hook.js --ref HEAD~1..HEAD --fix' * more pr comments * removed unused variable, updated aggregate route to match paulo branch * addressing PR comments * PR comments * Fix widgets spacing * correcting typo * Update widgets group min widths Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Jack --- .../kubernetes_security/common/constants.ts | 1 + .../common/translations.ts | 21 ++ .../common/types/aggregate/index.ts | 16 +- .../container_name_row.test.tsx | 43 ++++ .../container_name_row.tsx | 46 ++++ .../components/container_name_widget/hooks.ts | 56 +++++ .../container_name_widget/index.test.tsx | 135 +++++++++++ .../container_name_widget/index.tsx | 226 ++++++++++++++++++ .../container_name_widget/styles.ts | 62 +++++ .../public/components/count_widget/styles.ts | 1 + .../kubernetes_security_routes/index.test.tsx | 4 + .../kubernetes_security_routes/index.tsx | 37 +-- .../kubernetes_security_routes/styles.ts | 35 ++- .../public/components/percent_widget/hooks.ts | 34 +-- .../components/percent_widget/index.tsx | 2 +- .../kubernetes_security/public/hooks/index.ts | 1 + .../public/hooks/use_scroll.ts | 51 ++++ .../server/routes/aggregate.ts | 34 ++- .../basic/tests/aggregate.ts | 21 +- 19 files changed, 759 insertions(+), 67 deletions(-) create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.test.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/hooks.ts create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.test.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx create mode 100644 x-pack/plugins/kubernetes_security/public/components/container_name_widget/styles.ts create mode 100644 x-pack/plugins/kubernetes_security/public/hooks/use_scroll.ts diff --git a/x-pack/plugins/kubernetes_security/common/constants.ts b/x-pack/plugins/kubernetes_security/common/constants.ts index 625946b99a123..ce9497285f0c6 100644 --- a/x-pack/plugins/kubernetes_security/common/constants.ts +++ b/x-pack/plugins/kubernetes_security/common/constants.ts @@ -20,6 +20,7 @@ export const AGGREGATE_MAX_BUCKETS = 2000; // react-query caching keys export const QUERY_KEY_PERCENT_WIDGET = 'kubernetesSecurityPercentWidget'; export const QUERY_KEY_COUNT_WIDGET = 'kubernetesSecurityCountWidget'; +export const QUERY_KEY_CONTAINER_NAME_WIDGET = 'kubernetesSecurityContainerNameWidget'; export const DEFAULT_QUERY = '{"bool":{"must":[],"filter":[],"should":[],"must_not":[]}}'; diff --git a/x-pack/plugins/kubernetes_security/common/translations.ts b/x-pack/plugins/kubernetes_security/common/translations.ts index 0264be3e55bd5..7c139e88a0759 100644 --- a/x-pack/plugins/kubernetes_security/common/translations.ts +++ b/x-pack/plugins/kubernetes_security/common/translations.ts @@ -58,3 +58,24 @@ export const COUNT_WIDGET_CONTAINER_IMAGES = i18n.translate( defaultMessage: 'Container Images', } ); + +export const CONTAINER_NAME_SESSION = i18n.translate( + 'xpack.kubernetesSecurity.containerNameWidget.containerImage', + { + defaultMessage: 'Container Images Session', + } +); + +export const CONTAINER_NAME_SESSION_COUNT_COLUMN = i18n.translate( + 'xpack.kubernetesSecurity.containerNameWidget.containerImageCountColumn', + { + defaultMessage: 'Count', + } +); + +export const CONTAINER_NAME_SESSION_ARIA_LABEL = i18n.translate( + 'xpack.kubernetesSecurity.containerNameWidget.containerImageAriaLabel', + { + defaultMessage: 'Container Name Session Widget', + } +); diff --git a/x-pack/plugins/kubernetes_security/common/types/aggregate/index.ts b/x-pack/plugins/kubernetes_security/common/types/aggregate/index.ts index 70747aa8e878d..57a1df44292e9 100644 --- a/x-pack/plugins/kubernetes_security/common/types/aggregate/index.ts +++ b/x-pack/plugins/kubernetes_security/common/types/aggregate/index.ts @@ -5,11 +5,23 @@ * 2.0. */ -export interface AggregateResult { +interface Aggregate { key: string | number; - key_as_string?: string; doc_count: number; +} + +interface Buckets extends Aggregate { + key_as_string?: string; count_by_aggs: { value: number; }; } +export interface AggregateResult { + buckets: Buckets[]; + hasNextPage: boolean; +} + +export interface AggregateBucketPaginationResult { + buckets: Aggregate[]; + hasNextPage: boolean; +} diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.test.tsx b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.test.tsx new file mode 100644 index 0000000000000..8691288bd7c7a --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { AppContextTestRender, createAppRootMockRenderer } from '../../test'; +import { ContainerNameRow } from './container_name_row'; +import { fireEvent } from '@testing-library/react'; + +const TEST_NAME = 'TEST ROW'; +const TEST_BUTTON_FILTER =

    Filter In
    ; +const TEST_BUTTON_FILTER_OUT =
    Filter Out
    ; + +describe('ContainerNameRow component with valid row', () => { + let renderResult: ReturnType; + const mockedContext = createAppRootMockRenderer(); + const render: () => ReturnType = () => + (renderResult = mockedContext.render( + + )); + + it('should show the row element as well as the pop up filter button when mouse hovers above it', async () => { + render(); + expect(renderResult.getByText(TEST_NAME)).toBeVisible(); + fireEvent.mouseOver(renderResult.queryByText(TEST_NAME)!); + expect(renderResult.getByText('Filter In')).toBeVisible(); + expect(renderResult.getByText('Filter Out')).toBeVisible(); + }); + + it('should show the row element but not the pop up filter button outside mouse hover', async () => { + render(); + expect(renderResult.getByText(TEST_NAME)).toBeVisible(); + expect(renderResult.queryByText('Filter In')).toBeFalsy(); + expect(renderResult.queryByText('Filter Out')).toBeFalsy(); + }); +}); diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.tsx b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.tsx new file mode 100644 index 0000000000000..50bb4504f5d6d --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/container_name_row.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { ReactNode, useState } from 'react'; +import { EuiFlexItem, EuiText } from '@elastic/eui'; +import { useStyles } from './styles'; + +export interface ContainerNameRowDeps { + name: string; + filterButtonIn?: ReactNode; + filterButtonOut?: ReactNode; +} + +export const ROW_TEST_ID = 'kubernetesSecurity:containerNameSessionRow'; + +export const ContainerNameRow = ({ + name, + filterButtonIn, + filterButtonOut, +}: ContainerNameRowDeps) => { + const [isHover, setIsHover] = useState(false); + + const styles = useStyles(); + + return ( + setIsHover(true)} + onMouseLeave={() => setIsHover(false)} + data-test-subj={ROW_TEST_ID} + > + + {name} + {isHover && ( +
    + {filterButtonIn} + {filterButtonOut} +
    + )} +
    +
    + ); +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/hooks.ts b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/hooks.ts new file mode 100644 index 0000000000000..66dcbc5b50265 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/hooks.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useInfiniteQuery } from 'react-query'; +import { CoreStart } from '@kbn/core/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { QUERY_KEY_CONTAINER_NAME_WIDGET, AGGREGATE_ROUTE } from '../../../common/constants'; +import { AggregateResult } from '../../../common/types/aggregate'; + +export const useFetchContainerNameData = ( + filterQuery: string, + widgetKey: string, + groupBy: string, + countBy?: string, + index?: string, + sortByCount?: string, + pageNumber?: number +) => { + const { http } = useKibana().services; + const cachingKeys = [ + QUERY_KEY_CONTAINER_NAME_WIDGET, + widgetKey, + filterQuery, + groupBy, + countBy, + sortByCount, + pageNumber, + ]; + const query = useInfiniteQuery( + cachingKeys, + async ({ pageParam = 0 }) => { + const res = await http.get(AGGREGATE_ROUTE, { + query: { + query: filterQuery, + groupBy, + countBy, + page: pageParam, + index, + sortByCount, + }, + }); + return res; + }, + { + refetchOnWindowFocus: false, + refetchOnMount: false, + refetchOnReconnect: false, + getNextPageParam: (lastPage, pages) => (lastPage.hasNextPage ? pages.length : undefined), + } + ); + return query; +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.test.tsx new file mode 100644 index 0000000000000..bdafb47a8b246 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.test.tsx @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { ENTRY_LEADER_ENTITY_ID, CONTAINER_IMAGE_NAME } from '../../../common/constants'; +import { AppContextTestRender, createAppRootMockRenderer } from '../../test'; +import { GlobalFilter } from '../../types'; +import { + ContainerNameWidget, + LOADING_TEST_ID, + NAME_COLUMN_TEST_ID, + COUNT_COLUMN_TEST_ID, + CONTAINER_NAME_TABLE_TEST_ID, +} from '.'; +import { useFetchContainerNameData } from './hooks'; +import { ROW_TEST_ID } from './container_name_row'; + +const TABLE_SORT_BUTTON_ID = 'tableHeaderSortButton'; + +const TITLE = 'Container Images Session'; +const GLOBAL_FILTER: GlobalFilter = { + endDate: '2022-06-15T14:15:25.777Z', + filterQuery: '{"bool":{"must":[],"filter":[],"should":[],"must_not":[]}}', + startDate: '2022-05-15T14:15:25.777Z', +}; +const MOCK_DATA = { + pages: [ + { + buckets: [ + { key: 'Container A', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container B', doc_count: 295, count_by_aggs: { value: 3 } }, + { key: 'Container C', doc_count: 295, count_by_aggs: { value: 2 } }, + { key: 'Container D', doc_count: 295, count_by_aggs: { value: 4 } }, + { key: 'Container E', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container F', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container G', doc_count: 295, count_by_aggs: { value: 0 } }, + { key: 'Container H', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container J', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container K', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container L', doc_count: 295, count_by_aggs: { value: 5 } }, + ], + hasNextPage: true, + }, + { + buckets: [ + { key: 'Container A2', doc_count: 295, count_by_aggs: { value: 2 } }, + { key: 'Container B2', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container C2', doc_count: 295, count_by_aggs: { value: 6 } }, + { key: 'Container D2', doc_count: 295, count_by_aggs: { value: 1 } }, + { key: 'Container E2', doc_count: 295, count_by_aggs: { value: 3 } }, + { key: 'Container F2', doc_count: 295, count_by_aggs: { value: 1 } }, + ], + hasNextPage: false, + }, + ], + pageParams: [undefined], +}; + +jest.mock('../../hooks/use_filter', () => ({ + useSetFilter: () => ({ + getFilterForValueButton: jest.fn(), + getFilterOutValueButton: jest.fn(), + filterManager: {}, + }), +})); + +jest.mock('./hooks'); +const mockUseFetchData = useFetchContainerNameData as jest.Mock; + +describe('ContainerNameWidget component', () => { + let renderResult: ReturnType; + const mockedContext = createAppRootMockRenderer(); + const render: () => ReturnType = () => + (renderResult = mockedContext.render( + + )); + + describe('When ContainerNameWidget is mounted', () => { + describe('with data', () => { + beforeEach(() => { + mockUseFetchData.mockImplementation(() => ({ + data: MOCK_DATA, + isFetchingNextPage: true, + })); + }); + + it('should show the table, table title, table columns, sort button', async () => { + render(); + expect(renderResult.queryByTestId(CONTAINER_NAME_TABLE_TEST_ID)).toBeVisible(); + expect(renderResult.queryAllByTestId(TABLE_SORT_BUTTON_ID)).toHaveLength(1); + expect(renderResult.queryAllByTestId(NAME_COLUMN_TEST_ID)).toHaveLength(17); + expect(renderResult.queryAllByTestId(COUNT_COLUMN_TEST_ID)).toHaveLength(17); + }); + + it('should show data value names and value', async () => { + render(); + expect(renderResult.queryAllByTestId(ROW_TEST_ID)).toHaveLength(17); + }); + }); + + describe('without data ', () => { + it('should show no items found text', async () => { + mockUseFetchData.mockImplementation(() => ({ + data: undefined, + isFetchingNextPage: false, + })); + render(); + expect(renderResult.getByText(TITLE)).toBeVisible(); + expect(renderResult.getByText('No items found')).toBeVisible(); + expect(renderResult.getByTestId(CONTAINER_NAME_TABLE_TEST_ID)).toBeVisible(); + }); + }); + + describe('when loading data', () => { + it('should show progress bar', async () => { + mockUseFetchData.mockImplementation(() => ({ + data: MOCK_DATA, + isFetchingNextPage: false, + isLoading: true, + })); + render(); + expect(renderResult.getByTestId(LOADING_TEST_ID)).toBeVisible(); + }); + }); + }); +}); diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx new file mode 100644 index 0000000000000..15f3727efa660 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx @@ -0,0 +1,226 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { ReactNode, useMemo, useState, useRef, useCallback } from 'react'; +import { EuiBasicTable, EuiTableSortingType, EuiProgress, EuiBasicTableColumn } from '@elastic/eui'; +import { useStyles } from './styles'; +import { ContainerNameRow } from './container_name_row'; +import type { IndexPattern, GlobalFilter } from '../../types'; +import { useSetFilter, useScroll } from '../../hooks'; +import { addTimerangeToQuery } from '../../utils/add_timerange_to_query'; +import { useFetchContainerNameData } from './hooks'; +import { CONTAINER_IMAGE_NAME } from '../../../common/constants'; +import { + CONTAINER_NAME_SESSION, + CONTAINER_NAME_SESSION_COUNT_COLUMN, + CONTAINER_NAME_SESSION_ARIA_LABEL, +} from '../../../common/translations'; + +export const LOADING_TEST_ID = 'kubernetesSecurity:containerNameWidgetLoading'; +export const NAME_COLUMN_TEST_ID = 'kubernetesSecurity:containerImageNameSessionNameColumn'; +export const COUNT_COLUMN_TEST_ID = 'kubernetesSecurity:containerImageNameSessionCountColumn'; +export const CONTAINER_NAME_TABLE_TEST_ID = 'kubernetesSecurity:containerNameSessionTable'; + +export interface ContainerNameWidgetDataValueMap { + key: string; + doc_count: number; + count_by_aggs: { + value: number; + }; +} + +export interface ContainerNameArrayDataValue { + name: string; + count: number; +} + +export interface ContainerNameWidgetDeps { + widgetKey: string; + indexPattern?: IndexPattern; + globalFilter: GlobalFilter; + groupedBy: string; + countBy?: string; +} + +interface FilterButtons { + filterForButtons: ReactNode[]; + filterOutButtons: ReactNode[]; +} + +export const ContainerNameWidget = ({ + widgetKey, + indexPattern, + globalFilter, + groupedBy, + countBy, +}: ContainerNameWidgetDeps) => { + const [sortField, setSortField] = useState('count'); + const [sortDirection, setSortDirection] = useState('desc'); + const styles = useStyles(); + + const filterQueryWithTimeRange = useMemo(() => { + return addTimerangeToQuery( + globalFilter.filterQuery, + globalFilter.startDate, + globalFilter.endDate + ); + }, [globalFilter.filterQuery, globalFilter.startDate, globalFilter.endDate]); + + const { data, fetchNextPage, isFetchingNextPage, isLoading } = useFetchContainerNameData( + filterQueryWithTimeRange, + widgetKey, + groupedBy, + countBy, + indexPattern?.title, + sortDirection + ); + + const onTableChange = useCallback(({ sort = {} }) => { + // @ts-ignore + const { field: sortingField, direction: sortingDirection } = sort; + + setSortField(sortingField); + setSortDirection(sortingDirection); + }, []); + + const sorting: EuiTableSortingType = { + sort: { + field: sortField as keyof ContainerNameArrayDataValue, + direction: sortDirection as 'desc' | 'asc', + }, + enableAllColumns: true, + }; + + const { getFilterForValueButton, getFilterOutValueButton, filterManager } = useSetFilter(); + const filterButtons = useMemo((): FilterButtons => { + const result: FilterButtons = { + filterForButtons: + data?.pages + ?.map((aggsData) => { + return aggsData?.buckets.map((aggData) => { + return getFilterForValueButton({ + field: CONTAINER_IMAGE_NAME, + filterManager, + size: 'xs', + onClick: () => {}, + onFilterAdded: () => {}, + ownFocus: false, + showTooltip: true, + value: aggData.key as string, + }); + }); + }) + .flat() || [], + + filterOutButtons: + data?.pages + ?.map((aggsData) => { + return aggsData?.buckets.map((aggData) => { + return getFilterOutValueButton({ + field: CONTAINER_IMAGE_NAME, + filterManager, + size: 'xs', + onClick: () => {}, + onFilterAdded: () => {}, + ownFocus: false, + showTooltip: true, + value: aggData.key as string, + }); + }); + }) + .flat() || [], + }; + return result; + }, [data, getFilterForValueButton, getFilterOutValueButton, filterManager]); + + const containerNameArray = useMemo((): ContainerNameArrayDataValue[] => { + return data + ? data?.pages + ?.map((aggsData) => { + return aggsData?.buckets.map((aggData) => { + return { + name: aggData.key as string, + count: aggData.count_by_aggs.value, + }; + }); + }) + .flat() + : []; + }, [data]); + + const columns = useMemo((): Array> => { + return [ + { + field: 'name', + name: CONTAINER_NAME_SESSION, + 'data-test-subj': NAME_COLUMN_TEST_ID, + render: (name: string) => { + const indexHelper = containerNameArray.findIndex((obj) => { + return obj.name === name; + }); + + return ( + + ); + }, + align: 'left', + width: '74%', + sortable: false, + }, + { + field: 'count', + name: CONTAINER_NAME_SESSION_COUNT_COLUMN, + width: '26%', + 'data-test-subj': COUNT_COLUMN_TEST_ID, + render: (count: number) => { + return {count}; + }, + sortable: true, + align: 'right', + }, + ]; + }, [filterButtons.filterForButtons, filterButtons.filterOutButtons, containerNameArray, styles]); + + const scrollerRef = useRef(null); + useScroll({ + div: scrollerRef.current, + handler: (pos: number, endReached: boolean) => { + if (!isFetchingNextPage && endReached) { + fetchNextPage(); + } + }, + }); + + return ( +
    + {isLoading && ( + + )} + +
    + ); +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/styles.ts b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/styles.ts new file mode 100644 index 0000000000000..7e676b3e03445 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/styles.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { CSSObject } from '@emotion/react'; +import { transparentize } from '@elastic/eui'; +import { useEuiTheme } from '../../hooks'; + +export const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + const cached = useMemo(() => { + const { size, font, colors } = euiTheme; + + const container: CSSObject = { + padding: size.base, + border: euiTheme.border.thin, + borderRadius: euiTheme.border.radius.medium, + overflow: 'auto', + height: '100%', + minHeight: '250px', + position: 'relative', + marginBottom: size.l, + }; + + const dataInfo: CSSObject = { + marginBottom: size.xs, + display: 'flex', + alignItems: 'center', + height: size.l, + position: 'relative', + }; + + const filters: CSSObject = { + marginLeft: size.s, + position: 'absolute', + left: '50%', + backgroundColor: colors.emptyShade, + borderRadius: euiTheme.border.radius.small, + border: euiTheme.border.thin, + bottom: '-25px', + boxShadow: `0 ${size.xs} ${size.xs} ${transparentize(euiTheme.colors.shadow, 0.04)}`, + }; + + const countValue: CSSObject = { + fontWeight: font.weight.semiBold, + }; + + return { + container, + dataInfo, + filters, + countValue, + }; + }, [euiTheme]); + + return cached; +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts b/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts index b02f30fa952fa..adea8ee704c97 100644 --- a/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts +++ b/x-pack/plugins/kubernetes_security/public/components/count_widget/styles.ts @@ -21,6 +21,7 @@ export const useStyles = () => { borderRadius: border.radius.medium, overflow: 'auto', position: 'relative', + height: '100%', }; const title: CSSObject = { diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx index 5399975091420..ea9b8b11da891 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.test.tsx @@ -25,6 +25,10 @@ jest.mock('../count_widget', () => ({ CountWidget: () =>
    {'Mock count widget'}
    , })); +jest.mock('../container_name_widget', () => ({ + ContainerNameWidget: () =>
    {'Mock Container Name widget'}
    , +})); + const renderWithRouter = ( initialEntries: MemoryRouterProps['initialEntries'] = ['/kubernetes'] ) => { diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx index 7be342a782d98..6387c7e961f9c 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/index.tsx @@ -44,6 +44,7 @@ import { COUNT_WIDGET_PODS, COUNT_WIDGET_CONTAINER_IMAGES, } from '../../../common/translations'; +import { ContainerNameWidget } from '../container_name_widget'; const KubernetesSecurityRoutesComponent = ({ filter, @@ -59,8 +60,8 @@ const KubernetesSecurityRoutesComponent = ({ const lastUpdated = useLastUpdated(globalFilter); const onReduceInteractiveAggs = useCallback( - (result: AggregateResult[]): Record => - result.reduce((groupedByKeyValue, aggregate) => { + (result: AggregateResult): Record => + result.buckets.reduce((groupedByKeyValue, aggregate) => { groupedByKeyValue[aggregate.key_as_string || (aggregate.key.toString() as string)] = aggregate.count_by_aggs.value; return groupedByKeyValue; @@ -69,9 +70,9 @@ const KubernetesSecurityRoutesComponent = ({ ); const onReduceRootAggs = useCallback( - (result: AggregateResult[]): Record => - result.reduce((groupedByKeyValue, aggregate) => { - if (aggregate.key === '0') { + (result: AggregateResult): Record => + result.buckets.reduce((groupedByKeyValue, aggregate) => { + if (aggregate.key.toString() === '0') { groupedByKeyValue[aggregate.key] = aggregate.count_by_aggs.value; } else { groupedByKeyValue.nonRoot = @@ -106,9 +107,9 @@ const KubernetesSecurityRoutesComponent = ({ {!shouldHideCharts && ( <> - - - + + + - - + + @@ -208,7 +209,7 @@ const KubernetesSecurityRoutesComponent = ({ onReduce={onReduceInteractiveAggs} /> - + @@ -257,12 +258,14 @@ const KubernetesSecurityRoutesComponent = ({ - - - -
    PlaceHolder for Container Name Widget
    -
    -
    + +
    diff --git a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts index 49e41b4cbca38..aa35cd8a22a4f 100644 --- a/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts +++ b/x-pack/plugins/kubernetes_security/public/components/kubernetes_security_routes/styles.ts @@ -48,8 +48,26 @@ export const useStyles = () => { height: '500px', }; - const percentageWidgets: CSSObject = { - marginBottom: size.l, + const widgetsBottomSpacing: CSSObject = { + marginBottom: size.m, + }; + + const noBottomSpacing: CSSObject = { + marginBottom: 0, + }; + + const countWidgetsGroup: CSSObject = { + ...widgetsBottomSpacing, + flexWrap: 'wrap', + }; + + const leftWidgetsGroup: CSSObject = { + ...noBottomSpacing, + minWidth: `calc(70% - ${size.xxxl})`, + }; + + const rightWidgetsGroup: CSSObject = { + minWidth: '30%', }; const percentageChartTitle: CSSObject = { @@ -58,16 +76,10 @@ export const useStyles = () => { fontWeight: font.weight.bold, }; - const countWidgets: CSSObject = { - marginBottom: size.l, - }; - const widgetHolder: CSSObject = { position: 'relative', width: '332px', height: '235px', - padding: size.base, - border: border.thin, borderRadius: border.radius.medium, fontWeight: font.weight.bold, fontSize: size.m, @@ -80,9 +92,12 @@ export const useStyles = () => { updatedAt, widgetBadge, treeViewContainer, - percentageWidgets, + countWidgetsGroup, + leftWidgetsGroup, + rightWidgetsGroup, + widgetsBottomSpacing, percentageChartTitle, - countWidgets, + noBottomSpacing, widgetHolder, }; }, [euiTheme]); diff --git a/x-pack/plugins/kubernetes_security/public/components/percent_widget/hooks.ts b/x-pack/plugins/kubernetes_security/public/components/percent_widget/hooks.ts index decdb0c6e27a9..f13cdfa0ac7a4 100644 --- a/x-pack/plugins/kubernetes_security/public/components/percent_widget/hooks.ts +++ b/x-pack/plugins/kubernetes_security/public/components/percent_widget/hooks.ts @@ -11,7 +11,7 @@ import { QUERY_KEY_PERCENT_WIDGET, AGGREGATE_ROUTE } from '../../../common/const import { AggregateResult } from '../../../common/types/aggregate'; export const useFetchPercentWidgetData = ( - onReduce: (result: AggregateResult[]) => Record, + onReduce: (result: AggregateResult) => Record, filterQuery: string, widgetKey: string, groupBy: string, @@ -20,27 +20,19 @@ export const useFetchPercentWidgetData = ( ) => { const { http } = useKibana().services; const cachingKeys = [QUERY_KEY_PERCENT_WIDGET, widgetKey, filterQuery, groupBy, countBy, index]; - const query = useQuery( - cachingKeys, - async (): Promise> => { - const res = await http.get(AGGREGATE_ROUTE, { - query: { - query: filterQuery, - groupBy, - countBy, - page: 0, - index, - }, - }); + const query = useQuery(cachingKeys, async (): Promise> => { + const res = await http.get(AGGREGATE_ROUTE, { + query: { + query: filterQuery, + groupBy, + countBy, + page: 0, + index, + }, + }); - return onReduce(res); - }, - { - refetchOnWindowFocus: false, - refetchOnMount: false, - refetchOnReconnect: false, - } - ); + return onReduce(res); + }); return query; }; diff --git a/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx index 0c3cb3da9c5a8..21c068978a345 100644 --- a/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx @@ -32,7 +32,7 @@ export interface PercentWidgetDeps { globalFilter: GlobalFilter; groupedBy: string; countBy?: string; - onReduce: (result: AggregateResult[]) => Record; + onReduce: (result: AggregateResult) => Record; } interface FilterButtons { diff --git a/x-pack/plugins/kubernetes_security/public/hooks/index.ts b/x-pack/plugins/kubernetes_security/public/hooks/index.ts index 14d956be9b629..2e330dfb1b159 100644 --- a/x-pack/plugins/kubernetes_security/public/hooks/index.ts +++ b/x-pack/plugins/kubernetes_security/public/hooks/index.ts @@ -8,3 +8,4 @@ export { useEuiTheme } from './use_eui_theme'; export { useSetFilter } from './use_filter'; export { useLastUpdated } from './use_last_updated'; +export { useScroll } from './use_scroll'; diff --git a/x-pack/plugins/kubernetes_security/public/hooks/use_scroll.ts b/x-pack/plugins/kubernetes_security/public/hooks/use_scroll.ts new file mode 100644 index 0000000000000..716e35dbb0987 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/hooks/use_scroll.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect } from 'react'; +import _ from 'lodash'; + +const SCROLL_END_BUFFER_HEIGHT = 20; +const DEBOUNCE_TIMEOUT = 500; + +function getScrollPosition(div: HTMLElement) { + if (div) { + return div.scrollTop; + } else { + return document.documentElement.scrollTop || document.body.scrollTop; + } +} + +interface IUseScrollDeps { + div: HTMLElement | null; + handler(pos: number, endReached: boolean): void; +} + +/** + * listens to scroll events on given div, if scroll reaches bottom, calls a callback + * @param {ref} ref to listen to scroll events on + * @param {function} handler function receives params (scrollTop, endReached) + */ +export function useScroll({ div, handler }: IUseScrollDeps) { + useEffect(() => { + if (div) { + const debounced = _.debounce(() => { + const pos = getScrollPosition(div); + const endReached = pos + div.offsetHeight > div.scrollHeight - SCROLL_END_BUFFER_HEIGHT; + + handler(pos, endReached); + }, DEBOUNCE_TIMEOUT); + + div.onscroll = debounced; + + return () => { + debounced.cancel(); + + div.onscroll = null; + }; + } + }, [div, handler]); +} diff --git a/x-pack/plugins/kubernetes_security/server/routes/aggregate.ts b/x-pack/plugins/kubernetes_security/server/routes/aggregate.ts index 252b20a458a78..e56a17d89845f 100644 --- a/x-pack/plugins/kubernetes_security/server/routes/aggregate.ts +++ b/x-pack/plugins/kubernetes_security/server/routes/aggregate.ts @@ -14,6 +14,7 @@ import { AGGREGATE_PAGE_SIZE, AGGREGATE_MAX_BUCKETS, } from '../../common/constants'; +import { AggregateBucketPaginationResult } from '../../common/types/aggregate'; // sort by values const ASC = 'asc'; @@ -29,6 +30,7 @@ export const registerAggregateRoute = (router: IRouter) => { countBy: schema.maybe(schema.string()), groupBy: schema.string(), page: schema.number(), + perPage: schema.maybe(schema.number()), index: schema.maybe(schema.string()), sortByCount: schema.maybe(schema.string()), }), @@ -36,10 +38,19 @@ export const registerAggregateRoute = (router: IRouter) => { }, async (context, request, response) => { const client = (await context.core).elasticsearch.client.asCurrentUser; - const { query, countBy, sortByCount, groupBy, page, index } = request.query; + const { query, countBy, sortByCount, groupBy, page, perPage, index } = request.query; try { - const body = await doSearch(client, query, groupBy, page, index, countBy, sortByCount); + const body = await doSearch( + client, + query, + groupBy, + page, + perPage, + index, + countBy, + sortByCount + ); return response.ok({ body }); } catch (err) { @@ -54,10 +65,11 @@ export const doSearch = async ( query: string, groupBy: string, page: number, // zero based + perPage = AGGREGATE_PAGE_SIZE, index?: string, countBy?: string, sortByCount?: string -) => { +): Promise => { const queryDSL = JSON.parse(query); const countByAggs = countBy @@ -91,8 +103,8 @@ export const doSearch = async ( bucket_sort: { bucket_sort: { sort: [sort], // defaulting to alphabetic sort - size: AGGREGATE_PAGE_SIZE, - from: AGGREGATE_PAGE_SIZE * page, + size: perPage + 1, // check if there's a "next page" + from: perPage * page, }, }, }, @@ -102,6 +114,16 @@ export const doSearch = async ( }); const agg: any = search.aggregations?.custom_agg; + const buckets = agg?.buckets || []; - return agg?.buckets || []; + const hasNextPage = buckets.length > perPage; + + if (hasNextPage) { + buckets.pop(); + } + + return { + buckets, + hasNextPage, + }; }; diff --git a/x-pack/test/kubernetes_security/basic/tests/aggregate.ts b/x-pack/test/kubernetes_security/basic/tests/aggregate.ts index c1501c97e77e5..92d6da4655cf4 100644 --- a/x-pack/test/kubernetes_security/basic/tests/aggregate.ts +++ b/x-pack/test/kubernetes_security/basic/tests/aggregate.ts @@ -42,12 +42,13 @@ export default function aggregateTests({ getService }: FtrProviderContext) { groupBy: ORCHESTRATOR_NAMESPACE_PROPERTY, page: 0, index: MOCK_INDEX, + perPage: 10, }); expect(response.status).to.be(200); - expect(response.body.length).to.be(10); + expect(response.body.buckets.length).to.be(10); namespaces.forEach((namespace, i) => { - expect(response.body[i].key).to.be(namespace); + expect(response.body.buckets[i].key).to.be(namespace); }); }); @@ -62,8 +63,8 @@ export default function aggregateTests({ getService }: FtrProviderContext) { index: MOCK_INDEX, }); expect(response.status).to.be(200); - expect(response.body.length).to.be(1); - expect(response.body[0].key).to.be('namespace11'); + expect(response.body.buckets.length).to.be(1); + expect(response.body.buckets[0].key).to.be('namespace11'); }); it(`${AGGREGATE_ROUTE} return countBy value for each aggregation`, async () => { @@ -78,10 +79,10 @@ export default function aggregateTests({ getService }: FtrProviderContext) { index: MOCK_INDEX, }); expect(response.status).to.be(200); - expect(response.body.length).to.be(10); + expect(response.body.buckets.length).to.be(10); // when groupBy and countBy use the same field, count_by_aggs.value will always be 1 - response.body.forEach((agg: any) => { + response.body.buckets.forEach((agg: any) => { expect(agg.count_by_aggs.value).to.be(1); }); }); @@ -99,9 +100,9 @@ export default function aggregateTests({ getService }: FtrProviderContext) { sortByCount: 'desc', }); expect(response.status).to.be(200); - expect(response.body.length).to.be(10); - expect(response.body[0].count_by_aggs.value).to.be(2); - expect(response.body[1].count_by_aggs.value).to.be(1); + expect(response.body.buckets.length).to.be(10); + expect(response.body.buckets[0].count_by_aggs.value).to.be(2); + expect(response.body.buckets[1].count_by_aggs.value).to.be(1); }); it(`${AGGREGATE_ROUTE} allows a range query`, async () => { @@ -122,7 +123,7 @@ export default function aggregateTests({ getService }: FtrProviderContext) { index: MOCK_INDEX, }); expect(response.status).to.be(200); - expect(response.body.length).to.be(3); + expect(response.body.buckets.length).to.be(3); }); it(`${AGGREGATE_ROUTE} handles a bad request`, async () => { From 33b743c84e9d27e6a0234ebea85964ce0ddefb24 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 14 Jul 2022 14:53:12 -0500 Subject: [PATCH 72/96] Revert "Remove percy based visual regression tests (#136359)" (#136437) * Revert "Remove percy based visual regression tests (#136359)" This reverts commit a91aeb42ffef8d34f1fa0c8af81877e9dfa7f66a. * update codeowners --- .buildkite/ftr_configs.yml | 2 + .eslintrc.js | 1 + .github/CODEOWNERS | 3 + package.json | 1 + packages/kbn-pm/dist/index.js | 88 ++-- test/visual_regression/config.ts | 30 ++ .../visual_regression/ftr_provider_context.ts | 15 + test/visual_regression/services/index.ts | 15 + .../services/visual_testing/index.ts | 9 + .../visual_testing/take_percy_snapshot.js | 102 +++++ .../services/visual_testing/visual_testing.ts | 114 +++++ test/visual_regression/tests/console_app.ts | 71 +++ .../tests/discover/chart_visualization.ts | 117 +++++ .../visual_regression/tests/discover/index.ts | 25 ++ test/visual_regression/tests/vega/index.ts | 25 ++ .../tests/vega/vega_map_visualization.ts | 39 ++ x-pack/test/visual_regression/config.ts | 31 ++ .../ftr_provider_context.d.ts | 13 + x-pack/test/visual_regression/page_objects.ts | 10 + x-pack/test/visual_regression/services.ts | 14 + .../tests/canvas/fullscreen.js | 25 ++ .../visual_regression/tests/canvas/index.js | 30 ++ .../visual_regression/tests/infra/index.js | 19 + .../tests/infra/saved_views.js | 87 ++++ .../tests/infra/waffle_map.js | 27 ++ .../visual_regression/tests/login_page.ts | 58 +++ .../visual_regression/tests/maps/index.js | 61 +++ .../tests/maps/vector_styling.js | 49 +++ yarn.lock | 415 +++++++++++++++++- 29 files changed, 1430 insertions(+), 66 deletions(-) create mode 100644 test/visual_regression/config.ts create mode 100644 test/visual_regression/ftr_provider_context.ts create mode 100644 test/visual_regression/services/index.ts create mode 100644 test/visual_regression/services/visual_testing/index.ts create mode 100644 test/visual_regression/services/visual_testing/take_percy_snapshot.js create mode 100644 test/visual_regression/services/visual_testing/visual_testing.ts create mode 100644 test/visual_regression/tests/console_app.ts create mode 100644 test/visual_regression/tests/discover/chart_visualization.ts create mode 100644 test/visual_regression/tests/discover/index.ts create mode 100644 test/visual_regression/tests/vega/index.ts create mode 100644 test/visual_regression/tests/vega/vega_map_visualization.ts create mode 100644 x-pack/test/visual_regression/config.ts create mode 100644 x-pack/test/visual_regression/ftr_provider_context.d.ts create mode 100644 x-pack/test/visual_regression/page_objects.ts create mode 100644 x-pack/test/visual_regression/services.ts create mode 100644 x-pack/test/visual_regression/tests/canvas/fullscreen.js create mode 100644 x-pack/test/visual_regression/tests/canvas/index.js create mode 100644 x-pack/test/visual_regression/tests/infra/index.js create mode 100644 x-pack/test/visual_regression/tests/infra/saved_views.js create mode 100644 x-pack/test/visual_regression/tests/infra/waffle_map.js create mode 100644 x-pack/test/visual_regression/tests/login_page.ts create mode 100644 x-pack/test/visual_regression/tests/maps/index.js create mode 100644 x-pack/test/visual_regression/tests/maps/vector_styling.js diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index ef21725869c3e..39a8b8b9f0a66 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -44,6 +44,8 @@ disabled: - x-pack/plugins/observability/e2e/synthetics_run.ts # Configs that exist but weren't running in CI when this file was introduced + - test/visual_regression/config.ts + - x-pack/test/visual_regression/config.ts - x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/config.ts - x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/telemetry/config.ts - x-pack/test/alerting_api_integration/spaces_only_legacy/config.ts diff --git a/.eslintrc.js b/.eslintrc.js index 9ed08807b8e23..385d241e52fff 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -702,6 +702,7 @@ module.exports = { 'test/*/config_open.ts', 'test/*/*.config.ts', 'test/*/{tests,test_suites,apis,apps}/**/*', + 'test/visual_regression/tests/**/*', 'x-pack/test/*/{tests,test_suites,apis,apps}/**/*', 'x-pack/test/*/*config.*ts', 'x-pack/test/saved_object_api_integration/*/apis/**/*', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8b0af587e0032..3fb8a5f2d1b8e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -210,6 +210,7 @@ /x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis /x-pack/test/functional/apps/maps/ @elastic/kibana-gis /x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis +/x-pack/test/visual_regression/tests/maps/index.js @elastic/kibana-gis /x-pack/plugins/stack_alerts/server/alert_types/geo_containment @elastic/kibana-gis /x-pack/plugins/stack_alerts/public/alert_types/geo_containment @elastic/kibana-gis #CC# /x-pack/plugins/file_upload @elastic/kibana-gis @@ -265,6 +266,8 @@ /test/functional/services/common @elastic/kibana-qa /test/functional/services/lib @elastic/kibana-qa /test/functional/services/remote @elastic/kibana-qa +/test/visual_regression @elastic/kibana-qa +/x-pack/test/visual_regression @elastic/kibana-qa # Core /examples/hello_world/ @elastic/kibana-core diff --git a/package.json b/package.json index 42da0114078f0..9294089cb355a 100644 --- a/package.json +++ b/package.json @@ -616,6 +616,7 @@ "@mapbox/vector-tile": "1.3.1", "@octokit/rest": "^16.35.0", "@openpgp/web-stream-tools": "^0.0.10", + "@percy/agent": "^0.28.6", "@storybook/addon-a11y": "^6.4.22", "@storybook/addon-actions": "^6.4.22", "@storybook/addon-controls": "^6.4.22", diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index e9e0fd88618fe..647e8a8d4bbbe 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -23844,7 +23844,7 @@ module.exports.sync = (patterns, {force, dryRun, cwd = process.cwd(), ...options "use strict"; -const indentString = __webpack_require__("../../node_modules/indent-string/index.js"); +const indentString = __webpack_require__("../../node_modules/del/node_modules/indent-string/index.js"); const cleanStack = __webpack_require__("../../node_modules/clean-stack/index.js"); const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); @@ -24257,6 +24257,49 @@ module.exports = { }; +/***/ }), + +/***/ "../../node_modules/del/node_modules/indent-string/index.js": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = (string, count = 1, options) => { + options = { + indent: ' ', + includeEmptyLines: false, + ...options + }; + + if (typeof string !== 'string') { + throw new TypeError( + `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` + ); + } + + if (typeof count !== 'number') { + throw new TypeError( + `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` + ); + } + + if (typeof options.indent !== 'string') { + throw new TypeError( + `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` + ); + } + + if (count === 0) { + return string; + } + + const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + + return string.replace(regex, options.indent.repeat(count)); +}; + + /***/ }), /***/ "../../node_modules/del/node_modules/p-map/index.js": @@ -34306,49 +34349,6 @@ if ( }()); -/***/ }), - -/***/ "../../node_modules/indent-string/index.js": -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = (string, count = 1, options) => { - options = { - indent: ' ', - includeEmptyLines: false, - ...options - }; - - if (typeof string !== 'string') { - throw new TypeError( - `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` - ); - } - - if (typeof count !== 'number') { - throw new TypeError( - `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` - ); - } - - if (typeof options.indent !== 'string') { - throw new TypeError( - `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` - ); - } - - if (count === 0) { - return string; - } - - const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; - - return string.replace(regex, options.indent.repeat(count)); -}; - - /***/ }), /***/ "../../node_modules/inflight/inflight.js": diff --git a/test/visual_regression/config.ts b/test/visual_regression/config.ts new file mode 100644 index 0000000000000..294848246e7c8 --- /dev/null +++ b/test/visual_regression/config.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; +import { services } from './services'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); + + return { + ...functionalConfig.getAll(), + + testFiles: [ + require.resolve('./tests/console_app'), + require.resolve('./tests/discover'), + require.resolve('./tests/vega'), + ], + + services, + + junit: { + reportName: 'Kibana Visual Regression Tests', + }, + }; +} diff --git a/test/visual_regression/ftr_provider_context.ts b/test/visual_regression/ftr_provider_context.ts new file mode 100644 index 0000000000000..28bedd1ca6bc3 --- /dev/null +++ b/test/visual_regression/ftr_provider_context.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { GenericFtrProviderContext, GenericFtrService } from '@kbn/test'; + +import { pageObjects } from '../functional/page_objects'; +import { services } from './services'; + +export type FtrProviderContext = GenericFtrProviderContext; +export class FtrService extends GenericFtrService {} diff --git a/test/visual_regression/services/index.ts b/test/visual_regression/services/index.ts new file mode 100644 index 0000000000000..9aefe1f8de780 --- /dev/null +++ b/test/visual_regression/services/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { services as functionalServices } from '../../functional/services'; +import { VisualTestingService } from './visual_testing'; + +export const services = { + ...functionalServices, + visualTesting: VisualTestingService, +}; diff --git a/test/visual_regression/services/visual_testing/index.ts b/test/visual_regression/services/visual_testing/index.ts new file mode 100644 index 0000000000000..156e3814d8a1d --- /dev/null +++ b/test/visual_regression/services/visual_testing/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './visual_testing'; diff --git a/test/visual_regression/services/visual_testing/take_percy_snapshot.js b/test/visual_regression/services/visual_testing/take_percy_snapshot.js new file mode 100644 index 0000000000000..5325765c8d06b --- /dev/null +++ b/test/visual_regression/services/visual_testing/take_percy_snapshot.js @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { readFileSync } from 'fs'; +import { agentJsFilename } from '@percy/agent/dist/utils/sdk-utils'; + +export function takePercySnapshot(show, hide) { + if (!window.PercyAgent) { + return false; + } + + // add percy styles to hide/show specific elements + const styleElement = document.createElement('style'); + styleElement.appendChild( + document.createTextNode(` + .hideInPercy { + visibility: hidden; + + .showInPercy { + visibility: visible; + } + } + + .showInPercy { + visibility: visible; + + .hideInPercy { + visibility: hidden; + } + } + `) + ); + document.head.appendChild(styleElement); + + const add = (selectors, className) => { + for (const selector of selectors) { + for (const element of document.querySelectorAll(selector)) { + element.classList.add(className); + } + } + }; + + const remove = (selectors, className) => { + for (const selector of selectors) { + for (const element of document.querySelectorAll(selector)) { + element.classList.remove(className); + } + } + }; + + // set Percy visibility on elements + add(hide, 'hideInPercy'); + if (show.length > 0) { + // hide the body by default + add(['body'], 'hideInPercy'); + add(show, 'showInPercy'); + } + + // convert canvas elements into static images + const replacements = []; + for (const canvas of document.querySelectorAll('canvas')) { + const image = document.createElement('img'); + image.classList.value = canvas.classList.value; + image.src = canvas.toDataURL(); + image.style.cssText = window.getComputedStyle(canvas).cssText; + canvas.parentElement.replaceChild(image, canvas); + replacements.push({ canvas, image }); + } + + try { + const agent = new window.PercyAgent({ + handleAgentCommunication: false, + }); + + // cache the dom snapshot containing the images + return agent.snapshot(document, { + widths: [document.documentElement.clientWidth], + }); + } finally { + // restore replaced canvases + for (const { image, canvas } of replacements) { + image.parentElement.replaceChild(canvas, image); + } + + // restore element visibility + document.head.removeChild(styleElement); + remove(['body'], 'hideInPercy'); + remove(show, 'showInPercy'); + remove(hide, 'hideInPercy'); + } +} + +export const takePercySnapshotWithAgent = ` + ${readFileSync(agentJsFilename(), 'utf8')} + + return (${takePercySnapshot.toString()}).apply(null, arguments); +`; diff --git a/test/visual_regression/services/visual_testing/visual_testing.ts b/test/visual_regression/services/visual_testing/visual_testing.ts new file mode 100644 index 0000000000000..59c601e6a2b6e --- /dev/null +++ b/test/visual_regression/services/visual_testing/visual_testing.ts @@ -0,0 +1,114 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { postSnapshot } from '@percy/agent/dist/utils/sdk-utils'; +import testSubjSelector from '@kbn/test-subj-selector'; +import { Test } from '@kbn/test'; +import { kibanaPackageJson as pkg } from '@kbn/utils'; +import { FtrService, FtrProviderContext } from '../../ftr_provider_context'; + +// @ts-ignore internal js that is passed to the browser as is +import { takePercySnapshot, takePercySnapshotWithAgent } from './take_percy_snapshot'; + +export const DEFAULT_OPTIONS = { + widths: [1200], +}; + +export interface SnapshotOptions { + /** + * name to append to visual test name + */ + name?: string; + /** + * test subject selectiors to __show__ in screenshot + */ + show?: string[]; + /** + * test subject selectiors to __hide__ in screenshot + */ + hide?: string[]; +} + +const statsCache = new WeakMap(); + +function getStats(test: Test) { + if (!statsCache.has(test)) { + statsCache.set(test, { + snapshotCount: 0, + }); + } + + return statsCache.get(test)!; +} + +export class VisualTestingService extends FtrService { + private readonly browser = this.ctx.getService('browser'); + private readonly log = this.ctx.getService('log'); + + private currentTest: Test | undefined; + + constructor(ctx: FtrProviderContext) { + super(ctx); + + this.ctx.getService('lifecycle').beforeEachTest.add((test) => { + this.currentTest = test; + }); + } + + public async snapshot(options: SnapshotOptions = {}) { + if (process.env.DISABLE_VISUAL_TESTING) { + this.log.warning( + 'Capturing of percy snapshots disabled, would normally capture a snapshot here!' + ); + return; + } + + this.log.debug('Capturing percy snapshot'); + + if (!this.currentTest) { + throw new Error('unable to determine current test'); + } + + const [domSnapshot, url] = await Promise.all([ + this.getSnapshot(options.show, options.hide), + this.browser.getCurrentUrl(), + ]); + const stats = getStats(this.currentTest); + stats.snapshotCount += 1; + + const { name } = options; + const success = await postSnapshot({ + name: `${this.currentTest.fullTitle()} [${name ? name : stats.snapshotCount}]`, + url, + domSnapshot, + clientInfo: `kibana-ftr:${pkg.version}`, + ...DEFAULT_OPTIONS, + }); + + if (!success) { + throw new Error('Percy snapshot failed'); + } + } + + private async getSnapshot(show: string[] = [], hide: string[] = []) { + const showSelectors = show.map(testSubjSelector); + const hideSelectors = hide.map(testSubjSelector); + const snapshot = await this.browser.execute<[string[], string[]], string | false>( + takePercySnapshot, + showSelectors, + hideSelectors + ); + return snapshot !== false + ? snapshot + : await this.browser.execute<[string[], string[]], string>( + takePercySnapshotWithAgent, + showSelectors, + hideSelectors + ); + } +} diff --git a/test/visual_regression/tests/console_app.ts b/test/visual_regression/tests/console_app.ts new file mode 100644 index 0000000000000..2c2351b76ad4f --- /dev/null +++ b/test/visual_regression/tests/console_app.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +const DEFAULT_REQUEST = ` + +GET _search +{ + "query": { + "match_all": {} + } +} + +`.trim(); + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const retry = getService('retry'); + const log = getService('log'); + const visualTesting = getService('visualTesting'); + const PageObjects = getPageObjects(['common', 'console']); + + describe.skip('console app', function describeIndexTests() { + before(async () => { + log.debug('navigateTo console'); + await PageObjects.common.navigateToApp('console'); + }); + + it('should show the default request', async () => { + // collapse the help pane because we only get the VISIBLE TEXT, not the part that is scrolled + await PageObjects.console.collapseHelp(); + await retry.try(async () => { + const actualRequest = await PageObjects.console.getRequest(); + log.debug(actualRequest); + expect(actualRequest.trim()).to.eql(DEFAULT_REQUEST); + }); + + await visualTesting.snapshot(); + }); + + it('default request response should include `"timed_out" : false`', async () => { + const expectedResponseContains = '"timed_out" : false,'; + await PageObjects.console.clickPlay(); + await retry.try(async () => { + const actualResponse = await PageObjects.console.getResponse(); + log.debug(actualResponse); + expect(actualResponse).to.contain(expectedResponseContains); + }); + }); + + it('settings should allow changing the text size', async () => { + await PageObjects.console.setFontSizeSetting(20); + await retry.try(async () => { + // the settings are not applied synchronously, so we retry for a time + expect(await PageObjects.console.getRequestFontSize()).to.be('20px'); + }); + + await PageObjects.console.setFontSizeSetting(24); + await retry.try(async () => { + // the settings are not applied synchronously, so we retry for a time + expect(await PageObjects.console.getRequestFontSize()).to.be('24px'); + }); + }); + }); +} diff --git a/test/visual_regression/tests/discover/chart_visualization.ts b/test/visual_regression/tests/discover/chart_visualization.ts new file mode 100644 index 0000000000000..f8390064732b9 --- /dev/null +++ b/test/visual_regression/tests/discover/chart_visualization.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const retry = getService('retry'); + const esArchiver = getService('esArchiver'); + const browser = getService('browser'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const visualTesting = getService('visualTesting'); + const defaultSettings = { + defaultIndex: 'logstash-*', + 'discover:sampleSize': 1, + }; + + describe('discover', function describeIndexTests() { + before(async function () { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.importExport.load( + 'test/functional/fixtures/kbn_archiver/discover/visual_regression' + ); + + // and load a set of makelogs data + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.uiSettings.replace(defaultSettings); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + after(async function unloadMakelogs() { + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + async function refreshDiscover() { + await browser.refresh(); + await PageObjects.header.awaitKibanaChrome(); + await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.discover.waitForChartLoadingComplete(1); + } + + async function takeSnapshot() { + await refreshDiscover(); + await visualTesting.snapshot({ + show: ['discoverChart'], + }); + } + + describe('query', function () { + this.tags(['skipFirefox']); + + it('should show bars in the correct time zone', async function () { + await PageObjects.header.awaitGlobalLoadingIndicatorHidden(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Hour', async function () { + await PageObjects.discover.setChartInterval('Hour'); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Day', async function () { + await PageObjects.discover.setChartInterval('Day'); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Week', async function () { + await PageObjects.discover.setChartInterval('Week'); + await takeSnapshot(); + }); + + it('browser back button should show previous interval Day', async function () { + await browser.goBack(); + await retry.try(async function tryingForTime() { + const actualInterval = await PageObjects.discover.getChartInterval(); + expect(actualInterval).to.be('Day'); + }); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Month', async function () { + await PageObjects.discover.setChartInterval('Month'); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Year', async function () { + await PageObjects.discover.setChartInterval('Year'); + await takeSnapshot(); + }); + + it('should show correct data for chart interval Auto', async function () { + await PageObjects.discover.setChartInterval('Auto'); + await takeSnapshot(); + }); + }); + + describe('time zone switch', () => { + it('should show bars in the correct time zone after switching', async function () { + await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'America/Phoenix' }); + await refreshDiscover(); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + await takeSnapshot(); + }); + }); + }); +} diff --git a/test/visual_regression/tests/discover/index.ts b/test/visual_regression/tests/discover/index.ts new file mode 100644 index 0000000000000..9142a430f963b --- /dev/null +++ b/test/visual_regression/tests/discover/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DEFAULT_OPTIONS } from '../../services/visual_testing/visual_testing'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +// Width must be the same as visual_testing or canvas image widths will get skewed +const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; + +export default function ({ getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + + describe('discover app', function () { + before(function () { + return browser.setWindowSize(SCREEN_WIDTH, 1000); + }); + + loadTestFile(require.resolve('./chart_visualization')); + }); +} diff --git a/test/visual_regression/tests/vega/index.ts b/test/visual_regression/tests/vega/index.ts new file mode 100644 index 0000000000000..9ab4e199439a4 --- /dev/null +++ b/test/visual_regression/tests/vega/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DEFAULT_OPTIONS } from '../../services/visual_testing/visual_testing'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +// Width must be the same as visual_testing or canvas image widths will get skewed +const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; + +export default function ({ getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + + describe('vega app', function () { + before(function () { + return browser.setWindowSize(SCREEN_WIDTH, 1000); + }); + + loadTestFile(require.resolve('./vega_map_visualization')); + }); +} diff --git a/test/visual_regression/tests/vega/vega_map_visualization.ts b/test/visual_regression/tests/vega/vega_map_visualization.ts new file mode 100644 index 0000000000000..d891e7f2bab6b --- /dev/null +++ b/test/visual_regression/tests/vega/vega_map_visualization.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects(['common', 'visualize', 'visChart', 'visEditor', 'vegaChart']); + const visualTesting = getService('visualTesting'); + + describe('vega chart in visualize app', () => { + before(async () => { + await esArchiver.loadIfNeeded( + 'test/functional/fixtures/es_archiver/kibana_sample_data_flights' + ); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/visualize.json'); + }); + + after(async () => { + await esArchiver.unload('test/functional/fixtures/es_archiver/kibana_sample_data_flights'); + await kibanaServer.importExport.unload( + 'test/functional/fixtures/kbn_archiver/visualize.json' + ); + }); + + it('should show map with vega layer', async function () { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await PageObjects.visualize.openSavedVisualization('VegaMap'); + await PageObjects.visChart.waitForVisualizationRenderingStabilized(); + await visualTesting.snapshot(); + }); + }); +} diff --git a/x-pack/test/visual_regression/config.ts b/x-pack/test/visual_regression/config.ts new file mode 100644 index 0000000000000..c7f0d8203833e --- /dev/null +++ b/x-pack/test/visual_regression/config.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +import { services } from './services'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile(require.resolve('../functional/config.base.js')); + + return { + ...functionalConfig.getAll(), + + testFiles: [ + require.resolve('./tests/canvas'), + require.resolve('./tests/login_page'), + require.resolve('./tests/maps'), + require.resolve('./tests/infra'), + ], + + services, + + junit: { + reportName: 'X-Pack Visual Regression Tests', + }, + }; +} diff --git a/x-pack/test/visual_regression/ftr_provider_context.d.ts b/x-pack/test/visual_regression/ftr_provider_context.d.ts new file mode 100644 index 0000000000000..24f5087ef7fe2 --- /dev/null +++ b/x-pack/test/visual_regression/ftr_provider_context.d.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { GenericFtrProviderContext } from '@kbn/test'; + +import { pageObjects } from './page_objects'; +import { services } from './services'; + +export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test/visual_regression/page_objects.ts b/x-pack/test/visual_regression/page_objects.ts new file mode 100644 index 0000000000000..c8b0c9050dbb9 --- /dev/null +++ b/x-pack/test/visual_regression/page_objects.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { pageObjects } from '../functional/page_objects'; + +export { pageObjects }; diff --git a/x-pack/test/visual_regression/services.ts b/x-pack/test/visual_regression/services.ts new file mode 100644 index 0000000000000..7d58bd3f35b32 --- /dev/null +++ b/x-pack/test/visual_regression/services.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { services as ossVisualRegressionServices } from '../../../test/visual_regression/services'; +import { services as functionalServices } from '../functional/services'; + +export const services = { + ...functionalServices, + visualTesting: ossVisualRegressionServices.visualTesting, +}; diff --git a/x-pack/test/visual_regression/tests/canvas/fullscreen.js b/x-pack/test/visual_regression/tests/canvas/fullscreen.js new file mode 100644 index 0000000000000..6a20db5bccdec --- /dev/null +++ b/x-pack/test/visual_regression/tests/canvas/fullscreen.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export default function ({ getPageObjects, getService }) { + const PageObjects = getPageObjects(['common', 'canvas']); + const visualTesting = getService('visualTesting'); + + describe('fullscreen', () => { + it('workpad should display properly in fullscreen mode', async () => { + await PageObjects.common.navigateToApp('canvas', { + hash: '/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1', + }); + + await PageObjects.canvas.enterFullscreen(); + + await PageObjects.canvas.waitForWorkpadElements(); + + await visualTesting.snapshot(); + }); + }); +} diff --git a/x-pack/test/visual_regression/tests/canvas/index.js b/x-pack/test/visual_regression/tests/canvas/index.js new file mode 100644 index 0000000000000..20a262fef10fe --- /dev/null +++ b/x-pack/test/visual_regression/tests/canvas/index.js @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DEFAULT_OPTIONS } from '../../../../../test/visual_regression/services/visual_testing/visual_testing'; + +const [SCREEN_WIDTH] = DEFAULT_OPTIONS.widths || []; + +export default function ({ loadTestFile, getService }) { + const esArchiver = getService('esArchiver'); + const browser = getService('browser'); + + describe('canvas app visual regression', function () { + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); + await esArchiver.load('x-pack/test/functional/es_archives/canvas/default'); + + await browser.setWindowSize(SCREEN_WIDTH, 1000); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/canvas/default'); + }); + + loadTestFile(require.resolve('./fullscreen')); + }); +} diff --git a/x-pack/test/visual_regression/tests/infra/index.js b/x-pack/test/visual_regression/tests/infra/index.js new file mode 100644 index 0000000000000..13669c50953f9 --- /dev/null +++ b/x-pack/test/visual_regression/tests/infra/index.js @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export default function ({ loadTestFile, getService }) { + const browser = getService('browser'); + + describe.skip('InfraUI Visual Regression', function () { + before(async () => { + await browser.setWindowSize(1600, 1000); + }); + + loadTestFile(require.resolve('./waffle_map')); + loadTestFile(require.resolve('./saved_views')); + }); +} diff --git a/x-pack/test/visual_regression/tests/infra/saved_views.js b/x-pack/test/visual_regression/tests/infra/saved_views.js new file mode 100644 index 0000000000000..a2fb3fda206da --- /dev/null +++ b/x-pack/test/visual_regression/tests/infra/saved_views.js @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DATES } from '../../../functional/apps/infra/constants'; +const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; + +export default function ({ getPageObjects, getService }) { + const PageObjects = getPageObjects(['common', 'infraHome', 'infraMetricsExplorer']); + const visualTesting = getService('visualTesting'); + const esArchiver = getService('esArchiver'); + + describe('saved views', () => { + before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + describe('Inverntory Test save functionality', () => { + it('should have save and load controls', async () => { + await PageObjects.common.navigateToApp('infraOps'); + await PageObjects.infraHome.goToTime(DATE_WITH_DATA); + await PageObjects.infraHome.getSaveViewButton(); + await PageObjects.infraHome.getLoadViewsButton(); + await visualTesting.snapshot(); + }); + + it('should open flyout list', async () => { + await PageObjects.infraHome.openSaveViewsFlyout(); + await visualTesting.snapshot(); + await PageObjects.infraHome.closeSavedViewFlyout(); + }); + + it('should open saved view modal', async () => { + await PageObjects.infraHome.openCreateSaveViewModal(); + await visualTesting.snapshot(); + }); + + it('should be able to enter a view name', async () => { + await PageObjects.infraHome.openEnterViewNameAndSave(); + await visualTesting.snapshot(); + }); + + it('should see a saved view in list', async () => { + await PageObjects.infraHome.openSaveViewsFlyout(); + await visualTesting.snapshot(); + }); + }); + + describe('Metric Explorer Test Saved Views', () => { + before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + describe('save functionality', () => { + it('should have saved views component', async () => { + await PageObjects.common.navigateToApp('infraOps'); + await PageObjects.infraHome.goToMetricExplorer(); + await PageObjects.infraSavedViews.getSavedViewsButton(); + await PageObjects.infraSavedViews.ensureViewIsLoaded('Default view'); + await visualTesting.snapshot(); + }); + + it('should open popover', async () => { + await PageObjects.infraSavedViews.clickSavedViewsButton(); + await visualTesting.snapshot(); + await PageObjects.infraSavedViews.closeSavedViewsPopover(); + }); + + it('should create new saved view and load it', async () => { + await PageObjects.infraSavedViews.clickSavedViewsButton(); + await PageObjects.infraSavedViews.clickSaveNewViewButton(); + await PageObjects.infraSavedViews.getCreateSavedViewModal(); + await PageObjects.infraSavedViews.createNewSavedView('view1'); + await PageObjects.infraSavedViews.ensureViewIsLoaded('view1'); + await visualTesting.snapshot(); + }); + + it('should new views should be listed in the load views list', async () => { + await PageObjects.infraSavedViews.clickSavedViewsButton(); + await PageObjects.infraSavedViews.clickLoadViewButton(); + await PageObjects.infraSavedViews.ensureViewIsLoadable('view1'); + await visualTesting.snapshot(); + await PageObjects.infraSavedViews.closeSavedViewsLoadModal(); + }); + }); + }); + }); +} diff --git a/x-pack/test/visual_regression/tests/infra/waffle_map.js b/x-pack/test/visual_regression/tests/infra/waffle_map.js new file mode 100644 index 0000000000000..70aaf89a059eb --- /dev/null +++ b/x-pack/test/visual_regression/tests/infra/waffle_map.js @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DATES } from '../../../functional/apps/infra/constants'; +const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; + +export default function ({ getPageObjects, getService }) { + const PageObjects = getPageObjects(['common', 'infraHome']); + const visualTesting = getService('visualTesting'); + const esArchiver = getService('esArchiver'); + + describe('waffle map', () => { + before(() => esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + after(() => esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs')); + + it('should just work', async () => { + await PageObjects.common.navigateToApp('infraOps'); + await PageObjects.infraHome.goToTime(DATE_WITH_DATA); + await PageObjects.infraHome.getWaffleMap(); + await visualTesting.snapshot(); + }); + }); +} diff --git a/x-pack/test/visual_regression/tests/login_page.ts b/x-pack/test/visual_regression/tests/login_page.ts new file mode 100644 index 0000000000000..34e1132134744 --- /dev/null +++ b/x-pack/test/visual_regression/tests/login_page.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const visualTesting = getService('visualTesting'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const PageObjects = getPageObjects(['common', 'security']); + + describe.skip('Security', () => { + describe('Login Page', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/empty_kibana'); + await PageObjects.security.forceLogout(); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/empty_kibana'); + }); + + afterEach(async () => { + // NOTE: Logout needs to happen before anything else to avoid flaky behavior + await PageObjects.security.forceLogout(); + }); + + it('renders login page', async () => { + await PageObjects.common.navigateToApp('login'); + + await retry.waitFor( + 'login page visible', + async () => await testSubjects.exists('loginSubmit') + ); + + await visualTesting.snapshot(); + }); + + it('renders failed login', async () => { + await PageObjects.security.loginPage.login('wrong-user', 'wrong-password', { + expectSuccess: false, + }); + + await retry.waitFor( + 'login error visible', + async () => await testSubjects.exists('loginErrorMessage') + ); + + await visualTesting.snapshot(); + }); + }); + }); +} diff --git a/x-pack/test/visual_regression/tests/maps/index.js b/x-pack/test/visual_regression/tests/maps/index.js new file mode 100644 index 0000000000000..9d53d70ad2abc --- /dev/null +++ b/x-pack/test/visual_regression/tests/maps/index.js @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export default function ({ loadTestFile, getService }) { + const kibanaServer = getService('kibanaServer'); + const esArchiver = getService('esArchiver'); + const browser = getService('browser'); + const log = getService('log'); + const supertest = getService('supertest'); + + describe('maps app visual regression', function () { + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/maps.json' + ); + // Functional tests verify behavior when referenced index pattern saved objects can not be found. + // However, saved object import fails when reference saved objects can not be found. + // To prevent import errors, index pattern saved object references exist during import + // but are then deleted afterwards to enable testing of missing reference index pattern saved objects. + + log.info('Delete index pattern'); + log.debug('id: ' + 'idThatDoesNotExitForESGeoGridSource'); + log.debug('id: ' + 'idThatDoesNotExitForESSearchSource'); + log.debug('id: ' + 'idThatDoesNotExitForESJoinSource'); + await supertest + .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESGeoGridSource') + .set('kbn-xsrf', 'true') + .expect(200); + + await supertest + .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESSearchSource') + .set('kbn-xsrf', 'true') + .expect(200); + + await supertest + .delete('/api/index_patterns/index_pattern/' + 'idThatDoesNotExitForESJoinSource') + .set('kbn-xsrf', 'true') + .expect(200); + + await esArchiver.load('x-pack/test/functional/es_archives/maps/data'); + await kibanaServer.uiSettings.replace({ + defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', + }); + await browser.setWindowSize(1600, 1000); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/maps/data'); + await kibanaServer.importExport.unload( + 'x-pack/test/functional/fixtures/kbn_archiver/maps.json' + ); + }); + + loadTestFile(require.resolve('./vector_styling')); + }); +} diff --git a/x-pack/test/visual_regression/tests/maps/vector_styling.js b/x-pack/test/visual_regression/tests/maps/vector_styling.js new file mode 100644 index 0000000000000..092ae603117d9 --- /dev/null +++ b/x-pack/test/visual_regression/tests/maps/vector_styling.js @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export default function ({ getPageObjects, getService }) { + const PageObjects = getPageObjects(['maps']); + const visualTesting = getService('visualTesting'); + + describe('vector styling', () => { + describe('symbolize as icon', () => { + before(async () => { + await PageObjects.maps.loadSavedMap('vector styling icon demo'); + await PageObjects.maps.enterFullScreen(); + await PageObjects.maps.closeLegend(); + }); + + it('should symbolize points as icons with expected color, size, and orientation', async () => { + await visualTesting.snapshot(); + }); + }); + + describe('dynamic coloring', () => { + before(async () => { + await PageObjects.maps.loadSavedMap('join and dynamic coloring demo'); + await PageObjects.maps.enterFullScreen(); + await PageObjects.maps.closeLegend(); + }); + + it('should symbolize fill color with custom steps from join value and border color with dynamic color ramp from prop value', async () => { + await visualTesting.snapshot(); + }); + }); + + describe('dynamic line coloring', () => { + before(async () => { + await PageObjects.maps.loadSavedMap('pew pew demo'); + await PageObjects.maps.enterFullScreen(); + await PageObjects.maps.closeLegend(); + }); + + it('should symbolize pew pew lines', async () => { + await visualTesting.snapshot(); + }); + }); + }); +} diff --git a/yarn.lock b/yarn.lock index a7f74c0b215b0..f8f09a1dab087 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4087,6 +4087,90 @@ dependencies: mkdirp "^1.0.4" +"@oclif/color@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.0.0.tgz#54939bbd16d1387511bf1a48ccda1a417248e6a9" + integrity sha512-KKd3W7eNwfNF061tr663oUNdt8EMnfuyf5Xv55SGWA1a0rjhWqS/32P7OeB7CbXcJUBdfVrPyR//1afaW12AWw== + dependencies: + ansi-styles "^3.2.1" + supports-color "^5.4.0" + tslib "^1" + +"@oclif/command@1.5.19", "@oclif/command@^1.5.13", "@oclif/command@^1.5.3": + version "1.5.19" + resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.5.19.tgz#13f472450eb83bd6c6871a164c03eadb5e1a07ed" + integrity sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ== + dependencies: + "@oclif/config" "^1" + "@oclif/errors" "^1.2.2" + "@oclif/parser" "^3.8.3" + "@oclif/plugin-help" "^2" + debug "^4.1.1" + semver "^5.6.0" + +"@oclif/config@^1": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.13.0.tgz#fc2bd82a9cb30a73faf7d2aa5ae937c719492bd1" + integrity sha512-ttb4l85q7SBx+WlUJY4A9eXLgv4i7hGDNGaXnY9fDKrYD7PBMwNOQ3Ssn2YT2yARAjyOxVE/5LfcwhQGq4kzqg== + dependencies: + debug "^4.1.1" + tslib "^1.9.3" + +"@oclif/errors@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.2.2.tgz#9d8f269b15f13d70aa93316fed7bebc24688edc2" + integrity sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg== + dependencies: + clean-stack "^1.3.0" + fs-extra "^7.0.0" + indent-string "^3.2.0" + strip-ansi "^5.0.0" + wrap-ansi "^4.0.0" + +"@oclif/linewrap@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" + integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== + +"@oclif/parser@^3.8.3": + version "3.8.4" + resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.4.tgz#1a90fc770a42792e574fb896325618aebbe8c9e4" + integrity sha512-cyP1at3l42kQHZtqDS3KfTeyMvxITGwXwH1qk9ktBYvqgMp5h4vHT+cOD74ld3RqJUOZY/+Zi9lb4Tbza3BtuA== + dependencies: + "@oclif/linewrap" "^1.0.0" + chalk "^2.4.2" + tslib "^1.9.3" + +"@oclif/plugin-help@^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-2.2.0.tgz#8dfc1c80deae47a205fbc70b018747ba93f31cc3" + integrity sha512-56iIgE7NQfwy/ZrWrvrEfJGb5rrMUt409yoQGw4feiU101UudA1btN1pbUbcKBr7vY9KFeqZZcftXEGxOp7zBg== + dependencies: + "@oclif/command" "^1.5.13" + chalk "^2.4.1" + indent-string "^3.2.0" + lodash.template "^4.4.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + widest-line "^2.0.1" + wrap-ansi "^4.0.0" + +"@oclif/plugin-not-found@^1.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-1.2.2.tgz#3e601f6e4264d7a0268cd03c152d90aa9c0cec6d" + integrity sha512-SPlmiJFmTFltQT/owdzQwKgq6eq5AEKVwVK31JqbzK48bRWvEL1Ye60cgztXyZ4bpPn2Fl+KeL3FWFQX41qJuA== + dependencies: + "@oclif/color" "^0.0.0" + "@oclif/command" "^1.5.3" + cli-ux "^4.9.0" + fast-levenshtein "^2.0.6" + lodash "^4.17.11" + +"@oclif/screen@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" + integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== + "@octokit/app@^2.2.2": version "2.2.2" resolved "https://registry.yarnpkg.com/@octokit/app/-/app-2.2.2.tgz#a1b8248f64159eeccbe4000d888fdae4163c4ad8" @@ -4445,6 +4529,34 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.4.0.tgz#facf2c67d6063b9918d5a5e3fdf25f3a30d547b6" integrity sha512-Hzl8soGpmyzja9w3kiFFcYJ7n5HNETpplY6cb67KR4QPlxp4FTTresO06qXHgHDhyIInmbLJXuwARjjpsKYGuQ== +"@percy/agent@^0.28.6": + version "0.28.6" + resolved "https://registry.yarnpkg.com/@percy/agent/-/agent-0.28.6.tgz#b220fab6ddcf63ae4e6c343108ba6955a772ce1c" + integrity sha512-SDAyBiUmfQMVTayjvEjQ0IJIA7Y3AoeyWn0jmUxNOMRRIJWo4lQJghfhFCgzCkhXDCm67NMN2nAQAsvXrlIdkQ== + dependencies: + "@oclif/command" "1.5.19" + "@oclif/config" "^1" + "@oclif/plugin-help" "^2" + "@oclif/plugin-not-found" "^1.2" + axios "^0.21.1" + body-parser "^1.18.3" + colors "^1.3.2" + cors "^2.8.4" + cosmiconfig "^5.2.1" + cross-spawn "^7.0.2" + deepmerge "^4.0.0" + express "^4.16.3" + follow-redirects "1.12.1" + generic-pool "^3.7.1" + globby "^10.0.1" + image-size "^0.8.2" + js-yaml "^3.13.1" + percy-client "^3.2.0" + puppeteer "^5.3.1" + retry-axios "^1.0.1" + which "^2.0.1" + winston "^3.0.0" + "@pmmmwh/react-refresh-webpack-plugin@^0.5.1": version "0.5.5" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.5.tgz#e77aac783bd079f548daa0a7f080ab5b5a9741ca" @@ -8678,6 +8790,11 @@ agent-base@4: dependencies: es6-promisify "^5.0.0" +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -8848,7 +8965,7 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.0.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -8948,6 +9065,11 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + antlr4ts-cli@^0.5.0-alpha.3: version "0.5.0-alpha.3" resolved "https://registry.yarnpkg.com/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.3.tgz#1f581b2a3c840d3921a2f3b1e739e48c7e7c18cd" @@ -10041,7 +10163,12 @@ blob-util@^2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== -bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: +bluebird-retry@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/bluebird-retry/-/bluebird-retry-0.11.0.tgz#1289ab22cbbc3a02587baad35595351dd0c1c047" + integrity sha1-EomrIsu8OgJYe6rTVZU1HdDBwEc= + +bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -10056,7 +10183,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -body-parser@1.19.0: +body-parser@1.19.0, body-parser@^1.18.3: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -10771,6 +10898,14 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + case-sensitive-paths-webpack-plugin@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" @@ -11017,6 +11152,11 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" +clean-stack@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" + integrity sha1-noIVAa6XmYbEax1m0tQy2y/UrjE= + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -11079,6 +11219,33 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-ux@^4.9.0: + version "4.9.3" + resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-4.9.3.tgz#4c3e070c1ea23eef010bbdb041192e0661be84ce" + integrity sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA== + dependencies: + "@oclif/errors" "^1.2.2" + "@oclif/linewrap" "^1.0.0" + "@oclif/screen" "^1.0.3" + ansi-escapes "^3.1.0" + ansi-styles "^3.2.1" + cardinal "^2.1.1" + chalk "^2.4.1" + clean-stack "^2.0.0" + extract-stack "^1.0.0" + fs-extra "^7.0.0" + hyperlinker "^1.0.0" + indent-string "^3.2.0" + is-wsl "^1.1.0" + lodash "^4.17.11" + password-prompt "^1.0.7" + semver "^5.6.0" + strip-ansi "^5.0.0" + supports-color "^5.5.0" + supports-hyperlinks "^1.0.1" + treeify "^1.1.0" + tslib "^1.9.3" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -11317,7 +11484,7 @@ colorette@^1.2.0, colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@1.4.0: +colors@1.4.0, colors@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -11710,6 +11877,14 @@ core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" @@ -11720,7 +11895,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.0: +cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -12944,7 +13119,7 @@ deep-object-diff@^1.1.0: resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== -deepmerge@3.2.0, deepmerge@^2.1.1, deepmerge@^4.2.2: +deepmerge@3.2.0, deepmerge@^2.1.1, deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -13225,6 +13400,11 @@ detective@^5.0.2, detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" +devtools-protocol@0.0.818844: + version "0.0.818844" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" + integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== + devtools-protocol@0.0.901419: version "0.0.901419" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.901419.tgz#79b5459c48fe7e1c5563c02bd72f8fec3e0cebcd" @@ -13460,7 +13640,7 @@ domhandler@^3.0.0: dependencies: domelementtype "^2.0.1" -domhandler@^4.0, domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: +domhandler@^4.0.0, domhandler@^4.0, domhandler@^4.2.0, domhandler@^4.2.2: version "4.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== @@ -13524,7 +13704,7 @@ dotenv@^16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== -dotenv@^8.0.0: +dotenv@^8.0.0, dotenv@^8.1.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -14077,6 +14257,11 @@ es6-map@^0.1.5: es6-symbol "~3.1.1" event-emitter "~0.3.5" +es6-promise-pool@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz#147c612b36b47f105027f9d2bf54a598a99d9ccb" + integrity sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs= + es6-promise@^4.0.3, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -14487,7 +14672,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -14770,7 +14955,7 @@ expose-loader@^0.7.5: resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f" integrity sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw== -express@^4.17.1: +express@^4.16.3, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -14849,7 +15034,12 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1, extract-zip@^2.0.1: +extract-stack@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-1.0.0.tgz#b97acaf9441eea2332529624b732fc5a1c8165fa" + integrity sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo= + +extract-zip@2.0.1, extract-zip@^2.0.0, extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -15348,6 +15538,11 @@ folktale@2.3.2: resolved "https://registry.yarnpkg.com/folktale/-/folktale-2.3.2.tgz#38231b039e5ef36989920cbf805bf6b227bf4fd4" integrity sha512-+8GbtQBwEqutP0v3uajDDoN64K2ehmHd0cjlghhxh0WpcfPzAIjPA03e1VvHlxL02FVGR0A6lwXsNQKn3H1RNQ== +follow-redirects@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" @@ -15382,6 +15577,11 @@ foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= +foreachasync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/foreachasync/-/foreachasync-3.0.0.tgz#5502987dc8714be3392097f32e0071c9dee07cf6" + integrity sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY= + foreground-child@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" @@ -15547,7 +15747,7 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.1: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -15717,6 +15917,11 @@ geckodriver@^3.0.1: https-proxy-agent "5.0.0" tar "6.1.11" +generic-pool@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.7.1.tgz#36fe5bb83e7e0e032e5d32cd05dc00f5ff119aa8" + integrity sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w== + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -16458,6 +16663,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -17075,6 +17285,14 @@ https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -17087,6 +17305,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== + hyphenate-style-name@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -17160,6 +17383,13 @@ image-q@^1.1.1: resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= +image-size@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.8.3.tgz#f0b568857e034f29baffd37013587f2c0cad8b46" + integrity sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg== + dependencies: + queue "6.0.1" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -17231,7 +17461,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0: +indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -19307,6 +19537,11 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" +jssha@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jssha/-/jssha-2.3.1.tgz#147b2125369035ca4b2f7d210dc539f009b3de9a" + integrity sha1-FHshJTaQNcpLL30hDcU58Amz3po= + jsts@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/jsts/-/jsts-1.6.2.tgz#c0efc885edae06ae84f78cbf2a0110ba929c5925" @@ -19792,6 +20027,11 @@ lodash-es@^4.17.11, lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -19917,6 +20157,21 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.template@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -21707,7 +21962,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.X, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.X, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -22474,6 +22729,14 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +password-prompt@^1.0.7: + version "1.1.2" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" + integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== + dependencies: + ansi-escapes "^3.1.0" + cross-spawn "^6.0.5" + path-browserify@0.0.1, path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" @@ -22632,6 +22895,21 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= +percy-client@^3.2.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/percy-client/-/percy-client-3.7.0.tgz#780e7d780c7f646e59ffb6ee9d3d16e8237851ff" + integrity sha512-5levWR/nfVuSDL9YPN9Sn1M41I2/FmC/FndhD84s6W+mrVC4mB0cc9cT9F58hLuh7/133I/YvyI9Vc6NN41+2g== + dependencies: + bluebird "^3.5.1" + bluebird-retry "^0.11.0" + dotenv "^8.1.0" + es6-promise-pool "^2.5.0" + jssha "^2.1.0" + regenerator-runtime "^0.13.1" + request "^2.87.0" + request-promise "^4.2.2" + walk "^2.3.14" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -23532,7 +23810,7 @@ progress@^1.1.8: resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.0, progress@^2.0.1, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -23715,7 +23993,7 @@ proxy-from-env@1.0.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= -proxy-from-env@1.1.0, proxy-from-env@^1.1.0: +proxy-from-env@1.1.0, proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== @@ -23821,6 +24099,24 @@ puppeteer@^10.2.0: unbzip2-stream "1.3.3" ws "7.4.6" +puppeteer@^5.3.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00" + integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg== + dependencies: + debug "^4.1.0" + devtools-protocol "0.0.818844" + extract-zip "^2.0.0" + https-proxy-agent "^4.0.0" + node-fetch "^2.6.1" + pkg-dir "^4.2.0" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^3.0.2" + tar-fs "^2.0.0" + unbzip2-stream "^1.3.3" + ws "^7.2.3" + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -23879,6 +24175,13 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +queue@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.1.tgz#abd5a5b0376912f070a25729e0b6a7d565683791" + integrity sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg== + dependencies: + inherits "~2.0.3" + quick-format-unescaped@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz#6d6b66b8207aa2b35eef12be1421bb24c428f652" @@ -24906,6 +25209,13 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + dependencies: + esprima "~4.0.0" + reduce-reducers@*, reduce-reducers@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reduce-reducers/-/reduce-reducers-1.0.4.tgz#fb77e751a9eb0201760ac5a605ca8c9c2d0537f8" @@ -25022,7 +25332,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -25378,6 +25688,13 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== + dependencies: + lodash "^4.17.11" + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -25394,7 +25711,17 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.44.0, request@^2.88.0, request@^2.88.2: +request-promise@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.4.tgz#1c5ed0d71441e38ad58c7ce4ea4ea5b06d54b310" + integrity sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg== + dependencies: + bluebird "^3.5.0" + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.44.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -25611,6 +25938,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry-axios@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-1.0.1.tgz#c1e465126416d8aee7a0a2d4be28401cc0135029" + integrity sha512-aVnENElFbdmbsv1WbTi610Ukdper88yUPz4Y3eg/DUyHV7vNaLrj9orB6FOjvmFoXL9wZvbMAsOD87BmcyBVOw== + retry@0.12.0, retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -27472,7 +27804,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -27493,6 +27825,14 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== + dependencies: + has-flag "^2.0.0" + supports-color "^5.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -28264,7 +28604,7 @@ tslib@2.3.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@~2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1, tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -28464,6 +28804,14 @@ unbzip2-stream@1.3.3: buffer "^5.2.1" through "^2.3.8" +unbzip2-stream@^1.3.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -29174,7 +29522,7 @@ variable-diff@1.1.0: chalk "^1.1.1" object-assign "^4.0.1" -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= @@ -29700,6 +30048,13 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" +walk@^2.3.14: + version "2.3.14" + resolved "https://registry.yarnpkg.com/walk/-/walk-2.3.14.tgz#60ec8631cfd23276ae1e7363ce11d626452e1ef3" + integrity sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg== + dependencies: + foreachasync "^3.0.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -30101,6 +30456,13 @@ wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -30129,7 +30491,7 @@ winston-transport@^4.4.2, winston-transport@^4.5.0: readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@^3.3.3: +winston@^3.0.0, winston@^3.3.3: version "3.5.1" resolved "https://registry.yarnpkg.com/winston/-/winston-3.5.1.tgz#b25cc899d015836dbf8c583dec8c4c4483a0da2e" integrity sha512-tbRtVy+vsSSCLcZq/8nXZaOie/S2tPXPFt4be/Q3vI/WtYwm7rrwidxVw2GRa38FIXcJ1kUM6MOZ9Jmnk3F3UA== @@ -30211,6 +30573,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" + integrity sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg== + dependencies: + ansi-styles "^3.2.0" + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" From 8a5bf42bc0c554d1bc7c878387b60d2ca9807e1d Mon Sep 17 00:00:00 2001 From: Kyle Pollich Date: Thu, 14 Jul 2022 15:53:45 -0400 Subject: [PATCH 73/96] [Fleet] Use `unmapped_type: long` when sorting datasets that don't include `event.ingested` (#136114) * Add ignore_unmapped: true to fix data streams API in e2e tests * Fix sort setup * Skip failing cypress suite for now * Filter out non-integration data streams from Fleet data streams API * Try using timestamp instead of event.ingested * Use unmapped type setting * Provide explicit missing value for event.ingested Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/fleet/cypress/cypress.json | 2 +- .../get_data_streams_query_metadata.ts | 15 ++++++++++++++- .../fleet/server/routes/data_streams/handlers.ts | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/fleet/cypress/cypress.json b/x-pack/plugins/fleet/cypress/cypress.json index 6886e5c245cc0..b36d0c513116c 100644 --- a/x-pack/plugins/fleet/cypress/cypress.json +++ b/x-pack/plugins/fleet/cypress/cypress.json @@ -2,7 +2,7 @@ "baseUrl": "http://localhost:5620", "defaultCommandTimeout": 60000, "requestTimeout": 60000, - "responseTimetout": 60000, + "responseTimeout": 60000, "execTimeout": 120000, "pageLoadTimeout": 120000, "nodeVersion": "system", diff --git a/x-pack/plugins/fleet/server/routes/data_streams/get_data_streams_query_metadata.ts b/x-pack/plugins/fleet/server/routes/data_streams/get_data_streams_query_metadata.ts index 44a77a511ca4c..05f7989d8baea 100644 --- a/x-pack/plugins/fleet/server/routes/data_streams/get_data_streams_query_metadata.ts +++ b/x-pack/plugins/fleet/server/routes/data_streams/get_data_streams_query_metadata.ts @@ -24,9 +24,22 @@ export async function getDataStreamsQueryMetadata({ esClient.search({ size: 1, index: dataStreamName, - sort: 'event.ingested:desc', _source: false, fields: ['event.ingested'], + // We need to use `body` to control the `sort` value here, because otherwise + // it's just appended as a query string to the search operation and we can't + // set `unmapped_type` for cases where `event.ingested` is not defiend, e.g. + // in custom logs or custom HTTPJSON integrations + body: { + sort: { + 'event.ingested': { + order: 'desc', + // Necessary because of https://github.com/elastic/elasticsearch/issues/81960 + missing: 0, + unmapped_type: 'long', + }, + }, + }, }), esClient.termsEnum({ index: dataStreamName, diff --git a/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts b/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts index f68c8d287472e..f0a5471832de8 100644 --- a/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/data_streams/handlers.ts @@ -190,7 +190,7 @@ export const getListHandler: RequestHandler = async (context, request, response) }); // Return final data streams objects sorted by last activity, descending - // After filtering out data streams that are missing dataset/namespace/type fields + // After filtering out data streams that are missing dataset/namespace/type/package fields body.data_streams = (await Promise.all(dataStreamPromises)) .filter(({ dataset, namespace, type }) => dataset && namespace && type) .sort((a, b) => b.last_activity_ms - a.last_activity_ms); From 71d375848e80b639fc78bc269f6eaa825fd868d5 Mon Sep 17 00:00:00 2001 From: Luke Elmers Date: Thu, 14 Jul 2022 14:03:59 -0600 Subject: [PATCH 74/96] [logging] Add mechanism for setting global meta & set `service.node.roles` for all logs. (#136243) --- .../core-logging-server-internal/BUILD.bazel | 1 + .../src/global_context/index.ts | 10 + .../merge_global_context.test.ts | 103 ++++++++ .../global_context/merge_global_context.ts | 56 ++++ .../src/global_context/types.ts | 29 +++ .../src/logger_adapter.test.ts | 242 ++++++++++++------ .../src/logger_adapter.ts | 29 ++- .../src/logging_service.test.ts | 1 + .../src/logging_system.test.mocks.ts | 22 ++ .../src/logging_system.test.ts | 120 ++++++++- .../src/logging_system.ts | 30 ++- .../src/logging_system.mock.ts | 1 + .../core-node-server-internal/BUILD.bazel | 1 + .../src/node_service.test.ts | 23 +- .../src/node_service.ts | 20 +- .../node/integration_tests/logging.test.ts | 70 +++++ src/core/server/server.ts | 2 +- 17 files changed, 652 insertions(+), 108 deletions(-) create mode 100644 packages/core/logging/core-logging-server-internal/src/global_context/index.ts create mode 100644 packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.test.ts create mode 100644 packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.ts create mode 100644 packages/core/logging/core-logging-server-internal/src/global_context/types.ts create mode 100644 packages/core/logging/core-logging-server-internal/src/logging_system.test.mocks.ts create mode 100644 src/core/server/node/integration_tests/logging.test.ts diff --git a/packages/core/logging/core-logging-server-internal/BUILD.bazel b/packages/core/logging/core-logging-server-internal/BUILD.bazel index ea2e1e1550bdf..d5afc20b5e40a 100644 --- a/packages/core/logging/core-logging-server-internal/BUILD.bazel +++ b/packages/core/logging/core-logging-server-internal/BUILD.bazel @@ -31,6 +31,7 @@ RUNTIME_DEPS = [ "@npm//elastic-apm-node", "//packages/elastic-safer-lodash-set", "//packages/kbn-config-schema", + "//packages/kbn-std", ] TYPES_DEPS = [ diff --git a/packages/core/logging/core-logging-server-internal/src/global_context/index.ts b/packages/core/logging/core-logging-server-internal/src/global_context/index.ts new file mode 100644 index 0000000000000..e7a8a0be56c8e --- /dev/null +++ b/packages/core/logging/core-logging-server-internal/src/global_context/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { mergeGlobalContext } from './merge_global_context'; +export type { GlobalContext } from './types'; diff --git a/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.test.ts b/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.test.ts new file mode 100644 index 0000000000000..63840d3ab3fbc --- /dev/null +++ b/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.test.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { LogMeta } from '@kbn/logging'; +import { GlobalContext } from './types'; +import { mergeGlobalContext } from './merge_global_context'; + +describe('mergeGlobalContext', () => { + test('inserts global meta in entry meta', () => { + const context: GlobalContext = { + bar: false, + }; + const meta: LogMeta = { + // @ts-expect-error Custom ECS field + foo: true, + }; + + expect(mergeGlobalContext(context, meta)).toEqual({ + foo: true, + bar: false, + }); + }); + + test('handles nested context', () => { + const context: GlobalContext = { + 'bar.baz': false, + }; + const meta: LogMeta = { + // @ts-expect-error Custom ECS field + foo: true, + }; + + expect(mergeGlobalContext(context, meta)).toEqual({ + foo: true, + bar: { baz: false }, + }); + }); + + test('does not overwrite meta with global context if the path already exists', () => { + const context: GlobalContext = { + foo: false, + bar: [false], + }; + const meta: LogMeta = { + // @ts-expect-error Custom ECS field + foo: true, + bar: [true], + }; + + expect(mergeGlobalContext(context, meta)).toEqual({ + foo: true, + bar: [true], + }); + }); + + test('if conflicting entries exist in the context, the most specific entry wins', () => { + const context: GlobalContext = { + 'a.b.c': 'd', + 'a.b': 'c', + }; + + // Note that this "most specific entry wins" behavior should not happen in practice, + // as the `LoggingSystem` is handling deconfliction of paths before anything is + // provided to the `LoggerAdapter` in the first place. Including this test just to + // ensure the actual behavior of this function is documented for posterity. + expect(mergeGlobalContext(context)).toEqual({ + a: { b: { c: 'd' } }, + }); + }); + + test('does nothing if no global meta has been set', () => { + const context: GlobalContext = {}; + const meta: LogMeta = { + // @ts-expect-error Custom ECS field + foo: true, + }; + + expect(mergeGlobalContext(context, meta)).toEqual({ + foo: true, + }); + }); + + test('adds global meta even if no user-provided meta exists', () => { + const context: GlobalContext = { + foo: true, + }; + + expect(mergeGlobalContext(context)).toEqual({ + foo: true, + }); + }); + + test('does nothing if no global meta or user-provided meta has been set', () => { + const context: GlobalContext = {}; + + expect(mergeGlobalContext(context)).toBeUndefined(); + }); +}); diff --git a/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.ts b/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.ts new file mode 100644 index 0000000000000..64186392caa56 --- /dev/null +++ b/packages/core/logging/core-logging-server-internal/src/global_context/merge_global_context.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { has } from 'lodash'; +import { set } from '@elastic/safer-lodash-set'; +import { LogMeta } from '@kbn/logging'; +import { GlobalContext } from './types'; + +/** + * Takes a flattened object of {@link GlobalContext} and applies it to the + * provided {@link LogMeta}. + * + * @remarks + * The provided `LogMeta` takes precedence over the `GlobalContext`; + * if duplicate keys are found, the `GlobalContext` will be overridden. + * + * @example + * ```ts + * const meta: LogMeta = { + * a: { b: false }, + * d: 'hi', + * }; + * const context: GlobalContext = { + * 'a.b': true, + * c: [1, 2, 3], + * }; + * + * mergeGlobalContext(context, meta); + * // { + * // a: { b: false }, + * // c: [1, 2, 3], + * // d: 'hi', + * // } + * ``` + * + * @internal + */ +export function mergeGlobalContext(globalContext: GlobalContext, meta?: LogMeta) { + if (!meta && Object.keys(globalContext).length === 0) { + return; + } + + const mergedMeta = meta ?? {}; + for (const [path, data] of Object.entries(globalContext)) { + if (!has(mergedMeta, path)) { + set(mergedMeta, path, data); + } + } + + return mergedMeta; +} diff --git a/packages/core/logging/core-logging-server-internal/src/global_context/types.ts b/packages/core/logging/core-logging-server-internal/src/global_context/types.ts new file mode 100644 index 0000000000000..bb377aa14e390 --- /dev/null +++ b/packages/core/logging/core-logging-server-internal/src/global_context/types.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/** + * A flattened object containing lodash-style dot-separated keys, which + * indicate the path to where each corresponding value should live in a + * nested object. + * + * @remarks + * Arrays are treated as primitives here: array entries should not be broken + * down into separate keys. + * + * @example + * ```ts + * const context: GlobalContext = { + * a: true, + * 'b.c': [1, 2, 3], + * 'd.e.f': 'g', + * }; + * ``` + * + * @internal + */ +export type GlobalContext = Record; diff --git a/packages/core/logging/core-logging-server-internal/src/logger_adapter.test.ts b/packages/core/logging/core-logging-server-internal/src/logger_adapter.test.ts index c7be02e5c0a98..28f747ef3fcf6 100644 --- a/packages/core/logging/core-logging-server-internal/src/logger_adapter.test.ts +++ b/packages/core/logging/core-logging-server-internal/src/logger_adapter.test.ts @@ -7,84 +7,172 @@ */ import type { Logger } from '@kbn/logging'; +import { loggerMock } from '@kbn/logging-mocks'; import { LoggerAdapter } from './logger_adapter'; -test('proxies all method calls to the internal logger.', () => { - const internalLogger: Logger = { - debug: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), - info: jest.fn(), - log: jest.fn(), - trace: jest.fn(), - warn: jest.fn(), - get: jest.fn(), - }; - - const adapter = new LoggerAdapter(internalLogger); - - adapter.trace('trace-message'); - expect(internalLogger.trace).toHaveBeenCalledTimes(1); - expect(internalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); - - adapter.debug('debug-message'); - expect(internalLogger.debug).toHaveBeenCalledTimes(1); - expect(internalLogger.debug).toHaveBeenCalledWith('debug-message', undefined); - - adapter.info('info-message'); - expect(internalLogger.info).toHaveBeenCalledTimes(1); - expect(internalLogger.info).toHaveBeenCalledWith('info-message', undefined); - - adapter.warn('warn-message'); - expect(internalLogger.warn).toHaveBeenCalledTimes(1); - expect(internalLogger.warn).toHaveBeenCalledWith('warn-message', undefined); - - adapter.error('error-message'); - expect(internalLogger.error).toHaveBeenCalledTimes(1); - expect(internalLogger.error).toHaveBeenCalledWith('error-message', undefined); - - adapter.fatal('fatal-message'); - expect(internalLogger.fatal).toHaveBeenCalledTimes(1); - expect(internalLogger.fatal).toHaveBeenCalledWith('fatal-message', undefined); - - adapter.get('context'); - expect(internalLogger.get).toHaveBeenCalledTimes(1); - expect(internalLogger.get).toHaveBeenCalledWith('context'); -}); +describe('LoggerAdapter', () => { + let internalLogger: Logger; + + beforeEach(() => { + internalLogger = loggerMock.create(); + }); + + test('proxies all method calls to the internal logger.', () => { + const adapter = new LoggerAdapter(internalLogger); + + adapter.trace('trace-message'); + expect(internalLogger.trace).toHaveBeenCalledTimes(1); + expect(internalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); + + adapter.debug('debug-message'); + expect(internalLogger.debug).toHaveBeenCalledTimes(1); + expect(internalLogger.debug).toHaveBeenCalledWith('debug-message', undefined); + + adapter.info('info-message'); + expect(internalLogger.info).toHaveBeenCalledTimes(1); + expect(internalLogger.info).toHaveBeenCalledWith('info-message', undefined); + + adapter.warn('warn-message'); + expect(internalLogger.warn).toHaveBeenCalledTimes(1); + expect(internalLogger.warn).toHaveBeenCalledWith('warn-message', undefined); + + adapter.error('error-message'); + expect(internalLogger.error).toHaveBeenCalledTimes(1); + expect(internalLogger.error).toHaveBeenCalledWith('error-message', undefined); + + adapter.fatal('fatal-message'); + expect(internalLogger.fatal).toHaveBeenCalledTimes(1); + expect(internalLogger.fatal).toHaveBeenCalledWith('fatal-message', undefined); + + adapter.get('context'); + expect(internalLogger.get).toHaveBeenCalledTimes(1); + expect(internalLogger.get).toHaveBeenCalledWith('context'); + }); + + test('forwards all method calls to new internal logger if it is updated.', () => { + const newInternalLogger = loggerMock.create(); + + const adapter = new LoggerAdapter(internalLogger); + + adapter.trace('trace-message'); + expect(internalLogger.trace).toHaveBeenCalledTimes(1); + expect(internalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); + (internalLogger.trace as jest.Mock<() => void>).mockReset(); + + adapter.updateLogger(newInternalLogger); + adapter.trace('trace-message'); + expect(internalLogger.trace).not.toHaveBeenCalled(); + expect(newInternalLogger.trace).toHaveBeenCalledTimes(1); + expect(newInternalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); + }); + + describe('global context', () => { + ['trace', 'debug', 'info', 'warn', 'error', 'fatal'].forEach((method) => { + test(`inserts global context in ${method} entries`, () => { + const adapter = new LoggerAdapter(internalLogger, { 'a.b.c': `${method}: d` }); + + // @ts-expect-error Custom ECS field + adapter[method](`new ${method} message`, { hello: 'world' }); + expect(internalLogger[method as keyof Logger]).toHaveBeenCalledTimes(1); + expect(internalLogger[method as keyof Logger]).toHaveBeenCalledWith( + `new ${method} message`, + { + hello: 'world', + a: { b: { c: `${method}: d` } }, + } + ); + + adapter.updateGlobalContext({ e: true }); + + // @ts-expect-error Custom ECS field + adapter[method](`another new ${method} message`, { hello: 'world' }); + expect(internalLogger[method as keyof Logger]).toHaveBeenCalledTimes(2); + expect(internalLogger[method as keyof Logger]).toHaveBeenCalledWith( + `another new ${method} message`, + { + hello: 'world', + e: true, + } + ); + }); + }); + + test('inserts global meta in log entries', () => { + const adapter = new LoggerAdapter(internalLogger, { 'a.b.c': 'd' }); + + adapter.log({ + message: 'message', + meta: { + // @ts-expect-error Custom ECS field + hello: 'world', + }, + }); + expect(internalLogger.log).toHaveBeenCalledTimes(1); + expect(internalLogger.log).toHaveBeenCalledWith({ + message: 'message', + meta: { + hello: 'world', + a: { b: { c: 'd' } }, + }, + }); + + adapter.updateGlobalContext({ e: true }); + + adapter.log({ + message: 'another message', + meta: { + // @ts-expect-error Custom ECS field + hello: 'world', + }, + }); + expect(internalLogger.log).toHaveBeenCalledTimes(2); + expect(internalLogger.log).toHaveBeenCalledWith({ + message: 'another message', + meta: { + hello: 'world', + e: true, + }, + }); + }); + + test('does not overwrite user-provided meta with global meta if the path already exists', () => { + const adapter = new LoggerAdapter(internalLogger, { hello: 'there' }); + + // @ts-expect-error Custom ECS field + adapter.info('message', { hello: 'world' }); + expect(internalLogger.info).toHaveBeenCalledTimes(1); + expect(internalLogger.info).toHaveBeenCalledWith('message', { + hello: 'world', + }); + }); + + test('does nothing if no global meta has been set', () => { + const adapter = new LoggerAdapter(internalLogger); + + // @ts-expect-error Custom ECS field + adapter.info('message', { hello: 'world' }); + expect(internalLogger.info).toHaveBeenCalledTimes(1); + expect(internalLogger.info).toHaveBeenCalledWith('message', { + hello: 'world', + }); + }); + + test('adds global meta even if no user-provided meta exists', () => { + const adapter = new LoggerAdapter(internalLogger, { hello: 'there' }); + + adapter.info('message'); + expect(internalLogger.info).toHaveBeenCalledTimes(1); + expect(internalLogger.info).toHaveBeenCalledWith('message', { + hello: 'there', + }); + }); + + test('does nothing if no global meta or user-provided meta has been set', () => { + const adapter = new LoggerAdapter(internalLogger); -test('forwards all method calls to new internal logger if it is updated.', () => { - const oldInternalLogger: Logger = { - debug: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), - info: jest.fn(), - log: jest.fn(), - trace: jest.fn(), - warn: jest.fn(), - get: jest.fn(), - }; - - const newInternalLogger: Logger = { - debug: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), - info: jest.fn(), - log: jest.fn(), - trace: jest.fn(), - warn: jest.fn(), - get: jest.fn(), - }; - - const adapter = new LoggerAdapter(oldInternalLogger); - - adapter.trace('trace-message'); - expect(oldInternalLogger.trace).toHaveBeenCalledTimes(1); - expect(oldInternalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); - (oldInternalLogger.trace as jest.Mock<() => void>).mockReset(); - - adapter.updateLogger(newInternalLogger); - adapter.trace('trace-message'); - expect(oldInternalLogger.trace).not.toHaveBeenCalled(); - expect(newInternalLogger.trace).toHaveBeenCalledTimes(1); - expect(newInternalLogger.trace).toHaveBeenCalledWith('trace-message', undefined); + adapter.info('message'); + expect(internalLogger.info).toHaveBeenCalledTimes(1); + expect(internalLogger.info).toHaveBeenCalledWith('message', undefined); + }); + }); }); diff --git a/packages/core/logging/core-logging-server-internal/src/logger_adapter.ts b/packages/core/logging/core-logging-server-internal/src/logger_adapter.ts index d2a2c7f52923a..5439fe0205796 100644 --- a/packages/core/logging/core-logging-server-internal/src/logger_adapter.ts +++ b/packages/core/logging/core-logging-server-internal/src/logger_adapter.ts @@ -7,10 +7,11 @@ */ import { LogRecord, Logger, LogMeta } from '@kbn/logging'; +import { GlobalContext, mergeGlobalContext } from './global_context'; /** @internal */ export class LoggerAdapter implements Logger { - constructor(private logger: Logger) {} + constructor(private logger: Logger, private globalContext: GlobalContext = {}) {} /** * The current logger can be updated "on the fly", e.g. when the log config @@ -24,32 +25,44 @@ export class LoggerAdapter implements Logger { this.logger = logger; } + /** + * The current record of {@link GlobalContext} that can be updated on the fly. + * Any updates via this method will be applied to all subsequent log entries. + * + * This is not intended for external use, only internally in Kibana + * + * @internal + */ + public updateGlobalContext(context: GlobalContext) { + this.globalContext = context; + } + public trace(message: string, meta?: LogMeta): void { - this.logger.trace(message, meta); + this.logger.trace(message, mergeGlobalContext(this.globalContext, meta)); } public debug(message: string, meta?: LogMeta): void { - this.logger.debug(message, meta); + this.logger.debug(message, mergeGlobalContext(this.globalContext, meta)); } public info(message: string, meta?: LogMeta): void { - this.logger.info(message, meta); + this.logger.info(message, mergeGlobalContext(this.globalContext, meta)); } public warn(errorOrMessage: string | Error, meta?: LogMeta): void { - this.logger.warn(errorOrMessage, meta); + this.logger.warn(errorOrMessage, mergeGlobalContext(this.globalContext, meta)); } public error(errorOrMessage: string | Error, meta?: LogMeta): void { - this.logger.error(errorOrMessage, meta); + this.logger.error(errorOrMessage, mergeGlobalContext(this.globalContext, meta)); } public fatal(errorOrMessage: string | Error, meta?: LogMeta): void { - this.logger.fatal(errorOrMessage, meta); + this.logger.fatal(errorOrMessage, mergeGlobalContext(this.globalContext, meta)); } public log(record: LogRecord) { - this.logger.log(record); + this.logger.log({ ...record, meta: mergeGlobalContext(this.globalContext, record.meta) }); } public get(...contextParts: string[]): Logger { diff --git a/packages/core/logging/core-logging-server-internal/src/logging_service.test.ts b/packages/core/logging/core-logging-server-internal/src/logging_service.test.ts index 965337fca4a31..1e8f7bddbb86b 100644 --- a/packages/core/logging/core-logging-server-internal/src/logging_service.test.ts +++ b/packages/core/logging/core-logging-server-internal/src/logging_service.test.ts @@ -22,6 +22,7 @@ const createLoggingSystemMock = () => { get: jest.fn().mockImplementation(() => loggerMock.create()), asLoggerFactory: jest.fn().mockImplementation(() => loggerMock.create()), setContextConfig: jest.fn(), + setGlobalContext: jest.fn(), upgrade: jest.fn(), stop: jest.fn(), }; diff --git a/packages/core/logging/core-logging-server-internal/src/logging_system.test.mocks.ts b/packages/core/logging/core-logging-server-internal/src/logging_system.test.mocks.ts new file mode 100644 index 0000000000000..abda107ae2144 --- /dev/null +++ b/packages/core/logging/core-logging-server-internal/src/logging_system.test.mocks.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { merge, getFlattenedObject } from '@kbn/std'; + +export const mockStreamWrite = jest.fn(); +jest.doMock('fs', () => ({ + ...(jest.requireActual('fs') as any), + constants: {}, + createWriteStream: jest.fn(() => ({ write: mockStreamWrite })), +})); + +export const mockGetFlattenedObject = jest.fn().mockImplementation(getFlattenedObject); +jest.doMock('@kbn/std', () => ({ + merge: jest.fn().mockImplementation(merge), + getFlattenedObject: mockGetFlattenedObject, +})); diff --git a/packages/core/logging/core-logging-server-internal/src/logging_system.test.ts b/packages/core/logging/core-logging-server-internal/src/logging_system.test.ts index ebe06326f499d..724319dbfb565 100644 --- a/packages/core/logging/core-logging-server-internal/src/logging_system.test.ts +++ b/packages/core/logging/core-logging-server-internal/src/logging_system.test.ts @@ -6,12 +6,7 @@ * Side Public License, v 1. */ -const mockStreamWrite = jest.fn(); -jest.mock('fs', () => ({ - ...(jest.requireActual('fs') as any), - constants: {}, - createWriteStream: jest.fn(() => ({ write: mockStreamWrite })), -})); +import { mockStreamWrite, mockGetFlattenedObject } from './logging_system.test.mocks'; const dynamicProps = { process: { pid: expect.any(Number) } }; @@ -34,6 +29,7 @@ afterEach(() => { jest.restoreAllMocks(); mockCreateWriteStream.mockClear(); mockStreamWrite.mockClear(); + mockGetFlattenedObject.mockClear(); }); test('uses default memory buffer logger until config is provided', () => { @@ -521,3 +517,115 @@ test('buffers log records for appenders created during config upgrade', async () await upgradePromise; expect(JSON.parse(mockConsoleLog.mock.calls[0][0]).message).toBe('message to a new context'); }); + +test('setGlobalContext() applies meta to new and existing loggers', async () => { + await system.upgrade( + config.schema.validate({ + appenders: { default: { type: 'console', layout: { type: 'json' } } }, + root: { level: 'info' }, + }) + ); + + const existingLogger = system.get('some-existing-context'); + // @ts-expect-error Custom ECS field + system.setGlobalContext({ a: { b: { c: true } } }); + const newLogger = system.get('some-new-context'); + + existingLogger.info('You know, just for your info.'); + newLogger.info('You know, just for your info.'); + // @ts-expect-error Custom ECS field + existingLogger.warn('You have been warned.', { someMeta: 'goes here' }); + // @ts-expect-error Custom ECS field + newLogger.warn('You have been warned.', { someMeta: 'goes here' }); + + expect(mockConsoleLog).toHaveBeenCalledTimes(4); + expect(JSON.parse(mockConsoleLog.mock.calls[0][0])).toMatchObject({ + log: { logger: 'some-existing-context' }, + message: 'You know, just for your info.', + a: { b: { c: true } }, + }); + expect(JSON.parse(mockConsoleLog.mock.calls[1][0])).toMatchObject({ + log: { logger: 'some-new-context' }, + message: 'You know, just for your info.', + a: { b: { c: true } }, + }); + expect(JSON.parse(mockConsoleLog.mock.calls[2][0])).toMatchObject({ + log: { logger: 'some-existing-context' }, + message: 'You have been warned.', + someMeta: 'goes here', + a: { b: { c: true } }, + }); + expect(JSON.parse(mockConsoleLog.mock.calls[3][0])).toMatchObject({ + log: { logger: 'some-new-context' }, + message: 'You have been warned.', + someMeta: 'goes here', + a: { b: { c: true } }, + }); +}); + +test('new global context always overwrites existing context', async () => { + await system.upgrade( + config.schema.validate({ + appenders: { default: { type: 'console', layout: { type: 'json' } } }, + root: { level: 'info' }, + }) + ); + + const logger = system.get('some-context'); + + // @ts-expect-error Custom ECS field + system.setGlobalContext({ a: { b: { c: true } }, d: false }); + logger.info('You know, just for your info.'); + + // @ts-expect-error Custom ECS field + system.setGlobalContext({ a: false, d: true }); + logger.info('You know, just for your info, again.'); + + expect(mockConsoleLog).toHaveBeenCalledTimes(2); + expect(JSON.parse(mockConsoleLog.mock.calls[0][0])).toMatchObject({ + log: { logger: 'some-context' }, + message: 'You know, just for your info.', + a: { b: { c: true } }, + d: false, + }); + expect(JSON.parse(mockConsoleLog.mock.calls[1][0])).toMatchObject({ + log: { logger: 'some-context' }, + message: 'You know, just for your info, again.', + a: false, + d: true, + }); +}); + +test('flattens global context objects before passing to LoggerAdapter', async () => { + await system.upgrade( + config.schema.validate({ + appenders: { default: { type: 'console', layout: { type: 'json' } } }, + root: { level: 'info' }, + }) + ); + + // @ts-expect-error Custom ECS field + system.setGlobalContext({ a: { b: { c: true } }, d: false }); + + const logger = system.get('some-context'); + + // @ts-expect-error Custom ECS field + system.setGlobalContext({ d: true, e: false }); + + logger.info('You know, just for your info.'); + + expect(mockGetFlattenedObject).toHaveBeenCalledTimes(3); + expect(mockGetFlattenedObject.mock.calls[0][0]).toEqual({ + a: { b: { c: true } }, + d: false, + }); + expect(mockGetFlattenedObject.mock.calls[1][0]).toEqual({ + a: { b: { c: true } }, + d: false, + }); + expect(mockGetFlattenedObject.mock.calls[2][0]).toEqual({ + a: { b: { c: true } }, + d: true, + e: false, + }); +}); diff --git a/packages/core/logging/core-logging-server-internal/src/logging_system.ts b/packages/core/logging/core-logging-server-internal/src/logging_system.ts index a267651ebe55a..c1bdf38433189 100644 --- a/packages/core/logging/core-logging-server-internal/src/logging_system.ts +++ b/packages/core/logging/core-logging-server-internal/src/logging_system.ts @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import { DisposableAppender, LogLevel, Logger, LoggerFactory } from '@kbn/logging'; +import { getFlattenedObject, merge } from '@kbn/std'; +import { DisposableAppender, LogLevel, Logger, LoggerFactory, LogMeta } from '@kbn/logging'; import type { LoggerConfigType, LoggerContextConfigInput } from '@kbn/core-logging-server'; import { Appenders } from './appenders/appenders'; import { BufferAppender } from './appenders/buffer/buffer_appender'; @@ -25,6 +26,7 @@ export interface ILoggingSystem extends LoggerFactory { asLoggerFactory(): LoggerFactory; upgrade(rawConfig?: LoggingConfigType): Promise; setContextConfig(baseContextParts: string[], rawConfig: LoggerContextConfigInput): Promise; + setGlobalContext(meta: Partial): void; stop(): Promise; } @@ -41,13 +43,20 @@ export class LoggingSystem implements ILoggingSystem { private readonly bufferAppender = new BufferAppender(); private readonly loggers: Map = new Map(); private readonly contextConfigs = new Map(); + private globalContext: Partial = {}; constructor() {} public get(...contextParts: string[]): Logger { const context = LoggingConfig.getLoggerContext(contextParts); if (!this.loggers.has(context)) { - this.loggers.set(context, new LoggerAdapter(this.createLogger(context, this.computedConfig))); + this.loggers.set( + context, + new LoggerAdapter( + this.createLogger(context, this.computedConfig), + getFlattenedObject(this.globalContext) + ) + ); } return this.loggers.get(context)!; } @@ -110,6 +119,23 @@ export class LoggingSystem implements ILoggingSystem { } } + /** + * A mechanism for specifying some "global" {@link LogMeta} that we want + * to inject into all log entries. + * + * @remarks + * The provided context will be merged with the meta of each individual log + * entry. In the case of conflicting keys, the global context will always be + * overridden by the log entry. + */ + public setGlobalContext(meta: Partial) { + this.globalContext = merge(this.globalContext, meta); + const flattenedContext = getFlattenedObject(this.globalContext); + for (const loggerAdapter of this.loggers.values()) { + loggerAdapter.updateGlobalContext(flattenedContext); + } + } + /** * Disposes all loggers (closes log files, clears buffers etc.). Service is not usable after * calling of this method until new config is provided via `upgrade` method. diff --git a/packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts b/packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts index b486839ddac6a..ca09498d92640 100644 --- a/packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts +++ b/packages/core/logging/core-logging-server-mocks/src/logging_system.mock.ts @@ -23,6 +23,7 @@ const createLoggingSystemMock = () => { get: jest.fn(), asLoggerFactory: jest.fn(), setContextConfig: jest.fn(), + setGlobalContext: jest.fn(), upgrade: jest.fn(), stop: jest.fn(), }; diff --git a/packages/core/node/core-node-server-internal/BUILD.bazel b/packages/core/node/core-node-server-internal/BUILD.bazel index dfbd25fdaeb73..5acec90dbd637 100644 --- a/packages/core/node/core-node-server-internal/BUILD.bazel +++ b/packages/core/node/core-node-server-internal/BUILD.bazel @@ -39,6 +39,7 @@ TYPES_DEPS = [ "//packages/kbn-config-schema:npm_module_types", "//packages/kbn-logging:npm_module_types", "//packages/core/base/core-base-server-internal:npm_module_types", + "//packages/core/logging/core-logging-server-internal:npm_module_types", "//packages/core/node/core-node-server:npm_module_types", ] diff --git a/packages/core/node/core-node-server-internal/src/node_service.test.ts b/packages/core/node/core-node-server-internal/src/node_service.test.ts index 309535905445f..a707e8ec1aed8 100644 --- a/packages/core/node/core-node-server-internal/src/node_service.test.ts +++ b/packages/core/node/core-node-server-internal/src/node_service.test.ts @@ -47,7 +47,7 @@ describe('NodeService', () => { coreContext = mockCoreContext.create({ logger, configService }); service = new NodeService(coreContext); - const { roles } = await service.preboot(); + const { roles } = await service.preboot({ loggingSystem: logger }); expect(roles.backgroundTasks).toBe(true); expect(roles.ui).toBe(true); @@ -58,7 +58,7 @@ describe('NodeService', () => { coreContext = mockCoreContext.create({ logger, configService }); service = new NodeService(coreContext); - const { roles } = await service.preboot(); + const { roles } = await service.preboot({ loggingSystem: logger }); expect(roles.backgroundTasks).toBe(true); expect(roles.ui).toBe(false); @@ -69,7 +69,7 @@ describe('NodeService', () => { coreContext = mockCoreContext.create({ logger, configService }); service = new NodeService(coreContext); - const { roles } = await service.preboot(); + const { roles } = await service.preboot({ loggingSystem: logger }); expect(roles.backgroundTasks).toBe(false); expect(roles.ui).toBe(true); @@ -80,7 +80,7 @@ describe('NodeService', () => { coreContext = mockCoreContext.create({ logger, configService }); service = new NodeService(coreContext); - const { roles } = await service.preboot(); + const { roles } = await service.preboot({ loggingSystem: logger }); expect(roles.backgroundTasks).toBe(true); expect(roles.ui).toBe(true); @@ -94,7 +94,7 @@ describe('NodeService', () => { coreContext = mockCoreContext.create({ logger, configService }); service = new NodeService(coreContext); - await service.preboot(); + await service.preboot({ loggingSystem: logger }); expect(logger.get).toHaveBeenCalledTimes(1); expect(logger.get).toHaveBeenCalledWith('node'); @@ -103,5 +103,18 @@ describe('NodeService', () => { `"Kibana process configured with roles: [background_tasks, ui]"` ); }); + + it('sets the node roles in the global context', async () => { + configService = getMockedConfigService({ roles: ['*'] }); + coreContext = mockCoreContext.create({ logger, configService }); + + service = new NodeService(coreContext); + await service.preboot({ loggingSystem: logger }); + + expect(logger.setGlobalContext).toHaveBeenCalledTimes(1); + expect(logger.setGlobalContext).toHaveBeenCalledWith({ + service: { node: { roles: ['background_tasks', 'ui'] } }, + }); + }); }); }); diff --git a/packages/core/node/core-node-server-internal/src/node_service.ts b/packages/core/node/core-node-server-internal/src/node_service.ts index 10006744cf956..cd73c7f85e6f5 100644 --- a/packages/core/node/core-node-server-internal/src/node_service.ts +++ b/packages/core/node/core-node-server-internal/src/node_service.ts @@ -10,6 +10,7 @@ import { firstValueFrom } from 'rxjs'; import { camelCase } from 'lodash'; import type { IConfigService } from '@kbn/config'; import type { CoreContext } from '@kbn/core-base-server-internal'; +import type { ILoggingSystem } from '@kbn/core-logging-server-internal'; import type { NodeRoles } from '@kbn/core-node-server'; import type { Logger } from '@kbn/logging'; import { @@ -32,6 +33,10 @@ export interface InternalNodeServicePreboot { roles: NodeRoles; } +interface PrebootDeps { + loggingSystem: ILoggingSystem; +} + /** @internal */ export class NodeService { private readonly configService: IConfigService; @@ -42,18 +47,15 @@ export class NodeService { this.log = core.logger.get('node'); } - public async preboot(): Promise { - const nodeRoles = await this.getNodeRoles(); - this.log.info(`Kibana process configured with roles: [${nodeRoles.join(', ')}]`, { - service: { - // @ts-expect-error Field not available in ECS until 8.4 - node: { roles: nodeRoles }, - }, - }); + public async preboot({ loggingSystem }: PrebootDeps): Promise { + const roles = await this.getNodeRoles(); + // @ts-expect-error Custom ECS field + loggingSystem.setGlobalContext({ service: { node: { roles } } }); + this.log.info(`Kibana process configured with roles: [${roles.join(', ')}]`); return { roles: NODE_ACCEPTED_ROLES.reduce((acc, curr) => { - return { ...acc, [camelCase(curr)]: nodeRoles.includes(curr) }; + return { ...acc, [camelCase(curr)]: roles.includes(curr) }; }, {} as NodeRoles), }; } diff --git a/src/core/server/node/integration_tests/logging.test.ts b/src/core/server/node/integration_tests/logging.test.ts new file mode 100644 index 0000000000000..931e56beeab73 --- /dev/null +++ b/src/core/server/node/integration_tests/logging.test.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import * as kbnTestServer from '../../../test_helpers/kbn_server'; + +function createRootWithRoles(roles: string[]) { + return kbnTestServer.createRoot({ + node: { + roles, + }, + logging: { + appenders: { + 'test-console': { + type: 'console', + layout: { + type: 'json', + }, + }, + }, + root: { + appenders: ['test-console'], + level: 'info', + }, + }, + }); +} + +describe('node service global context', () => { + const validRoles = [['ui', 'background_tasks'], ['ui'], ['background_tasks']]; + + validRoles.forEach((roles) => { + describe(`with node.roles: ${roles}`, () => { + let root: ReturnType; + let mockConsoleLog: jest.SpyInstance; + + beforeAll(async () => { + mockConsoleLog = jest.spyOn(global.console, 'log'); + root = createRootWithRoles(roles); + + await root.preboot(); + await root.setup(); + }, 30000); + + beforeEach(() => { + mockConsoleLog.mockClear(); + }); + + afterAll(async () => { + mockConsoleLog.mockRestore(); + await root.shutdown(); + }); + + it('logs the correct roles in service.node.roles', () => { + const logger = root.logger.get('foo.bar'); + + logger.info('test info'); + + expect(mockConsoleLog).toHaveBeenCalledTimes(1); + expect(JSON.parse(mockConsoleLog.mock.calls[0][0])).toEqual( + expect.objectContaining({ service: { node: { roles } } }) + ); + }); + }); + }); +}); diff --git a/src/core/server/server.ts b/src/core/server/server.ts index 6f5e072aa1fa7..5f811723845c1 100644 --- a/src/core/server/server.ts +++ b/src/core/server/server.ts @@ -167,7 +167,7 @@ export class Server { const analyticsPreboot = this.analytics.preboot(); const environmentPreboot = await this.environment.preboot({ analytics: analyticsPreboot }); - const nodePreboot = await this.node.preboot(); + const nodePreboot = await this.node.preboot({ loggingSystem: this.loggingSystem }); // Discover any plugins before continuing. This allows other systems to utilize the plugin dependency graph. this.discoveredPlugins = await this.plugins.discover({ From 4f13ea8435dd5aab9095ebf353213268b1643ac8 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 14 Jul 2022 14:09:39 -0600 Subject: [PATCH 75/96] [Dashboard] [Controls] Hide controls callout when the `hideAnnouncements` setting is `true` (#136410) * Make controls callout dependent on new UI setting * Add functional test --- .../viewport/dashboard_viewport.tsx | 6 ++- .../controls/controls_callout.ts | 39 ++++++++++++++++++- .../functional/page_objects/dashboard_page.ts | 6 +++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx index 7726258b399e2..318db746fbe42 100644 --- a/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx +++ b/src/plugins/dashboard/public/application/embeddable/viewport/dashboard_viewport.tsx @@ -107,12 +107,16 @@ export class DashboardViewport extends React.Component {controlsEnabled ? ( <> - {isEditMode && panelCount !== 0 && controlGroup?.getPanelCount() === 0 ? ( + {!hideAnnouncements && + isEditMode && + panelCount !== 0 && + controlGroup?.getPanelCount() === 0 ? ( { return controlGroup?.getCreateControlButton('callout'); diff --git a/test/functional/apps/dashboard_elements/controls/controls_callout.ts b/test/functional/apps/dashboard_elements/controls/controls_callout.ts index 73bf8fb50c241..0883957c37d8a 100644 --- a/test/functional/apps/dashboard_elements/controls/controls_callout.ts +++ b/test/functional/apps/dashboard_elements/controls/controls_callout.ts @@ -11,8 +11,12 @@ import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { + const kibanaServer = getService('kibanaServer'); + const browser = getService('browser'); const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const { dashboardControls, timePicker, dashboard } = getPageObjects([ 'dashboardControls', 'timePicker', @@ -25,12 +29,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('callout visibility', async () => { before(async () => { await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); await timePicker.setDefaultDataRange(); await dashboard.saveDashboard('Test Controls Callout'); }); describe('does not show the empty control callout on an empty dashboard', async () => { + before(async () => { + const panelCount = await dashboard.getPanelCount(); + if (panelCount > 0) { + const panels = await dashboard.getAllPanels(); + for (const panel of panels) { + await dashboardPanelActions.removePanel(panel); + } + await dashboard.clickQuickSave(); + } + }); + it('in view mode', async () => { await dashboard.clickCancelOutOfEditMode(); await testSubjects.missingOrFail('controls-empty'); @@ -44,7 +60,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('show the empty control callout on a dashboard with panels', async () => { await dashboard.switchToEditMode(); - await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); + const panelCount = await dashboard.getPanelCount(); + if (panelCount < 1) { + await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); + } await testSubjects.existOrFail('controls-empty'); }); @@ -57,6 +76,24 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.missingOrFail('controls-empty'); }); + it('deleting all controls shows the emoty control callout again', async () => { + await dashboardControls.deleteAllControls(); + await testSubjects.existOrFail('controls-empty'); + }); + + it('hide callout when hide announcement setting is true', async () => { + await dashboard.clickQuickSave(); + await dashboard.gotoDashboardLandingPage(); + await kibanaServer.uiSettings.update({ hideAnnouncements: true }); + await browser.refresh(); + + await dashboard.loadSavedDashboard('Test Controls Callout'); + await dashboard.switchToEditMode(); + await testSubjects.missingOrFail('controls-empty'); + + await kibanaServer.uiSettings.update({ hideAnnouncements: false }); + }); + after(async () => { await dashboard.clickCancelOutOfEditMode(); await dashboard.gotoDashboardLandingPage(); diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index a035e05d9a0f1..7ff6bff172f58 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -42,6 +42,7 @@ export class DashboardPageObject extends FtrService { private readonly header = this.ctx.getPageObject('header'); private readonly visualize = this.ctx.getPageObject('visualize'); private readonly discover = this.ctx.getPageObject('discover'); + private readonly logstashIndex = this.config.get('esTestCluster.ccs') ? 'ftr-remote:logstash-*' : 'logstash-*'; @@ -605,6 +606,11 @@ export class DashboardPageObject extends FtrService { return panels.length; } + public async getAllPanels() { + this.log.debug('getAllPanels'); + return await this.testSubjects.findAll('embeddablePanel'); + } + public getTestVisualizations() { return [ { name: PIE_CHART_VIS_NAME, description: 'PieChart' }, From 2a6f8e8130d5a56a9118b9dbc789a07693ba9a15 Mon Sep 17 00:00:00 2001 From: Quynh Nguyen <43350163+qn895@users.noreply.github.com> Date: Thu, 14 Jul 2022 15:18:00 -0500 Subject: [PATCH 76/96] [ML] Data Visualizer: Remove duplicated geo examples, support 'version' type, add filters for boolean fields, and add sticky header to Discover (#136236) * [ML] Add filter to boolean content * [ML] Change to version type if detected from estypes * [ML] Remove duplicated geo examples * [ML] Change duplicated geo util to duplicated generic util * [ML] Use name for data view instead of title * [ML] Add sticky header for field stats table in Discover * [ML] Move unknown to bottom, rename JOB_FIELD_TYPES --- .../data_visualizer/common/constants.ts | 5 +- .../common/types/field_request_config.ts | 12 +- .../common/types/job_field_type.ts | 4 +- .../examples_list/examples_list.tsx | 17 +- .../expanded_row/file_based_expanded_row.tsx | 17 +- .../geo_point_content_with_map.tsx | 8 +- .../expanded_row/index_based_expanded_row.tsx | 21 +-- .../field_data_row/action_menu/actions.ts | 7 +- .../field_data_row/action_menu/lens_utils.ts | 25 +-- .../field_type_icon/field_type_icon.test.tsx | 6 +- .../fields_stats_grid/create_fields.ts | 20 +-- .../fields_stats_grid/filter_fields.ts | 4 +- .../fields_stats_grid/get_field_names.ts | 6 +- .../common/components/stats_table/_index.scss | 5 +- .../boolean_content.tsx | 93 ++++------- .../data_visualizer_stats_table.tsx | 25 ++- .../common/util/example_utils.test.ts | 153 ++++++++++++++++++ .../application/common/util/example_utils.ts | 58 +++++++ .../common/util/field_types_utils.test.ts | 16 +- .../common/util/field_types_utils.ts | 77 +++++---- .../index_data_visualizer_view.tsx | 2 +- .../hooks/use_data_visualizer_grid_data.ts | 5 +- .../requests/get_field_examples.ts | 21 +-- .../requests/get_fields_stats.ts | 15 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 27 files changed, 433 insertions(+), 192 deletions(-) create mode 100644 x-pack/plugins/data_visualizer/public/application/common/util/example_utils.test.ts create mode 100644 x-pack/plugins/data_visualizer/public/application/common/util/example_utils.ts diff --git a/x-pack/plugins/data_visualizer/common/constants.ts b/x-pack/plugins/data_visualizer/common/constants.ts index f31a42cc7784c..1923613d72c58 100644 --- a/x-pack/plugins/data_visualizer/common/constants.ts +++ b/x-pack/plugins/data_visualizer/common/constants.ts @@ -29,16 +29,17 @@ export const FILE_FORMATS = { // XML: 'xml', }; -export const JOB_FIELD_TYPES = { +export const SUPPORTED_FIELD_TYPES = { BOOLEAN: 'boolean', DATE: 'date', GEO_POINT: 'geo_point', GEO_SHAPE: 'geo_shape', + HISTOGRAM: 'histogram', IP: 'ip', KEYWORD: 'keyword', NUMBER: 'number', TEXT: 'text', - HISTOGRAM: 'histogram', + VERSION: 'version', UNKNOWN: 'unknown', } as const; diff --git a/x-pack/plugins/data_visualizer/common/types/field_request_config.ts b/x-pack/plugins/data_visualizer/common/types/field_request_config.ts index 5f21748575831..4db8cc8aa7996 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_request_config.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_request_config.ts @@ -29,6 +29,16 @@ export interface DocumentCounts { interval?: number; } +export interface LatLongExample { + lat: number; + lon: number; +} + +export interface GeoPointExample { + coordinates: number[]; + type?: string; +} + export interface FieldVisStats { error?: Error; cardinality?: number; @@ -56,7 +66,7 @@ export interface FieldVisStats { topValues?: Array<{ key: number | string; doc_count: number }>; topValuesSampleSize?: number; topValuesSamplerShardSize?: number; - examples?: Array; + examples?: Array; timeRangeEarliest?: number; timeRangeLatest?: number; } diff --git a/x-pack/plugins/data_visualizer/common/types/job_field_type.ts b/x-pack/plugins/data_visualizer/common/types/job_field_type.ts index ecb6ade035695..bc44361a416c7 100644 --- a/x-pack/plugins/data_visualizer/common/types/job_field_type.ts +++ b/x-pack/plugins/data_visualizer/common/types/job_field_type.ts @@ -5,5 +5,5 @@ * 2.0. */ -import { JOB_FIELD_TYPES } from '../constants'; -export type JobFieldType = typeof JOB_FIELD_TYPES[keyof typeof JOB_FIELD_TYPES]; +import { SUPPORTED_FIELD_TYPES } from '../constants'; +export type JobFieldType = typeof SUPPORTED_FIELD_TYPES[keyof typeof SUPPORTED_FIELD_TYPES]; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/examples_list/examples_list.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/examples_list/examples_list.tsx index c4792b314b6a6..71722faab8829 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/examples_list/examples_list.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/examples_list/examples_list.tsx @@ -10,12 +10,19 @@ import React, { FC } from 'react'; import { EuiListGroup, EuiListGroupItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { GeoPointExample } from '../../../../../common/types/field_request_config'; import { ExpandedRowFieldHeader } from '../stats_table/components/expanded_row_field_header'; import { ExpandedRowPanel } from '../stats_table/components/field_data_expanded_row/expanded_row_panel'; + interface Props { - examples: Array; + examples: Array; } +const EMPTY_EXAMPLE = i18n.translate( + 'xpack.dataVisualizer.dataGrid.field.examplesList.emptyExampleMessage', + { defaultMessage: '(empty)' } +); export const ExamplesList: FC = ({ examples }) => { if (examples === undefined || examples === null || !Array.isArray(examples)) { return null; @@ -34,7 +41,13 @@ export const ExamplesList: FC = ({ examples }) => { ); }); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/file_based_expanded_row.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/file_based_expanded_row.tsx index 07e5d01e71d9b..ebe37dda153f4 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/file_based_expanded_row.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/file_based_expanded_row.tsx @@ -16,7 +16,7 @@ import { NumberContent, } from '../stats_table/components/field_data_expanded_row'; import { GeoPointContent } from './geo_point_content/geo_point_content'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; import type { FileBasedFieldVisConfig } from '../../../../../common/types/field_vis_config'; export const FileBasedDataVisualizerExpandedRow = ({ item }: { item: FileBasedFieldVisConfig }) => { @@ -25,25 +25,26 @@ export const FileBasedDataVisualizerExpandedRow = ({ item }: { item: FileBasedFi function getCardContent() { switch (type) { - case JOB_FIELD_TYPES.NUMBER: + case SUPPORTED_FIELD_TYPES.NUMBER: return ; - case JOB_FIELD_TYPES.BOOLEAN: + case SUPPORTED_FIELD_TYPES.BOOLEAN: return ; - case JOB_FIELD_TYPES.DATE: + case SUPPORTED_FIELD_TYPES.DATE: return ; - case JOB_FIELD_TYPES.GEO_POINT: + case SUPPORTED_FIELD_TYPES.GEO_POINT: return ; - case JOB_FIELD_TYPES.IP: + case SUPPORTED_FIELD_TYPES.IP: return ; - case JOB_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.VERSION: return ; - case JOB_FIELD_TYPES.TEXT: + case SUPPORTED_FIELD_TYPES.TEXT: return ; default: diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx index 8a0b1d7a3dfe6..f12b65569be1c 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/geo_point_content_with_map/geo_point_content_with_map.tsx @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import React, { FC, useEffect, useState } from 'react'; import { DataView } from '@kbn/data-views-plugin/public'; import { ES_GEO_FIELD_TYPE, LayerDescriptor } from '@kbn/maps-plugin/common'; @@ -14,7 +13,7 @@ import { DocumentStatsTable } from '../../stats_table/components/field_data_expa import { ExamplesList } from '../../examples_list'; import { FieldVisConfig } from '../../stats_table/types'; import { useDataVisualizerKibana } from '../../../../kibana_context'; -import { JOB_FIELD_TYPES } from '../../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../../common/constants'; import { EmbeddedMapComponent } from '../../embedded_map'; import { ExpandedRowPanel } from '../../stats_table/components/field_data_expanded_row/expanded_row_panel'; @@ -36,7 +35,8 @@ export const GeoPointContentWithMap: FC<{ dataView?.id !== undefined && config !== undefined && config.fieldName !== undefined && - (config.type === JOB_FIELD_TYPES.GEO_POINT || config.type === JOB_FIELD_TYPES.GEO_SHAPE) + (config.type === SUPPORTED_FIELD_TYPES.GEO_POINT || + config.type === SUPPORTED_FIELD_TYPES.GEO_SHAPE) ) { const params = { indexPatternId: dataView.id, @@ -64,7 +64,7 @@ export const GeoPointContentWithMap: FC<{ return ( - + diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx index c108ca238de8a..e770a4c6bba7a 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/expanded_row/index_based_expanded_row.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { GeoPointContentWithMap } from './geo_point_content_with_map'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; import { BooleanContent, DateContent, @@ -51,17 +51,17 @@ export const IndexBasedDataVisualizerExpandedRow = ({ } switch (type) { - case JOB_FIELD_TYPES.NUMBER: + case SUPPORTED_FIELD_TYPES.NUMBER: return ; - case JOB_FIELD_TYPES.BOOLEAN: - return ; + case SUPPORTED_FIELD_TYPES.BOOLEAN: + return ; - case JOB_FIELD_TYPES.DATE: + case SUPPORTED_FIELD_TYPES.DATE: return ; - case JOB_FIELD_TYPES.GEO_POINT: - case JOB_FIELD_TYPES.GEO_SHAPE: + case SUPPORTED_FIELD_TYPES.GEO_POINT: + case SUPPORTED_FIELD_TYPES.GEO_SHAPE: return ( ); - case JOB_FIELD_TYPES.IP: + case SUPPORTED_FIELD_TYPES.IP: return ; - case JOB_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.VERSION: return ; - case JOB_FIELD_TYPES.TEXT: + case SUPPORTED_FIELD_TYPES.TEXT: return ; default: diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/actions.ts b/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/actions.ts index 73e69b00132d3..314856e07554f 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/actions.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/actions.ts @@ -18,7 +18,7 @@ import { dataVisualizerRefresh$, Refresh, } from '../../../../index_data_visualizer/services/timefilter_refresh_service'; -import { JOB_FIELD_TYPES } from '../../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../../common/constants'; import { APP_ID } from '../../../../../../common/constants'; export function getActions( @@ -80,7 +80,10 @@ export function getActions( type: 'icon', icon: 'gisApp', available: (item: FieldVisConfig) => { - return item.type === JOB_FIELD_TYPES.GEO_POINT || item.type === JOB_FIELD_TYPES.GEO_SHAPE; + return ( + item.type === SUPPORTED_FIELD_TYPES.GEO_POINT || + item.type === SUPPORTED_FIELD_TYPES.GEO_SHAPE + ); }, onClick: async (item: FieldVisConfig) => { if (services?.uiActions && dataView) { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/lens_utils.ts b/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/lens_utils.ts index 731499cee2f89..034f7037fc29a 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/lens_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_data_row/action_menu/lens_utils.ts @@ -19,7 +19,7 @@ import type { import { DOCUMENT_FIELD_NAME as RECORDS_FIELD } from '@kbn/lens-plugin/common/constants'; import type { CombinedQuery } from '../../../../index_data_visualizer/types/combined_query'; import { FieldVisConfig } from '../../stats_table/types'; -import { JOB_FIELD_TYPES } from '../../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../../common/constants'; interface ColumnsAndLayer { columns: Record; @@ -200,19 +200,20 @@ export function getBooleanSettings(item: FieldVisConfig) { export function getCompatibleLensDataType(type: FieldVisConfig['type']): string | undefined { let lensType: string | undefined; switch (type) { - case JOB_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.KEYWORD: + case SUPPORTED_FIELD_TYPES.VERSION: lensType = 'string'; break; - case JOB_FIELD_TYPES.DATE: + case SUPPORTED_FIELD_TYPES.DATE: lensType = 'date'; break; - case JOB_FIELD_TYPES.NUMBER: + case SUPPORTED_FIELD_TYPES.NUMBER: lensType = 'number'; break; - case JOB_FIELD_TYPES.IP: + case SUPPORTED_FIELD_TYPES.IP: lensType = 'ip'; break; - case JOB_FIELD_TYPES.BOOLEAN: + case SUPPORTED_FIELD_TYPES.BOOLEAN: lensType = 'string'; break; default: @@ -228,16 +229,20 @@ function getColumnsAndLayer( ): ColumnsAndLayer | undefined { if (item.fieldName === undefined) return; - if (fieldType === JOB_FIELD_TYPES.DATE) { + if (fieldType === SUPPORTED_FIELD_TYPES.DATE) { return getDateSettings(item); } - if (fieldType === JOB_FIELD_TYPES.NUMBER) { + if (fieldType === SUPPORTED_FIELD_TYPES.NUMBER) { return getNumberSettings(item, defaultDataView); } - if (fieldType === JOB_FIELD_TYPES.IP || fieldType === JOB_FIELD_TYPES.KEYWORD) { + if ( + fieldType === SUPPORTED_FIELD_TYPES.IP || + fieldType === SUPPORTED_FIELD_TYPES.KEYWORD || + fieldType === SUPPORTED_FIELD_TYPES.VERSION + ) { return getKeywordSettings(item); } - if (fieldType === JOB_FIELD_TYPES.BOOLEAN) { + if (fieldType === SUPPORTED_FIELD_TYPES.BOOLEAN) { return getBooleanSettings(item); } } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.test.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.test.tsx index 874cdaa670c49..9962937fa80dc 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.test.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/field_type_icon/field_type_icon.test.tsx @@ -9,12 +9,12 @@ import React from 'react'; import { mount, shallow } from 'enzyme'; import { FieldTypeIcon } from './field_type_icon'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; describe('FieldTypeIcon', () => { test(`render component when type matches a field type`, () => { const typeIconComponent = shallow( - + ); expect(typeIconComponent).toMatchSnapshot(); }); @@ -24,7 +24,7 @@ describe('FieldTypeIcon', () => { jest.useFakeTimers(); const typeIconComponent = mount( - + ); expect(typeIconComponent.find('EuiToolTip').children()).toHaveLength(1); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/create_fields.ts b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/create_fields.ts index 05d07111c80ac..2ac163104eea5 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/create_fields.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/create_fields.ts @@ -8,7 +8,7 @@ import { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; import { getFieldNames, getSupportedFieldType } from './get_field_names'; import { FileBasedFieldVisConfig } from '../stats_table/types'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; import { roundToDecimalPlace } from '../utils'; export function createFields(results: FindFileStructureResponse) { @@ -28,20 +28,20 @@ export function createFields(results: FindFileStructureResponse) { if (fieldStats[name] !== undefined) { const field: FileBasedFieldVisConfig = { fieldName: name, - type: JOB_FIELD_TYPES.UNKNOWN, + type: SUPPORTED_FIELD_TYPES.UNKNOWN, }; const f = fieldStats[name]; const m = mappings.properties[name]; // sometimes the timestamp field is not in the mappings, and so our // collection of fields will be missing a time field with a type of date - if (name === timestampField && field.type === JOB_FIELD_TYPES.UNKNOWN) { - field.type = JOB_FIELD_TYPES.DATE; + if (name === timestampField && field.type === SUPPORTED_FIELD_TYPES.UNKNOWN) { + field.type = SUPPORTED_FIELD_TYPES.DATE; } if (m !== undefined) { field.type = getSupportedFieldType(m.type); - if (field.type === JOB_FIELD_TYPES.NUMBER) { + if (field.type === SUPPORTED_FIELD_TYPES.NUMBER) { numericFieldsCount += 1; } if (m.format !== undefined) { @@ -71,7 +71,7 @@ export function createFields(results: FindFileStructureResponse) { } if (f.top_hits !== undefined) { - if (field.type === JOB_FIELD_TYPES.TEXT) { + if (field.type === SUPPORTED_FIELD_TYPES.TEXT) { _stats = { ..._stats, examples: f.top_hits.map((hit) => hit.value), @@ -84,7 +84,7 @@ export function createFields(results: FindFileStructureResponse) { } } - if (field.type === JOB_FIELD_TYPES.DATE) { + if (field.type === SUPPORTED_FIELD_TYPES.DATE) { _stats = { ..._stats, earliest: f.earliest, @@ -99,9 +99,9 @@ export function createFields(results: FindFileStructureResponse) { // this could be the message field for a semi-structured log file or a // field which the endpoint has not been able to work out any information for const type = - mappings.properties[name] && mappings.properties[name].type === JOB_FIELD_TYPES.TEXT - ? JOB_FIELD_TYPES.TEXT - : JOB_FIELD_TYPES.UNKNOWN; + mappings.properties[name] && mappings.properties[name].type === SUPPORTED_FIELD_TYPES.TEXT + ? SUPPORTED_FIELD_TYPES.TEXT + : SUPPORTED_FIELD_TYPES.UNKNOWN; return { fieldName: name, diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/filter_fields.ts b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/filter_fields.ts index 145a8fa5f8867..4ca65eec6635b 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/filter_fields.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/filter_fields.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; interface CommonFieldConfig { type: string; @@ -32,6 +32,6 @@ export function filterFields( return { filteredFields: items, visibleFieldsCount: items.length, - visibleMetricsCount: items.filter((d) => d.type === JOB_FIELD_TYPES.NUMBER).length, + visibleMetricsCount: items.filter((d) => d.type === SUPPORTED_FIELD_TYPES.NUMBER).length, }; } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/get_field_names.ts b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/get_field_names.ts index b6868ced4de69..b0750278ab9e3 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/get_field_names.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/fields_stats_grid/get_field_names.ts @@ -9,7 +9,7 @@ import { difference } from 'lodash'; import { ES_FIELD_TYPES } from '@kbn/data-plugin/common'; import type { FindFileStructureResponse } from '@kbn/file-upload-plugin/common'; import type { JobFieldType } from '../../../../../common/types'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; export function getFieldNames(results: FindFileStructureResponse) { const { mappings, field_stats: fieldStats, column_names: columnNames } = results; @@ -44,11 +44,11 @@ export function getSupportedFieldType(type: string): JobFieldType { case ES_FIELD_TYPES.LONG: case ES_FIELD_TYPES.SHORT: case ES_FIELD_TYPES.UNSIGNED_LONG: - return JOB_FIELD_TYPES.NUMBER; + return SUPPORTED_FIELD_TYPES.NUMBER; case ES_FIELD_TYPES.DATE: case ES_FIELD_TYPES.DATE_NANOS: - return JOB_FIELD_TYPES.DATE; + return SUPPORTED_FIELD_TYPES.DATE; default: return type as JobFieldType; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/_index.scss b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/_index.scss index 7ac8aa4365732..5aaf24b82a1a6 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/_index.scss +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/_index.scss @@ -31,9 +31,8 @@ $panelWidthL: #{'max(40%, 450px)'}; } .euiTableRow > .euiTableRowCell { - border-bottom: 0; - border-top: $euiBorderThin; - + border-top: 0; + border-bottom: $euiBorderThin; } .euiTableCellContent { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/boolean_content.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/boolean_content.tsx index 907bc6166afff..210f69c435a45 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/boolean_content.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/boolean_content.tsx @@ -5,18 +5,13 @@ * 2.0. */ -import React, { FC, ReactNode, useMemo } from 'react'; -import { - EuiBasicTable, - EuiSpacer, - RIGHT_ALIGNMENT, - LEFT_ALIGNMENT, - HorizontalAlignment, -} from '@elastic/eui'; +import React, { FC, useMemo } from 'react'; +import { EuiSpacer } from '@elastic/eui'; import { Axis, BarSeries, Chart, Settings, ScaleType } from '@elastic/charts'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import { TopValues } from '../../../top_values'; import type { FieldDataRowProps } from '../../types/field_data_row'; import { ExpandedRowFieldHeader } from '../expanded_row_field_header'; import { getTFPercentage } from '../../utils'; @@ -44,72 +39,42 @@ function getFormattedValue(value: number, totalCount: number): string { const BOOLEAN_DISTRIBUTION_CHART_HEIGHT = 70; -export const BooleanContent: FC = ({ config }) => { +export const BooleanContent: FC = ({ config, onAddFilter }) => { const fieldFormat = 'fieldFormat' in config ? config.fieldFormat : undefined; const formattedPercentages = useMemo(() => getTFPercentage(config), [config]); const theme = useDataVizChartTheme(); if (!formattedPercentages) return null; const { trueCount, falseCount, count } = formattedPercentages; - const summaryTableItems = [ - { - function: 'true', - display: ( - - ), - value: getFormattedValue(trueCount, count), - }, - { - function: 'false', - display: ( - - ), - value: getFormattedValue(falseCount, count), - }, - ]; - const summaryTableColumns = [ - { - field: 'function', - name: '', - render: (_: string, summaryItem: { display: ReactNode }) => summaryItem.display, - width: '25px', - align: LEFT_ALIGNMENT as HorizontalAlignment, - }, - { - field: 'value', - name: '', - render: (v: string) => {v}, - align: RIGHT_ALIGNMENT as HorizontalAlignment, - }, - ]; - - const summaryTableTitle = i18n.translate( - 'xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.summaryTableTitle', - { - defaultMessage: 'Summary', - } - ); - + const stats = { + ...config.stats, + topValues: [ + { + key: i18n.translate( + 'xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.trueCountLabel', + { defaultMessage: 'true' } + ), + doc_count: trueCount ?? 0, + }, + { + key: i18n.translate( + 'xpack.dataVisualizer.dataGrid.fieldExpandedRow.booleanContent.falseCountLabel', + { defaultMessage: 'false' } + ), + doc_count: falseCount ?? 0, + }, + ], + }; return ( - - {summaryTableTitle} - - + diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx index a2d61d104d138..8b38563591e3d 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx @@ -20,11 +20,13 @@ import { RIGHT_ALIGNMENT, EuiResizeObserver, EuiLoadingSpinner, + useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { EuiTableComputedColumnType } from '@elastic/eui/src/components/basic_table/table_types'; import { throttle } from 'lodash'; -import { JOB_FIELD_TYPES } from '../../../../../common/constants'; +import { css } from '@emotion/react'; +import { SUPPORTED_FIELD_TYPES } from '../../../../../common/constants'; import type { JobFieldType, DataVisualizerTableState } from '../../../../../common/types'; import { DocumentStat } from './components/field_data_row/document_stats'; import { IndexBasedNumberContentPreview } from './components/field_data_row/number_content_preview'; @@ -70,6 +72,8 @@ export const DataVisualizerTable = ({ onChange, loading, }: DataVisualizerTableProps) => { + const { euiTheme } = useEuiTheme(); + const [expandedRowItemIds, setExpandedRowItemIds] = useState([]); const [expandAll, setExpandAll] = useState(false); @@ -289,13 +293,14 @@ export const DataVisualizerTable = ({ } if ( - (item.type === JOB_FIELD_TYPES.KEYWORD || item.type === JOB_FIELD_TYPES.IP) && + (item.type === SUPPORTED_FIELD_TYPES.KEYWORD || + item.type === SUPPORTED_FIELD_TYPES.IP) && item.stats?.topValues !== undefined ) { return ; } - if (item.type === JOB_FIELD_TYPES.NUMBER) { + if (item.type === SUPPORTED_FIELD_TYPES.NUMBER) { if (isIndexBasedFieldVisConfig(item) && item.stats?.distribution !== undefined) { // If the cardinality is only low, show the top values instead of a distribution chart return item.stats?.distribution?.percentiles.length <= 2 ? ( @@ -308,7 +313,7 @@ export const DataVisualizerTable = ({ } } - if (item.type === JOB_FIELD_TYPES.BOOLEAN) { + if (item.type === SUPPORTED_FIELD_TYPES.BOOLEAN) { return ; } @@ -361,6 +366,18 @@ export const DataVisualizerTable = ({ rowProps={(item) => ({ 'data-test-subj': `dataVisualizerRow row-${item.fieldName}`, })} + css={css` + thead { + position: sticky; + inset-block-start: 0; + z-index: 1; + background-color: ${euiTheme.colors.emptyShade}; + box-shadow: inset 0 0px 0, inset 0 -1px 0 ${euiTheme.border.color}; + } + .euiTableRow > .euiTableRowCel { + border-top: 0px; + } + `} />