web-interface.assets.57e33c6c-20.11b9f72925818240e61d.js.map Maven / Gradle / Ivy
{"version":3,"sources":["webpack:///./src/components/inputs/InputDropdown.tsx","webpack:///./src/components/inputs/CreateInputControl.jsx","webpack:///./src/components/inputs/InputForm.jsx","webpack:///./src/components/inputs/InputListItem.jsx","webpack:///./src/components/inputs/InputsList.jsx","webpack:///./src/logic/inputs/InputStateComparator.js","webpack:///./src/components/inputs/InputStateBadge.jsx","webpack:///./src/components/inputs/InputStateControl.jsx","webpack:///./src/components/inputs/InputThroughput.jsx","webpack:///./src/components/inputs/InputStaticFields.jsx","webpack:///./src/components/inputs/NodeOrGlobalSelect.tsx","webpack:///./src/components/inputs/StaticFieldForm.jsx","webpack:///./src/util/SortUtils.js"],"names":["LoaderContainer","styled","div","StyledInputDropdown","Input","PLACEHOLDER","_formatInput","id","title","type","key","value","_sortByTitle","input1","input2","localeCompare","StaticInput","input","disabled","InputDropdown","inputs","onLoadMessage","preselectedInputId","useState","selectedInput","setSelectedInput","onSelectedInputChange","useCallback","event","target","_onLoadMessage","preselectedInput","useMemo","get","bsStyle","onClick","inputOptions","sort","map","aria-label","onChange","placeholder","toArray","propTypes","PropTypes","isRequired","defaultProps","Immutable","undefined","InputTypesActions","ActionsProvider","getActions","InputsActions","InputTypesStore","StoreProvider","getStore","NewInputRow","Row","CreateInputControl","createReactClass","displayName","mixins","Reflux","connect","getInitialState","selectedInputDefinition","_formatSelectOptions","options","inputTypes","this","state","Object","keys","label","inputTypeA","inputTypeB","toLowerCase","push","_onInputSelect","setState","triggerPromise","then","inputDefinition","_openModal","preventDefault","customConfiguration","PluginStore","exports","find","inputConfig","CustomInputsConfiguration","component","customInputsComponent","onClose","configurationForm","open","_createInput","data","create","render","inputModal","inputTypeName","ref","configFields","requested_configuration","helpBlock","typeName","submitAction","className","md","onSubmit","style","width","matchProp","href","marginLeft","InputForm","global","props","globalValue","node","nodeValue","field","newData","jQuery","extend","values","getValue","configuration","titleValue","_onSubmit","_handleChange","React","Component","bool","string","func","object","InputListItem","currentNode","permissions","array","PermissionsMixin","_deleteInput","window","confirm","_openStaticFieldForm","staticFieldForm","_editInput","_updateInput","update","extractorRoute","showMetricsMenuItem","subtitle","definition","inputDescriptions","titleSuffix","name","actions","isPermitted","to","Routes","search","relative","global_input_extractors","local_input_extractors","node_id","filtered_metrics","pullRight","onSelect","divider","nodeId","inputForm","includeTitleField","attributes","additionalContent","typeDefinition","description","createdFromContentPack","content_pack","contentRow","SingleNodeActions","InputsStore","SingleNodeStore","InputListRow","InputsList","listenTo","getDefaultProps","globalInputs","localInputs","filteredGlobalInputs","filteredLocalInputs","filter","componentDidMount","list","_splitInputs","inputA","inputB","naturalSortIgnoreCase","_onFilterInputs","_isLoading","_nodeAffix","resetLoadingState","regExp","RegExp","length","filterMethod","test","_onFilterReset","onSearch","topMargin","onReset","searchButtonLabel","EntityList","bsNoItemsStyle","noItemsText","items","InputStateComparator","mapping","CREATED","INITIALIZED","INVALID_CONFIGURATION","STARTING","RUNNING","FAILED","STOPPING","STOPPED","TERMINATED","state1","state2","toUpperCase","InputStatesStore","NodesStore","InputStateBadge","comparator","_labelClassForState","sortedStates","nodes","nodesWithKnownState","reduce","numberOfNodes","count","_textForState","join","inputStates","inputId","sortedInputStates","forEach","sorted","compare","bind","popOverText","popover","trigger","placement","overlay","rootClose","bsSize","cursor","text","InputStateControl","connectFilter","loading","_isInputRunning","inputState","nodeIDs","some","nodeID","_startInput","start","_stopInput","stop","InputIO","span","theme","css","colors","gray","fonts","family","monospace","MetricsStore","MetricsActions","InputThroughput","showDetails","UNSAFE_componentWillMount","_metricNames","metricName","addGlobal","componentWillUnmount","removeGlobal","_prefix","metric","_getValueFromMetric","rate","mean","_calculateMetrics","metrics","result","previous","isNaN","NaN","_formatCount","numeral","format","_formatNetworkStats","writtenBytes1Sec","writtenBytesTotal","readBytes1Sec","readBytesTotal","NumberUtils","formatBytes","_formatConnections","openConnections","totalConnections","_formatAllNodeDetails","_formatNodeDetails","emptyMessages","_toggleShowDetails","evt","calculatedMetrics","incomingMessages","InputStaticFieldsStore","InputStaticFields","fieldName","destroy","verticalAlign","_deleteStaticField","staticFields","formattedFields","_deleteButton","static_fields","marginBottom","_formatStaticFields","NodeOrGlobalSelect","useStore","globalState","setGlobal","nodeState","setNode","useEffect","nodeIds","_onChangeGlobal","isGlobal","checked","_onChangeNode","short_node_id","hostname","nodeSelect","help","required","StaticFieldForm","modal","fieldValue","close","submitButtonText","onSubmitForm","_addStaticField","data-validate","autoFocus","sortByDate","d1","d2","sortOrder","effectiveSortOrder","d1Time","moment","d2Time","isBefore","s1","s2","naturalSort"],"mappings":"sqCA0BA,IAAMA,EAAkBC,UAAOC,IAAV,oFAAGD,CAAH,iEASfE,EAAsBF,kBAAOG,KAAV,wFAAGH,CAAH,sBAInBI,EAAc,cAQdC,EAAe,SAAC,GAAmC,IAAjCC,EAAiC,EAAjCA,GAAIC,EAA6B,EAA7BA,MAAOC,EAAsB,EAAtBA,KACjC,OAAO,0BAAQC,IAAKH,EAAII,MAAOJ,GAAKC,EAA7B,KAAsCC,EAAtC,MAGHG,EAAe,SAACC,EAAmBC,GAApB,OAA0CD,EAAOL,MAAMO,cAAcD,EAAON,QAE3FQ,EAAc,SAAC,GAAD,QAAGC,MAASR,EAAZ,EAAYA,KAAMD,EAAlB,EAAkBA,MAAlB,OAClB,gBAACL,EAAD,CAAqBI,GAAE,UAAKE,EAAL,WAAoBA,KAAK,SAASS,UAAQ,GAC/D,wCAAYV,EAAZ,aAAsBC,EAAtB,QAYEU,EAAgB,SAAC,GAA0E,IAAxED,EAAwE,EAAxEA,SAAUE,EAA8D,EAA9DA,OAAQC,EAAsD,EAAtDA,cAAeC,EAAuC,EAAvCA,mBAAoBd,EAAmB,EAAnBA,MAAmB,IACrDe,mBAASD,GAAsBjB,GADsB,GACxFmB,EADwF,KACzEC,EADyE,KAEzFC,EAAwBC,uBAAY,SAACC,GAAD,OAAWH,EAAiBG,EAAMC,OAAOlB,SAAQ,IACrFmB,EAAiBH,uBAAY,kBAAMN,EAAcG,KAAgB,CAACH,EAAeG,IACjFO,EAAmBC,mBAAQ,kBAAMZ,aAAN,EAAMA,EAAQa,IAAIX,KAAqB,CAACF,EAAQE,IAGjF,GAAIS,EACF,OACE,gBAAC/B,EAAD,KACE,gBAACgB,EAAD,CAAaC,MAAOc,IAEpB,gBAAC,IAAD,CAAQG,QAAQ,OACRhB,SAAUM,IAAkBnB,EAC5B8B,QAASL,GACdtB,IAMT,GAAIY,EAAQ,CACV,IAAMgB,EAAehB,EAAOiB,KAAKzB,GAAc0B,IAAIhC,GAEnD,OACE,gBAACN,EAAD,KACE,gBAACG,EAAD,CAAqBI,GAAG,qBACHE,KAAK,SACL8B,aAAW,sBACX5B,MAAOa,EACPgB,SAAUd,EACVe,YAAapC,GAChC,0BAAQM,MAAON,GAAf,mBACC+B,EAAaM,WAGhB,gBAAC,IAAD,CAAQR,QAAQ,OACRhB,SAAUA,GAAYM,IAAkBnB,EACxC8B,QAASL,GACdtB,IAMT,OAAO,gBAAC,IAAD,OAGTW,EAAcwB,UAAY,CACxBvB,OAAQwB,SACRpC,MAAOoC,SAAiBC,WACxBvB,mBAAoBsB,SACpBvB,cAAeuB,OACf1B,SAAU0B,QAGZzB,EAAc2B,aAAe,CAC3B1B,OAAQ2B,QACR1B,cAAe,aACfC,wBAAoB0B,EACpB9B,UAAU,GAGGC,O,2eCtGT8B,EAAoBC,IAAgBC,WAAW,cAC/CC,EAAgBF,IAAgBC,WAAW,UAC3CE,EAAkBC,IAAcC,SAAS,cAEzCC,EAAcvD,kBAAOwD,KAAV,qFAAGxD,CAAH,wBAiHFyD,EA7GYC,IAAiB,CAC1CC,YAAa,qBACbC,OAAQ,CAACC,IAAOC,QAAQV,IAExBW,gBAJ0C,WAKxC,MAAO,CACLxC,mBAAewB,EACfiB,6BAAyBjB,IAI7BkB,qBAX0C,WAYxC,IAAIC,EAAU,GAENC,EAAeC,KAAKC,MAApBF,WAEJA,GAGFD,EAFsBI,OAAOC,KAAKJ,GAEV9B,KAAI,SAAC/B,GAC3B,MAAO,CAAEI,MAAOJ,EAAIkE,MAAOL,EAAW7D,QAGhC8B,MAAK,SAACqC,EAAYC,GAAb,OAA4BD,EAAWD,MAAMG,cAAc7D,cAAc4D,EAAWF,MAAMG,kBAEvGT,EAAQU,KAAK,CAAElE,MAAO,OAAQ8D,MAAO,sBAAuBvD,UAAU,IAGxE,OAAOiD,GAGTW,eA/B0C,SA+B3BtD,GAAe,WACN,KAAlBA,GACF6C,KAAKU,SAASV,KAAKL,mBAGrBK,KAAKU,SAAS,CAAEvD,cAAeA,IAC/ByB,EAAkBhB,IAAI+C,eAAexD,GAAeyD,MAAK,SAACC,GAAD,OAAqB,EAAKH,SAAS,CAAEd,wBAAyBiB,QAGzHC,WAxC0C,SAwC/BvD,GAAO,WAChBA,EAAMwD,iBADU,IAER5D,EAAkB6C,KAAKC,MAAvB9C,cAEF6D,EAAsBC,cAAYC,QAAQ,sBAC7CC,MAAK,SAACC,GAAD,OAAiBA,EAAYhF,OAASe,KAE9C,GAAI6D,EAAqB,CACvB,IACMK,EAA4BL,EAAoBM,UAEtDtB,KAAKU,SAAS,CACZa,sBAAuB,kBAACF,EAAD,CAA2BG,QAJpC,kBAAM,EAAKd,SAAS,CAAEa,2BAAuB5C,SAQ/DqB,KAAKyB,kBAAkBC,QAGzBC,aA3D0C,SA2D7BC,GAAM,WACjB7C,EAAc8C,OAAOD,GAAMhB,MAAK,WAC9B,EAAKF,SAAS,EAAKf,uBAIvBmC,OAjE0C,WAiEjC,IACHC,EADG,SAE+E/B,KAAKC,MAAnFL,EAFD,EAECA,wBAAyBzC,EAF1B,EAE0BA,cAAe4C,EAFzC,EAEyCA,WAAYwB,EAFrD,EAEqDA,sBAE5D,GAAI3B,IAA4B2B,EAAuB,CACrD,IAAMS,EAAgBjC,EAAW5C,GAEjC4E,EACE,kBAAC,EAAD,CAAWE,IAAK,SAACR,GAAwB,EAAKA,kBAAoBA,GACvDpF,IAAI,2BACJ6F,aAActC,EAAwBuC,wBACtChG,MAAO,4CAAiB,4BAAK6F,GAAtB,UACPI,UAAU,qDACVC,SAAUlF,EACVmF,aAActC,KAAK2B,eAIlC,OACE,kBAACxC,EAAD,CAAaoD,UAAU,WACrB,kBAAC,IAAD,CAAKC,GAAI,IACP,0BAAMD,UAAU,cAAcE,SAAUzC,KAAKc,YAC3C,yBAAKyB,UAAU,aAAaG,MAAO,CAAEC,MAAO,MAC1C,kBAAC,IAAD,CAAQvE,YAAY,eACZ0B,QAASE,KAAKH,uBACd+C,UAAU,QACVzE,SAAU6B,KAAKS,eACfnE,MAAOa,KANnB,IASE,kBAAC,IAAD,CAAQU,QAAQ,UAAUzB,KAAK,SAASS,UAAWM,GAAnD,oBACA,kBAAC,IAAD,CAAoB0F,KAAK,mCACLhF,QAAQ,OACR6E,MAAO,CAAEI,WAAY,KAFzC,qBAMDf,GAAcR,O,4sDCnHnBwB,E,kaASI,CACNC,YAAmCrE,IAA3B,EAAKsE,MAAMC,aAA4B,EAAKD,MAAMC,YAC1DC,UAA+BxE,IAAzB,EAAKsE,MAAMG,UAA0B,EAAKH,MAAMG,eAAYzE,I,wBAGpD,SAAC0E,EAAO/G,GACtB,IAAM2D,EAAQ,GAEdA,EAAMoD,GAAS/G,EACf,EAAKoE,SAAST,M,oBAGJ,SAAC2B,GACX,IAAM0B,EAAUC,IAAOC,OAAO5B,EAAM,CAAEoB,OAAQ,EAAK/C,MAAM+C,OAAQG,KAAM,EAAKlD,MAAMkD,OAElF,EAAKF,MAAMX,aAAagB,M,eAGnB,WACL,EAAK7B,kBAAkBC,U,qCAGzB,WAAS,WACD+B,EAASzD,KAAKiD,MAAMQ,OAASzD,KAAKiD,MAAMQ,OACzCzD,KAAKyB,kBAAoBzB,KAAKyB,kBAAkBiC,WAAWC,cAAgB,GAC1EC,EAAa5D,KAAKiD,MAAMW,WAAa5D,KAAKiD,MAAMW,WACjD5D,KAAKyB,kBAAoBzB,KAAKyB,kBAAkBiC,WAAWE,WAAa,GAE7E,OACE,kBAAC,IAAD,KAAuB5D,KAAKiD,MAA5B,CACmBhB,IAAK,SAACR,GAAwB,EAAKA,kBAAoBA,GACvDgC,OAAQA,EACRG,WAAYA,EACZtB,aAActC,KAAK6D,YACpC,kBAAC,GAAD,CAAoB1F,SAAU6B,KAAK8D,cAAed,OAAQhD,KAAKC,MAAM+C,OAAQG,KAAMnD,KAAKC,MAAMkD,a,8BA3C9EY,IAAMC,W,EAAxBjB,E,YACe,CACjBG,YAAa3E,IAAU0F,KACvBb,UAAW7E,IAAU2F,OACrBN,WAAYrF,IAAU2F,OACtB5B,aAAc/D,IAAU4F,KAAK3F,WAC7BiF,OAAQlF,IAAU6F,SA2CPrB,Q,gDCzCT/D,EAAkBC,IAAcC,SAAS,cACzCH,EAAgBF,IAAgBC,WAAW,UAwKlCuF,EAtKO/E,IAAiB,CACrCC,YAAa,gBAEbjB,UAAW,CACT1B,MAAO2B,IAAU6F,OAAO5F,WACxB8F,YAAa/F,IAAU6F,OAAO5F,WAC9B+F,YAAahG,IAAUiG,MAAMhG,YAG/BgB,OAAQ,CAACiF,IAAkBhF,IAAOC,QAAQV,IAE1C0F,aAXqC,WAY/BC,OAAOC,QAAP,8CAAsD5E,KAAKiD,MAAMrG,MAAMT,MAAvE,QACF4C,EAAa,OAAQiB,KAAKiD,MAAMrG,QAIpCiI,qBAjBqC,WAkBnC7E,KAAK8E,gBAAgBpD,QAGvBqD,WArBqC,WAsBnC/E,KAAKyB,kBAAkBC,QAGzBsD,aAzBqC,SAyBxBpD,GACX7C,EAAckG,OAAOjF,KAAKiD,MAAMrG,MAAMV,GAAI0F,IAG5CE,OA7BqC,WA6B5B,WACP,IAAK9B,KAAKC,MAAMF,WACd,OAAO,kBAAC,KAAD,MAFF,IA4BDmF,EAiBFC,EAsCAC,EA9EIxI,EAAUoD,KAAKiD,MAAfrG,MACFyI,EAAarF,KAAKC,MAAMqF,kBAAkB1I,EAAMR,MAEhDmJ,EACJ,8BACGvF,KAAKiD,MAAMrG,MAAM4I,KADpB,IAGE,kBAAC,GAAD,CAAiB5I,MAAOoD,KAAKiD,MAAMrG,SAIjC6I,EAAU,IAEZzF,KAAK0F,YAAY1F,KAAKiD,MAAMsB,YAAa,CAAC,uBAC5CkB,EAAQjF,KACN,kBAAC,IAAD,CAAenE,IAAG,4BAAuB2D,KAAKiD,MAAMrG,MAAMV,IAC3CyJ,GAAIC,IAAOC,OAAP,2BAAkC7F,KAAKiD,MAAMrG,MAAMV,IAAM,CAAE4J,SAAU,KACtF,kBAAC,IAAD,CAAQjI,QAAQ,QAAhB,4BAKFmC,KAAK0F,YAAY1F,KAAKiD,MAAMsB,YAAa,CAAC,eAAD,OAAgBvE,KAAKiD,MAAMrG,MAAMV,SAI1EgJ,EADElF,KAAKiD,MAAMrG,MAAMoG,OACF4C,IAAOG,wBAAwB/F,KAAKiD,MAAMrG,MAAMV,IAEhD0J,IAAOI,uBAAuBhG,KAAKiD,MAAMqB,YAAY2B,QAASjG,KAAKiD,MAAMrG,MAAMV,IAGlGuJ,EAAQjF,KACN,kBAAC,IAAD,CAAenE,IAAG,4BAAuB2D,KAAKiD,MAAMrG,MAAMV,IAAMyJ,GAAIT,GAClE,kBAAC,IAAD,CAAQrH,QAAQ,QAAhB,uBAIJ4H,EAAQjF,KAAK,kBAAC,GAAD,CAAmBnE,IAAG,8BAAyB2D,KAAKiD,MAAMrG,MAAMV,IAAMU,MAAOoD,KAAKiD,MAAMrG,UAKlGoD,KAAKiD,MAAMrG,MAAMoG,SACpBmC,EACE,kBAAC,IAAD,CAAeQ,GAAIC,IAAOM,iBAAiBlG,KAAKiD,MAAMrG,MAAMuG,KAAMnD,KAAKiD,MAAMrG,MAAMV,KACjF,kBAAC,IAAD,CAAUG,IAAG,uBAAkB2D,KAAKiD,MAAMrG,MAAMV,KAAhD,kBAKNuJ,EAAQjF,KACN,kBAAC,IAAD,CAAgBnE,IAAG,uBAAkB2D,KAAKiD,MAAMrG,MAAMV,IACtCC,MAAM,eACND,GAAE,gCAA2B8D,KAAKiD,MAAMrG,MAAMV,IAC9CiK,WAAS,GACvB,kBAAC,IAAD,CAAa5B,YAAW,sBAAiBvE,KAAKiD,MAAMrG,MAAMV,KACxD,kBAAC,IAAD,CAAUG,IAAG,qBAAgB2D,KAAKiD,MAAMrG,MAAMV,IACpCkK,SAAUpG,KAAK+E,WACflI,cAAyB8B,IAAf0G,GAFpB,eAODF,EAED,kBAAC,IAAD,CAAaZ,YAAW,sBAAiBvE,KAAKiD,MAAMrG,MAAMV,KACxD,kBAAC,IAAD,CAAUG,IAAG,2BAAsB2D,KAAKiD,MAAMrG,MAAMV,IAAMkK,SAAUpG,KAAK6E,sBAAzE,qBAGF,kBAAC,IAAD,CAAaN,YAAY,oBACvB,kBAAC,IAAD,CAAUlI,IAAG,kBAAa2D,KAAKiD,MAAMrG,MAAMV,IAAMmK,SAAO,KAE1D,kBAAC,IAAD,CAAa9B,YAAY,oBACvB,kBAAC,IAAD,CAAUlI,IAAG,uBAAkB2D,KAAKiD,MAAMrG,MAAMV,IAAMkK,SAAUpG,KAAK0E,cAArE,oBAOD1E,KAAKiD,MAAMrG,MAAMoG,QAAUhD,KAAKiD,MAAMrG,MAAMuG,OAC/CiC,EACE,wCACU,IAAI,kBAAC,IAAD,CAAYkB,OAAQtG,KAAKiD,MAAMrG,MAAMuG,SAKvD,IAAMoD,EAAYlB,EAEd,kBAAC,EAAD,CAAWpD,IAAK,SAACR,GAAwB,EAAKA,kBAAoBA,GACvDpF,IAAG,0BAAqBO,EAAMV,IAC9BgH,YAAatG,EAAMoG,OACnBI,UAAWxG,EAAMuG,KACjBjB,aAAcmD,EAAWlD,wBACzBhG,MAAK,wBAAmBS,EAAMT,OAC9ByH,WAAYhH,EAAMT,MAClBkG,SAAUzF,EAAMR,KAChBoK,mBAAiB,EACjBlE,aAActC,KAAKgF,aACnBvB,OAAQ7G,EAAM6J,aACvB,KAEAC,EACJ,6BACE,kBAAC,IAAD,CAAKlE,GAAI,GACP,kBAAC,IAAD,CAAmBD,UAAU,qBACVrG,GAAIU,EAAMV,GACVyH,cAAe/G,EAAM6J,WACrBE,eAAgBtB,GAAc,KACjD,kBAAC,GAAD,CAAiBpD,IAAK,SAAC6C,GAAsB,EAAKA,gBAAkBA,GAAoBlI,MAAOoD,KAAKiD,MAAMrG,QAC1G,kBAAC,GAAD,CAAmBA,MAAOoD,KAAKiD,MAAMrG,SAEvC,kBAAC,IAAD,CAAK4F,GAAI,GACP,kBAAC,GAAD,CAAiB5F,MAAOA,KAEzB2J,GAIL,OACE,kBAAC,IAAD,CAAgBlK,IAAG,qBAAgB2D,KAAKiD,MAAMrG,MAAMV,IACpCC,MAAO6D,KAAKiD,MAAMrG,MAAMT,MACxBoJ,YAAaA,EACbqB,YAAaxB,EACbyB,yBAA0B7G,KAAKiD,MAAMrG,MAAMkK,aAC3CrB,QAASA,EACTsB,WAAYL,O,gCCnK5B3H,EAAgBF,IAAgBC,WAAW,UAC3CkI,EAAoBnI,IAAgBC,WAAW,cAC/CF,EAAoBC,IAAgBC,WAAW,cAE/CmI,EAAchI,IAAcC,SAAS,UACrCgI,EAAkBjI,IAAcC,SAAS,cAEzCiI,EAAevL,kBAAOwD,KAAV,2EAAGxD,CAAH,iKAiMHwL,EAzKI9H,IAAiB,CAClCC,YAAa,aAEbjB,UAAW,CACTiG,YAAahG,IAAUiG,MAAMhG,WAC7B2E,KAAM5E,IAAU6F,QAGlB5E,OAAQ,CAACC,IAAOC,QAAQwH,GAAkBzH,IAAO4H,SAASJ,EAAa,iBAEvEK,gBAVkC,WAWhC,MAAO,CACLnE,UAAMxE,IAIVgB,gBAhBkC,WAiBhC,MAAO,CACL4H,kBAAc5I,EACd6I,iBAAa7I,EACb8I,0BAAsB9I,EACtB+I,yBAAqB/I,EACrBgJ,YAAQhJ,IAIZiJ,kBA1BkC,WA2BhChJ,EAAkBiJ,OAClB9I,EAAc8I,OACdb,EAAkBpJ,OAGpBkK,aAhCkC,SAgCrB7H,GAAO,WACVlD,EAAWkD,EAAXlD,OACFwK,EAAexK,EAClB4K,QAAO,SAAC/K,GAAD,OAA4B,IAAjBA,EAAMoG,UACxBhF,MAAK,SAAC+J,EAAQC,GAAT,OAAoBC,YAAsBF,EAAO5L,MAAO6L,EAAO7L,UACnEqL,EAAczK,EACf4K,QAAO,SAAC/K,GAAD,OAA4B,IAAjBA,EAAMoG,UACxBhF,MAAK,SAAC+J,EAAQC,GAAT,OAAoBC,YAAsBF,EAAO5L,MAAO6L,EAAO7L,UAEnE6D,KAAKiD,MAAME,OACbqE,EAAcA,EAAYG,QAAO,SAAC/K,GAAD,OAAWA,EAAMuG,OAAS,EAAKF,MAAME,KAAK8C,YAG7EjG,KAAKU,SAAS,CACZ6G,aAAcA,EACdC,YAAaA,IAGfxH,KAAKkI,gBAAgBlI,KAAKC,MAAM0H,SAGlCQ,WArDkC,WAsDhC,QAASnI,KAAKC,MAAMuH,aAAexH,KAAKC,MAAMsH,cAAgBvH,KAAKC,MAAMkD,MAAQnD,KAAKC,MAAMyH,qBACvF1H,KAAKC,MAAMwH,uBAGlBxL,aA1DkC,SA0DrBW,GACX,OAAO,kBAAC,EAAD,CAAeP,IAAKO,EAAMV,GAAIU,MAAOA,EAAO0H,YAAatE,KAAKC,MAAMkD,KAAMoB,YAAavE,KAAKiD,MAAMsB,eAG3G6D,WA9DkC,WA+DhC,OAAQpI,KAAKiD,MAAME,KAAO,gBAAkB,IAG9C+E,gBAlEkC,SAkElBP,EAAQU,GAAmB,MACHrI,KAAKC,MAAnCsH,EADiC,EACjCA,aAAcC,EADmB,EACnBA,YAChBc,EAASC,OAAOZ,EAAQ,KAE9B,GAAKJ,GAAiBC,EAAtB,CAQA,IAAKG,GAAUA,EAAOa,QAAU,EAW9B,OAVAxI,KAAKU,SAAS,CACZ+G,qBAAsBF,EACtBG,oBAAqBF,EACrBG,YAAQhJ,SAGN0J,GACFA,KAMJ,IAAMI,EAAe,SAAC7L,GACpB,OAAO0L,EAAOI,KAAK9L,EAAMT,QAGrBsL,EAAuBzH,KAAKC,MAAMsH,aAAaI,OAAOc,GACtDf,EAAsB1H,KAAKC,MAAMuH,YAAYG,OAAOc,GAE1DzI,KAAKU,SAAS,CACZ+G,qBAAsBA,EACtBC,oBAAqBA,EACrBC,OAAQA,IAGNU,GACFA,SAnCIA,GACFA,KAsCNM,eA9GkC,WA8GjB,MACuB3I,KAAKC,MAAnCsH,EADO,EACPA,aAAcC,EADP,EACOA,YAEtBxH,KAAKU,SAAS,CACZ+G,qBAAsBF,EACtBG,oBAAqBF,EACrBG,YAAQhJ,KAIZmD,OAxHkC,WAwHzB,WACP,OAAI9B,KAAKmI,aACA,kBAAC,KAAD,MAIP,8BACInI,KAAKiD,MAAME,MAEb,kBAAC,IAAD,CAAaoB,YAAY,iBACvB,kBAAC,EAAD,OAIF,kBAAC4C,EAAD,CAAcjL,GAAG,eAAeqG,UAAU,WACxC,kBAAC,IAAD,CAAKC,GAAI,IACP,kBAAC,IAAD,CAAYoG,SAAU5I,KAAKkI,gBACfW,UAAW,EACXC,QAAS9I,KAAK2I,eACdI,kBAAkB,SAClB3K,YAAY,oBACxB,6BACA,8CAGE,+BAAQ4B,KAAKC,MAAMsH,aAAaiB,OAAhC,cAAmDxI,KAAKoI,eAE1D,kBAACY,EAAA,EAAD,CAAYC,eAAe,OACfC,YAAalJ,KAAKC,MAAMsH,aAAaiB,QAAU,EAAI,8BAC/C,oCACJW,MAAOnJ,KAAKC,MAAMwH,qBAAqBxJ,KAAI,SAACrB,GAAD,OAAW,EAAKX,aAAaW,QACpF,6BACA,6BACA,6CAGE,+BAAQoD,KAAKC,MAAMuH,YAAYgB,OAA/B,cAAkDxI,KAAKoI,eAEzD,kBAACY,EAAA,EAAD,CAAYC,eAAe,OACfC,YAAalJ,KAAKC,MAAMuH,YAAYgB,QAAU,EAAI,6BAC9C,mCACJW,MAAOnJ,KAAKC,MAAMyH,oBAAoBzJ,KAAI,SAACrB,GAAD,OAAW,EAAKX,aAAaW,c,0KC5LhFwM,G,WAnBb,c,4FAAc,SACZpJ,KAAKqJ,QAAU,CACbC,QAAS,EACTC,YAAa,EACbC,sBAAuB,EACvBC,SAAU,EACVC,QAAS,EACTC,OAAQ,EACRC,SAAU,EACVC,QAAS,EACTC,WAAY,G,8CAIhB,SAAQC,EAAQC,GACd,OAAOhK,KAAKqJ,QAAQU,EAAOE,eAAiBjK,KAAKqJ,QAAQW,EAAOC,oB,gCCL9DC,GAAmBjL,IAAcC,SAAS,eAC1CiL,GAAalL,IAAcC,SAAS,SA+G3BkL,GA7GS9K,IAAiB,CACvCC,YAAa,kBAEbjB,UAAW,CACT1B,MAAO2B,IAAU6F,OAAO5F,YAG1BgB,OAAQ,CAACC,IAAOC,QAAQwK,IAAmBzK,IAAOC,QAAQyK,KAC1DE,WAAY,IAAIjB,GAEhBkB,oBAVuC,SAUnBC,GAAc,IACxB3N,EAAUoD,KAAKiD,MAAfrG,MACA4N,EAAUxK,KAAKC,MAAfuK,MACFC,EAAsBF,EAAaG,QAAO,SAACC,EAAe1K,GAC9D,OAAO0K,EAAgB1K,EAAM2K,QAC5B,GAEH,GAAIhO,EAAMoG,QAAUyH,IAAwBvK,OAAOC,KAAKqK,GAAOhC,OAC7D,MAAO,UAKT,OAFkB+B,EAAa,GAAvBtK,OAGN,IAAK,UACH,MAAO,UACT,IAAK,SACL,IAAK,UACH,MAAO,SACT,IAAK,WACH,MAAO,OACT,QACE,MAAO,YAIb4K,cApCuC,SAoCzBN,GAGZ,OAFkBvK,KAAKiD,MAAfrG,MAEEoG,OACDuH,EAAatM,KAAI,SAACgC,GAAD,gBAAcA,EAAM2K,MAApB,YAA6B3K,EAAMA,UAAS6K,KAAK,MAGpEP,EAAa,GAAGtK,OAGzBkI,WA9CuC,WA8C1B,MACoBnI,KAAKC,MAA5B8K,EADG,EACHA,YAAaP,EADV,EACUA,MAErB,QAASO,GAAeP,IAG1B1I,OApDuC,WAqDrC,GAAI9B,KAAKmI,aACP,OAAO,kBAAC,KAAD,MAFF,IAKCvL,EAAUoD,KAAKiD,MAAfrG,MACAmO,EAAgB/K,KAAKC,MAArB8K,YACFC,EAAUpO,EAAMV,GAChB+O,EAAoB,GAEtBF,EAAYC,IACd9K,OAAOC,KAAK4K,EAAYC,IAAUE,SAAQ,SAAC/H,GAAS,IAC1ClD,EAAU8K,EAAYC,GAAS7H,GAA/BlD,MAEHgL,EAAkBhL,KACrBgL,EAAkBhL,GAAS,IAG7BgL,EAAkBhL,GAAOO,KAAK2C,MAIlC,IAAMgI,EAASjL,OAAOC,KAAK8K,GAAmBjN,KAAKgC,KAAKqK,WAAWe,QAAQC,KAAKrL,KAAKqK,aAAapM,KAAI,SAACgC,GACrG,MAAO,CAAEA,MAAOA,EAAO2K,MAAOK,EAAkBhL,GAAOuI,WAGzD,GAAI2C,EAAO3C,OAAS,EAAG,CACrB,IAAM8C,EAAcH,EAAOlN,KAAI,SAACgC,GAC9B,OAAOgL,EAAkBhL,EAAMA,OAAOhC,KAAI,SAACkF,GACzC,OAAO,+BAAO,kBAAC,IAAD,CAAYmD,OAAQnD,IAA3B,KAAsClD,EAAMA,MAAM,oCAGvDsL,EACJ,kBAAC,IAAD,CAASrP,GAAG,2BAA2BC,MAAK,2BAAsBS,EAAMT,QACrEmP,GAIL,OACE,kBAAC,IAAD,CAAgBE,QAAQ,QAAQC,UAAU,SAASC,QAASH,EAASI,WAAS,GAC5E,kBAAC,IAAD,CAAO9N,QAASmC,KAAKsK,oBAAoBa,GAClChP,MAAM,wBACNyP,OAAO,SACPlJ,MAAO,CAAEmJ,OAAQ,YAAc7L,KAAK6K,cAAcM,KAM/D,IAAMW,EAAOlP,EAAMoG,aAAyBrE,IAAf/B,EAAMuG,KAAqB,YAAc,cAEtE,OACE,kBAAC,IAAD,CAAOtF,QAAQ,UAAU+N,OAAO,UAAUE,MC9G1C5B,GAAmBjL,IAAcC,SAAS,eAMhD,IAgEe6M,GAhEWzM,IAAiB,CACzCC,YAAa,oBAEbjB,UAAW,CACT1B,MAAO2B,IAAU6F,OAAO5F,YAG1BgB,OAAQ,CAACC,IAAOuM,cAAc9B,GAAkB,cAXlD,SAA0BjK,GACxB,OAAOA,EAAM8K,YAAc9K,EAAM8K,YAAY/K,KAAKiD,MAAMrG,MAAMV,SAAMyC,MAYpEgB,gBATyC,WAUvC,MAAO,CACLsM,SAAS,IAIbC,gBAfyC,WAevB,WAChB,IAAKlM,KAAKC,MAAMkM,WACd,OAAO,EAGT,IAAMC,EAAUlM,OAAOC,KAAKH,KAAKC,MAAMkM,YAEvC,OAAuB,IAAnBC,EAAQ5D,QAIL4D,EAAQC,MAAK,SAACC,GAGnB,MAA2B,YAFT,EAAKrM,MAAMkM,WAAWG,GAEvBrM,UAIrBsM,YAjCyC,WAiC3B,WACZvM,KAAKU,SAAS,CAAEuL,SAAS,IAEzB/B,GAAiBsC,MAAMxM,KAAKiD,MAAMrG,OAAlC,SACW,kBAAM,EAAK8D,SAAS,CAAEuL,SAAS,QAG5CQ,WAxCyC,WAwC5B,WACXzM,KAAKU,SAAS,CAAEuL,SAAS,IAEzB/B,GAAiBwC,KAAK1M,KAAKiD,MAAMrG,OAAjC,SACW,kBAAM,EAAK8D,SAAS,CAAEuL,SAAS,QAG5CnK,OA/CyC,WAgDvC,OAAI9B,KAAKkM,kBAEL,kBAAC,IAAD,CAAQrO,QAAQ,UAAUC,QAASkC,KAAKyM,WAAY5P,SAAUmD,KAAKC,MAAMgM,SACtEjM,KAAKC,MAAMgM,QAAU,cAAgB,cAM1C,kBAAC,IAAD,CAAQpO,QAAQ,UAAUC,QAASkC,KAAKuM,YAAa1P,SAAUmD,KAAKC,MAAMgM,SACvEjM,KAAKC,MAAMgM,QAAU,cAAgB,kB,6CC1DxCU,GAAU/Q,UAAOgR,KAAV,8EAAGhR,EAAY,gBAAGiR,EAAH,EAAGA,MAAH,OAAeC,cAAd,CAAD,4NAEfD,EAAME,OAAOC,KAAK,IAIZH,EAAMI,MAAMC,OAAOC,cAuBhCC,GAAenO,IAAcC,SAAS,WACtCmO,GAAiBxO,IAAgBC,WAAW,WAwMnCwO,GAtMShO,IAAiB,CACvCC,YAAa,kBAEbjB,UAAW,CACT1B,MAAO2B,IAAU6F,OAAO5F,YAG1BgB,OAAQ,CAACC,IAAOC,QAAQ0N,KAExBzN,gBATuC,WAUrC,MAAO,CACL4N,aAAa,IAIjBC,0BAfuC,WAgBrCxN,KAAKyN,eAAevC,SAAQ,SAACwC,GAAD,OAAgBL,GAAeM,UAAUD,OAGvEE,qBAnBuC,WAoBrC5N,KAAKyN,eAAevC,SAAQ,SAACwC,GAAD,OAAgBL,GAAeQ,aAAaH,OAG1ED,aAvBuC,WAwBrC,MAAO,CACLzN,KAAK8N,QAAQ,oBACb9N,KAAK8N,QAAQ,iBACb9N,KAAK8N,QAAQ,oBACb9N,KAAK8N,QAAQ,qBACb9N,KAAK8N,QAAQ,sBACb9N,KAAK8N,QAAQ,uBACb9N,KAAK8N,QAAQ,mBACb9N,KAAK8N,QAAQ,sBAIjBA,QApCuC,SAoC/BC,GAAQ,IACNnR,EAAUoD,KAAKiD,MAAfrG,MAER,gBAAUA,EAAMR,KAAhB,YAAwBQ,EAAMV,GAA9B,YAAoC6R,IAGtCC,oBA1CuC,SA0CnBD,GAClB,GAAIA,QAIJ,OAAQA,EAAO3R,MACb,IAAK,QACH,OAAO2R,EAAOA,OAAOE,KAAKC,KAC5B,IAAK,QACH,OAAOH,EAAOA,OAAOzR,MACvB,IAAK,UACH,OAAOyR,EAAOA,OAAOnD,MACvB,QACE,SAINuD,kBA3DuC,SA2DrBC,GAAS,WACnBC,EAAS,GAkBf,OAhBArO,KAAKyN,eAAevC,SAAQ,SAACwC,GAC3BW,EAAOX,GAAcxN,OAAOC,KAAKiO,GAAS1D,QAAO,SAAC4D,EAAUhI,GAC1D,IAAK8H,EAAQ9H,GAAQoH,GACnB,OAAOY,EAGT,IAAMhS,EAAQ,EAAK0R,oBAAoBI,EAAQ9H,GAAQoH,IAEvD,YAAc/O,IAAVrC,EACKiS,MAAMD,GAAYhS,EAAQgS,EAAWhS,EAGvCgS,IACNE,QAGEH,GAGTI,aAjFuC,SAiF1B7D,GACX,OAAO8D,KAAQ9D,GAAO+D,OAAO,QAG/BC,oBArFuC,SAqFnBC,EAAkBC,EAAmBC,EAAeC,GAyBtE,OAvBE,kBAACrC,GAAD,KACE,8CACA,0BAAMpK,UAAU,UACd,kBAAC,IAAD,CAAMiD,KAAK,aAAajD,UAAU,6CAClC,0BAAMA,UAAU,YAAY0M,KAAYC,YAAYH,GAApD,KAEA,kBAAC,IAAD,CAAMvJ,KAAK,WAAWjD,UAAU,2CAChC,0BAAMA,UAAU,YAAY0M,KAAYC,YAAYL,KAGtD,0BAAMtM,UAAU,SACd,2CACA,kBAAC,IAAD,CAAMiD,KAAK,aAAajD,UAAU,6CAClC,0BAAMA,UAAU,YAAY0M,KAAYC,YAAYF,GAApD,KAEA,kBAAC,IAAD,CAAMxJ,KAAK,WAAWjD,UAAU,2CAChC,0BAAMA,UAAU,YAAY0M,KAAYC,YAAYJ,IACpD,qCAEF,+BAONK,mBAjHuC,SAiHpBC,EAAiBC,GAClC,OACE,qDACsB,0BAAM9M,UAAU,UAAUvC,KAAKyO,aAAaW,GAA5C,KADtB,IAEG,0BAAM7M,UAAU,SAASvC,KAAKyO,aAAaY,IAF9C,UAGE,+BAKNC,sBA3HuC,SA2HjBlB,GAAS,WAC7B,OACE,8BACE,wBAAI/R,IAAI,cACP6D,OAAOC,KAAKiO,GAASnQ,KAAI,SAACqI,GAAD,OAAY,EAAKiJ,mBAAmBjJ,EAAQ8H,EAAQ9H,SAKpFiJ,mBApIuC,SAoIpBjJ,EAAQ8H,GAAS,IAC1BxR,EAAUoD,KAAKiD,MAAfrG,MACFwS,EAAkBpP,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,sBAChEuB,EAAmBrP,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,uBACjE0B,EAAgBxP,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,mBAC9De,EAAmB7O,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,wBACjEgB,EAAoB9O,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,yBAClEiB,EAAgB/O,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,qBAC9DkB,EAAiBhP,KAAKgO,oBAAoBI,EAAQpO,KAAK8N,QAAQ,sBAErE,OACE,0BAAMzR,IAAKO,EAAMV,GAAKoK,GACpB,kBAAC,IAAD,CAAYA,OAAQA,IACpB,8BACEiI,MAAMM,IAAqB7O,KAAK4O,oBAAoBC,EAAkBC,EAAmBC,EAAeC,IACxGT,MAAMa,IAAoBpP,KAAKmP,mBAAmBC,EAAiBC,IACnEd,MAAMiB,IAAkB,2DAAiCxP,KAAKyO,aAAae,GAAe,8BAC3FjB,MAAMM,IAAqBN,MAAMa,IAAoB,oEACtD,+BAKNK,mBA3JuC,SA2JpBC,GACjBA,EAAI3O,iBADkB,IAEdwM,EAAgBvN,KAAKC,MAArBsN,YAERvN,KAAKU,SAAS,CAAE6M,aAAcA,KAGhCzL,OAlKuC,WAkK9B,MAC0B9B,KAAKC,MAA9BmO,EADD,EACCA,QAASb,EADV,EACUA,YACT3Q,EAAUoD,KAAKiD,MAAfrG,MAER,IAAKwR,EACH,OAAO,kBAAC,KAAD,MAGT,IAAMuB,EAAoB3P,KAAKmO,kBAAkBC,GAC3CwB,EAAmBD,EAAkB3P,KAAK8N,QAAQ,qBAClD0B,EAAgBG,EAAkB3P,KAAK8N,QAAQ,kBAC/CsB,EAAkBO,EAAkB3P,KAAK8N,QAAQ,qBACjDuB,EAAmBM,EAAkB3P,KAAK8N,QAAQ,sBAClDe,EAAmBc,EAAkB3P,KAAK8N,QAAQ,uBAClDgB,EAAoBa,EAAkB3P,KAAK8N,QAAQ,wBACnDiB,EAAgBY,EAAkB3P,KAAK8N,QAAQ,oBAC/CkB,EAAiBW,EAAkB3P,KAAK8N,QAAQ,qBAEtD,OACE,yBAAKvL,UAAU,yBACb,oDACA,8BACGgM,MAAMqB,IAAqBrB,MAAMM,IAAqBN,MAAMa,IAAoB,mEAC/Eb,MAAMqB,IAAqB,wDAA8B5P,KAAKyO,aAAamB,GAAhD,SAAwE,+BACnGrB,MAAMM,IAAqB7O,KAAK4O,oBAAoBC,EAAkBC,EAAmBC,EAAeC,IACxGT,MAAMa,IAAoBpP,KAAKmP,mBAAmBC,EAAiBC,IACnEd,MAAMiB,IAAkB,2DAAiCxP,KAAKyO,aAAae,GAAe,+BAE1FjB,MAAMM,IAAqBjS,EAAMoG,QAAU,uBAAGH,KAAK,GAAG/E,QAASkC,KAAKyP,oBAAqBlC,EAAc,OAAS,OAArE,aAC3CgB,MAAMM,IAAqBtB,GAAevN,KAAKsP,sBAAsBlB,Q,w7CCtOjF,IAAMyB,GAAyB5Q,IAAcC,SAAS,qBAEhD4Q,G,qbAKiB,SAACC,GACpB,OAAO,WACDpL,OAAOC,QAAP,wDAAgEmL,EAAhE,mBAAoF,EAAK9M,MAAMrG,MAAMT,MAArG,QACF0T,GAAuBG,QAAQ,EAAK/M,MAAMrG,MAAOmT,O,0BAKvC,SAACA,GACf,OACE,kBAAC,IAAD,CAAQlS,QAAQ,OAAO+N,OAAO,SAASlJ,MAAO,CAAEuN,cAAe,YAAcnS,QAAS,EAAKoS,mBAAmBH,IAC5G,kBAAC,IAAD,CAAMvK,KAAK,e,gCAKK,SAAC2K,GACrB,IAAMC,EAAkB,GAWxB,OAVyBlQ,OAAOC,KAAKgQ,GAEpBjF,SAAQ,SAAC6E,GACxBK,EAAgB5P,KACd,wBAAInE,IAAG,UAAK0T,EAAL,WACL,gCAASA,EAAT,KADF,IACiCI,EAAaJ,GAD9C,IAC2D,EAAKM,cAAcN,QAK3EK,K,qCAGT,WAGE,OAAgC,IAFPlQ,OAAOC,KAAKH,KAAKiD,MAAMrG,MAAM0T,eAEjC9H,OACZ,8BAIP,yBAAKjG,UAAU,iBACb,wBAAIG,MAAO,CAAE6N,aAAc,IAA3B,iBACA,4BACGvQ,KAAKwQ,oBAAoBxQ,KAAKiD,MAAMrG,MAAM0T,sB,gCA/CrBvM,IAAMC,W,GAAhC8L,G,YACe,CACjBlT,MAAO2B,IAAU6F,OAAO5F,aAoDbsR,U,6+BCvDf,IAAM3F,GAAalL,IAAcC,SAAS,SAQpCuR,GAAqB,SAAC,GAA8C,QAA5CzN,cAA4C,SAA5BG,EAA4B,EAA5BA,KAAMhF,EAAsB,EAAtBA,SAC1CqM,EAAUkG,aAASvG,IAAnBK,MADgE,KAEvCtN,mBAAS8F,GAF8B,GAEjE2N,EAFiE,KAEpDC,EAFoD,UAG3C1T,mBAASiG,GAHkC,GAGjE0N,EAHiE,KAGtDC,EAHsD,KAKxEC,qBAAU,WACR,IAAK5N,GAAQqH,EAAO,CAClB,IAAMwG,EAAU9Q,OAAOC,KAAKqK,GAEL,IAAnBwG,EAAQxI,SACVrK,EAAS,OAAQ6S,EAAQ,IACzBF,EAAQE,EAAQ,QAGnB,CAACxG,IAEJ,IAAMyG,EAAkB3T,uBAAY,SAACoS,GACnC,IAAMwB,EAAWxB,EAAIlS,OAAO2T,QAE5BP,EAAUM,GAENA,GACFJ,EAAQ,eACR3S,EAAS,YAAQQ,IAEjBR,EAAS,OAAQ0S,GAGnB1S,EAAS,SAAU+S,KAClB,CAAC/S,EAAU0S,EAAWC,EAASF,IAE5BQ,EAAgB9T,uBAAY,SAACoS,GACjCoB,EAAQpB,EAAIlS,OAAOlB,OACnB6B,EAAS,OAAQuR,EAAIlS,OAAOlB,SAC3B,CAACwU,EAAS3S,IAEb,IAAKqM,EACH,OAAO,kBAAC,KAAD,MAGT,IAAM1K,EAAUI,OAAOC,KAAKqK,GACzBvM,KAAI,SAACqI,GACJ,OAAO,4BAAQjK,IAAKiK,EAAQhK,MAAOgK,GAASkE,EAAMlE,GAAQ+K,cAAnD,MAAqE7G,EAAMlE,GAAQgL,aAGxFC,EAAcZ,EAYhB,KAXF,kBAAC,KAAD,CAAOzU,GAAG,cACHE,KAAK,SACLgE,MAAM,OACNhC,YAAY,cACZ9B,MAAO6G,EACPqO,KAAK,wCACLrT,SAAUiT,EACVK,UAAQ,GACb,4BAAQpV,IAAI,cAAcC,MAAM,IAAhC,eACCwD,GAIL,OACE,8BACE,kBAAC,KAAD,CAAO5D,GAAG,kBACHE,KAAK,WACLgE,MAAM,SACNoR,KAAK,uCACLL,QAASR,EACTxS,SAAU8S,IAChBM,IAKPd,GAAmBnS,UAAY,CAC7B0E,OAAQzE,IAAU0F,KAClB9F,SAAUI,IAAU4F,KAAK3F,WACzB2E,KAAM5E,IAAU2F,QAGlBuM,GAAmBhS,aAAe,CAChCuE,QAAQ,EACRG,UAAMxE,GAGO8R,U,w7CC7Ff,IAAMZ,GAAyB5Q,IAAcC,SAAS,qBAEhDwS,G,uaAKG,WACL,EAAKC,MAAMjQ,U,4BAGK,WAChB,IAAMqO,EAAY,EAAKA,UAAUrM,WAC3BkO,EAAa,EAAKA,WAAWlO,WAEnCmM,GAAuBhO,OAAO,EAAKoB,MAAMrG,MAAOmT,EAAW6B,GAAYhR,MAAK,kBAAM,EAAK+Q,MAAME,c,qCAG/F,WAAS,WACP,OACE,kBAAC,KAAD,CAAoB5P,IAAK,SAAC0P,GAAY,EAAKA,MAAQA,GAC/BxV,MAAM,mBACN2V,iBAAiB,YACjBC,aAAc/R,KAAKgS,iBACrC,6QAIA,kBAAC,KAAD,CAAO/P,IAAK,SAAC8N,GAAgB,EAAKA,UAAYA,GACvC3T,KAAK,OACLF,GAAG,aACHkE,MAAM,aACNmC,UAAU,cACV0P,gBAAc,sBACdR,UAAQ,EACRS,WAAS,IAChB,kBAAC,KAAD,CAAOjQ,IAAK,SAAC2P,GAAiB,EAAKA,WAAaA,GAAexV,KAAK,OAAOF,GAAG,cAAckE,MAAM,cAAcqR,UAAQ,U,gCAlClG1N,IAAMC,W,GAA9B0N,G,YACe,CACjB9U,MAAO2B,IAAU6F,OAAO5F,aAsCbkT,W,sCChEf,0HAoBO,SAASS,EAAWC,EAAIC,EAAIC,GACjC,IAAMC,EAAqBD,GAAa,MAClCE,EAASC,IAAOL,GAChBM,EAASD,IAAOJ,GAEtB,MAA2B,QAAvBE,EACMC,EAAOG,SAASD,IAAW,EAAIA,EAAOC,SAASH,GAAU,EAAI,EAG/DE,EAAOC,SAASH,IAAW,EAAIA,EAAOG,SAASD,GAAU,EAAI,EAGhE,SAASzK,EAAsB2K,EAAIC,EAAIP,GAG5C,MAA+B,SAFJA,GAAa,OAEDQ,IAAYF,EAAGrS,cAAesS,EAAGtS,eAAiBuS,IAAYD,EAAGtS,cAAeqS,EAAGrS","file":"57e33c6c-20.11b9f72925818240e61d.js","sourcesContent":["/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport * as PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport * as Immutable from 'immutable';\n\nimport { Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport Spinner from 'components/common/Spinner';\n\nconst LoaderContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n\n .form-group {\n margin: 0 15px 0 0;\n }\n`;\n\nconst StyledInputDropdown = styled(Input)`\n min-width: 400px;\n`;\n\nconst PLACEHOLDER = 'placeholder';\n\ntype InputType = {\n id: string,\n title: string,\n type: string,\n};\n\nconst _formatInput = ({ id, title, type }: InputType) => {\n return ;\n};\n\nconst _sortByTitle = (input1: InputType, input2: InputType) => input1.title.localeCompare(input2.title);\n\nconst StaticInput = ({ input: { type, title } }: { input: InputType }) => (\n \n \n \n);\n\ntype Props = {\n disabled?: boolean,\n inputs: Immutable.Map,\n preselectedInputId?: string,\n onLoadMessage: (inputId: string) => any,\n title: string,\n};\n\nconst InputDropdown = ({ disabled, inputs, onLoadMessage, preselectedInputId, title }: Props) => {\n const [selectedInput, setSelectedInput] = useState(preselectedInputId || PLACEHOLDER);\n const onSelectedInputChange = useCallback((event) => setSelectedInput(event.target.value), []);\n const _onLoadMessage = useCallback(() => onLoadMessage(selectedInput), [onLoadMessage, selectedInput]);\n const preselectedInput = useMemo(() => inputs?.get(preselectedInputId), [inputs, preselectedInputId]);\n\n // When an input is pre-selected, show a static dropdown\n if (preselectedInput) {\n return (\n \n \n\n \n \n );\n }\n\n if (inputs) {\n const inputOptions = inputs.sort(_sortByTitle).map(_formatInput);\n\n return (\n \n \n \n {inputOptions.toArray()}\n \n\n \n \n );\n }\n\n return ;\n};\n\nInputDropdown.propTypes = {\n inputs: PropTypes.object,\n title: PropTypes.string.isRequired,\n preselectedInputId: PropTypes.string,\n onLoadMessage: PropTypes.func,\n disabled: PropTypes.bool,\n};\n\nInputDropdown.defaultProps = {\n inputs: Immutable.Map(),\n onLoadMessage: () => {},\n preselectedInputId: undefined,\n disabled: false,\n};\n\nexport default InputDropdown;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport styled from 'styled-components';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { Col, Row, Button } from 'components/graylog';\nimport { ExternalLinkButton, Select } from 'components/common';\nimport ActionsProvider from 'injection/ActionsProvider';\nimport StoreProvider from 'injection/StoreProvider';\nimport { InputForm } from 'components/inputs';\n\nconst InputTypesActions = ActionsProvider.getActions('InputTypes');\nconst InputsActions = ActionsProvider.getActions('Inputs');\nconst InputTypesStore = StoreProvider.getStore('InputTypes');\n\nconst NewInputRow = styled(Row)`\n margin-bottom: 8px;\n`;\n\nconst CreateInputControl = createReactClass({\n displayName: 'CreateInputControl',\n mixins: [Reflux.connect(InputTypesStore)],\n\n getInitialState() {\n return {\n selectedInput: undefined,\n selectedInputDefinition: undefined,\n };\n },\n\n _formatSelectOptions() {\n let options = [];\n\n const { inputTypes } = this.state;\n\n if (inputTypes) {\n const inputTypesIds = Object.keys(inputTypes);\n\n options = inputTypesIds.map((id) => {\n return { value: id, label: inputTypes[id] };\n });\n\n options.sort((inputTypeA, inputTypeB) => inputTypeA.label.toLowerCase().localeCompare(inputTypeB.label.toLowerCase()));\n } else {\n options.push({ value: 'none', label: 'No inputs available', disabled: true });\n }\n\n return options;\n },\n\n _onInputSelect(selectedInput) {\n if (selectedInput === '') {\n this.setState(this.getInitialState());\n }\n\n this.setState({ selectedInput: selectedInput });\n InputTypesActions.get.triggerPromise(selectedInput).then((inputDefinition) => this.setState({ selectedInputDefinition: inputDefinition }));\n },\n\n _openModal(event) {\n event.preventDefault();\n const { selectedInput } = this.state;\n\n const customConfiguration = PluginStore.exports('inputConfiguration')\n .find((inputConfig) => inputConfig.type === selectedInput);\n\n if (customConfiguration) {\n const onClose = () => this.setState({ customInputsComponent: undefined });\n const CustomInputsConfiguration = customConfiguration.component;\n\n this.setState({\n customInputsComponent: ,\n });\n }\n\n this.configurationForm.open();\n },\n\n _createInput(data) {\n InputsActions.create(data).then(() => {\n this.setState(this.getInitialState());\n });\n },\n\n render() {\n let inputModal;\n const { selectedInputDefinition, selectedInput, inputTypes, customInputsComponent } = this.state;\n\n if (selectedInputDefinition && !customInputsComponent) {\n const inputTypeName = inputTypes[selectedInput];\n\n inputModal = (\n { this.configurationForm = configurationForm; }}\n key=\"configuration-form-input\"\n configFields={selectedInputDefinition.requested_configuration}\n title={Launch new {inputTypeName} input}\n helpBlock=\"Select a name of your new input that describes it.\"\n typeName={selectedInput}\n submitAction={this._createInput} />\n );\n }\n\n return (\n \n \n \n {inputModal || customInputsComponent}\n \n \n );\n },\n});\n\nexport default CreateInputControl;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport jQuery from 'jquery';\n\nimport { NodeOrGlobalSelect } from 'components/inputs';\nimport { ConfigurationForm } from 'components/configurationforms';\n\nclass InputForm extends React.Component {\n static propTypes = {\n globalValue: PropTypes.bool,\n nodeValue: PropTypes.string,\n titleValue: PropTypes.string,\n submitAction: PropTypes.func.isRequired,\n values: PropTypes.object,\n };\n\n state = {\n global: this.props.globalValue !== undefined ? this.props.globalValue : false,\n node: this.props.nodeValue !== undefined ? this.props.nodeValue : undefined,\n };\n\n _handleChange = (field, value) => {\n const state = {};\n\n state[field] = value;\n this.setState(state);\n };\n\n _onSubmit = (data) => {\n const newData = jQuery.extend(data, { global: this.state.global, node: this.state.node });\n\n this.props.submitAction(newData);\n };\n\n open = () => {\n this.configurationForm.open();\n };\n\n render() {\n const values = this.props.values ? this.props.values\n : (this.configurationForm ? this.configurationForm.getValue().configuration : {});\n const titleValue = this.props.titleValue ? this.props.titleValue\n : (this.configurationForm ? this.configurationForm.getValue().titleValue : '');\n\n return (\n { this.configurationForm = configurationForm; }}\n values={values}\n titleValue={titleValue}\n submitAction={this._onSubmit}>\n \n \n );\n }\n}\n\nexport default InputForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { LinkContainer } from 'components/graylog/router';\nimport { DropdownButton, MenuItem, Col, Button } from 'components/graylog';\nimport { EntityListItem, IfPermitted, LinkToNode, Spinner } from 'components/common';\nimport { ConfigurationWell } from 'components/configurationforms';\nimport PermissionsMixin from 'util/PermissionsMixin';\nimport Routes from 'routing/Routes';\nimport StoreProvider from 'injection/StoreProvider';\nimport ActionsProvider from 'injection/ActionsProvider';\nimport { InputForm, InputStateBadge, InputStateControl, InputStaticFields, InputThroughput, StaticFieldForm } from 'components/inputs';\n\nconst InputTypesStore = StoreProvider.getStore('InputTypes');\nconst InputsActions = ActionsProvider.getActions('Inputs');\n\nconst InputListItem = createReactClass({\n displayName: 'InputListItem',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n currentNode: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n },\n\n mixins: [PermissionsMixin, Reflux.connect(InputTypesStore)],\n\n _deleteInput() {\n if (window.confirm(`Do you really want to delete input '${this.props.input.title}'?`)) {\n InputsActions.delete(this.props.input);\n }\n },\n\n _openStaticFieldForm() {\n this.staticFieldForm.open();\n },\n\n _editInput() {\n this.configurationForm.open();\n },\n\n _updateInput(data) {\n InputsActions.update(this.props.input.id, data);\n },\n\n render() {\n if (!this.state.inputTypes) {\n return ;\n }\n\n const { input } = this.props;\n const definition = this.state.inputDescriptions[input.type];\n\n const titleSuffix = (\n \n {this.props.input.name}\n \n \n \n );\n\n const actions = [];\n\n if (this.isPermitted(this.props.permissions, ['searches:relative'])) {\n actions.push(\n \n \n ,\n );\n }\n\n if (this.isPermitted(this.props.permissions, [`inputs:edit:${this.props.input.id}`])) {\n let extractorRoute;\n\n if (this.props.input.global) {\n extractorRoute = Routes.global_input_extractors(this.props.input.id);\n } else {\n extractorRoute = Routes.local_input_extractors(this.props.currentNode.node_id, this.props.input.id);\n }\n\n actions.push(\n \n \n ,\n );\n\n actions.push( );\n }\n\n let showMetricsMenuItem;\n\n if (!this.props.input.global) {\n showMetricsMenuItem = (\n \n \n \n );\n }\n\n actions.push(\n \n \n \n \n\n {showMetricsMenuItem}\n\n \n \n \n\n \n \n \n \n \n \n ,\n );\n\n let subtitle;\n\n if (!this.props.input.global && this.props.input.node) {\n subtitle = (\n \n On node{' '} \n \n );\n }\n\n const inputForm = definition\n ? (\n { this.configurationForm = configurationForm; }}\n key={`edit-form-input-${input.id}`}\n globalValue={input.global}\n nodeValue={input.node}\n configFields={definition.requested_configuration}\n title={`Editing Input ${input.title}`}\n titleValue={input.title}\n typeName={input.type}\n includeTitleField\n submitAction={this._updateInput}\n values={input.attributes} />\n ) : null;\n\n const additionalContent = (\n \n \n \n { this.staticFieldForm = staticFieldForm; }} input={this.props.input} />\n \n \n \n \n \n {inputForm}\n \n );\n\n return (\n \n );\n },\n});\n\nexport default InputListItem;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport styled from 'styled-components';\n\nimport { Row, Col } from 'components/graylog';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport EntityList from 'components/common/EntityList';\nimport { IfPermitted, Spinner, SearchForm } from 'components/common';\nimport StoreProvider from 'injection/StoreProvider';\nimport ActionsProvider from 'injection/ActionsProvider';\n\nimport InputListItem from './InputListItem';\nimport CreateInputControl from './CreateInputControl';\n\nconst InputsActions = ActionsProvider.getActions('Inputs');\nconst SingleNodeActions = ActionsProvider.getActions('SingleNode');\nconst InputTypesActions = ActionsProvider.getActions('InputTypes');\n\nconst InputsStore = StoreProvider.getStore('Inputs');\nconst SingleNodeStore = StoreProvider.getStore('SingleNode');\n\nconst InputListRow = styled(Row)`\n h2 {\n margin-bottom: 5px;\n }\n\n .alert {\n margin-top: 10px;\n }\n\n .static-fields {\n margin-top: 10px;\n margin-left: 3px;\n\n ul {\n margin: 0;\n padding: 0;\n\n .remove-static-field {\n margin-left: 5px;\n }\n }\n }\n`;\n\nconst InputsList = createReactClass({\n displayName: 'InputsList',\n\n propTypes: {\n permissions: PropTypes.array.isRequired,\n node: PropTypes.object,\n },\n\n mixins: [Reflux.connect(SingleNodeStore), Reflux.listenTo(InputsStore, '_splitInputs')],\n\n getDefaultProps() {\n return {\n node: undefined,\n };\n },\n\n getInitialState() {\n return {\n globalInputs: undefined,\n localInputs: undefined,\n filteredGlobalInputs: undefined,\n filteredLocalInputs: undefined,\n filter: undefined,\n };\n },\n\n componentDidMount() {\n InputTypesActions.list();\n InputsActions.list();\n SingleNodeActions.get();\n },\n\n _splitInputs(state) {\n const { inputs } = state;\n const globalInputs = inputs\n .filter((input) => input.global === true)\n .sort((inputA, inputB) => naturalSortIgnoreCase(inputA.title, inputB.title));\n let localInputs = inputs\n .filter((input) => input.global === false)\n .sort((inputA, inputB) => naturalSortIgnoreCase(inputA.title, inputB.title));\n\n if (this.props.node) {\n localInputs = localInputs.filter((input) => input.node === this.props.node.node_id);\n }\n\n this.setState({\n globalInputs: globalInputs,\n localInputs: localInputs,\n });\n\n this._onFilterInputs(this.state.filter);\n },\n\n _isLoading() {\n return !(this.state.localInputs && this.state.globalInputs && this.state.node && this.state.filteredLocalInputs\n && this.state.filteredGlobalInputs);\n },\n\n _formatInput(input) {\n return ;\n },\n\n _nodeAffix() {\n return (this.props.node ? ' on this node' : '');\n },\n\n _onFilterInputs(filter, resetLoadingState) {\n const { globalInputs, localInputs } = this.state;\n const regExp = RegExp(filter, 'i');\n\n if (!globalInputs || !localInputs) {\n if (resetLoadingState) {\n resetLoadingState();\n }\n\n return;\n }\n\n if (!filter || filter.length <= 0) {\n this.setState({\n filteredGlobalInputs: globalInputs,\n filteredLocalInputs: localInputs,\n filter: undefined,\n });\n\n if (resetLoadingState) {\n resetLoadingState();\n }\n\n return;\n }\n\n const filterMethod = (input) => {\n return regExp.test(input.title);\n };\n\n const filteredGlobalInputs = this.state.globalInputs.filter(filterMethod);\n const filteredLocalInputs = this.state.localInputs.filter(filterMethod);\n\n this.setState({\n filteredGlobalInputs: filteredGlobalInputs,\n filteredLocalInputs: filteredLocalInputs,\n filter: filter,\n });\n\n if (resetLoadingState) {\n resetLoadingState();\n }\n },\n\n _onFilterReset() {\n const { globalInputs, localInputs } = this.state;\n\n this.setState({\n filteredGlobalInputs: globalInputs,\n filteredLocalInputs: localInputs,\n filter: undefined,\n });\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n return (\n \n {!this.props.node\n && (\n \n \n \n )}\n\n \n \n \n
\n \n Global inputs\n \n {this.state.globalInputs.length} configured{this._nodeAffix()}\n
\n this._formatInput(input))} />\n
\n
\n \n Local inputs\n \n {this.state.localInputs.length} configured{this._nodeAffix()}\n
\n this._formatInput(input))} />\n \n \n \n );\n },\n});\n\nexport default InputsList;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nclass InputStateComparator {\n constructor() {\n this.mapping = {\n CREATED: 0,\n INITIALIZED: 1,\n INVALID_CONFIGURATION: 2,\n STARTING: 3,\n RUNNING: 4,\n FAILED: 2,\n STOPPING: 1,\n STOPPED: 0,\n TERMINATED: 0,\n };\n }\n\n compare(state1, state2) {\n return this.mapping[state1.toUpperCase()] - this.mapping[state2.toUpperCase()];\n }\n}\n\nexport default InputStateComparator;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Label, OverlayTrigger, Popover } from 'components/graylog';\nimport StoreProvider from 'injection/StoreProvider';\nimport { LinkToNode, Spinner } from 'components/common';\nimport InputStateComparator from 'logic/inputs/InputStateComparator';\n\nconst InputStatesStore = StoreProvider.getStore('InputStates');\nconst NodesStore = StoreProvider.getStore('Nodes');\n\nconst InputStateBadge = createReactClass({\n displayName: 'InputStateBadge',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(InputStatesStore), Reflux.connect(NodesStore)],\n comparator: new InputStateComparator(),\n\n _labelClassForState(sortedStates) {\n const { input } = this.props;\n const { nodes } = this.state;\n const nodesWithKnownState = sortedStates.reduce((numberOfNodes, state) => {\n return numberOfNodes + state.count;\n }, 0);\n\n if (input.global && nodesWithKnownState !== Object.keys(nodes).length) {\n return 'warning';\n }\n\n const { state } = sortedStates[0];\n\n switch (state) {\n case 'RUNNING':\n return 'success';\n case 'FAILED':\n case 'STOPPED':\n return 'danger';\n case 'STARTING':\n return 'info';\n default:\n return 'warning';\n }\n },\n\n _textForState(sortedStates) {\n const { input } = this.props;\n\n if (input.global) {\n return sortedStates.map((state) => `${state.count} ${state.state}`).join(', ');\n }\n\n return sortedStates[0].state;\n },\n\n _isLoading() {\n const { inputStates, nodes } = this.state;\n\n return !(inputStates && nodes);\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { input } = this.props;\n const { inputStates } = this.state;\n const inputId = input.id;\n const sortedInputStates = {};\n\n if (inputStates[inputId]) {\n Object.keys(inputStates[inputId]).forEach((node) => {\n const { state } = inputStates[inputId][node];\n\n if (!sortedInputStates[state]) {\n sortedInputStates[state] = [];\n }\n\n sortedInputStates[state].push(node);\n });\n }\n\n const sorted = Object.keys(sortedInputStates).sort(this.comparator.compare.bind(this.comparator)).map((state) => {\n return { state: state, count: sortedInputStates[state].length };\n });\n\n if (sorted.length > 0) {\n const popOverText = sorted.map((state) => {\n return sortedInputStates[state.state].map((node) => {\n return : {state.state}
;\n });\n });\n const popover = (\n \n {popOverText}\n \n );\n\n return (\n \n \n \n );\n }\n\n const text = input.global || input.node === undefined ? '0 RUNNING' : 'NOT RUNNING';\n\n return (\n \n );\n },\n});\n\nexport default InputStateBadge;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Button } from 'components/graylog';\nimport StoreProvider from 'injection/StoreProvider';\n\nconst InputStatesStore = StoreProvider.getStore('InputStates');\n\nfunction inputStateFilter(state) {\n return state.inputStates ? state.inputStates[this.props.input.id] : undefined;\n}\n\nconst InputStateControl = createReactClass({\n displayName: 'InputStateControl',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connectFilter(InputStatesStore, 'inputState', inputStateFilter)],\n\n getInitialState() {\n return {\n loading: false,\n };\n },\n\n _isInputRunning() {\n if (!this.state.inputState) {\n return false;\n }\n\n const nodeIDs = Object.keys(this.state.inputState);\n\n if (nodeIDs.length === 0) {\n return false;\n }\n\n return nodeIDs.some((nodeID) => {\n const nodeState = this.state.inputState[nodeID];\n\n return nodeState.state === 'RUNNING';\n });\n },\n\n _startInput() {\n this.setState({ loading: true });\n\n InputStatesStore.start(this.props.input)\n .finally(() => this.setState({ loading: false }));\n },\n\n _stopInput() {\n this.setState({ loading: true });\n\n InputStatesStore.stop(this.props.input)\n .finally(() => this.setState({ loading: false }));\n },\n\n render() {\n if (this._isInputRunning()) {\n return (\n \n );\n }\n\n return (\n \n );\n },\n});\n\nexport default InputStateControl;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n/* eslint-disable no-restricted-globals */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport numeral from 'numeral';\nimport styled, { css } from 'styled-components';\n\nimport StoreProvider from 'injection/StoreProvider';\nimport ActionsProvider from 'injection/ActionsProvider';\nimport NumberUtils from 'util/NumberUtils';\nimport { Icon, LinkToNode, Spinner } from 'components/common';\n\nconst InputIO = styled.span(({ theme }) => css`\n .total {\n color: ${theme.colors.gray[70]};\n }\n\n .value {\n font-family: ${theme.fonts.family.monospace};\n }\n\n .persec {\n margin-left: 3px;\n }\n\n .channel-direction {\n position: relative;\n left: -1px;\n }\n\n .channel-direction-down {\n position: relative;\n top: 1px;\n }\n\n .channel-direction-up {\n position: relative;\n top: -1px;\n }\n`);\n\nconst MetricsStore = StoreProvider.getStore('Metrics');\nconst MetricsActions = ActionsProvider.getActions('Metrics');\n\nconst InputThroughput = createReactClass({\n displayName: 'InputThroughput',\n\n propTypes: {\n input: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(MetricsStore)],\n\n getInitialState() {\n return {\n showDetails: false,\n };\n },\n\n UNSAFE_componentWillMount() {\n this._metricNames().forEach((metricName) => MetricsActions.addGlobal(metricName));\n },\n\n componentWillUnmount() {\n this._metricNames().forEach((metricName) => MetricsActions.removeGlobal(metricName));\n },\n\n _metricNames() {\n return [\n this._prefix('incomingMessages'),\n this._prefix('emptyMessages'),\n this._prefix('open_connections'),\n this._prefix('total_connections'),\n this._prefix('written_bytes_1sec'),\n this._prefix('written_bytes_total'),\n this._prefix('read_bytes_1sec'),\n this._prefix('read_bytes_total'),\n ];\n },\n\n _prefix(metric) {\n const { input } = this.props;\n\n return `${input.type}.${input.id}.${metric}`;\n },\n\n _getValueFromMetric(metric) {\n if (metric === null || metric === undefined) {\n return undefined;\n }\n\n switch (metric.type) {\n case 'meter':\n return metric.metric.rate.mean;\n case 'gauge':\n return metric.metric.value;\n case 'counter':\n return metric.metric.count;\n default:\n return undefined;\n }\n },\n\n _calculateMetrics(metrics) {\n const result = {};\n\n this._metricNames().forEach((metricName) => {\n result[metricName] = Object.keys(metrics).reduce((previous, nodeId) => {\n if (!metrics[nodeId][metricName]) {\n return previous;\n }\n\n const value = this._getValueFromMetric(metrics[nodeId][metricName]);\n\n if (value !== undefined) {\n return isNaN(previous) ? value : previous + value;\n }\n\n return previous;\n }, NaN);\n });\n\n return result;\n },\n\n _formatCount(count) {\n return numeral(count).format('0,0');\n },\n\n _formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal) {\n const network = (\n \n Network IO: \n \n \n {NumberUtils.formatBytes(readBytes1Sec)} \n\n \n {NumberUtils.formatBytes(writtenBytes1Sec)}\n \n\n \n (total: \n \n {NumberUtils.formatBytes(readBytesTotal)} \n\n \n {NumberUtils.formatBytes(writtenBytesTotal)}\n )\n \n
\n \n );\n\n return network;\n },\n\n _formatConnections(openConnections, totalConnections) {\n return (\n \n Active connections: {this._formatCount(openConnections)} \n ({this._formatCount(totalConnections)} total)\n
\n \n );\n },\n\n _formatAllNodeDetails(metrics) {\n return (\n \n
\n {Object.keys(metrics).map((nodeId) => this._formatNodeDetails(nodeId, metrics[nodeId]))}\n \n );\n },\n\n _formatNodeDetails(nodeId, metrics) {\n const { input } = this.props;\n const openConnections = this._getValueFromMetric(metrics[this._prefix('open_connections')]);\n const totalConnections = this._getValueFromMetric(metrics[this._prefix('total_connections')]);\n const emptyMessages = this._getValueFromMetric(metrics[this._prefix('emptyMessages')]);\n const writtenBytes1Sec = this._getValueFromMetric(metrics[this._prefix('written_bytes_1sec')]);\n const writtenBytesTotal = this._getValueFromMetric(metrics[this._prefix('written_bytes_total')]);\n const readBytes1Sec = this._getValueFromMetric(metrics[this._prefix('read_bytes_1sec')]);\n const readBytesTotal = this._getValueFromMetric(metrics[this._prefix('read_bytes_total')]);\n\n return (\n \n \n
\n {!isNaN(writtenBytes1Sec) && this._formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal)}\n {!isNaN(openConnections) && this._formatConnections(openConnections, totalConnections)}\n {!isNaN(emptyMessages) && Empty messages discarded: {this._formatCount(emptyMessages)}
}\n {isNaN(writtenBytes1Sec) && isNaN(openConnections) && No metrics available for this node}\n
\n \n );\n },\n\n _toggleShowDetails(evt) {\n evt.preventDefault();\n const { showDetails } = this.state;\n\n this.setState({ showDetails: !showDetails });\n },\n\n render() {\n const { metrics, showDetails } = this.state;\n const { input } = this.props;\n\n if (!metrics) {\n return ;\n }\n\n const calculatedMetrics = this._calculateMetrics(metrics);\n const incomingMessages = calculatedMetrics[this._prefix('incomingMessages')];\n const emptyMessages = calculatedMetrics[this._prefix('emptyMessages')];\n const openConnections = calculatedMetrics[this._prefix('open_connections')];\n const totalConnections = calculatedMetrics[this._prefix('total_connections')];\n const writtenBytes1Sec = calculatedMetrics[this._prefix('written_bytes_1sec')];\n const writtenBytesTotal = calculatedMetrics[this._prefix('written_bytes_total')];\n const readBytes1Sec = calculatedMetrics[this._prefix('read_bytes_1sec')];\n const readBytesTotal = calculatedMetrics[this._prefix('read_bytes_total')];\n\n return (\n \n Throughput / Metrics
\n \n {isNaN(incomingMessages) && isNaN(writtenBytes1Sec) && isNaN(openConnections) && No metrics available for this input}\n {!isNaN(incomingMessages) && 1 minute average rate: {this._formatCount(incomingMessages)} msg/s
}\n {!isNaN(writtenBytes1Sec) && this._formatNetworkStats(writtenBytes1Sec, writtenBytesTotal, readBytes1Sec, readBytesTotal)}\n {!isNaN(openConnections) && this._formatConnections(openConnections, totalConnections)}\n {!isNaN(emptyMessages) && Empty messages discarded: {this._formatCount(emptyMessages)}
}\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n {!isNaN(writtenBytes1Sec) && input.global && {showDetails ? 'Hide' : 'Show'} details}\n {!isNaN(writtenBytes1Sec) && showDetails && this._formatAllNodeDetails(metrics)}\n \n \n );\n },\n});\n\nexport default InputThroughput;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Button } from 'components/graylog';\nimport { Icon } from 'components/common';\nimport StoreProvider from 'injection/StoreProvider';\n\nconst InputStaticFieldsStore = StoreProvider.getStore('InputStaticFields');\n\nclass InputStaticFields extends React.Component {\n static propTypes = {\n input: PropTypes.object.isRequired,\n };\n\n _deleteStaticField = (fieldName) => {\n return () => {\n if (window.confirm(`Are you sure you want to remove static field '${fieldName}' from '${this.props.input.title}'?`)) {\n InputStaticFieldsStore.destroy(this.props.input, fieldName);\n }\n };\n };\n\n _deleteButton = (fieldName) => {\n return (\n \n );\n };\n\n _formatStaticFields = (staticFields) => {\n const formattedFields = [];\n const staticFieldNames = Object.keys(staticFields);\n\n staticFieldNames.forEach((fieldName) => {\n formattedFields.push(\n \n {fieldName}: {staticFields[fieldName]} {this._deleteButton(fieldName)}\n ,\n );\n });\n\n return formattedFields;\n };\n\n render() {\n const staticFieldNames = Object.keys(this.props.input.static_fields);\n\n if (staticFieldNames.length === 0) {\n return ;\n }\n\n return (\n \n Static fields
\n \n {this._formatStaticFields(this.props.input.static_fields)}\n
\n \n );\n }\n}\n\nexport default InputStaticFields;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState, useEffect } from 'react';\n\nimport { useStore } from 'stores/connect';\nimport { Input } from 'components/bootstrap';\nimport StoreProvider from 'injection/StoreProvider';\nimport { Spinner } from 'components/common';\n\nconst NodesStore = StoreProvider.getStore('Nodes');\n\ntype Props = {\n global: boolean,\n node: string,\n onChange: (type: 'node' | 'global', value: boolean | string | undefined | null) => void,\n};\n\nconst NodeOrGlobalSelect = ({ global = false, node, onChange }: Props) => {\n const { nodes } = useStore(NodesStore);\n const [globalState, setGlobal] = useState(global);\n const [nodeState, setNode] = useState(node);\n\n useEffect(() => {\n if (!node && nodes) {\n const nodeIds = Object.keys(nodes);\n\n if (nodeIds.length === 1) {\n onChange('node', nodeIds[0]);\n setNode(nodeIds[0]);\n }\n }\n }, [nodes]);\n\n const _onChangeGlobal = useCallback((evt) => {\n const isGlobal = evt.target.checked;\n\n setGlobal(isGlobal);\n\n if (isGlobal) {\n setNode('placeholder');\n onChange('node', undefined);\n } else {\n onChange('node', nodeState);\n }\n\n onChange('global', isGlobal);\n }, [onChange, nodeState, setNode, setGlobal]);\n\n const _onChangeNode = useCallback((evt) => {\n setNode(evt.target.value);\n onChange('node', evt.target.value);\n }, [setNode, onChange]);\n\n if (!nodes) {\n return ;\n }\n\n const options = Object.keys(nodes)\n .map((nodeId) => {\n return ;\n });\n\n const nodeSelect = !globalState ? (\n \n \n {options}\n \n ) : null;\n\n return (\n \n \n {nodeSelect}\n \n );\n};\n\nNodeOrGlobalSelect.propTypes = {\n global: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.string,\n};\n\nNodeOrGlobalSelect.defaultProps = {\n global: false,\n node: undefined,\n};\n\nexport default NodeOrGlobalSelect;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { BootstrapModalForm, Input } from 'components/bootstrap';\nimport StoreProvider from 'injection/StoreProvider';\n\nconst InputStaticFieldsStore = StoreProvider.getStore('InputStaticFields');\n\nclass StaticFieldForm extends React.Component {\n static propTypes = {\n input: PropTypes.object.isRequired,\n };\n\n open = () => {\n this.modal.open();\n };\n\n _addStaticField = () => {\n const fieldName = this.fieldName.getValue();\n const fieldValue = this.fieldValue.getValue();\n\n InputStaticFieldsStore.create(this.props.input, fieldName, fieldValue).then(() => this.modal.close());\n };\n\n render() {\n return (\n { this.modal = modal; }}\n title=\"Add static field\"\n submitButtonText=\"Add field\"\n onSubmitForm={this._addStaticField}>\n Define a static field that is added to every message that comes in via this input. The field is not\n overwritten If the message already has that key. Key must only contain alphanumeric characters or\n underscores and not be a reserved field.\n
\n { this.fieldName = fieldName; }}\n type=\"text\"\n id=\"field-name\"\n label=\"Field name\"\n className=\"validatable\"\n data-validate=\"alphanum_underscore\"\n required\n autoFocus />\n { this.fieldValue = fieldValue; }} type=\"text\" id=\"field-value\" label=\"Field value\" required />\n \n );\n }\n}\n\nexport default StaticFieldForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport moment from 'moment';\nimport naturalSort from 'javascript-natural-sort';\n\n// sortOrder: \"asc\"|\"desc\"\nexport function sortByDate(d1, d2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n const d1Time = moment(d1);\n const d2Time = moment(d2);\n\n if (effectiveSortOrder === 'asc') {\n return (d1Time.isBefore(d2Time) ? -1 : d2Time.isBefore(d1Time) ? 1 : 0);\n }\n\n return (d2Time.isBefore(d1Time) ? -1 : d1Time.isBefore(d2Time) ? 1 : 0);\n}\n\nexport function naturalSortIgnoreCase(s1, s2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n\n return (effectiveSortOrder === 'asc' ? naturalSort(s1.toLowerCase(), s2.toLowerCase()) : naturalSort(s2.toLowerCase(), s1.toLowerCase()));\n}\n"],"sourceRoot":""}