{"version":3,"sources":["AppBoot.js","Stores/AlertStore.js","Components/Labels/StaticLabel/index.js","Components/LabelSetList/index.js","Common/Query.js","Components/TooltipWrapper/index.js","Stores/SilenceFormStore.js","Stores/Settings.js","Common/Colors.js","Common/Device.js","Components/Animations/NavBarSlide/index.js","Components/Animations/MountModal/index.js","Components/Modal/index.js","Components/OverviewModal/index.js","Components/MainModal/index.js","Components/SilenceModal/index.js","Components/NavBar/FetchIndicator/index.js","Components/Labels/FilterInputLabel/index.js","Components/NavBar/FilterInput/Constants.js","Components/Animations/DropdownSlide/index.js","Components/Labels/HistoryLabel/index.js","Components/NavBar/FilterInput/History.js","Components/NavBar/FilterInput/index.js","Components/NavBar/index.js","Components/Animations/MountFade/index.js","Components/Labels/FilteringLabel/index.js","Components/Labels/FilteringCounterBadge/index.js","Components/FetchPauser/index.js","Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.js","Components/Grid/AlertGrid/AlertGroup/GroupHeader/index.js","Components/Grid/AlertGrid/AlertGroup/Annotation/index.js","Components/Grid/AlertGrid/AlertGroup/Silence/DeleteSilence.js","Components/Grid/AlertGrid/AlertGroup/Silence/index.js","Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.js","Components/Grid/AlertGrid/AlertGroup/Alert/index.js","Components/Grid/AlertGrid/AlertGroup/GroupFooter/index.js","Components/Grid/AlertGrid/AlertGroup/index.js","Components/Grid/AlertGrid/GridSize.js","Components/Grid/AlertGrid/index.js","Components/Grid/FatalError/index.js","Components/Grid/UpstreamError/index.js","Components/Grid/UpgradeNeeded/index.js","Components/Grid/index.js","Components/Fetcher/index.js","Components/FaviconBadge/index.js","ErrorBoundary.js","App.js","index.js","Components/Labels/BaseLabel/index.js","Models/API.js"],"names":["Buffer","__webpack_require__","d","__webpack_exports__","SettingsElement","SetupSentry","ParseDefaultFilters","_sentry_browser__WEBPACK_IMPORTED_MODULE_0__","document","getElementById","settingsElement","dataset","sentryDsn","version","Sentry","dsn","release","err","console","error","defaultFilters","defaultFiltersBase64","decoded","from","toString","json","JSON","parse","Array","isArray","QueryStringEncodeOptions","encodeValuesOnly","indices","FormatAlertsQ","filters","qs","stringify","q","FormatAPIFilterQuery","Object","assign","DecodeLocationSearch","window","location","search","params","FormatBackendURI","path","uri","process","REACT_APP_BACKEND_URI","concat","searchString","defaultsUsed","parsed","split","undefined","filter","v","UpdateLocationSearch","newParams","baseURLWithoutSearch","href","newSearch","history","pushState","AlertStoreStatuses","freeze","Idle","Symbol","Fetching","Processing","Failure","NewUnappliedFilter","raw","applied","isValid","hits","name","matcher","value","AlertStore","initialFilters","_this","this","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__","observable","values","addFilter","f","length","push","map","removeFilter","replaceFilter","oldRaw","newRaw","index","findIndex","e","setFilters","raws","action","bound","data","colors","counters","groups","silences","upstreams","instances","clusters","getAlertmanagerByName","find","am","getColorData","info","totalAlerts","upgradeNeeded","settings","staticColorLabels","annotationsDefaultHidden","annotationsHidden","annotationsVisible","sorting","grid","order","reverse","label","valueMapping","silenceForm","author","strip","labels","status","paused","setIdle","setFetching","setProcessing","setFailure","pause","resume","fetch","alertsURI","credentials","then","result","parseAPIResponse","catch","trace","handleFetchError","message","fetchWithThrottle","throttle","queryFilters","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__","Set","slice","sort","responseFilters","m","text","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_loop","storedIndex","_iterator","iterator","next","done","return","updates","_i","_arr","key","equal","keys","_i2","_Object$keys","hash","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","k","_i3","_arr2","i","StaticLabel","inject","observer","_BaseLabel","FilteringLabel","classCallCheck","possibleConstructorReturn","getPrototypeOf","apply","arguments","inherits","createClass","_this$props","props","cs","getClassAndStyle","react_default","a","createElement","className","style","BaseLabel","GroupListToUniqueLabelsList","alerts","group","alert","alertLabels","shared","LabelSetList","_Component","_getPrototypeOf2","_len","args","_key","call","maxPerPage","pagination","activePage","onPageChange","pageNumber","alertStore","labelsList","entries","_ref","_ref2","slicedToArray","Pagination_default","itemsCountPerPage","totalItemsCount","pageRangeDisplayed","onChange","hideFirstLastPages","innerClass","itemClass","linkClass","prevPageText","index_es","icon","faChevronLeft","nextPageText","faChevronRight","Component","QueryOperators","StaticLabels","FormatQuery","Equal","NotEqual","Regex","AlertName","AlertManager","Receiver","State","SilenceID","operator","TooltipWrapper","children","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_1___default","react_tippy__WEBPACK_IMPORTED_MODULE_2__","delay","size","touchHold","display","maxWidth","NewEmptyMatcher","id","uniqueId","suggestions","names","isRegex","MatcherValueToObject","AlertmanagerClustersToOption","clusterDict","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_3__","clusterMembers","join","SilenceFormStage","UserInput","Preview","Submit","SilenceFormStore","toggle","visible","hide","show","currentStage","wasValidated","silenceID","alertmanagers","matchers","startsAt","moment","endsAt","add","comment","resetStartEnd","resetProgress","resetSilenceID","setStageSubmit","addEmptyMatcher","deleteMatcher","fillMatchersFromGroup","stripLabels","_Object$entries","_ref7","_ref4","includes","allAlerts","_Object$entries3","_ref10","_ref9","_Object$entries2","_ref11","_ref6","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__","fillFormFromSilence","alertmanager","silence","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__","cluster","createdBy","verifyStarEnd","now","second","isBefore","isSameOrBefore","incStart","minutes","decStart","subtract","incEnd","decEnd","toAlertmanagerPayload","payload","millisecond","toISOString","toDuration","days","diff","hours","computed","SavedFilters","config","localStored","present","save","newFilters","clear","FetchConfig","interval","setInterval","newInterval","_this2","AlertGroupConfig","options","expanded","collapsedOnMobile","collapsed","defaultRenderCount","defaultCollapseState","colorTitleBar","update","_ref3","_home_travis_gopath_src_github_com_prymitive_karma_ui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","val","_this3","SilenceFormConfig","saveAuthor","newAuthor","_this4","GridConfig","default","disabled","sortOrder","groupWidth","FilterBarConfig","autohide","Settings","savedFilters","fetchConfig","alertGroupConfig","gridConfig","silenceFormConfig","filterBarConfig","DefaultLabelClassMap","StaticColorLabelClassMap","AlertNameLabelClassMap","BorderClassMap","BackgroundClassMap","StateLabelClassMap","badge","btn","active","suppressed","unprocessed","IsMobile","innerWidth","NavBarSlide","duration","objectWithoutProperties","CSSTransition","classNames","timeout","appear","enter","exit","MountModal","MountModalBackdrop","in","Modal","_temp","_class","toggleBodyClass","isOpen","body","classList","HotKeysRef","current","focus","disableBodyScroll","modalRef","clearAllBodyScrollLocks","lastIsOpen","set","React","createRef","box","get","toggleOpen","ReactDOM","createPortal","Fragment","MountModal_MountModal","unmountOnExit","react_hotkeys_index_es","innerRef","keyMap","CLOSE","handlers","ref","role","MountModal_MountModalBackdrop","defaultProps","OverviewModalContent","lazy","bind","module","OverviewModal","title","Flash_default","spy","onClick","Modal_Modal","Suspense","fallback","react_fontawesome_index_es","faSpinner","spin","mobx_react_module","onHide","isVisible","MainModalContent","Promise","all","MainModal","settingsStore","faCog","SilenceModalContent","SilenceModal","silenceFormStore","faBellSlash","onExited","FetchIcon","color","opacity","FetchIndicator","FetchIndicator_FetchIcon","faPauseCircle","faCircleNotch","FilterInputLabel","FilterInputLabel_temp","FilterInputLabel_class","_this$props2","showCounter","rootClasses","toConsumableArray","baseClassNames","type","faExclamationCircle","lib","defaultValue","propName","change","classEditing","afterStart","afterFinish","faTimes","propTypes","PropTypes","instanceOf","isRequired","shape","string","bool","number","AutosuggestTheme","container","suggestionsContainer","suggestionsList","suggestion","suggestionFocused","suggestionHighlighted","DropdownSlide","HistoryLabel","HistoryLabel_temp","HistoryLabel_class","defaultHistory","ReduceFilter","ActionButton","afterClick","HistoryMenu","onClickOutside","popperPlacement","popperRef","popperStyle","onClear","data-placement","faHistory","historyFilters","HistoryLabel_HistoryLabel","History_ActionButton","faSave","faUndoAlt","faTrash","History","maxSize","collapse","appendToHistory","validAppliedFilters","filtersJSON","storedFilters","toJS","newHistory","clearHistory","handleClickOutside","event","lib_esm","data-filters","data-toggle","aria-haspopup","aria-expanded","faCaretDown","DropdownSlide_DropdownSlide","modifiers","arrow","enabled","placement","outsideClickIgnoreClass","FilterInput","inputStore","suggestionsFetch","storeInputReference","newValue","method","preventDefault","onSubmit","onSuggestionsClearRequested","onSuggestionsFetchRequested","debounce","onSuggestionSelected","onInputClick","inputReference","target","input","renderSuggestion","query","isHighlighted","highlighter_default","matchElement","matchClass","renderInputComponent","inputProps","placeholder","faSearch","FilterInputLabel_FilterInputLabel","react_autosuggest_dist_default","shouldRenderSuggestions","trim","getSuggestionValue","theme","History_History","NavBar","elementSize","width","height","setSize","updateBodyPaddingTop","paddingTop","activityStatus","idle","onShow","onResize","idleTimer","setActive","activityStatusReaction","reaction","reset","fireImmediately","flexClass","isMobile","onActive","onIdle","NavBarSlide_NavBarSlide","onEntering","esm","handleHeight","OverviewModal_OverviewModal","FetchIndicator_FetchIndicator","SilenceModal_SilenceModal","MainModal_MainModal","FilterInput_FilterInput","MountFade","handleClick","FilteringCounterBadge","FilteringCounterBadge_temp","FilteringCounterBadge_class","counter","themed","FetchPauser","MenuContent","groupFilters","receiver","groupLink","FetchPauser_FetchPauser","copy","faShareSquare","onSilenceClick","GroupMenu","setIsMenuOpen","faEllipsisV","offset","GroupHeader","collapseStore","themedCounters","GroupMenu_GroupMenu","minWidth","FilteringLabel_FilteringLabel","FilteringCounterBadge_FilteringCounterBadge","stateCount","faChevronUp","faChevronDown","RenderNonLinkAnnotation","afterUpdate","faSearchMinus","Linkify_default","properties","rel","faSearchPlus","RenderLinkAnnotation","faExternalLinkAlt","ProgressMessage","ErrorMessage","SuccessMessage","faCheckCircle","DeleteSilenceModalContent","previewState","setError","groupsToUniqueLabels","deleteState","setDone","parseAlertmanagerResponse","response","onFetchPreview","onDelete","isOpenAPI","semver","satisfies","publicURI","ok","isDone","DeleteSilence_ErrorMessage","DeleteSilence_SuccessMessage","DeleteSilence_ProgressMessage","DeleteSilence","_Component2","_getPrototypeOf3","_len2","_key2","_this$props3","DeleteSilence_DeleteSilenceModalContent","SilenceComment","jiraURL","Truncate","lines","onTruncate","SilenceExpiryBadgeWithProgress","progressClass","progress","dist_default","fromNow","aria-valuenow","aria-valuemin","aria-valuemax","SilenceDetails","onEditSilence","expiresClass","expiresLabel","Annotation_RenderLinkAnnotation","faCalendarCheck","faCalendarTimes","faEdit","DeleteSilence_DeleteSilence","faFilter","FallbackSilenceDesciption","alertmanagerName","Silence","calculate","durationDone","unix","durationTotal","durationPercent","Math","floor","getAlertmanager","alertmanagerState","getSilence","amSilences","recalculateProgress","progressTimer","clearInterval","Silence_FallbackSilenceDesciption","Silence_SilenceComment","Silence_SilenceExpiryBadgeWithProgress","Silence_SilenceDetails","source","AlertMenu","uniqueClass","AlertMenu_MenuContent","Alert","showAlertmanagers","showReceiver","state","silencedBy","annotations","isLink","Annotation_RenderNonLinkAnnotation","AlertMenu_AlertMenu","inhibitedBy","reduce","sum","x","faVolumeMute","clusterSilences","Silence_Silence","GroupFooter","LoadButton","tooltip","AlertGroup","loadMore","step","getStepSize","renderConfig","alertsToRender","min","loadLess","max","isMenuOpen","totalSize","round","footerAlertmanagers","showAlertmanagersInFooter","usedAMs","every","listOfAMs","AllAlertsAreUsingSameAlertmanagers","cardBackgroundClass","stateList","_ref5","pop","extraStyle","zIndex","MountFade_MountFade","objectSpread","GroupHeader_GroupHeader","Alert_Alert","AlertGroup_LoadButton","faMinus","faPlus","GroupFooter_GroupFooter","GridSizesConfig","canvasWidth","baseWidth","generatedSizes","mq","columns","gutter","GetGridElementWidth","gs","Number","parseInt","GetColumnsCount","getGroupStartsAt","g","valueOf","getLabelValue","sortLabel","mappedValue","labelValue","compareByTimestamp","b","ast","bst","AlertGrid","masonryComponentReference","storeMasonryRef","masonryRepack","forcePack","initial","groupsToRender","loadMoreStep","compare","useDefaults","sortReverse","reverseSort","av","bv","viewport","clientWidth","gridSizesConfig","fontWeight","FontFaceObserver","weight","load","handleWidth","react_masonry_infinite_lib_default","position","pack","sizes","hasMore","threshold","loader","AlertGroup_AlertGroup","FatalError","UpstreamError","UpgradeNeeded","reloadApp","reload","timer","setTimeout","clearTimeout","newVersion","faRocket","Grid","FatalError_FatalError","UpgradeNeeded_UpgradeNeeded","total","healthy","upstream","UpstreamError_UpstreamError","AlertGrid_AlertGrid","Fetcher","lastTick","time","fetchIfIdle","nextTick","pastDeadline","isSameOrAfter","updateInProgress","timerTick","requestAnimationFrame","data-interval","FaviconBadge","updateBadge","favicon","Favico","animation","bgColor","textColor","fontStyle","data-total-alerts","data-status-error","InternalError","secondsLeft","ErrorBoundary","reloadSeconds","setState","cachedError","errorInfo","scope","forEach","setExtra","ErrorBoundary_InternalError","App","p","ErrorBoundary_ErrorBoundary","FaviconBadge_FaviconBadge","NavBar_NavBar","Grid_Grid","Fetcher_Fetcher","Moment","startPooledTimer","render","App_App","altKey","extraClass","baseClass","elementType","colorClassNames","c","background","red","green","blue","alpha","brightness","prop_types__WEBPACK_IMPORTED_MODULE_0__","prop_types__WEBPACK_IMPORTED_MODULE_0___default","n","AlertState","oneOf","Annotation","exact","APIAlertAlertmanagerState","arrayOf","APIAlert","object","APISilenceMatcher","alertmanagerCount","objectOf","createdAt","jiraID"],"mappings":"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","file":"static/js/main.fbe67e7e.chunk.js","sourcesContent":["// helpers used to bootstrap App instance and environment for it\n\nimport * as Sentry from \"@sentry/browser\";\n\nconst SettingsElement = () => document.getElementById(\"settings\");\n\nconst SetupSentry = settingsElement => {\n if (\n settingsElement !== null &&\n settingsElement.dataset.sentryDsn &&\n settingsElement.dataset.sentryDsn !== \"{{ .SentryDSN }}\"\n ) {\n let version = \"unknown\";\n if (\n settingsElement.dataset.version &&\n settingsElement.dataset.version !== \"{{ .Version }}\"\n ) {\n version = settingsElement.dataset.version;\n }\n\n try {\n Sentry.init({\n dsn: settingsElement.dataset.sentryDsn,\n release: version\n });\n } catch (err) {\n console.error(\"Sentry config failed: \" + err);\n }\n }\n};\n\nconst ParseDefaultFilters = settingsElement => {\n let defaultFilters = [];\n if (\n settingsElement !== null &&\n settingsElement.dataset.defaultFiltersBase64 &&\n settingsElement.dataset.defaultFiltersBase64 !== \"{{ .DefaultFilter }}\"\n ) {\n // decode from base64 to a string\n const decoded = Buffer.from(\n settingsElement.dataset.defaultFiltersBase64,\n \"base64\"\n ).toString(\"ascii\");\n // parse decoded string as JSON\n const json = JSON.parse(decoded);\n // if we got an array then use it as default filters\n if (Array.isArray(json)) {\n defaultFilters = json;\n }\n }\n return defaultFilters;\n};\n\nexport { SettingsElement, SetupSentry, ParseDefaultFilters };\n","import { observable, action } from \"mobx\";\n\nimport { throttle } from \"lodash\";\n\nimport equal from \"fast-deep-equal\";\n\nimport qs from \"qs\";\n\nconst QueryStringEncodeOptions = {\n encodeValuesOnly: true, // don't encode q[]\n indices: false // go-gin doesn't support parsing q[0]=foo&q[1]=bar\n};\n\nfunction FormatAlertsQ(filters) {\n return qs.stringify({ q: filters }, QueryStringEncodeOptions);\n}\n\n// generate URL for the UI with a set of filters\nfunction FormatAPIFilterQuery(filters) {\n return qs.stringify(\n Object.assign(DecodeLocationSearch(window.location.search).params, {\n q: filters\n }),\n QueryStringEncodeOptions\n );\n}\n\n// format URI for react UI -> Go backend requests\nfunction FormatBackendURI(path) {\n const uri = process.env.REACT_APP_BACKEND_URI || \".\";\n return `${uri}/${path}`;\n}\n\n// takes the '?foo=bar&foo=baz' part of http://example.com?foo=bar&foo=baz\n// and decodes it into a dict with some extra metadata\nfunction DecodeLocationSearch(searchString) {\n let defaultsUsed = true;\n let params = { q: [] };\n\n if (searchString !== \"\") {\n const parsed = qs.parse(searchString.split(\"?\")[1]);\n params = Object.assign(params, parsed);\n\n if (parsed.q !== undefined) {\n defaultsUsed = false;\n if (parsed.q === \"\") {\n params.q = [];\n } else if (Array.isArray(parsed.q)) {\n // filter out empty strings, so 'q=' doesn't end up [\"\"] but rather []\n params.q = parsed.q.filter(v => v !== \"\");\n } else {\n params.q = [parsed.q];\n }\n }\n }\n\n return { params: params, defaultsUsed: defaultsUsed };\n}\n\nfunction UpdateLocationSearch(newParams) {\n const baseURLWithoutSearch = window.location.href.split(\"?\")[0];\n const newSearch = FormatAPIFilterQuery(newParams.q || []);\n if (newSearch !== \"\") {\n window.history.pushState(\n null,\n null,\n `${baseURLWithoutSearch}?${newSearch}`\n );\n } else {\n window.history.pushState(null, null, baseURLWithoutSearch);\n }\n}\n\nconst AlertStoreStatuses = Object.freeze({\n Idle: Symbol(\"idle\"),\n Fetching: Symbol(\"fetching\"),\n Processing: Symbol(\"processing\"),\n Failure: Symbol(\"failure\")\n});\n\nfunction NewUnappliedFilter(raw) {\n return {\n applied: false,\n isValid: true,\n raw: raw,\n hits: 0,\n name: \"\",\n matcher: \"\",\n value: \"\"\n };\n}\n\nclass AlertStore {\n filters = observable(\n {\n values: [],\n addFilter(raw) {\n if (this.values.filter(f => f.raw === raw).length === 0) {\n this.values.push(NewUnappliedFilter(raw));\n UpdateLocationSearch({ q: this.values.map(f => f.raw) });\n }\n },\n removeFilter(raw) {\n if (this.values.filter(f => f.raw === raw).length > 0) {\n this.values = this.values.filter(f => f.raw !== raw);\n UpdateLocationSearch({ q: this.values.map(f => f.raw) });\n }\n },\n replaceFilter(oldRaw, newRaw) {\n const index = this.values.findIndex(e => e.raw === oldRaw);\n if (index >= 0) {\n // first check if we would create a duplicated filter\n if (this.values.findIndex(e => e.raw === newRaw) >= 0) {\n // we already have newRaw, simply drop oldRaw\n this.removeFilter(oldRaw);\n } else {\n // no dups, continue with a swap\n this.values[index] = NewUnappliedFilter(newRaw);\n UpdateLocationSearch({ q: this.values.map(f => f.raw) });\n }\n }\n },\n setFilters(raws) {\n this.values = raws.map(raw => NewUnappliedFilter(raw));\n UpdateLocationSearch({ q: this.values.map(f => f.raw) });\n }\n },\n {\n addFilter: action.bound,\n removeFilter: action.bound,\n replaceFilter: action.bound,\n setFilters: action.bound\n },\n { name: \"API Filters\" }\n );\n\n data = observable(\n {\n colors: {},\n counters: [],\n groups: {},\n silences: {},\n upstreams: { instances: [], clusters: {} },\n getAlertmanagerByName(name) {\n return this.upstreams.instances.find(am => am.name === name);\n },\n getColorData(name, value) {\n if (this.colors[name] !== undefined) {\n return this.colors[name][value];\n }\n }\n },\n {},\n { name: \"API Response data\" }\n );\n\n info = observable(\n {\n totalAlerts: 0,\n version: \"unknown\",\n upgradeNeeded: false\n },\n {},\n { name: \"API response info\" }\n );\n\n settings = observable(\n {\n values: {\n staticColorLabels: [],\n annotationsDefaultHidden: false,\n annotationsHidden: [],\n annotationsVisible: [],\n sorting: {\n grid: {\n order: \"startsAt\",\n reverse: false,\n label: \"alertname\"\n },\n valueMapping: {}\n },\n silenceForm: {\n author: \"\",\n strip: {\n labels: []\n }\n }\n }\n },\n {},\n {\n name: \"Global settings\"\n }\n );\n\n status = observable(\n {\n value: AlertStoreStatuses.Idle,\n error: null,\n paused: false,\n setIdle() {\n this.value = AlertStoreStatuses.Idle;\n this.error = null;\n },\n setFetching() {\n this.value = AlertStoreStatuses.Fetching;\n this.error = null;\n },\n setProcessing() {\n this.value = AlertStoreStatuses.Processing;\n this.error = null;\n },\n setFailure(err) {\n this.value = AlertStoreStatuses.Failure;\n this.error = err;\n },\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n },\n {\n setIdle: action,\n setFetching: action,\n setProcessing: action,\n setFailure: action,\n pause: action.bound,\n resume: action.bound\n },\n { name: \"Store status\" }\n );\n\n constructor(initialFilters) {\n this.filters.setFilters(initialFilters);\n }\n\n fetch = action(() => {\n this.status.setFetching();\n\n const alertsURI =\n FormatBackendURI(\"alerts.json?\") +\n FormatAPIFilterQuery(this.filters.values.map(f => f.raw));\n\n return fetch(alertsURI, { credentials: \"include\" })\n .then(result => {\n this.status.setProcessing();\n return result.json();\n })\n .then(result => {\n return this.parseAPIResponse(result);\n })\n .catch(err => {\n console.trace(err);\n return this.handleFetchError(\n `Request for ${alertsURI} failed with \"${err.message}\"`\n );\n });\n });\n\n fetchWithThrottle = throttle(this.fetch, 300);\n\n parseAPIResponse = action(result => {\n if (result.error) {\n this.handleFetchError(result.error);\n return;\n }\n\n const queryFilters = [\n ...new Set(\n this.filters.values\n .map(f => f.raw)\n .slice()\n .sort()\n )\n ];\n const responseFilters = [\n ...new Set(result.filters.map(m => m.text).sort())\n ];\n if (JSON.stringify(queryFilters) !== JSON.stringify(responseFilters)) {\n console.info(\n `Got response with filters '${responseFilters}' while expecting results for '${queryFilters}', ignoring`\n );\n return;\n }\n\n for (const filter of result.filters) {\n const storedIndex = this.filters.values.findIndex(\n f => f.raw === filter.text\n );\n this.filters.values[storedIndex] = Object.assign(\n this.filters.values[storedIndex],\n {\n applied: true,\n isValid: filter.isValid,\n hits: filter.hits,\n name: filter.name,\n matcher: filter.matcher,\n value: filter.value\n }\n );\n }\n\n let updates = {};\n // update data dicts if they changed\n for (const key of [\"colors\", \"counters\", \"silences\", \"upstreams\"]) {\n if (!equal(this.data[key], result[key])) {\n updates[key] = result[key];\n }\n }\n if (Object.keys(updates).length > 0) {\n this.data = Object.assign(this.data, updates);\n }\n\n // update groups, it can be huge so we have custom logic with cheaper\n // comparision logic running per group using content hashes from the API\n // response\n for (const key of Object.keys(result.groups)) {\n // set/update each group if:\n // * it's not yet stored in AlertStore\n // * it's stored but hash is different than in the API response\n if (\n !(key in this.data.groups) ||\n (key in this.data.groups &&\n result.groups[key].hash !== this.data.groups[key].hash)\n ) {\n this.data.groups[key] = result.groups[key];\n }\n }\n for (const key of Object.keys(this.data.groups).filter(\n k => !(k in result.groups)\n )) {\n delete this.data.groups[key];\n }\n\n // before storing new version check if we need to reload\n if (\n this.info.version !== \"unknown\" &&\n this.info.version !== result.version\n ) {\n this.info.upgradeNeeded = true;\n }\n // update extra root level keys that are stored under 'info'\n for (const key of [\"totalAlerts\", \"version\"]) {\n if (this.info[key] !== result[key]) {\n this.info[key] = result[key];\n }\n }\n\n // settings exported via API\n if (!equal(this.settings.values, result.settings)) {\n this.settings.values = result.settings;\n }\n\n this.status.setIdle();\n });\n\n handleFetchError = action(err => {\n this.status.setFailure(err);\n\n // reset alert counter since we won't be rendering any alerts\n this.info.totalAlerts = 0;\n\n // all unapplied filters should be marked applied to reset progress indicator\n for (let i = 0; i < this.filters.values.length; i++) {\n this.filters.values[i].applied = true;\n }\n\n return { error: err };\n });\n}\n\nexport {\n AlertStore,\n AlertStoreStatuses,\n FormatBackendURI,\n FormatAPIFilterQuery,\n FormatAlertsQ,\n DecodeLocationSearch,\n UpdateLocationSearch,\n NewUnappliedFilter\n};\n","import React from \"react\";\n\nimport { inject, observer } from \"mobx-react\";\n\nimport { BaseLabel } from \"Components/Labels/BaseLabel\";\n\n// Renders a static label element, no click actions, no hover\nconst StaticLabel = inject(\"alertStore\")(\n observer(\n class FilteringLabel extends BaseLabel {\n render() {\n const { name, value } = this.props;\n\n let cs = this.getClassAndStyle(name, value);\n\n return (\n \n {name}:{\" \"}\n {value}\n \n );\n }\n }\n )\n);\n\nexport { StaticLabel };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\nimport { observable, action } from \"mobx\";\n\nimport hash from \"object-hash\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faChevronLeft } from \"@fortawesome/free-solid-svg-icons/faChevronLeft\";\nimport { faChevronRight } from \"@fortawesome/free-solid-svg-icons/faChevronRight\";\n\nimport Pagination from \"react-js-pagination\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { StaticLabel } from \"Components/Labels/StaticLabel\";\n\n// take a list of groups and outputs a list of label sets, this ignores\n// the receiver, so we'll end up with only unique alerts\nconst GroupListToUniqueLabelsList = groups => {\n const alerts = {};\n for (const group of groups) {\n for (const alert of group.alerts) {\n const alertLabels = Object.assign(\n {},\n group.labels,\n group.shared.labels,\n alert.labels\n );\n const alertHash = hash(alertLabels);\n alerts[alertHash] = alertLabels;\n }\n }\n return Object.values(alerts);\n};\n\nconst LabelSetList = observer(\n class LabelSetList extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n labelsList: PropTypes.arrayOf(PropTypes.object).isRequired\n };\n\n maxPerPage = 10;\n\n pagination = observable(\n {\n activePage: 1,\n onPageChange(pageNumber) {\n this.activePage = pageNumber;\n }\n },\n {\n onPageChange: action.bound\n }\n );\n\n render() {\n const { alertStore, labelsList } = this.props;\n\n return labelsList.length > 0 ? (\n
\n

Affected alerts

\n
\n \n
\n {labelsList.length > this.maxPerPage ? (\n
\n }\n nextPageText={}\n />\n
\n ) : null}\n
\n ) : (\n

No alerts matched

\n );\n }\n }\n);\n\nexport { LabelSetList, GroupListToUniqueLabelsList };\n","const QueryOperators = Object.freeze({\n Equal: \"=\",\n NotEqual: \"!=\",\n Regex: \"=~\"\n});\n\nconst StaticLabels = Object.freeze({\n AlertName: \"alertname\",\n AlertManager: \"@alertmanager\",\n Receiver: \"@receiver\",\n State: \"@state\",\n SilenceID: \"@silence_id\"\n});\n\nfunction FormatQuery(name, operator, value) {\n return `${name}${operator}${value}`;\n}\n\nexport { QueryOperators, StaticLabels, FormatQuery };\n","import React from \"react\";\n\nimport { Tooltip } from \"react-tippy\";\n\nimport \"react-tippy/dist/tippy.css\";\n\nconst TooltipWrapper = ({ children, ...props }) => (\n \n {children}\n \n);\n\nexport { TooltipWrapper };\n","import { observable, action, computed } from \"mobx\";\n\nimport uniqueId from \"lodash.uniqueid\";\n\nimport moment from \"moment\";\n\nconst NewEmptyMatcher = () => {\n return {\n id: uniqueId(),\n name: \"\",\n values: [],\n suggestions: {\n names: [],\n values: []\n },\n isRegex: false\n };\n};\n\nconst MatcherValueToObject = value => ({ label: value, value: value });\n\nconst AlertmanagerClustersToOption = clusterDict =>\n Object.entries(clusterDict).map(([clusterID, clusterMembers]) => ({\n label: clusterMembers.join(\" | \"),\n value: clusterMembers\n }));\n\nconst SilenceFormStage = Object.freeze({\n UserInput: \"form\",\n Preview: \"preview\",\n Submit: \"submit\"\n});\n\nclass SilenceFormStore {\n // this is used to store modal visibility toggle\n toggle = observable(\n {\n visible: false,\n toggle() {\n this.visible = !this.visible;\n },\n hide() {\n this.visible = false;\n },\n show() {\n this.visible = true;\n }\n },\n { toggle: action.bound, hide: action.bound, show: action.bound }\n );\n\n // form data is stored here, it's global (rather than attached to the form)\n // so it can be manipulated from other parts of the code\n // example: when user clicks a silence button on alert we should populate\n // this form from that alert so user can easily silence that alert\n data = observable(\n {\n currentStage: SilenceFormStage.UserInput,\n wasValidated: false,\n silenceID: null,\n alertmanagers: [],\n matchers: [],\n startsAt: moment(),\n endsAt: moment().add(1, \"hour\"),\n comment: \"\",\n author: \"\",\n\n get isValid() {\n if (this.alertmanagers.length === 0) return false;\n if (this.matchers.length === 0) return false;\n if (\n this.matchers.filter(\n m =>\n m.name === \"\" ||\n m.values.length === 0 ||\n m.values.filter(v => v === \"\").length > 0\n ).length > 0\n )\n return false;\n if (this.comment === \"\") return false;\n if (this.author === \"\") return false;\n return true;\n },\n\n resetStartEnd() {\n this.startsAt = moment();\n this.endsAt = moment().add(1, \"hour\");\n },\n\n resetProgress() {\n this.currentStage = SilenceFormStage.UserInput;\n this.wasValidated = false;\n },\n\n resetSilenceID() {\n this.silenceID = null;\n },\n\n setStageSubmit() {\n this.currentStage = SilenceFormStage.Submit;\n },\n\n // append a new empty matcher to the list\n addEmptyMatcher() {\n let m = NewEmptyMatcher();\n this.matchers.push(m);\n },\n\n deleteMatcher(id) {\n // only delete matchers if we have more than 1\n if (this.matchers.length > 1) {\n this.matchers = this.matchers.filter(m => m.id !== id);\n }\n },\n\n // if alerts argument is not passed all group alerts will be used\n fillMatchersFromGroup(group, stripLabels, alerts) {\n let matchers = [];\n\n // add matchers for all shared labels in this group\n for (const [key, value] of Object.entries(\n Object.assign({}, group.labels, group.shared.labels)\n )) {\n if (!stripLabels.includes(key)) {\n const matcher = NewEmptyMatcher();\n matcher.name = key;\n matcher.values = [MatcherValueToObject(value)];\n matchers.push(matcher);\n }\n }\n\n // add matchers for all unique labels in this group\n let labels = {};\n const allAlerts = alerts ? alerts : group.alerts;\n for (const alert of allAlerts) {\n for (const [key, value] of Object.entries(alert.labels)) {\n if (!stripLabels.includes(key)) {\n if (!labels[key]) {\n labels[key] = new Set();\n }\n labels[key].add(value);\n }\n }\n }\n for (const [key, values] of Object.entries(labels)) {\n matchers.push({\n id: uniqueId(),\n name: key,\n values: [...values]\n .sort()\n .map(value => MatcherValueToObject(value)),\n suggestions: {\n names: [],\n values: []\n },\n isRegex: values.size > 1\n });\n }\n\n this.matchers = matchers;\n // ensure that silenceID is nulled, since it's used to edit silences\n // and this is used to silence groups\n this.silenceID = null;\n },\n\n fillFormFromSilence(alertmanager, silence) {\n this.silenceID = silence.id;\n\n this.alertmanagers = AlertmanagerClustersToOption({\n [alertmanager.cluster]: alertmanager.clusterMembers\n });\n\n const matchers = [];\n for (const m of silence.matchers) {\n const matcher = NewEmptyMatcher();\n matcher.name = m.name;\n matcher.values = [MatcherValueToObject(m.value)];\n matcher.isRegex = m.isRegex;\n matchers.push(matcher);\n }\n this.matchers = matchers;\n\n this.startsAt = moment(silence.startsAt);\n this.endsAt = moment(silence.endsAt);\n this.comment = silence.comment;\n this.author = silence.createdBy;\n },\n\n verifyStarEnd() {\n const now = moment().second(0);\n if (this.startsAt.isBefore(now)) {\n this.startsAt = now;\n }\n\n if (this.endsAt.isSameOrBefore(this.startsAt)) {\n this.endsAt = moment(this.startsAt).add(1, \"minutes\");\n }\n },\n incStart(minutes) {\n this.startsAt = moment(this.startsAt).add(minutes, \"minutes\");\n this.verifyStarEnd();\n },\n decStart(minutes) {\n this.startsAt = moment(this.startsAt).subtract(minutes, \"minutes\");\n this.verifyStarEnd();\n },\n\n incEnd(minutes) {\n this.endsAt = moment(this.endsAt).add(minutes, \"minutes\");\n this.verifyStarEnd();\n },\n decEnd(minutes) {\n this.endsAt = moment(this.endsAt).subtract(minutes, \"minutes\");\n this.verifyStarEnd();\n },\n\n get toAlertmanagerPayload() {\n const payload = {\n matchers: this.matchers.map(m => ({\n name: m.name,\n value:\n m.values.length > 1\n ? `(${m.values.map(v => v.value).join(\"|\")})`\n : m.values.length === 1\n ? m.values[0].value\n : \"\",\n isRegex: m.isRegex\n })),\n startsAt: this.startsAt\n .second(0)\n .millisecond(0)\n .toISOString(),\n endsAt: this.endsAt\n .second(0)\n .millisecond(0)\n .toISOString(),\n createdBy: this.author,\n comment: this.comment\n };\n if (this.silenceID !== null) {\n payload.id = this.silenceID;\n }\n return payload;\n },\n\n get toDuration() {\n const data = {\n days: this.endsAt.diff(this.startsAt, \"days\"),\n hours: this.endsAt.diff(this.startsAt, \"hours\") % 24,\n minutes: this.endsAt.diff(this.startsAt, \"minutes\") % 60\n };\n return data;\n }\n },\n {\n resetStartEnd: action.bound,\n resetProgress: action.bound,\n resetSilenceID: action.bound,\n setStageSubmit: action.bound,\n addEmptyMatcher: action.bound,\n deleteMatcher: action.bound,\n fillMatchersFromGroup: action.bound,\n fillFormFromSilence: action.bound,\n verifyStarEnd: action.bound,\n incStart: action.bound,\n decStart: action.bound,\n incEnd: action.bound,\n decEnd: action.bound,\n isValid: computed,\n toAlertmanagerPayload: computed,\n toDuration: computed\n },\n { name: \"Silence form store\" }\n );\n}\n\nexport {\n SilenceFormStore,\n SilenceFormStage,\n NewEmptyMatcher,\n MatcherValueToObject,\n AlertmanagerClustersToOption\n};\n","import { action } from \"mobx\";\nimport { localStored } from \"mobx-stored\";\n\nclass SavedFilters {\n config = localStored(\n \"savedFilters\",\n {\n filters: [],\n present: false\n },\n {\n delay: 100\n }\n );\n\n save = action(newFilters => {\n this.config.filters = newFilters;\n this.config.present = true;\n });\n\n clear = action(() => {\n this.config.filters = [];\n this.config.present = false;\n });\n}\n\nclass FetchConfig {\n config = localStored(\"fetchConfig\", { interval: 30 }, { delay: 100 });\n\n setInterval = action(newInterval => {\n this.config.interval = newInterval;\n });\n}\n\nclass AlertGroupConfig {\n options = Object.freeze({\n expanded: { label: \"Always expanded\", value: \"expanded\" },\n collapsedOnMobile: {\n label: \"Collapse on mobile\",\n value: \"collapsedOnMobile\"\n },\n collapsed: { label: \"Always collapsed\", value: \"collapsed\" }\n });\n config = localStored(\n \"alertGroupConfig\",\n {\n defaultRenderCount: 5,\n defaultCollapseState: this.options.collapsedOnMobile.value,\n colorTitleBar: false\n },\n { delay: 100 }\n );\n\n update = action(data => {\n for (const [key, val] of Object.entries(data)) {\n this.config[key] = val;\n }\n });\n}\n\nclass SilenceFormConfig {\n config = localStored(\"silenceFormConfig\", { author: \"\" }, { delay: 100 });\n\n saveAuthor = action(newAuthor => {\n this.config.author = newAuthor;\n });\n}\n\nclass GridConfig {\n options = Object.freeze({\n default: { label: \"Use defaults from karma config file\", value: \"default\" },\n disabled: { label: \"No sorting\", value: \"disabled\" },\n startsAt: { label: \"Sort by alert timestamp\", value: \"startsAt\" },\n label: { label: \"Sort by alert label\", value: \"label\" }\n });\n config = localStored(\n \"alertGridConfig\",\n {\n sortOrder: this.options.default.value,\n groupWidth: 420\n },\n { delay: 100 }\n );\n}\n\nclass FilterBarConfig {\n config = localStored(\n \"filterBarConfig\",\n {\n autohide: true\n },\n {\n delay: 100\n }\n );\n}\n\nclass Settings {\n constructor() {\n this.savedFilters = new SavedFilters();\n this.fetchConfig = new FetchConfig();\n this.alertGroupConfig = new AlertGroupConfig();\n this.gridConfig = new GridConfig();\n this.silenceFormConfig = new SilenceFormConfig();\n this.filterBarConfig = new FilterBarConfig();\n }\n}\n\nexport { Settings };\n","// fallback class for labels\nconst DefaultLabelClassMap = Object.freeze({\n badge: \"badge-warning components-label-dark\",\n btn: \"btn-warning components-label-dark\"\n});\n\n// same but for borders\nconst BorderClassMap = Object.freeze({\n active: \"border-danger\",\n suppressed: \"border-success\",\n unprocessed: \"border-secondary\"\n});\n\nconst BackgroundClassMap = Object.freeze({\n active: \"bg-danger\",\n suppressed: \"bg-success\",\n unprocessed: \"bg-secondary\"\n});\n\nconst StaticColorLabelClassMap = Object.freeze({\n badge: \"badge-info components-label-dark\",\n btn: \"btn-info components-label-dark\"\n});\n\nconst AlertNameLabelClassMap = Object.freeze({\n badge: \"badge-dark components-label-dark\",\n btn: \"btn-dark components-label-dark\"\n});\n\nconst StateLabelClassMap = Object.freeze({\n active: \"danger\",\n suppressed: \"success\",\n unprocessed: \"secondary\"\n});\n\nexport {\n DefaultLabelClassMap,\n StaticColorLabelClassMap,\n AlertNameLabelClassMap,\n BorderClassMap,\n BackgroundClassMap,\n StateLabelClassMap\n};\n","function IsMobile() {\n return window.innerWidth < 768;\n}\n\nexport { IsMobile };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CSSTransition } from \"react-transition-group\";\n\nimport \"./index.css\";\n\nconst NavBarSlide = ({ children, duration, ...props }) => (\n \n {children}\n \n);\nNavBarSlide.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport { NavBarSlide };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CSSTransition } from \"react-transition-group\";\n\nimport \"./index.scss\";\n\nconst MountModal = ({ children, duration, ...props }) => (\n \n {children}\n \n);\nMountModal.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nconst MountModalBackdrop = ({ children, duration, ...props }) => (\n \n {children}\n \n);\nMountModalBackdrop.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport { MountModal, MountModalBackdrop };\n","import React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\nimport { observable } from \"mobx\";\n\nimport { disableBodyScroll, clearAllBodyScrollLocks } from \"body-scroll-lock\";\n\nimport { HotKeys } from \"react-hotkeys\";\n\nimport {\n MountModal,\n MountModalBackdrop\n} from \"Components/Animations/MountModal\";\n\nconst Modal = observer(\n class Modal extends Component {\n static propTypes = {\n size: PropTypes.oneOf([\"lg\", \"xl\"]),\n isOpen: PropTypes.bool.isRequired,\n toggleOpen: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired\n };\n static defaultProps = {\n size: \"lg\"\n };\n\n constructor(props) {\n super(props);\n this.modalRef = React.createRef();\n this.HotKeysRef = React.createRef();\n this.lastIsOpen = observable.box(false);\n }\n\n toggleBodyClass = isOpen => {\n document.body.classList.toggle(\"modal-open\", isOpen);\n if (isOpen) {\n this.HotKeysRef.current.focus();\n disableBodyScroll(this.modalRef.current);\n } else {\n clearAllBodyScrollLocks();\n }\n this.lastIsOpen.set(isOpen);\n };\n\n componentDidMount() {\n const { isOpen } = this.props;\n if (isOpen) {\n this.toggleBodyClass(isOpen);\n }\n }\n\n componentDidUpdate() {\n const { isOpen } = this.props;\n // we shouldn't update if modal is hidden and was hidden previously\n // which can happen when the button gets re-rendered\n if (this.lastIsOpen.get() === true || isOpen === true) {\n this.toggleBodyClass(isOpen);\n }\n }\n\n componentWillUnmount() {\n this.toggleBodyClass(false);\n }\n\n render() {\n const { size, isOpen, toggleOpen, children, ...props } = this.props;\n\n return ReactDOM.createPortal(\n \n \n \n
\n
\n
{children}
\n
\n
\n \n
\n \n
\n \n ,\n document.body\n );\n }\n }\n);\n\nexport { Modal };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer, Provider } from \"mobx-react\";\nimport { observable, action } from \"mobx\";\n\nimport Flash from \"react-reveal/Flash\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons/faSpinner\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { Modal } from \"Components/Modal\";\n\nimport \"./index.scss\";\n\n// https://github.com/facebook/react/issues/14603\nconst OverviewModalContent = React.lazy(() =>\n import(\"./OverviewModalContent\").then(module => ({\n default: module.OverviewModalContent\n }))\n);\n\nconst OverviewModal = observer(\n class OverviewModal extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired\n };\n\n toggle = observable(\n {\n show: false,\n toggle() {\n this.show = !this.show;\n },\n hide() {\n this.show = false;\n }\n },\n { toggle: action.bound, hide: action.bound }\n );\n\n render() {\n const { alertStore } = this.props;\n\n return (\n \n \n \n \n {alertStore.info.totalAlerts}\n
\n \n \n \n \n \n \n }\n >\n \n \n \n \n \n
\n );\n }\n }\n);\n\nexport { OverviewModal };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\nimport { observable, action } from \"mobx\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCog } from \"@fortawesome/free-solid-svg-icons/faCog\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons/faSpinner\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { Modal } from \"Components/Modal\";\n\n// https://github.com/facebook/react/issues/14603\nconst MainModalContent = React.lazy(() =>\n import(\"./MainModalContent\").then(module => ({\n default: module.MainModalContent\n }))\n);\n\nconst MainModal = observer(\n class MainModal extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired\n };\n\n toggle = observable(\n {\n show: false,\n toggle() {\n this.show = !this.show;\n },\n hide() {\n this.show = false;\n }\n },\n { toggle: action.bound, hide: action.bound }\n );\n\n render() {\n const { alertStore, settingsStore } = this.props;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n }\n >\n \n \n \n \n );\n }\n }\n);\n\nexport { MainModal };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faBellSlash } from \"@fortawesome/free-solid-svg-icons/faBellSlash\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons/faSpinner\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { Modal } from \"Components/Modal\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\n\nimport \"./index.css\";\n\n// https://github.com/facebook/react/issues/14603\nconst SilenceModalContent = React.lazy(() =>\n import(\"./SilenceModalContent\").then(module => ({\n default: module.SilenceModalContent\n }))\n);\n\nconst SilenceModal = observer(\n class SilenceModal extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired\n };\n\n render() {\n const { alertStore, silenceFormStore, settingsStore } = this.props;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n }\n >\n \n \n \n \n );\n }\n }\n);\n\nexport { SilenceModal };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircleNotch } from \"@fortawesome/free-solid-svg-icons/faCircleNotch\";\nimport { faPauseCircle } from \"@fortawesome/free-regular-svg-icons/faPauseCircle\";\n\nimport { AlertStore, AlertStoreStatuses } from \"Stores/AlertStore\";\n\nconst FetchIcon = ({ icon, color, visible, spin }) => (\n \n);\nFetchIcon.propTypes = {\n icon: FontAwesomeIcon.propTypes.icon.isRequired,\n color: PropTypes.string,\n visible: PropTypes.bool,\n spin: PropTypes.bool\n};\nFetchIcon.defaultProps = {\n color: \"muted\",\n visible: true,\n spin: false\n};\n\nconst FetchIndicator = observer(\n class FetchIndicator extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired\n };\n\n render() {\n const { alertStore } = this.props;\n\n if (alertStore.status.paused) return ;\n\n const status = alertStore.status.value.toString();\n\n if (status === AlertStoreStatuses.Fetching.toString())\n return ;\n\n if (status === AlertStoreStatuses.Processing.toString())\n return ;\n\n return ;\n }\n }\n);\n\nexport { FetchIndicator };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { RIEInput } from \"@attently/riek\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons/faExclamationCircle\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons/faSpinner\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons/faTimes\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { QueryOperators } from \"Common/Query\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { BaseLabel } from \"Components/Labels/BaseLabel\";\n\nimport \"./index.scss\";\n\nconst FilterInputLabel = observer(\n class FilterInputLabel extends BaseLabel {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n filter: PropTypes.shape({\n raw: PropTypes.string,\n applied: PropTypes.bool,\n hits: PropTypes.number,\n name: PropTypes.string,\n matcher: PropTypes.string,\n value: PropTypes.string\n })\n };\n\n onChange = update => {\n const { alertStore, filter } = this.props;\n\n // if filter is empty string then remove it\n if (update.raw === \"\") {\n alertStore.filters.removeFilter(filter.raw);\n }\n\n // if not empty replace it\n alertStore.filters.replaceFilter(filter.raw, update.raw);\n };\n\n render() {\n const { filter, alertStore } = this.props;\n\n let cs = this.getClassAndStyle(\n filter.matcher === QueryOperators.Equal ? filter.name : \"\",\n filter.matcher === QueryOperators.Equal ? filter.value : \"\",\n \"components-filteredinputlabel btn-sm border-0\",\n \"btn\"\n );\n\n const showCounter =\n alertStore.filters.values.filter(\n f => f.hits !== alertStore.info.totalAlerts\n ).length > 0;\n\n const rootClasses = filter.applied\n ? cs.className\n : [\n \"btn-secondary btn-sm border-0 components-filteredinputlabel\",\n ...cs.baseClassNames\n ].join(\" \");\n\n return (\n \n {filter.isValid ? (\n filter.applied ? (\n showCounter ? (\n \n {filter.hits}\n \n ) : null\n ) : (\n \n )\n ) : (\n \n )}\n \n \n \n alertStore.filters.removeFilter(filter.raw)}\n />\n \n );\n }\n }\n);\n\nexport { FilterInputLabel };\n","const AutosuggestTheme = {\n container: \"autosuggest d-inline-block\",\n suggestionsContainer: \"dropdown\",\n suggestionsList: \"dropdown-menu show shadow\",\n suggestion: \"dropdown-item cursor-pointer\",\n suggestionFocused: \"active\",\n suggestionHighlighted: \"active\"\n};\n\nexport { AutosuggestTheme };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CSSTransition } from \"react-transition-group\";\n\nimport \"./index.css\";\n\nconst DropdownSlide = ({ children, duration, ...props }) => (\n \n {children}\n \n);\nDropdownSlide.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport { DropdownSlide };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { QueryOperators } from \"Common/Query\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { BaseLabel } from \"Components/Labels/BaseLabel\";\n\nimport \"./index.css\";\n\nconst HistoryLabel = observer(\n class HistoryLabel extends BaseLabel {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n matcher: PropTypes.string.isRequired\n };\n\n render() {\n const { name, matcher, value } = this.props;\n\n let cs = this.getClassAndStyle(\n matcher === QueryOperators.Equal ? name : \"\",\n matcher === QueryOperators.Equal ? value : \"\",\n \"components-label-history components-label-value\"\n );\n\n return (\n \n {name ? `${name}${matcher}` : null}\n {value}\n \n );\n }\n }\n);\n\nexport { HistoryLabel };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { action, observable, toJS } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport { localStored } from \"mobx-stored\";\n\nimport hash from \"object-hash\";\n\nimport { Manager, Reference, Popper } from \"react-popper\";\nimport onClickOutside from \"react-onclickoutside\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faHistory } from \"@fortawesome/free-solid-svg-icons/faHistory\";\nimport { faCaretDown } from \"@fortawesome/free-solid-svg-icons/faCaretDown\";\nimport { faSave } from \"@fortawesome/free-regular-svg-icons/faSave\";\nimport { faUndoAlt } from \"@fortawesome/free-solid-svg-icons/faUndoAlt\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons/faTrash\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { DropdownSlide } from \"Components/Animations/DropdownSlide\";\nimport { HistoryLabel } from \"Components/Labels/HistoryLabel\";\n\nimport \"./History.css\";\n\nconst defaultHistory = {\n filters: []\n};\n\n// takes a filter object out of alertStore.history.values and creates a new\n// object with only those keys that will be stored in history\nfunction ReduceFilter(filter) {\n return {\n raw: filter.raw,\n name: filter.name,\n matcher: filter.matcher,\n value: filter.value\n };\n}\n\nconst ActionButton = ({ color, icon, title, action, afterClick }) => (\n {\n action();\n afterClick();\n }}\n >\n \n {title}\n \n);\nActionButton.propTypes = {\n color: PropTypes.string.isRequired,\n title: PropTypes.node.isRequired,\n icon: FontAwesomeIcon.propTypes.icon.isRequired,\n action: PropTypes.func.isRequired,\n afterClick: PropTypes.func.isRequired\n};\n\nconst HistoryMenu = onClickOutside(\n ({\n popperPlacement,\n popperRef,\n popperStyle,\n filters,\n alertStore,\n settingsStore,\n afterClick,\n onClear\n }) => {\n return (\n \n
\n \n Last used filters\n
\n {filters.length === 0 ? (\n
Empty
\n ) : (\n filters.map(historyFilters => (\n {\n alertStore.filters.setFilters(historyFilters.map(f => f.raw));\n afterClick();\n }}\n >\n
\n {historyFilters.map(f => (\n \n ))}\n
\n \n ))\n )}\n
\n
\n {\n settingsStore.savedFilters.save(\n alertStore.filters.values.map(f => f.raw)\n );\n }}\n afterClick={afterClick}\n />\n \n \n
\n
\n );\n }\n);\nHistoryMenu.propTypes = {\n popperPlacement: PropTypes.string,\n popperRef: PropTypes.func,\n popperStyle: PropTypes.object,\n filters: PropTypes.array.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired,\n afterClick: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired\n};\n\nconst History = observer(\n class History extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired\n };\n\n // how many filter sets do we store in local storage and render in the\n // dropdown menu\n maxSize = 8;\n // this will be dumped to local storage via mobx-stored\n history = localStored(\"history.filters\", defaultHistory, { delay: 100 });\n\n collapse = observable(\n {\n value: true,\n toggle() {\n this.value = !this.value;\n },\n hide() {\n this.value = true;\n }\n },\n { toggle: action.bound, hide: action.bound },\n { name: \"History menu toggle\" }\n );\n\n appendToHistory = action(() => {\n const { alertStore } = this.props;\n\n // we don't store unapplied (we only have raw text for those, we need\n // name & value for coloring) or invalid filters\n // also check for value, name might be missing for fuzzy filters, but\n // the value should always be set\n const validAppliedFilters = alertStore.filters.values\n .filter(f => f.applied && f.isValid && f.value)\n .map(f => ReduceFilter(f));\n\n // don't store empty filters in history\n if (validAppliedFilters.length === 0) return;\n // make a JSON dump for comparing later with what's already stored\n const filtersJSON = JSON.stringify(validAppliedFilters);\n\n // dump observable array with stored filters to JS objects, without this\n // we'll be passing around and comparing proxy objects that might mutate\n // while we do so\n const storedFilters = toJS(this.history.filters);\n\n // rewrite history putting current filter set on top, this will move\n // it up if user selects a filter set that was already in history\n let newHistory = [\n ...[validAppliedFilters],\n ...storedFilters.filter(f => JSON.stringify(f) !== filtersJSON)\n ].slice(0, this.maxSize);\n this.history.filters = newHistory;\n });\n\n clearHistory = action(() => {\n this.history.filters = [];\n });\n\n componentDidUpdate() {\n // every time this component updates we will rewrite history\n // (if there are changes)\n this.appendToHistory();\n }\n\n handleClickOutside = action(event => {\n this.collapse.hide();\n });\n\n render() {\n const { alertStore, settingsStore } = this.props;\n\n return (\n // data-filters is there to register filters for observation in mobx\n // it needs to be using full filter object to notice changes to\n // name & value but ignore hits\n // using it this way will force re-render on every change, which is\n // needed to keep track of all filter changes\n ReduceFilter(f))\n .join(\" \")}\n >\n \n {({ ref }) => (\n \n \n \n )}\n \n \n \n {({ placement, ref, style }) => (\n \n )}\n \n \n \n );\n }\n }\n);\n\nexport { History, HistoryMenu, ReduceFilter };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport { debounce } from \"lodash\";\n\nimport Autosuggest from \"react-autosuggest\";\nimport Highlight from \"react-highlighter\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSearch } from \"@fortawesome/free-solid-svg-icons/faSearch\";\n\nimport { AlertStore, FormatBackendURI } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { IsMobile } from \"Common/Device\";\nimport { FilterInputLabel } from \"Components/Labels/FilterInputLabel\";\nimport { AutosuggestTheme } from \"./Constants\";\nimport { History } from \"./History\";\n\nimport \"./index.css\";\n\nconst FilterInput = observer(\n class FilterInput extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired\n };\n\n inputStore = observable(\n {\n ref: null,\n suggestions: [],\n suggestionsFetch: null,\n value: \"\",\n storeInputReference(ref) {\n this.ref = ref;\n }\n },\n {\n storeInputReference: action.bound\n },\n { name: \"Filter input state\" }\n );\n\n componentDidMount() {\n if (this.inputStore.ref !== null && !IsMobile()) {\n this.inputStore.ref.input.focus();\n }\n }\n\n onChange = action((event, { newValue, method }) => {\n // onChange here handles change for the user input in the filter bar\n // we need to update inputStore.value every time user types in something\n event.preventDefault();\n this.inputStore.value = newValue;\n });\n\n onSubmit = action(event => {\n event.preventDefault();\n if (this.inputStore.value !== \"\") {\n this.props.alertStore.filters.addFilter(this.inputStore.value);\n this.inputStore.value = \"\";\n }\n });\n\n onSuggestionsClearRequested = action(() => {\n this.inputStore.suggestions = [];\n });\n\n onSuggestionsFetchRequested = debounce(\n action(({ value }) => {\n if (value !== \"\") {\n this.inputStore.suggestionsFetch = fetch(\n FormatBackendURI(`autocomplete.json?term=${value}`),\n { credentials: \"include\" }\n )\n .then(\n result => result.json(),\n err => {\n return [];\n }\n )\n .then(result => result.slice(0, 20))\n .then(result => {\n this.inputStore.suggestions = result;\n })\n .catch(err => console.error(err.message));\n }\n }),\n 300\n );\n\n onSuggestionSelected = action((event, { suggestion }) => {\n this.inputStore.value = \"\";\n this.props.alertStore.filters.addFilter(suggestion);\n });\n\n onInputClick = (inputReference, event) => {\n if (\n typeof event.target.className === \"string\" &&\n event.target.className.split(\" \").includes(\"form-control\")\n ) {\n inputReference.input.focus();\n }\n };\n\n renderSuggestion = (suggestion, { query, isHighlighted }) => {\n return (\n \n {suggestion}\n \n );\n };\n\n renderInputComponent = inputProps => {\n const { value } = inputProps;\n return (\n \n );\n };\n\n render() {\n const { alertStore, settingsStore } = this.props;\n\n return (\n // data-filters is there to register filters for observation in mobx\n // in order to re-render input component\n f.raw).join(\" \")}\n >\n
\n
\n \n \n \n
\n {\n this.onInputClick(this.inputStore.ref, event);\n }}\n >\n {alertStore.filters.values.map(filter => (\n \n ))}\n \n value && value.trim().length > 1\n }\n getSuggestionValue={suggestion => suggestion}\n renderSuggestion={this.renderSuggestion}\n renderInputComponent={this.renderInputComponent}\n inputProps={{\n value: this.inputStore.value,\n onChange: this.onChange\n }}\n theme={AutosuggestTheme}\n />\n
\n
\n \n
\n \n \n );\n }\n }\n);\n\nexport { FilterInput };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action, reaction } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport ReactResizeDetector from \"react-resize-detector\";\n\nimport IdleTimer from \"react-idle-timer\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { IsMobile } from \"Common/Device\";\nimport { NavBarSlide } from \"Components/Animations/NavBarSlide\";\nimport { OverviewModal } from \"Components/OverviewModal\";\nimport { MainModal } from \"Components/MainModal\";\nimport { SilenceModal } from \"Components/SilenceModal\";\nimport { FetchIndicator } from \"./FetchIndicator\";\nimport { FilterInput } from \"./FilterInput\";\n\nimport \"./index.scss\";\n\nconst DesktopIdleTimeout = 1000 * 60 * 3;\nconst MobileIdleTimeout = 1000 * 12;\n\nconst NavBar = observer(\n class NavBar extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.idleTimer = null;\n\n this.activityStatus = observable(\n {\n idle: false,\n className: \"visible\",\n setIdle() {\n this.idle = true;\n },\n setActive() {\n this.idle = false;\n },\n hide() {\n this.className = \"invisible\";\n },\n show() {\n this.className = \"visible\";\n }\n },\n {\n setIdle: action.bound,\n setActive: action.bound,\n hide: action.bound,\n show: action.bound\n }\n );\n\n this.activityStatusReaction = reaction(\n () => props.alertStore.status.paused,\n paused =>\n paused\n ? this.idleTimer && this.idleTimer.pause()\n : this.idleTimer && this.idleTimer.reset(),\n { fireImmediately: true }\n );\n }\n\n elementSize = observable(\n {\n width: 0,\n height: 0,\n setSize(width, height) {\n this.width = width;\n this.height = height;\n }\n },\n { setSize: action }\n );\n\n updateBodyPaddingTop = () => {\n const paddingTop = this.activityStatus.idle\n ? 0\n : this.elementSize.height + 4;\n document.body.style.paddingTop = `${paddingTop}px`;\n };\n\n onHide = () => {\n this.activityStatus.hide();\n this.updateBodyPaddingTop();\n };\n\n onShow = () => {\n this.updateBodyPaddingTop();\n this.activityStatus.show();\n };\n\n onResize = (width, height) => {\n this.elementSize.setSize(width, height);\n this.updateBodyPaddingTop();\n };\n\n render() {\n const { alertStore, settingsStore, silenceFormStore } = this.props;\n\n // if we have at least 1 filter then it's likely that filter input will\n // use 2 lines, so set right side icons on small screeens to column mode\n // for more compact layout\n const flexClass =\n alertStore.filters.values.length >= 1\n ? \"flex-column flex-sm-column flex-md-row flex-lg-row flex-xl-row\"\n : \"flex-row\";\n\n const isMobile = IsMobile();\n\n return (\n {\n this.idleTimer = ref;\n }}\n onActive={this.activityStatus.setActive}\n onIdle={() => {\n if (settingsStore.filterBarConfig.config.autohide) {\n this.activityStatus.setIdle();\n }\n }}\n timeout={isMobile ? MobileIdleTimeout : DesktopIdleTimeout}\n >\n
\n \n \n \n
\n \n );\n }\n }\n);\n\nexport { NavBar };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CSSTransition } from \"react-transition-group\";\n\nimport \"./index.css\";\n\nconst MountFade = ({ children, duration, ...props }) => (\n \n {children}\n \n);\nMountFade.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport { MountFade };\n","import React from \"react\";\n\nimport { inject, observer } from \"mobx-react\";\n\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { BaseLabel } from \"Components/Labels/BaseLabel\";\n\n// Renders a label element that after clicking adds current label as a filter\nconst FilteringLabel = inject(\"alertStore\")(\n observer(\n class FilteringLabel extends BaseLabel {\n render() {\n const { name, value } = this.props;\n\n let cs = this.getClassAndStyle(\n name,\n value,\n \"components-label-with-hover\"\n );\n\n return (\n \n this.handleClick(e)}\n >\n {name}:{\" \"}\n {value}\n \n \n );\n }\n }\n )\n);\n\nexport { FilteringLabel };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { inject, observer } from \"mobx-react\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { BaseLabel } from \"Components/Labels/BaseLabel\";\n\n// Same as FilteringLabel but for labels that are counters (usually @state)\n// and only renders a pill badge with the counter, it doesn't render anything\n// if the counter is 0\nconst FilteringCounterBadge = inject(\"alertStore\")(\n observer(\n class FilteringCounterBadge extends BaseLabel {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n counter: PropTypes.number.isRequired,\n themed: PropTypes.bool.isRequired\n };\n\n render() {\n const { name, value, counter, themed } = this.props;\n\n if (counter === 0) return null;\n\n const cs = this.getClassAndStyle(\n name,\n value,\n \"badge-pill components-label-with-hover\"\n );\n\n return (\n \n this.handleClick(e)}\n >\n {counter}\n \n \n );\n }\n }\n )\n);\n\nexport { FilteringCounterBadge };\n","import { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { inject } from \"mobx-react\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\n\nconst FetchPauser = inject(\"alertStore\")(\n class FetchPauser extends Component {\n static propTypes = {\n children: PropTypes.any,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired\n };\n\n componentDidMount() {\n const { alertStore } = this.props;\n alertStore.status.pause();\n }\n\n componentWillUnmount() {\n const { alertStore } = this.props;\n alertStore.status.resume();\n }\n\n render() {\n return this.props.children;\n }\n }\n);\n\nexport { FetchPauser };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { action, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport copy from \"copy-to-clipboard\";\n\nimport { Manager, Reference, Popper } from \"react-popper\";\nimport onClickOutside from \"react-onclickoutside\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faEllipsisV } from \"@fortawesome/free-solid-svg-icons/faEllipsisV\";\nimport { faShareSquare } from \"@fortawesome/free-solid-svg-icons/faShareSquare\";\nimport { faBellSlash } from \"@fortawesome/free-solid-svg-icons/faBellSlash\";\n\nimport { APIGroup } from \"Models/API\";\nimport { FormatAPIFilterQuery } from \"Stores/AlertStore\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { QueryOperators, StaticLabels, FormatQuery } from \"Common/Query\";\nimport { DropdownSlide } from \"Components/Animations/DropdownSlide\";\nimport { FetchPauser } from \"Components/FetchPauser\";\n\nconst onSilenceClick = (alertStore, silenceFormStore, group) => {\n silenceFormStore.data.resetProgress();\n silenceFormStore.data.fillMatchersFromGroup(\n group,\n alertStore.settings.values.silenceForm.strip.labels\n );\n silenceFormStore.toggle.show();\n};\n\nconst MenuContent = onClickOutside(\n ({\n popperPlacement,\n popperRef,\n popperStyle,\n group,\n afterClick,\n alertStore,\n silenceFormStore\n }) => {\n let groupFilters = Object.keys(group.labels).map(name =>\n FormatQuery(name, QueryOperators.Equal, group.labels[name])\n );\n groupFilters.push(\n FormatQuery(StaticLabels.Receiver, QueryOperators.Equal, group.receiver)\n );\n const groupLink = `${window.location.href}?${FormatAPIFilterQuery(\n groupFilters\n )}`;\n\n return (\n \n \n {\n copy(groupLink);\n afterClick();\n }}\n >\n Copy link to this group\n \n onSilenceClick(alertStore, silenceFormStore, group)}\n >\n Silence this group\n \n \n \n );\n }\n);\nMenuContent.propTypes = {\n popperPlacement: PropTypes.string,\n popperRef: PropTypes.func,\n popperStyle: PropTypes.object,\n group: APIGroup.isRequired,\n afterClick: PropTypes.func.isRequired\n};\n\nconst GroupMenu = observer(\n class GroupMenu extends Component {\n static propTypes = {\n group: APIGroup.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n themed: PropTypes.bool.isRequired,\n setIsMenuOpen: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.collapse = observable(\n {\n value: true,\n toggle() {\n this.value = !this.value;\n props.setIsMenuOpen(!this.value);\n },\n hide() {\n this.value = true;\n props.setIsMenuOpen(!this.value);\n }\n },\n { toggle: action.bound, hide: action.bound },\n { name: \"Alert group menu toggle\" }\n );\n }\n\n handleClickOutside = action(event => {\n this.collapse.hide();\n });\n\n render() {\n const { group, alertStore, silenceFormStore, themed } = this.props;\n\n return (\n \n \n {({ ref }) => (\n \n \n \n )}\n \n \n \n {({ placement, ref, style }) => (\n \n )}\n \n \n \n );\n }\n }\n);\n\nexport { GroupMenu, MenuContent };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faChevronUp } from \"@fortawesome/free-solid-svg-icons/faChevronUp\";\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons/faChevronDown\";\n\nimport { APIGroup } from \"Models/API\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { FilteringLabel } from \"Components/Labels/FilteringLabel\";\nimport { FilteringCounterBadge } from \"Components/Labels/FilteringCounterBadge\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { GroupMenu } from \"./GroupMenu\";\n\nconst GroupHeader = observer(\n class GroupHeader extends Component {\n static propTypes = {\n collapseStore: PropTypes.shape({\n value: PropTypes.bool.isRequired,\n toggle: PropTypes.func.isRequired\n }).isRequired,\n group: APIGroup.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n themedCounters: PropTypes.bool.isRequired,\n setIsMenuOpen: PropTypes.func.isRequired\n };\n\n render() {\n const {\n collapseStore,\n group,\n alertStore,\n silenceFormStore,\n themedCounters,\n setIsMenuOpen\n } = this.props;\n\n return (\n \n \n \n \n \n {Object.keys(group.labels).map(name => (\n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n }\n);\n\nexport { GroupHeader };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action } from \"mobx\";\nimport { observer, inject } from \"mobx-react\";\n\nimport Linkify from \"react-linkify\";\n\nimport Flash from \"react-reveal/Flash\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons/faExternalLinkAlt\";\nimport { faSearchPlus } from \"@fortawesome/free-solid-svg-icons/faSearchPlus\";\nimport { faSearchMinus } from \"@fortawesome/free-solid-svg-icons/faSearchMinus\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\n\nimport \"./index.css\";\n\nconst RenderNonLinkAnnotation = inject(\"alertStore\")(\n observer(\n class RenderNonLinkAnnotation extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n visible: PropTypes.bool.isRequired,\n afterUpdate: PropTypes.func.isRequired\n };\n\n // keep state of this annotation visibility, this is controlled by user\n toggle = observable(\n {\n visible: true,\n show(e) {\n // Linkify only handles value, no need to check for links of\n // collapsed annotation\n this.visible = true;\n },\n hide(e) {\n this.visible = false;\n }\n },\n {\n show: action.bound,\n hide: action.bound\n }\n );\n\n constructor(props) {\n super(props);\n\n this.toggle.visible = props.visible;\n }\n\n componentDidUpdate() {\n const { afterUpdate } = this.props;\n\n afterUpdate();\n }\n\n render() {\n const { name, value } = this.props;\n\n const className =\n \"mr-1 mb-1 p-1 bg-light d-inline-block rounded components-grid-annotation text-break mw-100\";\n\n if (!this.toggle.visible) {\n return (\n \n \n \n {name}\n \n \n );\n }\n\n return (\n \n
\n \n {name}: \n \n \n {value}\n \n \n
\n
\n );\n }\n }\n )\n);\n\nconst RenderLinkAnnotation = ({ name, value }) => {\n return (\n \n {name}\n \n );\n};\nRenderLinkAnnotation.propTypes = {\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n};\n\nexport { RenderNonLinkAnnotation, RenderLinkAnnotation };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport semver from \"semver\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons/faTrash\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons/faExclamationCircle\";\nimport { faCheckCircle } from \"@fortawesome/free-solid-svg-icons/faCheckCircle\";\nimport { faCircleNotch } from \"@fortawesome/free-solid-svg-icons/faCircleNotch\";\n\nimport { APIAlertmanagerUpstream } from \"Models/API\";\nimport { AlertStore, FormatBackendURI, FormatAlertsQ } from \"Stores/AlertStore\";\nimport { FormatQuery, QueryOperators, StaticLabels } from \"Common/Query\";\nimport { Modal } from \"Components/Modal\";\nimport {\n LabelSetList,\n GroupListToUniqueLabelsList\n} from \"Components/LabelSetList\";\n\nconst ProgressMessage = () => (\n
\n \n
\n);\n\nconst ErrorMessage = ({ message }) => (\n
\n \n

{message}

\n
\n);\nErrorMessage.propTypes = {\n message: PropTypes.node.isRequired\n};\n\nconst SuccessMessage = () => (\n
\n \n

\n Silence deleted, it might take a few minutes for affected alerts to change\n state\n

\n
\n);\n\nconst DeleteSilenceModalContent = observer(\n class DeleteSilenceModalContent extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n alertmanager: APIAlertmanagerUpstream.isRequired,\n silenceID: PropTypes.string.isRequired,\n onHide: PropTypes.func.isRequired\n };\n\n previewState = observable(\n {\n fetch: null,\n error: null,\n alertLabels: [],\n setError(err) {\n this.error = err;\n },\n groupsToUniqueLabels(groups) {\n this.alertLabels = GroupListToUniqueLabelsList(groups);\n }\n },\n {\n setError: action.bound,\n groupsToUniqueLabels: action.bound\n }\n );\n\n deleteState = observable(\n {\n fetch: null,\n done: false,\n error: null,\n setDone() {\n this.done = true;\n },\n setError(err) {\n this.error = err;\n },\n reset() {\n this.done = false;\n this.error = null;\n }\n },\n {\n setDone: action.bound,\n setError: action.bound,\n reset: action.bound\n }\n );\n\n parseAlertmanagerResponse = response => {\n /*\n {\"status\": \"success\"}\n or\n {\n \"status\": \"error\",\n \"errorType\": \"bad_data\",\n \"error\": \"silence 706959fd-4590-4e21-b983-859ba6ec0e1a already expired\"\n }\n */\n if (response.status === \"success\") {\n this.deleteState.setError(null);\n } else if (response.status === \"error\" && response.error) {\n this.deleteState.setError(response.error);\n } else {\n this.deleteState.setError(JSON.stringify(response));\n }\n this.deleteState.setDone();\n };\n\n onFetchPreview = () => {\n const { silenceID } = this.props;\n\n const alertsURI =\n FormatBackendURI(\"alerts.json?\") +\n FormatAlertsQ([\n FormatQuery(StaticLabels.SilenceID, QueryOperators.Equal, silenceID)\n ]);\n\n this.previewState.fetch = fetch(alertsURI, { credentials: \"include\" })\n .then(result => result.json())\n .then(result => {\n this.previewState.groupsToUniqueLabels(Object.values(result.groups));\n this.previewState.setError(null);\n })\n .catch(err => {\n console.trace(err);\n return this.previewState.setError(\n `Request fetching affected alerts failed with: ${err.message}`\n );\n });\n };\n\n onDelete = () => {\n const { alertmanager, silenceID } = this.props;\n\n // if it's already deleted then do nothing\n if (this.deleteState.done && this.deleteState.error === null) return;\n\n // reset state so we get a spinner\n this.deleteState.reset();\n\n const isOpenAPI = semver.satisfies(alertmanager.version, \">=0.16.0\");\n\n const uri = isOpenAPI\n ? `${alertmanager.publicURI}/api/v2/silence/${silenceID}`\n : `${alertmanager.publicURI}/api/v1/silence/${silenceID}`;\n\n this.deleteState.fetch = fetch(uri, {\n method: \"DELETE\",\n credentials: \"include\"\n })\n .then(result => {\n if (isOpenAPI) {\n if (result.ok) {\n this.deleteState.setError(null);\n this.deleteState.setDone();\n } else {\n result.text().then(this.deleteState.setError);\n this.deleteState.setDone();\n }\n } else {\n result.json().then(this.parseAlertmanagerResponse);\n }\n })\n .catch(err => {\n console.trace(err);\n this.deleteState.setDone();\n this.deleteState.setError(\n `Delete request failed with: ${err.message}`\n );\n });\n };\n\n componentDidMount() {\n this.onFetchPreview();\n }\n\n render() {\n const { alertStore, onHide } = this.props;\n\n const isDone = this.deleteState.done && this.deleteState.error === null;\n\n return (\n \n
\n
Delete silence
\n \n
\n
\n {this.deleteState.done ? (\n this.deleteState.error !== null ? (\n \n ) : (\n \n )\n ) : this.deleteState.fetch !== null ? (\n \n ) : this.previewState.error === null ? (\n \n ) : (\n \n )}\n {isDone ? null : (\n
\n \n \n {this.deleteState.fetch !== null &&\n this.deleteState.error !== null\n ? \"Retry\"\n : \"Confirm\"}\n \n
\n )}\n
\n
\n );\n }\n }\n);\n\nconst DeleteSilence = observer(\n class DeleteSilence extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n alertmanager: APIAlertmanagerUpstream.isRequired,\n silenceID: PropTypes.string.isRequired\n };\n\n toggle = observable(\n {\n visible: false,\n toggle() {\n this.visible = !this.visible;\n }\n },\n { toggle: action.bound }\n );\n\n render() {\n const { alertStore, alertmanager, silenceID } = this.props;\n\n return (\n \n \n \n Delete\n \n \n \n \n \n );\n }\n }\n);\n\nexport { DeleteSilence, DeleteSilenceModalContent };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action } from \"mobx\";\nimport { observer, inject } from \"mobx-react\";\n\nimport hash from \"object-hash\";\n\nimport moment from \"moment\";\nimport Moment from \"react-moment\";\n\nimport Truncate from \"react-truncate\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons/faExternalLinkAlt\";\nimport { faChevronUp } from \"@fortawesome/free-solid-svg-icons/faChevronUp\";\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons/faChevronDown\";\nimport { faEdit } from \"@fortawesome/free-solid-svg-icons/faEdit\";\nimport { faCalendarCheck } from \"@fortawesome/free-solid-svg-icons/faCalendarCheck\";\nimport { faCalendarTimes } from \"@fortawesome/free-solid-svg-icons/faCalendarTimes\";\nimport { faFilter } from \"@fortawesome/free-solid-svg-icons/faFilter\";\n\nimport {\n APIAlertAlertmanagerState,\n APIAlertmanagerUpstream,\n APISilence\n} from \"Models/API\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { StaticLabels, QueryOperators } from \"Common/Query\";\nimport { FilteringLabel } from \"Components/Labels/FilteringLabel\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { RenderLinkAnnotation } from \"../Annotation\";\nimport { DeleteSilence } from \"./DeleteSilence\";\n\nimport \"./index.css\";\n\nconst SilenceComment = ({ silence, collapsed, afterUpdate }) => {\n const showLines = 2;\n if (silence.jiraURL) {\n return (\n \n \n \n {silence.comment}\n \n \n );\n }\n return (\n {silence.comment}\n );\n};\nSilenceComment.propTypes = {\n silence: APISilence.isRequired,\n collapsed: PropTypes.bool.isRequired,\n afterUpdate: PropTypes.func.isRequired\n};\n\nconst SilenceExpiryBadgeWithProgress = ({ silence, progress }) => {\n // if silence is expired we can skip progress value calculation\n if (moment(silence.endsAt) < moment()) {\n return (\n \n Expired {silence.endsAt}\n \n );\n }\n\n let progressClass;\n if (progress > 90) {\n progressClass = \"progress-bar bg-danger\";\n } else if (progress > 75) {\n progressClass = \"progress-bar bg-warning\";\n } else {\n progressClass = \"progress-bar bg-success\";\n }\n\n return (\n \n Expires {silence.endsAt}\n
\n \n
\n
\n );\n};\nSilenceExpiryBadgeWithProgress.propTypes = {\n silence: APISilence.isRequired,\n progress: PropTypes.number.isRequired\n};\n\nconst SilenceDetails = ({\n alertStore,\n alertmanager,\n silence,\n onEditSilence\n}) => {\n let expiresClass = \"\";\n let expiresLabel = \"Expires\";\n if (moment(silence.endsAt) < moment()) {\n expiresClass = \"text-danger\";\n expiresLabel = \"Expired\";\n }\n\n return (\n
\n
\n \n \n
\n
\n \n \n Started {silence.startsAt}\n \n \n \n {expiresLabel} {silence.endsAt}\n \n \n \n Edit\n \n \n
\n
\n
\n \n \n Matchers:\n \n
\n
\n {silence.matchers.map(matcher => (\n \n {matcher.name}\n {matcher.isRegex ? QueryOperators.Regex : QueryOperators.Equal}\n {matcher.value}\n \n ))}\n
\n
\n
\n );\n};\nSilenceDetails.propTypes = {\n alertmanager: APIAlertmanagerUpstream.isRequired,\n silence: APISilence.isRequired,\n onEditSilence: PropTypes.func.isRequired\n};\n\n//\nconst FallbackSilenceDesciption = ({ alertmanagerName, silenceID }) => {\n return (\n
\n \n Silenced by {alertmanagerName}/{silenceID}\n \n
\n );\n};\nFallbackSilenceDesciption.propTypes = {\n alertmanagerName: PropTypes.string.isRequired,\n silenceID: PropTypes.string.isRequired\n};\n\nconst Silence = inject(\"alertStore\")(\n observer(\n class Silence extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n alertmanagerState: APIAlertAlertmanagerState.isRequired,\n silenceID: PropTypes.string.isRequired,\n afterUpdate: PropTypes.func.isRequired\n };\n\n // store collapse state, by default only silence comment is visible\n // the rest of the silence is hidden until expanded by a click\n collapse = observable(\n {\n value: true,\n toggle() {\n this.value = !this.value;\n }\n },\n { toggle: action.bound },\n { name: \"Silence collpase toggle\" }\n );\n\n progress = observable(\n {\n value: 0,\n calculate(startsAt, endsAt) {\n const durationDone = moment().unix() - moment(startsAt).unix();\n const durationTotal =\n moment(endsAt).unix() - moment(startsAt).unix();\n const durationPercent = Math.floor(\n (durationDone / durationTotal) * 100\n );\n if (this.value !== durationPercent) {\n this.value = durationPercent;\n }\n }\n },\n {\n calculate: action.bound\n }\n );\n\n constructor(props) {\n super(props);\n\n this.recalculateProgress();\n this.progressTimer = setInterval(this.recalculateProgress, 30 * 1000);\n }\n\n getAlertmanager = () => {\n const { alertStore, alertmanagerState } = this.props;\n\n const alertmanager = alertStore.data.getAlertmanagerByName(\n alertmanagerState.name\n );\n\n if (alertmanager) return alertmanager;\n\n return {\n name: alertmanagerState.name\n };\n };\n\n getSilence = () => {\n const { alertStore, alertmanagerState, silenceID } = this.props;\n\n // We pass alertmanager name and silence ID to Silence component\n // and we need to lookup the actual silence data in the store.\n // Data might be missing from the store so first check if we have\n // anything for this alertmanager instance\n const amSilences = alertStore.data.silences[alertmanagerState.cluster];\n if (!amSilences) return null;\n\n // next check if alertmanager has our silence ID\n const silence = amSilences[silenceID];\n if (!silence) return null;\n\n return silence;\n };\n\n recalculateProgress = () => {\n const silence = this.getSilence();\n if (silence !== null) {\n this.progress.calculate(silence.startsAt, silence.endsAt);\n }\n };\n\n onEditSilence = () => {\n const { silenceFormStore } = this.props;\n\n const silence = this.getSilence();\n const alertmanager = this.getAlertmanager();\n\n silenceFormStore.data.fillFormFromSilence(alertmanager, silence);\n silenceFormStore.data.resetProgress();\n silenceFormStore.toggle.show();\n };\n\n componentDidUpdate() {\n const { afterUpdate } = this.props;\n afterUpdate();\n }\n\n componentWillUnmount() {\n clearInterval(this.progressTimer);\n this.progressTimer = null;\n }\n\n render() {\n const {\n alertStore,\n alertmanagerState,\n silenceID,\n afterUpdate\n } = this.props;\n\n const silence = this.getSilence();\n if (!silence)\n return (\n \n );\n\n const alertmanager = this.getAlertmanager();\n\n return (\n
\n
\n \n \n \n \n \n \n \n \n \n {silence.createdBy}\n \n {this.collapse.value ? (\n \n ) : null}\n \n \n
\n {this.collapse.value ? null : (\n \n )}\n
\n );\n }\n }\n )\n);\n\nexport { Silence, SilenceDetails, SilenceExpiryBadgeWithProgress };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { action, observable } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport hash from \"object-hash\";\n\nimport { Manager, Reference, Popper } from \"react-popper\";\nimport onClickOutside from \"react-onclickoutside\";\n\nimport Moment from \"react-moment\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCaretDown } from \"@fortawesome/free-solid-svg-icons/faCaretDown\";\nimport { faBellSlash } from \"@fortawesome/free-solid-svg-icons/faBellSlash\";\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons/faExternalLinkAlt\";\n\nimport { APIAlert, APIGroup } from \"Models/API\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { FetchPauser } from \"Components/FetchPauser\";\nimport { DropdownSlide } from \"Components/Animations/DropdownSlide\";\n\nconst onSilenceClick = (alertStore, silenceFormStore, group, alert) => {\n silenceFormStore.data.resetProgress();\n silenceFormStore.data.fillMatchersFromGroup(\n group,\n alertStore.settings.values.silenceForm.strip.labels,\n [alert]\n );\n silenceFormStore.toggle.show();\n};\n\nconst MenuContent = onClickOutside(\n ({\n popperPlacement,\n popperRef,\n popperStyle,\n group,\n alert,\n afterClick,\n alertStore,\n silenceFormStore\n }) => {\n return (\n \n \n
Alert source links:
\n {alert.alertmanager.map(am => (\n \n \n {am.name}\n \n ))}\n
\n \n onSilenceClick(alertStore, silenceFormStore, group, alert)\n }\n >\n \n Silence this alert\n
\n \n
\n );\n }\n);\nMenuContent.propTypes = {\n popperPlacement: PropTypes.string,\n popperRef: PropTypes.func,\n popperStyle: PropTypes.object,\n group: APIGroup.isRequired,\n alert: APIAlert.isRequired,\n afterClick: PropTypes.func.isRequired\n};\n\nconst AlertMenu = observer(\n class AlertMenu extends Component {\n static propTypes = {\n group: APIGroup.isRequired,\n alert: APIAlert.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n setIsMenuOpen: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.collapse = observable(\n {\n value: true,\n toggle() {\n this.value = !this.value;\n props.setIsMenuOpen(!this.value);\n },\n hide() {\n this.value = true;\n props.setIsMenuOpen(!this.value);\n }\n },\n { toggle: action.bound, hide: action.bound },\n { name: \"Alert menu toggle\" }\n );\n }\n\n handleClickOutside = action(event => {\n this.collapse.hide();\n });\n\n render() {\n const { group, alert, alertStore, silenceFormStore } = this.props;\n\n const uniqueClass = `components-grid-alert-${group.id}-${hash(\n alert.labels\n )}`;\n\n return (\n \n \n {({ ref }) => (\n \n \n {alert.startsAt}\n \n )}\n \n \n \n {({ placement, ref, style }) => (\n \n )}\n \n \n \n );\n }\n }\n);\n\nexport { AlertMenu, MenuContent };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faVolumeMute } from \"@fortawesome/free-solid-svg-icons/faVolumeMute\";\n\nimport { APIAlert, APIGroup } from \"Models/API\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { BorderClassMap } from \"Common/Colors\";\nimport { StaticLabels } from \"Common/Query\";\nimport { FilteringLabel } from \"Components/Labels/FilteringLabel\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { RenderNonLinkAnnotation, RenderLinkAnnotation } from \"../Annotation\";\nimport { Silence } from \"../Silence\";\nimport { AlertMenu } from \"./AlertMenu\";\n\nimport \"./index.css\";\n\nconst Alert = observer(\n class Alert extends Component {\n static propTypes = {\n group: APIGroup.isRequired,\n alert: APIAlert.isRequired,\n showAlertmanagers: PropTypes.bool.isRequired,\n showReceiver: PropTypes.bool.isRequired,\n afterUpdate: PropTypes.func.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n setIsMenuOpen: PropTypes.func.isRequired\n };\n\n render() {\n const {\n group,\n alert,\n showAlertmanagers,\n showReceiver,\n afterUpdate,\n alertStore,\n silenceFormStore,\n setIsMenuOpen\n } = this.props;\n\n let classNames = [\n \"components-grid-alertgrid-alertgroup-alert\",\n \"list-group-item\",\n \"pl-1 pr-0 py-0\",\n \"my-1\",\n \"rounded-0\",\n \"border-left-1 border-right-0 border-top-0 border-bottom-0\",\n BorderClassMap[alert.state] || \"border-warning\"\n ];\n\n const silences = {};\n for (const am of alert.alertmanager) {\n if (!silences[am.cluster]) {\n silences[am.cluster] = {\n alertmanager: am,\n silences: [\n ...new Set(\n am.silencedBy.filter(\n silenceID =>\n !(\n group.shared.silences[am.cluster] &&\n group.shared.silences[am.cluster].includes(silenceID)\n )\n )\n )\n ]\n };\n }\n }\n\n return (\n
  • \n
    \n {alert.annotations\n .filter(a => a.isLink === false)\n .map(a => (\n \n ))}\n
    \n \n {alert.alertmanager\n .map(am => am.inhibitedBy.length)\n .reduce((sum, x) => sum + x) > 0 ? (\n \n \n \n \n \n ) : null}\n {Object.entries(alert.labels).map(([name, value]) => (\n \n ))}\n {showAlertmanagers\n ? alert.alertmanager.map(am => (\n \n ))\n : null}\n {showReceiver ? (\n \n ) : null}\n {alert.annotations\n .filter(a => a.isLink === true)\n .map(a => (\n \n ))}\n {Object.values(silences).map(clusterSilences =>\n clusterSilences.silences.map(silenceID => (\n \n ))\n )}\n
  • \n );\n }\n }\n);\n\nexport { Alert };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { APIGroup } from \"Models/API\";\nimport { StaticLabels } from \"Common/Query\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { FilteringLabel } from \"Components/Labels/FilteringLabel\";\nimport { RenderNonLinkAnnotation, RenderLinkAnnotation } from \"../Annotation\";\nimport { Silence } from \"../Silence\";\n\nimport \"./index.css\";\n\nconst GroupFooter = observer(\n class GroupFooter extends Component {\n static propTypes = {\n group: APIGroup.isRequired,\n alertmanagers: PropTypes.arrayOf(PropTypes.string).isRequired,\n afterUpdate: PropTypes.func.isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired\n };\n\n render() {\n const {\n group,\n alertmanagers,\n afterUpdate,\n silenceFormStore\n } = this.props;\n\n return (\n
    \n
    \n {group.shared.annotations\n .filter(a => a.isLink === false)\n .map(a => (\n \n ))}\n
    \n {Object.entries(group.shared.labels).map(([name, value]) => (\n \n ))}\n {alertmanagers.map(am => (\n \n ))}\n \n {group.shared.annotations\n .filter(a => a.isLink === true)\n .map(a => (\n \n ))}\n {Object.keys(group.shared.silences).length === 0 ? null : (\n
    \n {Object.entries(group.shared.silences).map(\n ([cluster, silences]) =>\n silences.map(silenceID => (\n \n a.alertmanager.filter(\n am => am.cluster === cluster\n )[0]\n )[0]\n }\n silenceID={silenceID}\n afterUpdate={afterUpdate}\n />\n ))\n )}\n
    \n )}\n
    \n );\n }\n }\n);\n\nexport { GroupFooter };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\nimport { observable, action, toJS } from \"mobx\";\n\nimport hash from \"object-hash\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faPlus } from \"@fortawesome/free-solid-svg-icons/faPlus\";\nimport { faMinus } from \"@fortawesome/free-solid-svg-icons/faMinus\";\n\nimport { APIGroup } from \"Models/API\";\nimport { Settings } from \"Stores/Settings\";\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { IsMobile } from \"Common/Device\";\nimport { BackgroundClassMap } from \"Common/Colors\";\nimport { MountFade } from \"Components/Animations/MountFade\";\nimport { TooltipWrapper } from \"Components/TooltipWrapper\";\nimport { GroupHeader } from \"./GroupHeader\";\nimport { Alert } from \"./Alert\";\nimport { GroupFooter } from \"./GroupFooter\";\n\nconst LoadButton = ({ icon, action, tooltip }) => {\n return (\n \n \n \n \n \n );\n};\nLoadButton.propTypes = {\n icon: FontAwesomeIcon.propTypes.icon.isRequired,\n action: PropTypes.func.isRequired,\n tooltip: PropTypes.node.isRequired\n};\n\nconst AllAlertsAreUsingSameAlertmanagers = alerts => {\n const usedAMs = alerts.map(alert =>\n alert.alertmanager.map(am => am.name).sort()\n );\n return usedAMs.every(\n listOfAMs => JSON.stringify(listOfAMs) === JSON.stringify(usedAMs[0])\n );\n};\n\nconst AlertGroup = observer(\n class AlertGroup extends Component {\n static propTypes = {\n afterUpdate: PropTypes.func.isRequired,\n group: APIGroup.isRequired,\n showAlertmanagers: PropTypes.bool.isRequired,\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired,\n style: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n\n const { alertGroupConfig } = props.settingsStore;\n\n this.defaultRenderCount = toJS(\n alertGroupConfig.config.defaultRenderCount\n );\n\n this.renderConfig = observable(\n {\n alertsToRender: this.defaultRenderCount,\n isMenuOpen: false,\n setIsMenuOpen(val) {\n this.isMenuOpen = val;\n }\n },\n {\n setIsMenuOpen: action.bound\n }\n );\n\n let defaultCollapseState;\n switch (alertGroupConfig.config.defaultCollapseState) {\n case alertGroupConfig.options.collapsed.value:\n defaultCollapseState = true;\n break;\n case alertGroupConfig.options.collapsedOnMobile.value:\n defaultCollapseState = IsMobile();\n break;\n default:\n defaultCollapseState = false;\n break;\n }\n\n // store collapse state, alert groups can be collapsed to only show\n // the header, this is controlled by UI element on the header itself, so\n // this observable needs to be passed down to it\n this.collapse = observable(\n {\n value: defaultCollapseState,\n toggle() {\n this.value = !this.value;\n }\n },\n {\n toggle: action.bound\n },\n { name: \"Collpase toggle\" }\n );\n }\n\n loadMore = action(() => {\n const { group } = this.props;\n\n const step = this.getStepSize(group.alerts.length);\n\n // show cur+step, but not more that total alert count\n this.renderConfig.alertsToRender = Math.min(\n this.renderConfig.alertsToRender + step,\n group.alerts.length\n );\n });\n\n loadLess = action(() => {\n const { group } = this.props;\n\n const step = this.getStepSize(group.alerts.length);\n\n // show cur-step, but not less than 1\n this.renderConfig.alertsToRender = Math.max(\n this.renderConfig.alertsToRender - step,\n 1\n );\n });\n\n // Used to calculate step size when loading more alerts.\n // Step is calculated from the excesive alert count\n // (what's > defaultRenderCount) by dividing it into 5 clicks.\n // Don't use step lower than 5, too much clicking if we have a group of 9:\n // * we'll show initially 5\n // * step would be 1\n // * 4 extra clicks to see the entire group\n // but ensure that step wouldn't push us above totalSize\n // With 9 alerts and rendering 5 initially we want to show extra 9 after one\n // click, and when user clicks showLess we want to go back to 5.\n getStepSize(totalSize) {\n const val = Math.min(\n Math.max(Math.round((totalSize - this.defaultRenderCount) / 5), 5),\n totalSize - this.defaultRenderCount\n );\n return val;\n }\n\n componentDidUpdate() {\n // whenever grid component re-renders we need to ensure that grid elements\n // are packed correctly\n this.props.afterUpdate();\n }\n\n render() {\n const {\n group,\n showAlertmanagers,\n afterUpdate,\n silenceFormStore,\n alertStore,\n settingsStore,\n style\n } = this.props;\n\n let footerAlertmanagers = [];\n let showAlertmanagersInFooter = false;\n\n // There's no need to render @alertmanager labels if there's only 1\n // alertmanager upstream\n if (showAlertmanagers) {\n // Decide if we show @alertmanager label in footer or for every alert\n // we show it in the footer only if every alert has the same set of\n // alertmanagers (and there's > 1 alert to show, there's no footer for 1)\n showAlertmanagersInFooter =\n group.alerts.length > 1 &&\n AllAlertsAreUsingSameAlertmanagers(group.alerts);\n if (showAlertmanagersInFooter) {\n footerAlertmanagers = group.alerts[0].alertmanager.map(am => am.name);\n }\n }\n\n let themedCounters = true;\n let cardBackgroundClass = \"bg-light\";\n if (settingsStore.alertGroupConfig.config.colorTitleBar) {\n const stateList = Object.entries(group.stateCount)\n .filter(([k, v]) => v !== 0)\n .map(([k, _]) => k);\n if (stateList.length === 1) {\n const state = stateList.pop();\n cardBackgroundClass = BackgroundClassMap[state];\n themedCounters = false;\n }\n }\n\n let extraStyle = {};\n if (this.renderConfig.isMenuOpen) {\n extraStyle.zIndex = 100;\n }\n\n return (\n \n \n
    \n \n {this.collapse.value ? null : (\n
    \n
      \n {group.alerts\n .slice(0, this.renderConfig.alertsToRender)\n .map(alert => (\n \n ))}\n {group.alerts.length > this.defaultRenderCount ? (\n
    • \n \n \n {Math.min(\n this.renderConfig.alertsToRender,\n group.alerts.length\n )}\n {\" of \"}\n {group.alerts.length}\n \n \n
    • \n ) : null}\n
    \n
    \n )}\n {this.collapse.value === false && group.alerts.length > 1 ? (\n \n ) : null}\n
    \n \n
    \n );\n }\n }\n);\n\nexport { AlertGroup };\n","// grid sizes, defines how many columns are used depending on the screen width\n// this is config as expected by https://github.com/callmecavs/bricks.js#sizes\nconst GridSizesConfig = (canvasWidth, baseWidth) => {\n const generatedSizes = [];\n for (let i = 2; i < 20; i++) {\n generatedSizes.push({\n mq: `${i * baseWidth}px`,\n columns: i,\n gutter: 0\n });\n }\n return [...[{ columns: 1, gutter: 0 }], ...generatedSizes];\n};\n\nconst GetColumnsCount = (canvasWidth, baseWidth) =>\n [{ mq: \"0px\", columns: 1 }, ...GridSizesConfig(canvasWidth, baseWidth)]\n .filter(gs => gs.mq !== undefined)\n .filter(gs => canvasWidth >= Number.parseInt(gs.mq))\n .map(gs => gs.columns)\n .pop();\n\nconst GetGridElementWidth = (canvasWidth, baseWidth) =>\n Math.floor(canvasWidth / GetColumnsCount(canvasWidth, baseWidth));\n\nexport { GridSizesConfig, GetColumnsCount, GetGridElementWidth };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action, computed } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport FontFaceObserver from \"fontfaceobserver\";\n\nimport moment from \"moment\";\n\nimport { debounce } from \"lodash\";\n\nimport ReactResizeDetector from \"react-resize-detector\";\n\nimport MasonryInfiniteScroller from \"react-masonry-infinite\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircleNotch } from \"@fortawesome/free-solid-svg-icons/faCircleNotch\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { AlertGroup } from \"./AlertGroup\";\nimport { GridSizesConfig, GetGridElementWidth } from \"./GridSize\";\n\nimport \"./index.css\";\n\nconst getGroupStartsAt = g =>\n moment.max(g.alerts.map(a => moment(a.startsAt))).valueOf();\n\nconst getLabelValue = (alertStore, settingsStore, sortOrder, sortLabel, g) => {\n // if timestamp sort is enabled use latest alert for sorting\n if (sortOrder === settingsStore.gridConfig.options.startsAt.value) {\n return getGroupStartsAt(g);\n }\n\n const labelValue =\n g.labels[sortLabel] ||\n g.shared.labels[sortLabel] ||\n g.alerts[0].labels[sortLabel];\n let mappedValue;\n\n // check if we have a mapping for label value\n if (\n labelValue !== undefined &&\n alertStore.settings.values.sorting.valueMapping[sortLabel] !== undefined\n ) {\n mappedValue =\n alertStore.settings.values.sorting.valueMapping[sortLabel][labelValue];\n }\n\n // if we have a mapped value then return it, if not return original value\n return mappedValue !== undefined ? mappedValue : labelValue;\n};\n\nconst compareByTimestamp = (a, b) => {\n const ast = getGroupStartsAt(a);\n const bst = getGroupStartsAt(b);\n if (ast > bst) {\n return -1;\n } else if (ast < bst) {\n return 1;\n } else {\n return 0;\n }\n};\n\nconst AlertGrid = observer(\n class AlertGrid extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired\n };\n\n constructor(props) {\n super(props);\n\n // this is used to track viewport width, when browser window is resized\n // we need to recreate the entire grid object to apply new column count\n // and group size\n this.viewport = observable(\n {\n width: document.body.clientWidth,\n update(width, height) {\n this.width = width;\n },\n get gridSizesConfig() {\n return GridSizesConfig(\n this.width,\n props.settingsStore.gridConfig.config.groupWidth\n );\n },\n get groupWidth() {\n return GetGridElementWidth(\n this.width,\n props.settingsStore.gridConfig.config.groupWidth\n );\n }\n },\n {\n update: action.bound,\n gridSizesConfig: computed,\n groupWidth: computed\n }\n );\n }\n\n // store reference to generated masonry component so we can call it\n // to repack the grid after any component was re-rendered, which could\n // alter its size breaking grid layout\n masonryComponentReference = observable(\n { ref: false },\n {},\n { name: \"Masonry reference\" }\n );\n // store it for later\n storeMasonryRef = action(ref => {\n this.masonryComponentReference.ref = ref;\n });\n // used to call forcePack() which will repack all grid elements\n // (alert groups), this needs to be called if any group size changes\n masonryRepack = debounce(\n action(() => {\n if (this.masonryComponentReference.ref) {\n this.masonryComponentReference.ref.forcePack();\n }\n }),\n 10\n );\n\n // how many alert groups to render\n // FIXME reset on filter change\n initial = 50;\n groupsToRender = observable(\n {\n value: this.initial\n },\n {},\n { name: \"Groups to render\" }\n );\n // how many groups add to render count when user scrolls to the bottom\n loadMoreStep = 30;\n //\n loadMore = action(() => {\n const { alertStore } = this.props;\n\n this.groupsToRender.value = Math.min(\n this.groupsToRender.value + this.loadMoreStep,\n Object.keys(alertStore.data.groups).length\n );\n });\n\n compare = (a, b) => {\n const { alertStore, settingsStore } = this.props;\n\n const useDefaults =\n settingsStore.gridConfig.config.sortOrder ===\n settingsStore.gridConfig.options.default.value;\n\n const sortOrder = useDefaults\n ? alertStore.settings.values.sorting.grid.order\n : settingsStore.gridConfig.config.sortOrder;\n\n // don't sort if sorting is disabled\n if (sortOrder === settingsStore.gridConfig.options.disabled.value)\n return 0;\n\n const sortReverse =\n useDefaults || settingsStore.gridConfig.config.reverseSort === undefined\n ? alertStore.settings.values.sorting.grid.reverse\n : settingsStore.gridConfig.config.reverseSort;\n\n const sortLabel =\n useDefaults || settingsStore.gridConfig.config.sortLabel === undefined\n ? alertStore.settings.values.sorting.grid.label\n : settingsStore.gridConfig.config.sortLabel;\n\n const val = sortReverse ? -1 : 1;\n\n const av = getLabelValue(\n alertStore,\n settingsStore,\n sortOrder,\n sortLabel,\n a\n );\n const bv = getLabelValue(\n alertStore,\n settingsStore,\n sortOrder,\n sortLabel,\n b\n );\n\n if (av === undefined && av === undefined) {\n // if both alerts lack the label they are equal, fallback to timestamps\n return compareByTimestamp(a, b);\n } else if (av === undefined || av > bv) {\n // if first one lacks it it's should be rendered after alerts with that label\n return val;\n } else if (bv === undefined || av < bv) {\n // if the first one has label but the second doesn't then the second should be rendered after the first\n return val * -1;\n } else if (\n sortOrder !== settingsStore.gridConfig.options.startsAt.value\n ) {\n // if values are equal use timestamps as secondary sort, but only\n // if we didn't already sort by timestamps\n return compareByTimestamp(a, b);\n } else {\n return 0;\n }\n };\n\n componentDidMount() {\n // We have font-display:swap set for font assets, this means that on initial\n // render a fallback font might be used and later swapped for the final one\n // (once the final font is loaded). This means that fallback font might\n // render to a different size and the swap can result in component resize.\n // For our grid this resize might leave gaps since everything uses fixed\n // position, so we use font observer and trigger repack when fonts are loaded\n for (const fontWeight of [300, 400, 600]) {\n const font = new FontFaceObserver(\"Open Sans\", {\n weight: fontWeight\n });\n // wait up to 30s, run no-op function on timeout\n font.load(null, 30000).then(this.masonryRepack, () => {});\n }\n }\n\n render() {\n const { alertStore, settingsStore, silenceFormStore } = this.props;\n\n return (\n \n \n \n \n \n }\n >\n {Object.values(alertStore.data.groups)\n .sort(this.compare)\n .slice(0, this.groupsToRender.value)\n .map(group => (\n 1\n }\n afterUpdate={this.masonryRepack}\n alertStore={alertStore}\n settingsStore={settingsStore}\n silenceFormStore={silenceFormStore}\n style={{\n width: this.viewport.groupWidth\n }}\n />\n ))}\n \n \n );\n }\n }\n);\n\nexport { AlertGrid };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons/faExclamationCircle\";\n\nclass FatalError extends Component {\n static propTypes = {\n message: PropTypes.string.isRequired\n };\n\n render() {\n const { message } = this.props;\n return (\n
    \n
    \n

    \n \n

    \n

    {message}

    \n
    \n
    \n );\n }\n}\n\nexport { FatalError };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nclass UpstreamError extends Component {\n static propTypes = {\n name: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired\n };\n\n render() {\n const { name, message } = this.props;\n return (\n
    \n

    \n Alertmanager {name} raised\n an error: {message}\n

    \n
    \n );\n }\n}\n\nexport { UpstreamError };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faRocket } from \"@fortawesome/free-solid-svg-icons/faRocket\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons/faSpinner\";\n\nimport \"csshake/scss/csshake-slow.scss\";\n\nclass UpgradeNeeded extends Component {\n static propTypes = {\n newVersion: PropTypes.string.isRequired\n };\n\n reloadApp = () => {\n window.location.reload();\n };\n\n componentDidMount() {\n this.timer = setTimeout(this.reloadApp, 3000);\n }\n\n componentWillUnmount() {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n render() {\n const { newVersion } = this.props;\n return (\n
    \n
    \n

    \n \n

    \n

    \n \n Upgrading to a new version: {newVersion}\n

    \n
    \n
    \n );\n }\n}\n\nexport { UpgradeNeeded };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { AlertGrid } from \"./AlertGrid\";\nimport { FatalError } from \"./FatalError\";\nimport { UpstreamError } from \"./UpstreamError\";\nimport { UpgradeNeeded } from \"./UpgradeNeeded\";\n\nconst Grid = observer(\n class Grid extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired,\n silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired\n };\n\n render() {\n const { alertStore, settingsStore, silenceFormStore } = this.props;\n\n if (alertStore.status.error) {\n return ;\n }\n\n if (alertStore.info.upgradeNeeded) {\n return ;\n }\n\n if (\n alertStore.data.upstreams.counters &&\n alertStore.data.upstreams.counters.total === 1 &&\n alertStore.data.upstreams.counters.healthy === 0 &&\n alertStore.data.upstreams.instances[0] &&\n alertStore.data.upstreams.instances[0].error !== \"\"\n ) {\n return (\n \n );\n }\n\n return (\n \n {alertStore.data.upstreams.instances\n .filter(upstream => upstream.error !== \"\")\n .map(upstream => (\n \n ))}\n\n \n \n );\n }\n }\n);\n\nexport { Grid };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observable, action } from \"mobx\";\nimport { observer } from \"mobx-react\";\n\nimport moment from \"moment\";\n\nimport { AlertStore, AlertStoreStatuses } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\n\nconst Fetcher = observer(\n class Fetcher extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n settingsStore: PropTypes.instanceOf(Settings).isRequired\n };\n\n lastTick = observable(\n {\n time: moment(0),\n update() {\n this.time = moment();\n }\n },\n {\n update: action\n }\n );\n\n fetchIfIdle = () => {\n const { alertStore, settingsStore } = this.props;\n\n const nextTick = moment(this.lastTick.time).add(\n settingsStore.fetchConfig.config.interval,\n \"seconds\"\n );\n\n const pastDeadline = moment().isSameOrAfter(nextTick);\n\n const status = alertStore.status.value.toString();\n const updateInProgress =\n status === AlertStoreStatuses.Fetching.toString() ||\n status === AlertStoreStatuses.Processing.toString();\n\n if (pastDeadline && !updateInProgress && !alertStore.status.paused) {\n this.lastTick.update();\n alertStore.fetchWithThrottle();\n }\n };\n\n timerTick = () => {\n this.fetchIfIdle();\n };\n\n componentDidMount() {\n // start first fetch once the browser is done doing busy loading\n window.requestAnimationFrame(this.fetchIfIdle);\n this.timer = setInterval(this.timerTick, 1000);\n }\n\n componentDidUpdate() {\n const { alertStore } = this.props;\n\n if (!alertStore.status.paused) {\n this.lastTick.update();\n alertStore.fetchWithThrottle();\n }\n }\n\n componentWillUnmount() {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n render() {\n const { alertStore, settingsStore } = this.props;\n\n return (\n // data-filters is there to register filters for observation in mobx\n f.raw).join(\" \")}\n data-interval={settingsStore.fetchConfig.config.interval}\n />\n );\n }\n }\n);\n\nexport { Fetcher };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { observer } from \"mobx-react\";\n\nimport Favico from \"favico.js\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\n\nconst FaviconBadge = observer(\n class FaviconBadge extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.favicon = new Favico({\n animation: \"none\",\n position: \"down\",\n bgColor: \"#e74c3c\",\n textColor: \"#fff\",\n fontStyle: \"lighter\"\n });\n }\n\n updateBadge = () => {\n const { alertStore } = this.props;\n\n if (alertStore.status.error !== null) {\n this.favicon.badge(\"?\");\n } else {\n this.favicon.badge(alertStore.info.totalAlerts);\n }\n };\n\n componentDidMount() {\n this.updateBadge();\n }\n\n componentDidUpdate() {\n this.updateBadge();\n }\n\n render() {\n const { alertStore } = this.props;\n\n return (\n \n );\n }\n }\n);\n\nexport { FaviconBadge };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport * as Sentry from \"@sentry/browser\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons/faExclamationCircle\";\n\nconst InternalError = ({ message, secondsLeft }) => (\n
    \n
    \n

    \n \n Internal error\n

    \n

    {message}

    \n

    \n This page will auto refresh in {secondsLeft}s\n

    \n
    \n
    \n);\nInternalError.propTypes = {\n message: PropTypes.node.isRequired,\n secondsLeft: PropTypes.number.isRequired\n};\n\nclass ErrorBoundary extends Component {\n static propTypes = {\n children: PropTypes.any\n };\n\n constructor(props) {\n super(props);\n this.timer = null;\n this.state = { cachedError: null, reloadSeconds: 60 };\n }\n\n reloadApp = () => {\n if (this.state.reloadSeconds <= 1) {\n window.location.reload();\n } else {\n this.setState({ reloadSeconds: this.state.reloadSeconds - 1 });\n }\n };\n\n componentDidCatch(error, errorInfo) {\n this.setState({ cachedError: error });\n Sentry.configureScope(scope => {\n Object.keys(errorInfo).forEach(key => {\n scope.setExtra(key, errorInfo[key]);\n });\n });\n Sentry.captureException(error);\n // reload after 60s, this is to fix wall monitors automatically\n // but only if the timer isn't set yet\n if (this.timer === null) {\n this.timer = setInterval(this.reloadApp, 1000);\n }\n }\n\n render() {\n if (this.state.cachedError !== null) {\n return (\n \n );\n }\n return this.props.children;\n }\n}\n\nexport { ErrorBoundary };\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { Provider } from \"mobx-react\";\n\nimport { AlertStore, DecodeLocationSearch } from \"Stores/AlertStore\";\nimport { Settings } from \"Stores/Settings\";\nimport { SilenceFormStore } from \"Stores/SilenceFormStore\";\nimport { NavBar } from \"Components/NavBar\";\nimport { Grid } from \"Components/Grid\";\nimport { Fetcher } from \"Components/Fetcher\";\nimport { FaviconBadge } from \"Components/FaviconBadge\";\nimport { ErrorBoundary } from \"./ErrorBoundary\";\n\nimport \"./App.scss\";\n\nclass App extends Component {\n static propTypes = {\n defaultFilters: PropTypes.arrayOf(PropTypes.string).isRequired\n };\n\n constructor(props) {\n super(props);\n\n const { defaultFilters } = this.props;\n\n this.silenceFormStore = new SilenceFormStore();\n this.settingsStore = new Settings();\n\n let filters;\n\n // parse and decode request query args\n const p = DecodeLocationSearch(window.location.search);\n\n // p.defaultsUsed means that karma URI didn't have ?q=foo query args\n if (p.defaultsUsed) {\n // no ?q=foo set, use defaults saved by the user or from backend config\n if (this.settingsStore.savedFilters.config.present) {\n filters = this.settingsStore.savedFilters.config.filters;\n } else {\n filters = defaultFilters;\n }\n } else {\n // user passed ?q=foo, use it as initial filters\n filters = p.params.q;\n }\n\n this.alertStore = new AlertStore(filters);\n }\n\n render() {\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport { App };\n","// MUST be first thing we import\n// https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md\n// IE is not supported (lacks Proxy) but that pollyfill provides fetch and other needed features\nimport 'react-app-polyfill/ie11';\nimport \"react-app-polyfill/stable\";\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport Moment from \"react-moment\";\n\nimport { SettingsElement, SetupSentry, ParseDefaultFilters } from \"./AppBoot\";\nimport { App } from \"./App\";\n\nconst settingsElement = SettingsElement();\n\nSetupSentry(settingsElement);\n\n// global timer for updating timestamps to human readable offsets\n// this needs to be run before any instance\n// https://www.npmjs.com/package/react-moment#pooled-timer\nMoment.startPooledTimer();\n\nconst defaultFilters = ParseDefaultFilters(settingsElement);\n\n// https://wetainment.com/testing-indexjs/\nexport default ReactDOM.render(\n ,\n document.getElementById(\"root\") || document.createElement(\"div\")\n);\n","import { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { AlertStore } from \"Stores/AlertStore\";\nimport {\n StaticColorLabelClassMap,\n DefaultLabelClassMap,\n AlertNameLabelClassMap,\n StateLabelClassMap\n} from \"Common/Colors\";\nimport { QueryOperators, FormatQuery, StaticLabels } from \"Common/Query\";\n\nimport \"./index.scss\";\n\nconst isBackgroundDark = brightness => brightness <= 125;\n\n// base class for shared code, not used directly\nclass BaseLabel extends Component {\n static propTypes = {\n alertStore: PropTypes.instanceOf(AlertStore).isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n };\n\n getClassAndStyle(name, value, extraClass, baseClass) {\n const { alertStore } = this.props;\n\n const elementType = baseClass || \"badge\";\n\n const data = {\n style: {},\n className: \"\",\n baseClassNames: [\"components-label\", elementType],\n colorClassNames: []\n };\n\n if (name === StaticLabels.AlertName) {\n data.colorClassNames.push(AlertNameLabelClassMap[elementType]);\n } else if (name === StaticLabels.State) {\n data.colorClassNames.push(\n StateLabelClassMap[value]\n ? `${elementType}-${StateLabelClassMap[value]}`\n : DefaultLabelClassMap[elementType]\n );\n } else if (alertStore.settings.values.staticColorLabels.includes(name)) {\n data.colorClassNames.push(StaticColorLabelClassMap[elementType]);\n } else {\n const c = alertStore.data.getColorData(name, value);\n if (c) {\n // if there's color information use it\n data.style[\"backgroundColor\"] = `rgba(${[\n c.background.red,\n c.background.green,\n c.background.blue,\n c.background.alpha\n ].join(\", \")})`;\n\n data.colorClassNames.push(\n isBackgroundDark(c.brightness)\n ? \"components-label-dark\"\n : \"components-label-bright\"\n );\n } else {\n // if not fall back to class\n data.colorClassNames.push(DefaultLabelClassMap[elementType]);\n }\n }\n data.className = `${[...data.baseClassNames, ...data.colorClassNames].join(\n \" \"\n )} ${extraClass || \"\"}`;\n\n return data;\n }\n\n handleClick = event => {\n // left click => apply foo=bar filter\n // left click + alt => apply foo!=bar filter\n const operator =\n event.altKey === true ? QueryOperators.NotEqual : QueryOperators.Equal;\n\n event.preventDefault();\n\n const { name, value, alertStore } = this.props;\n alertStore.filters.addFilter(FormatQuery(name, operator, value));\n };\n}\n\nexport { BaseLabel };\n","import PropTypes from \"prop-types\";\n\nconst AlertState = PropTypes.oneOf([\"unprocessed\", \"active\", \"suppressed\"]);\n\nconst Annotation = PropTypes.exact({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n visible: PropTypes.bool.isRequired,\n isLink: PropTypes.bool.isRequired\n});\n\nconst APIAlertAlertmanagerState = PropTypes.exact({\n name: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n state: AlertState.isRequired,\n startsAt: PropTypes.string.isRequired,\n endsAt: PropTypes.string.isRequired,\n source: PropTypes.string.isRequired,\n silencedBy: PropTypes.arrayOf(PropTypes.string).isRequired,\n inhibitedBy: PropTypes.arrayOf(PropTypes.string).isRequired\n});\n\nconst APIAlert = PropTypes.exact({\n annotations: PropTypes.arrayOf(Annotation).isRequired,\n labels: PropTypes.object.isRequired,\n startsAt: PropTypes.string.isRequired,\n endsAt: PropTypes.string.isRequired,\n state: AlertState.isRequired,\n alertmanager: PropTypes.arrayOf(APIAlertAlertmanagerState).isRequired,\n receiver: PropTypes.string.isRequired\n});\n\nconst APIGroup = PropTypes.exact({\n receiver: PropTypes.string.isRequired,\n labels: PropTypes.object.isRequired,\n alerts: PropTypes.arrayOf(APIAlert),\n id: PropTypes.string.isRequired,\n hash: PropTypes.string.isRequired,\n alertmanagerCount: PropTypes.objectOf(PropTypes.number).isRequired,\n stateCount: PropTypes.exact({\n active: PropTypes.number.isRequired,\n suppressed: PropTypes.number.isRequired,\n unprocessed: PropTypes.number.isRequired\n }),\n shared: PropTypes.exact({\n annotations: PropTypes.arrayOf(Annotation).isRequired,\n labels: PropTypes.object.isRequired,\n silences: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).isRequired\n }).isRequired\n});\n\nconst APISilenceMatcher = PropTypes.exact({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n isRegex: PropTypes.bool.isRequired\n});\n\nconst APISilence = PropTypes.exact({\n id: PropTypes.string.isRequired,\n matchers: PropTypes.arrayOf(APISilenceMatcher).isRequired,\n startsAt: PropTypes.string.isRequired,\n endsAt: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n createdBy: PropTypes.string.isRequired,\n comment: PropTypes.string.isRequired,\n jiraID: PropTypes.string.isRequired,\n jiraURL: PropTypes.string.isRequired\n});\n\nconst APIAlertmanagerUpstream = PropTypes.exact({\n name: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n uri: PropTypes.string.isRequired,\n publicURI: PropTypes.string.isRequired,\n error: PropTypes.string.isRequired,\n version: PropTypes.string.isRequired,\n clusterMembers: PropTypes.arrayOf(PropTypes.string).isRequired\n});\n\nexport {\n APIAlert,\n APIGroup,\n APISilence,\n APISilenceMatcher,\n APIAlertAlertmanagerState,\n APIAlertmanagerUpstream\n};\n"],"sourceRoot":""}